@essentialai/cogent-plugin 3.15.0 → 3.16.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cogent",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.0",
|
|
4
4
|
"description": "Inter-session communication bridge for Claude Code with Slack integration. Enables CC agents and Slack team members to communicate in real time.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Essential AI Solutions",
|
package/bridge/cogent-bridge.mjs
CHANGED
|
@@ -26389,8 +26389,8 @@ var init_stdio2 = __esm({
|
|
|
26389
26389
|
// src/constants.ts
|
|
26390
26390
|
import { createRequire } from "node:module";
|
|
26391
26391
|
function resolveVersion() {
|
|
26392
|
-
if ("3.
|
|
26393
|
-
return "3.
|
|
26392
|
+
if ("3.16.0") {
|
|
26393
|
+
return "3.16.0";
|
|
26394
26394
|
}
|
|
26395
26395
|
try {
|
|
26396
26396
|
const require2 = createRequire(import.meta.url);
|
|
@@ -33080,6 +33080,7 @@ var init_auto_relay = __esm({
|
|
|
33080
33080
|
logger.info(`Auto-relay: processing message from ${fromLabel} (${msg.fromPeerId})`);
|
|
33081
33081
|
const traceId = msg.traceId ?? randomUUID2();
|
|
33082
33082
|
const startMs = Date.now();
|
|
33083
|
+
let replied = false;
|
|
33083
33084
|
try {
|
|
33084
33085
|
const res = await this.refreshSessionId();
|
|
33085
33086
|
this._trace(traceId, "resolved", {
|
|
@@ -33126,6 +33127,7 @@ var init_auto_relay = __esm({
|
|
|
33126
33127
|
const durationMs = Date.now() - startMs;
|
|
33127
33128
|
if (result.exitCode === 0 && result.stdout) {
|
|
33128
33129
|
await this._relayCapturedReply(msg, result, traceId, durationMs, false);
|
|
33130
|
+
replied = true;
|
|
33129
33131
|
} else {
|
|
33130
33132
|
this._trace(traceId, "failed", { exitCode: result.exitCode, sandboxBlocked: result.sandboxBlocked, durationMs });
|
|
33131
33133
|
logger.warn(
|
|
@@ -33142,6 +33144,7 @@ var init_auto_relay = __esm({
|
|
|
33142
33144
|
const bypassRetry = await execRemote(cfg.COGENT_PLATFORM, this.localSessionId, formatted, this.localCwd);
|
|
33143
33145
|
if (bypassRetry.exitCode === 0 && bypassRetry.stdout) {
|
|
33144
33146
|
await this._relayCapturedReply(msg, bypassRetry, traceId, Date.now() - startMs, true);
|
|
33147
|
+
replied = true;
|
|
33145
33148
|
return;
|
|
33146
33149
|
}
|
|
33147
33150
|
logger.warn(`Auto-relay: sandbox-bypass retry also failed (exit=${bypassRetry.exitCode})`);
|
|
@@ -33171,15 +33174,49 @@ var init_auto_relay = __esm({
|
|
|
33171
33174
|
const retry = await execRemote(getConfig().COGENT_PLATFORM, this.localSessionId, formatted, this.localCwd);
|
|
33172
33175
|
if (retry.exitCode === 0 && retry.stdout) {
|
|
33173
33176
|
await this._relayCapturedReply(msg, retry, traceId, Date.now() - startMs, true);
|
|
33177
|
+
replied = true;
|
|
33174
33178
|
} else {
|
|
33175
33179
|
logger.warn(`Auto-relay: retry also failed (exit=${retry.exitCode})`);
|
|
33176
33180
|
}
|
|
33177
33181
|
}
|
|
33178
33182
|
}
|
|
33183
|
+
if (!replied) {
|
|
33184
|
+
await this._recordNoReplyFailure(msg, traceId, Date.now() - startMs);
|
|
33185
|
+
}
|
|
33179
33186
|
} catch (err) {
|
|
33180
33187
|
const durationMs = Date.now() - startMs;
|
|
33181
33188
|
this._trace(traceId, "failed", { threw: true, durationMs });
|
|
33182
33189
|
logger.error(`Auto-relay: execRemote threw after ${durationMs}ms: ${err}`);
|
|
33190
|
+
if (!replied) {
|
|
33191
|
+
await this._recordNoReplyFailure(msg, traceId, durationMs);
|
|
33192
|
+
}
|
|
33193
|
+
}
|
|
33194
|
+
}
|
|
33195
|
+
/**
|
|
33196
|
+
* Fail-loud (2026-08-11): a wake that captured NO reply — empty stdout, a
|
|
33197
|
+
* non-zero exit with no rotated-session retry, a failed retry, or a thrown
|
|
33198
|
+
* execRemote — used to record NOTHING, so the sender saw response:null with no
|
|
33199
|
+
* error (the invisible failure that hid the demo busy-miss). Record ONE visible
|
|
33200
|
+
* success:false notice to the sender so a human/agent knows to reply manually.
|
|
33201
|
+
* On Codex this pairs with Wake-C (check-on-stop), which auto-recovers the reply
|
|
33202
|
+
* at the next turn boundary. Refusal (AMBIGUOUS_SESSION) and sandbox-blocked
|
|
33203
|
+
* paths record their own failure and return before this, so no double-record.
|
|
33204
|
+
*/
|
|
33205
|
+
async _recordNoReplyFailure(msg, traceId, durationMs) {
|
|
33206
|
+
try {
|
|
33207
|
+
await getBackend().recordMessage({
|
|
33208
|
+
fromPeerId: this.localPeerId,
|
|
33209
|
+
toPeerId: msg.fromPeerId,
|
|
33210
|
+
message: `\u26A0\uFE0F Cogent could not capture a reply from "${this.localPeerId}" (it may have been busy, or the resume produced no output). Manual response required \u2014 the target agent must reply in its own session. (trace ${traceId})`,
|
|
33211
|
+
response: null,
|
|
33212
|
+
durationMs,
|
|
33213
|
+
success: false,
|
|
33214
|
+
error: "NO_REPLY_CAPTURED",
|
|
33215
|
+
isRelayEcho: true,
|
|
33216
|
+
traceId
|
|
33217
|
+
});
|
|
33218
|
+
} catch (recordErr) {
|
|
33219
|
+
logger.error(`Auto-relay: failed to record no-reply failure: ${recordErr}`);
|
|
33183
33220
|
}
|
|
33184
33221
|
}
|
|
33185
33222
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@essentialai/cogent-plugin",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.0",
|
|
4
4
|
"description": "Cogent — Claude Code plugin (skills + slash-commands + MCP server) for the cross-agent comms fabric.",
|
|
5
5
|
"author": { "name": "Essential AI Solutions Ltd.", "url": "https://essentialai.uk" },
|
|
6
6
|
"homepage": "https://cogent.tools",
|