@agimon-ai/po-team 0.0.0-alpha.78 → 0.0.0-alpha.79
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.
|
@@ -3420,7 +3420,7 @@ function describePeerLine(peer) {
|
|
|
3420
3420
|
...peer.profile === void 0 ? [] : [`profile ${peer.profile}`],
|
|
3421
3421
|
...peer.sharedGroups.length === 0 ? [] : [`shared groups: ${peer.sharedGroups.join(", ")}`]
|
|
3422
3422
|
];
|
|
3423
|
-
return `- ${peer.name.trim() === "" ? peer.sessionId : peer.name} (${details.join("; ")}): use send
|
|
3423
|
+
return `- ${peer.name.trim() === "" ? peer.sessionId : peer.name} (${details.join("; ")}): use send`;
|
|
3424
3424
|
}
|
|
3425
3425
|
function createHeadlessIntercomTool(channel, sessions) {
|
|
3426
3426
|
return {
|
|
@@ -3429,7 +3429,7 @@ function createHeadlessIntercomTool(channel, sessions) {
|
|
|
3429
3429
|
mainAgentOnly: true,
|
|
3430
3430
|
description: "Push clear work outcomes to active agents and related live sessions: results, blockers, decisions. No greetings, thanks, or chit-chat.",
|
|
3431
3431
|
parameters: TeamToolParamsSchema,
|
|
3432
|
-
promptGuidelines: ["Send only new progress, blockers, or decisions. Do not repeat task briefs or delegation instructions.", "Use
|
|
3432
|
+
promptGuidelines: ["Send only new progress, blockers, or decisions. Do not repeat task briefs or delegation instructions.", "Use file-edit notices for overlapping editors, or members for explicit session relationships. Session peers use send, not ask/reply. Contact only when coordination is needed; no acknowledgement is required."],
|
|
3433
3433
|
executionMode: "serial",
|
|
3434
3434
|
async execute(toolCallId, parameters, signal, onUpdate) {
|
|
3435
3435
|
const params = parseTeamToolParams(parameters);
|
|
@@ -3449,14 +3449,13 @@ function createHeadlessIntercomTool(channel, sessions) {
|
|
|
3449
3449
|
const delivery = sessions.delivery();
|
|
3450
3450
|
if (delivery === void 0) throw new Error("Session delivery is unavailable.");
|
|
3451
3451
|
const senderName = sessions.name?.()?.trim() || sessions.sessionId;
|
|
3452
|
-
const replyTo = metadata?.sourceReference ?? senderName;
|
|
3453
3452
|
const toName = peer?.name.trim() || recipientId;
|
|
3454
3453
|
const deliveryId = `intercom:${sessions.sessionId}:${toolCallId}`;
|
|
3455
3454
|
const receipt = await delivery.deliver({
|
|
3456
3455
|
deliveryId,
|
|
3457
3456
|
recipientKey: recipientId,
|
|
3458
3457
|
kind: TEAM_MESSAGE_CUSTOM_TYPE,
|
|
3459
|
-
prompt: `Message from session ${senderName} via intercom.\n\n${message}
|
|
3458
|
+
prompt: `Message from session ${senderName} via intercom.\n\n${message}`,
|
|
3460
3459
|
delivery: "steer",
|
|
3461
3460
|
metadata: {
|
|
3462
3461
|
...metadata,
|
|
@@ -5580,20 +5579,10 @@ const sortedNames = (names) => [...new Set(names.map(clean).filter(Boolean))].to
|
|
|
5580
5579
|
* Stable facts only, sorted, so equal rosters render byte-identical and a change check
|
|
5581
5580
|
* appends nothing when nothing moved. Live status stays out: it would change every turn.
|
|
5582
5581
|
*/
|
|
5583
|
-
function formatTeamRoster({ groups,
|
|
5582
|
+
function formatTeamRoster({ groups, members }) {
|
|
5584
5583
|
const lines = [];
|
|
5585
5584
|
const own = sortedNames(groups);
|
|
5586
5585
|
if (own.length) lines.push(`Your session groups: ${own.join(", ")}.`);
|
|
5587
|
-
const peerLines = peers.map((peer) => {
|
|
5588
|
-
const shared = sortedNames(peer.sharedGroups);
|
|
5589
|
-
const details = [
|
|
5590
|
-
`session ${peer.sessionId}`,
|
|
5591
|
-
...peer.profile === void 0 ? [] : [`profile ${clean(peer.profile)}`],
|
|
5592
|
-
...shared.length ? [`shared groups: ${shared.join(", ")}`] : []
|
|
5593
|
-
];
|
|
5594
|
-
return `- ${clean(peer.name) || peer.sessionId} (${details.join("; ")})`;
|
|
5595
|
-
}).toSorted();
|
|
5596
|
-
if (peerLines.length) lines.push("Sessions you can message with intercom send, by name or session id:", ...peerLines);
|
|
5597
5586
|
const subagentLines = members.filter((member) => member.role !== "main").map((member) => {
|
|
5598
5587
|
const details = [member.agent ? `agent ${clean(member.agent)}` : void 0, member.task ? `task: ${clean(member.task.subject)}` : void 0].filter((value) => Boolean(value));
|
|
5599
5588
|
return `- ${clean(member.name)}${details.length ? ` (${details.join("; ")})` : ""}`;
|
|
@@ -5604,7 +5593,7 @@ function formatTeamRoster({ groups, peers, members }) {
|
|
|
5604
5593
|
function teamRosterNote(roster) {
|
|
5605
5594
|
return [
|
|
5606
5595
|
"<system-reminder>",
|
|
5607
|
-
roster || "You are in no session group and have no
|
|
5596
|
+
roster || "You are in no session group and have no active subagents now.",
|
|
5608
5597
|
"This replaces any earlier roster note. Use intercom members for live status.",
|
|
5609
5598
|
"</system-reminder>"
|
|
5610
5599
|
].join("\n");
|
|
@@ -6490,10 +6479,8 @@ const root = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async ({ context,
|
|
|
6490
6479
|
const listPeers = () => [...serverHost.context.sessionCommunication?.listPeers?.() ?? [], ...sessionGroupBridge?.peersFor(execution.sessionId) ?? []];
|
|
6491
6480
|
const roster = createTeamRosterDelivery(() => formatTeamRoster({
|
|
6492
6481
|
groups: serverHost.context.sessionCommunication?.groups ?? [],
|
|
6493
|
-
peers: listPeers(),
|
|
6494
6482
|
members: require_teamSnapshot.readActiveTeamSnapshot(channel)?.members ?? []
|
|
6495
6483
|
}));
|
|
6496
|
-
const stopPeerDiscovery = serverHost.context.sessionCommunication?.onPeerReady(() => void roster.sync());
|
|
6497
6484
|
const intercom = createHeadlessIntercomTool(channel, {
|
|
6498
6485
|
sessionId: execution.sessionId,
|
|
6499
6486
|
name: () => serverHost.context.sessionCommunication?.sessionName,
|
|
@@ -6506,12 +6493,8 @@ const root = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async ({ context,
|
|
|
6506
6493
|
ctx.plugin((providerContext) => {
|
|
6507
6494
|
providerContext.inject([_agimon_ai_po_session.PO_SESSION_GROUP_BRIDGE_SERVICE], (bridgeContext) => {
|
|
6508
6495
|
sessionGroupBridge = (0, _agimon_ai_po_session.readSessionGroupBridge)(bridgeContext);
|
|
6509
|
-
const unsubscribe = sessionGroupBridge?.subscribe(() => void roster.sync());
|
|
6510
|
-
roster.sync();
|
|
6511
6496
|
return () => {
|
|
6512
|
-
unsubscribe?.();
|
|
6513
6497
|
sessionGroupBridge = void 0;
|
|
6514
|
-
roster.sync();
|
|
6515
6498
|
};
|
|
6516
6499
|
});
|
|
6517
6500
|
providerContext.plugin(teamCollaborationPlugin, {
|
|
@@ -6696,7 +6679,6 @@ const root = (0, _agimon_ai_po_core_extensionFile.defineRoot)(async ({ context,
|
|
|
6696
6679
|
let stoppedRuns;
|
|
6697
6680
|
await (0, _agimon_ai_po_core_extensionFile.runCleanups)([
|
|
6698
6681
|
() => awaitedInline.close(),
|
|
6699
|
-
() => stopPeerDiscovery?.(),
|
|
6700
6682
|
() => roster.dispose(),
|
|
6701
6683
|
() => execution.client.setStatus(TEAM_COST_STATUS, void 0),
|
|
6702
6684
|
() => channel.dispose(),
|