borgmcp 3.3.0 → 3.4.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.
Files changed (41) hide show
  1. package/README.md +10 -3
  2. package/dist/agent-integration-health.d.ts +9 -5
  3. package/dist/agent-integration-health.d.ts.map +1 -1
  4. package/dist/agent-integration-health.js +104 -5
  5. package/dist/agent-integration-health.js.map +1 -1
  6. package/dist/claude.js +1 -0
  7. package/dist/claude.js.map +1 -1
  8. package/dist/config-utils.d.ts.map +1 -1
  9. package/dist/config-utils.js +1 -1
  10. package/dist/config-utils.js.map +1 -1
  11. package/dist/log-audit-core.d.ts +7 -0
  12. package/dist/log-audit-core.d.ts.map +1 -0
  13. package/dist/log-audit-core.js +80 -0
  14. package/dist/log-audit-core.js.map +1 -0
  15. package/dist/log-audit.d.ts +3 -3
  16. package/dist/log-audit.js +7 -110
  17. package/dist/log-audit.js.map +1 -1
  18. package/dist/opencode-drone.d.ts.map +1 -1
  19. package/dist/opencode-drone.js +6 -1
  20. package/dist/opencode-drone.js.map +1 -1
  21. package/dist/opencode-plugin.d.ts +47 -7
  22. package/dist/opencode-plugin.d.ts.map +1 -1
  23. package/dist/opencode-plugin.js +187 -23
  24. package/dist/opencode-plugin.js.map +1 -1
  25. package/dist/regen-format.js +1 -1
  26. package/dist/regen-format.js.map +1 -1
  27. package/dist/resolved-cli-config.d.ts +1 -0
  28. package/dist/resolved-cli-config.d.ts.map +1 -1
  29. package/dist/resolved-cli-config.js +1 -0
  30. package/dist/resolved-cli-config.js.map +1 -1
  31. package/docs/LOCAL_SERVER.md +17 -4
  32. package/package.json +1 -1
  33. package/src/agent-integration-health.ts +121 -6
  34. package/src/claude.ts +1 -0
  35. package/src/config-utils.ts +1 -1
  36. package/src/log-audit-core.ts +81 -0
  37. package/src/log-audit.ts +6 -117
  38. package/src/opencode-drone.ts +6 -1
  39. package/src/opencode-plugin.ts +216 -22
  40. package/src/regen-format.ts +1 -1
  41. package/src/resolved-cli-config.ts +2 -0
@@ -1,35 +1,199 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { borgHomeRoot } from './private-root.js';
4
- /**
5
- * Plugin source that preserves borg cube context across session compaction.
6
- * The initial kickoff and ongoing entry injection are handled by the launcher
7
- * and MCP client via the SDK, not by the plugin.
8
- */
9
- export const BORG_PLUGIN_SOURCE = `
10
- // Borg MCP context-preservation plugin installed by borg assimilate
11
- export default function () {
12
- return {
13
- 'experimental.session.compacting': async (_input, output) => {
14
- output.context.push(
15
- '## Borg Cube\\nYou are in a Borg MCP multi-agent coordination cube. ' +
16
- 'Use MCP tool borg_regen to get full context and recent activity.'
17
- );
18
- },
3
+ import { evaluateLogAudit } from './log-audit-core.js';
4
+ import { borgHomeRoot, isCanonicalPath } from './private-root.js';
5
+ import { getPackageVersion } from './version.js';
6
+ export const OPENCODE_COMPATIBILITY = {
7
+ // Empirically pinned on 2026-08-09. OpenCode 1.18.15 loads the default
8
+ // function -> Hooks object shape while the installed SDK uses the 1.17.18
9
+ // path/query/body client call shape. TextPart.metadata exists, persists
10
+ // through history/compaction/reload, and is hidden from the TUI and model.
11
+ // Do not replace either contract without a new live compatibility measurement.
12
+ opencode: '1.18.15',
13
+ sdk: '1.17.18',
14
+ };
15
+ const COMPACT_FALLBACK = '## Borg Cube\nYou are in a Borg MCP multi-agent coordination cube. ' +
16
+ 'Use MCP tool borg_regen to get full context and recent activity.';
17
+ export const OPENCODE_INJECTED_ENTRY_METADATA_KEY = 'borgOpenCodeInjectedEntry';
18
+ export const OPENCODE_RECOVERY_METADATA_KEY = 'borgOpenCodeSessionOrientation';
19
+ const PLUGIN_REL_PATH = path.join('.config', 'opencode', 'plugins', 'borg-orient.js');
20
+ /** Pure, dependency-injected behavior core. Its emitted JavaScript function
21
+ * body is also embedded in the installed self-contained plugin. */
22
+ export function createOpenCodePluginCore(deps, options) {
23
+ const claimedSessions = new Set();
24
+ const humanPromptSessions = new Set();
25
+ const textParts = (message) => Array.isArray(message?.parts)
26
+ ? message.parts.filter((part) => part?.type === 'text' && typeof part.text === 'string')
27
+ : [];
28
+ const isInjectedEntry = (message) => {
29
+ const parts = textParts(message);
30
+ return message?.info?.role === 'user' &&
31
+ parts[0]?.metadata?.[options.injectedEntryMetadataKey] === true;
32
+ };
33
+ const isOwnedRecovery = (message) => {
34
+ const parts = textParts(message);
35
+ return message?.info?.role === 'user' &&
36
+ parts[0]?.metadata?.[options.recoveryMetadataKey] === options.pluginVersion;
37
+ };
38
+ const hasRecoveryBlocker = (sessionID, messages) => humanPromptSessions.has(sessionID) || messages.some((message) => isOwnedRecovery(message) ||
39
+ (message?.info?.role === 'user' && !isInjectedEntry(message)));
40
+ const recoverNewSession = async (sessionID) => {
41
+ try {
42
+ for (let attempt = 0; attempt < options.kickoffPollAttempts; attempt++) {
43
+ const messages = await deps.listMessages(sessionID);
44
+ if (hasRecoveryBlocker(sessionID, messages))
45
+ return;
46
+ if (attempt + 1 < options.kickoffPollAttempts)
47
+ await deps.wait(options.pollDelayMs);
48
+ }
49
+ const orientation = (await deps.renderOrientation('clear')).trim();
50
+ if (!orientation)
51
+ return;
52
+ const beforeSubmit = await deps.listMessages(sessionID);
53
+ if (hasRecoveryBlocker(sessionID, beforeSubmit))
54
+ return;
55
+ const submitted = await deps.submitPrompt(sessionID, orientation, options.pluginVersion, () => !hasRecoveryBlocker(sessionID, []));
56
+ if (!submitted)
57
+ return;
58
+ // promptAsync is not idempotent. Confirmation may retry, submission may not.
59
+ for (let attempt = 0; attempt < options.confirmationPollAttempts; attempt++) {
60
+ const messages = await deps.listMessages(sessionID);
61
+ if (messages.some(isOwnedRecovery))
62
+ return;
63
+ if (attempt + 1 < options.confirmationPollAttempts)
64
+ await deps.wait(options.pollDelayMs);
65
+ }
66
+ }
67
+ catch {
68
+ // The plugin is best-effort. Never block OpenCode session creation.
69
+ }
70
+ };
71
+ return {
72
+ event: async ({ event }) => {
73
+ if (!options.enabled || event?.type !== 'session.created')
74
+ return;
75
+ const sessionID = event?.properties?.info?.id;
76
+ if (typeof sessionID !== 'string' || claimedSessions.has(sessionID))
77
+ return;
78
+ claimedSessions.add(sessionID);
79
+ deps.defer(() => recoverNewSession(sessionID));
80
+ },
81
+ 'experimental.session.compacting': async (_input, output) => {
82
+ if (!options.enabled)
83
+ return;
84
+ try {
85
+ const orientation = (await deps.renderOrientation('compact')).trim();
86
+ output.context.push(orientation || options.compactFallback);
87
+ }
88
+ catch {
89
+ output.context.push(options.compactFallback);
90
+ }
91
+ },
92
+ 'chat.message': async (input, output) => {
93
+ if (!options.enabled)
94
+ return;
95
+ const current = { info: { role: 'user' }, parts: [...output.parts] };
96
+ if (!isInjectedEntry(current) && !isOwnedRecovery(current)) {
97
+ // chat.message fires before the user message is persisted. Record the
98
+ // human turn synchronously so recovery cannot race that short gap.
99
+ humanPromptSessions.add(input.sessionID);
100
+ }
101
+ try {
102
+ const history = await deps.listMessages(input.sessionID);
103
+ const nudge = deps.audit([...history, current]);
104
+ if (nudge)
105
+ output.parts.push({ type: 'text', text: nudge });
106
+ }
107
+ catch {
108
+ // Audit is advisory and must never block a prompt.
109
+ }
110
+ },
111
+ };
112
+ }
113
+ export function buildBorgPluginSource(version) {
114
+ const marker = `borgmcp-opencode-plugin:${version};opencode=${OPENCODE_COMPATIBILITY.opencode};sdk=${OPENCODE_COMPATIBILITY.sdk};textpart-metadata=exists+persisted+tui-hidden+model-hidden`;
115
+ return `// ${marker}
116
+ // Generated by borgmcp. Self-contained; do not edit.
117
+ const createCore = ${createOpenCodePluginCore.toString()};
118
+ const evaluateAudit = ${evaluateLogAudit.toString()};
119
+ export default async function (ctx) {
120
+ const runRegen = async (source) => {
121
+ const input = JSON.stringify({ source });
122
+ const result = await ctx.$\`printf '%s' \${input} | borg-regen\`.quiet().nothrow();
123
+ return result.exitCode === 0 ? result.stdout.toString('utf8') : '';
19
124
  };
125
+ return createCore({
126
+ defer: (task) => { setTimeout(() => { void task(); }, 0); },
127
+ wait: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)),
128
+ listMessages: async (sessionID) => {
129
+ const result = await ctx.client.session.messages({
130
+ path: { id: sessionID },
131
+ query: { directory: ctx.directory },
132
+ });
133
+ return Array.isArray(result.data) ? result.data : [];
134
+ },
135
+ renderOrientation: runRegen,
136
+ submitPrompt: async (sessionID, text, recoveryVersion, shouldSubmit) => {
137
+ if (!shouldSubmit()) return false;
138
+ await ctx.client.session.promptAsync({
139
+ path: { id: sessionID },
140
+ query: { directory: ctx.directory },
141
+ body: { parts: [{
142
+ type: 'text',
143
+ text,
144
+ metadata: { [${JSON.stringify(OPENCODE_RECOVERY_METADATA_KEY)}]: recoveryVersion },
145
+ }] },
146
+ });
147
+ return true;
148
+ },
149
+ audit: (messages) => evaluateAudit(messages),
150
+ }, {
151
+ ...${JSON.stringify({
152
+ pluginVersion: version,
153
+ recoveryMetadataKey: OPENCODE_RECOVERY_METADATA_KEY,
154
+ injectedEntryMetadataKey: OPENCODE_INJECTED_ENTRY_METADATA_KEY,
155
+ kickoffPollAttempts: 6,
156
+ confirmationPollAttempts: 6,
157
+ pollDelayMs: 200,
158
+ compactFallback: COMPACT_FALLBACK,
159
+ })},
160
+ enabled: process.env.BORG_SESSION === '1',
161
+ });
20
162
  }
21
163
  `;
22
- const PLUGIN_REL_PATH = path.join('.config', 'opencode', 'plugins', 'borg-orient.js');
23
- export function installBorgPlugin() {
24
- const pluginPath = path.join(borgHomeRoot(), PLUGIN_REL_PATH);
164
+ }
165
+ export const BORG_PLUGIN_SOURCE = buildBorgPluginSource(getPackageVersion());
166
+ export function openCodePluginPath(homeDir = borgHomeRoot()) {
167
+ return path.join(homeDir, PLUGIN_REL_PATH);
168
+ }
169
+ export function installBorgPlugin(options = {}) {
170
+ const pluginPath = openCodePluginPath(options.homeDir);
171
+ const source = buildBorgPluginSource(options.version ?? getPackageVersion());
25
172
  try {
26
- if (fs.existsSync(pluginPath)) {
27
- const existing = fs.readFileSync(pluginPath, 'utf-8');
28
- if (existing === BORG_PLUGIN_SOURCE)
173
+ if (!isCanonicalPath(pluginPath))
174
+ return;
175
+ try {
176
+ if (fs.lstatSync(pluginPath).isSymbolicLink())
177
+ return;
178
+ if (fs.readFileSync(pluginPath, 'utf-8') === source)
179
+ return;
180
+ }
181
+ catch (error) {
182
+ if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT'))
29
183
  return;
30
184
  }
31
185
  fs.mkdirSync(path.dirname(pluginPath), { recursive: true });
32
- fs.writeFileSync(pluginPath, BORG_PLUGIN_SOURCE, 'utf-8');
186
+ if (!isCanonicalPath(pluginPath))
187
+ return;
188
+ try {
189
+ if (fs.lstatSync(pluginPath).isSymbolicLink())
190
+ return;
191
+ }
192
+ catch (error) {
193
+ if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT'))
194
+ return;
195
+ }
196
+ fs.writeFileSync(pluginPath, source, 'utf-8');
33
197
  }
34
198
  catch {
35
199
  // Best-effort — plugin is an optimization, not a requirement.
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-plugin.js","sourceRoot":"","sources":["../src/opencode-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;CAYjC,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEtF,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,QAAQ,KAAK,kBAAkB;gBAAE,OAAO;QAC9C,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"opencode-plugin.js","sourceRoot":"","sources":["../src/opencode-plugin.ts"],"names":[],"mappings":"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"}
@@ -151,7 +151,7 @@ export function formatLeanOrientation(args) {
151
151
  '\n_(`/clear` cleared Claude\'s conversation — re-arm the inbox Monitor now.)_',
152
152
  '_Quiet-clear fallback: if a later turn follows silence, inspect `borg_stream-status` + `borg_roster`; call `borg_regen mode="full"`, drain `borg_read-log unread_only=true`, then re-arm the Monitor._\n',
153
153
  ].join('\n')
154
- : ''
154
+ : '\n_(OpenCode started a new session; Borg supplied this orientation automatically.)_\n'
155
155
  : '';
156
156
  return [
157
157
  `# Cube: ${cubeName} — ${droneLabel}`,
@@ -1 +1 @@
1
- {"version":3,"file":"regen-format.js","sourceRoot":"","sources":["../src/regen-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regen-format.js","sourceRoot":"","sources":["../src/regen-format.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface ResolvedCliConfigDeps {
6
6
  addClaudeUserPromptSubmitHook(): void;
7
7
  addCodexSessionStartHook(): void;
8
8
  addCodexUserPromptSubmitHook(): void;
9
+ installOpenCodePlugin(): void;
9
10
  }
10
11
  /**
11
12
  * Apply only the integration writes for the CLI the launcher resolved.
@@ -1 +1 @@
1
- {"version":3,"file":"resolved-cli-config.d.ts","sourceRoot":"","sources":["../src/resolved-cli-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,gCAAgC,IAAI,IAAI,CAAC;IACzC,kCAAkC,IAAI,IAAI,CAAC;IAC3C,6BAA6B,IAAI,IAAI,CAAC;IACtC,wBAAwB,IAAI,IAAI,CAAC;IACjC,4BAA4B,IAAI,IAAI,CAAC;CACtC;AACD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,qBAAqB,GAC1B,IAAI,CAqBN"}
1
+ {"version":3,"file":"resolved-cli-config.d.ts","sourceRoot":"","sources":["../src/resolved-cli-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,gCAAgC,IAAI,IAAI,CAAC;IACzC,kCAAkC,IAAI,IAAI,CAAC;IAC3C,6BAA6B,IAAI,IAAI,CAAC;IACtC,wBAAwB,IAAI,IAAI,CAAC;IACjC,4BAA4B,IAAI,IAAI,CAAC;IACrC,qBAAqB,IAAI,IAAI,CAAC;CAC/B;AACD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,qBAAqB,GAC1B,IAAI,CAsBN"}
@@ -22,5 +22,6 @@ export function configureResolvedCli(cli, deps) {
22
22
  return;
23
23
  }
24
24
  deps.ensureMcp('opencode');
25
+ deps.installOpenCodePlugin();
25
26
  }
26
27
  //# sourceMappingURL=resolved-cli-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolved-cli-config.js","sourceRoot":"","sources":["../src/resolved-cli-config.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAY,EACZ,IAA2B;IAE3B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzB,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,gCAAgC;QAChC,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,CAAC,kCAAkC,EAAE,CAAC;QAC1C,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"resolved-cli-config.js","sourceRoot":"","sources":["../src/resolved-cli-config.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAY,EACZ,IAA2B;IAE3B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzB,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,gCAAgC;QAChC,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,CAAC,kCAAkC,EAAE,CAAC;QAC1C,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC/B,CAAC"}
@@ -154,8 +154,10 @@ being redirected.
154
154
  Borg tools are inactive unless the agent session was launched with `borg`.
155
155
  For Claude Code and Codex, `BORG_DISABLE_LAUNCH_REMINDER` is a presence-based
156
156
  local opt-out for launch orientation messaging; setting it does not activate
157
- Borg tools or change server authorization. OpenCode has no launch-reminder
158
- surface.
157
+ Borg tools or change server authorization. OpenCode has no plain-launch reminder;
158
+ inside a Borg-launched process, its orientation plugin supplies the Borg
159
+ orientation once after OpenCode creates a new session and preserves it across
160
+ compaction.
159
161
 
160
162
  Each assimilated seat also receives a disposable scratch root at
161
163
  `~/.borg/scratch/<seat>/`. Borg pre-authorizes exactly the launched worktree and
@@ -213,10 +215,21 @@ command, or scan worktrees outside `~/.borg/worktrees/<repo>/<name>`; those
213
215
  noncanonical worktrees heal when Borg next launches or assimilates them.
214
216
 
215
217
  `borg doctor` performs the same bin-owner and version checks without changing
216
- state. It inventories managed hook files and the OpenCode orientation plugin,
218
+ state. It inventories managed hook files and verifies the OpenCode orientation
219
+ plugin against its borgmcp version marker and generated behavior,
217
220
  and reports status-specific recovery: reinstall a missing bin, correct PATH for
218
221
  the wrong package or version, run `borg update --yes` for stale managed hooks,
219
- or repair a named invalid configuration before rerunning update.
222
+ repair a named invalid configuration before rerunning update, or run
223
+ `borg update --yes` to install a missing or outdated OpenCode plugin. The plugin API is
224
+ empirically bound to OpenCode 1.18.15 with `@opencode-ai/plugin` 1.17.18; that
225
+ SDK uses the path/query/body options shape for history reads and prompt
226
+ submission, not the newer flat v2 call shape. At that bound, `TextPart.metadata`
227
+ exists, persists through history reads, compaction, and process reload, and is
228
+ not rendered in the TUI or supplied to the model. The health gate treats OpenCode
229
+ as configured only when `~/.config/opencode/opencode.json` contains a local
230
+ `mcp.borg` entry with `type: "local"`. That path and shape were exercised by the
231
+ 3.2.0 config-refresh live proof (PR #390) and are part of the OpenCode 1.18.15
232
+ compatibility gate.
220
233
 
221
234
  `borg server update` remains the server-runtime-only command. It verifies and
222
235
  activates the server artifact but deliberately does not rewrite the global
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "borgmcp",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "Coordinate AI coding agents in shared cubes. Works with Claude Code, Codex, and OpenCode.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -3,12 +3,18 @@ import path from 'node:path';
3
3
  import which from 'which';
4
4
  import {
5
5
  inspectManagedAgentHookConfigs,
6
+ isOpenCodeMcpServerConfigured,
6
7
  type ManagedAgentHookConfigHealth,
7
8
  refreshManagedAgentHookConfigs,
8
9
  refreshManagedAgentMcpConfigs,
9
10
  } from './config-utils.js';
10
- import { borgHomeRoot } from './private-root.js';
11
+ import { borgHomeRoot, isCanonicalPath } from './private-root.js';
11
12
  import { getPackageVersion } from './version.js';
13
+ import {
14
+ buildBorgPluginSource,
15
+ installBorgPlugin,
16
+ openCodePluginPath,
17
+ } from './opencode-plugin.js';
12
18
 
13
19
  export const AGENT_HOOK_BINS = [
14
20
  'borg-regen',
@@ -32,9 +38,17 @@ export interface AgentHookBinHealth {
32
38
  export interface AgentIntegrationHealth {
33
39
  expectedVersion: string;
34
40
  bins: AgentHookBinHealth[];
35
- issues: Array<AgentHookBinHealth | ManagedAgentHookConfigHealth>;
41
+ issues: Array<AgentHookBinHealth | ManagedAgentHookConfigHealth | OpenCodePluginHealth>;
36
42
  hookConfigs: ManagedAgentHookConfigHealth[];
37
- openCodePlugin: { path: string; present: boolean };
43
+ openCodePlugin: OpenCodePluginHealth;
44
+ }
45
+
46
+ export interface OpenCodePluginHealth {
47
+ path: string;
48
+ configured: boolean;
49
+ status: 'ok' | 'present' | 'absent' | 'missing' | 'outdated' | 'unreadable' | 'refused';
50
+ version?: string;
51
+ detail?: string;
38
52
  }
39
53
 
40
54
  export interface InspectAgentIntegrationHealthOptions {
@@ -70,6 +84,72 @@ function defaultResolveBin(name: AgentHookBinName, searchPath: string | undefine
70
84
  }
71
85
  }
72
86
 
87
+ function inspectOpenCodePlugin(homeDir: string, expectedVersion: string): OpenCodePluginHealth {
88
+ const pluginPath = openCodePluginPath(homeDir);
89
+ const configured = isOpenCodeMcpServerConfigured(
90
+ path.join(homeDir, '.config', 'opencode', 'opencode.json'),
91
+ );
92
+ try {
93
+ let metadata: fs.Stats;
94
+ try {
95
+ metadata = fs.lstatSync(pluginPath);
96
+ } catch (error) {
97
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
98
+ if (!isCanonicalPath(pluginPath)) {
99
+ return {
100
+ path: pluginPath,
101
+ configured,
102
+ status: 'refused',
103
+ detail: 'plugin path contains a symlink',
104
+ };
105
+ }
106
+ return { path: pluginPath, configured, status: configured ? 'missing' : 'absent' };
107
+ }
108
+ throw error;
109
+ }
110
+ if (metadata.isSymbolicLink()) {
111
+ return {
112
+ path: pluginPath,
113
+ configured,
114
+ status: 'refused',
115
+ detail: 'plugin path is a symlink',
116
+ };
117
+ }
118
+ if (!isCanonicalPath(pluginPath)) {
119
+ return {
120
+ path: pluginPath,
121
+ configured,
122
+ status: 'refused',
123
+ detail: 'plugin path contains a symlink',
124
+ };
125
+ }
126
+ if (!metadata.isFile()) {
127
+ return {
128
+ path: pluginPath,
129
+ configured,
130
+ status: 'refused',
131
+ detail: 'plugin path is not a regular file',
132
+ };
133
+ }
134
+ const source = fs.readFileSync(pluginPath, 'utf8');
135
+ const marker = source.match(/borgmcp-opencode-plugin:([^;\s]+);opencode=/)?.[1];
136
+ if (!configured) {
137
+ return { path: pluginPath, configured, status: 'present', version: marker ?? 'unknown' };
138
+ }
139
+ if (source === buildBorgPluginSource(expectedVersion)) {
140
+ return { path: pluginPath, configured, status: 'ok', version: expectedVersion };
141
+ }
142
+ return { path: pluginPath, configured, status: 'outdated', version: marker ?? 'unknown' };
143
+ } catch (error) {
144
+ return {
145
+ path: pluginPath,
146
+ configured,
147
+ status: 'unreadable',
148
+ detail: error instanceof Error ? error.message : String(error),
149
+ };
150
+ }
151
+ }
152
+
73
153
  export function inspectAgentIntegrationHealth(
74
154
  options: InspectAgentIntegrationHealthOptions = {},
75
155
  ): AgentIntegrationHealth {
@@ -105,17 +185,22 @@ export function inspectAgentIntegrationHealth(
105
185
  }
106
186
  return { name, status: 'ok', resolvedPath, owner: owner.name, version: owner.version };
107
187
  });
108
- const pluginPath = path.join(homeDir, '.config', 'opencode', 'plugins', 'borg-orient.js');
109
188
  const hookConfigs = inspectManagedAgentHookConfigs(homeDir);
189
+ const openCodePlugin = inspectOpenCodePlugin(homeDir, expectedVersion);
110
190
  return {
111
191
  expectedVersion,
112
192
  bins,
113
193
  issues: [
114
194
  ...bins.filter((bin) => bin.status !== 'ok'),
115
195
  ...hookConfigs.filter((config) => config.status === 'stale' || config.status === 'invalid'),
196
+ ...(openCodePlugin.status === 'unreadable' ||
197
+ (openCodePlugin.status === 'refused' && openCodePlugin.configured) ||
198
+ (openCodePlugin.configured && openCodePlugin.status !== 'ok')
199
+ ? [openCodePlugin]
200
+ : []),
116
201
  ],
117
202
  hookConfigs,
118
- openCodePlugin: { path: pluginPath, present: fs.existsSync(pluginPath) },
203
+ openCodePlugin,
119
204
  };
120
205
  }
121
206
 
@@ -129,6 +214,22 @@ function renderBin(bin: AgentHookBinHealth, expectedVersion: string): string {
129
214
  }
130
215
  }
131
216
 
217
+ function renderOpenCodePlugin(
218
+ plugin: OpenCodePluginHealth,
219
+ expectedVersion: string,
220
+ ): string {
221
+ const prefix = 'OpenCode borg-orient.js plugin:';
222
+ switch (plugin.status) {
223
+ case 'ok': return `${prefix} ok (${plugin.version})`;
224
+ case 'present': return `${prefix} present`;
225
+ case 'absent': return `${prefix} absent`;
226
+ case 'missing': return `${prefix} missing at ${plugin.path}`;
227
+ case 'outdated': return `${prefix} version ${plugin.version}, expected ${expectedVersion} at ${plugin.path}`;
228
+ case 'unreadable': return `${prefix} unreadable at ${plugin.path}${plugin.detail ? ` (${plugin.detail})` : ''}`;
229
+ case 'refused': return `${prefix} refused at ${plugin.path}${plugin.detail ? ` (${plugin.detail})` : ''}`;
230
+ }
231
+ }
232
+
132
233
  export function renderAgentIntegrationHealth(report: AgentIntegrationHealth): string {
133
234
  const lines = [
134
235
  `Borg agent integration (borgmcp ${report.expectedVersion})`,
@@ -137,7 +238,7 @@ export function renderAgentIntegrationHealth(report: AgentIntegrationHealth): st
137
238
  ...report.hookConfigs.map((item) => (
138
239
  ` ${item.status}: ${item.path}${item.detail ? ` (${item.detail})` : ''}`
139
240
  )),
140
- `OpenCode borg-orient.js plugin: ${report.openCodePlugin.present ? 'present' : 'absent'} (${report.openCodePlugin.path})`,
241
+ renderOpenCodePlugin(report.openCodePlugin, report.expectedVersion),
141
242
  ];
142
243
  for (const bin of report.bins) {
143
244
  switch (bin.status) {
@@ -168,6 +269,19 @@ export function renderAgentIntegrationHealth(report: AgentIntegrationHealth): st
168
269
  : `Repair invalid managed hook config ${config.path}, then run: borg update --yes`);
169
270
  }
170
271
  }
272
+ if (report.openCodePlugin.status === 'missing') {
273
+ lines.push('Repair missing OpenCode plugin: borg update --yes');
274
+ } else if (report.openCodePlugin.status === 'outdated' && report.openCodePlugin.configured) {
275
+ lines.push('Repair OpenCode plugin: borg update --yes');
276
+ } else if (report.openCodePlugin.status === 'unreadable') {
277
+ lines.push(report.openCodePlugin.configured
278
+ ? `Fix or replace unreadable OpenCode plugin ${report.openCodePlugin.path}, then run: borg update --yes`
279
+ : `Fix or remove unreadable OpenCode plugin ${report.openCodePlugin.path}`);
280
+ } else if (report.openCodePlugin.status === 'refused' && report.openCodePlugin.configured) {
281
+ lines.push(
282
+ `Remove or replace the OpenCode plugin path ${report.openCodePlugin.path}, then run: borg update --yes`,
283
+ );
284
+ }
171
285
  return `${lines.join('\n')}\n`;
172
286
  }
173
287
 
@@ -223,6 +337,7 @@ export function refreshAndVerifyManagedAgentIntegrations(): void {
223
337
  'Repair the named managed hook config, then rerun borg update --yes',
224
338
  );
225
339
  }
340
+ if (isOpenCodeMcpServerConfigured()) installBorgPlugin();
226
341
  try {
227
342
  assertAgentIntegrationHealthy(inspectAgentIntegrationHealth());
228
343
  } catch (error) {
package/src/claude.ts CHANGED
@@ -630,6 +630,7 @@ function ensureResolvedCliConfigured(cli: BorgCli): void {
630
630
  addClaudeUserPromptSubmitHook: addUserPromptSubmitHook,
631
631
  addCodexSessionStartHook,
632
632
  addCodexUserPromptSubmitHook,
633
+ installOpenCodePlugin: installBorgPlugin,
633
634
  });
634
635
  } catch (err: any) {
635
636
  console.error(`${consolePrefix()}${chalk.yellow(`warning: ${label} integration check failed: ${err?.message ?? err}`)}`);
@@ -1167,7 +1167,7 @@ export function isCodexUserPromptSubmitHookRegistered(hooksPath: string = CODEX_
1167
1167
  * `type: "local"`. Safe-default: any read error returns `false`.
1168
1168
  */
1169
1169
  export function isOpenCodeMcpServerConfigured(
1170
- configPath: string = OPENCODE_CONFIG_PATH
1170
+ configPath: string = path.join(borgHomeRoot(), '.config', 'opencode', 'opencode.json')
1171
1171
  ): boolean {
1172
1172
  try {
1173
1173
  if (!fs.existsSync(configPath)) return false;