opencode-resolve 0.1.9 → 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 +46 -0
- package/README.md +46 -0
- package/package.json +1 -1
- package/scripts/postinstall.mjs +56 -53
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.
|
|
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",
|
package/scripts/postinstall.mjs
CHANGED
|
@@ -91,30 +91,55 @@ async function registerPlugin() {
|
|
|
91
91
|
await mkdir(configDir, { recursive: true })
|
|
92
92
|
const scriptedAnswers = await readScriptedAnswersIfNeeded()
|
|
93
93
|
|
|
94
|
-
const
|
|
95
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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 (
|
|
106
|
-
|
|
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(
|
|
113
|
+
await createAdaptiveResolveConfig(probe, scriptedAnswers)
|
|
114
114
|
return
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
await handleExistingResolveConfig(
|
|
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
|
|
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
|
}
|