@ekanos/cli 0.13.0 → 0.14.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.
Files changed (173) hide show
  1. package/README.md +25 -8
  2. package/dist/agents-api.d.ts +11 -2
  3. package/dist/agents-api.js +39 -3
  4. package/dist/agents-api.js.map +1 -1
  5. package/dist/apps-api.js +2 -2
  6. package/dist/apps-api.js.map +1 -1
  7. package/dist/auth/ekanos-api.d.ts +16 -2
  8. package/dist/auth/ekanos-api.js +101 -15
  9. package/dist/auth/ekanos-api.js.map +1 -1
  10. package/dist/auth/host-trust.d.ts +46 -0
  11. package/dist/auth/host-trust.js +79 -0
  12. package/dist/auth/host-trust.js.map +1 -0
  13. package/dist/auth/session.d.ts +10 -1
  14. package/dist/auth/session.js +28 -28
  15. package/dist/auth/session.js.map +1 -1
  16. package/dist/commands/agents-edit.d.ts +6 -2
  17. package/dist/commands/agents-edit.js +57 -26
  18. package/dist/commands/agents-edit.js.map +1 -1
  19. package/dist/commands/agents.d.ts +13 -2
  20. package/dist/commands/agents.js +148 -36
  21. package/dist/commands/agents.js.map +1 -1
  22. package/dist/commands/apps.d.ts +2 -0
  23. package/dist/commands/apps.js +16 -12
  24. package/dist/commands/apps.js.map +1 -1
  25. package/dist/commands/catalog.js +7 -6
  26. package/dist/commands/catalog.js.map +1 -1
  27. package/dist/commands/knowledge.d.ts +19 -0
  28. package/dist/commands/knowledge.js +119 -27
  29. package/dist/commands/knowledge.js.map +1 -1
  30. package/dist/commands/login.d.ts +4 -0
  31. package/dist/commands/login.js +30 -2
  32. package/dist/commands/login.js.map +1 -1
  33. package/dist/commands/logout.d.ts +9 -1
  34. package/dist/commands/logout.js +56 -7
  35. package/dist/commands/logout.js.map +1 -1
  36. package/dist/commands/publish.js +3 -3
  37. package/dist/commands/publish.js.map +1 -1
  38. package/dist/commands/reviewers.d.ts +2 -0
  39. package/dist/commands/reviewers.js +7 -3
  40. package/dist/commands/reviewers.js.map +1 -1
  41. package/dist/commands/routes.d.ts +2 -0
  42. package/dist/commands/routes.js +42 -9
  43. package/dist/commands/routes.js.map +1 -1
  44. package/dist/commands/runs.d.ts +13 -2
  45. package/dist/commands/runs.js +96 -15
  46. package/dist/commands/runs.js.map +1 -1
  47. package/dist/commands/scope-notice.d.ts +21 -0
  48. package/dist/commands/scope-notice.js +35 -0
  49. package/dist/commands/scope-notice.js.map +1 -0
  50. package/dist/commands/skills.d.ts +7 -1
  51. package/dist/commands/skills.js +80 -24
  52. package/dist/commands/skills.js.map +1 -1
  53. package/dist/commands/sources.d.ts +1 -1
  54. package/dist/commands/sources.js +126 -12
  55. package/dist/commands/sources.js.map +1 -1
  56. package/dist/commands/status.js +5 -4
  57. package/dist/commands/status.js.map +1 -1
  58. package/dist/commands/team-agent-readiness.d.ts +59 -0
  59. package/dist/commands/team-agent-readiness.js +341 -0
  60. package/dist/commands/team-agent-readiness.js.map +1 -0
  61. package/dist/commands/team-agents-agents.d.ts +24 -3
  62. package/dist/commands/team-agents-agents.js +336 -35
  63. package/dist/commands/team-agents-agents.js.map +1 -1
  64. package/dist/commands/team-agents-mcp.js +32 -3
  65. package/dist/commands/team-agents-mcp.js.map +1 -1
  66. package/dist/commands/team-agents-triggers.js +230 -55
  67. package/dist/commands/team-agents-triggers.js.map +1 -1
  68. package/dist/commands/team-agents.d.ts +3 -1
  69. package/dist/commands/team-agents.js +27 -7
  70. package/dist/commands/team-agents.js.map +1 -1
  71. package/dist/commands/teams-channel-install.d.ts +24 -0
  72. package/dist/commands/teams-channel-install.js +94 -0
  73. package/dist/commands/teams-channel-install.js.map +1 -0
  74. package/dist/commands/teams-connect.d.ts +41 -0
  75. package/dist/commands/teams-connect.js +212 -57
  76. package/dist/commands/teams-connect.js.map +1 -1
  77. package/dist/commands/teams-events.d.ts +12 -0
  78. package/dist/commands/teams-events.js +138 -0
  79. package/dist/commands/teams-events.js.map +1 -0
  80. package/dist/commands/teams-onboard.d.ts +11 -3
  81. package/dist/commands/teams-onboard.js +60 -7
  82. package/dist/commands/teams-onboard.js.map +1 -1
  83. package/dist/commands/teams-overview.d.ts +11 -0
  84. package/dist/commands/teams-overview.js +160 -0
  85. package/dist/commands/teams-overview.js.map +1 -0
  86. package/dist/commands/teams-scope.d.ts +10 -0
  87. package/dist/commands/teams-scope.js +109 -0
  88. package/dist/commands/teams-scope.js.map +1 -0
  89. package/dist/commands/teams.d.ts +4 -2
  90. package/dist/commands/teams.js +113 -14
  91. package/dist/commands/teams.js.map +1 -1
  92. package/dist/commands/upgrade.js +12 -2
  93. package/dist/commands/upgrade.js.map +1 -1
  94. package/dist/commands/use.js +2 -2
  95. package/dist/commands/use.js.map +1 -1
  96. package/dist/commands/whoami.js +1 -1
  97. package/dist/commands/whoami.js.map +1 -1
  98. package/dist/connections-api.js +1 -1
  99. package/dist/connections-api.js.map +1 -1
  100. package/dist/delegate.js +11 -4
  101. package/dist/delegate.js.map +1 -1
  102. package/dist/harness-scaffold.js +12 -0
  103. package/dist/harness-scaffold.js.map +1 -1
  104. package/dist/index.d.ts +6 -0
  105. package/dist/index.js +683 -167
  106. package/dist/index.js.map +1 -1
  107. package/dist/knowledge-api.d.ts +46 -0
  108. package/dist/knowledge-api.js +32 -1
  109. package/dist/knowledge-api.js.map +1 -1
  110. package/dist/open-url.d.ts +16 -0
  111. package/dist/open-url.js +73 -0
  112. package/dist/open-url.js.map +1 -0
  113. package/dist/parse-argv.d.ts +2 -0
  114. package/dist/parse-argv.js.map +1 -1
  115. package/dist/publish-api.d.ts +2 -1
  116. package/dist/publish-api.js +4 -3
  117. package/dist/publish-api.js.map +1 -1
  118. package/dist/pull-write.d.ts +27 -0
  119. package/dist/pull-write.js +60 -0
  120. package/dist/pull-write.js.map +1 -0
  121. package/dist/routes-api.d.ts +3 -0
  122. package/dist/routes-api.js +9 -4
  123. package/dist/routes-api.js.map +1 -1
  124. package/dist/runs-api.d.ts +7 -1
  125. package/dist/runs-api.js +21 -6
  126. package/dist/runs-api.js.map +1 -1
  127. package/dist/safe-fs.d.ts +2 -0
  128. package/dist/safe-fs.js +12 -6
  129. package/dist/safe-fs.js.map +1 -1
  130. package/dist/secret-file.d.ts +17 -0
  131. package/dist/secret-file.js +69 -0
  132. package/dist/secret-file.js.map +1 -0
  133. package/dist/skills-api.d.ts +10 -2
  134. package/dist/skills-api.js +37 -2
  135. package/dist/skills-api.js.map +1 -1
  136. package/dist/source-products-api.d.ts +4 -0
  137. package/dist/source-products-api.js +14 -4
  138. package/dist/source-products-api.js.map +1 -1
  139. package/dist/source-target.js +2 -1
  140. package/dist/source-target.js.map +1 -1
  141. package/dist/sources-api.d.ts +2 -1
  142. package/dist/sources-api.js +3 -2
  143. package/dist/sources-api.js.map +1 -1
  144. package/dist/team-connect-api.d.ts +44 -2
  145. package/dist/team-connect-api.js +19 -7
  146. package/dist/team-connect-api.js.map +1 -1
  147. package/dist/teams-api.d.ts +41 -1
  148. package/dist/teams-api.js +97 -19
  149. package/dist/teams-api.js.map +1 -1
  150. package/dist/toolchain-api.d.ts +9 -0
  151. package/dist/toolchain-api.js +17 -2
  152. package/dist/toolchain-api.js.map +1 -1
  153. package/dist/toolchain-resolve.d.ts +3 -0
  154. package/dist/toolchain-resolve.js +15 -1
  155. package/dist/toolchain-resolve.js.map +1 -1
  156. package/dist/toolchain.d.ts +6 -0
  157. package/dist/toolchain.js +19 -0
  158. package/dist/toolchain.js.map +1 -1
  159. package/dist/update-notice.js +2 -1
  160. package/dist/update-notice.js.map +1 -1
  161. package/package.json +2 -2
  162. package/templates/AGENTS.md.tmpl +6 -1
  163. package/templates/claude-skill.md.tmpl +5 -0
  164. package/templates/package.json.tmpl +4 -4
  165. package/templates/skills/build-agent/SKILL.md +103 -17
  166. package/templates/skills/build-agent/references/agent-json.md +4 -2
  167. package/templates/skills/build-agent/references/rollout.md +27 -4
  168. package/templates/skills/build-agent/references/set-up-an-integration.md +55 -7
  169. package/templates/skills/build-agent/references/skills.md +20 -1
  170. package/templates/skills/build-agent/references/triggers.md +46 -11
  171. package/templates/skills/build-integration/references/widget-design.md +3 -3
  172. package/templates/skills/ekanos-platform/SKILL.md +43 -16
  173. package/templates/skills/polish-widgets/references/patterns.md +2 -2
@@ -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 type TeamAgentChangeResult,\n TeamAgentChangeResultSchema,\n type TeamAgentEntry,\n TeamAgentListSchema,\n type TeamAgentPolicy,\n type TeamAgentPolicyChange,\n TeamAgentPolicySchema,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { usageError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call } from '../teams-api';\nimport { type TeamAgentRun, requireOperand, usageFor } from './team-agents';\n\n/**\n * `ekanos teams agents list|enable|disable|pin|unpin|policy` — a team's\n * provided agents, turned on, versioned and given an approval policy by the\n * Source admin.\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 return ctx.succeed(\n { host: run.host, ...list },\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(describeEntry),\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 'enable': {\n expectOperands(run, 2);\n const as = stringFlag(run, 'as');\n const result = await change(run, `${path}/enable`, 'POST', {\n ...(as ? { as } : {}),\n });\n return ctx.succeed(\n { host: run.host, ...result },\n describeChange(\n result,\n `Turned on ${result.slug} for ${result.team.slug}`,\n ),\n );\n }\n case 'disable': {\n expectOperands(run, 2);\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 ),\n );\n }\n case 'pin': {\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\". \"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 ),\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 ),\n );\n }\n case 'policy':\n return policy(ctx, run, team, key, `${path}/policy`);\n default:\n throw usageError(\n `Unknown teams agents subcommand \"${run.verb}\".`,\n usageFor('agents'),\n );\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 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 ? { body: change } : {}),\n }),\n );\n return ctx.succeed(\n { host: run.host, ...result },\n describePolicy(ctx, result, writing),\n );\n}\n\nfunction describePolicy(\n ctx: CliContext,\n policy: TeamAgentPolicy,\n changed: boolean,\n): string {\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 ? 'ok' : 'warn',\n rows: [\n ['reads', policy.reads],\n ['writes', policy.writes],\n ['editable', policy.editable ? 'yes' : 'no — follows the template'],\n ],\n notes: policy.lockedReason ? [policy.lockedReason] : [],\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\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(entry: TeamAgentEntry): string {\n if (!entry.agent) {\n return `\\n${entry.key} — ${entry.name}\\n off · v${entry.publishedVersion ?? '?'} published · turn on: ekanos teams agents enable <team> ${entry.key}`;\n }\n const agent = entry.agent;\n const version = `v${agent.version ?? '?'} ${agent.pinned ? '(pinned)' : '(following)'}`;\n const lines = [\n `\\n${entry.key} — ${entry.name}`,\n ` ${agent.status} · ${version} · runs as ${agent.runsAs ?? 'nobody'}${agent.accessConfirmed ? '' : ' · access not confirmed'}`,\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 if (agent.missing.length > 0) {\n lines.push(\n ` missing: ${agent.missing.map((item) => `${item.name} (${item.kind === 'mcp' ? 'MCP server' : 'integration'} ${item.key})`).join(', ')}`,\n );\n }\n return lines.join('\\n');\n}\n\nfunction describeChange(result: TeamAgentChangeResult, title: string): string {\n const lines = [\n `✓ ${title}`,\n ` ${result.status} · v${result.version ?? '?'} ${result.pinned ? '(pinned)' : '(following)'} · runs as ${result.runsAs ?? 'nobody'}`,\n ];\n if (!result.accessConfirmed) {\n lines.push(\n ` ${result.runsAs ?? 'The person it runs as'} confirms it may use their connections on the agent's page in the app.`,\n );\n }\n if (result.missing.length > 0) {\n lines.push(\n ` Still to connect: ${result.missing.map((item) => `${item.name} (${item.key})`).join(', ')}`,\n );\n }\n return lines.join('\\n');\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 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,10 +1,10 @@
1
- import { TeamMcpListSchema, TeamMcpStatusSchema, } from '@ekanos/integration-schema';
2
- import { usageError } from '../errors.js';
1
+ import { TeamMcpListSchema, TeamMcpRemoveResultSchema, TeamMcpStatusSchema, } from '@ekanos/integration-schema';
2
+ import { invalidStateError, usageError } from '../errors.js';
3
3
  import { call } from '../teams-api.js';
4
4
  import { promptHidden } from './apps.js';
5
5
  import { requireOperand, usageFor } from './team-agents.js';
6
6
  /**
7
- * `ekanos teams mcp list|add|status|token|effect` — a team's MCP servers,
7
+ * `ekanos teams mcp list|add|status|token|effect|remove` — a team's MCP servers,
8
8
  * set up by its Source admin (`/api/partner/teams/<team>/mcp/*`).
9
9
  *
10
10
  * A bearer token is only ever typed at the admin's terminal with hidden
@@ -25,6 +25,8 @@ export async function runTeamMcp(ctx, run) {
25
25
  return token(ctx, run);
26
26
  case 'effect':
27
27
  return effect(ctx, run);
28
+ case 'remove':
29
+ return remove(ctx, run);
28
30
  default:
29
31
  throw usageError(`Unknown teams mcp subcommand "${run.verb}".`, usageFor('mcp'));
30
32
  }
@@ -66,6 +68,33 @@ async function add(ctx, run) {
66
68
  }
67
69
  return ctx.succeed(Object.assign({ host: run.host }, added), renderStatus(ctx, added, `Added ${key} to ${team}`));
68
70
  }
71
+ /**
72
+ * `teams mcp remove <team> <server-key> --yes`: the app's Remove — every
73
+ * agent of the team loses the server, and its credentials are deleted.
74
+ */
75
+ async function remove(ctx, run) {
76
+ const team = requireOperand(run.operands[0], 'team slug', 'mcp');
77
+ const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');
78
+ noExtra(run, 2);
79
+ if (!run.args.yes) {
80
+ throw invalidStateError(`Removing ${key} from ${team} takes it away from every agent of the team that uses it, and deletes its stored token or sign-in.`, `Re-run with --yes: ekanos teams mcp remove ${team} ${key} --yes`);
81
+ }
82
+ const removed = await run.client.call((accessToken) => call(run.host, accessToken, TeamMcpRemoveResultSchema, {
83
+ method: 'DELETE',
84
+ path: `${mcpPath(team)}/${encodeURIComponent(key)}`,
85
+ source: run.source,
86
+ }));
87
+ return ctx.succeed(Object.assign({ host: run.host }, removed), ctx.ui.result({
88
+ title: `Removed ${removed.removed} from ${removed.team.slug}`,
89
+ tone: 'warn',
90
+ rows: [
91
+ [
92
+ 'Agents that lost it',
93
+ removed.agents.length > 0 ? removed.agents.join(', ') : 'none',
94
+ ],
95
+ ],
96
+ }));
97
+ }
69
98
  async function status(ctx, run) {
70
99
  const team = requireOperand(run.operands[0], 'team slug', 'mcp');
71
100
  const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');
@@ -1 +1 @@
1
- {"version":3,"file":"team-agents-mcp.js","sourceRoot":"","sources":["../../src/commands/team-agents-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAGjB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAqB,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE5E;;;;;;;;GAQG;AAEH,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAW,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAe,EACf,GAAiB;IAEjB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B;YACE,MAAM,UAAU,CACd,iCAAiC,GAAG,CAAC,IAAI,IAAI,EAC7C,QAAQ,CAAC,KAAK,CAAC,CAChB,CAAC;IACN,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAe,EAAE,GAAiB;IACpD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CACjD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC7C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,iBAAG,IAAI,EAAE,GAAG,CAAC,IAAI,IAAK,IAAI,GAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAe,EAAE,GAAiB;;IACnD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEhB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,UAAU,CACd,qCAAqC,EACrC,6BAA6B,IAAI,IAAI,GAAG,8CAA8C,CACvF,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,SAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,mCAAI,OAAO,CAAC;IACpD,IAAI,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,CACd,6CAA6C,QAAQ,KAAK,EAC1D,QAAQ,CAAC,KAAK,CAAC,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAmC,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAClD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,kBACF,GAAG;YACH,GAAG;YACH,IAAI,IACD,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACtE;KACF,CAAC,CACH,CAAC;IAEF,IAAI,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,iBACd,IAAI,EAAE,GAAG,CAAC,IAAI,IAAK,KAAK,GAC1B,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,IAAI,EAAE,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAe,EAAE,GAAiB;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CACjD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC/C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE;QACnD,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,iBACd,IAAI,EAAE,GAAG,CAAC,IAAI,IAAK,IAAI,GACzB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC,CAC7C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAe,EAAE,GAAiB;IACrD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,CACd,4FAA4F,EAC5F,qEAAqE,IAAI,IAAI,GAAG,aAAa,GAAG,CAAC,MAAM,EAAE,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,GAAe,EACf,GAAiB,EACjB,IAAY,EACZ,GAAW;;IAEX,MAAM,KAAK,GAAG,CACZ,MAAM,OAAC,GAAG,CAAC,IAAI,CAAC,SAAS,mCAAI,YAAY,CAAC,CACxC,oBAAoB,GAAG,OAAO,IAAI,aAAa,CAChD,CACF,CAAC,IAAI,EAAE,CAAC;IACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,UAAU,CACd,sCAAsC,EACtC,+BAA+B,IAAI,IAAI,GAAG,qBAAqB,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAClD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC/C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ;QACzD,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KACvB,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,iBACd,IAAI,EAAE,GAAG,CAAC,IAAI,IAAK,KAAK,GAC1B,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,gBAAgB,IAAI,EAAE,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAe,EAAE,GAAiB;;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,MAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,IAAI,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,0CAAE,IAAI,GAAG,WAAW,EAAE,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,CACd,kDAAkD,EAClD,gCAAgC,IAAI,IAAI,GAAG,iDAAiD,IAAI,IAAI,GAAG,oBAAoB,CAC5H,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAClD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC/C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,UAAU;QAC3D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;KAC9B,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,iBACd,IAAI,EAAE,GAAG,CAAC,IAAI,IAAK,KAAK,GAC1B,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,OAAO,GAAG,aAAa,KAAK,EAAE,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,IAAiB;IACpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC5C,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL,iCAAiC,IAAI,CAAC,IAAI,CAAC,IAAI,gDAAgD;aAChG;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACzC,IAAI,EACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC;YAC1D,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI;QACV,IAAI,EAAE;YACJ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG;gBACV,cAAc,CAAC,MAAM,CAAC;aACvB,CAAC;YACF,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAoB,EAAE,CAAC;gBAC/C,KAAK,CAAC,GAAG;gBACT,eAAe,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,EAAE;aAClF,CAAC;SACH;QACD,KAAK,EAAE;YACL,4BAA4B,IAAI,CAAC,IAAI,CAAC,IAAI,uDAAuD;SAClG;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CACnB,GAAe,EACf,IAAmB,EACnB,KAAa;IAEb,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CACR,uHAAuH,EACvH,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACrE,KAAK,CAAC,IAAI,CACR,qEAAqE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CACpG,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,8EAA8E,CAC/E,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,2EAA2E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,cAAc,CACtH,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;QACnB,KAAK;QACL,IAAI,EAAE,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACtE,IAAI,EAAE;YACJ,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACvB,CAAC,CAAC;oBACE;wBACE,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,CAAC,IAAI,EAAE,EAAE,CACP,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAkC,IAAI,CAAC,SAAS,GAAG,EAAE,CAC9G;qBACoB;iBACxB;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB;IAC3C,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,iBAAiB,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAC9E,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;YACzB,CAAC,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7D,CAAC,CAAC,WAAW,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9D,MAAM,IAAI,GAAG;QACX,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CACtB,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,GAAG,CAC9H;QACD,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACrB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CACjE;KACF,CAAC;IACF,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU,CAAC,GAAiB,EAAE,IAAY;;IACjD,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,IAAI,CAAC,KAAK,0CAAG,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,OAAO,CAAC,GAAiB,EAAE,KAAa;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,UAAU,CAAC,wBAAwB,KAAK,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAe,EAAE,GAAiB;;IACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAC,GAAG,CAAC,IAAI,CAAC,UAAU,mCAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAChF,CAAC","sourcesContent":["import {\n type TeamMcpList,\n TeamMcpListSchema,\n type TeamMcpServer,\n type TeamMcpStatus,\n TeamMcpStatusSchema,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { usageError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call } from '../teams-api';\nimport { promptHidden } from './apps';\nimport { type TeamAgentRun, requireOperand, usageFor } from './team-agents';\n\n/**\n * `ekanos teams mcp list|add|status|token|effect` — a team's MCP servers,\n * set up by its Source admin (`/api/partner/teams/<team>/mcp/*`).\n *\n * A bearer token is only ever typed at the admin's terminal with hidden\n * input — never a flag, a file or a non-interactive run — so an agent\n * driving the CLI never handles it. An OAuth server is signed in by a team\n * member in their own browser: the CLI prints the link for them.\n */\n\nconst AUTH_FLAGS = { none: 'none', token: 'bearer', oauth: 'oauth' } as const;\n\nexport async function runTeamMcp(\n ctx: CliContext,\n run: TeamAgentRun,\n): Promise<ExitCode> {\n switch (run.verb) {\n case 'list':\n return list(ctx, run);\n case 'add':\n return add(ctx, run);\n case 'status':\n return status(ctx, run);\n case 'token':\n return token(ctx, run);\n case 'effect':\n return effect(ctx, run);\n default:\n throw usageError(\n `Unknown teams mcp subcommand \"${run.verb}\".`,\n usageFor('mcp'),\n );\n }\n}\n\nasync function list(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n noExtra(run, 1);\n const data = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpListSchema, {\n method: 'GET',\n path: mcpPath(team),\n source: run.source,\n }),\n );\n return ctx.succeed({ host: run.host, ...data }, renderList(ctx, data));\n}\n\nasync function add(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n\n const url = stringFlag(run, 'url');\n if (!url) {\n throw usageError(\n 'teams mcp add needs the server URL.',\n `Run \"ekanos teams mcp add ${team} ${key} --url https://… [--auth none|token|oauth]\".`,\n );\n }\n const authFlag = stringFlag(run, 'auth') ?? 'oauth';\n if (!(authFlag in AUTH_FLAGS)) {\n throw usageError(\n `--auth must be none, token or oauth (got \"${authFlag}\").`,\n usageFor('mcp'),\n );\n }\n const auth = AUTH_FLAGS[authFlag as keyof typeof AUTH_FLAGS];\n\n const added = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'POST',\n path: mcpPath(team),\n source: run.source,\n body: {\n key,\n url,\n auth,\n ...(stringFlag(run, 'name') ? { name: stringFlag(run, 'name') } : {}),\n },\n }),\n );\n\n if (auth === 'bearer' && canPrompt(ctx, run)) {\n return enterToken(ctx, run, team, key);\n }\n return ctx.succeed(\n { host: run.host, ...added },\n renderStatus(ctx, added, `Added ${key} to ${team}`),\n );\n}\n\nasync function status(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n const data = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'GET',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}`,\n source: run.source,\n }),\n );\n return ctx.succeed(\n { host: run.host, ...data },\n renderStatus(ctx, data, `${key} on ${team}`),\n );\n}\n\nasync function token(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n if (!canPrompt(ctx, run)) {\n throw usageError(\n \"teams mcp token takes the server's token at a terminal, never in a script or an agent run.\",\n `Run it yourself in your terminal: npx @ekanos/cli teams mcp token ${team} ${key} --source ${run.source}`,\n );\n }\n return enterToken(ctx, run, team, key);\n}\n\nasync function enterToken(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n): Promise<ExitCode> {\n const value = (\n await (run.args.askSecret ?? promptHidden)(\n `Bearer token for ${key} on ${team} (hidden): `,\n )\n ).trim();\n if (!value) {\n throw usageError(\n 'No token entered; nothing was saved.',\n `Run \"ekanos teams mcp token ${team} ${key}\" when you have it.`,\n );\n }\n const saved = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'PUT',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}/token`,\n source: run.source,\n body: { token: value },\n }),\n );\n return ctx.succeed(\n { host: run.host, ...saved },\n renderStatus(ctx, saved, `Saved ${key}'s token for ${team}`),\n );\n}\n\nasync function effect(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n const tool = run.operands[2]?.trim();\n const value = run.operands[3]?.trim().toLowerCase();\n noExtra(run, 4);\n if (!tool || (value !== 'read' && value !== 'write')) {\n throw usageError(\n 'teams mcp effect needs a tool and read or write.',\n `Run \"ekanos teams mcp effect ${team} ${key} <tool> read|write\"; \"ekanos teams mcp status ${team} ${key}\" lists the tools.`,\n );\n }\n const saved = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'PUT',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}/effects`,\n source: run.source,\n body: { tool, effect: value },\n }),\n );\n return ctx.succeed(\n { host: run.host, ...saved },\n renderStatus(ctx, saved, `${tool} on ${key} is now a ${value}`),\n );\n}\n\nfunction renderList(ctx: CliContext, data: TeamMcpList): string {\n if (data.servers.length === 0 && data.missing.length === 0) {\n return ctx.ui.result({\n title: `No MCP servers on ${data.team.slug}`,\n tone: 'warn',\n notes: [\n `Add one: ekanos teams mcp add ${data.team.slug} <key> --url https://… --auth none|token|oauth`,\n ],\n });\n }\n return ctx.ui.result({\n title: `MCP servers on ${data.team.slug}`,\n tone:\n data.missing.some((entry) => entry.required) ||\n data.servers.some((server) => server.status !== 'connected')\n ? 'warn'\n : 'ok',\n rows: [\n ...data.servers.map((server): [string, string] => [\n server.key,\n describeServer(server),\n ]),\n ...data.missing.map((entry): [string, string] => [\n entry.key,\n `✗ missing — ${entry.agent} ${entry.required ? 'needs' : 'can use'} ${entry.url}`,\n ]),\n ],\n notes: [\n `\"ekanos teams mcp status ${data.team.slug} <key>\" shows a server's tools and how to connect it.`,\n ],\n });\n}\n\nfunction renderStatus(\n ctx: CliContext,\n data: TeamMcpStatus,\n title: string,\n): string {\n const { server } = data;\n const notes: string[] = [];\n if (data.syncError) notes.push(`Listing its tools failed: ${data.syncError}`);\n if (data.connectUrl) {\n notes.push(\n 'A team member who manages agents opens this link, signed in to the team, to connect it (you cannot sign in for them):',\n data.connectUrl,\n );\n } else if (server.auth === 'bearer' && server.status !== 'connected') {\n notes.push(\n `Enter its token in your terminal: npx @ekanos/cli teams mcp token ${data.team.slug} ${server.key}`,\n );\n }\n if (data.effectsFromTemplate) {\n notes.push(\n \"Its tools' effects come from the agent template (toolEffects in agent.json).\",\n );\n } else if (data.tools.some((tool) => !tool.confirmed)) {\n notes.push(\n `Unconfirmed tools count as writes. Mark a read: ekanos teams mcp effect ${data.team.slug} ${server.key} <tool> read`,\n );\n }\n return ctx.ui.result({\n title,\n tone: server.status === 'connected' && !data.syncError ? 'ok' : 'warn',\n rows: [\n ['Server', describeServer(server)],\n ['URL', server.url],\n ...(data.tools.length > 0\n ? [\n [\n 'Tools',\n data.tools.map(\n (tool) =>\n `${tool.name} · ${tool.effect}${tool.confirmed ? '' : ` (unconfirmed, server suggests ${tool.suggested})`}`,\n ),\n ] as [string, string[]],\n ]\n : []),\n ],\n notes,\n });\n}\n\nfunction describeServer(server: TeamMcpServer): string {\n const state =\n server.status === 'connected'\n ? `✓ connected · ${server.toolCount} tool${server.toolCount === 1 ? '' : 's'}`\n : server.status === 'error'\n ? `✗ error${server.lastError ? `: ${server.lastError}` : ''}`\n : `✗ needs ${server.auth === 'oauth' ? 'sign-in' : server.auth === 'bearer' ? 'a token' : 'a refresh'}`;\n const auth = server.auth === 'bearer' ? 'token' : server.auth;\n const used = [\n ...server.declaredBy.map(\n (use) =>\n `${use.agent} (${use.required ? 'required' : 'optional'}${use.urlMatches ? '' : ', different URL — not the one it needs'})`,\n ),\n ...server.agents.filter(\n (agent) => !server.declaredBy.some((use) => use.agent === agent),\n ),\n ];\n return `${state} · ${auth}${used.length > 0 ? ` · used by ${used.join(', ')}` : ''}`;\n}\n\nfunction mcpPath(team: string): string {\n return `/api/partner/teams/${encodeURIComponent(team)}/mcp`;\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 noExtra(run: TeamAgentRun, count: number): void {\n const extra = run.operands[count];\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('mcp'));\n }\n}\n\nfunction canPrompt(ctx: CliContext, run: TeamAgentRun): boolean {\n return !ctx.jsonMode && (run.args.stdinIsTTY ?? process.stdin.isTTY === true);\n}\n"]}
1
+ {"version":3,"file":"team-agents-mcp.js","sourceRoot":"","sources":["../../src/commands/team-agents-mcp.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type TeamMcpList,\n TeamMcpListSchema,\n TeamMcpRemoveResultSchema,\n type TeamMcpServer,\n type TeamMcpStatus,\n TeamMcpStatusSchema,\n} from '@ekanos/integration-schema';\n\nimport type { CliContext } from '../context';\nimport { invalidStateError, usageError } from '../errors';\nimport type { ExitCode } from '../exit-codes';\nimport { call } from '../teams-api';\nimport { promptHidden } from './apps';\nimport { type TeamAgentRun, requireOperand, usageFor } from './team-agents';\n\n/**\n * `ekanos teams mcp list|add|status|token|effect|remove` — a team's MCP servers,\n * set up by its Source admin (`/api/partner/teams/<team>/mcp/*`).\n *\n * A bearer token is only ever typed at the admin's terminal with hidden\n * input — never a flag, a file or a non-interactive run — so an agent\n * driving the CLI never handles it. An OAuth server is signed in by a team\n * member in their own browser: the CLI prints the link for them.\n */\n\nconst AUTH_FLAGS = { none: 'none', token: 'bearer', oauth: 'oauth' } as const;\n\nexport async function runTeamMcp(\n ctx: CliContext,\n run: TeamAgentRun,\n): Promise<ExitCode> {\n switch (run.verb) {\n case 'list':\n return list(ctx, run);\n case 'add':\n return add(ctx, run);\n case 'status':\n return status(ctx, run);\n case 'token':\n return token(ctx, run);\n case 'effect':\n return effect(ctx, run);\n case 'remove':\n return remove(ctx, run);\n default:\n throw usageError(\n `Unknown teams mcp subcommand \"${run.verb}\".`,\n usageFor('mcp'),\n );\n }\n}\n\nasync function list(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n noExtra(run, 1);\n const data = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpListSchema, {\n method: 'GET',\n path: mcpPath(team),\n source: run.source,\n }),\n );\n return ctx.succeed({ host: run.host, ...data }, renderList(ctx, data));\n}\n\nasync function add(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n\n const url = stringFlag(run, 'url');\n if (!url) {\n throw usageError(\n 'teams mcp add needs the server URL.',\n `Run \"ekanos teams mcp add ${team} ${key} --url https://… [--auth none|token|oauth]\".`,\n );\n }\n const authFlag = stringFlag(run, 'auth') ?? 'oauth';\n if (!(authFlag in AUTH_FLAGS)) {\n throw usageError(\n `--auth must be none, token or oauth (got \"${authFlag}\").`,\n usageFor('mcp'),\n );\n }\n const auth = AUTH_FLAGS[authFlag as keyof typeof AUTH_FLAGS];\n\n const added = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'POST',\n path: mcpPath(team),\n source: run.source,\n body: {\n key,\n url,\n auth,\n ...(stringFlag(run, 'name') ? { name: stringFlag(run, 'name') } : {}),\n },\n }),\n );\n\n if (auth === 'bearer' && canPrompt(ctx, run)) {\n return enterToken(ctx, run, team, key);\n }\n return ctx.succeed(\n { host: run.host, ...added },\n renderStatus(ctx, added, `Added ${key} to ${team}`),\n );\n}\n\n/**\n * `teams mcp remove <team> <server-key> --yes`: the app's Remove — every\n * agent of the team loses the server, and its credentials are deleted.\n */\nasync function remove(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n if (!run.args.yes) {\n throw invalidStateError(\n `Removing ${key} from ${team} takes it away from every agent of the team that uses it, and deletes its stored token or sign-in.`,\n `Re-run with --yes: ekanos teams mcp remove ${team} ${key} --yes`,\n );\n }\n const removed = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpRemoveResultSchema, {\n method: 'DELETE',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}`,\n source: run.source,\n }),\n );\n return ctx.succeed(\n { host: run.host, ...removed },\n ctx.ui.result({\n title: `Removed ${removed.removed} from ${removed.team.slug}`,\n tone: 'warn',\n rows: [\n [\n 'Agents that lost it',\n removed.agents.length > 0 ? removed.agents.join(', ') : 'none',\n ],\n ],\n }),\n );\n}\n\nasync function status(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n const data = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'GET',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}`,\n source: run.source,\n }),\n );\n return ctx.succeed(\n { host: run.host, ...data },\n renderStatus(ctx, data, `${key} on ${team}`),\n );\n}\n\nasync function token(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n noExtra(run, 2);\n if (!canPrompt(ctx, run)) {\n throw usageError(\n \"teams mcp token takes the server's token at a terminal, never in a script or an agent run.\",\n `Run it yourself in your terminal: npx @ekanos/cli teams mcp token ${team} ${key} --source ${run.source}`,\n );\n }\n return enterToken(ctx, run, team, key);\n}\n\nasync function enterToken(\n ctx: CliContext,\n run: TeamAgentRun,\n team: string,\n key: string,\n): Promise<ExitCode> {\n const value = (\n await (run.args.askSecret ?? promptHidden)(\n `Bearer token for ${key} on ${team} (hidden): `,\n )\n ).trim();\n if (!value) {\n throw usageError(\n 'No token entered; nothing was saved.',\n `Run \"ekanos teams mcp token ${team} ${key}\" when you have it.`,\n );\n }\n const saved = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'PUT',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}/token`,\n source: run.source,\n body: { token: value },\n }),\n );\n return ctx.succeed(\n { host: run.host, ...saved },\n renderStatus(ctx, saved, `Saved ${key}'s token for ${team}`),\n );\n}\n\nasync function effect(ctx: CliContext, run: TeamAgentRun): Promise<ExitCode> {\n const team = requireOperand(run.operands[0], 'team slug', 'mcp');\n const key = requireOperand(run.operands[1], 'MCP server key', 'mcp');\n const tool = run.operands[2]?.trim();\n const value = run.operands[3]?.trim().toLowerCase();\n noExtra(run, 4);\n if (!tool || (value !== 'read' && value !== 'write')) {\n throw usageError(\n 'teams mcp effect needs a tool and read or write.',\n `Run \"ekanos teams mcp effect ${team} ${key} <tool> read|write\"; \"ekanos teams mcp status ${team} ${key}\" lists the tools.`,\n );\n }\n const saved = await run.client.call((accessToken) =>\n call(run.host, accessToken, TeamMcpStatusSchema, {\n method: 'PUT',\n path: `${mcpPath(team)}/${encodeURIComponent(key)}/effects`,\n source: run.source,\n body: { tool, effect: value },\n }),\n );\n return ctx.succeed(\n { host: run.host, ...saved },\n renderStatus(ctx, saved, `${tool} on ${key} is now a ${value}`),\n );\n}\n\nfunction renderList(ctx: CliContext, data: TeamMcpList): string {\n if (data.servers.length === 0 && data.missing.length === 0) {\n return ctx.ui.result({\n title: `No MCP servers on ${data.team.slug}`,\n tone: 'warn',\n notes: [\n `Add one: ekanos teams mcp add ${data.team.slug} <key> --url https://… --auth none|token|oauth`,\n ],\n });\n }\n return ctx.ui.result({\n title: `MCP servers on ${data.team.slug}`,\n tone:\n data.missing.some((entry) => entry.required) ||\n data.servers.some((server) => server.status !== 'connected')\n ? 'warn'\n : 'ok',\n rows: [\n ...data.servers.map((server): [string, string] => [\n server.key,\n describeServer(server),\n ]),\n ...data.missing.map((entry): [string, string] => [\n entry.key,\n `✗ missing — ${entry.agent} ${entry.required ? 'needs' : 'can use'} ${entry.url}`,\n ]),\n ],\n notes: [\n `\"ekanos teams mcp status ${data.team.slug} <key>\" shows a server's tools and how to connect it.`,\n ],\n });\n}\n\nfunction renderStatus(\n ctx: CliContext,\n data: TeamMcpStatus,\n title: string,\n): string {\n const { server } = data;\n const notes: string[] = [];\n if (data.syncError) notes.push(`Listing its tools failed: ${data.syncError}`);\n if (data.connectUrl) {\n notes.push(\n 'A team member who manages agents opens this link, signed in to the team, to connect it (you cannot sign in for them):',\n data.connectUrl,\n );\n } else if (server.auth === 'bearer' && server.status !== 'connected') {\n notes.push(\n `Enter its token in your terminal: npx @ekanos/cli teams mcp token ${data.team.slug} ${server.key}`,\n );\n }\n if (data.effectsFromTemplate) {\n notes.push(\n \"Its tools' effects come from the agent template (toolEffects in agent.json).\",\n );\n } else if (data.tools.some((tool) => !tool.confirmed)) {\n notes.push(\n `Unconfirmed tools count as writes. Mark a read: ekanos teams mcp effect ${data.team.slug} ${server.key} <tool> read`,\n );\n }\n return ctx.ui.result({\n title,\n tone: server.status === 'connected' && !data.syncError ? 'ok' : 'warn',\n rows: [\n ['Server', describeServer(server)],\n ['URL', server.url],\n ...(data.tools.length > 0\n ? [\n [\n 'Tools',\n data.tools.map(\n (tool) =>\n `${tool.name} · ${tool.effect}${tool.confirmed ? '' : ` (unconfirmed, server suggests ${tool.suggested})`}`,\n ),\n ] as [string, string[]],\n ]\n : []),\n ],\n notes,\n });\n}\n\nfunction describeServer(server: TeamMcpServer): string {\n const state =\n server.status === 'connected'\n ? `✓ connected · ${server.toolCount} tool${server.toolCount === 1 ? '' : 's'}`\n : server.status === 'error'\n ? `✗ error${server.lastError ? `: ${server.lastError}` : ''}`\n : `✗ needs ${server.auth === 'oauth' ? 'sign-in' : server.auth === 'bearer' ? 'a token' : 'a refresh'}`;\n const auth = server.auth === 'bearer' ? 'token' : server.auth;\n const used = [\n ...server.declaredBy.map(\n (use) =>\n `${use.agent} (${use.required ? 'required' : 'optional'}${use.urlMatches ? '' : ', different URL — not the one it needs'})`,\n ),\n ...server.agents.filter(\n (agent) => !server.declaredBy.some((use) => use.agent === agent),\n ),\n ];\n return `${state} · ${auth}${used.length > 0 ? ` · used by ${used.join(', ')}` : ''}`;\n}\n\nfunction mcpPath(team: string): string {\n return `/api/partner/teams/${encodeURIComponent(team)}/mcp`;\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 noExtra(run: TeamAgentRun, count: number): void {\n const extra = run.operands[count];\n if (extra !== undefined) {\n throw usageError(`Unexpected argument \"${extra}\".`, usageFor('mcp'));\n }\n}\n\nfunction canPrompt(ctx: CliContext, run: TeamAgentRun): boolean {\n return !ctx.jsonMode && (run.args.stdinIsTTY ?? process.stdin.isTTY === true);\n}\n"]}