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-node/index.js
CHANGED
|
@@ -55,7 +55,7 @@ var package_default;
|
|
|
55
55
|
var init_package = __esm(() => {
|
|
56
56
|
package_default = {
|
|
57
57
|
name: "oh-my-opencode",
|
|
58
|
-
version: "5.0.0-beta.
|
|
58
|
+
version: "5.0.0-beta.44",
|
|
59
59
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
60
60
|
main: "./dist/index.js",
|
|
61
61
|
types: "dist/index.d.ts",
|
|
@@ -145,6 +145,7 @@ var init_package = __esm(() => {
|
|
|
145
145
|
"packages/omo-codex/plugin/components/telemetry/dist/cli.js",
|
|
146
146
|
"packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
|
|
147
147
|
"packages/omo-codex/plugin/components/ulw-loop/dist/cli.js",
|
|
148
|
+
"packages/prompts-core/prompts/ultrawork/codex.md",
|
|
148
149
|
"packages/omo-codex/plugin/.codex-plugin",
|
|
149
150
|
"!packages/omo-codex/plugin/node_modules",
|
|
150
151
|
"!packages/omo-codex/plugin/**/node_modules",
|
|
@@ -187,14 +188,14 @@ var init_package = __esm(() => {
|
|
|
187
188
|
prepare: "bun run build",
|
|
188
189
|
postinstall: "node postinstall.mjs",
|
|
189
190
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
190
|
-
"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",
|
|
191
|
+
"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",
|
|
191
192
|
typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
192
193
|
"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",
|
|
193
194
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
194
|
-
test: "bun test",
|
|
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 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
|
+
test: "bun test --timeout 20000",
|
|
196
|
+
"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",
|
|
196
197
|
"test:fast": "bun run script/test-fast.ts",
|
|
197
|
-
"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",
|
|
198
|
+
"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",
|
|
198
199
|
"test:windows-codex": "bun run test:codex",
|
|
199
200
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
200
201
|
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
|
|
@@ -238,7 +239,7 @@ var init_package = __esm(() => {
|
|
|
238
239
|
zod: "^4.4.3"
|
|
239
240
|
},
|
|
240
241
|
devDependencies: {
|
|
241
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
242
|
+
"@code-yeongyu/senpi": "2026.9.5-3",
|
|
242
243
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
243
244
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
244
245
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -279,18 +280,18 @@ var init_package = __esm(() => {
|
|
|
279
280
|
typescript: "^7.0.2"
|
|
280
281
|
},
|
|
281
282
|
optionalDependencies: {
|
|
282
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
283
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
284
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
285
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
286
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
287
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
288
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
289
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
293
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
283
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.44",
|
|
284
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.44",
|
|
285
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.44",
|
|
286
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.44",
|
|
287
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.44",
|
|
288
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.44",
|
|
289
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.44",
|
|
290
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.44",
|
|
291
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.44",
|
|
292
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.44",
|
|
293
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.44",
|
|
294
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.44"
|
|
294
295
|
},
|
|
295
296
|
overrides: {
|
|
296
297
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -7127,7 +7128,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7127
7128
|
fallbackChain: [
|
|
7128
7129
|
{
|
|
7129
7130
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
7130
|
-
model: "claude-fable-5",
|
|
7131
|
+
model: "claude-fable-5-1",
|
|
7131
7132
|
variant: "xhigh"
|
|
7132
7133
|
},
|
|
7133
7134
|
{
|
|
@@ -7153,10 +7154,9 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7153
7154
|
},
|
|
7154
7155
|
momus: {
|
|
7155
7156
|
fallbackChain: [
|
|
7156
|
-
{ providers: ["openai", "openai-codex"], model: "gpt-
|
|
7157
|
-
{ providers: ["github-copilot"], model: "gpt-
|
|
7158
|
-
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-
|
|
7159
|
-
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
|
|
7157
|
+
{ providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
|
|
7158
|
+
{ providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
|
|
7159
|
+
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
|
|
7160
7160
|
{
|
|
7161
7161
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
7162
7162
|
model: "claude-opus-5",
|
|
@@ -7208,6 +7208,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7208
7208
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
7209
7209
|
"visual-engineering": {
|
|
7210
7210
|
fallbackChain: [
|
|
7211
|
+
{
|
|
7212
|
+
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7213
|
+
model: "claude-fable-5-1",
|
|
7214
|
+
variant: "max"
|
|
7215
|
+
},
|
|
7211
7216
|
{
|
|
7212
7217
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7213
7218
|
model: "claude-opus-5",
|
|
@@ -7217,17 +7222,14 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7217
7222
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7218
7223
|
model: "kimi-k3",
|
|
7219
7224
|
variant: "max"
|
|
7220
|
-
},
|
|
7221
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.2", variant: "max" },
|
|
7222
|
-
{
|
|
7223
|
-
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7224
|
-
model: "gpt-5.6-sol",
|
|
7225
|
-
variant: "medium"
|
|
7226
7225
|
}
|
|
7227
7226
|
]
|
|
7228
7227
|
},
|
|
7229
7228
|
ultrabrain: {
|
|
7230
7229
|
fallbackChain: [
|
|
7230
|
+
{ providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
|
|
7231
|
+
{ providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
|
|
7232
|
+
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
|
|
7231
7233
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
|
|
7232
7234
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
|
|
7233
7235
|
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
|
|
@@ -7235,6 +7237,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7235
7237
|
},
|
|
7236
7238
|
deep: {
|
|
7237
7239
|
fallbackChain: [
|
|
7240
|
+
{
|
|
7241
|
+
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7242
|
+
model: "gpt-6-astra",
|
|
7243
|
+
variant: "high"
|
|
7244
|
+
},
|
|
7238
7245
|
{
|
|
7239
7246
|
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7240
7247
|
model: "gpt-5.6-sol",
|
|
@@ -7246,8 +7253,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7246
7253
|
fallbackChain: [
|
|
7247
7254
|
{
|
|
7248
7255
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7249
|
-
model: "claude-fable-5",
|
|
7250
|
-
variant: "
|
|
7256
|
+
model: "claude-fable-5-1",
|
|
7257
|
+
variant: "max"
|
|
7251
7258
|
},
|
|
7252
7259
|
{
|
|
7253
7260
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
@@ -7305,6 +7312,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7305
7312
|
},
|
|
7306
7313
|
"unspecified-high": {
|
|
7307
7314
|
fallbackChain: [
|
|
7315
|
+
{
|
|
7316
|
+
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7317
|
+
model: "gpt-6-astra",
|
|
7318
|
+
variant: "high"
|
|
7319
|
+
},
|
|
7308
7320
|
{
|
|
7309
7321
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7310
7322
|
model: "claude-opus-5",
|
|
@@ -7320,17 +7332,16 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7320
7332
|
},
|
|
7321
7333
|
writing: {
|
|
7322
7334
|
fallbackChain: [
|
|
7323
|
-
{
|
|
7324
|
-
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7325
|
-
model: "kimi-k3",
|
|
7326
|
-
variant: "low"
|
|
7327
|
-
},
|
|
7328
7335
|
{
|
|
7329
7336
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7330
|
-
model: "claude-
|
|
7331
|
-
variant: "
|
|
7337
|
+
model: "claude-fable-5-1",
|
|
7338
|
+
variant: "medium"
|
|
7332
7339
|
},
|
|
7333
|
-
{
|
|
7340
|
+
{
|
|
7341
|
+
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7342
|
+
model: "kimi-k3",
|
|
7343
|
+
variant: "max"
|
|
7344
|
+
}
|
|
7334
7345
|
]
|
|
7335
7346
|
}
|
|
7336
7347
|
};
|
|
@@ -7433,11 +7444,11 @@ var init_model_capability_aliases = __esm(() => {
|
|
|
7433
7444
|
EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
|
|
7434
7445
|
PATTERN_ALIAS_RULES = [
|
|
7435
7446
|
{
|
|
7436
|
-
ruleID: "openai-gpt-
|
|
7437
|
-
description: "Normalizes OpenCode's OpenAI GPT
|
|
7447
|
+
ruleID: "openai-gpt-fast-service-tier-alias",
|
|
7448
|
+
description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
|
|
7438
7449
|
providerIDs: ["openai"],
|
|
7439
7450
|
allowedSubproviderHosts: ["vercel"],
|
|
7440
|
-
match: (normalizedModelID) => /^gpt-5\.6-(?:sol|terra|luna)-fast$/.test(normalizedModelID),
|
|
7451
|
+
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-astra)-fast$/.test(normalizedModelID),
|
|
7441
7452
|
canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
|
|
7442
7453
|
},
|
|
7443
7454
|
{
|
|
@@ -7577,6 +7588,14 @@ var init_model_capability_heuristics = __esm(() => {
|
|
|
7577
7588
|
reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
|
|
7578
7589
|
supportsTemperature: false
|
|
7579
7590
|
},
|
|
7591
|
+
{
|
|
7592
|
+
family: "gpt-6",
|
|
7593
|
+
includes: ["gpt-6"],
|
|
7594
|
+
variants: ["low", "medium", "high", "xhigh", "max"],
|
|
7595
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
7596
|
+
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
7597
|
+
supportsTemperature: false
|
|
7598
|
+
},
|
|
7580
7599
|
{
|
|
7581
7600
|
family: "gpt-5",
|
|
7582
7601
|
includes: ["gpt-5"],
|
|
@@ -7942,6 +7961,37 @@ var init_supplemental_entries = __esm(() => {
|
|
|
7942
7961
|
output: 262144
|
|
7943
7962
|
}
|
|
7944
7963
|
},
|
|
7964
|
+
"claude-fable-5-1": {
|
|
7965
|
+
id: "claude-fable-5-1",
|
|
7966
|
+
family: "claude-fable",
|
|
7967
|
+
reasoning: true,
|
|
7968
|
+
temperature: false,
|
|
7969
|
+
toolCall: true,
|
|
7970
|
+
modalities: {
|
|
7971
|
+
input: ["text", "image", "pdf"],
|
|
7972
|
+
output: ["text"]
|
|
7973
|
+
},
|
|
7974
|
+
limit: {
|
|
7975
|
+
context: 1e6,
|
|
7976
|
+
output: 128000
|
|
7977
|
+
}
|
|
7978
|
+
},
|
|
7979
|
+
"gpt-6-astra": {
|
|
7980
|
+
id: "gpt-6-astra",
|
|
7981
|
+
family: "gpt",
|
|
7982
|
+
reasoning: true,
|
|
7983
|
+
temperature: false,
|
|
7984
|
+
toolCall: true,
|
|
7985
|
+
modalities: {
|
|
7986
|
+
input: ["text", "image"],
|
|
7987
|
+
output: ["text"]
|
|
7988
|
+
},
|
|
7989
|
+
limit: {
|
|
7990
|
+
context: 1050000,
|
|
7991
|
+
input: 922000,
|
|
7992
|
+
output: 128000
|
|
7993
|
+
}
|
|
7994
|
+
},
|
|
7945
7995
|
"gpt-5.6-sol": {
|
|
7946
7996
|
id: "gpt-5.6-sol",
|
|
7947
7997
|
family: "gpt",
|
|
@@ -8017,8 +8067,8 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8017
8067
|
output: ["text"]
|
|
8018
8068
|
},
|
|
8019
8069
|
limit: {
|
|
8020
|
-
context:
|
|
8021
|
-
input:
|
|
8070
|
+
context: 1050000,
|
|
8071
|
+
input: 922000,
|
|
8022
8072
|
output: 128000
|
|
8023
8073
|
}
|
|
8024
8074
|
},
|
|
@@ -8282,7 +8332,7 @@ function getOverride(modelID) {
|
|
|
8282
8332
|
function getProviderOverride(providerID, modelID) {
|
|
8283
8333
|
if (providerID.trim().toLowerCase() !== "github-copilot")
|
|
8284
8334
|
return;
|
|
8285
|
-
return
|
|
8335
|
+
return GITHUB_COPILOT_GPT_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT_OVERRIDE : undefined;
|
|
8286
8336
|
}
|
|
8287
8337
|
function stripSameProviderPrefix(providerID, modelID) {
|
|
8288
8338
|
const prefix = `${providerID.trim()}/`;
|
|
@@ -8421,14 +8471,14 @@ function getModelCapabilities(input) {
|
|
|
8421
8471
|
}
|
|
8422
8472
|
};
|
|
8423
8473
|
}
|
|
8424
|
-
var MODEL_ID_OVERRIDES,
|
|
8474
|
+
var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT_MODEL, GITHUB_COPILOT_GPT_OVERRIDE;
|
|
8425
8475
|
var init_get_model_capabilities = __esm(() => {
|
|
8426
8476
|
init_model_capability_aliases();
|
|
8427
8477
|
init_model_capability_heuristics();
|
|
8428
8478
|
init_model_string_parser();
|
|
8429
8479
|
MODEL_ID_OVERRIDES = {};
|
|
8430
|
-
|
|
8431
|
-
|
|
8480
|
+
GITHUB_COPILOT_GPT_MODEL = /(?:^|\/)gpt-[56](?:[.-]|$)/;
|
|
8481
|
+
GITHUB_COPILOT_GPT_OVERRIDE = {
|
|
8432
8482
|
variants: ["low", "medium", "high"],
|
|
8433
8483
|
reasoningEfforts: ["none", "minimal", "low", "medium", "high"]
|
|
8434
8484
|
};
|
|
@@ -8443,6 +8493,9 @@ var init_model_capabilities = __esm(() => {
|
|
|
8443
8493
|
// packages/model-core/src/context-limit-resolver.ts
|
|
8444
8494
|
var init_context_limit_resolver = () => {};
|
|
8445
8495
|
|
|
8496
|
+
// packages/model-core/src/context-overflow.ts
|
|
8497
|
+
var init_context_overflow = () => {};
|
|
8498
|
+
|
|
8446
8499
|
// packages/model-core/src/model-capabilities-snapshot.ts
|
|
8447
8500
|
function isRecord3(value) {
|
|
8448
8501
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -8579,6 +8632,7 @@ var init_src2 = __esm(() => {
|
|
|
8579
8632
|
init_runtime_fallback_model();
|
|
8580
8633
|
init_model_capabilities();
|
|
8581
8634
|
init_context_limit_resolver();
|
|
8635
|
+
init_context_overflow();
|
|
8582
8636
|
});
|
|
8583
8637
|
|
|
8584
8638
|
// packages/omo-opencode/src/shared/model-sanitizer.ts
|
|
@@ -8780,22 +8834,6 @@ var init_agent_display_names = __esm(() => {
|
|
|
8780
8834
|
"athena-junior (council)": "athena-junior"
|
|
8781
8835
|
};
|
|
8782
8836
|
});
|
|
8783
|
-
// packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
|
|
8784
|
-
var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8785
|
-
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
8786
|
-
</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;
|
|
8787
|
-
var init_anthropic_categories = __esm(() => {
|
|
8788
|
-
ANTHROPIC_CATEGORIES = [
|
|
8789
|
-
{
|
|
8790
|
-
name: "unspecified-high",
|
|
8791
|
-
config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
|
|
8792
|
-
description: "Tasks that don't fit other categories, high effort required",
|
|
8793
|
-
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
8794
|
-
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
|
|
8795
|
-
}
|
|
8796
|
-
];
|
|
8797
|
-
});
|
|
8798
|
-
|
|
8799
8837
|
// packages/omo-opencode/src/tools/delegate-task/google-categories.ts
|
|
8800
8838
|
var VISUAL_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8801
8839
|
You are working on VISUAL/UI tasks.
|
|
@@ -8904,13 +8942,13 @@ var init_google_categories = __esm(() => {
|
|
|
8904
8942
|
GOOGLE_CATEGORIES = [
|
|
8905
8943
|
{
|
|
8906
8944
|
name: "visual-engineering",
|
|
8907
|
-
config: { model: "anthropic/claude-
|
|
8908
|
-
description: "
|
|
8945
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "max" },
|
|
8946
|
+
description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
|
|
8909
8947
|
promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
|
|
8910
8948
|
},
|
|
8911
8949
|
{
|
|
8912
8950
|
name: "artistry",
|
|
8913
|
-
config: { model: "anthropic/claude-fable-5", variant: "
|
|
8951
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "max" },
|
|
8914
8952
|
description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
|
|
8915
8953
|
promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
|
|
8916
8954
|
}
|
|
@@ -8947,7 +8985,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
8947
8985
|
KIMI_CATEGORIES = [
|
|
8948
8986
|
{
|
|
8949
8987
|
name: "writing",
|
|
8950
|
-
config: { model: "
|
|
8988
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "medium" },
|
|
8951
8989
|
description: "Documentation, prose, technical writing",
|
|
8952
8990
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
8953
8991
|
}
|
|
@@ -8966,16 +9004,58 @@ function isGpt5_6Model(model) {
|
|
|
8966
9004
|
const modelName = extractModelName2(model).toLowerCase();
|
|
8967
9005
|
return modelName.includes("gpt-5.6") || modelName.includes("gpt-5-6");
|
|
8968
9006
|
}
|
|
9007
|
+
function isGpt6Model(model) {
|
|
9008
|
+
const modelName = extractModelName2(model).toLowerCase();
|
|
9009
|
+
return modelName.includes("gpt-6");
|
|
9010
|
+
}
|
|
8969
9011
|
var init_types = () => {};
|
|
8970
9012
|
|
|
8971
9013
|
// packages/omo-opencode/src/tools/delegate-task/openai-categories.ts
|
|
9014
|
+
function resolveUltrabrainCategoryPromptAppend(model) {
|
|
9015
|
+
if (model && isGpt6Model(model)) {
|
|
9016
|
+
return ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9017
|
+
}
|
|
9018
|
+
return ULTRABRAIN_CATEGORY_PROMPT_APPEND;
|
|
9019
|
+
}
|
|
8972
9020
|
function resolveDeepCategoryPromptAppend(model) {
|
|
9021
|
+
if (model && isGpt6Model(model)) {
|
|
9022
|
+
return DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9023
|
+
}
|
|
8973
9024
|
if (model && (isGpt5_5Model(model) || isGpt5_6Model(model))) {
|
|
8974
9025
|
return DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5;
|
|
8975
9026
|
}
|
|
8976
9027
|
return DEEP_CATEGORY_PROMPT_APPEND;
|
|
8977
9028
|
}
|
|
8978
|
-
|
|
9029
|
+
function resolveUnspecifiedHighCategoryPromptAppend(model) {
|
|
9030
|
+
if (model && isGpt6Model(model)) {
|
|
9031
|
+
return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9032
|
+
}
|
|
9033
|
+
return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND;
|
|
9034
|
+
}
|
|
9035
|
+
var ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="ultrabrain">
|
|
9036
|
+
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.
|
|
9037
|
+
|
|
9038
|
+
Success means:
|
|
9039
|
+
- every load-bearing claim cites evidence from this turn: a file and line read, a command run, a test executed;
|
|
9040
|
+
- 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;
|
|
9041
|
+
- the conclusion survived your own attempt to break it, and the answer names the strongest counter-case you looked for;
|
|
9042
|
+
- rejected alternatives carry the reason that decided against them, and open assumptions are stated so the orchestrator can overturn them;
|
|
9043
|
+
- one decision-complete recommendation, actionable without a follow-up question.
|
|
9044
|
+
|
|
9045
|
+
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.
|
|
9046
|
+
</Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="deep">
|
|
9047
|
+
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.
|
|
9048
|
+
|
|
9049
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9050
|
+
|
|
9051
|
+
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.
|
|
9052
|
+
|
|
9053
|
+
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.
|
|
9054
|
+
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="unspecified-high">
|
|
9055
|
+
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.
|
|
9056
|
+
|
|
9057
|
+
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.
|
|
9058
|
+
</Category_Context>`, ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8979
9059
|
You are working on DEEP LOGICAL REASONING / COMPLEX ARCHITECTURE tasks.
|
|
8980
9060
|
|
|
8981
9061
|
**CRITICAL - CODE STYLE REQUIREMENTS (NON-NEGOTIABLE)**:
|
|
@@ -9000,6 +9080,8 @@ You are working on GOAL-ORIENTED AUTONOMOUS tasks.
|
|
|
9000
9080
|
|
|
9001
9081
|
You are NOT an interactive assistant. You are an autonomous problem-solver.
|
|
9002
9082
|
|
|
9083
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9084
|
+
|
|
9003
9085
|
BEFORE making ANY changes:
|
|
9004
9086
|
1. Silently explore the codebase extensively (5-15 minutes of reading is normal)
|
|
9005
9087
|
2. Read related files, trace dependencies, understand the full context
|
|
@@ -9017,6 +9099,8 @@ Minimal status updates. Focus on results, not play-by-play. Report completion wi
|
|
|
9017
9099
|
</Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 = `<Category_Context name="deep">
|
|
9018
9100
|
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.
|
|
9019
9101
|
|
|
9102
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9103
|
+
|
|
9020
9104
|
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.
|
|
9021
9105
|
|
|
9022
9106
|
# How deep mode adjusts the base behavior
|
|
@@ -9050,23 +9134,27 @@ Approach:
|
|
|
9050
9134
|
</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>
|
|
9051
9135
|
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
9052
9136
|
</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>
|
|
9053
|
-
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`,
|
|
9137
|
+
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
9138
|
+
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
9139
|
+
</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;
|
|
9054
9140
|
var init_openai_categories = __esm(() => {
|
|
9055
9141
|
init_types();
|
|
9142
|
+
GPT_FLAGSHIP_GATE_MODELS = ["gpt-6-astra", "gpt-5.6-sol"];
|
|
9056
9143
|
OPENAI_CATEGORIES = [
|
|
9057
9144
|
{
|
|
9058
9145
|
name: "ultrabrain",
|
|
9059
|
-
config: { model: "openai/gpt-
|
|
9146
|
+
config: { model: "openai/gpt-6-astra", variant: "max" },
|
|
9060
9147
|
description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
|
|
9061
|
-
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND
|
|
9148
|
+
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
|
|
9149
|
+
resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
|
|
9062
9150
|
},
|
|
9063
9151
|
{
|
|
9064
9152
|
name: "deep",
|
|
9065
|
-
config: { model: "openai/gpt-
|
|
9066
|
-
description: "
|
|
9153
|
+
config: { model: "openai/gpt-6-astra", variant: "high" },
|
|
9154
|
+
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 — multiple goals must fan out as parallel `deep` calls, never bundled into one.",
|
|
9067
9155
|
promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
|
|
9068
9156
|
resolvePromptAppend: resolveDeepCategoryPromptAppend,
|
|
9069
|
-
requiresModel:
|
|
9157
|
+
requiresModel: GPT_FLAGSHIP_GATE_MODELS
|
|
9070
9158
|
},
|
|
9071
9159
|
{
|
|
9072
9160
|
name: "quick",
|
|
@@ -9081,6 +9169,14 @@ var init_openai_categories = __esm(() => {
|
|
|
9081
9169
|
description: "Tasks that don't fit other categories, low effort required",
|
|
9082
9170
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
9083
9171
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
9172
|
+
},
|
|
9173
|
+
{
|
|
9174
|
+
name: "unspecified-high",
|
|
9175
|
+
config: { model: "openai/gpt-6-astra", variant: "high" },
|
|
9176
|
+
description: "Tasks that don't fit other categories, high effort required",
|
|
9177
|
+
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
9178
|
+
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
9179
|
+
resolvePromptAppend: resolveUnspecifiedHighCategoryPromptAppend
|
|
9084
9180
|
}
|
|
9085
9181
|
];
|
|
9086
9182
|
});
|
|
@@ -9091,14 +9187,12 @@ function buildCategoryRecord(selector) {
|
|
|
9091
9187
|
}
|
|
9092
9188
|
var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_CALLER_GUIDANCE, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
|
|
9093
9189
|
var init_builtin_categories = __esm(() => {
|
|
9094
|
-
init_anthropic_categories();
|
|
9095
9190
|
init_google_categories();
|
|
9096
9191
|
init_kimi_categories();
|
|
9097
9192
|
init_openai_categories();
|
|
9098
9193
|
BUILTIN_CATEGORIES = [
|
|
9099
9194
|
...GOOGLE_CATEGORIES,
|
|
9100
9195
|
...OPENAI_CATEGORIES,
|
|
9101
|
-
...ANTHROPIC_CATEGORIES,
|
|
9102
9196
|
...KIMI_CATEGORIES
|
|
9103
9197
|
];
|
|
9104
9198
|
DEFAULT_CATEGORIES = buildCategoryRecord((definition) => definition.config);
|
|
@@ -9106,7 +9200,10 @@ var init_builtin_categories = __esm(() => {
|
|
|
9106
9200
|
CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition) => definition.description);
|
|
9107
9201
|
CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition) => definition.callerGuidance);
|
|
9108
9202
|
CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.resolvePromptAppend !== undefined).map((definition) => [definition.name, definition.resolvePromptAppend]));
|
|
9109
|
-
BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
|
|
9203
|
+
BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
|
|
9204
|
+
definition.name,
|
|
9205
|
+
typeof definition.requiresModel === "string" ? [definition.requiresModel] : definition.requiresModel
|
|
9206
|
+
]));
|
|
9110
9207
|
});
|
|
9111
9208
|
|
|
9112
9209
|
// packages/omo-opencode/src/tools/delegate-task/constants.ts
|
|
@@ -12598,8 +12695,8 @@ var init_model_capabilities_generated = __esm(() => {
|
|
|
12598
12695
|
]
|
|
12599
12696
|
},
|
|
12600
12697
|
limit: {
|
|
12601
|
-
context:
|
|
12602
|
-
input:
|
|
12698
|
+
context: 1050000,
|
|
12699
|
+
input: 922000,
|
|
12603
12700
|
output: 128000
|
|
12604
12701
|
}
|
|
12605
12702
|
},
|
|
@@ -82494,7 +82591,6 @@ var init_memory = __esm(() => {
|
|
|
82494
82591
|
OmoMemorySettingsSchema = object({
|
|
82495
82592
|
enabled: boolean2().default(true),
|
|
82496
82593
|
agent: string2().min(1).default("auto"),
|
|
82497
|
-
tool_exposure: _enum2(["direct", "search"]).default("direct"),
|
|
82498
82594
|
reflection: OmoMemoryReflectionSchema.default({
|
|
82499
82595
|
enabled: true,
|
|
82500
82596
|
trigger: { step_count: 25, on_compaction: true },
|
|
@@ -82525,7 +82621,6 @@ var init_memory = __esm(() => {
|
|
|
82525
82621
|
OmoMemorySettingsLayerSchema = object({
|
|
82526
82622
|
enabled: boolean2().optional(),
|
|
82527
82623
|
agent: string2().min(1).optional(),
|
|
82528
|
-
tool_exposure: _enum2(["direct", "search"]).optional(),
|
|
82529
82624
|
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
82530
82625
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
82531
82626
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
@@ -86566,20 +86661,20 @@ var init_config_manager = __esm(() => {
|
|
|
86566
86661
|
|
|
86567
86662
|
// packages/telemetry-core/src/activity-state.ts
|
|
86568
86663
|
import { existsSync as existsSync25, mkdirSync as mkdirSync8, readFileSync as readFileSync12 } from "node:fs";
|
|
86569
|
-
import { basename as basename8, join as
|
|
86664
|
+
import { basename as basename8, join as join51 } from "node:path";
|
|
86570
86665
|
function resolveTelemetryStateDir(product, options = {}) {
|
|
86571
86666
|
const dataDir = resolveXdgDataDir(product.cacheDirName, {
|
|
86572
86667
|
env: options.env,
|
|
86573
86668
|
osProvider: options.osProvider
|
|
86574
86669
|
});
|
|
86575
|
-
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined :
|
|
86670
|
+
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join51(options.env.XDG_DATA_HOME, product.cacheDirName);
|
|
86576
86671
|
if (dataDir === xdgStateDir || xdgStateDir === undefined && basename8(dataDir) === product.cacheDirName) {
|
|
86577
86672
|
return dataDir;
|
|
86578
86673
|
}
|
|
86579
|
-
return
|
|
86674
|
+
return join51(dataDir, product.cacheDirName);
|
|
86580
86675
|
}
|
|
86581
86676
|
function getTelemetryActivityStateFilePath(stateDir) {
|
|
86582
|
-
return
|
|
86677
|
+
return join51(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
|
|
86583
86678
|
}
|
|
86584
86679
|
function getDailyActiveCaptureState(input) {
|
|
86585
86680
|
const state = readPostHogActivityState(input.stateDir, input.diagnostics);
|
|
@@ -86650,9 +86745,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
|
|
|
86650
86745
|
|
|
86651
86746
|
// packages/telemetry-core/src/diagnostics.ts
|
|
86652
86747
|
import { appendFileSync as appendFileSync2, existsSync as existsSync26, mkdirSync as mkdirSync9, readFileSync as readFileSync13 } from "node:fs";
|
|
86653
|
-
import { join as
|
|
86748
|
+
import { join as join52 } from "node:path";
|
|
86654
86749
|
function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
|
|
86655
|
-
return
|
|
86750
|
+
return join52(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
|
|
86656
86751
|
}
|
|
86657
86752
|
function writeTelemetryDiagnostic(input, options) {
|
|
86658
86753
|
const now = options.now ?? new Date;
|
|
@@ -94431,7 +94526,7 @@ var package_default2;
|
|
|
94431
94526
|
var init_package2 = __esm(() => {
|
|
94432
94527
|
package_default2 = {
|
|
94433
94528
|
name: "@oh-my-opencode/omo-codex",
|
|
94434
|
-
version: "5.0.0-beta.
|
|
94529
|
+
version: "5.0.0-beta.44",
|
|
94435
94530
|
type: "module",
|
|
94436
94531
|
private: true,
|
|
94437
94532
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95399,7 +95494,7 @@ var init_update_toasts = __esm(() => {
|
|
|
95399
95494
|
|
|
95400
95495
|
// packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.ts
|
|
95401
95496
|
import { existsSync as existsSync47 } from "node:fs";
|
|
95402
|
-
import { dirname as dirname30, join as
|
|
95497
|
+
import { dirname as dirname30, join as join74 } from "node:path";
|
|
95403
95498
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
95404
95499
|
function defaultGetModuleHostingWorkspace() {
|
|
95405
95500
|
try {
|
|
@@ -95553,7 +95648,7 @@ var init_background_update_check = __esm(() => {
|
|
|
95553
95648
|
init_update_toasts();
|
|
95554
95649
|
defaultDeps4 = {
|
|
95555
95650
|
existsSync: existsSync47,
|
|
95556
|
-
join:
|
|
95651
|
+
join: join74,
|
|
95557
95652
|
runBunInstallWithDetails,
|
|
95558
95653
|
log: log2,
|
|
95559
95654
|
getOpenCodeCacheDir,
|
|
@@ -98190,7 +98285,7 @@ function getUnsupportedOpenCodeVersionMessage(openCodeVersion) {
|
|
|
98190
98285
|
}
|
|
98191
98286
|
|
|
98192
98287
|
// packages/omo-codex/src/install/install-codex.ts
|
|
98193
|
-
import { join as
|
|
98288
|
+
import { join as join53, resolve as resolve12 } from "node:path";
|
|
98194
98289
|
import { existsSync as existsSync27 } from "node:fs";
|
|
98195
98290
|
import { homedir as homedir6 } from "node:os";
|
|
98196
98291
|
|
|
@@ -102496,26 +102591,9 @@ async function removeGitBashHooksOffWindows(input) {
|
|
|
102496
102591
|
`);
|
|
102497
102592
|
}
|
|
102498
102593
|
|
|
102499
|
-
// packages/omo-codex/src/install/omo-sot-migration.ts
|
|
102500
|
-
import { join as join50 } from "node:path";
|
|
102501
|
-
async function seedAndMigrateOmoSot(input) {
|
|
102502
|
-
const commandEnv = { ...input.env };
|
|
102503
|
-
const scriptPath = join50(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
|
|
102504
|
-
try {
|
|
102505
|
-
await input.runCommand(process.execPath, [scriptPath, "--seed"], {
|
|
102506
|
-
cwd: input.repoRoot,
|
|
102507
|
-
env: commandEnv
|
|
102508
|
-
});
|
|
102509
|
-
} catch (error51) {
|
|
102510
|
-
if (!(error51 instanceof Error))
|
|
102511
|
-
throw error51;
|
|
102512
|
-
input.log(`Warning: skipped OMO SOT seed/migration: ${error51.message}`);
|
|
102513
|
-
}
|
|
102514
|
-
}
|
|
102515
|
-
|
|
102516
102594
|
// packages/omo-codex/src/install/install-ast-grep-sg.ts
|
|
102517
102595
|
init_src();
|
|
102518
|
-
import { join as
|
|
102596
|
+
import { join as join50 } from "node:path";
|
|
102519
102597
|
function describeResult(result) {
|
|
102520
102598
|
if (result.kind === "succeeded")
|
|
102521
102599
|
return null;
|
|
@@ -102529,7 +102607,7 @@ async function installAstGrepForCodex(options) {
|
|
|
102529
102607
|
return;
|
|
102530
102608
|
const platform = options.platform ?? process.platform;
|
|
102531
102609
|
const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
|
|
102532
|
-
const skillDir =
|
|
102610
|
+
const skillDir = join50(plugin.path, "skills", "ast-grep");
|
|
102533
102611
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
102534
102612
|
try {
|
|
102535
102613
|
const result = await installer({ platform, skillDir, targetDir });
|
|
@@ -102562,7 +102640,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
102562
102640
|
const env2 = options.env ?? process.env;
|
|
102563
102641
|
const platform = options.platform ?? process.platform;
|
|
102564
102642
|
const repoRoot = resolve12(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env: env2 }));
|
|
102565
|
-
const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ??
|
|
102643
|
+
const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ?? join53(homedir6(), ".codex"));
|
|
102566
102644
|
const projectDirectory = resolve12(options.projectDirectory ?? env2.OMO_CODEX_PROJECT ?? process.cwd());
|
|
102567
102645
|
const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env: env2 });
|
|
102568
102646
|
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
@@ -102579,9 +102657,9 @@ async function runCodexInstaller(options = {}) {
|
|
|
102579
102657
|
if (!gitBashResolution.found) {
|
|
102580
102658
|
throw new Error(gitBashResolution.installHint);
|
|
102581
102659
|
}
|
|
102582
|
-
const codexPackageRoot =
|
|
102660
|
+
const codexPackageRoot = join53(repoRoot, "packages", "omo-codex");
|
|
102583
102661
|
const marketplace = await readMarketplace(repoRoot, {
|
|
102584
|
-
marketplacePath:
|
|
102662
|
+
marketplacePath: join53(codexPackageRoot, "marketplace.json")
|
|
102585
102663
|
});
|
|
102586
102664
|
const distributionManifest = await readDistributionManifest(repoRoot);
|
|
102587
102665
|
const installed = [];
|
|
@@ -102627,7 +102705,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
102627
102705
|
if (runtimeLink !== null)
|
|
102628
102706
|
log4(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
|
|
102629
102707
|
else
|
|
102630
|
-
log4(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${
|
|
102708
|
+
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`);
|
|
102631
102709
|
}
|
|
102632
102710
|
pluginSources.push({ name: entry.name, sourcePath });
|
|
102633
102711
|
installed.push(plugin);
|
|
@@ -102690,13 +102768,13 @@ async function runCodexInstaller(options = {}) {
|
|
|
102690
102768
|
continue;
|
|
102691
102769
|
log4(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
|
|
102692
102770
|
}
|
|
102693
|
-
const marketplaceRoot =
|
|
102771
|
+
const marketplaceRoot = join53(codexHome, "plugins", "cache", marketplace.name);
|
|
102694
102772
|
await writeCachedMarketplaceManifest({
|
|
102695
102773
|
marketplaceName: marketplace.name,
|
|
102696
102774
|
marketplaceRoot,
|
|
102697
102775
|
plugins: installed
|
|
102698
102776
|
});
|
|
102699
|
-
const configPath =
|
|
102777
|
+
const configPath = join53(codexHome, "config.toml");
|
|
102700
102778
|
await updateCodexConfig({
|
|
102701
102779
|
configPath,
|
|
102702
102780
|
repoRoot: codexPackageRoot,
|
|
@@ -102710,7 +102788,6 @@ async function runCodexInstaller(options = {}) {
|
|
|
102710
102788
|
autonomousPermissions: options.autonomousPermissions !== false,
|
|
102711
102789
|
...options.reasoning === undefined ? {} : { reasoning: options.reasoning }
|
|
102712
102790
|
});
|
|
102713
|
-
await seedAndMigrateOmoSot({ env: env2, log: log4, repoRoot, runCommand });
|
|
102714
102791
|
const projectCleanup = await repairProjectLocalCodexArtifactsBestEffort({
|
|
102715
102792
|
startDirectory: projectDirectory,
|
|
102716
102793
|
codexHome,
|
|
@@ -102756,7 +102833,7 @@ function findRepoRootFromImporter(importerDir) {
|
|
|
102756
102833
|
for (let depth = 0;depth <= 7; depth += 1) {
|
|
102757
102834
|
if (isRepoRootWithCodexPlugin(current))
|
|
102758
102835
|
return current;
|
|
102759
|
-
for (const wrapperPackageRoot of [
|
|
102836
|
+
for (const wrapperPackageRoot of [join53(current, "node_modules", "oh-my-openagent"), join53(current, "oh-my-openagent")]) {
|
|
102760
102837
|
if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
|
|
102761
102838
|
return wrapperPackageRoot;
|
|
102762
102839
|
}
|
|
@@ -102774,7 +102851,7 @@ function findRepoRoot(input) {
|
|
|
102774
102851
|
return findRepoRootFromImporter(input.importerDir);
|
|
102775
102852
|
}
|
|
102776
102853
|
function isRepoRootWithCodexPlugin(repoRoot) {
|
|
102777
|
-
return existsSync27(
|
|
102854
|
+
return existsSync27(join53(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
|
|
102778
102855
|
}
|
|
102779
102856
|
function codexMarketplaceSource(marketplaceRoot) {
|
|
102780
102857
|
return { sourceType: "local", source: marketplaceRoot };
|
|
@@ -102911,11 +102988,11 @@ function defaultRunCommand2(command, args) {
|
|
|
102911
102988
|
// packages/omo-codex/src/install/codex-cleanup.ts
|
|
102912
102989
|
import { lstat as lstat14, readFile as readFile24, readdir as readdir13, rm as rm12, rmdir } from "node:fs/promises";
|
|
102913
102990
|
import { homedir as homedir8 } from "node:os";
|
|
102914
|
-
import { isAbsolute as isAbsolute11, join as
|
|
102991
|
+
import { isAbsolute as isAbsolute11, join as join56, relative as relative6, resolve as resolve15 } from "node:path";
|
|
102915
102992
|
|
|
102916
102993
|
// packages/omo-codex/src/install/codex-cleanup-bins.ts
|
|
102917
102994
|
import { lstat as lstat12, readFile as readFile22, readdir as readdir12, readlink as readlink6, rm as rm11 } from "node:fs/promises";
|
|
102918
|
-
import { dirname as dirname18, isAbsolute as isAbsolute9, join as
|
|
102995
|
+
import { dirname as dirname18, isAbsolute as isAbsolute9, join as join54, resolve as resolve13 } from "node:path";
|
|
102919
102996
|
var ROOT_RUNTIME_BIN_NAME = "omo";
|
|
102920
102997
|
var MANAGED_CODEX_BIN_NAMES = new Set([
|
|
102921
102998
|
ROOT_RUNTIME_BIN_NAME,
|
|
@@ -102945,7 +103022,7 @@ async function removeManagedCodexBins(binDir, platform) {
|
|
|
102945
103022
|
const binName = managedBinNameForEntry2(entry.name, platform);
|
|
102946
103023
|
if (binName === null || !MANAGED_CODEX_BIN_NAMES.has(binName))
|
|
102947
103024
|
continue;
|
|
102948
|
-
const linkPath =
|
|
103025
|
+
const linkPath = join54(binDir, entry.name);
|
|
102949
103026
|
if (await isManagedCodexBin(linkPath, platform, binName)) {
|
|
102950
103027
|
await rm11(linkPath, { force: true });
|
|
102951
103028
|
removed2.push(linkPath);
|
|
@@ -103098,7 +103175,7 @@ function nodeErrorCode5(error51) {
|
|
|
103098
103175
|
}
|
|
103099
103176
|
|
|
103100
103177
|
// packages/omo-codex/src/install/codex-cleanup-safety.ts
|
|
103101
|
-
import { dirname as dirname20, isAbsolute as isAbsolute10, join as
|
|
103178
|
+
import { dirname as dirname20, isAbsolute as isAbsolute10, join as join55, relative as relative5, resolve as resolve14 } from "node:path";
|
|
103102
103179
|
function codexHomeResolvesToFilesystemRoot(codexHome) {
|
|
103103
103180
|
const resolved = resolve14(codexHome);
|
|
103104
103181
|
return dirname20(resolved) === resolved;
|
|
@@ -103115,11 +103192,11 @@ function validateManagedCleanupTarget(input) {
|
|
|
103115
103192
|
if (target === codexHome)
|
|
103116
103193
|
return skipped(input.path, "outside managed Codex cleanup scope");
|
|
103117
103194
|
const exactManagedRoots = new Set([
|
|
103118
|
-
resolve14(
|
|
103119
|
-
resolve14(
|
|
103120
|
-
resolve14(
|
|
103121
|
-
resolve14(
|
|
103122
|
-
resolve14(
|
|
103195
|
+
resolve14(join55(codexHome, "plugins", "cache", "sisyphuslabs")),
|
|
103196
|
+
resolve14(join55(codexHome, ".tmp", "marketplaces", "sisyphuslabs")),
|
|
103197
|
+
resolve14(join55(codexHome, "runtime", "ast-grep")),
|
|
103198
|
+
resolve14(join55(codexHome, "runtime", "node")),
|
|
103199
|
+
resolve14(join55(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap"))
|
|
103123
103200
|
]);
|
|
103124
103201
|
if (exactManagedRoots.has(target))
|
|
103125
103202
|
return null;
|
|
@@ -103149,8 +103226,8 @@ function skipped(path7, reason) {
|
|
|
103149
103226
|
var INSTALLED_AGENTS_MANIFEST = ".installed-agents.json";
|
|
103150
103227
|
async function cleanupCodexLight(input = {}) {
|
|
103151
103228
|
const env2 = input.env ?? process.env;
|
|
103152
|
-
const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ??
|
|
103153
|
-
const configPath =
|
|
103229
|
+
const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ?? join56(homedir8(), ".codex"));
|
|
103230
|
+
const configPath = join56(codexHome, "config.toml");
|
|
103154
103231
|
const installedBinDir = await readInstalledCodexBinDir(codexHome);
|
|
103155
103232
|
const agentPaths = await collectInstalledAgentPaths(codexHome, configPath);
|
|
103156
103233
|
const configCleanup = await cleanupCodexConfig(configPath, input.now);
|
|
@@ -103204,17 +103281,17 @@ function firstConfiguredPath(...values) {
|
|
|
103204
103281
|
}
|
|
103205
103282
|
function managedGlobalStatePaths(codexHome) {
|
|
103206
103283
|
return [
|
|
103207
|
-
|
|
103208
|
-
|
|
103209
|
-
|
|
103210
|
-
|
|
103211
|
-
|
|
103284
|
+
join56(codexHome, "plugins", "cache", "sisyphuslabs"),
|
|
103285
|
+
join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs"),
|
|
103286
|
+
join56(codexHome, "runtime", "ast-grep"),
|
|
103287
|
+
join56(codexHome, "runtime", "node"),
|
|
103288
|
+
join56(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap")
|
|
103212
103289
|
];
|
|
103213
103290
|
}
|
|
103214
103291
|
var BOOTSTRAP_DATA_GLOB_MAX_DEPTH = 5;
|
|
103215
103292
|
async function collectBootstrapDataDirsByGlob(codexHome) {
|
|
103216
103293
|
const results = [];
|
|
103217
|
-
await walkForManagedBootstrapDirs(
|
|
103294
|
+
await walkForManagedBootstrapDirs(join56(codexHome, "plugins"), 0, results);
|
|
103218
103295
|
return results;
|
|
103219
103296
|
}
|
|
103220
103297
|
async function walkForManagedBootstrapDirs(directory, depth, results) {
|
|
@@ -103226,9 +103303,9 @@ async function walkForManagedBootstrapDirs(directory, depth, results) {
|
|
|
103226
103303
|
for (const entry of entries) {
|
|
103227
103304
|
if (!entry.isDirectory())
|
|
103228
103305
|
continue;
|
|
103229
|
-
const childPath =
|
|
103306
|
+
const childPath = join56(directory, entry.name);
|
|
103230
103307
|
if (isManagedBootstrapOwnerName(entry.name)) {
|
|
103231
|
-
const bootstrapDir =
|
|
103308
|
+
const bootstrapDir = join56(childPath, "bootstrap");
|
|
103232
103309
|
if (await exists6(bootstrapDir))
|
|
103233
103310
|
results.push(bootstrapDir);
|
|
103234
103311
|
continue;
|
|
@@ -103262,7 +103339,7 @@ async function attemptRemove(path7) {
|
|
|
103262
103339
|
}
|
|
103263
103340
|
async function pruneEmptyRuntimeDirBestEffort(codexHome) {
|
|
103264
103341
|
try {
|
|
103265
|
-
await rmdir(
|
|
103342
|
+
await rmdir(join56(codexHome, "runtime"));
|
|
103266
103343
|
} catch (error51) {
|
|
103267
103344
|
if (isExpectedRuntimePruneFailure(error51))
|
|
103268
103345
|
return;
|
|
@@ -103274,14 +103351,14 @@ function isExpectedRuntimePruneFailure(error51) {
|
|
|
103274
103351
|
}
|
|
103275
103352
|
async function collectInstalledAgentPaths(codexHome, configPath) {
|
|
103276
103353
|
const manifestPaths = [
|
|
103277
|
-
|
|
103354
|
+
join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", INSTALLED_AGENTS_MANIFEST)
|
|
103278
103355
|
];
|
|
103279
|
-
const versionRoot =
|
|
103356
|
+
const versionRoot = join56(codexHome, "plugins", "cache", "sisyphuslabs", "omo");
|
|
103280
103357
|
if (await exists6(versionRoot)) {
|
|
103281
103358
|
const entries = await readdir13(versionRoot, { withFileTypes: true });
|
|
103282
103359
|
for (const entry of entries) {
|
|
103283
103360
|
if (entry.isDirectory())
|
|
103284
|
-
manifestPaths.push(
|
|
103361
|
+
manifestPaths.push(join56(versionRoot, entry.name, INSTALLED_AGENTS_MANIFEST));
|
|
103285
103362
|
}
|
|
103286
103363
|
}
|
|
103287
103364
|
const paths2 = new Set;
|
|
@@ -103299,7 +103376,7 @@ async function readManagedAgentPathsFromConfig(codexHome, configPath) {
|
|
|
103299
103376
|
if (!await exists6(configPath))
|
|
103300
103377
|
return [];
|
|
103301
103378
|
const config3 = await readFile24(configPath, "utf8");
|
|
103302
|
-
return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) =>
|
|
103379
|
+
return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) => join56(codexHome, "agents", `${agentName}.toml`));
|
|
103303
103380
|
}
|
|
103304
103381
|
async function readInstalledAgentManifest(manifestPath) {
|
|
103305
103382
|
if (!await exists6(manifestPath))
|
|
@@ -103310,7 +103387,7 @@ async function readInstalledAgentManifest(manifestPath) {
|
|
|
103310
103387
|
return parsed.agents.filter((path7) => typeof path7 === "string");
|
|
103311
103388
|
}
|
|
103312
103389
|
async function removeManifestListedAgentLinks(codexHome, paths2) {
|
|
103313
|
-
const agentsDir =
|
|
103390
|
+
const agentsDir = join56(codexHome, "agents");
|
|
103314
103391
|
const removed2 = [];
|
|
103315
103392
|
const skipped2 = [];
|
|
103316
103393
|
for (const path7 of paths2) {
|
|
@@ -103362,14 +103439,14 @@ function nodeErrorCode6(error51) {
|
|
|
103362
103439
|
import { execFile as execFile3 } from "node:child_process";
|
|
103363
103440
|
import { existsSync as existsSync31 } from "node:fs";
|
|
103364
103441
|
import { homedir as homedir11 } from "node:os";
|
|
103365
|
-
import { dirname as dirname24, join as
|
|
103442
|
+
import { dirname as dirname24, join as join61, resolve as resolve19 } from "node:path";
|
|
103366
103443
|
import { fileURLToPath } from "node:url";
|
|
103367
103444
|
import { promisify as promisify2 } from "node:util";
|
|
103368
103445
|
|
|
103369
103446
|
// packages/omo-senpi/src/components/agent-home/resolve-agent-home.ts
|
|
103370
103447
|
import { existsSync as existsSync29 } from "node:fs";
|
|
103371
103448
|
import { homedir as homedir9 } from "node:os";
|
|
103372
|
-
import { join as
|
|
103449
|
+
import { join as join57, resolve as resolve16 } from "node:path";
|
|
103373
103450
|
var AGENT_DIR_ENV_NAMES = [
|
|
103374
103451
|
"OMO_CODING_AGENT_DIR",
|
|
103375
103452
|
"SENPI_CODING_AGENT_DIR",
|
|
@@ -103383,25 +103460,25 @@ function resolveAgentHome(options) {
|
|
|
103383
103460
|
if (configured)
|
|
103384
103461
|
return resolve16(configured);
|
|
103385
103462
|
}
|
|
103386
|
-
const brandedHome =
|
|
103387
|
-
const canonical =
|
|
103388
|
-
if (exists7(
|
|
103463
|
+
const brandedHome = join57(homeDir, ".omo");
|
|
103464
|
+
const canonical = join57(brandedHome, "agent");
|
|
103465
|
+
if (exists7(join57(canonical, AGENT_HOME_SENTINEL)))
|
|
103389
103466
|
return canonical;
|
|
103390
|
-
if (exists7(
|
|
103467
|
+
if (exists7(join57(brandedHome, AGENT_HOME_SENTINEL)))
|
|
103391
103468
|
return brandedHome;
|
|
103392
|
-
return
|
|
103469
|
+
return join57(homeDir, ".senpi", "agent");
|
|
103393
103470
|
}
|
|
103394
103471
|
|
|
103395
103472
|
// packages/omo-senpi/src/install/local-launcher.ts
|
|
103396
103473
|
import { chmodSync as chmodSync3, existsSync as existsSync30, mkdirSync as mkdirSync10, readFileSync as readFileSync14, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "node:fs";
|
|
103397
103474
|
import { homedir as homedir10 } from "node:os";
|
|
103398
|
-
import { dirname as dirname21, join as
|
|
103475
|
+
import { dirname as dirname21, join as join58, resolve as resolve17 } from "node:path";
|
|
103399
103476
|
var MARKER = "omo-local-launcher";
|
|
103400
103477
|
function localLauncherPath(homeDir = homedir10()) {
|
|
103401
|
-
return
|
|
103478
|
+
return join58(homeDir, ".local", "bin", "omo");
|
|
103402
103479
|
}
|
|
103403
103480
|
function localLauncherCmdPath(homeDir = homedir10()) {
|
|
103404
|
-
return
|
|
103481
|
+
return join58(homeDir, ".local", "bin", "omo.cmd");
|
|
103405
103482
|
}
|
|
103406
103483
|
function renderLocalLauncher(options) {
|
|
103407
103484
|
const brand = {
|
|
@@ -103481,16 +103558,16 @@ node "%~dp0omo" %*\r
|
|
|
103481
103558
|
import { createHash as createHash5 } from "node:crypto";
|
|
103482
103559
|
import { constants as constants9 } from "node:fs";
|
|
103483
103560
|
import { access as access2, readFile as readFile26, stat as stat6 } from "node:fs/promises";
|
|
103484
|
-
import { dirname as dirname23, join as
|
|
103561
|
+
import { dirname as dirname23, join as join60 } from "node:path";
|
|
103485
103562
|
|
|
103486
103563
|
// packages/omo-senpi/src/install/senpi-settings.ts
|
|
103487
103564
|
import { constants as constants8 } from "node:fs";
|
|
103488
103565
|
import { access, copyFile as copyFile3, mkdir as mkdir9, readFile as readFile25, rename as rename5, writeFile as writeFile14 } from "node:fs/promises";
|
|
103489
|
-
import { dirname as dirname22, join as
|
|
103566
|
+
import { dirname as dirname22, join as join59, resolve as resolve18 } from "node:path";
|
|
103490
103567
|
var OMO_SENPI_PACKAGE_NAME = "@code-yeongyu/omo-senpi";
|
|
103491
103568
|
var LEGACY_BUILTIN_SHADOW_PACKAGES = [
|
|
103492
|
-
|
|
103493
|
-
|
|
103569
|
+
join59("packages", "pi-goal"),
|
|
103570
|
+
join59("packages", "pi-webfetch")
|
|
103494
103571
|
];
|
|
103495
103572
|
async function readSettings(settingsPath) {
|
|
103496
103573
|
let raw;
|
|
@@ -103565,7 +103642,7 @@ function isRecord12(value) {
|
|
|
103565
103642
|
async function readPackageName(packagePath) {
|
|
103566
103643
|
let raw;
|
|
103567
103644
|
try {
|
|
103568
|
-
raw = await readFile25(
|
|
103645
|
+
raw = await readFile25(join59(packagePath, "package.json"), "utf8");
|
|
103569
103646
|
} catch (error51) {
|
|
103570
103647
|
if (isErrno(error51, "ENOENT") || isErrno(error51, "ENOTDIR"))
|
|
103571
103648
|
return;
|
|
@@ -103590,57 +103667,57 @@ function isErrno(error51, code) {
|
|
|
103590
103667
|
|
|
103591
103668
|
// packages/omo-senpi/src/install/plugin-artifacts.ts
|
|
103592
103669
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
103593
|
-
|
|
103594
|
-
|
|
103595
|
-
|
|
103596
|
-
|
|
103597
|
-
|
|
103598
|
-
|
|
103599
|
-
|
|
103600
|
-
|
|
103601
|
-
|
|
103602
|
-
|
|
103603
|
-
|
|
103604
|
-
|
|
103605
|
-
|
|
103606
|
-
|
|
103607
|
-
|
|
103608
|
-
|
|
103609
|
-
|
|
103610
|
-
|
|
103611
|
-
|
|
103612
|
-
|
|
103613
|
-
|
|
103614
|
-
|
|
103615
|
-
|
|
103616
|
-
|
|
103617
|
-
|
|
103618
|
-
|
|
103619
|
-
|
|
103620
|
-
|
|
103621
|
-
|
|
103622
|
-
|
|
103623
|
-
|
|
103624
|
-
|
|
103625
|
-
|
|
103626
|
-
|
|
103627
|
-
|
|
103628
|
-
|
|
103629
|
-
|
|
103630
|
-
|
|
103631
|
-
|
|
103632
|
-
|
|
103670
|
+
join60("extensions", "omo.js"),
|
|
103671
|
+
join60("extensions", "omo-task.js"),
|
|
103672
|
+
join60("extensions", "omo-member.js"),
|
|
103673
|
+
join60("extensions", "memory-run-supervisor.mjs"),
|
|
103674
|
+
join60("extensions", "reflection-persona.md"),
|
|
103675
|
+
join60("extensions", "dream-persona.md"),
|
|
103676
|
+
join60("extensions", "facts-persona.md"),
|
|
103677
|
+
join60("extensions", "memorian-persona.md"),
|
|
103678
|
+
join60("skills", "ast-grep", "SKILL.md"),
|
|
103679
|
+
join60("skills", "coding-agent-sessions", "SKILL.md"),
|
|
103680
|
+
join60("skills", "debugging", "SKILL.md"),
|
|
103681
|
+
join60("skills", "frontend", "SKILL.md"),
|
|
103682
|
+
join60("skills", "git-master", "SKILL.md"),
|
|
103683
|
+
join60("skills", "init-deep", "SKILL.md"),
|
|
103684
|
+
join60("skills", "lsp-setup", "SKILL.md"),
|
|
103685
|
+
join60("skills", "programming", "SKILL.md"),
|
|
103686
|
+
join60("skills", "refactor", "SKILL.md"),
|
|
103687
|
+
join60("skills", "remove-ai-slops", "SKILL.md"),
|
|
103688
|
+
join60("skills", "review-work", "SKILL.md"),
|
|
103689
|
+
join60("skills", "ultimate-browsing", "SKILL.md"),
|
|
103690
|
+
join60("skills", "ultrawork", "SKILL.md"),
|
|
103691
|
+
join60("skills", "ulw-execute", "SKILL.md"),
|
|
103692
|
+
join60("skills", "ulw-loop", "SKILL.md"),
|
|
103693
|
+
join60("skills", "ulw-plan", "SKILL.md"),
|
|
103694
|
+
join60("skills", "ulw-research", "SKILL.md"),
|
|
103695
|
+
join60("skills", "visual-qa", "SKILL.md"),
|
|
103696
|
+
join60("skills-conditional", "x-search", "SKILL.md"),
|
|
103697
|
+
join60("runtime", "ast-grep-mcp", "cli.js"),
|
|
103698
|
+
join60("runtime", "agent-toolkit", "cli.js"),
|
|
103699
|
+
join60("runtime", "agent-toolkit", "ulw-loop", "cli.js"),
|
|
103700
|
+
join60("runtime", "agent-toolkit", "omo-agent-toolkit"),
|
|
103701
|
+
join60("runtime", "agent-toolkit", "omo-agent-toolkit.cmd"),
|
|
103702
|
+
join60("runtime", "lsp-daemon", "dist", "cli.js"),
|
|
103703
|
+
join60("runtime", "lsp-daemon", "dist", "index.js"),
|
|
103704
|
+
join60("runtime", "lsp-daemon", "dist", "index.d.ts"),
|
|
103705
|
+
join60("runtime", "lsp-daemon", "dist", "daemon-client.js"),
|
|
103706
|
+
join60("runtime", "lsp-daemon", "dist", "daemon-client.d.ts"),
|
|
103707
|
+
join60("runtime", "lsp-daemon", "dist", "package.json"),
|
|
103708
|
+
join60("runtime", "lsp-daemon", "dist", ".omo-runtime-manifest.json"),
|
|
103709
|
+
join60("scripts", "install.mjs")
|
|
103633
103710
|
];
|
|
103634
103711
|
async function ensurePluginArtifacts(context) {
|
|
103635
103712
|
if (context.allowBuild) {
|
|
103636
|
-
await context.runCommand("node", [
|
|
103637
|
-
await context.runCommand("node", [
|
|
103638
|
-
await context.runCommand("node", [
|
|
103639
|
-
await context.runCommand("node", [
|
|
103640
|
-
await context.runCommand("node", [
|
|
103641
|
-
await context.runCommand("node", [
|
|
103642
|
-
await context.runCommand("node", [
|
|
103643
|
-
await context.runCommand("node", [
|
|
103713
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
|
|
103714
|
+
await context.runCommand("node", [join60("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
|
|
103715
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
|
|
103716
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
|
|
103717
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
|
|
103718
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-ast-grep-mcp-runtime.mjs")], { cwd: context.repoRoot });
|
|
103719
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-agent-toolkit.mjs")], { cwd: context.repoRoot });
|
|
103720
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-x-search-skill.mjs")], { cwd: context.repoRoot });
|
|
103644
103721
|
}
|
|
103645
103722
|
if (await hasMissingPluginArtifact(context.pluginPath)) {
|
|
103646
103723
|
throw new Error(`Packed omo-senpi plugin is missing required runtime artifacts at ${context.pluginPath}`);
|
|
@@ -103649,14 +103726,14 @@ async function ensurePluginArtifacts(context) {
|
|
|
103649
103726
|
}
|
|
103650
103727
|
async function hasMissingPluginArtifact(pluginPath) {
|
|
103651
103728
|
for (const artifact of REQUIRED_PLUGIN_ARTIFACTS) {
|
|
103652
|
-
if (!await fileExists2(
|
|
103729
|
+
if (!await fileExists2(join60(pluginPath, artifact)))
|
|
103653
103730
|
return true;
|
|
103654
103731
|
}
|
|
103655
103732
|
return false;
|
|
103656
103733
|
}
|
|
103657
103734
|
async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
103658
|
-
const runtimeEntry =
|
|
103659
|
-
const manifestPath =
|
|
103735
|
+
const runtimeEntry = join60(pluginPath, "runtime", "ast-grep-mcp", "cli.js");
|
|
103736
|
+
const manifestPath = join60(dirname23(runtimeEntry), "manifest.json");
|
|
103660
103737
|
let runtimeStat;
|
|
103661
103738
|
try {
|
|
103662
103739
|
runtimeStat = await stat6(runtimeEntry);
|
|
@@ -103731,7 +103808,7 @@ async function runSenpiInstaller(options = {}) {
|
|
|
103731
103808
|
const backupPath = await writeSettingsAtomically(context.settingsPath, settings);
|
|
103732
103809
|
installLocalLauncher({
|
|
103733
103810
|
pluginPath: context.pluginPath,
|
|
103734
|
-
senpiCliPath:
|
|
103811
|
+
senpiCliPath: join61(context.repoRoot, "packages", "coding-agent", "dist", "cli.js")
|
|
103735
103812
|
});
|
|
103736
103813
|
return {
|
|
103737
103814
|
ok: true,
|
|
@@ -103748,12 +103825,12 @@ function resolveInstallContext(options) {
|
|
|
103748
103825
|
const allowBuild = options.pluginPath === undefined;
|
|
103749
103826
|
const repoRoot = resolve19(options.repoRoot ?? (allowBuild ? findRepoRoot2(dirname24(fileURLToPath(import.meta.url))) : dirname24(resolve19(options.pluginPath))));
|
|
103750
103827
|
const agentDir = resolve19(options.agentDir ?? resolveAgentHome({ env: env2, homeDir: env2.HOME ?? homedir11() }));
|
|
103751
|
-
const pluginPath = resolve19(options.pluginPath ??
|
|
103828
|
+
const pluginPath = resolve19(options.pluginPath ?? join61(repoRoot, "packages", "omo-senpi", "plugin"));
|
|
103752
103829
|
return {
|
|
103753
103830
|
env: env2,
|
|
103754
103831
|
repoRoot,
|
|
103755
103832
|
agentDir,
|
|
103756
|
-
settingsPath:
|
|
103833
|
+
settingsPath: join61(agentDir, "settings.json"),
|
|
103757
103834
|
pluginPath,
|
|
103758
103835
|
platform: options.platform ?? process.platform,
|
|
103759
103836
|
allowBuild,
|
|
@@ -103770,7 +103847,7 @@ async function defaultRunCommand3(command, args, options) {
|
|
|
103770
103847
|
function findRepoRoot2(importerDir) {
|
|
103771
103848
|
let current = importerDir;
|
|
103772
103849
|
for (let depth = 0;depth <= 7; depth += 1) {
|
|
103773
|
-
if (fileExistsSync(
|
|
103850
|
+
if (fileExistsSync(join61(current, "packages", "omo-senpi", "plugin", "package.json")))
|
|
103774
103851
|
return current;
|
|
103775
103852
|
current = resolve19(current, "..");
|
|
103776
103853
|
}
|
|
@@ -103814,19 +103891,19 @@ init_provider_availability();
|
|
|
103814
103891
|
|
|
103815
103892
|
// packages/omo-opencode/src/cli/config-manager/add-tui-plugin-to-tui-config.ts
|
|
103816
103893
|
import { existsSync as existsSync33, mkdirSync as mkdirSync11, readFileSync as readFileSync16 } from "node:fs";
|
|
103817
|
-
import { join as
|
|
103894
|
+
import { join as join63 } from "node:path";
|
|
103818
103895
|
|
|
103819
103896
|
// packages/omo-opencode/src/cli/doctor/checks/tui-plugin-config.ts
|
|
103820
103897
|
init_shared();
|
|
103821
103898
|
import { existsSync as existsSync32, readFileSync as readFileSync15 } from "node:fs";
|
|
103822
|
-
import { join as
|
|
103899
|
+
import { join as join62 } from "node:path";
|
|
103823
103900
|
var TUI_SUBPATH = "tui";
|
|
103824
103901
|
var TUI_EXPORT_SUBPATH = `./${TUI_SUBPATH}`;
|
|
103825
103902
|
function fileEntryPackageJsonPath(entry) {
|
|
103826
103903
|
let path7 = entry.slice("file:".length);
|
|
103827
103904
|
if (path7.startsWith("//"))
|
|
103828
103905
|
path7 = path7.slice(2);
|
|
103829
|
-
return
|
|
103906
|
+
return join62(path7, "package.json");
|
|
103830
103907
|
}
|
|
103831
103908
|
function packageJsonExportsTui(pkgJsonPath) {
|
|
103832
103909
|
if (!existsSync32(pkgJsonPath))
|
|
@@ -103864,7 +103941,7 @@ function packageExportsTuiForServerEntry(entry) {
|
|
|
103864
103941
|
const packageName = packageNameFromServerEntry(entry);
|
|
103865
103942
|
if (packageName === null)
|
|
103866
103943
|
return null;
|
|
103867
|
-
return packageJsonExportsTui(
|
|
103944
|
+
return packageJsonExportsTui(join62(getOpenCodeConfigDir({ binary: "opencode" }), "node_modules", packageName, "package.json"));
|
|
103868
103945
|
}
|
|
103869
103946
|
function isOurFilePluginEntry(entry) {
|
|
103870
103947
|
if (typeof entry !== "string" || !entry.startsWith("file:"))
|
|
@@ -103929,7 +104006,7 @@ function detectServerPluginRegistration() {
|
|
|
103929
104006
|
}
|
|
103930
104007
|
}
|
|
103931
104008
|
function detectTuiPluginRegistration() {
|
|
103932
|
-
const tuiJsonPath =
|
|
104009
|
+
const tuiJsonPath = join62(getOpenCodeConfigDir({ binary: "opencode" }), "tui.json");
|
|
103933
104010
|
if (!existsSync32(tuiJsonPath)) {
|
|
103934
104011
|
return {
|
|
103935
104012
|
registered: false,
|
|
@@ -104085,10 +104162,10 @@ function readConfig(path7) {
|
|
|
104085
104162
|
return null;
|
|
104086
104163
|
}
|
|
104087
104164
|
function readServerConfig(configDir) {
|
|
104088
|
-
const jsoncPath =
|
|
104165
|
+
const jsoncPath = join63(configDir, "opencode.jsonc");
|
|
104089
104166
|
if (existsSync33(jsoncPath))
|
|
104090
104167
|
return readConfig(jsoncPath);
|
|
104091
|
-
const jsonPath =
|
|
104168
|
+
const jsonPath = join63(configDir, "opencode.json");
|
|
104092
104169
|
if (existsSync33(jsonPath))
|
|
104093
104170
|
return readConfig(jsonPath);
|
|
104094
104171
|
return null;
|
|
@@ -104130,7 +104207,7 @@ function ensureTuiPluginEntry(opts = {}) {
|
|
|
104130
104207
|
if (!desiredEntry) {
|
|
104131
104208
|
return { changed: false, reason: "no-server-entry" };
|
|
104132
104209
|
}
|
|
104133
|
-
const tuiJsonPath =
|
|
104210
|
+
const tuiJsonPath = join63(configDir, "tui.json");
|
|
104134
104211
|
const { config: config3, malformed } = readTuiConfig(tuiJsonPath);
|
|
104135
104212
|
if (malformed) {
|
|
104136
104213
|
return { changed: false, reason: "malformed" };
|
|
@@ -104146,7 +104223,7 @@ function ensureTuiPluginEntry(opts = {}) {
|
|
|
104146
104223
|
|
|
104147
104224
|
// packages/omo-opencode/src/cli/install-ast-grep-sg.ts
|
|
104148
104225
|
import { homedir as homedir12 } from "node:os";
|
|
104149
|
-
import { join as
|
|
104226
|
+
import { join as join64 } from "node:path";
|
|
104150
104227
|
|
|
104151
104228
|
// packages/shared-skills/index.mjs
|
|
104152
104229
|
import { existsSync as existsSync34 } from "node:fs";
|
|
@@ -104168,9 +104245,9 @@ function describeResult2(result) {
|
|
|
104168
104245
|
}
|
|
104169
104246
|
async function installAstGrepForOpenCode(options = {}) {
|
|
104170
104247
|
const platform = options.platform ?? process.platform;
|
|
104171
|
-
const baseDir =
|
|
104248
|
+
const baseDir = join64(options.homeDir ?? homedir12(), ".omo");
|
|
104172
104249
|
const targetDir = astGrepRuntimeDir(baseDir, platform, options.arch ?? process.arch);
|
|
104173
|
-
const skillDir =
|
|
104250
|
+
const skillDir = join64(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
|
|
104174
104251
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
104175
104252
|
try {
|
|
104176
104253
|
const result = await installer({ platform, skillDir, targetDir });
|
|
@@ -104288,6 +104365,7 @@ async function runCliInstaller(args, version3) {
|
|
|
104288
104365
|
return 1;
|
|
104289
104366
|
}
|
|
104290
104367
|
printWarning(`Codex install failed (OpenCode install is still complete): ${message}`);
|
|
104368
|
+
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")}`);
|
|
104291
104369
|
}
|
|
104292
104370
|
console.log();
|
|
104293
104371
|
}
|
|
@@ -105760,6 +105838,7 @@ async function runTuiInstaller(args, version3) {
|
|
|
105760
105838
|
return 1;
|
|
105761
105839
|
}
|
|
105762
105840
|
log4.warn(`Codex install failed (OpenCode install remains successful): ${message}`);
|
|
105841
|
+
log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
|
|
105763
105842
|
}
|
|
105764
105843
|
}
|
|
105765
105844
|
if (config3.hasSenpi) {
|
|
@@ -108389,9 +108468,9 @@ function readCurrentTopLevelTask(planPath) {
|
|
|
108389
108468
|
}
|
|
108390
108469
|
// packages/boulder-state/src/storage/path.ts
|
|
108391
108470
|
import { existsSync as existsSync36 } from "node:fs";
|
|
108392
|
-
import { isAbsolute as isAbsolute12, join as
|
|
108471
|
+
import { isAbsolute as isAbsolute12, join as join65, relative as relative8, resolve as resolve20 } from "node:path";
|
|
108393
108472
|
function getBoulderFilePath(directory) {
|
|
108394
|
-
return
|
|
108473
|
+
return join65(directory, BOULDER_DIR, BOULDER_FILE);
|
|
108395
108474
|
}
|
|
108396
108475
|
function resolveTrackedPath(baseDirectory, trackedPath) {
|
|
108397
108476
|
return isAbsolute12(trackedPath) ? resolve20(trackedPath) : resolve20(baseDirectory, trackedPath);
|
|
@@ -108574,9 +108653,9 @@ init_state();
|
|
|
108574
108653
|
var CONTINUATION_MARKER_DIR = ".omo/run-continuation";
|
|
108575
108654
|
// packages/omo-opencode/src/features/run-continuation-state/storage.ts
|
|
108576
108655
|
import { existsSync as existsSync39, mkdirSync as mkdirSync12, readFileSync as readFileSync20, rmSync as rmSync3, writeFileSync as writeFileSync7 } from "node:fs";
|
|
108577
|
-
import { join as
|
|
108656
|
+
import { join as join66 } from "node:path";
|
|
108578
108657
|
function getMarkerPath(directory, sessionID) {
|
|
108579
|
-
return
|
|
108658
|
+
return join66(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
|
|
108580
108659
|
}
|
|
108581
108660
|
function readContinuationMarker(directory, sessionID) {
|
|
108582
108661
|
const markerPath = getMarkerPath(directory, sessionID);
|
|
@@ -108649,7 +108728,7 @@ async function isSessionInBoulderLineage(input) {
|
|
|
108649
108728
|
init_shared();
|
|
108650
108729
|
init_compaction_marker();
|
|
108651
108730
|
import { readFileSync as readFileSync21, readdirSync as readdirSync8 } from "node:fs";
|
|
108652
|
-
import { join as
|
|
108731
|
+
import { join as join67 } from "node:path";
|
|
108653
108732
|
var defaultSessionLastAgentDeps = {
|
|
108654
108733
|
getMessageDir,
|
|
108655
108734
|
isSqliteBackend,
|
|
@@ -108709,7 +108788,7 @@ async function getLastAgentFromSession(sessionID, client3, deps = {}) {
|
|
|
108709
108788
|
try {
|
|
108710
108789
|
const messages = readdirSync8(messageDir).filter((fileName) => fileName.endsWith(".json")).map((fileName) => {
|
|
108711
108790
|
try {
|
|
108712
|
-
const content = readFileSync21(
|
|
108791
|
+
const content = readFileSync21(join67(messageDir, fileName), "utf-8");
|
|
108713
108792
|
const parsed = JSON.parse(content);
|
|
108714
108793
|
return {
|
|
108715
108794
|
fileName,
|
|
@@ -108753,7 +108832,7 @@ init_agent_display_names();
|
|
|
108753
108832
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
108754
108833
|
init_frontmatter2();
|
|
108755
108834
|
import { existsSync as existsSync40, readFileSync as readFileSync22, writeFileSync as writeFileSync8, unlinkSync as unlinkSync6, mkdirSync as mkdirSync13 } from "node:fs";
|
|
108756
|
-
import { dirname as dirname26, join as
|
|
108835
|
+
import { dirname as dirname26, join as join68 } from "node:path";
|
|
108757
108836
|
|
|
108758
108837
|
// packages/omo-opencode/src/hooks/ralph-loop/constants.ts
|
|
108759
108838
|
var DEFAULT_STATE_FILE = ".omo/ralph-loop.local.md";
|
|
@@ -108762,7 +108841,7 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
|
|
|
108762
108841
|
|
|
108763
108842
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
108764
108843
|
function getStateFilePath(directory, customPath) {
|
|
108765
|
-
return customPath ?
|
|
108844
|
+
return customPath ? join68(directory, customPath) : join68(directory, DEFAULT_STATE_FILE);
|
|
108766
108845
|
}
|
|
108767
108846
|
function readState(directory, customPath) {
|
|
108768
108847
|
const filePath = getStateFilePath(directory, customPath);
|
|
@@ -109869,7 +109948,7 @@ init_extract_semver();
|
|
|
109869
109948
|
init_bun_which_shim();
|
|
109870
109949
|
import { existsSync as existsSync48, accessSync as accessSync4, constants as constants12 } from "node:fs";
|
|
109871
109950
|
import { homedir as homedir15 } from "node:os";
|
|
109872
|
-
import { join as
|
|
109951
|
+
import { join as join75 } from "node:path";
|
|
109873
109952
|
|
|
109874
109953
|
// packages/omo-opencode/src/cli/doctor/framework/spawn-with-timeout.ts
|
|
109875
109954
|
init_spawn_with_windows_hide();
|
|
@@ -109961,17 +110040,17 @@ function getDesktopAppPaths(platform) {
|
|
|
109961
110040
|
case "darwin":
|
|
109962
110041
|
return [
|
|
109963
110042
|
"/Applications/OpenCode.app/Contents/MacOS/OpenCode",
|
|
109964
|
-
|
|
110043
|
+
join75(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
|
|
109965
110044
|
];
|
|
109966
110045
|
case "win32": {
|
|
109967
110046
|
const programFiles = process.env.ProgramFiles;
|
|
109968
110047
|
const localAppData = process.env.LOCALAPPDATA;
|
|
109969
110048
|
const paths2 = [];
|
|
109970
110049
|
if (programFiles) {
|
|
109971
|
-
paths2.push(
|
|
110050
|
+
paths2.push(join75(programFiles, "OpenCode", "OpenCode.exe"));
|
|
109972
110051
|
}
|
|
109973
110052
|
if (localAppData) {
|
|
109974
|
-
paths2.push(
|
|
110053
|
+
paths2.push(join75(localAppData, "OpenCode", "OpenCode.exe"));
|
|
109975
110054
|
}
|
|
109976
110055
|
return paths2;
|
|
109977
110056
|
}
|
|
@@ -109979,8 +110058,8 @@ function getDesktopAppPaths(platform) {
|
|
|
109979
110058
|
return [
|
|
109980
110059
|
"/usr/bin/opencode",
|
|
109981
110060
|
"/usr/lib/opencode/opencode",
|
|
109982
|
-
|
|
109983
|
-
|
|
110061
|
+
join75(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
|
|
110062
|
+
join75(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
|
|
109984
110063
|
];
|
|
109985
110064
|
default:
|
|
109986
110065
|
return [];
|
|
@@ -110012,7 +110091,7 @@ async function findOpenCodeBinary(platform = process.platform, checkExists = exi
|
|
|
110012
110091
|
const candidates = getCommandCandidates2(platform);
|
|
110013
110092
|
for (const entry of pathEnv.split(delimiter3).filter(Boolean)) {
|
|
110014
110093
|
for (const command of candidates) {
|
|
110015
|
-
const fullPath =
|
|
110094
|
+
const fullPath = join75(entry, command);
|
|
110016
110095
|
if (checkExists(fullPath) && isExecutable2(fullPath)) {
|
|
110017
110096
|
return { binary: command, path: fullPath };
|
|
110018
110097
|
}
|
|
@@ -110156,22 +110235,22 @@ init_package_json_locator();
|
|
|
110156
110235
|
import { existsSync as existsSync50, readFileSync as readFileSync31, readdirSync as readdirSync10 } from "node:fs";
|
|
110157
110236
|
import { createRequire as createRequire2 } from "node:module";
|
|
110158
110237
|
import { homedir as homedir16 } from "node:os";
|
|
110159
|
-
import { join as
|
|
110238
|
+
import { join as join76 } from "node:path";
|
|
110160
110239
|
import { fileURLToPath as fileURLToPath6 } from "node:url";
|
|
110161
110240
|
init_shared();
|
|
110162
110241
|
function getPlatformDefaultCacheDir(platform = process.platform) {
|
|
110163
110242
|
if (platform === "darwin")
|
|
110164
|
-
return
|
|
110243
|
+
return join76(homedir16(), "Library", "Caches");
|
|
110165
110244
|
if (platform === "win32")
|
|
110166
|
-
return process.env.LOCALAPPDATA ??
|
|
110167
|
-
return
|
|
110245
|
+
return process.env.LOCALAPPDATA ?? join76(homedir16(), "AppData", "Local");
|
|
110246
|
+
return join76(homedir16(), ".cache");
|
|
110168
110247
|
}
|
|
110169
110248
|
function resolveOpenCodeCacheDir() {
|
|
110170
110249
|
const xdgCacheHome = process.env.XDG_CACHE_HOME;
|
|
110171
110250
|
if (xdgCacheHome)
|
|
110172
|
-
return
|
|
110251
|
+
return join76(xdgCacheHome, "opencode");
|
|
110173
110252
|
const fromShared = getOpenCodeCacheDir();
|
|
110174
|
-
const platformDefault =
|
|
110253
|
+
const platformDefault = join76(getPlatformDefaultCacheDir(), "opencode");
|
|
110175
110254
|
if (existsSync50(fromShared) || !existsSync50(platformDefault))
|
|
110176
110255
|
return fromShared;
|
|
110177
110256
|
return platformDefault;
|
|
@@ -110203,11 +110282,11 @@ function normalizeVersion(value) {
|
|
|
110203
110282
|
function createPackageCandidates(rootDir) {
|
|
110204
110283
|
return ACCEPTED_PACKAGE_NAMES.map((packageName) => ({
|
|
110205
110284
|
packageName,
|
|
110206
|
-
installedPackagePath:
|
|
110285
|
+
installedPackagePath: join76(rootDir, "node_modules", packageName, "package.json")
|
|
110207
110286
|
}));
|
|
110208
110287
|
}
|
|
110209
110288
|
function createTaggedInstallCandidates(rootDir) {
|
|
110210
|
-
const packagesDir =
|
|
110289
|
+
const packagesDir = join76(rootDir, "packages");
|
|
110211
110290
|
if (!existsSync50(packagesDir))
|
|
110212
110291
|
return [];
|
|
110213
110292
|
const candidates = [];
|
|
@@ -110215,14 +110294,14 @@ function createTaggedInstallCandidates(rootDir) {
|
|
|
110215
110294
|
const packageName = ACCEPTED_PACKAGE_NAMES.find((name) => entryName.startsWith(`${name}@`));
|
|
110216
110295
|
if (packageName === undefined)
|
|
110217
110296
|
continue;
|
|
110218
|
-
const installDir =
|
|
110297
|
+
const installDir = join76(packagesDir, entryName);
|
|
110219
110298
|
candidates.push({
|
|
110220
110299
|
cacheDir: installDir,
|
|
110221
|
-
cachePackagePath:
|
|
110300
|
+
cachePackagePath: join76(installDir, "package.json"),
|
|
110222
110301
|
packageCandidates: [
|
|
110223
110302
|
{
|
|
110224
110303
|
packageName,
|
|
110225
|
-
installedPackagePath:
|
|
110304
|
+
installedPackagePath: join76(installDir, "node_modules", packageName, "package.json")
|
|
110226
110305
|
}
|
|
110227
110306
|
]
|
|
110228
110307
|
});
|
|
@@ -110267,13 +110346,13 @@ function getLoadedPluginVersion() {
|
|
|
110267
110346
|
const candidates = [
|
|
110268
110347
|
{
|
|
110269
110348
|
cacheDir: configDir,
|
|
110270
|
-
cachePackagePath:
|
|
110349
|
+
cachePackagePath: join76(configDir, "package.json"),
|
|
110271
110350
|
packageCandidates: createPackageCandidates(configDir)
|
|
110272
110351
|
},
|
|
110273
110352
|
...createTaggedInstallCandidates(configDir),
|
|
110274
110353
|
{
|
|
110275
110354
|
cacheDir,
|
|
110276
|
-
cachePackagePath:
|
|
110355
|
+
cachePackagePath: join76(cacheDir, "package.json"),
|
|
110277
110356
|
packageCandidates: createPackageCandidates(cacheDir)
|
|
110278
110357
|
},
|
|
110279
110358
|
...createTaggedInstallCandidates(cacheDir)
|
|
@@ -110467,18 +110546,18 @@ async function checkSystem(deps = defaultDeps6) {
|
|
|
110467
110546
|
init_shared();
|
|
110468
110547
|
import { existsSync as existsSync52, readFileSync as readFileSync33 } from "node:fs";
|
|
110469
110548
|
import { homedir as homedir17 } from "node:os";
|
|
110470
|
-
import { join as
|
|
110549
|
+
import { join as join77 } from "node:path";
|
|
110471
110550
|
function getUserConfigDir2() {
|
|
110472
110551
|
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
110473
110552
|
if (xdgConfig)
|
|
110474
|
-
return
|
|
110475
|
-
return
|
|
110553
|
+
return join77(xdgConfig, "opencode");
|
|
110554
|
+
return join77(homedir17(), ".config", "opencode");
|
|
110476
110555
|
}
|
|
110477
110556
|
function loadCustomProviderNames() {
|
|
110478
110557
|
const configDir = getUserConfigDir2();
|
|
110479
110558
|
const candidatePaths = [
|
|
110480
|
-
|
|
110481
|
-
|
|
110559
|
+
join77(configDir, "opencode.json"),
|
|
110560
|
+
join77(configDir, "opencode.jsonc")
|
|
110482
110561
|
];
|
|
110483
110562
|
for (const configPath of candidatePaths) {
|
|
110484
110563
|
if (!existsSync52(configPath))
|
|
@@ -110499,7 +110578,7 @@ function loadCustomProviderNames() {
|
|
|
110499
110578
|
return [];
|
|
110500
110579
|
}
|
|
110501
110580
|
function loadAvailableModelsFromCache() {
|
|
110502
|
-
const cacheFile =
|
|
110581
|
+
const cacheFile = join77(getOpenCodeCacheDir(), "models.json");
|
|
110503
110582
|
const customProviders = loadCustomProviderNames();
|
|
110504
110583
|
if (!existsSync52(cacheFile)) {
|
|
110505
110584
|
if (customProviders.length > 0) {
|
|
@@ -110561,7 +110640,7 @@ function loadOmoConfig2() {
|
|
|
110561
110640
|
|
|
110562
110641
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-details.ts
|
|
110563
110642
|
init_shared();
|
|
110564
|
-
import { join as
|
|
110643
|
+
import { join as join78 } from "node:path";
|
|
110565
110644
|
|
|
110566
110645
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-variant.ts
|
|
110567
110646
|
function formatModelWithVariant(model, variant) {
|
|
@@ -110603,7 +110682,7 @@ function formatCapabilityResolutionLabel(mode2) {
|
|
|
110603
110682
|
}
|
|
110604
110683
|
function buildModelResolutionDetails(options) {
|
|
110605
110684
|
const details = [];
|
|
110606
|
-
const cacheFile =
|
|
110685
|
+
const cacheFile = join78(getOpenCodeCacheDir(), "models.json");
|
|
110607
110686
|
details.push("═══ Available Models (from cache) ═══");
|
|
110608
110687
|
details.push("");
|
|
110609
110688
|
if (options.available.cacheExists) {
|
|
@@ -110913,7 +110992,7 @@ async function checkConfig() {
|
|
|
110913
110992
|
// packages/omo-opencode/src/cli/doctor/checks/deprecated-reasoning-keys.ts
|
|
110914
110993
|
init_main();
|
|
110915
110994
|
import { existsSync as existsSync53, readFileSync as readFileSync34 } from "node:fs";
|
|
110916
|
-
import { join as
|
|
110995
|
+
import { join as join79 } from "node:path";
|
|
110917
110996
|
var CANONICAL_REPLACEMENT = new Map([
|
|
110918
110997
|
["variant", "reasoning"],
|
|
110919
110998
|
["reasoningEffort", "reasoning"],
|
|
@@ -110968,7 +111047,7 @@ function userConfigPaths() {
|
|
|
110968
111047
|
const home = process.env.HOME ?? process.env.USERPROFILE;
|
|
110969
111048
|
if (home === undefined || home.length === 0)
|
|
110970
111049
|
return [];
|
|
110971
|
-
return [
|
|
111050
|
+
return [join79(home, ".omo", "omo.jsonc"), join79(home, ".omo", "omo.json")];
|
|
110972
111051
|
}
|
|
110973
111052
|
async function checkDeprecatedReasoningKeys() {
|
|
110974
111053
|
const issues = [];
|
|
@@ -110994,25 +111073,25 @@ init_src();
|
|
|
110994
111073
|
import { existsSync as existsSync54 } from "node:fs";
|
|
110995
111074
|
import { createRequire as createRequire3 } from "node:module";
|
|
110996
111075
|
import { homedir as homedir19 } from "node:os";
|
|
110997
|
-
import { dirname as dirname31, join as
|
|
111076
|
+
import { dirname as dirname31, join as join81 } from "node:path";
|
|
110998
111077
|
|
|
110999
111078
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
111000
|
-
import { join as
|
|
111079
|
+
import { join as join80 } from "path";
|
|
111001
111080
|
import { homedir as homedir18, tmpdir as tmpdir4 } from "os";
|
|
111002
111081
|
init_binary_downloader();
|
|
111003
111082
|
init_logger2();
|
|
111004
111083
|
init_plugin_identity();
|
|
111005
111084
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
111006
|
-
var DEBUG_FILE =
|
|
111085
|
+
var DEBUG_FILE = join80(tmpdir4(), "comment-checker-debug.log");
|
|
111007
111086
|
function getCacheDir2() {
|
|
111008
111087
|
if (process.platform === "win32") {
|
|
111009
111088
|
const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA;
|
|
111010
|
-
const base2 = localAppData ||
|
|
111011
|
-
return
|
|
111089
|
+
const base2 = localAppData || join80(homedir18(), "AppData", "Local");
|
|
111090
|
+
return join80(base2, CACHE_DIR_NAME, "bin");
|
|
111012
111091
|
}
|
|
111013
111092
|
const xdgCache = process.env.XDG_CACHE_HOME;
|
|
111014
|
-
const base = xdgCache ||
|
|
111015
|
-
return
|
|
111093
|
+
const base = xdgCache || join80(homedir18(), ".cache");
|
|
111094
|
+
return join80(base, CACHE_DIR_NAME, "bin");
|
|
111016
111095
|
}
|
|
111017
111096
|
function getBinaryName() {
|
|
111018
111097
|
return process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
@@ -111062,7 +111141,7 @@ async function getBinaryVersion(binary) {
|
|
|
111062
111141
|
}
|
|
111063
111142
|
}
|
|
111064
111143
|
async function checkAstGrepCli() {
|
|
111065
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
111144
|
+
const runtimeDir = astGrepRuntimeDir(join81(homedir19(), ".omo"));
|
|
111066
111145
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
111067
111146
|
if (sgPath === null) {
|
|
111068
111147
|
return {
|
|
@@ -111092,10 +111171,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
|
|
|
111092
111171
|
const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
|
|
111093
111172
|
try {
|
|
111094
111173
|
const packageDir = baseDirOverride ?? dirname31(resolvePackageJsonPath());
|
|
111095
|
-
const vendorPath =
|
|
111174
|
+
const vendorPath = join81(packageDir, "vendor", platformKey, binaryName);
|
|
111096
111175
|
if (existsSync54(vendorPath))
|
|
111097
111176
|
return vendorPath;
|
|
111098
|
-
const binPath =
|
|
111177
|
+
const binPath = join81(packageDir, "bin", binaryName);
|
|
111099
111178
|
if (existsSync54(binPath))
|
|
111100
111179
|
return binPath;
|
|
111101
111180
|
} catch (error51) {
|
|
@@ -111471,13 +111550,13 @@ function getInstalledLspServers(options = {}) {
|
|
|
111471
111550
|
init_shared();
|
|
111472
111551
|
import { existsSync as existsSync56, readFileSync as readFileSync36 } from "node:fs";
|
|
111473
111552
|
import { homedir as homedir20 } from "node:os";
|
|
111474
|
-
import { join as
|
|
111553
|
+
import { join as join82 } from "node:path";
|
|
111475
111554
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
111476
111555
|
function getMcpConfigPaths() {
|
|
111477
111556
|
return [
|
|
111478
|
-
|
|
111479
|
-
|
|
111480
|
-
|
|
111557
|
+
join82(homedir20(), ".claude", ".mcp.json"),
|
|
111558
|
+
join82(process.cwd(), ".mcp.json"),
|
|
111559
|
+
join82(process.cwd(), ".claude", ".mcp.json")
|
|
111481
111560
|
];
|
|
111482
111561
|
}
|
|
111483
111562
|
function loadUserMcpConfig() {
|
|
@@ -111759,7 +111838,7 @@ init_src();
|
|
|
111759
111838
|
import { existsSync as existsSync58 } from "node:fs";
|
|
111760
111839
|
import { lstat as lstat15, readdir as readdir14, readFile as readFile27 } from "node:fs/promises";
|
|
111761
111840
|
import { homedir as homedir22 } from "node:os";
|
|
111762
|
-
import { basename as basename10, join as
|
|
111841
|
+
import { basename as basename10, join as join83, resolve as resolve23 } from "node:path";
|
|
111763
111842
|
// packages/omo-opencode/package.json
|
|
111764
111843
|
var package_default3 = {
|
|
111765
111844
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -111825,13 +111904,13 @@ var CODEX_BIN_NAMES = [
|
|
|
111825
111904
|
"omo-git-bash-hook"
|
|
111826
111905
|
];
|
|
111827
111906
|
async function gatherCodexSummary(deps = {}) {
|
|
111828
|
-
const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
111907
|
+
const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join83(homedir22(), ".codex"));
|
|
111829
111908
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
111830
111909
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
111831
111910
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
111832
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
111833
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
111834
|
-
const configPath =
|
|
111911
|
+
const manifest = pluginRoot === null ? null : await readJson(join83(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
111912
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join83(pluginRoot, "lazycodex-install.json"));
|
|
111913
|
+
const configPath = join83(codexHome, "config.toml");
|
|
111835
111914
|
const pluginVersion = stringField(manifest, "version");
|
|
111836
111915
|
return {
|
|
111837
111916
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
@@ -111888,7 +111967,7 @@ function buildCodexIssues(summary) {
|
|
|
111888
111967
|
if (summary.pluginRoot === null) {
|
|
111889
111968
|
issues.push({
|
|
111890
111969
|
title: "OMO Codex plugin is not installed",
|
|
111891
|
-
description: `Expected cached plugin at ${
|
|
111970
|
+
description: `Expected cached plugin at ${join83("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
111892
111971
|
fix: "Run: npx lazycodex-ai install",
|
|
111893
111972
|
severity: "error",
|
|
111894
111973
|
affects: ["plugin loading"]
|
|
@@ -111953,12 +112032,12 @@ function buildCodexIssues(summary) {
|
|
|
111953
112032
|
return issues;
|
|
111954
112033
|
}
|
|
111955
112034
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
111956
|
-
const pluginRoot =
|
|
112035
|
+
const pluginRoot = join83(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
|
|
111957
112036
|
if (!existsSync58(pluginRoot))
|
|
111958
112037
|
return null;
|
|
111959
112038
|
const versions2 = await readdir14(pluginRoot, { withFileTypes: true });
|
|
111960
112039
|
const candidates = versions2.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
111961
|
-
return candidates.length === 0 ? null :
|
|
112040
|
+
return candidates.length === 0 ? null : join83(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
111962
112041
|
}
|
|
111963
112042
|
async function readCodexConfigSummary(configPath) {
|
|
111964
112043
|
if (!existsSync58(configPath)) {
|
|
@@ -111986,13 +112065,13 @@ async function readCodexConfigSummary(configPath) {
|
|
|
111986
112065
|
async function readLinkedBins(binDir) {
|
|
111987
112066
|
const linked = [];
|
|
111988
112067
|
for (const name of CODEX_BIN_NAMES) {
|
|
111989
|
-
if (await pathExists2(
|
|
112068
|
+
if (await pathExists2(join83(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
111990
112069
|
linked.push(name);
|
|
111991
112070
|
}
|
|
111992
112071
|
return linked;
|
|
111993
112072
|
}
|
|
111994
112073
|
async function readLinkedAgents(codexHome) {
|
|
111995
|
-
const agentsDir =
|
|
112074
|
+
const agentsDir = join83(codexHome, "agents");
|
|
111996
112075
|
if (!existsSync58(agentsDir))
|
|
111997
112076
|
return [];
|
|
111998
112077
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
@@ -112108,7 +112187,7 @@ async function pathExists2(path15) {
|
|
|
112108
112187
|
init_src();
|
|
112109
112188
|
import { readdir as readdir15, readFile as readFile28, stat as stat7 } from "node:fs/promises";
|
|
112110
112189
|
import { homedir as homedir23 } from "node:os";
|
|
112111
|
-
import { dirname as dirname33, isAbsolute as isAbsolute13, join as
|
|
112190
|
+
import { dirname as dirname33, isAbsolute as isAbsolute13, join as join84, relative as relative9, resolve as resolve24, sep as sep9 } from "node:path";
|
|
112112
112191
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
112113
112192
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
112114
112193
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
@@ -112118,7 +112197,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
112118
112197
|
const env2 = deps.env ?? process.env;
|
|
112119
112198
|
const platform = deps.platform ?? process.platform;
|
|
112120
112199
|
const arch = deps.arch ?? process.arch;
|
|
112121
|
-
const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ??
|
|
112200
|
+
const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ?? join84(homedir23(), ".codex"));
|
|
112122
112201
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
112123
112202
|
if (summary.pluginRoot === null) {
|
|
112124
112203
|
return {
|
|
@@ -112143,7 +112222,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
112143
112222
|
});
|
|
112144
112223
|
}
|
|
112145
112224
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
112146
|
-
const runtimeSgPath =
|
|
112225
|
+
const runtimeSgPath = join84(runtimeSgDir, sgBinaryName(platform));
|
|
112147
112226
|
const sg = findSgBinarySync({
|
|
112148
112227
|
arch,
|
|
112149
112228
|
env: env2,
|
|
@@ -112255,7 +112334,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
112255
112334
|
for (const entry of entries) {
|
|
112256
112335
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
112257
112336
|
continue;
|
|
112258
|
-
const entryPath =
|
|
112337
|
+
const entryPath = join84(root, entry.name);
|
|
112259
112338
|
if (entry.isDirectory()) {
|
|
112260
112339
|
paths3.push(...await findManifestPaths(entryPath, manifestName));
|
|
112261
112340
|
continue;
|
|
@@ -112299,18 +112378,18 @@ function isPluginRuntimePathArg(arg) {
|
|
|
112299
112378
|
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute13(arg));
|
|
112300
112379
|
}
|
|
112301
112380
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
112302
|
-
return
|
|
112381
|
+
return join84(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
112303
112382
|
}
|
|
112304
112383
|
function describeSgSource(sgPath, env2, runtimeSgDir, platform) {
|
|
112305
112384
|
const override = env2[SG_PATH_ENV_KEY]?.trim();
|
|
112306
112385
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
112307
112386
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
112308
|
-
if (sgPath ===
|
|
112387
|
+
if (sgPath === join84(runtimeSgDir, sgBinaryName(platform)))
|
|
112309
112388
|
return "runtime dir";
|
|
112310
112389
|
return "PATH";
|
|
112311
112390
|
}
|
|
112312
112391
|
async function readBootstrapStateSummary(codexHome) {
|
|
112313
|
-
const statePath =
|
|
112392
|
+
const statePath = join84(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
112314
112393
|
const raw = await readJson2(statePath);
|
|
112315
112394
|
if (raw === null)
|
|
112316
112395
|
return null;
|
|
@@ -112389,16 +112468,16 @@ function isRecord14(value) {
|
|
|
112389
112468
|
import { existsSync as existsSync59 } from "node:fs";
|
|
112390
112469
|
import { readFile as readFile29 } from "node:fs/promises";
|
|
112391
112470
|
import { homedir as homedir24 } from "node:os";
|
|
112392
|
-
import { join as
|
|
112471
|
+
import { join as join85, resolve as resolve25 } from "node:path";
|
|
112393
112472
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
112394
112473
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
112395
112474
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
112396
112475
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
112397
|
-
const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
112476
|
+
const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join85(homedir24(), ".codex"));
|
|
112398
112477
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
112399
112478
|
const platform = deps.platform ?? process.platform;
|
|
112400
|
-
const wrapperPath =
|
|
112401
|
-
const legacyWrapperPath =
|
|
112479
|
+
const wrapperPath = join85(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
112480
|
+
const legacyWrapperPath = join85(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
112402
112481
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
112403
112482
|
const issues = [];
|
|
112404
112483
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
@@ -112926,12 +113005,12 @@ import {
|
|
|
112926
113005
|
unlinkSync as unlinkSync9,
|
|
112927
113006
|
writeFileSync as writeFileSync12
|
|
112928
113007
|
} from "node:fs";
|
|
112929
|
-
import { basename as basename11, dirname as dirname34, join as
|
|
113008
|
+
import { basename as basename11, dirname as dirname34, join as join88 } from "node:path";
|
|
112930
113009
|
|
|
112931
113010
|
// packages/mcp-client-core/src/config-dir.ts
|
|
112932
113011
|
import { existsSync as existsSync60, realpathSync as realpathSync8 } from "node:fs";
|
|
112933
113012
|
import { homedir as homedir25 } from "node:os";
|
|
112934
|
-
import { join as
|
|
113013
|
+
import { join as join86, resolve as resolve26 } from "node:path";
|
|
112935
113014
|
function resolveConfigPath2(pathValue) {
|
|
112936
113015
|
const resolvedPath = resolve26(pathValue);
|
|
112937
113016
|
if (!existsSync60(resolvedPath))
|
|
@@ -112949,13 +113028,13 @@ function getOpenCodeCliConfigDir(env2 = process.env) {
|
|
|
112949
113028
|
if (customConfigDir) {
|
|
112950
113029
|
return resolveConfigPath2(customConfigDir);
|
|
112951
113030
|
}
|
|
112952
|
-
const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() ||
|
|
112953
|
-
return resolveConfigPath2(
|
|
113031
|
+
const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() || join86(homedir25(), ".config");
|
|
113032
|
+
return resolveConfigPath2(join86(xdgConfigDir, "opencode"));
|
|
112954
113033
|
}
|
|
112955
113034
|
|
|
112956
113035
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
112957
113036
|
import { chmodSync as chmodSync4, existsSync as existsSync61, readFileSync as readFileSync38, renameSync as renameSync6, writeFileSync as writeFileSync11 } from "node:fs";
|
|
112958
|
-
import { join as
|
|
113037
|
+
import { join as join87 } from "node:path";
|
|
112959
113038
|
var INDEX_FILE_NAME = "index.json";
|
|
112960
113039
|
function isTokenIndex(value) {
|
|
112961
113040
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -112963,7 +113042,7 @@ function isTokenIndex(value) {
|
|
|
112963
113042
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
112964
113043
|
}
|
|
112965
113044
|
function getIndexPath(storageDir) {
|
|
112966
|
-
return
|
|
113045
|
+
return join87(storageDir, INDEX_FILE_NAME);
|
|
112967
113046
|
}
|
|
112968
113047
|
function readTokenIndex(storageDir) {
|
|
112969
113048
|
const indexPath = getIndexPath(storageDir);
|
|
@@ -113007,16 +113086,16 @@ function deleteTokenIndexEntry(storageDir, hash2) {
|
|
|
113007
113086
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
113008
113087
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
113009
113088
|
function getMcpOauthStorageDir() {
|
|
113010
|
-
return
|
|
113089
|
+
return join88(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
113011
113090
|
}
|
|
113012
113091
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
113013
113092
|
return createHash6("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
113014
113093
|
}
|
|
113015
113094
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
113016
|
-
return
|
|
113095
|
+
return join88(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
113017
113096
|
}
|
|
113018
113097
|
function getLegacyStoragePath() {
|
|
113019
|
-
return
|
|
113098
|
+
return join88(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
113020
113099
|
}
|
|
113021
113100
|
function normalizeHost2(serverHost) {
|
|
113022
113101
|
let host = serverHost.trim();
|
|
@@ -113195,7 +113274,7 @@ function listTokensByHost(serverHost) {
|
|
|
113195
113274
|
for (const [hash2, indexedKey] of Object.entries(index)) {
|
|
113196
113275
|
if (!indexedKey.startsWith(prefix))
|
|
113197
113276
|
continue;
|
|
113198
|
-
const indexedToken = readTokenFile(
|
|
113277
|
+
const indexedToken = readTokenFile(join88(getMcpOauthStorageDir(), `${hash2}.json`));
|
|
113199
113278
|
if (indexedToken)
|
|
113200
113279
|
result[indexedKey] = indexedToken;
|
|
113201
113280
|
}
|
|
@@ -113210,7 +113289,7 @@ function listAllTokens() {
|
|
|
113210
113289
|
for (const entry of readdirSync11(dir, { withFileTypes: true })) {
|
|
113211
113290
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
113212
113291
|
continue;
|
|
113213
|
-
const token = readTokenFile(
|
|
113292
|
+
const token = readTokenFile(join88(dir, entry.name));
|
|
113214
113293
|
const hash2 = basename11(entry.name, ".json");
|
|
113215
113294
|
if (token)
|
|
113216
113295
|
result[index[hash2] ?? hash2] = token;
|