Skip to content
Draft
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
17 changes: 17 additions & 0 deletions desktop/src/features/agents/observerRelayStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,16 @@ function observerTag(event: RelayEvent, tagName: string) {
return event.tags.find((tag) => tag[0] === tagName)?.[1] ?? null;
}

function pillDiagBridgeAgents(
agents: readonly Pick<ManagedAgent, "pubkey" | "status">[],
) {
return agents.map((agent) => ({
pubkey: normalizePubkey(agent.pubkey),
status: agent.status,
startsObserver: agent.status === "running" || agent.status === "deployed",
}));
}

function appendAgentEvent(agentPubkey: string, event: ObserverEvent) {
const key = normalizePubkey(agentPubkey);
const current = eventsByAgent.get(key) ?? [];
Expand Down Expand Up @@ -390,6 +400,13 @@ export function useManagedAgentObserverBridge(
[agents],
);

console.log("[pill-diag] observer bridge render", {
subscriptionId,
hasActiveAgent,
agents: pillDiagBridgeAgents(agents),
at: new Date().toISOString(),
});

const agentPubkeys = React.useMemo(
() => agents.map((agent) => agent.pubkey),
[agents],
Expand Down
135 changes: 133 additions & 2 deletions desktop/src/features/sidebar/lib/useActiveWorkingChannelsById.test.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
import assert from "node:assert/strict";
import { describe, it } from "node:test";

import { resolveActiveWorkingChannelNames } from "./useActiveWorkingChannelsById.ts";
import {
getOwnedRelayWorkingAgents,
mergeWorkingAgents,
resolveActiveWorkingChannelNames,
} from "./useActiveWorkingChannelsById.ts";

const VIEWER_PUBKEY =
"80c5f18be5aafa62cf6198c6335963ba3306b595288117c8ea2f805fc9bdc94a";
const OWNED_RELAY_AGENT_PUBKEY =
"a1b2c3d4e5f60718293a4b5c6d7e8f90112233445566778899aabbccddeeff00";

describe("resolveActiveWorkingChannelNames", () => {
it("resolves active agent pubkeys to managed agent names", () => {
it("resolves active agent pubkeys to working agent names", () => {
const resolved = resolveActiveWorkingChannelNames(
{
channelId: "chan-1",
Expand Down Expand Up @@ -34,4 +43,126 @@ describe("resolveActiveWorkingChannelNames", () => {

assert.deepEqual(resolved.agentNames, ["Ned"]);
});

it("resolves owned relay agent names", () => {
const resolved = resolveActiveWorkingChannelNames(
{
channelId: "chan-1",
anchorAt: 0,
agentCount: 1,
agentPubkeys: [OWNED_RELAY_AGENT_PUBKEY.toUpperCase()],
},
[{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia" }],
);

assert.deepEqual(resolved.agentNames, ["nadia"]);
});
});

describe("getOwnedRelayWorkingAgents", () => {
it("keeps relay agents whose NIP-OA owner is the current viewer", () => {
assert.deepEqual(
getOwnedRelayWorkingAgents(
[
{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia" },
{ pubkey: "other-agent", name: "nelson" },
],
{
[OWNED_RELAY_AGENT_PUBKEY]: {
displayName: "nadia",
avatarUrl: null,
nip05Handle: null,
ownerPubkey: VIEWER_PUBKEY.toUpperCase(),
isAgent: true,
},
"other-agent": {
displayName: "nelson",
avatarUrl: null,
nip05Handle: null,
ownerPubkey: "someone-else",
isAgent: true,
},
},
VIEWER_PUBKEY,
),
[{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia", status: "deployed" }],
);
});

it("returns no relay agents without a current viewer", () => {
assert.deepEqual(
getOwnedRelayWorkingAgents(
[{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia" }],
{},
undefined,
),
[],
);
});

it("drops relay agents with missing profiles or null owners", () => {
assert.deepEqual(
getOwnedRelayWorkingAgents(
[
{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia" },
{ pubkey: "ownerless-agent", name: "ralph" },
],
{
"ownerless-agent": {
displayName: "ralph",
avatarUrl: null,
nip05Handle: null,
ownerPubkey: null,
isAgent: true,
},
},
VIEWER_PUBKEY,
),
[],
);
});
});

describe("mergeWorkingAgents", () => {
it("keeps active managed agents ahead of owned relay duplicates", () => {
assert.deepEqual(
mergeWorkingAgents(
[{ pubkey: "AAAA", name: "Ned", status: "running" }],
[
{ pubkey: "aaaa", name: "Relay Ned", status: "deployed" },
{
pubkey: OWNED_RELAY_AGENT_PUBKEY,
name: "nadia",
status: "deployed",
},
],
),
[
{ pubkey: "AAAA", name: "Ned", status: "running" },
{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia", status: "deployed" },
],
);
});

it("uses owned relay status when a duplicate managed agent is stopped", () => {
assert.deepEqual(
mergeWorkingAgents(
[
{
pubkey: OWNED_RELAY_AGENT_PUBKEY.toUpperCase(),
name: "Local Nadia",
status: "stopped",
},
],
[
{
pubkey: OWNED_RELAY_AGENT_PUBKEY,
name: "nadia",
status: "deployed",
},
],
),
[{ pubkey: OWNED_RELAY_AGENT_PUBKEY, name: "nadia", status: "deployed" }],
);
});
});
Loading
Loading