@ekanos/cli 0.14.0 → 0.15.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 +1 @@
1
- {"version":3,"file":"team-agents-agents.js","sourceRoot":"","sources":["../../src/commands/team-agents-agents.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AgentRunListSchema,\n type ChannelRequirement,\n type Requirement,\n type TeamAgentAccess,\n type TeamAgentChangeResult,\n TeamAgentChangeResultSchema,\n type TeamAgentEntry,\n TeamAgentListSchema,\n type TeamAgentPolicy,\n type TeamAgentPolicyChange,\n TeamAgentPolicySchema,\n type TeamAgentSkills,\n type TeamAgentSkillsChange,\n TeamAgentSkillsSchema,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { invalidStateError, notFoundError, usageError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call, listTeamEvents } from '../teams-api';\nimport {\n REASON_WORDS,\n agentReadiness,\n channelFix,\n describeAgentReadiness,\n describeHold,\n fixLine,\n liveLine,\n reachedVia,\n requirementFix,\n} from './team-agent-readiness';\nimport { type TeamAgentRun, requireOperand, usageFor } from './team-agents';\n\n/**\n * `ekanos teams agents list|show|enable|confirm|disable|pin|unpin|policy|skills` —\n * a team's provided agents, turned on, versioned, given an approval policy\n * and skills by the Source admin. `enable|pin … --draft` puts one team on\n * the template's latest, unpublished version to test it there before\n * publishing. `confirm` (and `--confirm-access`) is the one thing only the\n * person the agent runs as can do: consent, as themselves, that it may use\n * their connections in runs no one watches.\n * `show` answers \"is this agent live, and if not, why?\" for one agent; `list`\n * ends each agent with the same verdict.\n */\nexport async function runTeamAgentsArea(\n ctx: CliContext,\n run: TeamAgentRun,\n): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'agents');\n const base = `/api/partner/teams/${encodeURIComponent(team)}/agents`;\n\n if (run.verb === 'list') {\n expectOperands(run, 1);\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const target = { team: list.team.slug, source: run.source };\n return ctx.succeed(\n {\n host: run.host,\n ...list,\n agents: list.agents.map((entry) => ({\n ...entry,\n readiness: agentReadiness(entry, target),\n })),\n },\n [\n ctx.ui.result({\n title:\n list.agents.length === 0\n ? `No agents are provided for ${list.team.slug}`\n : `Agents for ${list.team.slug}`,\n tone: list.agents.length === 0 ? 'warn' : 'ok',\n }),\n ...list.agents.map((entry) =>\n describeEntry(entry, list.team.slug, run.source),\n ),\n list.mcpServers.length > 0\n ? `\\nMCP servers: ${list.mcpServers.map((server) => `${server.key} (${server.status})`).join(', ')}`\n : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n );\n }\n\n const key = requireOperand(run.operands[1], 'agent key', 'agents');\n const path = `${base}/${encodeURIComponent(key)}`;\n\n switch (run.verb) {\n case 'show':\n expectOperands(run, 2);\n return show(ctx, run, base, key);\n case 'enable': {\n expectOperands(run, 2);\n const as = stringFlag(run, 'as');\n const draft = run.args.flags?.draft === true;\n const confirmAccess = run.args.flags?.['confirm-access'] === true;\n const result = await change(run, `${path}/enable`, 'POST', {\n ...(as ? { as } : {}),\n ...(draft ? { draft: true } : {}),\n ...(confirmAccess ? { confirmAccess: true } : {}),\n });\n if (draft) requireDraftHost(result, 'enabled');\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${\n draft\n ? `Testing draft v${result.version ?? '?'} of ${result.slug} on ${result.team.slug}`\n : `Turned on ${result.slug} for ${result.team.slug}`\n }${confirmAccess && result.accessConfirmed ? ', and you confirmed it may use your connections' : ''}`,\n run.source,\n { confirmRequested: confirmAccess },\n ),\n );\n }\n case 'confirm': {\n expectOperands(run, 2);\n // Confirm what the person is shown, never a publish that lands after:\n // the host refuses if the version moved (AGENT_VERSION_CHANGED).\n const shown = await shownVersion(ctx, run, base, key);\n const result = await change(\n run,\n `${path}/confirm`,\n 'POST',\n shown === null ? {} : { expectedVersion: shown },\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n result.advanced\n ? `You confirmed the update: ${result.slug} on ${result.team.slug} moved from v${result.advanced.from} to v${result.advanced.to}`\n : `You confirmed ${result.slug} on ${result.team.slug} may use your connections`,\n run.source,\n { confirmRequested: true },\n ),\n );\n }\n case 'disable': {\n expectOperands(run, 2);\n if (!run.args.yes) {\n throw invalidStateError(\n `Turning ${key} off for ${team} pauses it: nothing starts it for that team until it is turned on again, and turning it on is refused once the person it runs as has left the team.`,\n `Re-run with --yes: ekanos teams agents disable ${team} ${key} --yes`,\n );\n }\n const result = await change(run, `${path}/disable`, 'POST', {});\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `Turned off ${result.slug} for ${result.team.slug}`,\n run.source,\n ),\n );\n }\n case 'pin': {\n if (run.args.flags?.draft === true) {\n expectOperands(run, 2);\n const result = await change(run, `${path}/pin`, 'PUT', {\n version: null,\n draft: true,\n });\n requireDraftHost(result, 'pinned');\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `Testing draft v${result.version ?? '?'} of ${result.slug} on ${result.team.slug}`,\n run.source,\n ),\n );\n }\n expectOperands(run, 3);\n const version = Number(run.operands[2]);\n if (!Number.isInteger(version) || version < 1) {\n throw usageError(\n run.operands[2]\n ? `\"${run.operands[2]}\" is not a version number.`\n : 'Name the version to pin.',\n `e.g. \"ekanos teams agents pin ${team} ${key} 3\", or \"--draft\" to test the unpublished draft. \"ekanos agents show ${key}\" lists its versions.`,\n );\n }\n const result = await change(run, `${path}/pin`, 'PUT', { version });\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${result.team.slug} stays on v${result.version ?? version} of ${result.slug}`,\n run.source,\n ),\n );\n }\n case 'unpin': {\n expectOperands(run, 2);\n const result = await change(run, `${path}/pin`, 'PUT', { version: null });\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${result.team.slug} follows each published version of ${result.slug}`,\n run.source,\n ),\n );\n }\n case 'policy':\n return policy(ctx, run, team, key, `${path}/policy`);\n case 'skills':\n return skills(ctx, run, team, key, `${path}/skills`);\n default:\n throw usageError(\n `Unknown teams agents subcommand \"${run.verb}\".`,\n usageFor('agents'),\n );\n }\n}\n\n/**\n * One agent on one team: each product and whose connection it acts through,\n * each trigger and how its events reach the agent (with the last event and\n * the last run), access, \"Live: yes/no\" and exactly one Next. Reads the\n * team's agents, then its recent runs and events; a host without the\n * activity reads still answers the rest.\n */\nasync function show(\n ctx: CliContext,\n run: TeamAgentRun,\n base: string,\n key: string,\n): Promise<ExitCode> {\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const entry = list.agents.find((candidate) => candidate.key === key);\n if (!entry) {\n throw notFoundError(\n `No agent \"${key}\" is provided for ${list.team.slug}.`,\n `\"ekanos teams agents list ${list.team.slug}\" lists the agents provided for it.`,\n );\n }\n const target = { team: list.team.slug, source: run.source };\n const readiness = agentReadiness(entry, target);\n const [runs, events] = entry.agent\n ? await Promise.all([\n activity(ctx, 'runs', () =>\n run.client.call((token) =>\n call(run.host, token, AgentRunListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/runs?agent=${encodeURIComponent(key)}`,\n source: run.source,\n }),\n ),\n ),\n entry.agent.triggers.some((trigger) => trigger.eventId)\n ? activity(ctx, 'events', () =>\n run.client.call((token) =>\n listTeamEvents(\n run.host,\n token,\n { source: run.source, team: target.team },\n { limit: 100 },\n ),\n ),\n )\n : Promise.resolve(null),\n ])\n : [null, null];\n\n return ctx.succeed(\n {\n host: run.host,\n team: list.team,\n agent: entry,\n readiness,\n lastRun: runs?.runs[0] ?? null,\n recentEvents: events\n ? events.events.filter((event) =>\n entry.agent?.triggers.some(\n (trigger) => trigger.eventId === event.eventId,\n ),\n )\n : null,\n },\n describeAgentReadiness(\n entry,\n target,\n readiness,\n {\n runs: runs?.runs ?? null,\n events: events?.events ?? null,\n },\n list.scope,\n ),\n );\n}\n\n/** A read `show` can do without: on failure, say so and carry on. */\nasync function activity<T>(\n ctx: CliContext,\n what: string,\n read: () => Promise<T>,\n): Promise<T | null> {\n try {\n return await read();\n } catch (error) {\n ctx.log(\n `Could not read the team's recent ${what}: ${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\n }\n}\n\nasync function policy(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n path: string,\n): Promise<ExitCode> {\n const [action, tool, decision] = run.operands.slice(2);\n const change: TeamAgentPolicyChange = {};\n const reads = approvalFlag(run, 'reads');\n const writes = approvalFlag(run, 'writes');\n if (reads) change.reads = reads;\n if (writes) change.writes = writes;\n\n if (action === 'set') {\n const mode = parseApproval(decision);\n if (!tool || !mode) {\n throw usageError(\n 'policy set needs a tool and auto|approve.',\n `e.g. \"ekanos teams agents policy ${team} ${key} set zendesk_reply_to_ticket approve\".`,\n );\n }\n change.set = { [tool]: mode };\n } else if (action === 'unset') {\n if (!tool || decision) {\n throw usageError(\n 'policy unset needs exactly one tool.',\n `e.g. \"ekanos teams agents policy ${team} ${key} unset zendesk_reply_to_ticket\".`,\n );\n }\n change.unset = [tool];\n } else if (action !== undefined) {\n throw usageError(`Unknown policy action \"${action}\".`, usageFor('agents'));\n }\n\n const writing = Object.keys(change).length > 0;\n const confirmAccess = run.args.flags?.['confirm-access'] === true;\n if (confirmAccess && !writing) {\n throw usageError(\n '--confirm-access goes with a policy change.',\n `To confirm on its own: \"ekanos teams agents confirm ${team} ${key}\".`,\n );\n }\n const result = await run.client.call((token) =>\n call(run.host, token, TeamAgentPolicySchema, {\n method: writing ? 'PUT' : 'GET',\n path,\n source: run.source,\n ...(writing\n ? { body: { ...change, ...(confirmAccess ? { confirmAccess } : {}) } }\n : {}),\n }),\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describePolicy(ctx, result, writing, run.source),\n );\n}\n\n/**\n * `teams agents skills <team> <key> [add|remove <skill>]` — the skills the\n * team's agent reads. A provided agent takes the team's own only where its\n * template allows (`teamCustomization.skills`); its template's stay.\n */\nasync function skills(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n path: string,\n): Promise<ExitCode> {\n const [action, slug, extra] = run.operands.slice(2);\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('agents'));\n }\n let change: TeamAgentSkillsChange | null = null;\n if (action === 'add' || action === 'remove') {\n if (!slug) {\n throw usageError(\n `skills ${action} needs a skill slug.`,\n `e.g. \"ekanos teams agents skills ${team} ${key} ${action} refund-policy\". \"ekanos skills list --team ${team}\" lists the team's skills.`,\n );\n }\n change = { [action]: [slug.trim().toLowerCase()] };\n } else if (action !== undefined) {\n throw usageError(`Unknown skills action \"${action}\".`, usageFor('agents'));\n }\n\n const result = await run.client.call((token) =>\n call(run.host, token, TeamAgentSkillsSchema, {\n method: change ? 'PUT' : 'GET',\n path,\n source: run.source,\n ...(change ? { body: change } : {}),\n }),\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describeSkills(ctx, result, change),\n );\n}\n\nfunction describeSkills(\n ctx: CliContext,\n result: TeamAgentSkills,\n change: TeamAgentSkillsChange | null,\n): string {\n const [verb, slug] = change?.add\n ? ['Attached', change.add[0]]\n : change?.remove\n ? ['Detached', change.remove[0]]\n : [null, null];\n const head = ctx.ui.result({\n title: verb\n ? `${verb} ${slug} ${verb === 'Attached' ? 'to' : 'from'} ${result.slug} on ${result.team.slug}`\n : `Skills of ${result.slug} on ${result.team.slug}`,\n tone: result.editable ? 'ok' : 'warn',\n rows: [\n [\n 'team skills',\n result.editable ? 'allowed' : 'no — follows the template',\n ],\n ],\n notes: result.lockedReason ? [result.lockedReason] : [],\n });\n if (result.skills.length === 0) return `${head}\\n\\nNo skills attached.`;\n return `${head}\\n\\n${ctx.ui.table(\n ['skill', 'name', 'from'],\n result.skills.map((skill) => [\n skill.slug,\n skill.name,\n skill.fromTemplate ? 'the template' : `${skill.level} skill`,\n ]),\n )}`;\n}\n\nfunction describePolicy(\n ctx: CliContext,\n policy: TeamAgentPolicy,\n changed: boolean,\n source: string,\n): string {\n // Absent from an older host: say nothing rather than guess.\n const unconfirmed = policy.accessConfirmed === false;\n const head = ctx.ui.result({\n title: changed\n ? `Policy updated for ${policy.slug} on ${policy.team.slug}`\n : `Policy of ${policy.slug} on ${policy.team.slug}`,\n tone: policy.editable && !unconfirmed ? 'ok' : 'warn',\n rows: [\n ['reads', policy.reads],\n ['writes', policy.writes],\n ['editable', policy.editable ? 'yes' : 'no — follows the template'],\n ],\n notes: [\n ...(policy.lockedReason ? [policy.lockedReason] : []),\n ...(unconfirmed\n ? [\n `Not confirmed: until ${policy.runsAs ?? 'the person it runs as'} confirms it may use their connections, it uses only what needs no confirmation (a looser policy drops a confirmation). They run: ${confirmCommand(policy.team.slug, policy.key, source)} — or, for the team's own agent, confirm on its page in the app`,\n ]\n : []),\n ],\n });\n if (policy.tools.length === 0) {\n return `${head}\\n\\nNo tools yet: connect its integrations or MCP servers.`;\n }\n return `${head}\\n\\n${ctx.ui.table(\n ['tool', 'from', 'effect', 'runs'],\n policy.tools.map((tool) => [\n tool.name,\n tool.source,\n tool.effect,\n `${tool.decision === 'auto' ? 'on its own' : 'waits for approval'}${tool.overridden ? ' (set per tool)' : ''}`,\n ]),\n )}`;\n}\n\n/**\n * The version `confirm` is about to approve — the one waiting on a held\n * agent, else the one it runs — printed before it is sent, so the person\n * confirms what they saw. Null when the team's agent has no version to name.\n */\nasync function shownVersion(\n ctx: CliContext,\n run: TeamAgentRun,\n base: string,\n key: string,\n): Promise<number | null> {\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const agent = list.agents.find((entry) => entry.key === key)?.agent;\n if (!agent) return null;\n if (agent.held) {\n ctx.log(\n `Confirming v${agent.held.waiting} of ${key} on ${list.team.slug}: ${describeHold(agent.held)}. It runs v${agent.version ?? '?'} until then.`,\n );\n return agent.held.waiting;\n }\n if (agent.version === null) return null;\n ctx.log(\n `Confirming ${key} v${agent.version} on ${list.team.slug} may use your connections.`,\n );\n return agent.version;\n}\n\nfunction change(\n run: TeamAgentRun,\n path: string,\n method: 'POST' | 'PUT',\n body: unknown,\n): Promise<TeamAgentChangeResult> {\n return run.client.call((token) =>\n call(run.host, token, TeamAgentChangeResultSchema, {\n method,\n path,\n source: run.source,\n body,\n }),\n );\n}\n\nfunction describeEntry(\n entry: TeamAgentEntry,\n team: string,\n source: string,\n): string {\n const readiness = agentReadiness(entry, { team, source });\n if (!entry.agent) {\n return `\\n${entry.key} — ${entry.name}\\n off · v${entry.publishedVersion ?? '?'} published\\n ${liveLine(readiness)} · Next: ${readiness.next}`;\n }\n const agent = entry.agent;\n const version = versionLabel(agent);\n const lines = [\n `\\n${entry.key} — ${entry.name}`,\n ` ${agent.status} · ${version} · runs as ${agent.runsAs ?? 'nobody'}${agent.accessConfirmed ? '' : ` · access not confirmed (${agent.runsAs ?? 'they'}: ekanos teams agents confirm ${team} ${entry.key})`}`,\n ...(agent.held\n ? [\n ` ! held on v${agent.version ?? '?'}: v${agent.held.waiting} ${describeHold(agent.held)}. It keeps running v${agent.version ?? '?'} until ${agent.runsAs ?? 'the person it runs as'} confirms: ${confirmCommand(team, entry.key, source)}`,\n ]\n : []),\n ` triggers: ${agent.triggers.length === 0 ? 'none' : agent.triggers.map((trigger) => `${trigger.type}${trigger.enabled ? '' : ' (off)'}`).join(', ')}`,\n ` links: ${agent.links.length === 0 ? 'none' : agent.links.map((link) => `${link.kind}${link.mode ? `/${link.mode}` : ''} → ${link.to}`).join(', ')}`,\n ];\n lines.push(\n ...requirementLines(agent.requirements, agent.missing, team, source),\n );\n if (agent.draft) lines.push(...draftLines(team, entry.key));\n lines.push(...channelLines(agent.channels ?? [], team, source));\n lines.push(\n ` ${liveLine(readiness, agent)}${readiness.next ? ` · Next: ${readiness.next}` : ''}`,\n );\n return lines.join('\\n');\n}\n\nfunction versionLabel(agent: {\n version: number | null;\n pinned: boolean;\n draft?: boolean;\n held?: { waiting: number } | null;\n}): string {\n if (agent.draft)\n return `draft v${agent.version ?? '?'} (testing, unpublished)`;\n if (agent.held)\n return `v${agent.version ?? '?'} (held, v${agent.held.waiting} waiting for confirmation)`;\n return `v${agent.version ?? '?'} ${agent.pinned ? '(pinned)' : '(following)'}`;\n}\n\n/** What testing a draft on a team means, and the next step. */\nfunction draftLines(team: string, key: string): string[] {\n return [\n ' Only this team runs the draft, and only when started by hand: its triggers, schedules and hand-offs do not start it, and every write waits for approval.',\n ` Test it: ekanos agents test ${key} --team ${team} --prompt \"…\" --follow. Publishing (ekanos agents publish ${key}) puts this team back to following.`,\n ];\n}\n\n/**\n * An older host ignores `draft` and would have turned on, or unpinned to,\n * the published version instead. Say so rather than report a draft test\n * that is not happening.\n */\nfunction requireDraftHost(\n result: TeamAgentChangeResult,\n verb: 'enabled' | 'pinned',\n) {\n if (result.draft === true) return;\n throw invalidStateError(\n `This host does not support testing a draft on one team: it ${verb} ${result.slug} on v${result.version ?? '?'} ${result.pinned ? '(pinned)' : '(following)'} instead.`,\n `Check with \"ekanos teams agents list ${result.team.slug}\", and test once the host is updated.`,\n );\n}\n\n/**\n * What the agent still needs connected, each with why and the command that\n * makes it; then any product working on another connection than the one its\n * template names (the Source connection unusable, the team's own used).\n */\nexport function requirementLines(\n requirements: Requirement[],\n missing: Requirement[],\n team: string,\n source: string,\n): string[] {\n const missingLines = missing.flatMap((item) => {\n const fix = requirementFix(item, team, source);\n return [\n ` ✗ missing: ${item.name} (${item.kind === 'mcp' ? 'MCP server' : 'integration'} ${item.key})${item.reason && item.reason !== 'not_connected' ? ` — ${REASON_WORDS[item.reason]}` : ''}`,\n ...(fix ? [` → ${fix}`] : []),\n ];\n });\n const fallbacks = requirements\n .filter(\n (item) =>\n item.connected &&\n item.reason !== undefined &&\n item.reason !== null &&\n item.reason !== 'not_connected',\n )\n .flatMap((item) => {\n const fix = requirementFix(item, team, source);\n return [\n ` ! ${item.name} uses the team's own connection: ${REASON_WORDS[item.reason!]}`,\n ...(fix ? [` → ${fix}`] : []),\n ];\n });\n return [...missingLines, ...fallbacks];\n}\n\n/**\n * What the agent's triggers need installed before they can fire: missing\n * ones first, each with the command that installs it. A trigger listed above\n * with its channel missing here is one that will never start a run.\n */\nexport function channelLines(\n channels: ChannelRequirement[],\n team: string,\n source: string,\n): string[] {\n return channels.flatMap((channel) =>\n channel.ready\n ? [\n channel.arrival === undefined || channel.arrival === 'install'\n ? ` ✓ ${channel.name} installed — ${channel.triggers.join(', ')} can fire`\n : ` ✓ ${channel.triggers.join(', ')} reachable (${reachedVia(channel)}${channel.lastDeliveryAt ? `, last delivery ${channel.lastDeliveryAt}` : ''}) — can fire`,\n ]\n : [\n ` ✗ missing: ${channel.problem ?? `${channel.name} not ready`} — ${channel.triggers.join(', ')} can never fire until it is`,\n ` → ${fixLine(channelFix(channel, team, source))}`,\n ],\n );\n}\n\nfunction describeChange(\n result: TeamAgentChangeResult,\n title: string,\n source: string,\n options: { confirmRequested?: boolean } = {},\n): string {\n const covers = result.access ? describeAccess(result.access) : null;\n const lines = [\n `${options.confirmRequested && !result.accessConfirmed ? '!' : '✓'} ${title}`,\n ` ${result.status} · ${versionLabel(result)} · runs as ${result.runsAs ?? 'nobody'}`,\n ];\n if (result.accessConfirmed) {\n if (covers) {\n lines.push(\n result.advanced\n ? ` Now allowed: in runs no one watches it may use ${result.runsAs ? `${result.runsAs}'s` : 'their'} connections to ${covers}.`\n : ` Confirmed: in runs no one watches it may use ${result.runsAs ? `${result.runsAs}'s` : 'their'} connections to ${covers}.`,\n );\n }\n if (result.held) {\n lines.push(\n ` Held on v${result.version ?? '?'}: v${result.held.waiting} ${describeHold(result.held)}. ${result.runsAs ?? 'The person it runs as'} moves it by confirming: ${confirmCommand(result.team.slug, result.key, source)}`,\n );\n }\n } else {\n if (options.confirmRequested) {\n // An older host ignores confirmAccess rather than refusing it.\n lines.push(\n ' This host did not record the confirmation: it may not support confirming from the CLI yet.',\n );\n }\n lines.push(\n ` Not confirmed: until ${result.runsAs ?? 'the person it runs as'} confirms it may use their connections${covers ? ` (to ${covers})` : ''}, it uses only what needs no confirmation.`,\n ` → ${result.runsAs ?? 'They'}, as themselves: ${confirmCommand(result.team.slug, result.key, source)}`,\n );\n }\n lines.push(...requirementLines([], result.missing, result.team.slug, source));\n if (result.draft) lines.push(...draftLines(result.team.slug, result.key));\n lines.push(...channelLines(result.channels ?? [], result.team.slug, source));\n return lines.join('\\n');\n}\n\n/** What a confirmation covers, in words: whose connections, to what. */\nexport function describeAccess(access: TeamAgentAccess): string {\n if (access.scope === 'all') return 'every tool of every product they connect';\n if (access.scope === 'read_only')\n return 'read from every product they connect';\n const parts = [\n ...access.products.map((product) => `${product.name} (every tool)`),\n ...access.tools,\n ];\n return parts.length > 0\n ? parts.join(', ')\n : 'nothing yet (no products granted)';\n}\n\nfunction confirmCommand(team: string, key: string, source: string): string {\n return `ekanos teams agents confirm ${team} ${key} --source ${source}`;\n}\n\nfunction expectOperands(run: TeamAgentRun, count: number) {\n const extra = run.operands[count];\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('agents'));\n }\n}\n\nfunction stringFlag(run: TeamAgentRun, name: string): string | undefined {\n const value = run.args.flags?.[name];\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction parseApproval(value: string | undefined): 'auto' | 'approve' | null {\n return value === 'auto' || value === 'approve' ? value : null;\n}\n\nfunction approvalFlag(\n run: TeamAgentRun,\n name: 'reads' | 'writes',\n): 'auto' | 'approve' | undefined {\n const value = stringFlag(run, name);\n if (value === undefined) return undefined;\n const mode = parseApproval(value);\n if (!mode) {\n throw usageError(`--${name} takes auto or approve.`, usageFor('agents'));\n }\n return mode;\n}\n"]}
1
+ {"version":3,"file":"team-agents-agents.js","sourceRoot":"","sources":["../../src/commands/team-agents-agents.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AgentRunListSchema,\n type ChannelRequirement,\n type Requirement,\n type TeamAgentAccess,\n type TeamAgentChangeResult,\n TeamAgentChangeResultSchema,\n type TeamAgentEntry,\n TeamAgentListSchema,\n type TeamAgentPolicy,\n type TeamAgentPolicyChange,\n TeamAgentPolicySchema,\n type TeamAgentSkills,\n type TeamAgentSkillsChange,\n TeamAgentSkillsSchema,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { invalidStateError, notFoundError, usageError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call, listTeamEvents } from '../teams-api';\nimport {\n REASON_WORDS,\n agentReadiness,\n channelFix,\n describeAgentReadiness,\n fixLine,\n liveLine,\n reachedVia,\n requirementFix,\n} from './team-agent-readiness';\nimport { type TeamAgentRun, requireOperand, usageFor } from './team-agents';\n\n/**\n * `ekanos teams agents list|show|enable|confirm|disable|pin|unpin|policy|skills` —\n * a team's provided agents, turned on, versioned, given an approval policy\n * and skills by the Source admin. `enable|pin … --draft` puts one team on\n * the template's latest, unpublished version to test it there before\n * publishing. `confirm` (and `--confirm-access`) records the caller's own\n * confirmation that it may use its connections in runs no one watches:\n * whoever sets an agent up confirms it (plan 247.2), never a member.\n * `show` answers \"is this agent live, and if not, why?\" for one agent; `list`\n * ends each agent with the same verdict.\n */\nexport async function runTeamAgentsArea(\n ctx: CliContext,\n run: TeamAgentRun,\n): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'agents');\n const base = `/api/partner/teams/${encodeURIComponent(team)}/agents`;\n\n if (run.verb === 'list') {\n expectOperands(run, 1);\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const target = { team: list.team.slug, source: run.source };\n return ctx.succeed(\n {\n host: run.host,\n ...list,\n agents: list.agents.map((entry) => ({\n ...entry,\n readiness: agentReadiness(entry, target),\n })),\n },\n [\n ctx.ui.result({\n title:\n list.agents.length === 0\n ? `No agents are provided for ${list.team.slug}`\n : `Agents for ${list.team.slug}`,\n tone: list.agents.length === 0 ? 'warn' : 'ok',\n }),\n ...list.agents.map((entry) =>\n describeEntry(entry, list.team.slug, run.source),\n ),\n list.mcpServers.length > 0\n ? `\\nMCP servers: ${list.mcpServers.map((server) => `${server.key} (${server.status})`).join(', ')}`\n : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n );\n }\n\n const key = requireOperand(run.operands[1], 'agent key', 'agents');\n const path = `${base}/${encodeURIComponent(key)}`;\n\n switch (run.verb) {\n case 'show':\n expectOperands(run, 2);\n return show(ctx, run, base, key);\n case 'enable': {\n expectOperands(run, 2);\n const as = stringFlag(run, 'as');\n const draft = run.args.flags?.draft === true;\n const confirmAccess = run.args.flags?.['confirm-access'] === true;\n const result = await change(run, `${path}/enable`, 'POST', {\n ...(as ? { as } : {}),\n ...(draft ? { draft: true } : {}),\n ...(confirmAccess ? { confirmAccess: true } : {}),\n });\n if (draft) requireDraftHost(result, 'enabled');\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${\n draft\n ? `Testing draft v${result.version ?? '?'} of ${result.slug} on ${result.team.slug}`\n : `Turned on ${result.slug} for ${result.team.slug}`\n }${confirmAccess && result.accessConfirmed ? ', and you confirmed what it may use' : ''}`,\n run.source,\n { confirmRequested: confirmAccess },\n ),\n );\n }\n case 'confirm': {\n expectOperands(run, 2);\n // Confirm what the person is shown, never a publish that lands after:\n // the host refuses if the version moved (AGENT_VERSION_CHANGED).\n const shown = await shownVersion(ctx, run, base, key);\n const result = await change(\n run,\n `${path}/confirm`,\n 'POST',\n shown === null ? {} : { expectedVersion: shown },\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `You confirmed what ${result.slug} on ${result.team.slug} may use`,\n run.source,\n { confirmRequested: true },\n ),\n );\n }\n case 'disable': {\n expectOperands(run, 2);\n if (!run.args.yes) {\n throw invalidStateError(\n `Turning ${key} off for ${team} pauses it: nothing starts it for that team until it is turned on again, and turning it on is refused once the person it runs as has left the team.`,\n `Re-run with --yes: ekanos teams agents disable ${team} ${key} --yes`,\n );\n }\n const result = await change(run, `${path}/disable`, 'POST', {});\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `Turned off ${result.slug} for ${result.team.slug}`,\n run.source,\n ),\n );\n }\n case 'pin': {\n if (run.args.flags?.draft === true) {\n expectOperands(run, 2);\n const result = await change(run, `${path}/pin`, 'PUT', {\n version: null,\n draft: true,\n });\n requireDraftHost(result, 'pinned');\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `Testing draft v${result.version ?? '?'} of ${result.slug} on ${result.team.slug}`,\n run.source,\n ),\n );\n }\n expectOperands(run, 3);\n const version = Number(run.operands[2]);\n if (!Number.isInteger(version) || version < 1) {\n throw usageError(\n run.operands[2]\n ? `\"${run.operands[2]}\" is not a version number.`\n : 'Name the version to pin.',\n `e.g. \"ekanos teams agents pin ${team} ${key} 3\", or \"--draft\" to test the unpublished draft. \"ekanos agents show ${key}\" lists its versions.`,\n );\n }\n const result = await change(run, `${path}/pin`, 'PUT', { version });\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${result.team.slug} stays on v${result.version ?? version} of ${result.slug}`,\n run.source,\n ),\n );\n }\n case 'unpin': {\n expectOperands(run, 2);\n const result = await change(run, `${path}/pin`, 'PUT', { version: null });\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `${result.team.slug} follows each published version of ${result.slug}`,\n run.source,\n ),\n );\n }\n case 'policy':\n return policy(ctx, run, team, key, `${path}/policy`);\n case 'skills':\n return skills(ctx, run, team, key, `${path}/skills`);\n default:\n throw usageError(\n `Unknown teams agents subcommand \"${run.verb}\".`,\n usageFor('agents'),\n );\n }\n}\n\n/**\n * One agent on one team: each product and whose connection it acts through,\n * each trigger and how its events reach the agent (with the last event and\n * the last run), access, \"Live: yes/no\" and exactly one Next. Reads the\n * team's agents, then its recent runs and events; a host without the\n * activity reads still answers the rest.\n */\nasync function show(\n ctx: CliContext,\n run: TeamAgentRun,\n base: string,\n key: string,\n): Promise<ExitCode> {\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const entry = list.agents.find((candidate) => candidate.key === key);\n if (!entry) {\n throw notFoundError(\n `No agent \"${key}\" is provided for ${list.team.slug}.`,\n `\"ekanos teams agents list ${list.team.slug}\" lists the agents provided for it.`,\n );\n }\n const target = { team: list.team.slug, source: run.source };\n const readiness = agentReadiness(entry, target);\n const [runs, events] = entry.agent\n ? await Promise.all([\n activity(ctx, 'runs', () =>\n run.client.call((token) =>\n call(run.host, token, AgentRunListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(target.team)}/runs?agent=${encodeURIComponent(key)}`,\n source: run.source,\n }),\n ),\n ),\n entry.agent.triggers.some((trigger) => trigger.eventId)\n ? activity(ctx, 'events', () =>\n run.client.call((token) =>\n listTeamEvents(\n run.host,\n token,\n { source: run.source, team: target.team },\n { limit: 100 },\n ),\n ),\n )\n : Promise.resolve(null),\n ])\n : [null, null];\n\n return ctx.succeed(\n {\n host: run.host,\n team: list.team,\n agent: entry,\n readiness,\n lastRun: runs?.runs[0] ?? null,\n recentEvents: events\n ? events.events.filter((event) =>\n entry.agent?.triggers.some(\n (trigger) => trigger.eventId === event.eventId,\n ),\n )\n : null,\n },\n describeAgentReadiness(\n entry,\n target,\n readiness,\n {\n runs: runs?.runs ?? null,\n events: events?.events ?? null,\n },\n list.scope,\n ),\n );\n}\n\n/** A read `show` can do without: on failure, say so and carry on. */\nasync function activity<T>(\n ctx: CliContext,\n what: string,\n read: () => Promise<T>,\n): Promise<T | null> {\n try {\n return await read();\n } catch (error) {\n ctx.log(\n `Could not read the team's recent ${what}: ${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\n }\n}\n\nasync function policy(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n path: string,\n): Promise<ExitCode> {\n const [action, tool, decision] = run.operands.slice(2);\n const change: TeamAgentPolicyChange = {};\n const reads = approvalFlag(run, 'reads');\n const writes = approvalFlag(run, 'writes');\n if (reads) change.reads = reads;\n if (writes) change.writes = writes;\n\n if (action === 'set') {\n const mode = parseApproval(decision);\n if (!tool || !mode) {\n throw usageError(\n 'policy set needs a tool and auto|approve.',\n `e.g. \"ekanos teams agents policy ${team} ${key} set zendesk_reply_to_ticket approve\".`,\n );\n }\n change.set = { [tool]: mode };\n } else if (action === 'unset') {\n if (!tool || decision) {\n throw usageError(\n 'policy unset needs exactly one tool.',\n `e.g. \"ekanos teams agents policy ${team} ${key} unset zendesk_reply_to_ticket\".`,\n );\n }\n change.unset = [tool];\n } else if (action !== undefined) {\n throw usageError(`Unknown policy action \"${action}\".`, usageFor('agents'));\n }\n\n const writing = Object.keys(change).length > 0;\n const confirmAccess = run.args.flags?.['confirm-access'] === true;\n if (confirmAccess && !writing) {\n throw usageError(\n '--confirm-access goes with a policy change.',\n `To confirm on its own: \"ekanos teams agents confirm ${team} ${key}\".`,\n );\n }\n const result = await run.client.call((token) =>\n call(run.host, token, TeamAgentPolicySchema, {\n method: writing ? 'PUT' : 'GET',\n path,\n source: run.source,\n ...(writing\n ? { body: { ...change, ...(confirmAccess ? { confirmAccess } : {}) } }\n : {}),\n }),\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describePolicy(ctx, result, writing, run.source),\n );\n}\n\n/**\n * `teams agents skills <team> <key> [add|remove <skill>]` — the skills the\n * team's agent reads. A provided agent takes the team's own only where its\n * template allows (`teamCustomization.skills`); its template's stay.\n */\nasync function skills(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n path: string,\n): Promise<ExitCode> {\n const [action, slug, extra] = run.operands.slice(2);\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('agents'));\n }\n let change: TeamAgentSkillsChange | null = null;\n if (action === 'add' || action === 'remove') {\n if (!slug) {\n throw usageError(\n `skills ${action} needs a skill slug.`,\n `e.g. \"ekanos teams agents skills ${team} ${key} ${action} refund-policy\". \"ekanos skills list --team ${team}\" lists the team's skills.`,\n );\n }\n change = { [action]: [slug.trim().toLowerCase()] };\n } else if (action !== undefined) {\n throw usageError(`Unknown skills action \"${action}\".`, usageFor('agents'));\n }\n\n const result = await run.client.call((token) =>\n call(run.host, token, TeamAgentSkillsSchema, {\n method: change ? 'PUT' : 'GET',\n path,\n source: run.source,\n ...(change ? { body: change } : {}),\n }),\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describeSkills(ctx, result, change),\n );\n}\n\nfunction describeSkills(\n ctx: CliContext,\n result: TeamAgentSkills,\n change: TeamAgentSkillsChange | null,\n): string {\n const [verb, slug] = change?.add\n ? ['Attached', change.add[0]]\n : change?.remove\n ? ['Detached', change.remove[0]]\n : [null, null];\n const head = ctx.ui.result({\n title: verb\n ? `${verb} ${slug} ${verb === 'Attached' ? 'to' : 'from'} ${result.slug} on ${result.team.slug}`\n : `Skills of ${result.slug} on ${result.team.slug}`,\n tone: result.editable ? 'ok' : 'warn',\n rows: [\n [\n 'team skills',\n result.editable ? 'allowed' : 'no — follows the template',\n ],\n ],\n notes: result.lockedReason ? [result.lockedReason] : [],\n });\n if (result.skills.length === 0) return `${head}\\n\\nNo skills attached.`;\n return `${head}\\n\\n${ctx.ui.table(\n ['skill', 'name', 'from'],\n result.skills.map((skill) => [\n skill.slug,\n skill.name,\n skill.fromTemplate ? 'the template' : `${skill.level} skill`,\n ]),\n )}`;\n}\n\nfunction describePolicy(\n ctx: CliContext,\n policy: TeamAgentPolicy,\n changed: boolean,\n source: string,\n): string {\n // Absent from an older host: say nothing rather than guess.\n const unconfirmed = policy.accessConfirmed === false;\n const head = ctx.ui.result({\n title: changed\n ? `Policy updated for ${policy.slug} on ${policy.team.slug}`\n : `Policy of ${policy.slug} on ${policy.team.slug}`,\n tone: policy.editable && !unconfirmed ? 'ok' : 'warn',\n rows: [\n ['reads', policy.reads],\n ['writes', policy.writes],\n ['editable', policy.editable ? 'yes' : 'no — follows the template'],\n ],\n notes: [\n ...(policy.lockedReason ? [policy.lockedReason] : []),\n ...(unconfirmed\n ? [\n `Not confirmed: until you or one of the team's agent managers confirms what it may use, it uses only what needs no confirmation (a looser policy drops a confirmation). Confirm it as yourself with --confirm-access on the change, or for a provided agent ${confirmCommand(policy.team.slug, policy.key, source)}; a team manager can also confirm on its page in the app`,\n ]\n : []),\n ],\n });\n if (policy.tools.length === 0) {\n return `${head}\\n\\nNo tools yet: connect its integrations or MCP servers.`;\n }\n return `${head}\\n\\n${ctx.ui.table(\n ['tool', 'from', 'effect', 'runs'],\n policy.tools.map((tool) => [\n tool.name,\n tool.source,\n tool.effect,\n `${tool.decision === 'auto' ? 'on its own' : 'waits for approval'}${tool.overridden ? ' (set per tool)' : ''}`,\n ]),\n )}`;\n}\n\n/**\n * The version `confirm` is about to approve — the one it runs — printed\n * before it is sent, so the person confirms what they saw. Null when the\n * team's agent has no version to name.\n */\nasync function shownVersion(\n ctx: CliContext,\n run: TeamAgentRun,\n base: string,\n key: string,\n): Promise<number | null> {\n const list = await run.client.call((token) =>\n call(run.host, token, TeamAgentListSchema, {\n method: 'GET',\n path: base,\n source: run.source,\n }),\n );\n const agent = list.agents.find((entry) => entry.key === key)?.agent;\n if (!agent || agent.version === null) return null;\n ctx.log(\n `Confirming what ${key} v${agent.version} on ${list.team.slug} may use${agent.runsAs ? ` (it runs as ${agent.runsAs})` : ''}.`,\n );\n return agent.version;\n}\n\nfunction change(\n run: TeamAgentRun,\n path: string,\n method: 'POST' | 'PUT',\n body: unknown,\n): Promise<TeamAgentChangeResult> {\n return run.client.call((token) =>\n call(run.host, token, TeamAgentChangeResultSchema, {\n method,\n path,\n source: run.source,\n body,\n }),\n );\n}\n\nfunction describeEntry(\n entry: TeamAgentEntry,\n team: string,\n source: string,\n): string {\n const readiness = agentReadiness(entry, { team, source });\n if (!entry.agent) {\n return `\\n${entry.key} — ${entry.name}\\n off · v${entry.publishedVersion ?? '?'} published\\n ${liveLine(readiness)} · Next: ${readiness.next}`;\n }\n const agent = entry.agent;\n const version = versionLabel(agent);\n const lines = [\n `\\n${entry.key} — ${entry.name}`,\n ` ${agent.status} · ${version} · runs as ${agent.runsAs ?? 'nobody'}${agent.accessConfirmed ? '' : ` · access not confirmed (${confirmCommand(team, entry.key, source)})`}`,\n ` triggers: ${agent.triggers.length === 0 ? 'none' : agent.triggers.map((trigger) => `${trigger.type}${trigger.enabled ? '' : ' (off)'}`).join(', ')}`,\n ` links: ${agent.links.length === 0 ? 'none' : agent.links.map((link) => `${link.kind}${link.mode ? `/${link.mode}` : ''} → ${link.to}`).join(', ')}`,\n ];\n lines.push(\n ...requirementLines(agent.requirements, agent.missing, team, source),\n );\n if (agent.draft) lines.push(...draftLines(team, entry.key));\n lines.push(...channelLines(agent.channels ?? [], team, source));\n lines.push(\n ` ${liveLine(readiness)}${readiness.next ? ` · Next: ${readiness.next}` : ''}`,\n );\n return lines.join('\\n');\n}\n\nfunction versionLabel(agent: {\n version: number | null;\n pinned: boolean;\n draft?: boolean;\n}): string {\n if (agent.draft)\n return `draft v${agent.version ?? '?'} (testing, unpublished)`;\n return `v${agent.version ?? '?'} ${agent.pinned ? '(pinned)' : '(following)'}`;\n}\n\n/** What testing a draft on a team means, and the next step. */\nfunction draftLines(team: string, key: string): string[] {\n return [\n ' Only this team runs the draft, and only when started by hand: its triggers, schedules and hand-offs do not start it, and every write waits for approval.',\n ` Test it: ekanos agents test ${key} --team ${team} --prompt \"…\" --follow. Publishing (ekanos agents publish ${key}) puts this team back to following.`,\n ];\n}\n\n/**\n * An older host ignores `draft` and would have turned on, or unpinned to,\n * the published version instead. Say so rather than report a draft test\n * that is not happening.\n */\nfunction requireDraftHost(\n result: TeamAgentChangeResult,\n verb: 'enabled' | 'pinned',\n) {\n if (result.draft === true) return;\n throw invalidStateError(\n `This host does not support testing a draft on one team: it ${verb} ${result.slug} on v${result.version ?? '?'} ${result.pinned ? '(pinned)' : '(following)'} instead.`,\n `Check with \"ekanos teams agents list ${result.team.slug}\", and test once the host is updated.`,\n );\n}\n\n/**\n * What the agent still needs connected, each with why and the command that\n * makes it; then any product working on another connection than the one its\n * template names (the Source connection unusable, the team's own used).\n */\nexport function requirementLines(\n requirements: Requirement[],\n missing: Requirement[],\n team: string,\n source: string,\n): string[] {\n const missingLines = missing.flatMap((item) => {\n const fix = requirementFix(item, team, source);\n return [\n ` ✗ missing: ${item.name} (${item.kind === 'mcp' ? 'MCP server' : 'integration'} ${item.key})${item.reason && item.reason !== 'not_connected' ? ` — ${REASON_WORDS[item.reason]}` : ''}`,\n ...(fix ? [` → ${fix}`] : []),\n ];\n });\n const fallbacks = requirements\n .filter(\n (item) =>\n item.connected &&\n item.reason !== undefined &&\n item.reason !== null &&\n item.reason !== 'not_connected',\n )\n .flatMap((item) => {\n const fix = requirementFix(item, team, source);\n return [\n ` ! ${item.name} uses the team's own connection: ${REASON_WORDS[item.reason!]}`,\n ...(fix ? [` → ${fix}`] : []),\n ];\n });\n return [...missingLines, ...fallbacks];\n}\n\n/**\n * What the agent's triggers need installed before they can fire: missing\n * ones first, each with the command that installs it. A trigger listed above\n * with its channel missing here is one that will never start a run.\n */\nexport function channelLines(\n channels: ChannelRequirement[],\n team: string,\n source: string,\n): string[] {\n return channels.flatMap((channel) =>\n channel.ready\n ? [\n channel.arrival === undefined || channel.arrival === 'install'\n ? ` ✓ ${channel.name} installed — ${channel.triggers.join(', ')} can fire`\n : ` ✓ ${channel.triggers.join(', ')} reachable (${reachedVia(channel)}${channel.lastDeliveryAt ? `, last delivery ${channel.lastDeliveryAt}` : ''}) — can fire`,\n ]\n : [\n ` ✗ missing: ${channel.problem ?? `${channel.name} not ready`} — ${channel.triggers.join(', ')} can never fire until it is`,\n ` → ${fixLine(channelFix(channel, team, source))}`,\n ],\n );\n}\n\nfunction describeChange(\n result: TeamAgentChangeResult,\n title: string,\n source: string,\n options: { confirmRequested?: boolean } = {},\n): string {\n const covers = result.access ? describeAccess(result.access) : null;\n const lines = [\n `${options.confirmRequested && !result.accessConfirmed ? '!' : '✓'} ${title}`,\n ` ${result.status} · ${versionLabel(result)} · runs as ${result.runsAs ?? 'nobody'}`,\n ];\n if (result.accessConfirmed) {\n if (covers) {\n lines.push(\n ` Confirmed: in runs no one watches it may use ${result.runsAs ? `${result.runsAs}'s` : 'their'} connections to ${covers}.`,\n );\n }\n } else {\n if (options.confirmRequested) {\n // An older host ignores confirmAccess rather than refusing it.\n lines.push(\n ' This host did not record the confirmation: it may not support confirming from the CLI yet.',\n );\n }\n lines.push(\n ` Not confirmed: until you or one of the team's agent managers confirms what it may use${covers ? ` (${result.runsAs ? `${result.runsAs}'s` : 'its'} connections, to ${covers})` : ''}, it uses only what needs no confirmation.`,\n ` → ${confirmCommand(result.team.slug, result.key, source)}`,\n );\n }\n lines.push(...requirementLines([], result.missing, result.team.slug, source));\n if (result.draft) lines.push(...draftLines(result.team.slug, result.key));\n lines.push(...channelLines(result.channels ?? [], result.team.slug, source));\n return lines.join('\\n');\n}\n\n/** What a confirmation covers, in words: whose connections, to what. */\nexport function describeAccess(access: TeamAgentAccess): string {\n if (access.scope === 'all') return 'every tool of every product they connect';\n if (access.scope === 'read_only')\n return 'read from every product they connect';\n const parts = [\n ...access.products.map((product) => `${product.name} (every tool)`),\n ...access.tools,\n ];\n return parts.length > 0\n ? parts.join(', ')\n : 'nothing yet (no products granted)';\n}\n\nfunction confirmCommand(team: string, key: string, source: string): string {\n return `ekanos teams agents confirm ${team} ${key} --source ${source}`;\n}\n\nfunction expectOperands(run: TeamAgentRun, count: number) {\n const extra = run.operands[count];\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('agents'));\n }\n}\n\nfunction stringFlag(run: TeamAgentRun, name: string): string | undefined {\n const value = run.args.flags?.[name];\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction parseApproval(value: string | undefined): 'auto' | 'approve' | null {\n return value === 'auto' || value === 'approve' ? value : null;\n}\n\nfunction approvalFlag(\n run: TeamAgentRun,\n name: 'reads' | 'writes',\n): 'auto' | 'approve' | undefined {\n const value = stringFlag(run, name);\n if (value === undefined) return undefined;\n const mode = parseApproval(value);\n if (!mode) {\n throw usageError(`--${name} takes auto or approve.`, usageFor('agents'));\n }\n return mode;\n}\n"]}
@@ -84,7 +84,7 @@ export async function runTeamOverview(ctx, client, host, source, team) {
84
84
  'Agents',
85
85
  ...(agentRows.length === 0
86
86
  ? [' none provided']
87
- : agentRows.map((row, index) => { var _a; return ` ${pad(row.key)} ${liveLine(row.readiness, (_a = agents.agents[index]) === null || _a === void 0 ? void 0 : _a.agent)}${row.readiness.next ? ` · Next: ${row.readiness.next}` : ''}`; })),
87
+ : agentRows.map((row) => ` ${pad(row.key)} ${liveLine(row.readiness)}${row.readiness.next ? ` · Next: ${row.readiness.next}` : ''}`)),
88
88
  '',
89
89
  `"ekanos teams agents show ${team} <key>" explains one agent; "ekanos teams show ${team} <product>" one integration.`,
90
90
  ].join('\n'));
@@ -1 +1 @@
1
- {"version":3,"file":"teams-overview.js","sourceRoot":"","sources":["../../src/commands/teams-overview.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type CatalogProduct,\n type Requirement,\n SourceCatalogSchema,\n TeamAgentListSchema,\n type TeamIntegrationStatus,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { notFoundError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call, listTeams, showTeamIntegration } from '../teams-api';\nimport { scopeFix, scopeHiddenWords } from './scope-notice';\nimport {\n REASON_WORDS,\n agentReadiness,\n liveLine,\n requirementFix,\n} from './team-agent-readiness';\nimport type { TeamsClient } from './teams';\n\n/**\n * `ekanos teams show <team>` with no product: one screen per team (CLI audit\n * P1-7) — its members, one line per Integration the Source has enabled (whose\n * connection, or the step to make it), and one line per provided agent with\n * the same verdict as `teams agents show`. Reads the team list, the Source\n * catalog, the team's agents, and each enabled Integration's status.\n */\nexport async function runTeamOverview(\n ctx: CliContext,\n client: TeamsClient,\n host: string,\n source: string,\n team: string,\n): Promise<ExitCode> {\n const [teams, catalog, agents] = await Promise.all([\n client.call((token) => listTeams(host, token, source)),\n client.call((token) =>\n call(host, token, SourceCatalogSchema, {\n method: 'GET',\n path: '/api/partner/catalog',\n source,\n }),\n ),\n client.call((token) =>\n call(host, token, TeamAgentListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(team)}/agents`,\n source,\n }),\n ),\n ]);\n const ref = teams.teams.find((entry) => entry.slug === team);\n if (!ref) {\n throw notFoundError(\n `No team \"${team}\" on ${teams.source.slug}.`,\n 'Run \"ekanos teams list\" to see the teams on this Source.',\n );\n }\n\n const integrations = catalog.products.filter(\n (product) =>\n product.kind === 'integration' && product.availability === 'enabled',\n );\n const statuses = await inBatches(integrations, 4, (product) =>\n client.call((token) =>\n showTeamIntegration(host, token, {\n source,\n team,\n product: product.slug,\n }),\n ),\n );\n\n // What the team's agents need of each product, and whose connection it is.\n const needs = new Map<string, Requirement>();\n for (const entry of agents.agents) {\n for (const item of entry.agent?.requirements ?? []) {\n if (item.kind === 'product' && !needs.has(item.key)) {\n needs.set(item.key, item);\n }\n }\n }\n\n const target = { team, source };\n const agentRows = agents.agents.map((entry) => ({\n key: entry.key,\n name: entry.name,\n on: entry.agent?.status === 'active',\n readiness: agentReadiness(entry, target),\n }));\n const integrationRows = integrations.map((product, index) => ({\n slug: product.slug,\n name: product.name,\n line: withScope(\n integrationLine(\n product,\n statuses[index]!,\n needs.get(product.slug),\n target,\n ),\n statuses[index]!,\n { ...target, product: product.slug },\n ),\n }));\n\n const width = Math.max(\n 8,\n ...integrations.map((product) => product.slug.length),\n ...agents.agents.map((entry) => entry.key.length),\n );\n const pad = (label: string) => label.padEnd(width);\n const live = agentRows.filter((row) => row.readiness.live).length;\n\n return ctx.succeed(\n {\n host,\n team: { slug: ref.slug, name: ref.name, memberCount: ref.memberCount },\n integrations: integrationRows.map((row, index) => ({\n slug: row.slug,\n name: row.name,\n status: statuses[index],\n agentsNeed: needs.get(row.slug) ?? null,\n })),\n agents: agentRows,\n },\n [\n `${ref.name} (${ref.slug}) · ${ref.memberCount} member${ref.memberCount === 1 ? '' : 's'} · ${agentRows.filter((row) => row.on).length} agent${agentRows.filter((row) => row.on).length === 1 ? '' : 's'} on, ${live} live`,\n '',\n 'Integrations',\n ...(integrationRows.length === 0\n ? [' none enabled for the Source']\n : integrationRows.flatMap((row) => [\n ` ${pad(row.slug)} ${row.line.state}`,\n ...(row.line.fix ? [` ${pad('')} → ${row.line.fix}`] : []),\n ])),\n '',\n 'Agents',\n ...(agentRows.length === 0\n ? [' none provided']\n : agentRows.map(\n (row, index) =>\n ` ${pad(row.key)} ${liveLine(row.readiness, agents.agents[index]?.agent)}${row.readiness.next ? ` · Next: ${row.readiness.next}` : ''}`,\n )),\n '',\n `\"ekanos teams agents show ${team} <key>\" explains one agent; \"ekanos teams show ${team} <product>\" one integration.`,\n ].join('\\n'),\n );\n}\n\nfunction integrationLine(\n product: CatalogProduct,\n status: TeamIntegrationStatus,\n need: Requirement | undefined,\n target: { team: string; source: string },\n): { state: string; fix: string | null } {\n if (need?.owner === 'source' || need?.via === 'source') {\n const problem =\n need.reason && need.reason !== 'not_connected'\n ? REASON_WORDS[need.reason]\n : null;\n const state = !need.connected\n ? `✗ via Source connection — ${problem ?? REASON_WORDS.not_connected}`\n : need.via === 'source'\n ? `✓ via Source connection${need.viaDetail ? ` · routes: ${need.viaDetail}` : ''}`\n : `! via team connection (${problem ?? 'the Source connection is not used'})`;\n return {\n state,\n fix:\n need.connected && need.via === 'source'\n ? null\n : requirementFix(need, target.team, target.source),\n };\n }\n if (!product.requiresActivation) {\n return { state: '✓ works as shipped', fix: null };\n }\n if (product.scope === 'user') {\n const person =\n need?.via === 'person' && need.viaDetail\n ? need.connected\n ? ` · ✓ ${need.viaDetail} connected (an agent runs as them)`\n : ` · ✗ ${need.viaDetail} not connected (an agent runs as them)`\n : '';\n return {\n state: `personal: each person connects their own${person}`,\n fix:\n need && !need.connected\n ? requirementFix(need, target.team, target.source)\n : null,\n };\n }\n const webhooks = status.teamApps.flatMap((app) => app.webhooks);\n const made = webhooks.filter((webhook) => webhook.endpoint).length;\n const webhookNote =\n webhooks.length > 0 ? ` · webhook URL ${made}/${webhooks.length} made` : '';\n if (status.activation) {\n const by = status.activation.activatedBy?.email;\n return {\n state: `✓ connected${status.activation.activatedAt ? ` ${status.activation.activatedAt.slice(0, 10)}` : ''}${by ? ` by ${by}` : ''}${webhookNote}`,\n fix: null,\n };\n }\n return {\n state: `✗ not connected${webhookNote}`,\n fix: `npx @ekanos/cli teams connect ${target.team} ${product.slug} --source ${target.source}`,\n };\n}\n\n/** A product the team's scopes hide from it in the app says so, whatever else is true. */\nfunction withScope(\n line: { state: string; fix: string | null },\n status: TeamIntegrationStatus,\n target: { team: string; source: string; product: string },\n): { state: string; fix: string | null } {\n if (!status.scope?.hidden) return line;\n return {\n state: `${line.state} · ! ${scopeHiddenWords(status.scope)}`,\n fix: line.fix ?? scopeFix(status.scope, target),\n };\n}\n\n/** Each item through `read`, at most `size` at a time, in order. */\nasync function inBatches<T, R>(\n items: T[],\n size: number,\n read: (item: T) => Promise<R>,\n): Promise<R[]> {\n const results: R[] = [];\n for (let start = 0; start < items.length; start += size) {\n results.push(\n ...(await Promise.all(items.slice(start, start + size).map(read))),\n );\n }\n return results;\n}\n"]}
1
+ {"version":3,"file":"teams-overview.js","sourceRoot":"","sources":["../../src/commands/teams-overview.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type CatalogProduct,\n type Requirement,\n SourceCatalogSchema,\n TeamAgentListSchema,\n type TeamIntegrationStatus,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { notFoundError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call, listTeams, showTeamIntegration } from '../teams-api';\nimport { scopeFix, scopeHiddenWords } from './scope-notice';\nimport {\n REASON_WORDS,\n agentReadiness,\n liveLine,\n requirementFix,\n} from './team-agent-readiness';\nimport type { TeamsClient } from './teams';\n\n/**\n * `ekanos teams show <team>` with no product: one screen per team (CLI audit\n * P1-7) — its members, one line per Integration the Source has enabled (whose\n * connection, or the step to make it), and one line per provided agent with\n * the same verdict as `teams agents show`. Reads the team list, the Source\n * catalog, the team's agents, and each enabled Integration's status.\n */\nexport async function runTeamOverview(\n ctx: CliContext,\n client: TeamsClient,\n host: string,\n source: string,\n team: string,\n): Promise<ExitCode> {\n const [teams, catalog, agents] = await Promise.all([\n client.call((token) => listTeams(host, token, source)),\n client.call((token) =>\n call(host, token, SourceCatalogSchema, {\n method: 'GET',\n path: '/api/partner/catalog',\n source,\n }),\n ),\n client.call((token) =>\n call(host, token, TeamAgentListSchema, {\n method: 'GET',\n path: `/api/partner/teams/${encodeURIComponent(team)}/agents`,\n source,\n }),\n ),\n ]);\n const ref = teams.teams.find((entry) => entry.slug === team);\n if (!ref) {\n throw notFoundError(\n `No team \"${team}\" on ${teams.source.slug}.`,\n 'Run \"ekanos teams list\" to see the teams on this Source.',\n );\n }\n\n const integrations = catalog.products.filter(\n (product) =>\n product.kind === 'integration' && product.availability === 'enabled',\n );\n const statuses = await inBatches(integrations, 4, (product) =>\n client.call((token) =>\n showTeamIntegration(host, token, {\n source,\n team,\n product: product.slug,\n }),\n ),\n );\n\n // What the team's agents need of each product, and whose connection it is.\n const needs = new Map<string, Requirement>();\n for (const entry of agents.agents) {\n for (const item of entry.agent?.requirements ?? []) {\n if (item.kind === 'product' && !needs.has(item.key)) {\n needs.set(item.key, item);\n }\n }\n }\n\n const target = { team, source };\n const agentRows = agents.agents.map((entry) => ({\n key: entry.key,\n name: entry.name,\n on: entry.agent?.status === 'active',\n readiness: agentReadiness(entry, target),\n }));\n const integrationRows = integrations.map((product, index) => ({\n slug: product.slug,\n name: product.name,\n line: withScope(\n integrationLine(\n product,\n statuses[index]!,\n needs.get(product.slug),\n target,\n ),\n statuses[index]!,\n { ...target, product: product.slug },\n ),\n }));\n\n const width = Math.max(\n 8,\n ...integrations.map((product) => product.slug.length),\n ...agents.agents.map((entry) => entry.key.length),\n );\n const pad = (label: string) => label.padEnd(width);\n const live = agentRows.filter((row) => row.readiness.live).length;\n\n return ctx.succeed(\n {\n host,\n team: { slug: ref.slug, name: ref.name, memberCount: ref.memberCount },\n integrations: integrationRows.map((row, index) => ({\n slug: row.slug,\n name: row.name,\n status: statuses[index],\n agentsNeed: needs.get(row.slug) ?? null,\n })),\n agents: agentRows,\n },\n [\n `${ref.name} (${ref.slug}) · ${ref.memberCount} member${ref.memberCount === 1 ? '' : 's'} · ${agentRows.filter((row) => row.on).length} agent${agentRows.filter((row) => row.on).length === 1 ? '' : 's'} on, ${live} live`,\n '',\n 'Integrations',\n ...(integrationRows.length === 0\n ? [' none enabled for the Source']\n : integrationRows.flatMap((row) => [\n ` ${pad(row.slug)} ${row.line.state}`,\n ...(row.line.fix ? [` ${pad('')} → ${row.line.fix}`] : []),\n ])),\n '',\n 'Agents',\n ...(agentRows.length === 0\n ? [' none provided']\n : agentRows.map(\n (row) =>\n ` ${pad(row.key)} ${liveLine(row.readiness)}${row.readiness.next ? ` · Next: ${row.readiness.next}` : ''}`,\n )),\n '',\n `\"ekanos teams agents show ${team} <key>\" explains one agent; \"ekanos teams show ${team} <product>\" one integration.`,\n ].join('\\n'),\n );\n}\n\nfunction integrationLine(\n product: CatalogProduct,\n status: TeamIntegrationStatus,\n need: Requirement | undefined,\n target: { team: string; source: string },\n): { state: string; fix: string | null } {\n if (need?.owner === 'source' || need?.via === 'source') {\n const problem =\n need.reason && need.reason !== 'not_connected'\n ? REASON_WORDS[need.reason]\n : null;\n const state = !need.connected\n ? `✗ via Source connection — ${problem ?? REASON_WORDS.not_connected}`\n : need.via === 'source'\n ? `✓ via Source connection${need.viaDetail ? ` · routes: ${need.viaDetail}` : ''}`\n : `! via team connection (${problem ?? 'the Source connection is not used'})`;\n return {\n state,\n fix:\n need.connected && need.via === 'source'\n ? null\n : requirementFix(need, target.team, target.source),\n };\n }\n if (!product.requiresActivation) {\n return { state: '✓ works as shipped', fix: null };\n }\n if (product.scope === 'user') {\n const person =\n need?.via === 'person' && need.viaDetail\n ? need.connected\n ? ` · ✓ ${need.viaDetail} connected (an agent runs as them)`\n : ` · ✗ ${need.viaDetail} not connected (an agent runs as them)`\n : '';\n return {\n state: `personal: each person connects their own${person}`,\n fix:\n need && !need.connected\n ? requirementFix(need, target.team, target.source)\n : null,\n };\n }\n const webhooks = status.teamApps.flatMap((app) => app.webhooks);\n const made = webhooks.filter((webhook) => webhook.endpoint).length;\n const webhookNote =\n webhooks.length > 0 ? ` · webhook URL ${made}/${webhooks.length} made` : '';\n if (status.activation) {\n const by = status.activation.activatedBy?.email;\n return {\n state: `✓ connected${status.activation.activatedAt ? ` ${status.activation.activatedAt.slice(0, 10)}` : ''}${by ? ` by ${by}` : ''}${webhookNote}`,\n fix: null,\n };\n }\n return {\n state: `✗ not connected${webhookNote}`,\n fix: `npx @ekanos/cli teams connect ${target.team} ${product.slug} --source ${target.source}`,\n };\n}\n\n/** A product the team's scopes hide from it in the app says so, whatever else is true. */\nfunction withScope(\n line: { state: string; fix: string | null },\n status: TeamIntegrationStatus,\n target: { team: string; source: string; product: string },\n): { state: string; fix: string | null } {\n if (!status.scope?.hidden) return line;\n return {\n state: `${line.state} · ! ${scopeHiddenWords(status.scope)}`,\n fix: line.fix ?? scopeFix(status.scope, target),\n };\n}\n\n/** Each item through `read`, at most `size` at a time, in order. */\nasync function inBatches<T, R>(\n items: T[],\n size: number,\n read: (item: T) => Promise<R>,\n): Promise<R[]> {\n const results: R[] = [];\n for (let start = 0; start < items.length; start += size) {\n results.push(\n ...(await Promise.all(items.slice(start, start + size).map(read))),\n );\n }\n return results;\n}\n"]}
package/dist/index.js CHANGED
@@ -236,11 +236,11 @@ const COMMAND_SPECS = {
236
236
  type: 'boolean',
237
237
  description: "agents enable|pin: put this team alone on the template's unpublished draft",
238
238
  },
239
- // `teams agents enable|policy`: also confirm, as yourself, that the
240
- // agent may use your connections.
239
+ // `teams agents enable|policy`: also confirm, as yourself, what the
240
+ // agent may use (whoever sets it up confirms it, plan 247.2).
241
241
  'confirm-access': {
242
242
  type: 'boolean',
243
- description: 'agents enable|policy: also confirm, as yourself, that it may use your connections',
243
+ description: 'agents enable|policy: also confirm, as yourself, what it may use',
244
244
  },
245
245
  reads: {
246
246
  type: 'string',
@@ -459,10 +459,10 @@ const COMMAND_SPECS = {
459
459
  description: 'policy, triggers, links, overrides: publish the new version too (with --yes)',
460
460
  },
461
461
  // `publish | rollback` (and `--publish`): also confirm, as yourself, on
462
- // every team where the agent runs as you.
462
+ // every team running the version with no confirmation.
463
463
  'confirm-access': {
464
464
  type: 'boolean',
465
- description: 'publish, rollback, --publish: also confirm, as yourself, on every team where it runs as you',
465
+ description: 'publish, rollback, --publish: also confirm, as yourself, on every team on that version not yet confirmed',
466
466
  },
467
467
  },
468
468
  skills: {
@@ -682,11 +682,10 @@ const USAGE = [
682
682
  ' not, why: each connection and whose it is, each trigger and how its',
683
683
  ' events arrive, last event and run, one Next command)',
684
684
  ' | agents enable <team> <key> [--as <member-email>]',
685
- ' [--draft] [--confirm-access] (--confirm-access: runs as you and',
686
- ' confirms it may use your connections) | agents confirm <team> <key>',
687
- ' (you, the person it runs as, confirm it may use your connections;',
688
- ' nobody else can; on an agent held on an earlier version it moves',
689
- ' it to the version waiting) | agents disable <team> <key> --yes | agents',
685
+ ' [--draft] [--confirm-access] (--confirm-access: you also confirm',
686
+ ' what it may use) | agents confirm <team> <key> (you confirm what',
687
+ ' it may use, as yourself: whoever sets an agent up confirms it, never',
688
+ ' a team member) | agents disable <team> <key> --yes | agents',
690
689
  ' unpin <team> <key> | agents pin <team> <key> <version> | agents pin',
691
690
  ' <team> <key> --draft (this team only runs the unpublished draft, by',
692
691
  ' hand, every write waiting; the next publish puts it back to',
@@ -727,10 +726,10 @@ const USAGE = [
727
726
  ' archive <key> --yes (refused while any team has it on; lists',
728
727
  ' each team and the command to turn it off) | unarchive <key>',
729
728
  ' publish <key> [--to <n>] [--confirm-access] --yes | rollback <key>',
730
- ' --to <n> [--confirm-access] --yes (a team whose person confirmed less',
731
- ' than the version reaches is held on its earlier version until they',
732
- ' confirm; --confirm-access: you confirm, and move, every team where',
733
- ' it runs as you; the output lists every other team held, and the command)',
729
+ ' --to <n> [--confirm-access] --yes (every following team moves; one',
730
+ ' that had confirmed stays confirmed, in your name: your publish is the',
731
+ ' confirmation; --confirm-access: you also confirm every team on that',
732
+ ' version not yet confirmed; the output lists teams pinned elsewhere)',
734
733
  ' test <key> --team <slug> (--prompt "…" | --input <file.json>)',
735
734
  ' [--follow] (runs the latest, unpublished version on one team;',
736
735
  ' same grant, policy, approvals and audit; marked as a test; to',