opencode-resolve 0.1.10 → 0.1.11

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.ko.md CHANGED
@@ -176,6 +176,30 @@ OPENCODE_RESOLVE_SKIP_POSTINSTALL=1 npm install -g opencode-resolve
176
176
  opencode plugin opencode-resolve --global --force
177
177
  ```
178
178
 
179
+ 그래도 OpenCode가 계속 예전 패키지를 로드하면, OpenCode 플러그인 캐시 항목만 지우고 다시 설치하세요. 이 절차는 `~/.config/opencode/resolve.json`을 삭제하지 않습니다.
180
+
181
+ Linux/macOS:
182
+
183
+ ```sh
184
+ export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
185
+ rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
186
+ opencode plugin opencode-resolve@latest --global --force
187
+ node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
188
+ ```
189
+
190
+ Windows PowerShell:
191
+
192
+ ```powershell
193
+ $OpenCodeCacheRoot = if ($env:XDG_CACHE_HOME) { Join-Path $env:XDG_CACHE_HOME "opencode" } else { Join-Path $env:LOCALAPPDATA "opencode" }
194
+ $PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
195
+ Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
196
+ opencode plugin opencode-resolve@latest --global --force
197
+ $Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
198
+ node -e "console.log(require(process.argv[1]).version)" $Pkg
199
+ ```
200
+
201
+ 캐시 새로고침 후 OpenCode를 재시작하세요.
202
+
179
203
  ### 수동 대안
180
204
 
181
205
  `postinstall`이 플러그인을 등록하지 않았다면, `~/.config/opencode/opencode.json`에 직접 추가:
@@ -864,6 +888,28 @@ opencode plugin opencode-resolve --global --force
864
888
  # OpenCode 재시작
865
889
  ```
866
890
 
891
+ 그래도 버전이 바뀌지 않으면 OpenCode가 패키지 캐시를 재사용하는 상태입니다. 해당 플러그인 캐시 항목만 hard refresh 하세요:
892
+
893
+ Linux/macOS:
894
+
895
+ ```sh
896
+ export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
897
+ rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
898
+ opencode plugin opencode-resolve@latest --global --force
899
+ node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
900
+ ```
901
+
902
+ Windows PowerShell:
903
+
904
+ ```powershell
905
+ $OpenCodeCacheRoot = if ($env:XDG_CACHE_HOME) { Join-Path $env:XDG_CACHE_HOME "opencode" } else { Join-Path $env:LOCALAPPDATA "opencode" }
906
+ $PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
907
+ Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
908
+ opencode plugin opencode-resolve@latest --global --force
909
+ $Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
910
+ node -e "console.log(require(process.argv[1]).version)" $Pkg
911
+ ```
912
+
867
913
  업그레이드 후 `postinstall`이 `resolve.json`에 추가적 마이그레이션을 실행합니다 — 새 키가 추가되고, 기존 키는 절대 수정되지 않습니다.
868
914
 
869
915
  ### 특정 버전 고정
package/README.md CHANGED
@@ -176,6 +176,30 @@ OPENCODE_RESOLVE_SKIP_POSTINSTALL=1 npm install -g opencode-resolve
176
176
  opencode plugin opencode-resolve --global --force
177
177
  ```
178
178
 
179
+ If OpenCode keeps loading the old package anyway, clear only the OpenCode plugin cache entry and install again. This does **not** delete `~/.config/opencode/resolve.json`.
180
+
181
+ Linux/macOS:
182
+
183
+ ```sh
184
+ export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
185
+ rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
186
+ opencode plugin opencode-resolve@latest --global --force
187
+ node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
188
+ ```
189
+
190
+ Windows PowerShell:
191
+
192
+ ```powershell
193
+ $OpenCodeCacheRoot = if ($env:XDG_CACHE_HOME) { Join-Path $env:XDG_CACHE_HOME "opencode" } else { Join-Path $env:LOCALAPPDATA "opencode" }
194
+ $PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
195
+ Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
196
+ opencode plugin opencode-resolve@latest --global --force
197
+ $Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
198
+ node -e "console.log(require(process.argv[1]).version)" $Pkg
199
+ ```
200
+
201
+ Restart OpenCode after the cache refresh.
202
+
179
203
  ### Manual fallback
180
204
 
181
205
  If `postinstall` didn't register the plugin, add it to `~/.config/opencode/opencode.json` yourself:
@@ -864,6 +888,28 @@ opencode plugin opencode-resolve --global --force
864
888
  # Restart OpenCode
865
889
  ```
866
890
 
891
+ If the version still does not change, OpenCode is reusing its package cache. Hard-refresh that one plugin entry:
892
+
893
+ Linux/macOS:
894
+
895
+ ```sh
896
+ export OPENCODE_CACHE_ROOT="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
897
+ rm -rf "$OPENCODE_CACHE_ROOT/packages/opencode-resolve@latest"
898
+ opencode plugin opencode-resolve@latest --global --force
899
+ node -e "console.log(require(process.env.OPENCODE_CACHE_ROOT + '/packages/opencode-resolve@latest/node_modules/opencode-resolve/package.json').version)"
900
+ ```
901
+
902
+ Windows PowerShell:
903
+
904
+ ```powershell
905
+ $OpenCodeCacheRoot = if ($env:XDG_CACHE_HOME) { Join-Path $env:XDG_CACHE_HOME "opencode" } else { Join-Path $env:LOCALAPPDATA "opencode" }
906
+ $PluginCache = Join-Path $OpenCodeCacheRoot "packages\opencode-resolve@latest"
907
+ Remove-Item -Recurse -Force $PluginCache -ErrorAction SilentlyContinue
908
+ opencode plugin opencode-resolve@latest --global --force
909
+ $Pkg = Join-Path $PluginCache "node_modules\opencode-resolve\package.json"
910
+ node -e "console.log(require(process.argv[1]).version)" $Pkg
911
+ ```
912
+
867
913
  After upgrading, `postinstall` runs additive migration on your `resolve.json` — new keys are added, existing keys are never modified.
868
914
 
869
915
  ### Pinning a specific version
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-resolve",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "OpenCode plugin that adds a lightweight resolver/coder harness for continuous agentic coding.",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/jshsakura/opencode-resolve#readme",
@@ -91,30 +91,55 @@ async function registerPlugin() {
91
91
  await mkdir(configDir, { recursive: true })
92
92
  const scriptedAnswers = await readScriptedAnswersIfNeeded()
93
93
 
94
- const config = await readOpenCodeConfig()
95
- let configChanged = addPlugin(config)
96
-
97
- // Inject ZAI MCP servers when GLM is detected
98
- const allModels = detectAllModels(config)
94
+ const probe = await readOpenCodeConfig()
95
+ const allModels = detectAllModels(probe)
99
96
  const hasGLM = allModels.some((m) => isGLMModel(m))
100
- if (hasGLM) {
101
- const mcpChanged = await injectZAIMCPs(config)
102
- configChanged = configChanged || mcpChanged
103
- }
97
+ const pluginNeeded = !isPluginRegisteredIn(probe)
98
+ const missingMCPNames = hasGLM
99
+ ? Object.keys(ZAI_MCP_SERVERS).filter((name) => probe.mcp?.[name] === undefined)
100
+ : []
104
101
 
105
- if (configChanged) {
106
- await writeFile(opencodeConfigPath, `${JSON.stringify(config, null, 2)}\n`)
102
+ if (pluginNeeded || missingMCPNames.length > 0) {
103
+ const fresh = await readOpenCodeConfig()
104
+ if (pluginNeeded) applyPluginPatch(fresh)
105
+ if (missingMCPNames.length > 0) applyMCPPatches(fresh, missingMCPNames)
106
+ await writeFile(opencodeConfigPath, `${JSON.stringify(fresh, null, 2)}\n`)
107
107
  console.log(`[${packageName}] updated ${opencodeConfigPath}`)
108
108
  } else {
109
109
  console.log(`[${packageName}] already registered in ${opencodeConfigPath}`)
110
110
  }
111
111
 
112
112
  if (!(await exists(resolveConfigPath))) {
113
- await createAdaptiveResolveConfig(config, scriptedAnswers)
113
+ await createAdaptiveResolveConfig(probe, scriptedAnswers)
114
114
  return
115
115
  }
116
116
 
117
- await handleExistingResolveConfig(config, scriptedAnswers)
117
+ await handleExistingResolveConfig(probe, scriptedAnswers)
118
+ }
119
+
120
+ function isPluginRegisteredIn(config) {
121
+ return Array.isArray(config.plugin) && config.plugin.some(isRegisteredPluginEntry)
122
+ }
123
+
124
+ function applyPluginPatch(config) {
125
+ config.plugin ??= []
126
+ if (!Array.isArray(config.plugin)) {
127
+ throw new Error(`${opencodeConfigPath}.plugin must be an array`)
128
+ }
129
+ if (!config.plugin.some(isRegisteredPluginEntry)) {
130
+ config.plugin.push(packageName)
131
+ }
132
+ }
133
+
134
+ function applyMCPPatches(config, names) {
135
+ config.mcp ??= {}
136
+ for (const name of names) {
137
+ if (config.mcp[name] === undefined) {
138
+ config.mcp[name] = ZAI_MCP_SERVERS[name]
139
+ }
140
+ }
141
+ console.log(`[${packageName}] injected ZAI MCP server config: ${names.join(", ")}`)
142
+ console.log(`[${packageName}] note: API keys are not copied into opencode.json; export Z_AI_API_KEY if the MCP server requires it.`)
118
143
  }
119
144
 
120
145
  async function handleExistingResolveConfig(opencodeConfig, scriptedAnswers) {
@@ -724,38 +749,7 @@ async function readOpenCodeConfig() {
724
749
  return parsed
725
750
  }
726
751
 
727
- function addPlugin(config) {
728
- config.plugin ??= []
729
- if (!Array.isArray(config.plugin)) {
730
- throw new Error(`${opencodeConfigPath}.plugin must be an array`)
731
- }
732
-
733
- if (config.plugin.some(isRegisteredPluginEntry)) return false
734
- config.plugin.push(packageName)
735
- return true
736
- }
737
-
738
- async function injectZAIMCPs(config) {
739
- config.mcp ??= {}
740
- if (!isObject(config.mcp)) return false
741
-
742
- const added = []
743
- for (const [name, mcpConfig] of Object.entries(ZAI_MCP_SERVERS)) {
744
- if (config.mcp[name] === undefined) {
745
- config.mcp[name] = mcpConfig
746
- added.push(name)
747
- }
748
- }
749
752
 
750
- if (added.length > 0) {
751
- console.log(`[${packageName}] injected ZAI MCP server config: ${added.join(", ")}`)
752
- console.log(`[${packageName}] note: API keys are not copied into opencode.json; export Z_AI_API_KEY if the MCP server requires it.`)
753
- return true
754
- }
755
-
756
- console.log(`[${packageName}] ZAI MCP server already present — skipping`)
757
- return false
758
- }
759
753
 
760
754
  function isRegisteredPluginEntry(entry) {
761
755
  if (typeof entry === "string") return isResolvePluginName(entry)
@@ -879,13 +873,25 @@ async function installCompanion(pkg) {
879
873
  }
880
874
 
881
875
  async function addCompanionToOpenCodeConfig(pluginEntry) {
882
- const config = await readOpenCodeConfig()
883
- config.plugin ??= []
884
- if (!Array.isArray(config.plugin)) {
885
- throw new Error(`${opencodeConfigPath}.plugin must be an array`)
886
- }
887
876
  const baseName = stripVersionSuffix(pluginEntry)
888
- const alreadyPresent = config.plugin.some((entry) => {
877
+ const probe = await readOpenCodeConfig()
878
+ const alreadyPresent = isCompanionPresent(probe, baseName)
879
+ if (alreadyPresent) return
880
+
881
+ const fresh = await readOpenCodeConfig()
882
+ if (!isCompanionPresent(fresh, baseName)) {
883
+ fresh.plugin ??= []
884
+ if (!Array.isArray(fresh.plugin)) {
885
+ throw new Error(`${opencodeConfigPath}.plugin must be an array`)
886
+ }
887
+ fresh.plugin.push(pluginEntry)
888
+ await writeFile(opencodeConfigPath, `${JSON.stringify(fresh, null, 2)}\n`)
889
+ }
890
+ }
891
+
892
+ function isCompanionPresent(config, baseName) {
893
+ if (!Array.isArray(config.plugin)) return false
894
+ return config.plugin.some((entry) => {
889
895
  const raw = typeof entry === "string"
890
896
  ? entry
891
897
  : Array.isArray(entry) && typeof entry[0] === "string"
@@ -893,7 +899,4 @@ async function addCompanionToOpenCodeConfig(pluginEntry) {
893
899
  : null
894
900
  return raw !== null && stripVersionSuffix(raw) === baseName
895
901
  })
896
- if (alreadyPresent) return
897
- config.plugin.push(pluginEntry)
898
- await writeFile(opencodeConfigPath, `${JSON.stringify(config, null, 2)}\n`)
899
902
  }