diff --git a/.github/workflows/publish-platform.yml b/.github/workflows/publish-platform.yml
index a7f9439ca..2c9b4ba34 100644
--- a/.github/workflows/publish-platform.yml
+++ b/.github/workflows/publish-platform.yml
@@ -197,11 +197,6 @@ jobs:
retention-days: 1
if-no-files-found: error
- # =============================================================================
- # Job 2: Publish all platforms (oh-my-opencode + oh-my-openagent)
- # - Runs on ubuntu-latest for ALL platforms (just downloading artifacts)
- # - Uses NODE_AUTH_TOKEN for auth + OIDC for provenance attestation
- # =============================================================================
publish:
needs: build
if: always() && !cancelled()
@@ -226,23 +221,9 @@ jobs:
echo "→ ${PKG_NAME}@${VERSION} will be published"
fi
- - name: Check if oh-my-openagent already published
- id: check-openagent
- run: |
- PKG_NAME="oh-my-openagent-${{ matrix.platform }}"
- VERSION="${{ inputs.version }}"
- STATUS=$(curl -s -o /dev/null -w "%{http_code}" "https://registry.npmjs.org/${PKG_NAME}/${VERSION}")
- if [ "$STATUS" = "200" ]; then
- echo "skip=true" >> $GITHUB_OUTPUT
- echo "✓ ${PKG_NAME}@${VERSION} already published, skipping"
- else
- echo "skip=false" >> $GITHUB_OUTPUT
- echo "→ ${PKG_NAME}@${VERSION} will be published"
- fi
-
- name: Download artifact
id: download
- if: steps.check.outputs.skip != 'true' || steps.check-openagent.outputs.skip != 'true'
+ if: steps.check.outputs.skip != 'true'
continue-on-error: true
uses: actions/download-artifact@v4
with:
@@ -250,7 +231,7 @@ jobs:
path: .
- name: Extract artifact
- if: (steps.check.outputs.skip != 'true' || steps.check-openagent.outputs.skip != 'true') && steps.download.outcome == 'success'
+ if: steps.check.outputs.skip != 'true' && steps.download.outcome == 'success'
run: |
PLATFORM="${{ matrix.platform }}"
mkdir -p packages/${PLATFORM}
@@ -266,7 +247,7 @@ jobs:
ls -la packages/${PLATFORM}/bin/
- uses: actions/setup-node@v4
- if: (steps.check.outputs.skip != 'true' || steps.check-openagent.outputs.skip != 'true') && steps.download.outcome == 'success'
+ if: steps.check.outputs.skip != 'true' && steps.download.outcome == 'success'
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
@@ -286,25 +267,3 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
NPM_CONFIG_PROVENANCE: true
timeout-minutes: 15
-
- - name: Publish oh-my-openagent-${{ matrix.platform }}
- if: steps.check-openagent.outputs.skip != 'true' && steps.download.outcome == 'success'
- run: |
- cd packages/${{ matrix.platform }}
-
- # Rename package for oh-my-openagent
- jq --arg name "oh-my-openagent-${{ matrix.platform }}" \
- --arg desc "Platform-specific binary for oh-my-openagent (${{ matrix.platform }})" \
- '.name = $name | .description = $desc | .bin = {"oh-my-openagent": (.bin | to_entries | .[0].value)}' \
- package.json > tmp.json && mv tmp.json package.json
-
- TAG_ARG=""
- if [ -n "${{ inputs.dist_tag }}" ]; then
- TAG_ARG="--tag ${{ inputs.dist_tag }}"
- fi
-
- npm publish --access public --provenance $TAG_ARG
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
- NPM_CONFIG_PROVENANCE: true
- timeout-minutes: 15
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index f22c81ce4..ef51d5038 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -215,40 +215,6 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
NPM_CONFIG_PROVENANCE: true
- - name: Publish oh-my-openagent
- if: steps.check.outputs.skip != 'true'
- run: |
- # Update package name to oh-my-openagent
- jq '.name = "oh-my-openagent"' package.json > tmp.json && mv tmp.json package.json
-
- # Update optionalDependencies to use oh-my-openagent naming
- jq '.optionalDependencies = {
- "oh-my-openagent-darwin-arm64": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-darwin-x64": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-darwin-x64-baseline": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-arm64": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-arm64-musl": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-x64": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-x64-baseline": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-x64-musl": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-linux-x64-musl-baseline": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-windows-x64": "${{ steps.version.outputs.version }}",
- "oh-my-openagent-windows-x64-baseline": "${{ steps.version.outputs.version }}"
- }' package.json > tmp.json && mv tmp.json package.json
-
- TAG_ARG=""
- if [ -n "${{ steps.version.outputs.dist_tag }}" ]; then
- TAG_ARG="--tag ${{ steps.version.outputs.dist_tag }}"
- fi
- npm publish --access public --provenance $TAG_ARG || echo "oh-my-openagent publish may have failed (package may already exist)"
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
- NPM_CONFIG_PROVENANCE: true
- - name: Restore package.json
- if: steps.check.outputs.skip != 'true'
- run: |
- # Restore original package name
- jq '.name = "oh-my-opencode"' package.json > tmp.json && mv tmp.json package.json
trigger-platform:
runs-on: ubuntu-latest
diff --git a/README.md b/README.md
index ac8c31bf3..17575df4c 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@
[](https://github.com/code-yeongyu/oh-my-openagent/releases)
-[](https://www.npmjs.com/package/oh-my-openagent)
+[](https://www.npmjs.com/package/oh-my-opencode)
[](https://github.com/code-yeongyu/oh-my-openagent/graphs/contributors)
[](https://github.com/code-yeongyu/oh-my-openagent/network/members)
[](https://github.com/code-yeongyu/oh-my-openagent/stargazers)
diff --git a/assets/oh-my-openagent.schema.json b/assets/oh-my-openagent.schema.json
deleted file mode 100644
index d034c5103..000000000
--- a/assets/oh-my-openagent.schema.json
+++ /dev/null
@@ -1,3930 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json",
- "title": "Oh My OpenAgent Configuration",
- "description": "Configuration schema for oh-my-openagent plugin",
- "type": "object",
- "properties": {
- "$schema": {
- "type": "string"
- },
- "new_task_system_enabled": {
- "type": "boolean"
- },
- "default_run_agent": {
- "type": "string"
- },
- "disabled_mcps": {
- "type": "array",
- "items": {
- "type": "string",
- "minLength": 1
- }
- },
- "disabled_agents": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "disabled_skills": {
- "type": "array",
- "items": {
- "type": "string",
- "enum": [
- "playwright",
- "agent-browser",
- "dev-browser",
- "frontend-ui-ux",
- "git-master"
- ]
- }
- },
- "disabled_hooks": {
- "type": "array",
- "items": {
- "type": "string",
- "enum": [
- "gpt-permission-continuation",
- "todo-continuation-enforcer",
- "context-window-monitor",
- "session-recovery",
- "session-notification",
- "comment-checker",
- "tool-output-truncator",
- "question-label-truncator",
- "directory-agents-injector",
- "directory-readme-injector",
- "empty-task-response-detector",
- "think-mode",
- "model-fallback",
- "anthropic-context-window-limit-recovery",
- "preemptive-compaction",
- "rules-injector",
- "background-notification",
- "auto-update-checker",
- "startup-toast",
- "keyword-detector",
- "agent-usage-reminder",
- "non-interactive-env",
- "interactive-bash-session",
- "thinking-block-validator",
- "ralph-loop",
- "category-skill-reminder",
- "compaction-context-injector",
- "compaction-todo-preserver",
- "claude-code-hooks",
- "auto-slash-command",
- "edit-error-recovery",
- "json-error-recovery",
- "delegate-task-retry",
- "prometheus-md-only",
- "sisyphus-junior-notepad",
- "no-sisyphus-gpt",
- "no-hephaestus-non-gpt",
- "start-work",
- "atlas",
- "unstable-agent-babysitter",
- "task-resume-info",
- "stop-continuation-guard",
- "tasks-todowrite-disabler",
- "runtime-fallback",
- "write-existing-file-guard",
- "anthropic-effort",
- "hashline-read-enhancer",
- "read-image-resizer"
- ]
- }
- },
- "disabled_commands": {
- "type": "array",
- "items": {
- "type": "string",
- "enum": [
- "init-deep",
- "ralph-loop",
- "ulw-loop",
- "cancel-ralph",
- "refactor",
- "start-work",
- "stop-continuation"
- ]
- }
- },
- "disabled_tools": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "hashline_edit": {
- "type": "boolean"
- },
- "model_fallback": {
- "type": "boolean"
- },
- "agents": {
- "type": "object",
- "properties": {
- "build": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "plan": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "sisyphus": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "hephaestus": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "allow_non_gpt_model": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "sisyphus-junior": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "OpenCode-Builder": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "prometheus": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "metis": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "momus": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "oracle": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "librarian": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "explore": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "multimodal-looker": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "atlas": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "category": {
- "type": "string"
- },
- "skills": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "prompt": {
- "type": "string"
- },
- "prompt_append": {
- "type": "string"
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "disable": {
- "type": "boolean"
- },
- "description": {
- "type": "string"
- },
- "mode": {
- "type": "string",
- "enum": [
- "subagent",
- "primary",
- "all"
- ]
- },
- "color": {
- "type": "string",
- "pattern": "^#[0-9A-Fa-f]{6}$"
- },
- "permission": {
- "type": "object",
- "properties": {
- "edit": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "bash": {
- "anyOf": [
- {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- }
- ]
- },
- "webfetch": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "task": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "doom_loop": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- },
- "external_directory": {
- "type": "string",
- "enum": [
- "ask",
- "allow",
- "deny"
- ]
- }
- },
- "additionalProperties": false
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "providerOptions": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "ultrawork": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "compaction": {
- "type": "object",
- "properties": {
- "model": {
- "type": "string"
- },
- "variant": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "categories": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "object",
- "properties": {
- "description": {
- "type": "string"
- },
- "model": {
- "type": "string"
- },
- "fallback_models": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "variant": {
- "type": "string"
- },
- "temperature": {
- "type": "number",
- "minimum": 0,
- "maximum": 2
- },
- "top_p": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "maxTokens": {
- "type": "number"
- },
- "thinking": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enabled",
- "disabled"
- ]
- },
- "budgetTokens": {
- "type": "number"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- "reasoningEffort": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high",
- "xhigh"
- ]
- },
- "textVerbosity": {
- "type": "string",
- "enum": [
- "low",
- "medium",
- "high"
- ]
- },
- "tools": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- },
- "prompt_append": {
- "type": "string"
- },
- "max_prompt_tokens": {
- "type": "integer",
- "exclusiveMinimum": 0,
- "maximum": 9007199254740991
- },
- "is_unstable_agent": {
- "type": "boolean"
- },
- "disable": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- },
- "claude_code": {
- "type": "object",
- "properties": {
- "mcp": {
- "type": "boolean"
- },
- "commands": {
- "type": "boolean"
- },
- "skills": {
- "type": "boolean"
- },
- "agents": {
- "type": "boolean"
- },
- "hooks": {
- "type": "boolean"
- },
- "plugins": {
- "type": "boolean"
- },
- "plugins_override": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "boolean"
- }
- }
- },
- "additionalProperties": false
- },
- "sisyphus_agent": {
- "type": "object",
- "properties": {
- "disabled": {
- "type": "boolean"
- },
- "default_builder_enabled": {
- "type": "boolean"
- },
- "planner_enabled": {
- "type": "boolean"
- },
- "replace_plan": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "comment_checker": {
- "type": "object",
- "properties": {
- "custom_prompt": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "experimental": {
- "type": "object",
- "properties": {
- "aggressive_truncation": {
- "type": "boolean"
- },
- "auto_resume": {
- "type": "boolean"
- },
- "preemptive_compaction": {
- "type": "boolean"
- },
- "truncate_all_tool_outputs": {
- "type": "boolean"
- },
- "dynamic_context_pruning": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": false,
- "type": "boolean"
- },
- "notification": {
- "default": "detailed",
- "type": "string",
- "enum": [
- "off",
- "minimal",
- "detailed"
- ]
- },
- "turn_protection": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": true,
- "type": "boolean"
- },
- "turns": {
- "default": 3,
- "type": "number",
- "minimum": 1,
- "maximum": 10
- }
- },
- "required": [
- "enabled",
- "turns"
- ],
- "additionalProperties": false
- },
- "protected_tools": {
- "default": [
- "task",
- "todowrite",
- "todoread",
- "lsp_rename",
- "session_read",
- "session_write",
- "session_search"
- ],
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "strategies": {
- "type": "object",
- "properties": {
- "deduplication": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": true,
- "type": "boolean"
- }
- },
- "required": [
- "enabled"
- ],
- "additionalProperties": false
- },
- "supersede_writes": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": true,
- "type": "boolean"
- },
- "aggressive": {
- "default": false,
- "type": "boolean"
- }
- },
- "required": [
- "enabled",
- "aggressive"
- ],
- "additionalProperties": false
- },
- "purge_errors": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": true,
- "type": "boolean"
- },
- "turns": {
- "default": 5,
- "type": "number",
- "minimum": 1,
- "maximum": 20
- }
- },
- "required": [
- "enabled",
- "turns"
- ],
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- },
- "required": [
- "enabled",
- "notification",
- "protected_tools"
- ],
- "additionalProperties": false
- },
- "task_system": {
- "type": "boolean"
- },
- "plugin_load_timeout_ms": {
- "type": "number",
- "minimum": 1000
- },
- "safe_hook_creation": {
- "type": "boolean"
- },
- "disable_omo_env": {
- "type": "boolean"
- },
- "hashline_edit": {
- "type": "boolean"
- },
- "model_fallback_title": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "auto_update": {
- "type": "boolean"
- },
- "skills": {
- "anyOf": [
- {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- {
- "type": "object",
- "properties": {
- "sources": {
- "type": "array",
- "items": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "object",
- "properties": {
- "path": {
- "type": "string"
- },
- "recursive": {
- "type": "boolean"
- },
- "glob": {
- "type": "string"
- }
- },
- "required": [
- "path"
- ],
- "additionalProperties": false
- }
- ]
- }
- },
- "enable": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "disable": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": {
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "type": "object",
- "properties": {
- "description": {
- "type": "string"
- },
- "template": {
- "type": "string"
- },
- "from": {
- "type": "string"
- },
- "model": {
- "type": "string"
- },
- "agent": {
- "type": "string"
- },
- "subtask": {
- "type": "boolean"
- },
- "argument-hint": {
- "type": "string"
- },
- "license": {
- "type": "string"
- },
- "compatibility": {
- "type": "string"
- },
- "metadata": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "allowed-tools": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "disable": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- ]
- }
- }
- ]
- },
- "ralph_loop": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": false,
- "type": "boolean"
- },
- "default_max_iterations": {
- "default": 100,
- "type": "number",
- "minimum": 1,
- "maximum": 1000
- },
- "state_dir": {
- "type": "string"
- },
- "default_strategy": {
- "default": "continue",
- "type": "string",
- "enum": [
- "reset",
- "continue"
- ]
- }
- },
- "required": [
- "enabled",
- "default_max_iterations",
- "default_strategy"
- ],
- "additionalProperties": false
- },
- "runtime_fallback": {
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "type": "object",
- "properties": {
- "enabled": {
- "type": "boolean"
- },
- "retry_on_errors": {
- "type": "array",
- "items": {
- "type": "number"
- }
- },
- "max_fallback_attempts": {
- "type": "number",
- "minimum": 1,
- "maximum": 20
- },
- "cooldown_seconds": {
- "type": "number",
- "minimum": 0
- },
- "timeout_seconds": {
- "type": "number",
- "minimum": 0
- },
- "notify_on_fallback": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "background_task": {
- "type": "object",
- "properties": {
- "defaultConcurrency": {
- "type": "number",
- "minimum": 1
- },
- "providerConcurrency": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "number",
- "minimum": 0
- }
- },
- "modelConcurrency": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "number",
- "minimum": 0
- }
- },
- "maxDepth": {
- "type": "integer",
- "minimum": 1,
- "maximum": 9007199254740991
- },
- "maxDescendants": {
- "type": "integer",
- "minimum": 1,
- "maximum": 9007199254740991
- },
- "staleTimeoutMs": {
- "type": "number",
- "minimum": 60000
- },
- "messageStalenessTimeoutMs": {
- "type": "number",
- "minimum": 60000
- },
- "syncPollTimeoutMs": {
- "type": "number",
- "minimum": 60000
- }
- },
- "additionalProperties": false
- },
- "notification": {
- "type": "object",
- "properties": {
- "force_enable": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "babysitting": {
- "type": "object",
- "properties": {
- "timeout_ms": {
- "default": 120000,
- "type": "number"
- }
- },
- "required": [
- "timeout_ms"
- ],
- "additionalProperties": false
- },
- "git_master": {
- "type": "object",
- "properties": {
- "commit_footer": {
- "default": true,
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "type": "string"
- }
- ]
- },
- "include_co_authored_by": {
- "default": true,
- "type": "boolean"
- },
- "git_env_prefix": {
- "default": "GIT_MASTER=1",
- "type": "string"
- }
- },
- "required": [
- "commit_footer",
- "include_co_authored_by",
- "git_env_prefix"
- ],
- "additionalProperties": false
- },
- "browser_automation_engine": {
- "type": "object",
- "properties": {
- "provider": {
- "default": "playwright",
- "type": "string",
- "enum": [
- "playwright",
- "agent-browser",
- "dev-browser",
- "playwright-cli"
- ]
- }
- },
- "required": [
- "provider"
- ],
- "additionalProperties": false
- },
- "websearch": {
- "type": "object",
- "properties": {
- "provider": {
- "type": "string",
- "enum": [
- "exa",
- "tavily"
- ]
- }
- },
- "additionalProperties": false
- },
- "tmux": {
- "type": "object",
- "properties": {
- "enabled": {
- "default": false,
- "type": "boolean"
- },
- "layout": {
- "default": "main-vertical",
- "type": "string",
- "enum": [
- "main-horizontal",
- "main-vertical",
- "tiled",
- "even-horizontal",
- "even-vertical"
- ]
- },
- "main_pane_size": {
- "default": 60,
- "type": "number",
- "minimum": 20,
- "maximum": 80
- },
- "main_pane_min_width": {
- "default": 120,
- "type": "number",
- "minimum": 40
- },
- "agent_pane_min_width": {
- "default": 40,
- "type": "number",
- "minimum": 20
- }
- },
- "required": [
- "enabled",
- "layout",
- "main_pane_size",
- "main_pane_min_width",
- "agent_pane_min_width"
- ],
- "additionalProperties": false
- },
- "sisyphus": {
- "type": "object",
- "properties": {
- "tasks": {
- "type": "object",
- "properties": {
- "storage_path": {
- "type": "string"
- },
- "task_list_id": {
- "type": "string"
- },
- "claude_code_compat": {
- "default": false,
- "type": "boolean"
- }
- },
- "required": [
- "claude_code_compat"
- ],
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "start_work": {
- "type": "object",
- "properties": {
- "auto_commit": {
- "default": true,
- "type": "boolean"
- }
- },
- "required": [
- "auto_commit"
- ],
- "additionalProperties": false
- },
- "_migrations": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
-}
diff --git a/script/build-schema.ts b/script/build-schema.ts
index 747a5c9ed..6b2a2891f 100644
--- a/script/build-schema.ts
+++ b/script/build-schema.ts
@@ -3,30 +3,15 @@ import { createOhMyOpenCodeJsonSchema } from "./build-schema-document"
const SCHEMA_OUTPUT_PATH = "assets/oh-my-opencode.schema.json"
const DIST_SCHEMA_OUTPUT_PATH = "dist/oh-my-opencode.schema.json"
-const OPENAGENT_SCHEMA_OUTPUT_PATH = "assets/oh-my-openagent.schema.json"
-const OPENAGENT_DIST_SCHEMA_OUTPUT_PATH = "dist/oh-my-openagent.schema.json"
async function main() {
console.log("Generating JSON Schema...")
const finalSchema = createOhMyOpenCodeJsonSchema()
-
- // oh-my-opencode schema (backward compatibility)
await Bun.write(SCHEMA_OUTPUT_PATH, JSON.stringify(finalSchema, null, 2))
await Bun.write(DIST_SCHEMA_OUTPUT_PATH, JSON.stringify(finalSchema, null, 2))
- // oh-my-openagent schema (new name)
- const openAgentSchema = {
- ...finalSchema,
- $id: "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json",
- title: "Oh My OpenAgent Configuration",
- description: "Configuration schema for oh-my-openagent plugin",
- }
- await Bun.write(OPENAGENT_SCHEMA_OUTPUT_PATH, JSON.stringify(openAgentSchema, null, 2))
- await Bun.write(OPENAGENT_DIST_SCHEMA_OUTPUT_PATH, JSON.stringify(openAgentSchema, null, 2))
-
console.log(`✓ JSON Schema generated: ${SCHEMA_OUTPUT_PATH}`)
- console.log(`✓ JSON Schema generated: ${OPENAGENT_SCHEMA_OUTPUT_PATH}`)
}
main()
diff --git a/src/cli/config-manager/add-plugin-to-opencode-config.ts b/src/cli/config-manager/add-plugin-to-opencode-config.ts
index 82592fcf7..53af77a82 100644
--- a/src/cli/config-manager/add-plugin-to-opencode-config.ts
+++ b/src/cli/config-manager/add-plugin-to-opencode-config.ts
@@ -7,8 +7,7 @@ import { detectConfigFormat } from "./opencode-config-format"
import { parseOpenCodeConfigFileWithError, type OpenCodeConfig } from "./parse-opencode-config-file"
import { getPluginNameWithVersion } from "./plugin-name-with-version"
-const OLD_PACKAGE_NAME = "oh-my-opencode"
-const NEW_PACKAGE_NAME = "oh-my-openagent"
+const PACKAGE_NAME = "oh-my-opencode"
export async function addPluginToOpenCodeConfig(currentVersion: string): Promise {
try {
@@ -22,7 +21,7 @@ export async function addPluginToOpenCodeConfig(currentVersion: string): Promise
}
const { format, path } = detectConfigFormat()
- const pluginEntry = await getPluginNameWithVersion(currentVersion, NEW_PACKAGE_NAME)
+ const pluginEntry = await getPluginNameWithVersion(currentVersion, PACKAGE_NAME)
try {
if (format === "none") {
@@ -42,13 +41,7 @@ export async function addPluginToOpenCodeConfig(currentVersion: string): Promise
const config = parseResult.config
const plugins = config.plugin ?? []
- const existingIndex = plugins.findIndex(
- (p) =>
- p === OLD_PACKAGE_NAME ||
- p.startsWith(`${OLD_PACKAGE_NAME}@`) ||
- p === NEW_PACKAGE_NAME ||
- p.startsWith(`${NEW_PACKAGE_NAME}@`)
- )
+ const existingIndex = plugins.findIndex((plugin) => plugin === PACKAGE_NAME || plugin.startsWith(`${PACKAGE_NAME}@`))
if (existingIndex !== -1) {
if (plugins[existingIndex] === pluginEntry) {
diff --git a/src/cli/config-manager/detect-current-config.ts b/src/cli/config-manager/detect-current-config.ts
index b251debdb..5900f2777 100644
--- a/src/cli/config-manager/detect-current-config.ts
+++ b/src/cli/config-manager/detect-current-config.ts
@@ -56,6 +56,7 @@ function detectProvidersFromOmoConfig(): {
}
export function detectCurrentConfig(): DetectedConfig {
+ const PACKAGE_NAME = "oh-my-opencode"
const result: DetectedConfig = {
isInstalled: false,
hasClaude: true,
@@ -65,7 +66,7 @@ export function detectCurrentConfig(): DetectedConfig {
hasCopilot: false,
hasOpencodeZen: true,
hasZaiCodingPlan: false,
-hasKimiForCoding: false,
+ hasKimiForCoding: false,
hasOpencodeGo: false,
}
@@ -81,9 +82,7 @@ hasKimiForCoding: false,
const openCodeConfig = parseResult.config
const plugins = openCodeConfig.plugin ?? []
- const OLD_PACKAGE_NAME = "oh-my-opencode"
-const NEW_PACKAGE_NAME = "oh-my-openagent"
-result.isInstalled = plugins.some((p) => p.startsWith(OLD_PACKAGE_NAME) || p.startsWith(NEW_PACKAGE_NAME))
+ result.isInstalled = plugins.some((plugin) => plugin.startsWith(PACKAGE_NAME))
if (!result.isInstalled) {
return result
diff --git a/src/cli/config-manager/plugin-detection.test.ts b/src/cli/config-manager/plugin-detection.test.ts
index c5a183650..6d489b385 100644
--- a/src/cli/config-manager/plugin-detection.test.ts
+++ b/src/cli/config-manager/plugin-detection.test.ts
@@ -7,7 +7,7 @@ import { resetConfigContext } from "./config-context"
import { detectCurrentConfig } from "./detect-current-config"
import { addPluginToOpenCodeConfig } from "./add-plugin-to-opencode-config"
-describe("detectCurrentConfig - dual name detection", () => {
+describe("detectCurrentConfig - single package detection", () => {
let testConfigDir = ""
let testConfigPath = ""
let testOmoConfigPath = ""
@@ -40,18 +40,6 @@ describe("detectCurrentConfig - dual name detection", () => {
expect(result.isInstalled).toBe(true)
})
- it("detects oh-my-openagent in plugin array", () => {
- // given
- const config = { plugin: ["oh-my-openagent"] }
- writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
-
- // when
- const result = detectCurrentConfig()
-
- // then
- expect(result.isInstalled).toBe(true)
- })
-
it("detects oh-my-opencode with version pin", () => {
// given
const config = { plugin: ["oh-my-opencode@3.11.0"] }
@@ -64,18 +52,6 @@ describe("detectCurrentConfig - dual name detection", () => {
expect(result.isInstalled).toBe(true)
})
- it("detects oh-my-openagent with version pin", () => {
- // given
- const config = { plugin: ["oh-my-openagent@3.12.0"] }
- writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
-
- // when
- const result = detectCurrentConfig()
-
- // then
- expect(result.isInstalled).toBe(true)
- })
-
it("returns false when plugin not present", () => {
// given
const config = { plugin: ["some-other-plugin"] }
@@ -90,7 +66,7 @@ describe("detectCurrentConfig - dual name detection", () => {
it("detects OpenCode Go from the existing omo config", () => {
// given
- writeFileSync(testConfigPath, JSON.stringify({ plugin: ["oh-my-openagent"] }, null, 2) + "\n", "utf-8")
+ writeFileSync(testConfigPath, JSON.stringify({ plugin: ["oh-my-opencode"] }, null, 2) + "\n", "utf-8")
writeFileSync(
testOmoConfigPath,
JSON.stringify({ agents: { atlas: { model: "opencode-go/kimi-k2.5" } } }, null, 2) + "\n",
@@ -106,7 +82,7 @@ describe("detectCurrentConfig - dual name detection", () => {
})
})
-describe("addPluginToOpenCodeConfig - dual name detection", () => {
+describe("addPluginToOpenCodeConfig - single package writes", () => {
let testConfigDir = ""
let testConfigPath = ""
@@ -125,7 +101,7 @@ describe("addPluginToOpenCodeConfig - dual name detection", () => {
delete process.env.OPENCODE_CONFIG_DIR
})
- it("finds and replaces old oh-my-opencode with new name", async () => {
+ it("keeps oh-my-opencode when it already exists", async () => {
// given
const config = { plugin: ["oh-my-opencode"] }
writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
@@ -136,26 +112,10 @@ describe("addPluginToOpenCodeConfig - dual name detection", () => {
// then
expect(result.success).toBe(true)
const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
- expect(savedConfig.plugin).not.toContain("oh-my-opencode")
+ expect(savedConfig.plugin).toContain("oh-my-opencode")
})
- it("finds and replaces oh-my-openagent with new name", async () => {
- // given
- const config = { plugin: ["oh-my-openagent"] }
- writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
-
- // when
- const result = await addPluginToOpenCodeConfig("3.11.0")
-
- // then
- expect(result.success).toBe(true)
- const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
- expect(savedConfig.plugin).not.toContain("oh-my-opencode")
- })
-
- it("finds and replaces version-pinned oh-my-opencode@X.Y.Z", async () => {
+ it("replaces version-pinned oh-my-opencode@X.Y.Z", async () => {
// given
const config = { plugin: ["oh-my-opencode@3.10.0"] }
writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
@@ -166,27 +126,12 @@ describe("addPluginToOpenCodeConfig - dual name detection", () => {
// then
expect(result.success).toBe(true)
const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
+ expect(savedConfig.plugin).toContain("oh-my-opencode")
expect(savedConfig.plugin).not.toContain("oh-my-opencode@3.10.0")
})
- it("finds and replaces version-pinned oh-my-openagent@X.Y.Z", async () => {
- // given
- const config = { plugin: ["oh-my-openagent@3.10.0"] }
- writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
-
- // when
- const result = await addPluginToOpenCodeConfig("3.11.0")
-
- // then
- expect(result.success).toBe(true)
- const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
- expect(savedConfig.plugin).not.toContain("oh-my-openagent@3.10.0")
- })
-
it("adds new plugin when none exists", async () => {
- // given - no plugin array
+ // given
const config = {}
writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
@@ -196,11 +141,11 @@ describe("addPluginToOpenCodeConfig - dual name detection", () => {
// then
expect(result.success).toBe(true)
const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
+ expect(savedConfig.plugin).toContain("oh-my-opencode")
})
it("adds plugin when plugin array is empty", async () => {
- // given - empty plugin array
+ // given
const config = { plugin: [] }
writeFileSync(testConfigPath, JSON.stringify(config, null, 2) + "\n", "utf-8")
@@ -210,6 +155,6 @@ describe("addPluginToOpenCodeConfig - dual name detection", () => {
// then
expect(result.success).toBe(true)
const savedConfig = JSON.parse(readFileSync(testConfigPath, "utf-8"))
- expect(savedConfig.plugin).toContain("oh-my-openagent")
+ expect(savedConfig.plugin).toContain("oh-my-opencode")
})
})
diff --git a/src/cli/config-manager/plugin-name-with-version.ts b/src/cli/config-manager/plugin-name-with-version.ts
index eb9a85da0..4dfa7cf6b 100644
--- a/src/cli/config-manager/plugin-name-with-version.ts
+++ b/src/cli/config-manager/plugin-name-with-version.ts
@@ -1,7 +1,6 @@
import { fetchNpmDistTags } from "./npm-dist-tags"
const DEFAULT_PACKAGE_NAME = "oh-my-opencode"
-const NEW_PACKAGE_NAME = "oh-my-openagent"
const PRIORITIZED_TAGS = ["latest", "beta", "next"] as const
function getFallbackEntry(version: string, packageName: string): string {
@@ -17,7 +16,7 @@ export async function getPluginNameWithVersion(
currentVersion: string,
packageName: string = DEFAULT_PACKAGE_NAME
): Promise {
- const distTags = await fetchNpmDistTags(NEW_PACKAGE_NAME)
+ const distTags = await fetchNpmDistTags(packageName)
if (distTags) {
diff --git a/src/shared/plugin-identity.test.ts b/src/shared/plugin-identity.test.ts
index e727d5134..b3bd87cba 100644
--- a/src/shared/plugin-identity.test.ts
+++ b/src/shared/plugin-identity.test.ts
@@ -1,89 +1,48 @@
import { describe, it, expect } from "bun:test"
-import {
- PLUGIN_NAME,
- LEGACY_PLUGIN_NAME,
- CONFIG_BASENAME,
- LEGACY_CONFIG_BASENAME,
- LOG_FILENAME,
- CACHE_DIR_NAME,
- LEGACY_CACHE_DIR_NAME,
-} from "./plugin-identity"
+import { PLUGIN_NAME, CONFIG_BASENAME, LOG_FILENAME, CACHE_DIR_NAME } from "./plugin-identity"
describe("plugin-identity constants", () => {
describe("PLUGIN_NAME", () => {
- it("equals oh-my-openagent", () => {
- // given
-
- // when
-
- // then
- expect(PLUGIN_NAME).toBe("oh-my-openagent")
- })
- })
-
- describe("LEGACY_PLUGIN_NAME", () => {
it("equals oh-my-opencode", () => {
// given
// when
// then
- expect(LEGACY_PLUGIN_NAME).toBe("oh-my-opencode")
+ expect(PLUGIN_NAME).toBe("oh-my-opencode")
})
})
describe("CONFIG_BASENAME", () => {
- it("equals oh-my-openagent", () => {
- // given
-
- // when
-
- // then
- expect(CONFIG_BASENAME).toBe("oh-my-openagent")
- })
- })
-
- describe("LEGACY_CONFIG_BASENAME", () => {
it("equals oh-my-opencode", () => {
// given
// when
// then
- expect(LEGACY_CONFIG_BASENAME).toBe("oh-my-opencode")
+ expect(CONFIG_BASENAME).toBe("oh-my-opencode")
})
})
describe("LOG_FILENAME", () => {
- it("equals oh-my-openagent.log", () => {
+ it("equals oh-my-opencode.log", () => {
// given
// when
// then
- expect(LOG_FILENAME).toBe("oh-my-openagent.log")
+ expect(LOG_FILENAME).toBe("oh-my-opencode.log")
})
})
describe("CACHE_DIR_NAME", () => {
- it("equals oh-my-openagent", () => {
- // given
-
- // when
-
- // then
- expect(CACHE_DIR_NAME).toBe("oh-my-openagent")
- })
- })
-
- describe("LEGACY_CACHE_DIR_NAME", () => {
it("equals oh-my-opencode", () => {
// given
// when
// then
- expect(LEGACY_CACHE_DIR_NAME).toBe("oh-my-opencode")
+ expect(CACHE_DIR_NAME).toBe("oh-my-opencode")
})
})
})
diff --git a/src/shared/plugin-identity.ts b/src/shared/plugin-identity.ts
index 7a87587e0..65b190fe6 100644
--- a/src/shared/plugin-identity.ts
+++ b/src/shared/plugin-identity.ts
@@ -1,7 +1,4 @@
-export const PLUGIN_NAME = "oh-my-openagent"
-export const LEGACY_PLUGIN_NAME = "oh-my-opencode"
-export const CONFIG_BASENAME = "oh-my-openagent"
-export const LEGACY_CONFIG_BASENAME = "oh-my-opencode"
-export const LOG_FILENAME = "oh-my-openagent.log"
-export const CACHE_DIR_NAME = "oh-my-openagent"
-export const LEGACY_CACHE_DIR_NAME = "oh-my-opencode"
+export const PLUGIN_NAME = "oh-my-opencode"
+export const CONFIG_BASENAME = "oh-my-opencode"
+export const LOG_FILENAME = "oh-my-opencode.log"
+export const CACHE_DIR_NAME = "oh-my-opencode"