@cotal-ai/connector-opencode 0.8.2 → 0.9.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/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +11 -4
- package/dist/extension.js.map +1 -1
- package/dist/plugin.bundle.js +207 -31
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +93 -31
- package/dist/plugin.js.map +1 -1
- package/dist/serve.js +12 -15
- package/dist/serve.js.map +1 -1
- package/dist/transcript.d.ts +42 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +107 -0
- package/dist/transcript.js.map +1 -0
- package/package.json +3 -3
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,SA4G/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, controlEndpoint, MODEL_PROVIDER_KEYS } from "@cotal-ai/connector-core";
|
|
4
|
+
import { aclEnv, launchEnv, controlEndpoint, MODEL_PROVIDER_KEYS, transcriptChannel } 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
|
|
@@ -27,8 +27,16 @@ const SERVE_SHIM = fileURLToPath(new URL("./serve.js", import.meta.url));
|
|
|
27
27
|
export const opencodeConnector = {
|
|
28
28
|
kind: "connector",
|
|
29
29
|
name: "opencode",
|
|
30
|
+
transcriptChannel, // the shared `tr-<name>` convention (connector-core), exposed via the contract
|
|
30
31
|
requires: ["opencode"],
|
|
31
32
|
buildLaunch(opts) {
|
|
33
|
+
// Resuming an existing session isn't wired for opencode: the connector runs `opencode serve` +
|
|
34
|
+
// a plugin that CREATES its own session then attaches a TUI, so a fork must plumb into
|
|
35
|
+
// session-creation (SDK fork / the serve attach), not argv. Throw rather than spawn fresh
|
|
36
|
+
// silently (no fallbacks). Tracked as a follow-up (issue #154).
|
|
37
|
+
if (opts.resume)
|
|
38
|
+
throw new Error("opencode connector: resuming an existing session (resume) is not implemented — it needs " +
|
|
39
|
+
"session-creation plumbing (SDK fork), not an argv flag. Tracked in issue #154.");
|
|
32
40
|
// Tool-sharing isn't wired for opencode: its OPENCODE_CONFIG_CONTENT is a merge layer, so an
|
|
33
41
|
// opencode agent already INHERITS the operator's MCP servers (the opposite default to Claude's
|
|
34
42
|
// strict isolation). A `connectors.opencode.mcpServers` entry would need inverse (opt-OUT)
|
|
@@ -57,6 +65,8 @@ export const opencodeConnector = {
|
|
|
57
65
|
env.COTAL_CREDS = opts.creds;
|
|
58
66
|
if (opts.servers)
|
|
59
67
|
env.COTAL_SERVERS = opts.servers;
|
|
68
|
+
if (opts.transcript === true)
|
|
69
|
+
env.COTAL_TRANSCRIPT = "1"; // gate the plugin's transcript mirror (parity with Claude)
|
|
60
70
|
// Where serve.ts roots this agent's SQLite DB + serve pidfile. Pin it to the manager's
|
|
61
71
|
// workspace root so a per-agent launch cwd (which the manager can point at any repo) doesn't
|
|
62
72
|
// drop `.cotal/opencode/<name>` into the target tree. Standalone `cotal spawn` has no manager
|
|
@@ -89,9 +99,6 @@ export const opencodeConnector = {
|
|
|
89
99
|
env.COTAL_AGENT_FILE = path; // plugin reads persona from it
|
|
90
100
|
const def = loadAgentFile(path);
|
|
91
101
|
model ??= def.model;
|
|
92
|
-
const face = def.meta?.face;
|
|
93
|
-
if (face)
|
|
94
|
-
env.COTAL_FACE_PERSONA = face; // shim swaps the TUI for the face viewer
|
|
95
102
|
}
|
|
96
103
|
// The `--model` flag wins over the agent file, and applies even with no agent file. Pin it to a
|
|
97
104
|
// dedicated primary agent made the default, so an operator's own `default_agent` in
|
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,eAAe,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
|
@@ -17065,6 +17065,7 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
17065
17065
|
ttlMs;
|
|
17066
17066
|
doRegister;
|
|
17067
17067
|
doWatch;
|
|
17068
|
+
doWatchChannels;
|
|
17068
17069
|
doConsume;
|
|
17069
17070
|
ackWaitMs;
|
|
17070
17071
|
inactiveThresholdMs;
|
|
@@ -17180,6 +17181,7 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
17180
17181
|
this.ttlMs = opts.ttlMs ?? 6e3;
|
|
17181
17182
|
this.doRegister = opts.registerPresence ?? true;
|
|
17182
17183
|
this.doWatch = opts.watchPresence ?? true;
|
|
17184
|
+
this.doWatchChannels = opts.watchChannels ?? true;
|
|
17183
17185
|
this.doConsume = opts.consume ?? true;
|
|
17184
17186
|
this.channelModes = opts.channelModes && Object.keys(opts.channelModes).length ? opts.channelModes : void 0;
|
|
17185
17187
|
this.ackWaitMs = opts.ackWaitMs ?? 6e4;
|
|
@@ -17219,9 +17221,10 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
17219
17221
|
await this.startPresenceWatch();
|
|
17220
17222
|
this.sweepTimer = setInterval(() => this.sweep(), Math.max(500, Math.floor(this.ttlMs / 3)));
|
|
17221
17223
|
}
|
|
17222
|
-
|
|
17224
|
+
const watchChannels = this.doWatch && this.doWatchChannels;
|
|
17225
|
+
if (watchChannels || this.doConsume) {
|
|
17223
17226
|
this.channelKv = await openChannelRegistry(this.nc, this.space, { create: !this.creds });
|
|
17224
|
-
if (
|
|
17227
|
+
if (watchChannels)
|
|
17225
17228
|
await this.startChannelWatch();
|
|
17226
17229
|
}
|
|
17227
17230
|
if (this.doRegister) {
|
|
@@ -17512,8 +17515,10 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
17512
17515
|
* PEER's reply lane (`ctl.delivery.<victim>.reply.<n>`) and turn the responder into a confused
|
|
17513
17516
|
* deputy — the broker does NOT permission-check the requester's embedded reply subject. With it, a
|
|
17514
17517
|
* reply is published only when `m.reply` is under the AUTHENTICATED request subject
|
|
17515
|
-
* (`${m.subject}.reply.…`), binding the reply to the broker-policed sender token.
|
|
17516
|
-
* tiers
|
|
17518
|
+
* (`${m.subject}.reply.…`), binding the reply to the broker-policed sender token. The manager's three
|
|
17519
|
+
* lifecycle tiers ALSO require it as of closure (i): they reply on bounded `ctl.<tier>.<caller>.reply.…`
|
|
17520
|
+
* (the manager cred holds the wildcard `ctl.<tier>.*.reply.>` pub — exactly the confused-deputy
|
|
17521
|
+
* condition above), so do NOT drop `boundReply` on them. */
|
|
17517
17522
|
serveControl(service, handler, opts = {}) {
|
|
17518
17523
|
if (!this.nc)
|
|
17519
17524
|
throw new Error("endpoint not started");
|
|
@@ -17548,12 +17553,25 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
17548
17553
|
})().catch((e) => this.emit("error", e));
|
|
17549
17554
|
return sub;
|
|
17550
17555
|
}
|
|
17551
|
-
/** Send a control request to a service and await its reply (client side).
|
|
17556
|
+
/** Send a control request to a service and await its reply (client side). Like {@link requestDelivery},
|
|
17557
|
+
* the reply rides a BOUNDED subject UNDER the request subject (`ctl.<service>.<id>.reply.<uuid>`), not
|
|
17558
|
+
* the per-id `_INBOX` — closure (i): this frees the manager's permission set from needing a position-1
|
|
17559
|
+
* inbox wildcard, so its publish surface can be an exact self-scoped allow-list (no message forging).
|
|
17560
|
+
* `noMux` lets us name the reply subject while keeping NoResponders detection. The random suffix is
|
|
17561
|
+
* defense-in-depth (a predictable suffix would let a peer target an in-flight named reply sub). The
|
|
17562
|
+
* reply sits under the sender's OWN request subject, so the responder's `boundReply` guard accepts it.
|
|
17563
|
+
*
|
|
17564
|
+
* CUTOVER (not backward-compatible): an agent cred minted BEFORE closure (i) lacks the
|
|
17565
|
+
* `ctl.<tier>.<id>.reply.>` sub grant — it can still publish the request but cannot subscribe the
|
|
17566
|
+
* reply, so its control calls (spawn/despawn/purge/definePersona, self-stop) hang. The per-user-auth
|
|
17567
|
+
* atomic cutover re-mints every agent; if this change ships ahead of that, agents must be RESPAWNED. */
|
|
17552
17568
|
async requestControl(service, req, timeoutMs = 5e3) {
|
|
17553
17569
|
if (!this.nc)
|
|
17554
17570
|
throw new Error(this.notLiveMsg());
|
|
17571
|
+
const reqSubject = controlServiceSubject(this.space, service, this.card.id);
|
|
17572
|
+
const reply = `${reqSubject}.reply.${randomUUID()}`;
|
|
17555
17573
|
const body = { ...req, from: req.from ?? this.ref() };
|
|
17556
|
-
const m = await this.nc.request(
|
|
17574
|
+
const m = await this.nc.request(reqSubject, JSON.stringify(body), { timeout: timeoutMs, noMux: true, reply });
|
|
17557
17575
|
return m.json();
|
|
17558
17576
|
}
|
|
17559
17577
|
/** Send a durable-membership request to the SERVER-SIDE delivery daemon (`ctl.delivery`) and await its
|
|
@@ -18008,23 +18026,29 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
18008
18026
|
return void 0;
|
|
18009
18027
|
}
|
|
18010
18028
|
}
|
|
18011
|
-
/** Ensure + bind the manager singleton-lease bucket.
|
|
18012
|
-
*
|
|
18013
|
-
*
|
|
18014
|
-
*
|
|
18015
|
-
*
|
|
18016
|
-
*
|
|
18017
|
-
*
|
|
18029
|
+
/** Ensure + bind the manager singleton-lease bucket. Mirrors the presence-bucket pattern (connectAndBind):
|
|
18030
|
+
* AUTH mode OPENs the bucket pre-created at `cotal up` (the scoped `supervisor` cred holds no
|
|
18031
|
+
* STREAM.CREATE — and `open` binds direct=false, so the CAS-conflict `kv.get` inside `acquire` rides
|
|
18032
|
+
* STREAM.MSG.GET, the verb the supervisor grants, never DIRECT.GET). OPEN mode (no creds) create-firsts:
|
|
18033
|
+
* `Kvm.open` binds LAZILY — it does NOT verify the stream exists or throw when it's missing (a fresh
|
|
18034
|
+
* bucket then fails 'stream not found' on the first write), so `create` is the ensure-exists call (it
|
|
18035
|
+
* makes the bucket or, when another endpoint already did, throws and we bind the existing one). Either
|
|
18036
|
+
* way the per-KEY CAS create stays the only single-flight gate, so a lost bucket-create race never reads
|
|
18037
|
+
* as "lease held". */
|
|
18018
18038
|
async managerLeaseRegistry() {
|
|
18019
18039
|
if (!this.nc)
|
|
18020
18040
|
throw new Error("endpoint not started");
|
|
18021
18041
|
if (this.managerLeaseKv)
|
|
18022
18042
|
return this.managerLeaseKv;
|
|
18023
18043
|
const kvm = new import_kv7.Kvm(this.nc);
|
|
18024
|
-
|
|
18025
|
-
this.managerLeaseKv = await kvm.create(managerBucket(this.space), { ttl: MANAGER_LEASE_TTL_MS });
|
|
18026
|
-
} catch {
|
|
18044
|
+
if (this.creds) {
|
|
18027
18045
|
this.managerLeaseKv = await kvm.open(managerBucket(this.space));
|
|
18046
|
+
} else {
|
|
18047
|
+
try {
|
|
18048
|
+
this.managerLeaseKv = await kvm.create(managerBucket(this.space), { ttl: MANAGER_LEASE_TTL_MS });
|
|
18049
|
+
} catch {
|
|
18050
|
+
this.managerLeaseKv = await kvm.open(managerBucket(this.space));
|
|
18051
|
+
}
|
|
18028
18052
|
}
|
|
18029
18053
|
return this.managerLeaseKv;
|
|
18030
18054
|
}
|
|
@@ -19151,6 +19175,8 @@ var CotalEndpoint = class extends EventEmitter {
|
|
|
19151
19175
|
this.applyPresence(e.key, p);
|
|
19152
19176
|
}
|
|
19153
19177
|
applyPresence(id, raw) {
|
|
19178
|
+
if (raw.card?.id !== id)
|
|
19179
|
+
return;
|
|
19154
19180
|
const prev = this.roster.get(id);
|
|
19155
19181
|
const stale = Date.now() - raw.ts > this.ttlMs;
|
|
19156
19182
|
const p = stale || raw.status === "offline" ? this.toOffline(raw) : raw;
|
|
@@ -19326,7 +19352,7 @@ function configFromEnv(env = process.env) {
|
|
|
19326
19352
|
description: def?.description,
|
|
19327
19353
|
tags: def?.tags,
|
|
19328
19354
|
meta: def?.meta,
|
|
19329
|
-
capabilities: def?.capabilities,
|
|
19355
|
+
capabilities: splitList(env.COTAL_CAPABILITIES).length ? splitList(env.COTAL_CAPABILITIES) : def?.capabilities,
|
|
19330
19356
|
model: env.COTAL_MODEL?.trim() || def?.model || void 0,
|
|
19331
19357
|
servers: env.COTAL_SERVERS?.trim() || link?.servers || DEFAULT_SERVER,
|
|
19332
19358
|
subscribe: resolvedSubscribe,
|
|
@@ -19714,7 +19740,9 @@ var MeshAgent = class extends EventEmitter2 {
|
|
|
19714
19740
|
* the harness (default the manager's `cotal`/Claude), `opts.model` overrides the
|
|
19715
19741
|
* persona file's `model:`, and `opts.cwd` roots the new peer at a different folder/repo
|
|
19716
19742
|
* than the manager's workspace — the same knobs the operator's `cotal start` carries, so
|
|
19717
|
-
* the agent and operator spawn doors share one control-op contract.
|
|
19743
|
+
* the agent and operator spawn doors share one control-op contract. (Session `resume` is
|
|
19744
|
+
* intentionally NOT forwarded here: forking a host-local `~/.claude` transcript is an
|
|
19745
|
+
* operator-local intent, kept off the peer-facing spawn door — see #159.) */
|
|
19718
19746
|
async spawn(name, role, opts) {
|
|
19719
19747
|
this.assertConnected();
|
|
19720
19748
|
return this.ep.requestControl(CONTROL_PRIVILEGED, {
|
|
@@ -19894,6 +19922,11 @@ ${lines.join("\n")}`;
|
|
|
19894
19922
|
}
|
|
19895
19923
|
};
|
|
19896
19924
|
|
|
19925
|
+
// ../connector-core/dist/launch.js
|
|
19926
|
+
function transcriptChannel(name) {
|
|
19927
|
+
return `tr-${name.toLowerCase().replace(/[^a-z0-9_-]+/g, "-")}`;
|
|
19928
|
+
}
|
|
19929
|
+
|
|
19897
19930
|
// ../connector-core/dist/tool-specs.js
|
|
19898
19931
|
import { execFileSync } from "node:child_process";
|
|
19899
19932
|
|
|
@@ -34485,8 +34518,6 @@ function controlFailure(action, e) {
|
|
|
34485
34518
|
function statusGlyph(s) {
|
|
34486
34519
|
return s === "working" ? "\u25CF" : s === "waiting" ? "\u25D0" : s === "idle" ? "\u25CB" : "\xB7";
|
|
34487
34520
|
}
|
|
34488
|
-
var FACE_TAG_RE = /\[\[\s*face\s*:\s*[\w-]+\s*\]\]\s?/gi;
|
|
34489
|
-
var stripFaceTags = (text) => text.replace(FACE_TAG_RE, "");
|
|
34490
34521
|
var ATTENTION_DESC = {
|
|
34491
34522
|
open: "open \u2014 you receive everything; untagged channel chatter wakes you when idle",
|
|
34492
34523
|
dnd: "dnd \u2014 channel chatter no longer wakes you (it still arrives in your next turn); DMs, anycast, and @mentions still wake you",
|
|
@@ -34617,7 +34648,7 @@ ${all.map(fmtItem).join("\n")}`);
|
|
|
34617
34648
|
},
|
|
34618
34649
|
async run(agent, _config, { text: msg, channel, mentions }) {
|
|
34619
34650
|
try {
|
|
34620
|
-
const m = await agent.send(
|
|
34651
|
+
const m = await agent.send(msg, channel, mentions);
|
|
34621
34652
|
return ok(`Sent to #${m.channel}${m.mentions?.length ? ` (mentioned @${m.mentions.join(", @")})` : ""}.`);
|
|
34622
34653
|
} catch (e) {
|
|
34623
34654
|
return err(`Couldn't send: ${e.message}`);
|
|
@@ -34634,7 +34665,7 @@ ${all.map(fmtItem).join("\n")}`);
|
|
|
34634
34665
|
},
|
|
34635
34666
|
async run(agent, _config, { to, text: msg }) {
|
|
34636
34667
|
try {
|
|
34637
|
-
const { peer } = await agent.dm(to,
|
|
34668
|
+
const { peer } = await agent.dm(to, msg);
|
|
34638
34669
|
return ok(`DM sent to ${peer.card.name}.`);
|
|
34639
34670
|
} catch (e) {
|
|
34640
34671
|
if (e instanceof AmbiguousPeerError) {
|
|
@@ -34656,7 +34687,7 @@ ${who2}`);
|
|
|
34656
34687
|
},
|
|
34657
34688
|
async run(agent, _config, { role, text: msg }) {
|
|
34658
34689
|
try {
|
|
34659
|
-
await agent.anycast(role,
|
|
34690
|
+
await agent.anycast(role, msg);
|
|
34660
34691
|
return ok(`Sent to one @${role}.`);
|
|
34661
34692
|
} catch (e) {
|
|
34662
34693
|
return err(`Couldn't send: ${e.message}`);
|
|
@@ -34798,6 +34829,11 @@ ${info}${caught}`);
|
|
|
34798
34829
|
agent: external_exports.string().optional().describe("Optional harness the new peer runs on \u2014 the agent/connector type (claude, opencode, hermes), NOT the persona to spawn (that's `name`). Defaults to the manager's default (Claude)."),
|
|
34799
34830
|
model: external_exports.string().optional().describe("Optional model override (e.g. opus, sonnet) \u2014 wins over the persona file's model:."),
|
|
34800
34831
|
cwd: external_exports.string().optional().describe("Optional working directory to root the new peer at (e.g. a different repo). A relative path resolves against the manager's workspace; omitted \u2192 it shares the manager's workspace.")
|
|
34832
|
+
// NOTE: session `resume` is deliberately NOT exposed here. Forking a host-local `~/.claude`
|
|
34833
|
+
// transcript is an operator-local intent; letting a spawn-capable mesh PEER name a host
|
|
34834
|
+
// session id would expand `spawn` into host-transcript disclosure with no broker-enforced
|
|
34835
|
+
// boundary. Resume lives only on the operator CLI (`cotal spawn --resume` / `cotal start
|
|
34836
|
+
// --resume`); a peer-facing, capability-gated resume is deferred (see #159).
|
|
34801
34837
|
},
|
|
34802
34838
|
async run(agent, _config, { name, role, agent: agentType, model, cwd }) {
|
|
34803
34839
|
try {
|
|
@@ -35049,12 +35085,98 @@ function buildCotalTools(agent, config2) {
|
|
|
35049
35085
|
return tools;
|
|
35050
35086
|
}
|
|
35051
35087
|
|
|
35088
|
+
// src/transcript.ts
|
|
35089
|
+
var MAX_PREVIEW = 700;
|
|
35090
|
+
var MAX_CHUNK = 6e3;
|
|
35091
|
+
function truncate(s, max) {
|
|
35092
|
+
return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;
|
|
35093
|
+
}
|
|
35094
|
+
function salient(input) {
|
|
35095
|
+
const i = input ?? {};
|
|
35096
|
+
const v = i.command ?? i.filePath ?? i.file_path ?? i.path ?? i.url ?? i.pattern ?? i.description;
|
|
35097
|
+
const s = typeof v === "string" ? v : Object.keys(i).length ? JSON.stringify(i) : "";
|
|
35098
|
+
return s ? `: ${truncate(s, 300)}` : "";
|
|
35099
|
+
}
|
|
35100
|
+
function condensePart(part) {
|
|
35101
|
+
switch (part?.type) {
|
|
35102
|
+
case "text":
|
|
35103
|
+
if (part.synthetic || part.ignored || !part.text?.trim()) return [];
|
|
35104
|
+
return [part.text.trim()];
|
|
35105
|
+
// assistant text in FULL — chunkLines splits it across messages
|
|
35106
|
+
case "tool": {
|
|
35107
|
+
const head = `\u2692 ${part.tool}${salient(part.state?.input)}`;
|
|
35108
|
+
const status = part.state?.status;
|
|
35109
|
+
if (status === "completed")
|
|
35110
|
+
return [head, `\u2192 ${truncate(String(part.state.output ?? ""), MAX_PREVIEW) || "(no output)"}`];
|
|
35111
|
+
if (status === "error") return [head, `\u2192 ERROR: ${truncate(String(part.state.error ?? ""), MAX_PREVIEW)}`];
|
|
35112
|
+
return [head];
|
|
35113
|
+
}
|
|
35114
|
+
default:
|
|
35115
|
+
return [];
|
|
35116
|
+
}
|
|
35117
|
+
}
|
|
35118
|
+
function chunkLines(lines, max) {
|
|
35119
|
+
const chunks = [];
|
|
35120
|
+
let cur = "";
|
|
35121
|
+
for (const ln of lines) {
|
|
35122
|
+
if (ln.length > max) {
|
|
35123
|
+
if (cur) {
|
|
35124
|
+
chunks.push(cur);
|
|
35125
|
+
cur = "";
|
|
35126
|
+
}
|
|
35127
|
+
for (let i = 0; i < ln.length; i += max) chunks.push(ln.slice(i, i + max));
|
|
35128
|
+
continue;
|
|
35129
|
+
}
|
|
35130
|
+
if (cur && cur.length + ln.length + 1 > max) {
|
|
35131
|
+
chunks.push(cur);
|
|
35132
|
+
cur = "";
|
|
35133
|
+
}
|
|
35134
|
+
cur = cur ? `${cur}
|
|
35135
|
+
${ln}` : ln;
|
|
35136
|
+
}
|
|
35137
|
+
if (cur) chunks.push(cur);
|
|
35138
|
+
return chunks;
|
|
35139
|
+
}
|
|
35140
|
+
function createTranscriptMirror(agent, channel) {
|
|
35141
|
+
const assistantMsgs = /* @__PURE__ */ new Set();
|
|
35142
|
+
const condensed = /* @__PURE__ */ new Map();
|
|
35143
|
+
const clear = () => {
|
|
35144
|
+
condensed.clear();
|
|
35145
|
+
assistantMsgs.clear();
|
|
35146
|
+
};
|
|
35147
|
+
return {
|
|
35148
|
+
record(message) {
|
|
35149
|
+
const info = message?.info ?? message;
|
|
35150
|
+
if (info?.role === "assistant" && typeof info.id === "string") assistantMsgs.add(info.id);
|
|
35151
|
+
},
|
|
35152
|
+
observe(part) {
|
|
35153
|
+
if (!part?.id || typeof part.messageID !== "string") return;
|
|
35154
|
+
const key = `${part.messageID}:${part.id}`;
|
|
35155
|
+
const lines = condensePart(part);
|
|
35156
|
+
if (lines.length) condensed.set(key, { messageID: part.messageID, lines });
|
|
35157
|
+
else condensed.delete(key);
|
|
35158
|
+
},
|
|
35159
|
+
async flush() {
|
|
35160
|
+
const lines = [];
|
|
35161
|
+
for (const { messageID, lines: ls } of condensed.values())
|
|
35162
|
+
if (assistantMsgs.has(messageID)) lines.push(...ls);
|
|
35163
|
+
clear();
|
|
35164
|
+
for (const chunk of chunkLines(lines, MAX_CHUNK)) await agent.send(chunk, channel);
|
|
35165
|
+
},
|
|
35166
|
+
reset() {
|
|
35167
|
+
clear();
|
|
35168
|
+
}
|
|
35169
|
+
};
|
|
35170
|
+
}
|
|
35171
|
+
|
|
35052
35172
|
// src/plugin.ts
|
|
35053
35173
|
function log(msg) {
|
|
35054
35174
|
process.stderr.write(`[cotal-connector] ${msg}
|
|
35055
35175
|
`);
|
|
35056
35176
|
}
|
|
35057
35177
|
var guard = globalThis;
|
|
35178
|
+
var ERROR_RETRY_INITIAL_MS = 1e3;
|
|
35179
|
+
var ERROR_RETRY_MAX_MS = 3e4;
|
|
35058
35180
|
var cotal = async () => {
|
|
35059
35181
|
if (!hasIdentity()) {
|
|
35060
35182
|
log("no COTAL_NAME \u2014 not a managed session; staying off the mesh");
|
|
@@ -35085,9 +35207,7 @@ var cotal = async () => {
|
|
|
35085
35207
|
return await res.json();
|
|
35086
35208
|
}
|
|
35087
35209
|
const def = process.env.COTAL_AGENT_FILE?.trim() ? loadAgentFile(process.env.COTAL_AGENT_FILE.trim()) : void 0;
|
|
35088
|
-
const
|
|
35089
|
-
const persona = [def?.persona, facePrompt].filter(Boolean).join("\n\n") || void 0;
|
|
35090
|
-
const faceReminder = facePrompt ? "(avatar: begin your cotal_send/cotal_dm text with [[face:X]] \u2014 neutral|happy|sad|angry|surprised \u2014 and add another tag when your mood shifts)" : void 0;
|
|
35210
|
+
const persona = def?.persona || void 0;
|
|
35091
35211
|
let sessionID;
|
|
35092
35212
|
let busy = false;
|
|
35093
35213
|
let driving = false;
|
|
@@ -35095,6 +35215,9 @@ var cotal = async () => {
|
|
|
35095
35215
|
let briefed = false;
|
|
35096
35216
|
let surfaced = [];
|
|
35097
35217
|
let awaitingTurnEnd = false;
|
|
35218
|
+
let errorRetryTimer;
|
|
35219
|
+
let errorRetryMs = ERROR_RETRY_INITIAL_MS;
|
|
35220
|
+
const transcript = /^(1|true|yes|on)$/i.test(process.env.COTAL_TRANSCRIPT ?? "") ? createTranscriptMirror(agent, transcriptChannel(config2.name)) : void 0;
|
|
35098
35221
|
const safeStatus = async (status, activity) => {
|
|
35099
35222
|
try {
|
|
35100
35223
|
if (agent.connected) await agent.setStatus(status, activity);
|
|
@@ -35129,6 +35252,21 @@ var cotal = async () => {
|
|
|
35129
35252
|
function pendingForWake() {
|
|
35130
35253
|
return agent.pendingWake();
|
|
35131
35254
|
}
|
|
35255
|
+
function clearErrorRetry(resetDelay = false) {
|
|
35256
|
+
if (errorRetryTimer) clearTimeout(errorRetryTimer);
|
|
35257
|
+
errorRetryTimer = void 0;
|
|
35258
|
+
if (resetDelay) errorRetryMs = ERROR_RETRY_INITIAL_MS;
|
|
35259
|
+
}
|
|
35260
|
+
function scheduleErrorRetry() {
|
|
35261
|
+
if (errorRetryTimer || pendingForWake() === 0) return;
|
|
35262
|
+
const delay = errorRetryMs;
|
|
35263
|
+
errorRetryMs = Math.min(errorRetryMs * 2, ERROR_RETRY_MAX_MS);
|
|
35264
|
+
errorRetryTimer = setTimeout(() => {
|
|
35265
|
+
errorRetryTimer = void 0;
|
|
35266
|
+
if (!busy && pendingForWake() > 0) void drive();
|
|
35267
|
+
}, delay);
|
|
35268
|
+
errorRetryTimer.unref?.();
|
|
35269
|
+
}
|
|
35132
35270
|
function adoptSession(id, reason) {
|
|
35133
35271
|
if (sessionID === id) return;
|
|
35134
35272
|
const previous = sessionID;
|
|
@@ -35140,6 +35278,8 @@ var cotal = async () => {
|
|
|
35140
35278
|
briefed = false;
|
|
35141
35279
|
surfaced = [];
|
|
35142
35280
|
awaitingTurnEnd = false;
|
|
35281
|
+
clearErrorRetry(true);
|
|
35282
|
+
transcript?.reset();
|
|
35143
35283
|
if (previous) {
|
|
35144
35284
|
log(`adopted opencode session ${id} after ${reason}; mesh identity unchanged`);
|
|
35145
35285
|
if (pendingForWake() > 0) void drive();
|
|
@@ -35188,7 +35328,6 @@ var cotal = async () => {
|
|
|
35188
35328
|
if (brief) parts.unshift({ type: "text", text: brief });
|
|
35189
35329
|
}
|
|
35190
35330
|
if (parts.length === 0) return;
|
|
35191
|
-
if (faceReminder) parts.push({ type: "text", text: faceReminder });
|
|
35192
35331
|
const body = { parts };
|
|
35193
35332
|
if (!primed && persona) body.system = `${persona}
|
|
35194
35333
|
|
|
@@ -35203,6 +35342,7 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35203
35342
|
surfaced = [];
|
|
35204
35343
|
awaitingTurnEnd = false;
|
|
35205
35344
|
log(`drive failed: ${e.message}`);
|
|
35345
|
+
scheduleErrorRetry();
|
|
35206
35346
|
} finally {
|
|
35207
35347
|
driving = false;
|
|
35208
35348
|
}
|
|
@@ -35215,6 +35355,26 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35215
35355
|
if (n > 0) agent.drainInbox(n);
|
|
35216
35356
|
surfaced = [];
|
|
35217
35357
|
}
|
|
35358
|
+
function abandonSurfaced() {
|
|
35359
|
+
surfaced = [];
|
|
35360
|
+
}
|
|
35361
|
+
function injectIntoPrompt(output) {
|
|
35362
|
+
if (driving || awaitingTurnEnd) return;
|
|
35363
|
+
const items = agent.peekInbox();
|
|
35364
|
+
if (items.length === 0) return;
|
|
35365
|
+
const inj = formatInjection(items);
|
|
35366
|
+
if (!inj) return;
|
|
35367
|
+
const textPart = output.parts?.find(
|
|
35368
|
+
(p) => typeof p === "object" && p !== null && p.type === "text" && typeof p.text === "string"
|
|
35369
|
+
);
|
|
35370
|
+
if (!textPart) return;
|
|
35371
|
+
textPart.text = `${inj}
|
|
35372
|
+
|
|
35373
|
+
${textPart.text}`;
|
|
35374
|
+
surfaced = items.map((i) => i.id);
|
|
35375
|
+
awaitingTurnEnd = true;
|
|
35376
|
+
busy = true;
|
|
35377
|
+
}
|
|
35218
35378
|
function completeTurn() {
|
|
35219
35379
|
if (!busy && !awaitingTurnEnd) return;
|
|
35220
35380
|
busy = false;
|
|
@@ -35222,6 +35382,7 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35222
35382
|
awaitingTurnEnd = false;
|
|
35223
35383
|
ackSurfaced();
|
|
35224
35384
|
}
|
|
35385
|
+
clearErrorRetry(true);
|
|
35225
35386
|
if (pendingForWake() > 0) void drive();
|
|
35226
35387
|
}
|
|
35227
35388
|
agent.on("incoming", (item) => {
|
|
@@ -35243,6 +35404,10 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35243
35404
|
};
|
|
35244
35405
|
const hooks = {
|
|
35245
35406
|
tool: buildCotalTools(agent, config2),
|
|
35407
|
+
"chat.message": async (input, output) => {
|
|
35408
|
+
if (!ours(input.sessionID)) return;
|
|
35409
|
+
injectIntoPrompt(output);
|
|
35410
|
+
},
|
|
35246
35411
|
event: async ({ event }) => {
|
|
35247
35412
|
if (event.type === "permission.asked") {
|
|
35248
35413
|
const p = event.properties;
|
|
@@ -35253,11 +35418,21 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35253
35418
|
case "session.created":
|
|
35254
35419
|
if (!event.properties.info.parentID) adoptSession(event.properties.info.id, "top-level session create");
|
|
35255
35420
|
break;
|
|
35256
|
-
case "
|
|
35257
|
-
if (
|
|
35421
|
+
case "message.updated":
|
|
35422
|
+
if (transcript && ours(event.properties.info.sessionID)) transcript.record(event.properties.info);
|
|
35423
|
+
break;
|
|
35424
|
+
case "message.part.updated":
|
|
35425
|
+
if (transcript && ours(event.properties.part.sessionID)) transcript.observe(event.properties.part);
|
|
35426
|
+
break;
|
|
35427
|
+
case "session.idle": {
|
|
35428
|
+
const idleSession = event.properties.sessionID;
|
|
35429
|
+
if (!ours(idleSession)) return;
|
|
35258
35430
|
await safeStatus("idle");
|
|
35431
|
+
if (transcript)
|
|
35432
|
+
await transcript.flush().catch((e) => log(`transcript mirror publish failed: ${e.message}`));
|
|
35259
35433
|
completeTurn();
|
|
35260
35434
|
break;
|
|
35435
|
+
}
|
|
35261
35436
|
case "session.status": {
|
|
35262
35437
|
if (!ours(event.properties.sessionID)) return;
|
|
35263
35438
|
const s = event.properties.status;
|
|
@@ -35277,10 +35452,10 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35277
35452
|
busy = false;
|
|
35278
35453
|
if (awaitingTurnEnd) {
|
|
35279
35454
|
awaitingTurnEnd = false;
|
|
35280
|
-
|
|
35455
|
+
abandonSurfaced();
|
|
35281
35456
|
}
|
|
35282
35457
|
await safeStatus("idle");
|
|
35283
|
-
|
|
35458
|
+
scheduleErrorRetry();
|
|
35284
35459
|
break;
|
|
35285
35460
|
case "session.deleted":
|
|
35286
35461
|
if (!ours(event.properties.info.id)) return;
|
|
@@ -35299,6 +35474,7 @@ ${ORIENTATION_BOOTSTRAP}`;
|
|
|
35299
35474
|
} catch {
|
|
35300
35475
|
}
|
|
35301
35476
|
await safeStatus("offline");
|
|
35477
|
+
clearErrorRetry(true);
|
|
35302
35478
|
await agent.stop();
|
|
35303
35479
|
}
|
|
35304
35480
|
};
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAgBzD,eAAO,MAAM,KAAK,EAAE,MAmZnB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
* • maps OpenCode bus events to presence (idle | working | waiting | offline);
|
|
11
11
|
* • owns ONE session (created at boot) and drives it: it injects each inbox batch as a turn through
|
|
12
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* behavior), then drives.
|
|
13
|
+
* TURN COMPLETION (so a crash/error redelivers). Pending peer messages are also injected into
|
|
14
|
+
* the next native prompt creation when a human/API prompt starts in the attached session.
|
|
15
|
+
* Delivery is **attention-aware** (open/dnd/focus) and never interrupts a running turn.
|
|
17
16
|
*
|
|
18
17
|
* Identity comes from COTAL_* env (the plugin runs in the opencode process and inherits it).
|
|
19
18
|
* No identity → inert, so an operator's own `opencode` never joins as a stray peer.
|
|
20
19
|
*/
|
|
21
20
|
import { loadAgentFile } from "@cotal-ai/core";
|
|
22
|
-
import { configFromEnv, hasIdentity, MeshAgent, startControlServer, formatInjection, fmtFrom, ORIENTATION_BOOTSTRAP, } from "@cotal-ai/connector-core";
|
|
21
|
+
import { configFromEnv, hasIdentity, MeshAgent, startControlServer, formatInjection, fmtFrom, ORIENTATION_BOOTSTRAP, transcriptChannel, } from "@cotal-ai/connector-core";
|
|
23
22
|
import { buildCotalTools } from "./tools.js";
|
|
23
|
+
import { createTranscriptMirror } from "./transcript.js";
|
|
24
24
|
function log(msg) {
|
|
25
25
|
process.stderr.write(`[cotal-connector] ${msg}\n`);
|
|
26
26
|
}
|
|
@@ -29,6 +29,8 @@ 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
|
+
const ERROR_RETRY_INITIAL_MS = 1_000;
|
|
33
|
+
const ERROR_RETRY_MAX_MS = 30_000;
|
|
32
34
|
export const cotal = async () => {
|
|
33
35
|
// No identity → a plain `opencode`, not a launcher-spawned agent. Stay inert.
|
|
34
36
|
if (!hasIdentity()) {
|
|
@@ -64,24 +66,7 @@ export const cotal = async () => {
|
|
|
64
66
|
return (await res.json());
|
|
65
67
|
}
|
|
66
68
|
const def = process.env.COTAL_AGENT_FILE?.trim() ? loadAgentFile(process.env.COTAL_AGENT_FILE.trim()) : undefined;
|
|
67
|
-
|
|
68
|
-
// to steer its avatar's expression with inline [[face:X]] tags in the text it passes to the
|
|
69
|
-
// cotal send tools. The viewer reads them from the tool-call input; the tool layer strips them
|
|
70
|
-
// before the wire, so peers never see them.
|
|
71
|
-
const facePrompt = process.env.COTAL_FACE_PERSONA?.trim()
|
|
72
|
-
? "You speak through an animated pixel-art avatar of yourself. Hard formatting rule: the text " +
|
|
73
|
-
"you pass to the cotal send tools (cotal_send / cotal_dm) must START with an emotion tag " +
|
|
74
|
-
"[[face:X]], where X is one of: neutral, happy, sad, angry, surprised — pick the one matching " +
|
|
75
|
-
"your mood, and insert another tag mid-text whenever your mood shifts. Example: " +
|
|
76
|
-
'"[[face:angry]] That race condition cost me three days. [[face:happy]] But watch it run now." ' +
|
|
77
|
-
"Never mention or explain the tags — they are stripped before peers see your message."
|
|
78
|
-
: undefined;
|
|
79
|
-
const persona = [def?.persona, facePrompt].filter(Boolean).join("\n\n") || undefined;
|
|
80
|
-
// System-position rules get ignored by some models — repeat the format rule in every injected
|
|
81
|
-
// turn (a fresh user-turn instruction is followed far more reliably).
|
|
82
|
-
const faceReminder = facePrompt
|
|
83
|
-
? "(avatar: begin your cotal_send/cotal_dm text with [[face:X]] — neutral|happy|sad|angry|surprised — and add another tag when your mood shifts)"
|
|
84
|
-
: undefined;
|
|
69
|
+
const persona = def?.persona || undefined;
|
|
85
70
|
// This agent OWNS one top-level OpenCode session at a time. The serve shim attaches the foreground
|
|
86
71
|
// TUI to the boot session; if the human runs `/new` in that same TUI/process, OpenCode creates a
|
|
87
72
|
// replacement top-level session. We adopt that as a context reset while keeping the same MeshAgent
|
|
@@ -94,6 +79,16 @@ export const cotal = async () => {
|
|
|
94
79
|
let briefed = false; // the boot channel briefing is prepended once, on the first turn
|
|
95
80
|
let surfaced = []; // ids surfaced into the current turn, acked on completion (by id, not count)
|
|
96
81
|
let awaitingTurnEnd = false; // a turn is in flight → ignore a duplicate idle that isn't its end
|
|
82
|
+
let errorRetryTimer;
|
|
83
|
+
let errorRetryMs = ERROR_RETRY_INITIAL_MS;
|
|
84
|
+
// Transcript mirror → `tr-<name>`: opt-in via COTAL_TRANSCRIPT (the connector's buildLaunch / the
|
|
85
|
+
// manager set it for managed sessions; a personal opencode never mirrors). EVENT-DRIVEN — fed from
|
|
86
|
+
// the OpenCode event hook below (message.updated → assistant roles, message.part.updated → parts)
|
|
87
|
+
// and flushed at session.idle, so it never re-reads the whole session. The manager grants this agent
|
|
88
|
+
// pub rights on the same `tr-<name>` channel.
|
|
89
|
+
const transcript = /^(1|true|yes|on)$/i.test(process.env.COTAL_TRANSCRIPT ?? "")
|
|
90
|
+
? createTranscriptMirror(agent, transcriptChannel(config.name))
|
|
91
|
+
: undefined;
|
|
97
92
|
const safeStatus = async (status, activity) => {
|
|
98
93
|
try {
|
|
99
94
|
if (agent.connected)
|
|
@@ -143,6 +138,25 @@ export const cotal = async () => {
|
|
|
143
138
|
function pendingForWake() {
|
|
144
139
|
return agent.pendingWake(); // mode-and-channel-aware: excludes held dnd/quiet ambient
|
|
145
140
|
}
|
|
141
|
+
function clearErrorRetry(resetDelay = false) {
|
|
142
|
+
if (errorRetryTimer)
|
|
143
|
+
clearTimeout(errorRetryTimer);
|
|
144
|
+
errorRetryTimer = undefined;
|
|
145
|
+
if (resetDelay)
|
|
146
|
+
errorRetryMs = ERROR_RETRY_INITIAL_MS;
|
|
147
|
+
}
|
|
148
|
+
function scheduleErrorRetry() {
|
|
149
|
+
if (errorRetryTimer || pendingForWake() === 0)
|
|
150
|
+
return;
|
|
151
|
+
const delay = errorRetryMs;
|
|
152
|
+
errorRetryMs = Math.min(errorRetryMs * 2, ERROR_RETRY_MAX_MS);
|
|
153
|
+
errorRetryTimer = setTimeout(() => {
|
|
154
|
+
errorRetryTimer = undefined;
|
|
155
|
+
if (!busy && pendingForWake() > 0)
|
|
156
|
+
void drive();
|
|
157
|
+
}, delay);
|
|
158
|
+
errorRetryTimer.unref?.();
|
|
159
|
+
}
|
|
146
160
|
function adoptSession(id, reason) {
|
|
147
161
|
if (sessionID === id)
|
|
148
162
|
return;
|
|
@@ -155,6 +169,8 @@ export const cotal = async () => {
|
|
|
155
169
|
briefed = false;
|
|
156
170
|
surfaced = [];
|
|
157
171
|
awaitingTurnEnd = false;
|
|
172
|
+
clearErrorRetry(true);
|
|
173
|
+
transcript?.reset(); // hard session boundary: drop any buffered parts so `/new` never mirrors them
|
|
158
174
|
if (previous) {
|
|
159
175
|
log(`adopted opencode session ${id} after ${reason}; mesh identity unchanged`);
|
|
160
176
|
if (pendingForWake() > 0)
|
|
@@ -224,8 +240,6 @@ export const cotal = async () => {
|
|
|
224
240
|
}
|
|
225
241
|
if (parts.length === 0)
|
|
226
242
|
return;
|
|
227
|
-
if (faceReminder)
|
|
228
|
-
parts.push({ type: "text", text: faceReminder });
|
|
229
243
|
const body = { parts };
|
|
230
244
|
// persona once, as system (no --append-system-prompt). Append the orientation bootstrap so the
|
|
231
245
|
// agent is told to orient first — gated on persona so we never replace OpenCode's default system.
|
|
@@ -244,6 +258,7 @@ export const cotal = async () => {
|
|
|
244
258
|
surfaced = [];
|
|
245
259
|
awaitingTurnEnd = false;
|
|
246
260
|
log(`drive failed: ${e.message}`);
|
|
261
|
+
scheduleErrorRetry();
|
|
247
262
|
}
|
|
248
263
|
finally {
|
|
249
264
|
driving = false;
|
|
@@ -265,6 +280,30 @@ export const cotal = async () => {
|
|
|
265
280
|
agent.drainInbox(n);
|
|
266
281
|
surfaced = [];
|
|
267
282
|
}
|
|
283
|
+
function abandonSurfaced() {
|
|
284
|
+
surfaced = [];
|
|
285
|
+
}
|
|
286
|
+
/** Native TUI / API prompts enter through OpenCode's chat.message hook before the model loop
|
|
287
|
+
* starts. This is the real "next turn" boundary for human-typed input: prepend the buffered Cotal
|
|
288
|
+
* batch to the user's text, then ack it when the resulting turn ends. We only mutate an existing
|
|
289
|
+
* text part so we don't need to manufacture OpenCode's internal part IDs. */
|
|
290
|
+
function injectIntoPrompt(output) {
|
|
291
|
+
if (driving || awaitingTurnEnd)
|
|
292
|
+
return; // drive() already injected, or one surfaced batch is open
|
|
293
|
+
const items = agent.peekInbox();
|
|
294
|
+
if (items.length === 0)
|
|
295
|
+
return;
|
|
296
|
+
const inj = formatInjection(items);
|
|
297
|
+
if (!inj)
|
|
298
|
+
return;
|
|
299
|
+
const textPart = output.parts?.find((p) => typeof p === "object" && p !== null && p.type === "text" && typeof p.text === "string");
|
|
300
|
+
if (!textPart)
|
|
301
|
+
return;
|
|
302
|
+
textPart.text = `${inj}\n\n${textPart.text}`;
|
|
303
|
+
surfaced = items.map((i) => i.id);
|
|
304
|
+
awaitingTurnEnd = true;
|
|
305
|
+
busy = true;
|
|
306
|
+
}
|
|
268
307
|
/** A turn ended — ANY turn, ours (a driven inbox batch) OR the human's (typing into the attached
|
|
269
308
|
* TUI, a `/reconnect`, etc). Clear `busy` regardless of who drove it: it's the COALESCE guard, so
|
|
270
309
|
* a turn the connector didn't drive must still release it or every later push wedges behind a
|
|
@@ -280,6 +319,7 @@ export const cotal = async () => {
|
|
|
280
319
|
awaitingTurnEnd = false;
|
|
281
320
|
ackSurfaced(); // our driven turn: ack the surfaced batch (the sole ack site)
|
|
282
321
|
}
|
|
322
|
+
clearErrorRetry(true);
|
|
283
323
|
if (pendingForWake() > 0)
|
|
284
324
|
void drive();
|
|
285
325
|
}
|
|
@@ -290,7 +330,7 @@ export const cotal = async () => {
|
|
|
290
330
|
// (ack-dropped at ingest); in `focus`, ambient/@mentions never reach "incoming" either.
|
|
291
331
|
agent.on("incoming", (item) => {
|
|
292
332
|
if (busy)
|
|
293
|
-
return; // buffer; completeTurn drives at
|
|
333
|
+
return; // buffer; chat.message or completeTurn drives at the next safe boundary
|
|
294
334
|
const directed = item.kind !== "channel" || item.mentionsMe;
|
|
295
335
|
const quiet = item.kind === "channel" && agent.channelMode(item.channel) === "quiet";
|
|
296
336
|
if (directed || (!quiet && agent.attention === "open"))
|
|
@@ -316,6 +356,11 @@ export const cotal = async () => {
|
|
|
316
356
|
};
|
|
317
357
|
const hooks = {
|
|
318
358
|
tool: buildCotalTools(agent, config),
|
|
359
|
+
"chat.message": async (input, output) => {
|
|
360
|
+
if (!ours(input.sessionID))
|
|
361
|
+
return;
|
|
362
|
+
injectIntoPrompt(output);
|
|
363
|
+
},
|
|
319
364
|
event: async ({ event }) => {
|
|
320
365
|
// The server emits `permission.asked` (the SDK's `permission.updated` type ships but never
|
|
321
366
|
// fires — #11616), so match the real runtime name out of band. With permission:"allow" this
|
|
@@ -333,12 +378,29 @@ export const cotal = async () => {
|
|
|
333
378
|
if (!event.properties.info.parentID)
|
|
334
379
|
adoptSession(event.properties.info.id, "top-level session create");
|
|
335
380
|
break;
|
|
336
|
-
case "
|
|
337
|
-
|
|
381
|
+
case "message.updated":
|
|
382
|
+
// Feed the transcript mirror: which messages on OUR session are assistant-authored.
|
|
383
|
+
if (transcript && ours(event.properties.info.sessionID))
|
|
384
|
+
transcript.record(event.properties.info);
|
|
385
|
+
break;
|
|
386
|
+
case "message.part.updated":
|
|
387
|
+
// Feed the transcript mirror: buffer each part as it streams (no per-turn refetch).
|
|
388
|
+
if (transcript && ours(event.properties.part.sessionID))
|
|
389
|
+
transcript.observe(event.properties.part);
|
|
390
|
+
break;
|
|
391
|
+
case "session.idle": {
|
|
392
|
+
const idleSession = event.properties.sessionID;
|
|
393
|
+
if (!ours(idleSession))
|
|
338
394
|
return;
|
|
339
395
|
await safeStatus("idle");
|
|
396
|
+
// Publish what the agent did this turn BEFORE driving the next batch, so a fresh turn's parts
|
|
397
|
+
// don't bleed in. The mirror is an observability side-channel: surface a publish failure but
|
|
398
|
+
// keep it OFF the turn loop, so a transport hiccup can never wedge the agent.
|
|
399
|
+
if (transcript)
|
|
400
|
+
await transcript.flush().catch((e) => log(`transcript mirror publish failed: ${e.message}`));
|
|
340
401
|
completeTurn(); // the sole turn-end site: ack-on-surface + drive the next batch
|
|
341
402
|
break;
|
|
403
|
+
}
|
|
342
404
|
case "session.status": {
|
|
343
405
|
if (!ours(event.properties.sessionID))
|
|
344
406
|
return;
|
|
@@ -367,11 +429,10 @@ export const cotal = async () => {
|
|
|
367
429
|
busy = false;
|
|
368
430
|
if (awaitingTurnEnd) {
|
|
369
431
|
awaitingTurnEnd = false;
|
|
370
|
-
|
|
432
|
+
abandonSurfaced(); // failed turn: leave inbox unacked so the batch can retry on a later safe turn
|
|
371
433
|
}
|
|
372
434
|
await safeStatus("idle");
|
|
373
|
-
|
|
374
|
-
void drive();
|
|
435
|
+
scheduleErrorRetry();
|
|
375
436
|
break;
|
|
376
437
|
case "session.deleted":
|
|
377
438
|
if (!ours(event.properties.info.id))
|
|
@@ -394,6 +455,7 @@ export const cotal = async () => {
|
|
|
394
455
|
/* ignore */
|
|
395
456
|
}
|
|
396
457
|
await safeStatus("offline");
|
|
458
|
+
clearErrorRetry(true);
|
|
397
459
|
await agent.stop();
|
|
398
460
|
},
|
|
399
461
|
};
|
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":"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"}
|
package/dist/serve.js
CHANGED
|
@@ -167,6 +167,17 @@ async function main() {
|
|
|
167
167
|
await killServe(serve);
|
|
168
168
|
process.exit(1);
|
|
169
169
|
}
|
|
170
|
+
// Headless mode (COTAL_SERVE_HEADLESS=1): no foreground TUI. Hand the running server back to a
|
|
171
|
+
// non-terminal host (a web studio, an automated harness) via one machine-readable handshake line
|
|
172
|
+
// on stdout, then keep the serve alive. The host drives the session over HTTP (basic auth with the
|
|
173
|
+
// password below) and tails its event stream. `attached` stays false, so the `serve.on("exit")`
|
|
174
|
+
// handler above still exits us if the server dies; SIGTERM tears the server down for real.
|
|
175
|
+
if (process.env.COTAL_SERVE_HEADLESS?.trim() === "1") {
|
|
176
|
+
process.stdout.write(`[cotal-serve] ${JSON.stringify({ port: Number(port), session: id, password: SECRET })}\n`);
|
|
177
|
+
for (const sig of ["SIGINT", "SIGTERM"])
|
|
178
|
+
process.on(sig, () => void killServe(serve).then(() => process.exit(0)));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
170
181
|
const tuiEnv = {
|
|
171
182
|
...process.env,
|
|
172
183
|
OPENCODE_SERVER_USERNAME: USERNAME,
|
|
@@ -178,21 +189,7 @@ async function main() {
|
|
|
178
189
|
if (k.startsWith("COTAL_"))
|
|
179
190
|
delete tuiEnv[k];
|
|
180
191
|
attached = true;
|
|
181
|
-
|
|
182
|
-
// face viewer (face-term). COTAL_FACE_BIN must point at face-term.mjs — no fallback.
|
|
183
|
-
const facePersona = process.env.COTAL_FACE_PERSONA?.trim();
|
|
184
|
-
const faceBin = process.env.COTAL_FACE_BIN?.trim();
|
|
185
|
-
if (facePersona && !faceBin) {
|
|
186
|
-
await killServe(serve); // don't orphan the server — it holds the agent's data dir
|
|
187
|
-
throw new Error("COTAL_FACE_PERSONA is set but COTAL_FACE_BIN is not — point it at face-term.mjs");
|
|
188
|
-
}
|
|
189
|
-
const [cmd, args] = facePersona
|
|
190
|
-
? [
|
|
191
|
-
process.execPath,
|
|
192
|
-
[faceBin, "--persona", facePersona, "--server", url, "--session", id, "--password", SECRET],
|
|
193
|
-
]
|
|
194
|
-
: [BIN, ["attach", url, "--session", id, "--password", SECRET]];
|
|
195
|
-
const tui = spawn(cmd, args, {
|
|
192
|
+
const tui = spawn(BIN, ["attach", url, "--session", id, "--password", SECRET], {
|
|
196
193
|
env: tuiEnv,
|
|
197
194
|
stdio: "inherit",
|
|
198
195
|
});
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode transcript mirror — publishes the agent's OWN session output to the per-agent `tr-<name>`
|
|
3
|
+
* channel (assistant text in full, tool calls as one-liners, tool results truncated, reasoning
|
|
4
|
+
* omitted) so observers can read what an OpenCode agent ACTUALLY did — not only what it narrates on
|
|
5
|
+
* the work channels (the Claude connector has had this; OpenCode did not).
|
|
6
|
+
*
|
|
7
|
+
* EVENT-DRIVEN, not poll-based. The connector plugin already receives OpenCode's bus events
|
|
8
|
+
* in-process, so the mirror taps them (the same live stream a UI can proxy to a browser, instead of
|
|
9
|
+
* re-reading the session each frame):
|
|
10
|
+
* • record(msg) ← message.updated: learn which messageIDs are ASSISTANT (mirror the agent's
|
|
11
|
+
* own output, never the injected user/peer turns).
|
|
12
|
+
* • observe(part) ← message.part.updated: condense the part NOW and buffer its lines (tool results
|
|
13
|
+
* truncated to a preview, assistant text kept in full;
|
|
14
|
+
* keyed by `${messageID}:${partID}`, replaced as it streams).
|
|
15
|
+
* • flush() ← session.idle: publish the turn's settled assistant lines, then clear.
|
|
16
|
+
* • reset() ← session adoption: drop the buffer at a hard boundary (`/new`).
|
|
17
|
+
* Cost is O(parts-this-turn) with NO HTTP — unlike a fetch-the-whole-session-every-idle poll, which is
|
|
18
|
+
* O(N²) and grows unboundedly over a long session. flush() snapshots the turn's lines and clears before
|
|
19
|
+
* it publishes, so a duplicate/late session.idle can't republish the batch.
|
|
20
|
+
*
|
|
21
|
+
* Each turn's lines are published ONCE to the channel; DURABLE delivery (persistence, replay to offline
|
|
22
|
+
* readers) is the channel's job — a durable `tr-<name>` is JetStream-backed — not a hand-rolled retry
|
|
23
|
+
* buffer here. This mirror is therefore best-effort at the publish boundary: the plugin runs flush() on
|
|
24
|
+
* the turn-end path and keeps a transport error OFF the turn loop by logging it (so a failed publish can
|
|
25
|
+
* never wedge the agent) — which means a publish that fails outright drops THAT turn's lines. That is
|
|
26
|
+
* the deliberate tradeoff for an opt-in observability side-channel; it is logged, never silent.
|
|
27
|
+
*/
|
|
28
|
+
import type { MeshAgent } from "@cotal-ai/connector-core";
|
|
29
|
+
export interface TranscriptMirror {
|
|
30
|
+
/** message.updated → remember which messageIDs are assistant-authored (this turn). */
|
|
31
|
+
record(message: any): void;
|
|
32
|
+
/** message.part.updated → condense the part and buffer its lines (tool results truncated, assistant
|
|
33
|
+
* text kept full; keyed by `${messageID}:${partID}`, this turn). */
|
|
34
|
+
observe(part: any): void;
|
|
35
|
+
/** session.idle → publish the turn's settled assistant lines to the channel, then clear. */
|
|
36
|
+
flush(): Promise<void>;
|
|
37
|
+
/** session adoption (`/new`) → drop the buffer so a new session never inherits stale parts. */
|
|
38
|
+
reset(): void;
|
|
39
|
+
}
|
|
40
|
+
/** An event-driven mirror to `channel`, fed from the plugin's OpenCode event hook. */
|
|
41
|
+
export declare function createTranscriptMirror(agent: MeshAgent, channel: string): TranscriptMirror;
|
|
42
|
+
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA8D1D,MAAM,WAAW,gBAAgB;IAC/B,sFAAsF;IACtF,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B;yEACqE;IACrE,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,4FAA4F;IAC5F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+FAA+F;IAC/F,KAAK,IAAI,IAAI,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAyC1F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const MAX_PREVIEW = 700; // tool results — enough to see what happened
|
|
2
|
+
const MAX_CHUNK = 6000; // chars per published message
|
|
3
|
+
function truncate(s, max) {
|
|
4
|
+
return s.length > max ? `${s.slice(0, max - 1)}…` : s;
|
|
5
|
+
}
|
|
6
|
+
/** A tool call's most salient input — mirrors the Claude connector's `salient`. */
|
|
7
|
+
function salient(input) {
|
|
8
|
+
const i = (input ?? {});
|
|
9
|
+
const v = i.command ?? i.filePath ?? i.file_path ?? i.path ?? i.url ?? i.pattern ?? i.description;
|
|
10
|
+
const s = typeof v === "string" ? v : Object.keys(i).length ? JSON.stringify(i) : "";
|
|
11
|
+
return s ? `: ${truncate(s, 300)}` : "";
|
|
12
|
+
}
|
|
13
|
+
/** One OpenCode message Part → the line(s) worth mirroring (empty for reasoning/file/step/etc). */
|
|
14
|
+
function condensePart(part) {
|
|
15
|
+
switch (part?.type) {
|
|
16
|
+
case "text":
|
|
17
|
+
if (part.synthetic || part.ignored || !part.text?.trim())
|
|
18
|
+
return [];
|
|
19
|
+
return [part.text.trim()]; // assistant text in FULL — chunkLines splits it across messages
|
|
20
|
+
case "tool": {
|
|
21
|
+
const head = `⚒ ${part.tool}${salient(part.state?.input)}`;
|
|
22
|
+
const status = part.state?.status;
|
|
23
|
+
if (status === "completed")
|
|
24
|
+
return [head, `→ ${truncate(String(part.state.output ?? ""), MAX_PREVIEW) || "(no output)"}`];
|
|
25
|
+
if (status === "error")
|
|
26
|
+
return [head, `→ ERROR: ${truncate(String(part.state.error ?? ""), MAX_PREVIEW)}`];
|
|
27
|
+
return [head];
|
|
28
|
+
}
|
|
29
|
+
default:
|
|
30
|
+
return []; // reasoning (thinking) omitted; file/step/snapshot/patch skipped
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Batch lines into wire-sized chunks, splitting on line boundaries — and hard-splitting any single
|
|
34
|
+
* line longer than `max` (e.g. a long assistant answer/code block) so full text is preserved across
|
|
35
|
+
* messages rather than truncated. */
|
|
36
|
+
function chunkLines(lines, max) {
|
|
37
|
+
const chunks = [];
|
|
38
|
+
let cur = "";
|
|
39
|
+
for (const ln of lines) {
|
|
40
|
+
if (ln.length > max) {
|
|
41
|
+
if (cur) {
|
|
42
|
+
chunks.push(cur);
|
|
43
|
+
cur = "";
|
|
44
|
+
}
|
|
45
|
+
for (let i = 0; i < ln.length; i += max)
|
|
46
|
+
chunks.push(ln.slice(i, i + max));
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (cur && cur.length + ln.length + 1 > max) {
|
|
50
|
+
chunks.push(cur);
|
|
51
|
+
cur = "";
|
|
52
|
+
}
|
|
53
|
+
cur = cur ? `${cur}\n${ln}` : ln;
|
|
54
|
+
}
|
|
55
|
+
if (cur)
|
|
56
|
+
chunks.push(cur);
|
|
57
|
+
return chunks;
|
|
58
|
+
}
|
|
59
|
+
/** An event-driven mirror to `channel`, fed from the plugin's OpenCode event hook. */
|
|
60
|
+
export function createTranscriptMirror(agent, channel) {
|
|
61
|
+
// One turn's worth, cleared every flush. `condensed` keeps each part's already-condensed lines (not
|
|
62
|
+
// the raw part) — tool results truncated to a preview, assistant text kept in full — so noisy tool
|
|
63
|
+
// output never sits in memory at full size. Map insertion order preserves emission order (a later
|
|
64
|
+
// .updated replaces the value, keeping its slot).
|
|
65
|
+
const assistantMsgs = new Set(); // messageIDs whose role is "assistant"
|
|
66
|
+
// Keyed by `${messageID}:${partID}` (NOT partID alone): OpenCode part ids are message-scoped, so a
|
|
67
|
+
// multi-message turn could otherwise collide two parts on the same id and drop output.
|
|
68
|
+
const condensed = new Map();
|
|
69
|
+
const clear = () => {
|
|
70
|
+
condensed.clear();
|
|
71
|
+
assistantMsgs.clear();
|
|
72
|
+
};
|
|
73
|
+
return {
|
|
74
|
+
record(message) {
|
|
75
|
+
const info = message?.info ?? message;
|
|
76
|
+
if (info?.role === "assistant" && typeof info.id === "string")
|
|
77
|
+
assistantMsgs.add(info.id);
|
|
78
|
+
},
|
|
79
|
+
observe(part) {
|
|
80
|
+
if (!part?.id || typeof part.messageID !== "string")
|
|
81
|
+
return;
|
|
82
|
+
const key = `${part.messageID}:${part.id}`;
|
|
83
|
+
const lines = condensePart(part); // condense NOW (tool results truncated) → assistant text kept full
|
|
84
|
+
if (lines.length)
|
|
85
|
+
condensed.set(key, { messageID: part.messageID, lines });
|
|
86
|
+
else
|
|
87
|
+
condensed.delete(key); // a part that condensed to nothing (e.g. reasoning) holds no slot
|
|
88
|
+
},
|
|
89
|
+
async flush() {
|
|
90
|
+
// Collect this turn's assistant lines and clear — each turn's output is published ONCE, then
|
|
91
|
+
// forgotten. Snapshot-then-clear before the await means a duplicate/late session.idle finds an
|
|
92
|
+
// empty buffer and can't republish. Delivery reliability is the CHANNEL's job (NATS/JetStream),
|
|
93
|
+
// not a hand-rolled retry buffer here.
|
|
94
|
+
const lines = [];
|
|
95
|
+
for (const { messageID, lines: ls } of condensed.values())
|
|
96
|
+
if (assistantMsgs.has(messageID))
|
|
97
|
+
lines.push(...ls); // the agent's OWN output, not injected turns
|
|
98
|
+
clear();
|
|
99
|
+
for (const chunk of chunkLines(lines, MAX_CHUNK))
|
|
100
|
+
await agent.send(chunk, channel);
|
|
101
|
+
},
|
|
102
|
+
reset() {
|
|
103
|
+
clear();
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.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.
|
|
4
|
+
"version": "0.9.0",
|
|
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.
|
|
21
|
+
"@cotal-ai/connector-core": "0.9.0"
|
|
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.
|
|
33
|
+
"@cotal-ai/core": "0.9.0"
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"dist"
|