@cotal-ai/connector-opencode 0.8.1 → 0.8.2
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/dist/extension.d.ts +2 -2
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +21 -5
- package/dist/extension.js.map +1 -1
- package/dist/plugin.bundle.js +142 -6
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +79 -11
- package/dist/plugin.js.map +1 -1
- package/dist/serve.js +34 -5
- package/dist/serve.js.map +1 -1
- package/package.json +3 -3
package/dist/extension.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { type Connector } from "@cotal-ai/core";
|
|
|
4
4
|
* OpenCode's client/server split (see serve.ts). The Cotal mesh bridge runs as an in-process plugin
|
|
5
5
|
* inside a headless `opencode serve`: it holds the {@link MeshAgent}, registers the cotal_* tools
|
|
6
6
|
* natively (from the shared specs, at parity with Claude Code), reports presence off the event bus,
|
|
7
|
-
* and owns ONE session it drives — injecting each incoming peer batch
|
|
8
|
-
*
|
|
7
|
+
* and owns ONE session it drives — injecting each incoming peer batch through the authenticated
|
|
8
|
+
* OpenCode server API on the same serve process the TUI attaches to. The shim then attaches a
|
|
9
9
|
* foreground TUI to that session, so a human watching sees the agent work and can type into it.
|
|
10
10
|
*
|
|
11
11
|
* Config rides in `OPENCODE_CONFIG_CONTENT` (inline JSON, the highest merge layer), so the
|
package/dist/extension.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,SAAS,EAAoC,MAAM,gBAAgB,CAAC;AAa3G;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,SAAS,EAAoC,MAAM,gBAAgB,CAAC;AAa3G;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAmG/B,CAAC"}
|
package/dist/extension.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fileURLToPath } from "node:url";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { loadAgentFile, registry } from "@cotal-ai/core";
|
|
4
|
-
import { aclEnv, launchEnv, MODEL_PROVIDER_KEYS } from "@cotal-ai/connector-core";
|
|
4
|
+
import { aclEnv, launchEnv, controlEndpoint, MODEL_PROVIDER_KEYS } from "@cotal-ai/connector-core";
|
|
5
5
|
/** The bundled in-process plugin (esbuild → `dist/plugin.bundle.js`). `opencode serve` loads it by
|
|
6
6
|
* absolute path from the inline config, so it runs *inside* the server and shares its SDK client.
|
|
7
7
|
* Resolved relative to this module — beside the built `dist/extension.js`, so the connector must be
|
|
@@ -15,8 +15,8 @@ const SERVE_SHIM = fileURLToPath(new URL("./serve.js", import.meta.url));
|
|
|
15
15
|
* OpenCode's client/server split (see serve.ts). The Cotal mesh bridge runs as an in-process plugin
|
|
16
16
|
* inside a headless `opencode serve`: it holds the {@link MeshAgent}, registers the cotal_* tools
|
|
17
17
|
* natively (from the shared specs, at parity with Claude Code), reports presence off the event bus,
|
|
18
|
-
* and owns ONE session it drives — injecting each incoming peer batch
|
|
19
|
-
*
|
|
18
|
+
* and owns ONE session it drives — injecting each incoming peer batch through the authenticated
|
|
19
|
+
* OpenCode server API on the same serve process the TUI attaches to. The shim then attaches a
|
|
20
20
|
* foreground TUI to that session, so a human watching sees the agent work and can type into it.
|
|
21
21
|
*
|
|
22
22
|
* Config rides in `OPENCODE_CONFIG_CONTENT` (inline JSON, the highest merge layer), so the
|
|
@@ -93,15 +93,31 @@ export const opencodeConnector = {
|
|
|
93
93
|
if (face)
|
|
94
94
|
env.COTAL_FACE_PERSONA = face; // shim swaps the TUI for the face viewer
|
|
95
95
|
}
|
|
96
|
-
// The `--model` flag wins over the agent file, and applies even with no agent file.
|
|
97
|
-
|
|
96
|
+
// The `--model` flag wins over the agent file, and applies even with no agent file. Pin it to a
|
|
97
|
+
// dedicated primary agent made the default, so an operator's own `default_agent` in
|
|
98
|
+
// ~/.config/opencode (with its own model) can't override the model a Cotal spawn asks for — the
|
|
99
|
+
// session the plugin drives runs the persona's model, not the operator's default agent's.
|
|
100
|
+
if (model) {
|
|
98
101
|
config.model = model;
|
|
102
|
+
config.agent = { cotal: { mode: "primary", model } };
|
|
103
|
+
config.default_agent = "cotal";
|
|
104
|
+
}
|
|
99
105
|
env.OPENCODE_CONFIG_CONTENT = JSON.stringify(config);
|
|
106
|
+
// Local control endpoint: the manager sends a cooperative {op:"shutdown"} here on a signal-less
|
|
107
|
+
// runtime (ConPTY/Windows), where a hard kill skips cleanup and the agent lingers until its
|
|
108
|
+
// presence TTL expires. The plugin (in the opencode server process) starts the control server and
|
|
109
|
+
// leaves the mesh cleanly on shutdown. Minted here; passed to the plugin in the child env (the
|
|
110
|
+
// token never on argv/logs) — opencode serve inherits this process env, the attached TUI strips
|
|
111
|
+
// COTAL_*. Returned in the LaunchSpec so the manager holds it in memory to drive the stop.
|
|
112
|
+
const control = controlEndpoint(opts.space, opts.name);
|
|
113
|
+
env.COTAL_CONTROL_SOCKET = control.path;
|
|
114
|
+
env.COTAL_CONTROL_TOKEN = control.token;
|
|
100
115
|
// Run the shim (node dist/serve.js): `opencode serve` + an attached foreground TUI.
|
|
101
116
|
return {
|
|
102
117
|
command: process.execPath,
|
|
103
118
|
args: [SERVE_SHIM],
|
|
104
119
|
env,
|
|
120
|
+
control,
|
|
105
121
|
};
|
|
106
122
|
},
|
|
107
123
|
};
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAoD,MAAM,gBAAgB,CAAC;AAC3G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.bundle.js
CHANGED
|
@@ -2993,7 +2993,7 @@ var require_nkeys = __commonJS({
|
|
|
2993
2993
|
exports.createAccount = createAccount2;
|
|
2994
2994
|
exports.createUser = createUser2;
|
|
2995
2995
|
exports.createCluster = createCluster;
|
|
2996
|
-
exports.createServer =
|
|
2996
|
+
exports.createServer = createServer2;
|
|
2997
2997
|
exports.createCurve = createCurve;
|
|
2998
2998
|
exports.fromPublic = fromPublic2;
|
|
2999
2999
|
exports.fromCurveSeed = fromCurveSeed;
|
|
@@ -3021,7 +3021,7 @@ var require_nkeys = __commonJS({
|
|
|
3021
3021
|
function createCluster() {
|
|
3022
3022
|
return createPair(Prefix2.Cluster);
|
|
3023
3023
|
}
|
|
3024
|
-
function
|
|
3024
|
+
function createServer2() {
|
|
3025
3025
|
return createPair(Prefix2.Server);
|
|
3026
3026
|
}
|
|
3027
3027
|
function createCurve() {
|
|
@@ -14944,6 +14944,8 @@ function assertValidName(name) {
|
|
|
14944
14944
|
throw new Error(`invalid name ${JSON.stringify(name)}: must be a single line`);
|
|
14945
14945
|
if (name.includes("/"))
|
|
14946
14946
|
throw new Error(`invalid name ${JSON.stringify(name)}: "/" is reserved (the owner/name separator)`);
|
|
14947
|
+
if (name.includes("\\"))
|
|
14948
|
+
throw new Error(`invalid name ${JSON.stringify(name)}: "\\" is reserved (a Windows path separator)`);
|
|
14947
14949
|
}
|
|
14948
14950
|
|
|
14949
14951
|
// ../../packages/core/dist/link.js
|
|
@@ -17038,6 +17040,9 @@ function loadAgentFile(path) {
|
|
|
17038
17040
|
};
|
|
17039
17041
|
}
|
|
17040
17042
|
|
|
17043
|
+
// ../../packages/core/dist/secret-fs.js
|
|
17044
|
+
var isWin = process.platform === "win32";
|
|
17045
|
+
|
|
17041
17046
|
// ../../packages/core/dist/endpoint.js
|
|
17042
17047
|
import { EventEmitter } from "node:events";
|
|
17043
17048
|
import { randomUUID } from "node:crypto";
|
|
@@ -34914,6 +34919,16 @@ ${info}${caught}`);
|
|
|
34914
34919
|
}
|
|
34915
34920
|
|
|
34916
34921
|
// ../connector-core/dist/control.js
|
|
34922
|
+
import { createServer } from "node:net";
|
|
34923
|
+
import { existsSync, unlinkSync } from "node:fs";
|
|
34924
|
+
import { createHash, timingSafeEqual } from "node:crypto";
|
|
34925
|
+
var MAX_FRAME_BYTES = 1 << 20;
|
|
34926
|
+
var AUTH_DEADLINE_MS = 5e3;
|
|
34927
|
+
function tokenMatches(presented, digest) {
|
|
34928
|
+
if (typeof presented !== "string")
|
|
34929
|
+
return false;
|
|
34930
|
+
return timingSafeEqual(createHash("sha256").update(presented).digest(), digest);
|
|
34931
|
+
}
|
|
34917
34932
|
function who(i) {
|
|
34918
34933
|
return i.fromRole ? `${i.fromName}/${i.fromRole}` : i.fromName;
|
|
34919
34934
|
}
|
|
@@ -34934,6 +34949,76 @@ function formatInjection(items) {
|
|
|
34934
34949
|
${items.map(fmtItem2).join("\n")}
|
|
34935
34950
|
${tail}`;
|
|
34936
34951
|
}
|
|
34952
|
+
function startControlServer(agent, endpoint, handle, opts = {}) {
|
|
34953
|
+
const { path } = endpoint;
|
|
34954
|
+
const digest = createHash("sha256").update(endpoint.token).digest();
|
|
34955
|
+
if (process.platform !== "win32" && existsSync(path)) {
|
|
34956
|
+
try {
|
|
34957
|
+
unlinkSync(path);
|
|
34958
|
+
} catch {
|
|
34959
|
+
}
|
|
34960
|
+
}
|
|
34961
|
+
const server = createServer((sock) => {
|
|
34962
|
+
let buf = "";
|
|
34963
|
+
let handled = false;
|
|
34964
|
+
sock.setEncoding("utf8");
|
|
34965
|
+
const deadline = setTimeout(() => sock.destroy(), AUTH_DEADLINE_MS);
|
|
34966
|
+
deadline.unref?.();
|
|
34967
|
+
sock.on("close", () => clearTimeout(deadline));
|
|
34968
|
+
sock.on("data", async (d) => {
|
|
34969
|
+
if (handled)
|
|
34970
|
+
return;
|
|
34971
|
+
buf += d;
|
|
34972
|
+
if (buf.length > MAX_FRAME_BYTES) {
|
|
34973
|
+
sock.destroy();
|
|
34974
|
+
return;
|
|
34975
|
+
}
|
|
34976
|
+
const nl = buf.indexOf("\n");
|
|
34977
|
+
if (nl < 0)
|
|
34978
|
+
return;
|
|
34979
|
+
handled = true;
|
|
34980
|
+
clearTimeout(deadline);
|
|
34981
|
+
let frame = {};
|
|
34982
|
+
try {
|
|
34983
|
+
frame = JSON.parse(buf.slice(0, nl) || "{}");
|
|
34984
|
+
} catch {
|
|
34985
|
+
}
|
|
34986
|
+
if (!tokenMatches(frame.token, digest)) {
|
|
34987
|
+
sock.destroy();
|
|
34988
|
+
return;
|
|
34989
|
+
}
|
|
34990
|
+
if (frame.op === "shutdown") {
|
|
34991
|
+
try {
|
|
34992
|
+
sock.end(JSON.stringify({ ok: true }) + "\n");
|
|
34993
|
+
} catch {
|
|
34994
|
+
}
|
|
34995
|
+
opts.onShutdown?.();
|
|
34996
|
+
return;
|
|
34997
|
+
}
|
|
34998
|
+
const ev = frame.event ?? {};
|
|
34999
|
+
const reply = await handle(agent, ev);
|
|
35000
|
+
try {
|
|
35001
|
+
sock.end(JSON.stringify(reply) + "\n");
|
|
35002
|
+
} catch {
|
|
35003
|
+
}
|
|
35004
|
+
});
|
|
35005
|
+
sock.on("error", () => {
|
|
35006
|
+
});
|
|
35007
|
+
});
|
|
35008
|
+
let bound = false;
|
|
35009
|
+
server.on("error", (e) => {
|
|
35010
|
+
process.stderr.write(`[cotal-connector] control server error: ${e.message}
|
|
35011
|
+
`);
|
|
35012
|
+
if (opts.fatalBind && !bound)
|
|
35013
|
+
process.exit(1);
|
|
35014
|
+
});
|
|
35015
|
+
server.listen(path, () => {
|
|
35016
|
+
bound = true;
|
|
35017
|
+
process.stderr.write(`[cotal-connector] control socket: ${path}
|
|
35018
|
+
`);
|
|
35019
|
+
});
|
|
35020
|
+
return server;
|
|
35021
|
+
}
|
|
34937
35022
|
|
|
34938
35023
|
// src/tools.ts
|
|
34939
35024
|
import { tool } from "@opencode-ai/plugin";
|
|
@@ -34970,7 +35055,7 @@ function log(msg) {
|
|
|
34970
35055
|
`);
|
|
34971
35056
|
}
|
|
34972
35057
|
var guard = globalThis;
|
|
34973
|
-
var cotal = async (
|
|
35058
|
+
var cotal = async () => {
|
|
34974
35059
|
if (!hasIdentity()) {
|
|
34975
35060
|
log("no COTAL_NAME \u2014 not a managed session; staying off the mesh");
|
|
34976
35061
|
return {};
|
|
@@ -34978,8 +35063,27 @@ var cotal = async ({ client }) => {
|
|
|
34978
35063
|
if (guard.__cotalOpencodeHooks) return guard.__cotalOpencodeHooks;
|
|
34979
35064
|
const config2 = configFromEnv();
|
|
34980
35065
|
config2.connector = "opencode";
|
|
35066
|
+
const serverUrl = process.env.COTAL_OPENCODE_SERVER_URL?.trim();
|
|
35067
|
+
const serverUsername = process.env.OPENCODE_SERVER_USERNAME?.trim() || "opencode";
|
|
35068
|
+
const serverPassword = process.env.OPENCODE_SERVER_PASSWORD?.trim();
|
|
35069
|
+
if (!serverUrl || !serverPassword) throw new Error("opencode connector: missing COTAL_OPENCODE_SERVER_URL/OPENCODE_SERVER_PASSWORD");
|
|
35070
|
+
const serverAuth = `Basic ${Buffer.from(`${serverUsername}:${serverPassword}`).toString("base64")}`;
|
|
34981
35071
|
const agent = new MeshAgent(config2);
|
|
34982
35072
|
agent.start();
|
|
35073
|
+
async function opencodeApi(path, init, timeoutMs = 1e4) {
|
|
35074
|
+
const res = await fetch(`${serverUrl}${path}`, {
|
|
35075
|
+
...init,
|
|
35076
|
+
signal: init?.signal ?? AbortSignal.timeout(timeoutMs),
|
|
35077
|
+
headers: {
|
|
35078
|
+
authorization: serverAuth,
|
|
35079
|
+
"content-type": "application/json",
|
|
35080
|
+
...init?.headers ?? {}
|
|
35081
|
+
}
|
|
35082
|
+
});
|
|
35083
|
+
if (!res.ok) throw new Error(`OpenCode HTTP ${res.status} ${res.statusText} for ${path}`);
|
|
35084
|
+
if (res.status === 204) return void 0;
|
|
35085
|
+
return await res.json();
|
|
35086
|
+
}
|
|
34983
35087
|
const def = process.env.COTAL_AGENT_FILE?.trim() ? loadAgentFile(process.env.COTAL_AGENT_FILE.trim()) : void 0;
|
|
34984
35088
|
const facePrompt = process.env.COTAL_FACE_PERSONA?.trim() ? 'You speak through an animated pixel-art avatar of yourself. Hard formatting rule: the text you pass to the cotal send tools (cotal_send / cotal_dm) must START with an emotion tag [[face:X]], where X is one of: neutral, happy, sad, angry, surprised \u2014 pick the one matching your mood, and insert another tag mid-text whenever your mood shifts. Example: "[[face:angry]] That race condition cost me three days. [[face:happy]] But watch it run now." Never mention or explain the tags \u2014 they are stripped before peers see your message.' : void 0;
|
|
34985
35089
|
const persona = [def?.persona, facePrompt].filter(Boolean).join("\n\n") || void 0;
|
|
@@ -34997,6 +35101,31 @@ var cotal = async ({ client }) => {
|
|
|
34997
35101
|
} catch {
|
|
34998
35102
|
}
|
|
34999
35103
|
};
|
|
35104
|
+
let controlServer;
|
|
35105
|
+
const shutdown = async () => {
|
|
35106
|
+
try {
|
|
35107
|
+
controlServer?.close();
|
|
35108
|
+
} catch {
|
|
35109
|
+
}
|
|
35110
|
+
try {
|
|
35111
|
+
await safeStatus("offline");
|
|
35112
|
+
await agent.stop();
|
|
35113
|
+
} finally {
|
|
35114
|
+
process.exit(0);
|
|
35115
|
+
}
|
|
35116
|
+
};
|
|
35117
|
+
const controlPath = process.env.COTAL_CONTROL_SOCKET?.trim();
|
|
35118
|
+
const controlToken = process.env.COTAL_CONTROL_TOKEN?.trim();
|
|
35119
|
+
if (controlPath && controlToken) {
|
|
35120
|
+
const handle = async () => ({
|
|
35121
|
+
ok: false,
|
|
35122
|
+
error: "opencode runs cotal hooks in-process; only the shutdown control op is supported"
|
|
35123
|
+
});
|
|
35124
|
+
controlServer = startControlServer(agent, { path: controlPath, token: controlToken }, handle, {
|
|
35125
|
+
fatalBind: true,
|
|
35126
|
+
onShutdown: () => void shutdown()
|
|
35127
|
+
});
|
|
35128
|
+
}
|
|
35000
35129
|
function pendingForWake() {
|
|
35001
35130
|
return agent.pendingWake();
|
|
35002
35131
|
}
|
|
@@ -35018,8 +35147,11 @@ var cotal = async ({ client }) => {
|
|
|
35018
35147
|
}
|
|
35019
35148
|
const sessionReady = (async () => {
|
|
35020
35149
|
try {
|
|
35021
|
-
const res = await
|
|
35022
|
-
|
|
35150
|
+
const res = await opencodeApi("/session", {
|
|
35151
|
+
method: "POST",
|
|
35152
|
+
body: JSON.stringify({ title: `cotal:${config2.space}:${config2.name}` })
|
|
35153
|
+
}, 1e4);
|
|
35154
|
+
const id = res.id;
|
|
35023
35155
|
if (id) {
|
|
35024
35156
|
adoptSession(id, "boot");
|
|
35025
35157
|
process.stderr.write(`[cotal-session] ${id}
|
|
@@ -35064,7 +35196,7 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35064
35196
|
busy = true;
|
|
35065
35197
|
surfaced = ids;
|
|
35066
35198
|
awaitingTurnEnd = true;
|
|
35067
|
-
await
|
|
35199
|
+
await opencodeApi(`/session/${encodeURIComponent(id)}/prompt_async`, { method: "POST", body: JSON.stringify(body) }, 1e4);
|
|
35068
35200
|
primed = true;
|
|
35069
35201
|
} catch (e) {
|
|
35070
35202
|
busy = false;
|
|
@@ -35162,6 +35294,10 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35162
35294
|
await safeStatus("working", input.tool);
|
|
35163
35295
|
},
|
|
35164
35296
|
dispose: async () => {
|
|
35297
|
+
try {
|
|
35298
|
+
controlServer?.close();
|
|
35299
|
+
} catch {
|
|
35300
|
+
}
|
|
35165
35301
|
await safeStatus("offline");
|
|
35166
35302
|
await agent.stop();
|
|
35167
35303
|
}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAazD,eAAO,MAAM,KAAK,EAAE,MAwVnB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* • registers the cotal_* tools natively, rendered from the SHARED {@link cotalToolSpecs}
|
|
9
9
|
* (`./tools.ts`) — same surface as Claude Code, incl. channels / join / leave / channel_info;
|
|
10
10
|
* • maps OpenCode bus events to presence (idle | working | waiting | offline);
|
|
11
|
-
* • owns ONE session (created at boot) and drives it: it injects each inbox batch as a turn
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* • owns ONE session (created at boot) and drives it: it injects each inbox batch as a turn through
|
|
12
|
+
* the authenticated OpenCode server HTTP API (the same server the TUI is attached to), acking ON
|
|
13
|
+
* TURN COMPLETION (so a crash/error redelivers).
|
|
14
14
|
* Delivery is **attention-aware** (open/dnd/focus) and never interrupts a running turn — a
|
|
15
15
|
* message that arrives mid-turn waits for the turn to end (matching Claude's no-interrupt
|
|
16
16
|
* behavior), then drives.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* No identity → inert, so an operator's own `opencode` never joins as a stray peer.
|
|
20
20
|
*/
|
|
21
21
|
import { loadAgentFile } from "@cotal-ai/core";
|
|
22
|
-
import { configFromEnv, hasIdentity, MeshAgent, formatInjection, fmtFrom, ORIENTATION_BOOTSTRAP, } from "@cotal-ai/connector-core";
|
|
22
|
+
import { configFromEnv, hasIdentity, MeshAgent, startControlServer, formatInjection, fmtFrom, ORIENTATION_BOOTSTRAP, } from "@cotal-ai/connector-core";
|
|
23
23
|
import { buildCotalTools } from "./tools.js";
|
|
24
24
|
function log(msg) {
|
|
25
25
|
process.stderr.write(`[cotal-connector] ${msg}\n`);
|
|
@@ -29,7 +29,7 @@ function log(msg) {
|
|
|
29
29
|
* call wires up the agent, and every call returns the *same* hooks (the same tools, bound to that
|
|
30
30
|
* one agent), whichever scope opencode ends up using. */
|
|
31
31
|
const guard = globalThis;
|
|
32
|
-
export const cotal = async (
|
|
32
|
+
export const cotal = async () => {
|
|
33
33
|
// No identity → a plain `opencode`, not a launcher-spawned agent. Stay inert.
|
|
34
34
|
if (!hasIdentity()) {
|
|
35
35
|
log("no COTAL_NAME — not a managed session; staying off the mesh");
|
|
@@ -39,8 +39,30 @@ export const cotal = async ({ client }) => {
|
|
|
39
39
|
return guard.__cotalOpencodeHooks; // one agent; reuse the hooks
|
|
40
40
|
const config = configFromEnv();
|
|
41
41
|
config.connector = "opencode"; // advertise the host harness on our AgentCard (meta.connector)
|
|
42
|
+
const serverUrl = process.env.COTAL_OPENCODE_SERVER_URL?.trim();
|
|
43
|
+
const serverUsername = process.env.OPENCODE_SERVER_USERNAME?.trim() || "opencode";
|
|
44
|
+
const serverPassword = process.env.OPENCODE_SERVER_PASSWORD?.trim();
|
|
45
|
+
if (!serverUrl || !serverPassword)
|
|
46
|
+
throw new Error("opencode connector: missing COTAL_OPENCODE_SERVER_URL/OPENCODE_SERVER_PASSWORD");
|
|
47
|
+
const serverAuth = `Basic ${Buffer.from(`${serverUsername}:${serverPassword}`).toString("base64")}`;
|
|
42
48
|
const agent = new MeshAgent(config);
|
|
43
49
|
agent.start(); // background connect with retry — never blocks startup
|
|
50
|
+
async function opencodeApi(path, init, timeoutMs = 10_000) {
|
|
51
|
+
const res = await fetch(`${serverUrl}${path}`, {
|
|
52
|
+
...init,
|
|
53
|
+
signal: init?.signal ?? AbortSignal.timeout(timeoutMs),
|
|
54
|
+
headers: {
|
|
55
|
+
authorization: serverAuth,
|
|
56
|
+
"content-type": "application/json",
|
|
57
|
+
...(init?.headers ?? {}),
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok)
|
|
61
|
+
throw new Error(`OpenCode HTTP ${res.status} ${res.statusText} for ${path}`);
|
|
62
|
+
if (res.status === 204)
|
|
63
|
+
return undefined;
|
|
64
|
+
return (await res.json());
|
|
65
|
+
}
|
|
44
66
|
const def = process.env.COTAL_AGENT_FILE?.trim() ? loadAgentFile(process.env.COTAL_AGENT_FILE.trim()) : undefined;
|
|
45
67
|
// Face-hosted (`face:` in the agent file → the shim attaches the face viewer): teach the agent
|
|
46
68
|
// to steer its avatar's expression with inline [[face:X]] tags in the text it passes to the
|
|
@@ -67,7 +89,7 @@ export const cotal = async ({ client }) => {
|
|
|
67
89
|
let sessionID;
|
|
68
90
|
let busy = false; // a turn is running (ours via drive(), OR the human's via session.status) → don't
|
|
69
91
|
// prompt: opencode would COALESCE onto it (no reject). Released at EVERY turn end (completeTurn).
|
|
70
|
-
let driving = false; // re-entrancy guard around an in-flight
|
|
92
|
+
let driving = false; // re-entrancy guard around an in-flight server prompt
|
|
71
93
|
let primed = false; // persona is prepended to the first turn's text once
|
|
72
94
|
let briefed = false; // the boot channel briefing is prepended once, on the first turn
|
|
73
95
|
let surfaced = []; // ids surfaced into the current turn, acked on completion (by id, not count)
|
|
@@ -81,6 +103,43 @@ export const cotal = async ({ client }) => {
|
|
|
81
103
|
/* presence is best-effort — never throw into opencode */
|
|
82
104
|
}
|
|
83
105
|
};
|
|
106
|
+
// Cooperative shutdown. The manager sends an authenticated {op:"shutdown"} to this agent's local
|
|
107
|
+
// control endpoint on a signal-less runtime (ConPTY/Windows), where a hard kill would skip cleanup
|
|
108
|
+
// and leave the agent online until its presence TTL expires. We leave the mesh cleanly instead, then
|
|
109
|
+
// exit (the runtime hard-kills as a backstop). The endpoint (path + token) is minted by the
|
|
110
|
+
// connector's buildLaunch and arrives in the child env; the plugin runs inside the opencode server
|
|
111
|
+
// process, so it reads it there. Hooks are in-process (no external relay connects), so only the
|
|
112
|
+
// shutdown op is used — the handle path is inert. fatalBind: a managed agent MUST own its control
|
|
113
|
+
// endpoint, so a squatter (or a runtime that can't host the pipe) fails loud rather than running a
|
|
114
|
+
// hijacked or absent control plane.
|
|
115
|
+
let controlServer;
|
|
116
|
+
const shutdown = async () => {
|
|
117
|
+
try {
|
|
118
|
+
controlServer?.close();
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
/* ignore */
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
await safeStatus("offline");
|
|
125
|
+
await agent.stop();
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
process.exit(0);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const controlPath = process.env.COTAL_CONTROL_SOCKET?.trim();
|
|
132
|
+
const controlToken = process.env.COTAL_CONTROL_TOKEN?.trim();
|
|
133
|
+
if (controlPath && controlToken) {
|
|
134
|
+
const handle = async () => ({
|
|
135
|
+
ok: false,
|
|
136
|
+
error: "opencode runs cotal hooks in-process; only the shutdown control op is supported",
|
|
137
|
+
});
|
|
138
|
+
controlServer = startControlServer(agent, { path: controlPath, token: controlToken }, handle, {
|
|
139
|
+
fatalBind: true,
|
|
140
|
+
onShutdown: () => void shutdown(),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
84
143
|
function pendingForWake() {
|
|
85
144
|
return agent.pendingWake(); // mode-and-channel-aware: excludes held dnd/quiet ambient
|
|
86
145
|
}
|
|
@@ -108,8 +167,11 @@ export const cotal = async ({ client }) => {
|
|
|
108
167
|
* can't be picked. Awaited by ensureSession before the first drive. */
|
|
109
168
|
const sessionReady = (async () => {
|
|
110
169
|
try {
|
|
111
|
-
const res = await
|
|
112
|
-
|
|
170
|
+
const res = await opencodeApi("/session", {
|
|
171
|
+
method: "POST",
|
|
172
|
+
body: JSON.stringify({ title: `cotal:${config.space}:${config.name}` }),
|
|
173
|
+
}, 10_000);
|
|
174
|
+
const id = res.id;
|
|
113
175
|
if (id) {
|
|
114
176
|
adoptSession(id, "boot");
|
|
115
177
|
process.stderr.write(`[cotal-session] ${id}\n`);
|
|
@@ -127,7 +189,7 @@ export const cotal = async ({ client }) => {
|
|
|
127
189
|
return sessionID ?? (await sessionReady);
|
|
128
190
|
}
|
|
129
191
|
/** Drive a turn carrying the current inbox batch (and the boot briefing once) into the visible
|
|
130
|
-
* session via the
|
|
192
|
+
* session via the server API — server-side, so it can't race like the TUI input box, and the TUI
|
|
131
193
|
* renders it live (it subscribes to that session's events). Surfaces the items but does NOT ack
|
|
132
194
|
* them — ackSurfaced runs on turn completion, so a crash/error redelivers. `override` replaces
|
|
133
195
|
* the body (a bare nudge, e.g. a focus @mention pull) and surfaces nothing to ack. Self-guards
|
|
@@ -171,10 +233,10 @@ export const cotal = async ({ client }) => {
|
|
|
171
233
|
body.system = `${persona}\n\n${ORIENTATION_BOOTSTRAP}`;
|
|
172
234
|
busy = true;
|
|
173
235
|
surfaced = ids;
|
|
174
|
-
// Arm BEFORE the await: a turn-end signal can land before
|
|
236
|
+
// Arm BEFORE the await: a turn-end signal can land before the server request resolves, and
|
|
175
237
|
// completeTurn bails unless armed — arming after would drop it and wedge the agent.
|
|
176
238
|
awaitingTurnEnd = true;
|
|
177
|
-
await
|
|
239
|
+
await opencodeApi(`/session/${encodeURIComponent(id)}/prompt_async`, { method: "POST", body: JSON.stringify(body) }, 10_000);
|
|
178
240
|
primed = true;
|
|
179
241
|
}
|
|
180
242
|
catch (e) {
|
|
@@ -325,6 +387,12 @@ export const cotal = async ({ client }) => {
|
|
|
325
387
|
await safeStatus("working", input.tool);
|
|
326
388
|
},
|
|
327
389
|
dispose: async () => {
|
|
390
|
+
try {
|
|
391
|
+
controlServer?.close();
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
/* ignore */
|
|
395
|
+
}
|
|
328
396
|
await safeStatus("offline");
|
|
329
397
|
await agent.stop();
|
|
330
398
|
},
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,aAAa,EAAuB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,qBAAqB,GAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC;AAED;;;0DAG0D;AAC1D,MAAM,KAAK,GAAG,UAA8C,CAAC;AAE7D,MAAM,CAAC,MAAM,KAAK,GAAW,KAAK,IAAI,EAAE;IACtC,8EAA8E;IAC9E,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,6DAA6D,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,CAAC,oBAAoB;QAAE,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,6BAA6B;IAChG,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,+DAA+D;IAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC;IAClF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IACpE,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACrI,MAAM,UAAU,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEpG,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,uDAAuD;IAEtE,KAAK,UAAU,WAAW,CAAI,IAAY,EAAE,IAAkB,EAAE,SAAS,GAAG,MAAM;QAChF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,EAAE;YAC7C,GAAG,IAAI;YACP,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtD,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU;gBACzB,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;aACzB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,+FAA+F;IAC/F,4FAA4F;IAC5F,+FAA+F;IAC/F,4CAA4C;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QACvD,CAAC,CAAC,6FAA6F;YAC7F,0FAA0F;YAC1F,+FAA+F;YAC/F,iFAAiF;YACjF,gGAAgG;YAChG,sFAAsF;QACxF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IACrF,8FAA8F;IAC9F,sEAAsE;IACtE,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,+IAA+I;QACjJ,CAAC,CAAC,SAAS,CAAC;IAEd,mGAAmG;IACnG,iGAAiG;IACjG,mGAAmG;IACnG,wEAAwE;IACxE,IAAI,SAA6B,CAAC;IAClC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,kFAAkF;IACpG,kGAAkG;IAClG,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,sDAAsD;IAC3E,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,qDAAqD;IACzE,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,iEAAiE;IACtF,IAAI,QAAQ,GAAa,EAAE,CAAC,CAAC,6EAA6E;IAC1G,IAAI,eAAe,GAAG,KAAK,CAAC,CAAC,mEAAmE;IAEhG,MAAM,UAAU,GAAG,KAAK,EAAE,MAAsB,EAAE,QAAiB,EAAiB,EAAE;QACpF,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,SAAS;gBAAE,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC,CAAC;IAEF,iGAAiG;IACjG,mGAAmG;IACnG,qGAAqG;IACrG,4FAA4F;IAC5F,mGAAmG;IACnG,gGAAgG;IAChG,kGAAkG;IAClG,mGAAmG;IACnG,oCAAoC;IACpC,IAAI,aAAgE,CAAC;IACrE,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,CAAC;YACH,aAAa,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,IAAsC,EAAE,CAAC,CAAC;YAC5D,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,iFAAiF;SACzF,CAAC,CAAC;QACH,aAAa,GAAG,kBAAkB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE;YAC5F,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,cAAc;QACrB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,0DAA0D;IACxF,CAAC;IAED,SAAS,YAAY,CAAC,EAAU,EAAE,MAAc;QAC9C,IAAI,SAAS,KAAK,EAAE;YAAE,OAAO;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC;QAC3B,SAAS,GAAG,EAAE,CAAC;QACf,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,CAAC;QACb,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM,GAAG,KAAK,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,QAAQ,GAAG,EAAE,CAAC;QACd,eAAe,GAAG,KAAK,CAAC;QACxB,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,4BAA4B,EAAE,UAAU,MAAM,2BAA2B,CAAC,CAAC;YAC/E,IAAI,cAAc,EAAE,GAAG,CAAC;gBAAE,KAAK,KAAK,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;4EAGwE;IACxE,MAAM,YAAY,GAAgC,CAAC,KAAK,IAAI,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAkB,UAAU,EAAE;gBACzD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;aACxE,EAAE,MAAM,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,EAAE,CAAC;gBACP,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;;gBAAM,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,0BAA2B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,EAAE,CAAC;IAEL,4EAA4E;IAC5E,KAAK,UAAU,aAAa;QAC1B,OAAO,SAAS,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;+FAK2F;IAC3F,KAAK,UAAU,KAAK,CAAC,QAAiB;QACpC,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO;QAC5B,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,wDAAwD;YACzE,MAAM,KAAK,GAAqC,EAAE,CAAC;YACnD,IAAI,GAAG,GAAa,EAAE,CAAC;YACvB,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAC/B,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,GAAG;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;gBACtC,IAAI,KAAK;oBAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,IAAI,YAAY;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACnE,MAAM,IAAI,GAA6C,EAAE,KAAK,EAAE,CAAC;YACjE,+FAA+F;YAC/F,kGAAkG;YAClG,IAAI,CAAC,MAAM,IAAI,OAAO;gBAAE,IAAI,CAAC,MAAM,GAAG,GAAG,OAAO,OAAO,qBAAqB,EAAE,CAAC;YAC/E,IAAI,GAAG,IAAI,CAAC;YACZ,QAAQ,GAAG,GAAG,CAAC;YACf,2FAA2F;YAC3F,oFAAoF;YACpF,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM,WAAW,CAAC,YAAY,kBAAkB,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7H,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,GAAG,KAAK,CAAC;YACb,QAAQ,GAAG,EAAE,CAAC;YACd,eAAe,GAAG,KAAK,CAAC;YACxB,GAAG,CAAC,iBAAkB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;gFAI4E;IAC5E,SAAS,WAAW;QAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;;;;;4EAMwE;IACxE,SAAS,YAAY;QACnB,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,CAAC,0CAA0C;QACjF,IAAI,GAAG,KAAK,CAAC;QACb,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,GAAG,KAAK,CAAC;YACxB,WAAW,EAAE,CAAC,CAAC,8DAA8D;QAC/E,CAAC;QACD,IAAI,cAAc,EAAE,GAAG,CAAC;YAAE,KAAK,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,6FAA6F;IAC7F,kGAAkG;IAClG,qGAAqG;IACrG,mGAAmG;IACnG,wFAAwF;IACxF,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAe,EAAE,EAAE;QACvC,IAAI,IAAI;YAAE,OAAO,CAAC,0CAA0C;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;QACrF,IAAI,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC;YAAE,KAAK,KAAK,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAe,EAAE,EAAE;QAC3C,8FAA8F;QAC9F,IAAI,CAAC,IAAI;YAAE,KAAK,KAAK,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,GAAG,8BAA8B,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAI,CAAC,IAAI;YAAE,KAAK,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH;qGACiG;IACjG,MAAM,IAAI,GAAG,CAAC,EAAW,EAAW,EAAE;QACpC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,SAAS,CAAC,CAAC,oEAAoE;QAChG,IAAI,CAAC,SAAS;YAAE,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAChD,OAAO,EAAE,KAAK,SAAS,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,KAAK,GAAU;QACnB,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;QAEpC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACzB,2FAA2F;YAC3F,4FAA4F;YAC5F,0EAA0E;YAC1E,IAAK,KAAK,CAAC,IAAe,KAAK,kBAAkB,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,KAAK,CAAC,UAAoD,CAAC;gBACrE,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;oBAAE,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO;YACT,CAAC;YACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,iBAAiB;oBACpB,sFAAsF;oBACtF,kFAAkF;oBAClF,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ;wBAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;oBACxG,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;wBAAE,OAAO;oBAC9C,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBACzB,YAAY,EAAE,CAAC,CAAC,gEAAgE;oBAChF,MAAM;gBACR,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;wBAAE,OAAO;oBAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;oBAClC,qFAAqF;oBACrF,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACtB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC9B,CAAC;yBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC7B,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;yBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC9B,MAAM,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,eAAe;oBAClB,mFAAmF;oBACnF,qFAAqF;oBACrF,yFAAyF;oBACzF,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;wBAAE,OAAO;oBAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe;wBAAE,OAAO,CAAC,gCAAgC;oBACvE,IAAI,GAAG,KAAK,CAAC;oBACb,IAAI,eAAe,EAAE,CAAC;wBACpB,eAAe,GAAG,KAAK,CAAC;wBACxB,WAAW,EAAE,CAAC,CAAC,8EAA8E;oBAC/F,CAAC;oBACD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBACzB,IAAI,cAAc,EAAE,GAAG,CAAC;wBAAE,KAAK,KAAK,EAAE,CAAC;oBACvC,MAAM;gBACR,KAAK,iBAAiB;oBACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBAAE,OAAO;oBAC5C,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC5B,MAAM;YACV,CAAC;QACH,CAAC;QAED,mFAAmF;QACnF,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,OAAO;YACnC,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,aAAa,EAAE,KAAK,EAAE,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;IAEF,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC;IACnC,GAAG,CAAC,kCAAkC,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3H,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
package/dist/serve.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. poke it once so the lazily-loaded plugin initializes (joins the mesh, creates ONE session);
|
|
7
7
|
* 3. the plugin announces that session's id on stderr (`[cotal-session] <id>`);
|
|
8
8
|
* 4. launch a foreground `opencode attach <url> --session <id>` — the TUI opens straight onto the
|
|
9
|
-
* agent's session, and every turn the plugin drives
|
|
9
|
+
* agent's session, and every turn the plugin drives through this exact server renders live.
|
|
10
10
|
*
|
|
11
11
|
* The attach TUI is a pure viewer (it connects to the running server); its env strips the plugin
|
|
12
12
|
* config + COTAL_* so it never loads a *second* mesh endpoint.
|
|
@@ -22,8 +22,30 @@ import { createServer } from "node:net";
|
|
|
22
22
|
import { once } from "node:events";
|
|
23
23
|
import { randomBytes } from "node:crypto";
|
|
24
24
|
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
25
|
-
import { join } from "node:path";
|
|
26
|
-
|
|
25
|
+
import { delimiter, join } from "node:path";
|
|
26
|
+
/** The opencode binary to spawn. `COTAL_OPENCODE_BIN` overrides. On Windows, `opencode` on PATH is
|
|
27
|
+
* an npm `.cmd` shim that child_process can't spawn, and the real `opencode.exe` it wraps
|
|
28
|
+
* (`<bindir>/node_modules/opencode-ai/bin/opencode.exe`) isn't itself on PATH — resolve and spawn
|
|
29
|
+
* it directly, so there's no `cmd.exe` wrapper to orphan the server on kill. POSIX spawns the name
|
|
30
|
+
* as-is. Unresolved on Windows → returns the bare name so spawn fails with a clear ENOENT. */
|
|
31
|
+
function resolveOpencodeBin() {
|
|
32
|
+
const override = process.env.COTAL_OPENCODE_BIN?.trim();
|
|
33
|
+
if (override)
|
|
34
|
+
return override;
|
|
35
|
+
if (process.platform !== "win32")
|
|
36
|
+
return "opencode";
|
|
37
|
+
for (const dir of (process.env.PATH ?? "").split(delimiter)) {
|
|
38
|
+
if (!dir)
|
|
39
|
+
continue;
|
|
40
|
+
for (const exe of [join(dir, "opencode.exe"), join(dir, "node_modules", "opencode-ai", "bin", "opencode.exe")]) {
|
|
41
|
+
if (existsSync(exe))
|
|
42
|
+
return exe;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return "opencode";
|
|
46
|
+
}
|
|
47
|
+
const BIN = resolveOpencodeBin();
|
|
48
|
+
const USERNAME = "opencode";
|
|
27
49
|
/** Per-launch secret gating the spawned server's HTTP API (see SECURITY above). */
|
|
28
50
|
const SECRET = randomBytes(24).toString("hex");
|
|
29
51
|
/** Ask the OS for a free port (bind :0, read it, release) so co-located peers don't collide. */
|
|
@@ -82,7 +104,13 @@ async function main() {
|
|
|
82
104
|
}
|
|
83
105
|
mkdirSync(agentHome, { recursive: true });
|
|
84
106
|
const serve = spawn(BIN, ["serve", "--hostname", "127.0.0.1", "--port", port], {
|
|
85
|
-
env: {
|
|
107
|
+
env: {
|
|
108
|
+
...process.env,
|
|
109
|
+
COTAL_OPENCODE_SERVER_URL: url,
|
|
110
|
+
OPENCODE_SERVER_USERNAME: USERNAME,
|
|
111
|
+
OPENCODE_SERVER_PASSWORD: SECRET,
|
|
112
|
+
OPENCODE_DB: dbPath,
|
|
113
|
+
},
|
|
86
114
|
stdio: ["ignore", "pipe", "pipe"],
|
|
87
115
|
});
|
|
88
116
|
writeFileSync(pidFile, String(serve.pid));
|
|
@@ -115,7 +143,7 @@ async function main() {
|
|
|
115
143
|
// bootstrap that loads the plugin. Each poke carries its own abort timeout: a request that
|
|
116
144
|
// lands in the early-boot window can hang with no response, and an un-timed fetch would pin
|
|
117
145
|
// the loop on it forever (undici queues later requests behind it on the pooled connection).
|
|
118
|
-
const auth = `Basic ${Buffer.from(
|
|
146
|
+
const auth = `Basic ${Buffer.from(`${USERNAME}:${SECRET}`).toString("base64")}`;
|
|
119
147
|
void (async () => {
|
|
120
148
|
for (let i = 0; i < 300 && !sessionId; i++) {
|
|
121
149
|
try {
|
|
@@ -141,6 +169,7 @@ async function main() {
|
|
|
141
169
|
}
|
|
142
170
|
const tuiEnv = {
|
|
143
171
|
...process.env,
|
|
172
|
+
OPENCODE_SERVER_USERNAME: USERNAME,
|
|
144
173
|
OPENCODE_SERVER_PASSWORD: SECRET,
|
|
145
174
|
OPENCODE_DB: dbPath,
|
|
146
175
|
};
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cotal-ai/connector-opencode",
|
|
3
3
|
"description": "Cotal connector for OpenCode: a native in-process plugin that joins a session to the mesh.",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.2",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@cotal-ai/connector-core": "0.8.
|
|
21
|
+
"@cotal-ai/connector-core": "0.8.2"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"@cotal-ai/core": ">=0.1.0",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@opencode-ai/sdk": "^1.16.2",
|
|
31
31
|
"esbuild": "^0.28.0",
|
|
32
32
|
"tsx": "^4.22.4",
|
|
33
|
-
"@cotal-ai/core": "0.8.
|
|
33
|
+
"@cotal-ai/core": "0.8.2"
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"dist"
|