Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .crew/amos.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
scope:
allowed_paths:
- /workspace/clagentic-console/lib/
- /workspace/clagentic-console/.crew/
- /workspace/clagentic-console/test/

branch_conventions:
feat: "feat/lr-{task_id}-{slug}"
fix: "fix/lr-{task_id}-{slug}"
chore: "chore/lr-{task_id}-{slug}"
35 changes: 35 additions & 0 deletions lib/project-sessions.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var { execFileSync } = require("child_process");
var { CODEX_DEFAULTS, getCodexConfig } = require("./codex-defaults");
var agentsModule = require("./agents");
var agentsFavorites = require("./agents-favorites");
var relayClaims = require("./relay-agent-claims");

// Kick off SDK agent discovery in the background at module load.
// Errors are swallowed inside refresh(); the cache starts empty and fills
Expand Down Expand Up @@ -159,6 +160,15 @@ function attachSessions(ctx) {
if (usersModule.isMultiUser()) {
broadcastPresence();
}
// Wire relay live-claim for named-agent sessions (lr-9cfc).
// Fire-and-forget; degrades silently when relay is absent.
if (newSess.agentName) {
(function (sessLocalId, agentName) {
relayClaims.attachAgentSession(newSess, agentName, function (obj) {
sendToSession(sessLocalId, obj);
});
})(newSess.localId, newSess.agentName);
}
return true;
}

Expand Down Expand Up @@ -218,12 +228,25 @@ function attachSessions(ctx) {
if (!usersModule.canAccessSession(ws._clayUser.id, agentTarget, { visibility: "public" })) return true;
}
var nextAgent = (msg.agentName && typeof msg.agentName === "string") ? msg.agentName : null;
var prevAgent = agentTarget.agentName || null;
agentTarget.agentName = nextAgent;
sm.saveSessionFile(agentTarget);
if (nextAgent) {
try { agentsFavorites.touchRecent({ name: nextAgent }); }
catch (e) { /* best-effort */ }
}
// Relay live-claim lifecycle for agent changes (lr-9cfc).
// Release old claims; attach for new agent if set.
if (prevAgent) {
relayClaims.detachAgentSession(agentTarget.localId);
}
if (nextAgent) {
(function (sessLocalId, agentName) {
relayClaims.attachAgentSession(agentTarget, agentName, function (obj) {
sendToSession(sessLocalId, obj);
});
})(agentTarget.localId, nextAgent);
}
sm.broadcastSessionList();
return true;
}
Expand Down Expand Up @@ -275,6 +298,13 @@ function attachSessions(ctx) {
deletableIds.push(bulkId);
}
if (deletableIds.length > 0) {
// Release relay claims for any agent sessions in the bulk-delete set (lr-9cfc).
for (var ri = 0; ri < deletableIds.length; ri++) {
var relayBulkSess = sm.sessions.get(deletableIds[ri]);
if (relayBulkSess && relayBulkSess.agentName) {
relayClaims.detachAgentSession(deletableIds[ri]);
}
}
sm.deleteSessionsBulk(deletableIds, ws);
}
return true;
Expand Down Expand Up @@ -466,6 +496,11 @@ function attachSessions(ctx) {
}
}
if (msg.id && sm.sessions.has(msg.id)) {
// Release relay claims for agent sessions before deletion (lr-9cfc).
var sdSess = sm.sessions.get(msg.id);
if (sdSess && sdSess.agentName) {
relayClaims.detachAgentSession(msg.id);
}
sm.deleteSession(msg.id, ws);
}
return true;
Expand Down
Loading
Loading