@cotal-ai/connector-core 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/agent.d.ts +82 -18
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +247 -43
- package/dist/agent.js.map +1 -1
- package/dist/config.d.ts +42 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +53 -10
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/launch.d.ts +39 -0
- package/dist/launch.d.ts.map +1 -0
- package/dist/launch.js +93 -0
- package/dist/launch.js.map +1 -0
- package/dist/tool-specs.d.ts.map +1 -1
- package/dist/tool-specs.js +137 -53
- package/dist/tool-specs.js.map +1 -1
- package/package.json +3 -2
package/dist/agent.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import { normalizeMentions, subjectMatches, isConcreteChannel, CotalEndpoint, } from "@cotal-ai/core";
|
|
2
|
+
import { normalizeMentions, subjectMatches, isConcreteChannel, channelInAllow, resolvePeer as resolvePeerInRoster, CotalEndpoint, CONTROL_PRIVILEGED, CONTROL_SELF_SERVICE, } from "@cotal-ai/core";
|
|
3
|
+
/** The display-only `AgentCard.meta` for a session. Agent-file metadata is preserved, then
|
|
4
|
+
* connector-owned fields are overlaid so files cannot spoof the hosting harness. */
|
|
5
|
+
function buildMeta(config) {
|
|
6
|
+
const meta = { ...(config.meta ?? {}) };
|
|
7
|
+
if (config.model)
|
|
8
|
+
meta.model = config.model;
|
|
9
|
+
if (config.connector)
|
|
10
|
+
meta.connector = config.connector;
|
|
11
|
+
return Object.keys(meta).length ? meta : undefined;
|
|
12
|
+
}
|
|
3
13
|
const MAX_INBOX = 200;
|
|
4
14
|
function sleep(ms) {
|
|
5
15
|
return new Promise((r) => setTimeout(r, ms));
|
|
@@ -23,9 +33,24 @@ export class MeshAgent extends EventEmitter {
|
|
|
23
33
|
ep;
|
|
24
34
|
config;
|
|
25
35
|
inbox = [];
|
|
36
|
+
/** Ids already SURFACED to the model (handled) — bounded, commit-aware dedup ACROSS a drain. The
|
|
37
|
+
* live↔durable transition window can deliver the two copies of one message far enough apart that the
|
|
38
|
+
* first is already drained (removed from {@link inbox}) when the second arrives; the pending-inbox
|
|
39
|
+
* check alone would then re-buffer and double-surface it. Recorded at HANDLE time ({@link drainInbox}),
|
|
40
|
+
* never at receive time — so a later durable duplicate of an already-handled id is safe to ack (the
|
|
41
|
+
* logical message was delivered), which is exactly what the removed endpoint-level `firstSeenChat`
|
|
42
|
+
* got wrong (it acked at receive time, before handling). Two rotating windows bound memory. */
|
|
43
|
+
handledIds = new Set();
|
|
44
|
+
handledIdsPrev = new Set();
|
|
26
45
|
_connected = false;
|
|
27
46
|
_status = "idle";
|
|
28
47
|
_attention = "open"; // F3: fail-open default; reset to open on SessionStart
|
|
48
|
+
/** Per-channel attention overrides — the AUTHORITATIVE runtime state (read by {@link ingest} on
|
|
49
|
+
* every message). Seeded from the agent-file default; mutated by {@link setChannelMode}; mirrored
|
|
50
|
+
* to presence for peers. An absent key ⇒ that channel follows the global {@link _attention}. Reset
|
|
51
|
+
* on restart (rebuilt from config; presence sweep clears the mirror). */
|
|
52
|
+
channelModes = new Map();
|
|
53
|
+
_contextId;
|
|
29
54
|
/** Chat-stream frontier captured when this agent entered `focus` — recall surfaces ambient
|
|
30
55
|
* published after it ("since you entered focus"). Undefined unless in focus. */
|
|
31
56
|
focusSince;
|
|
@@ -33,6 +58,12 @@ export class MeshAgent extends EventEmitter {
|
|
|
33
58
|
constructor(config) {
|
|
34
59
|
super();
|
|
35
60
|
this.config = config;
|
|
61
|
+
// Seed per-channel attention from the operator's file default (one-way: the runtime never writes
|
|
62
|
+
// back — the persona file is a shared template). muted/quiet are validated disjoint at file load.
|
|
63
|
+
for (const c of config.quiet ?? [])
|
|
64
|
+
this.channelModes.set(c, "quiet");
|
|
65
|
+
for (const c of config.muted ?? [])
|
|
66
|
+
this.channelModes.set(c, "muted");
|
|
36
67
|
this.ep = new CotalEndpoint({
|
|
37
68
|
space: config.space,
|
|
38
69
|
servers: config.servers,
|
|
@@ -41,7 +72,9 @@ export class MeshAgent extends EventEmitter {
|
|
|
41
72
|
pass: config.pass,
|
|
42
73
|
creds: config.creds,
|
|
43
74
|
tls: config.tls,
|
|
44
|
-
|
|
75
|
+
ackWaitMs: config.ackWaitMs, // undefined → endpoint default (60s); shortened in tests to observe redelivery
|
|
76
|
+
channels: config.subscribe, // the endpoint's live filter = the active read set
|
|
77
|
+
channelModes: Object.fromEntries(this.channelModes), // seed presence so file defaults are visible at boot
|
|
45
78
|
card: {
|
|
46
79
|
id: config.id,
|
|
47
80
|
name: config.name,
|
|
@@ -49,10 +82,17 @@ export class MeshAgent extends EventEmitter {
|
|
|
49
82
|
kind: config.kind,
|
|
50
83
|
description: config.description,
|
|
51
84
|
tags: config.tags,
|
|
85
|
+
// Display-only discovery metadata so observers can show which harness an agent runs on
|
|
86
|
+
// and (when pinned) which model. Each is omitted when unset rather than faked.
|
|
87
|
+
meta: buildMeta(config),
|
|
52
88
|
},
|
|
53
89
|
});
|
|
54
90
|
this.ep.on("message", (m, d, meta) => this.ingest(m, d, meta));
|
|
55
91
|
this.ep.on("error", (e) => this.log(`endpoint error: ${e.message}`));
|
|
92
|
+
// The endpoint's (re)binds are the single source of truth for connectedness: this fires on
|
|
93
|
+
// initial start, manual reconnect, AND the background self-heal — so a recovery the endpoint
|
|
94
|
+
// did on its own can't leave us thinking we're offline (which would skip stop() → leak).
|
|
95
|
+
this.ep.on("connection", (e) => { this._connected = e.connected; });
|
|
56
96
|
}
|
|
57
97
|
get id() {
|
|
58
98
|
return this.ep.card.id;
|
|
@@ -60,6 +100,11 @@ export class MeshAgent extends EventEmitter {
|
|
|
60
100
|
get connected() {
|
|
61
101
|
return this._connected;
|
|
62
102
|
}
|
|
103
|
+
/** Correlates outgoing messages to the host agent's current context/window. */
|
|
104
|
+
setContextId(contextId) {
|
|
105
|
+
const clean = contextId?.trim();
|
|
106
|
+
this._contextId = clean ? clean : undefined;
|
|
107
|
+
}
|
|
63
108
|
/** Begin connecting (with background retry). Returns immediately. */
|
|
64
109
|
start(retryMs = 3000) {
|
|
65
110
|
void this.connectLoop(retryMs);
|
|
@@ -68,8 +113,8 @@ export class MeshAgent extends EventEmitter {
|
|
|
68
113
|
while (!this.stopping && !this._connected) {
|
|
69
114
|
try {
|
|
70
115
|
await this.ep.start();
|
|
71
|
-
|
|
72
|
-
this.log(`connected to ${this.config.servers} as ${this.who()} in space "${this.config.space}" on #${this.config.
|
|
116
|
+
// _connected is set by the endpoint's "connection" event (fired inside start()), not here.
|
|
117
|
+
this.log(`connected to ${this.config.servers} as ${this.who()} in space "${this.config.space}" on #${this.config.subscribe.join(", #")}`);
|
|
73
118
|
}
|
|
74
119
|
catch (e) {
|
|
75
120
|
this.log(`mesh unreachable (${e.message}); retrying in ${retryMs}ms`);
|
|
@@ -79,31 +124,80 @@ export class MeshAgent extends EventEmitter {
|
|
|
79
124
|
}
|
|
80
125
|
async stop() {
|
|
81
126
|
this.stopping = true;
|
|
82
|
-
|
|
83
|
-
|
|
127
|
+
// Unconditional: a background self-heal can flip _connected without us, so a `_connected`
|
|
128
|
+
// guard could skip the stop and leak the live connection/heartbeat/supervisor. ep.stop() is
|
|
129
|
+
// idempotent (early-returns once stopped), so calling it when already-down is a noop.
|
|
130
|
+
await this.ep.stop();
|
|
131
|
+
}
|
|
132
|
+
/** Manual reconnect: tear down the mesh connection and rebuild it in-process, WITHOUT
|
|
133
|
+
* stopping the agent (the recovery path, so it does NOT assert connected). Delegates to
|
|
134
|
+
* {@link CotalEndpoint.reconnect}, which is serialized with the self-heal supervisor and
|
|
135
|
+
* interruptible. Returns a one-line status for the caller to surface (e.g. the
|
|
136
|
+
* cotal_reconnect tool → TUI); on failure the endpoint keeps retrying in the background. */
|
|
137
|
+
async reconnect() {
|
|
138
|
+
if (this.stopping) {
|
|
139
|
+
return {
|
|
140
|
+
ok: false,
|
|
141
|
+
message: "This session is shutting down, so its Cotal mesh connection cannot be reconnected. Start a new session instead.",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
await this.ep.reconnect();
|
|
146
|
+
// _connected is set by the endpoint's "connection" event on the successful rebind, not here.
|
|
147
|
+
return { ok: true, message: `Reconnected ✓ (${this.config.name}@${this.config.space})` };
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
return { ok: false, message: `Reconnect failed: ${e.message}. Still retrying automatically — or run /reconnect to retry now.` };
|
|
151
|
+
}
|
|
84
152
|
}
|
|
85
153
|
// ---- inbox ---------------------------------------------------------------
|
|
86
154
|
ingest(m, delivery, meta) {
|
|
87
|
-
//
|
|
155
|
+
// Already SURFACED and drained? This is a post-handle cross-path duplicate (the transition window's
|
|
156
|
+
// second copy, arriving after the first was handled). Don't surface it again; if it's the durable
|
|
157
|
+
// copy, ack it so JetStream stops redelivering — safe because the logical message was already
|
|
158
|
+
// handled (handledIds is recorded at drain time, never at receive time).
|
|
159
|
+
if (this.handledIds.has(m.id) || this.handledIdsPrev.has(m.id)) {
|
|
160
|
+
if (delivery.durable)
|
|
161
|
+
delivery.ack();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Duplicate id still PENDING — keep ONE entry. Take the freshest ack handle, but NEVER downgrade a
|
|
165
|
+
// durable (committing) ack to a live no-op. Two cases produce a duplicate: same-path JetStream
|
|
166
|
+
// redelivery (always durable → upgrade to the fresh handle), and the cross-path live/durable
|
|
167
|
+
// transition window. There, if the DURABLE copy arrived first and a LIVE copy lands second,
|
|
168
|
+
// overwriting with the live no-op would leave the durable copy uncommitted → JS redelivers it → it
|
|
169
|
+
// double-surfaces. So only a durable delivery may replace the stored handle; a live duplicate is
|
|
170
|
+
// dropped as-is.
|
|
88
171
|
const existing = this.inbox.find((p) => p.item.id === m.id);
|
|
89
172
|
if (existing) {
|
|
90
|
-
|
|
173
|
+
if (delivery.durable)
|
|
174
|
+
existing.ack = delivery.ack;
|
|
91
175
|
return;
|
|
92
176
|
}
|
|
93
177
|
if (!meta)
|
|
94
178
|
throw new Error(`message ${m.id} delivered without MessageMeta — its class is unauthenticated`);
|
|
95
179
|
const item = this.toInboxItem(m, meta.kind, meta.historical);
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
// (
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
180
|
+
// Per-channel override is the FINAL word for a channel message (DMs/anycast are never channel-
|
|
181
|
+
// scoped, so they bypass this entirely and always buffer). Evaluated BEFORE the global mode:
|
|
182
|
+
// - `muted` → hard drop, incl. @mention (a mention rides the channel; you can't keep it if you
|
|
183
|
+
// dropped the channel). Acking does NOT delete (Limits-retained) but it's not locally recallable.
|
|
184
|
+
// - `quiet` → buffer (read it on your terms); no ambient wake (the gate's job); an @mention still
|
|
185
|
+
// wakes. Overrides global `focus` so "retain this channel, just don't wake me" stays expressible.
|
|
186
|
+
// Focus (global, only when NOT overridden): channel ambient AND @mentions are acked-and-dropped —
|
|
187
|
+
// they stay recallable via cotal_inbox (recallAmbient); an @mention still *wakes* (mention-wake),
|
|
188
|
+
// body pulled (F4=B), never auto-injected (the mention tag is payload-forgeable).
|
|
189
|
+
if (item.kind === "channel") {
|
|
190
|
+
const cm = this.channelModes.get(item.channel ?? "");
|
|
191
|
+
if (cm === "muted") {
|
|
192
|
+
delivery.ack();
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (cm !== "quiet" && this._attention === "focus") {
|
|
196
|
+
delivery.ack();
|
|
197
|
+
if (item.mentionsMe)
|
|
198
|
+
this.emit("mention-wake", item);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
107
201
|
}
|
|
108
202
|
this.inbox.push({ item, ack: delivery.ack });
|
|
109
203
|
if (this.inbox.length > MAX_INBOX) {
|
|
@@ -142,10 +236,22 @@ export class MeshAgent extends EventEmitter {
|
|
|
142
236
|
drainInbox(limit) {
|
|
143
237
|
const n = limit && limit > 0 ? Math.min(limit, this.inbox.length) : this.inbox.length;
|
|
144
238
|
const taken = this.inbox.splice(0, n);
|
|
145
|
-
for (const p of taken)
|
|
239
|
+
for (const p of taken) {
|
|
146
240
|
p.ack();
|
|
241
|
+
this.markHandled(p.item.id);
|
|
242
|
+
}
|
|
147
243
|
return taken.map((p) => p.item);
|
|
148
244
|
}
|
|
245
|
+
/** Record an id as surfaced/handled, for {@link ingest}'s commit-aware cross-path dedup. Bounded via
|
|
246
|
+
* two rotating windows: when the live set fills, it becomes the previous window and a fresh one
|
|
247
|
+
* starts — so memory stays ~2× the cap while the lookup horizon never shrinks below it. */
|
|
248
|
+
markHandled(id) {
|
|
249
|
+
this.handledIds.add(id);
|
|
250
|
+
if (this.handledIds.size >= 4096) {
|
|
251
|
+
this.handledIdsPrev = this.handledIds;
|
|
252
|
+
this.handledIds = new Set();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
149
255
|
/** Return pending messages without acking them (they stay on the stream). */
|
|
150
256
|
peekInbox() {
|
|
151
257
|
return this.inbox.map((p) => p.item);
|
|
@@ -160,6 +266,23 @@ export class MeshAgent extends EventEmitter {
|
|
|
160
266
|
directedPendingCount() {
|
|
161
267
|
return this.inbox.filter((p) => p.item.kind !== "channel" || p.item.mentionsMe).length;
|
|
162
268
|
}
|
|
269
|
+
/** Buffered items that should WAKE a Stop→idle flush — the mode-and-channel-aware predicate the
|
|
270
|
+
* connectors use instead of branching on attention themselves:
|
|
271
|
+
* - directed (dm/anycast) or an @mention → always (a quiet @mention still wakes; muted never buffers);
|
|
272
|
+
* - NORMAL ambient (no per-channel override) → only under global `open` (today's behavior);
|
|
273
|
+
* - QUIET ambient → never (it rides the next human turn, not a proactive wake).
|
|
274
|
+
* Subsumes {@link directedPendingCount}: in `dnd`/`focus` (no override) the open term is false, so it
|
|
275
|
+
* equals the directed count; in `open` it adds normal ambient but excludes quiet-channel ambient. */
|
|
276
|
+
pendingWake() {
|
|
277
|
+
return this.inbox.filter((p) => {
|
|
278
|
+
const it = p.item;
|
|
279
|
+
if (it.kind !== "channel" || it.mentionsMe)
|
|
280
|
+
return true;
|
|
281
|
+
if (this.channelMode(it.channel) === "quiet")
|
|
282
|
+
return false;
|
|
283
|
+
return this._attention === "open";
|
|
284
|
+
}).length;
|
|
285
|
+
}
|
|
163
286
|
/** Ask any push layer (the channel) to wake the session now — used by the Stop→idle flush
|
|
164
287
|
* to deliver a batch of held messages. Emits `"wake"`; a no-op if nothing listens. Never acks
|
|
165
288
|
* or drains. Ack sites are now two: {@link drainInbox} (surfaced items) and the focus ingest
|
|
@@ -168,10 +291,39 @@ export class MeshAgent extends EventEmitter {
|
|
|
168
291
|
this.emit("wake");
|
|
169
292
|
}
|
|
170
293
|
// ---- attention ------------------------------------------------------------
|
|
171
|
-
/** This agent's attention mode
|
|
294
|
+
/** This agent's global attention mode. Authoritative here; mirrored to presence (advisory) so peers
|
|
295
|
+
* can see it. Delivery never reads it back from presence — local state wins. */
|
|
172
296
|
get attention() {
|
|
173
297
|
return this._attention;
|
|
174
298
|
}
|
|
299
|
+
/** This agent's per-channel override for `channel` (undefined ⇒ follow the global mode). */
|
|
300
|
+
channelMode(channel) {
|
|
301
|
+
return channel ? this.channelModes.get(channel) : undefined;
|
|
302
|
+
}
|
|
303
|
+
/** A snapshot of every per-channel override (for the at-a-glance views). */
|
|
304
|
+
channelModeEntries() {
|
|
305
|
+
return Object.fromEntries(this.channelModes);
|
|
306
|
+
}
|
|
307
|
+
/** Set (or clear, with `"normal"`) one channel's attention override. Validates the channel is
|
|
308
|
+
* concrete and within this agent's read ACL (`allowSubscribe` — so a mode can be pre-set for a
|
|
309
|
+
* channel it may read but hasn't joined yet), updates the AUTHORITATIVE in-memory map, then mirrors
|
|
310
|
+
* the whole map to presence (best-effort; advisory). Per-instance + runtime: it NEVER writes the
|
|
311
|
+
* agent file (a shared template) and resets on restart.
|
|
312
|
+
*
|
|
313
|
+
* **Prospective only:** it does NOT purge messages already buffered from that channel — those were
|
|
314
|
+
* already received and still drain/wake per their original handling. Muting changes what arrives
|
|
315
|
+
* next, not what's already in the inbox. */
|
|
316
|
+
async setChannelMode(channel, mode) {
|
|
317
|
+
if (!isConcreteChannel(channel))
|
|
318
|
+
throw new Error(`"${channel}" must be a concrete channel (no wildcard) to set its attention`);
|
|
319
|
+
if (!channelInAllow(this.config.allowSubscribe, channel))
|
|
320
|
+
throw new Error(`"${channel}" is not within your read ACL (allowSubscribe) [${this.config.allowSubscribe.join(", ")}]`);
|
|
321
|
+
if (mode === "normal")
|
|
322
|
+
this.channelModes.delete(channel);
|
|
323
|
+
else
|
|
324
|
+
this.channelModes.set(channel, mode);
|
|
325
|
+
await this.ep.setChannelModes(this.channelModeEntries());
|
|
326
|
+
}
|
|
175
327
|
/** Set the attention mode. Entering `focus` captures the chat frontier as the focus-watermark
|
|
176
328
|
* (recall surfaces ambient published after it); leaving focus clears it. Requires a live
|
|
177
329
|
* connection only for `focus` (it reads the stream frontier). Ambient already *buffered* when
|
|
@@ -188,6 +340,9 @@ export class MeshAgent extends EventEmitter {
|
|
|
188
340
|
this.focusSince = undefined;
|
|
189
341
|
}
|
|
190
342
|
this._attention = mode;
|
|
343
|
+
// Mirror to presence (advisory observability — peers can see "they're in focus"). Best-effort:
|
|
344
|
+
// a no-op until the KV is bound, and never read back into delivery.
|
|
345
|
+
await this.ep.setAttention(mode);
|
|
191
346
|
}
|
|
192
347
|
/** Focus recall: the channel ambient + @mentions ack-dropped since this agent entered focus,
|
|
193
348
|
* read back from the chat stream on demand and **replay-gated per channel** (a `replay=off`
|
|
@@ -204,6 +359,12 @@ export class MeshAgent extends EventEmitter {
|
|
|
204
359
|
for (const channel of this.ep.joinedChannels()) {
|
|
205
360
|
if (!isConcreteChannel(channel))
|
|
206
361
|
continue;
|
|
362
|
+
// Skip any channel with a per-channel override: `muted` must NOT resurface via recall (you opted
|
|
363
|
+
// out of receiving it at all), and `quiet` overrides focus so its messages were buffered live —
|
|
364
|
+
// recalling them would duplicate what's already in the inbox. Only NORMAL channels' focus-
|
|
365
|
+
// ack-dropped ambient is recalled.
|
|
366
|
+
if (this.channelModes.has(channel))
|
|
367
|
+
continue;
|
|
207
368
|
const { messages, dropped } = await this.ep.recallChannel(channel, this.focusSince);
|
|
208
369
|
for (const m of messages)
|
|
209
370
|
items.push(this.toInboxItem(m, "channel", true));
|
|
@@ -219,7 +380,7 @@ export class MeshAgent extends EventEmitter {
|
|
|
219
380
|
const clean = normalizeMentions(mentions);
|
|
220
381
|
if (clean)
|
|
221
382
|
this.assertKnownMentions(clean);
|
|
222
|
-
return this.ep.multicast(text, { channel, mentions: clean });
|
|
383
|
+
return this.ep.multicast(text, { channel, mentions: clean, contextId: this._contextId });
|
|
223
384
|
}
|
|
224
385
|
/** Throw if any name isn't a peer we've observed. Validates against the FULL roster
|
|
225
386
|
* (incl. self — your own name is a valid participant; resolvePeer's self-filter would
|
|
@@ -235,25 +396,20 @@ export class MeshAgent extends EventEmitter {
|
|
|
235
396
|
}
|
|
236
397
|
async anycast(role, text) {
|
|
237
398
|
this.assertConnected();
|
|
238
|
-
return this.ep.anycast(role, text);
|
|
399
|
+
return this.ep.anycast(role, text, { contextId: this._contextId });
|
|
239
400
|
}
|
|
240
|
-
/** Resolve a peer by instance id (exact) or display name
|
|
401
|
+
/** Resolve a peer by instance id (exact) or display name. Deterministic and fail-loud: returns
|
|
402
|
+
* one peer, `undefined` if none match, or throws `AmbiguousPeerError` on a same-name collision —
|
|
403
|
+
* it never silently picks. See `resolvePeer` in @cotal-ai/core. */
|
|
241
404
|
resolvePeer(target) {
|
|
242
|
-
|
|
243
|
-
const byId = roster.find((p) => p.card.id === target);
|
|
244
|
-
if (byId)
|
|
245
|
-
return byId;
|
|
246
|
-
const t = target.toLowerCase();
|
|
247
|
-
const present = roster.filter((p) => p.status !== "offline");
|
|
248
|
-
return (present.find((p) => p.card.name.toLowerCase() === t) ??
|
|
249
|
-
roster.find((p) => p.card.name.toLowerCase() === t));
|
|
405
|
+
return resolvePeerInRoster(this.ep.getRoster(), target, { selfId: this.id });
|
|
250
406
|
}
|
|
251
407
|
async dm(target, text) {
|
|
252
408
|
this.assertConnected();
|
|
253
409
|
const peer = this.resolvePeer(target);
|
|
254
410
|
if (!peer)
|
|
255
411
|
throw new Error(`no peer "${target}" in space "${this.config.space}"`);
|
|
256
|
-
const msg = await this.ep.unicast(peer.card.id, text);
|
|
412
|
+
const msg = await this.ep.unicast(peer.card.id, text, { contextId: this._contextId });
|
|
257
413
|
return { msg, peer };
|
|
258
414
|
}
|
|
259
415
|
// ---- supervision ---------------------------------------------------------
|
|
@@ -262,23 +418,32 @@ export class MeshAgent extends EventEmitter {
|
|
|
262
418
|
* runtime; from here it just joins the mesh as a lateral peer. */
|
|
263
419
|
async spawn(name, role) {
|
|
264
420
|
this.assertConnected();
|
|
265
|
-
return this.ep.requestControl(
|
|
421
|
+
return this.ep.requestControl(CONTROL_PRIVILEGED, { op: "start", args: { name, role } });
|
|
266
422
|
}
|
|
267
423
|
/** Ask the manager to tear a teammate down (its `stop` op). Graceful by default —
|
|
268
424
|
* the session is told to exit cleanly (so it leaves the mesh) before the
|
|
269
|
-
* process/tab is closed; `graceful:false` is a hard, immediate kill.
|
|
425
|
+
* process/tab is closed; `graceful:false` is a hard, immediate kill.
|
|
426
|
+
*
|
|
427
|
+
* No `name` ⇒ self-despawn: rides the self-service control subject and the manager
|
|
428
|
+
* resolves the target as the managed agent whose id == this caller — so it can only
|
|
429
|
+
* ever stop itself, never a peer. A `name` ⇒ rides the privileged control subject
|
|
430
|
+
* (transport-gated to spawn-capable/admin); the manager refines own-child vs admin. */
|
|
270
431
|
async despawn(name, opts) {
|
|
271
432
|
this.assertConnected();
|
|
272
|
-
|
|
433
|
+
const graceful = opts?.graceful ?? true;
|
|
434
|
+
if (!name) {
|
|
435
|
+
return this.ep.requestControl(CONTROL_SELF_SERVICE, { op: "stop", args: { graceful } });
|
|
436
|
+
}
|
|
437
|
+
return this.ep.requestControl(CONTROL_PRIVILEGED, {
|
|
273
438
|
op: "stop",
|
|
274
|
-
args: { name, graceful
|
|
439
|
+
args: { name, graceful },
|
|
275
440
|
});
|
|
276
441
|
}
|
|
277
442
|
/** Ask the manager to purge the space's retained chat backlog (its `purge` op). Cleanup only —
|
|
278
443
|
* it doesn't touch live agents or the anycast work queue. `includeDms` also clears DM history. */
|
|
279
444
|
async purgeHistory(opts) {
|
|
280
445
|
this.assertConnected();
|
|
281
|
-
return this.ep.requestControl(
|
|
446
|
+
return this.ep.requestControl(CONTROL_PRIVILEGED, {
|
|
282
447
|
op: "purge",
|
|
283
448
|
args: { includeDms: opts?.includeDms ?? false },
|
|
284
449
|
});
|
|
@@ -288,9 +453,10 @@ export class MeshAgent extends EventEmitter {
|
|
|
288
453
|
* half — so peers see the new persona; `spawn(name)` then launches an agent wearing it. */
|
|
289
454
|
async definePersona(def) {
|
|
290
455
|
this.assertConnected();
|
|
291
|
-
const reply = await this.ep.requestControl(
|
|
456
|
+
const reply = await this.ep.requestControl(CONTROL_PRIVILEGED, {
|
|
292
457
|
op: "definePersona",
|
|
293
|
-
|
|
458
|
+
// role is policy — set at spawn, never via definePersona; the manager ignores it regardless.
|
|
459
|
+
args: { name: def.name, model: def.model, persona: def.prompt },
|
|
294
460
|
});
|
|
295
461
|
if (reply.ok)
|
|
296
462
|
await this.send(`persona \`${def.name}\` is now available — spawn it to bring it online`);
|
|
@@ -312,6 +478,16 @@ export class MeshAgent extends EventEmitter {
|
|
|
312
478
|
await this.ep.setActivity(activity);
|
|
313
479
|
await this.ep.setStatus(status);
|
|
314
480
|
}
|
|
481
|
+
/** Record the host's *actual* model — learned after launch (e.g. from Claude Code's `SessionStart`
|
|
482
|
+
* hook payload) — into the card's display-only `meta.model`, so peers see it in `cotal_roster` and
|
|
483
|
+
* the web roster even when the operator never pinned one. An explicit pin (`config.model`, from the
|
|
484
|
+
* agent file's `model:` or `COTAL_MODEL`) is authoritative and wins; this only fills the gap. Best-
|
|
485
|
+
* effort presence mirror (no `assertConnected` — safe pre-connect; it rides the first publish). */
|
|
486
|
+
async setModel(model) {
|
|
487
|
+
if (this.config.model)
|
|
488
|
+
return; // operator pin is authoritative — never override it with the runtime value
|
|
489
|
+
await this.ep.setCardModel(model);
|
|
490
|
+
}
|
|
315
491
|
// ---- channel registry ----------------------------------------------------
|
|
316
492
|
/** The boot-time "push" half of channel onboarding: a fenced, one-line description per
|
|
317
493
|
* subscribed channel that has one (the full `instructions` stay pull-only via
|
|
@@ -347,15 +523,43 @@ export class MeshAgent extends EventEmitter {
|
|
|
347
523
|
* other peers' membership). The companion to cotal_join. */
|
|
348
524
|
async listChannels() {
|
|
349
525
|
const mine = this.ep.joinedChannels();
|
|
350
|
-
|
|
526
|
+
const pending = this.ep.pendingDurableLeaves();
|
|
527
|
+
const unclosed = new Set(pending);
|
|
528
|
+
const rows = (await this.ep.listChannels()).map((c) => ({
|
|
351
529
|
channel: c.channel,
|
|
352
530
|
description: c.config?.description,
|
|
353
531
|
replay: this.ep.channelReplay(c.channel),
|
|
354
532
|
joined: mine.some((p) => subjectMatches(p, c.channel)),
|
|
533
|
+
// A live sub was refused while a Plane-3 durable membership stayed open; its §7 tombstone is still
|
|
534
|
+
// retrying. Surface it so the channel is never shown as ordinary "not subscribed" (ux requirement).
|
|
535
|
+
durableUnclosed: unclosed.has(c.channel),
|
|
355
536
|
messages: c.messages,
|
|
537
|
+
mode: this.channelMode(c.channel) ?? "normal",
|
|
356
538
|
}));
|
|
357
|
-
|
|
358
|
-
|
|
539
|
+
// A channel in refused-sub durable cleanup can have NO traffic AND no registry entry, so listChannels()
|
|
540
|
+
// omits it — UNION it in so the durable-unclosed state can never disappear by omission (ux/security).
|
|
541
|
+
const present = new Set(rows.map((r) => r.channel));
|
|
542
|
+
for (const ch of pending) {
|
|
543
|
+
if (present.has(ch))
|
|
544
|
+
continue;
|
|
545
|
+
rows.push({
|
|
546
|
+
channel: ch,
|
|
547
|
+
description: undefined,
|
|
548
|
+
replay: this.ep.channelReplay(ch),
|
|
549
|
+
joined: false,
|
|
550
|
+
durableUnclosed: true,
|
|
551
|
+
messages: 0,
|
|
552
|
+
mode: this.channelMode(ch) ?? "normal",
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
return rows;
|
|
556
|
+
}
|
|
557
|
+
/** Join a channel mid-session (backfills history if replay is on; idempotent). `durable` reports
|
|
558
|
+
* whether a durable backstop is active (Plane-3, SPEC §8, for a `durable`-class channel when a
|
|
559
|
+
* manager is present) — `false` means joined LIVE only, so messages sent while this session is
|
|
560
|
+
* offline won't be replayed. `reason` explains a `durable:false` on a channel that EXPECTED a
|
|
561
|
+
* backstop (e.g. no privileged provisioner); absent on a `live`-class channel (joined live is the
|
|
562
|
+
* contract there). */
|
|
359
563
|
async joinChannel(channel) {
|
|
360
564
|
this.assertConnected();
|
|
361
565
|
return this.ep.joinChannel(channel);
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -20,13 +20,41 @@ export interface AgentConfig {
|
|
|
20
20
|
role?: string;
|
|
21
21
|
description?: string;
|
|
22
22
|
tags?: string[];
|
|
23
|
+
/** Display-only metadata from unmodelled agent-file frontmatter keys (for example `face`).
|
|
24
|
+
* Connector-owned keys such as `connector` and `model` are overlaid later and cannot be spoofed here. */
|
|
25
|
+
meta?: Record<string, string>;
|
|
26
|
+
/** Control-plane capabilities this session declares (from the agent file's `capabilities:`); today
|
|
27
|
+
* only `spawn`. Used to gate the manager-op tools (cotal_spawn / cotal_persona) so the advertised
|
|
28
|
+
* surface matches what the agent can actually invoke. The cred layer is the real boundary (auth
|
|
29
|
+
* mode); open mode mints no creds, so the gate is permissive there. Same file the manager minted
|
|
30
|
+
* creds from, so the tool gate mirrors the wire grant exactly. */
|
|
31
|
+
capabilities?: string[];
|
|
23
32
|
servers: string;
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
/** The *active* read set — channels this agent actually subscribes to (read). May include
|
|
34
|
+
* wildcard subtrees (`team.>`). Maps to the endpoint's live filter. ⊆ {@link allowSubscribe}. */
|
|
35
|
+
subscribe: string[];
|
|
36
|
+
/** The read ACL — channels this agent *may* read (auth mode → broker-enforced). Defaults to
|
|
37
|
+
* {@link subscribe}. Bounds runtime `cotal_join`. */
|
|
38
|
+
allowSubscribe: string[];
|
|
39
|
+
/** The post ACL — channels this agent may post to (auth mode → the minted publish ACL).
|
|
40
|
+
* **Default-deny** (empty): publishing must be declared. Informational only here; the broker
|
|
41
|
+
* enforces it under auth. */
|
|
42
|
+
allowPublish: string[];
|
|
43
|
+
/** Per-channel attention DEFAULTS (operator, one-way from the agent file): channels to receive but
|
|
44
|
+
* never wake on ({@link quiet}) / to drop on receive ({@link muted}). Seeds {@link MeshAgent}'s
|
|
45
|
+
* runtime map; the runtime never writes them back. Concrete channels within {@link allowSubscribe}.
|
|
46
|
+
* Optional (absent ⇒ none), like the other discovery fields. */
|
|
47
|
+
quiet?: string[];
|
|
48
|
+
muted?: string[];
|
|
29
49
|
kind: EndpointKind;
|
|
50
|
+
/** The host connector this session runs under (`claude` / `opencode` / `hermes`). Set by the
|
|
51
|
+
* connector itself, never from user config — it rides the {@link AgentCard.meta}.connector on
|
|
52
|
+
* the wire as display-only discovery metadata (which harness an agent uses). */
|
|
53
|
+
connector?: string;
|
|
54
|
+
/** Model the host runs this agent on (e.g. `claude-opus-4`), from the agent file's `model:` or
|
|
55
|
+
* `COTAL_MODEL`. Rides {@link AgentCard.meta}.model as display-only discovery metadata; omitted
|
|
56
|
+
* when the operator didn't pin one (the harness default isn't knowable from here). */
|
|
57
|
+
model?: string;
|
|
30
58
|
token?: string;
|
|
31
59
|
user?: string;
|
|
32
60
|
pass?: string;
|
|
@@ -36,6 +64,11 @@ export interface AgentConfig {
|
|
|
36
64
|
feedbackKey?: string;
|
|
37
65
|
/** Optional intake URL override (`COTAL_FEEDBACK_URL`) for self-hosted intakes. */
|
|
38
66
|
feedbackUrl?: string;
|
|
67
|
+
/** Durable-consumer `ack_wait` in ms (how long an un-acked chat message waits before JetStream
|
|
68
|
+
* redelivers). Threaded straight to the endpoint; defaults to its 60s when unset. INTERNAL/TEST-ONLY:
|
|
69
|
+
* deliberately NOT parsed from env by `configFromEnv` — a test shortens it to observe redelivery /
|
|
70
|
+
* ack-commit in seconds; normal launches should not tune durability from connector config. */
|
|
71
|
+
ackWaitMs?: number;
|
|
39
72
|
}
|
|
40
73
|
/** True iff the env carries a Cotal identity — i.e. this is a launcher-spawned
|
|
41
74
|
* session, not an operator's plain `claude`. `COTAL_LINK` / `COTAL_AGENT_FILE`
|
|
@@ -51,8 +84,10 @@ export declare function hasIdentity(env?: NodeJS.ProcessEnv): boolean;
|
|
|
51
84
|
export declare function configFromEnv(env?: NodeJS.ProcessEnv): AgentConfig;
|
|
52
85
|
/** One sentence telling the agent its channel lanes — what it reads and where it may post —
|
|
53
86
|
* so it knows its scope up front instead of discovering it from inbound tags and send errors.
|
|
54
|
-
* Folded into each connector's MCP `instructions`.
|
|
55
|
-
*
|
|
87
|
+
* Folded into each connector's MCP `instructions`. It must match the broker truth: under auth the
|
|
88
|
+
* post ACL is default-deny, so an undeclared agent genuinely cannot post (state it plainly rather
|
|
89
|
+
* than promise a lane the broker will reject). In open mode there is no cred, so posting is
|
|
90
|
+
* unrestricted regardless of the (display-only) post ACL. */
|
|
56
91
|
export declare function laneLine(config: AgentConfig): string;
|
|
57
92
|
/** Beta-feedback guidance folded into connector instructions. */
|
|
58
93
|
export declare function feedbackLine(config: AgentConfig): string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwI,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEzL,0EAA0E;AAC1E,eAAO,MAAM,YAAY,wCAAwC,CAAC;AAClE,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd;iEAC6D;IAC7D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;8GAC0G;IAC1G,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;;uEAImE;IACnE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;sGACkG;IAClG,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;0DACsD;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;kCAE8B;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;qEAGiE;IACjE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB;;qFAEiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;2FAEuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb;+EAC2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;mGAG+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;uBAGuB;AACvB,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzE;AAED;;;;;uEAKuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,WAAW,CAgE/E;AAED;;;;;8DAK8D;AAC9D,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAWpD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAaxD"}
|