@plainconceptsplatform/agent-harness 3.9.0-alpha.1 → 3.10.0
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.md +1 -1
- package/cli/steps/copy/opencode-json.js +35 -0
- package/harness/opencode.jsonc +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -89,7 +89,7 @@ Reach for individual steps when you want something narrower:
|
|
|
89
89
|
|
|
90
90
|
> **Upgrading from `opencode-onboard` v1?** v2 renamed the config files and the skill prefix (`ob-` became `pc-`), and it does not migrate v1 projects. The CLI detects one and refuses to run rather than half-patching it. Re-onboard on a clean branch: remove `.opencode/` and `.agents/skills/ob-*`, then run the wizard again.
|
|
91
91
|
|
|
92
|
-
> **Browser tooling changed in
|
|
92
|
+
> **Browser tooling changed in v3.10.** `agent-browser` (which launched its own isolated Chrome for Testing) was replaced by [`browse`](https://opencode.ai/product/browse), the OpenCode MCP server that drives the user's real Chrome-family browser with their logins, tabs, cookies, and extensions. Agent tabs open in the background in collapsed groups; when only a person can proceed (login, 2FA, captcha, payment), browse hands the tab back and continues once the user clicks Continue. Running `update` replaces the `agent-browser` MCP server entry with `browse`, installs the new CLI, and runs `browse install` which opens the Chrome Web Store for the extension and pairs it. Skills you wrote that call `agent-browser` CLI commands or `agent_browser_*` MCP tools must switch to the `browse` CLI or the `browse.execute` / `browse.session_*` MCP tools. Backlog-browser users: browse uses your real browser, so work-item pages behind your own login are already authenticated — no separate login session is needed.
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
@@ -166,6 +166,40 @@ function migrateMcp(obj) {
|
|
|
166
166
|
return true
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
// Stale MCP server entries that browse replaced. The V2 @different-ai/opencode-browser
|
|
170
|
+
// plugin (and its Chrome extension) was replaced by agent-browser in v2.4, then by browse
|
|
171
|
+
// in v3.10. Both old entries are stripped and the current browse entry is ensured.
|
|
172
|
+
const BROWSE_MCP_SERVER = {
|
|
173
|
+
type: 'local',
|
|
174
|
+
command: ['browse', 'mcp'],
|
|
175
|
+
environment: { OPENCODE_BROWSER_RUNTIME: 'auto-update' },
|
|
176
|
+
disabled: false,
|
|
177
|
+
}
|
|
178
|
+
const STALE_MCP_SERVER_NAMES = ['agent-browser', 'opencode-browser', '@different-ai/opencode-browser']
|
|
179
|
+
|
|
180
|
+
function migrateBrowserMcp(obj) {
|
|
181
|
+
if (!obj.mcp?.servers || typeof obj.mcp.servers !== 'object') return false
|
|
182
|
+
let changed = false
|
|
183
|
+
for (const name of STALE_MCP_SERVER_NAMES) {
|
|
184
|
+
if (name in obj.mcp.servers) {
|
|
185
|
+
delete obj.mcp.servers[name]
|
|
186
|
+
changed = true
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const current = obj.mcp.servers['browse']
|
|
190
|
+
if (!current) {
|
|
191
|
+
obj.mcp.servers['browse'] = { ...BROWSE_MCP_SERVER }
|
|
192
|
+
changed = true
|
|
193
|
+
} else if (JSON.stringify(current.command) !== JSON.stringify(BROWSE_MCP_SERVER.command)) {
|
|
194
|
+
obj.mcp.servers['browse'] = { ...current, ...BROWSE_MCP_SERVER, environment: current.environment ?? BROWSE_MCP_SERVER.environment }
|
|
195
|
+
changed = true
|
|
196
|
+
} else if (!current.environment?.OPENCODE_BROWSER_RUNTIME) {
|
|
197
|
+
obj.mcp.servers['browse'] = { ...current, environment: { ...(current.environment ?? {}), OPENCODE_BROWSER_RUNTIME: 'auto-update' } }
|
|
198
|
+
changed = true
|
|
199
|
+
}
|
|
200
|
+
return changed
|
|
201
|
+
}
|
|
202
|
+
|
|
169
203
|
/** Mutate `obj` in place to the native V2 shape; returns true when it changed. */
|
|
170
204
|
function migrateToV2(obj) {
|
|
171
205
|
let changed = false
|
|
@@ -246,6 +280,7 @@ function migrateToV2(obj) {
|
|
|
246
280
|
|
|
247
281
|
if (migrateAgents(obj)) changed = true
|
|
248
282
|
if (migrateMcp(obj)) changed = true
|
|
283
|
+
if (migrateBrowserMcp(obj)) changed = true
|
|
249
284
|
if (migratePluginArray(obj)) changed = true
|
|
250
285
|
|
|
251
286
|
// A session starts read-only: fullstack-engineer is a subagent now, so a
|
package/harness/opencode.jsonc
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plainconceptsplatform/agent-harness",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.0",
|
|
4
4
|
"description": "Installs the Plain Concepts Platform Harness into any codebase, and keeps it up to date. Wires OpenCode, OpenSpec, codegraph, and agentmemory into a multi-agent workflow that runs on native parallel subagents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opencode",
|