@ekanos/cli 0.15.0 → 0.17.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 (287) hide show
  1. package/README.md +103 -8
  2. package/dist/auth/ekanos-api.d.ts +23 -0
  3. package/dist/auth/ekanos-api.js +33 -6
  4. package/dist/auth/ekanos-api.js.map +1 -1
  5. package/dist/commands/add.d.ts +2 -0
  6. package/dist/commands/add.js +118 -0
  7. package/dist/commands/add.js.map +1 -0
  8. package/dist/commands/agents.js +3 -2
  9. package/dist/commands/agents.js.map +1 -1
  10. package/dist/commands/apps.d.ts +11 -3
  11. package/dist/commands/apps.js +86 -28
  12. package/dist/commands/apps.js.map +1 -1
  13. package/dist/commands/audiences.d.ts +31 -0
  14. package/dist/commands/audiences.js +239 -0
  15. package/dist/commands/audiences.js.map +1 -0
  16. package/dist/commands/build.d.ts +2 -0
  17. package/dist/commands/build.js +41 -0
  18. package/dist/commands/build.js.map +1 -0
  19. package/dist/commands/catalog.d.ts +4 -2
  20. package/dist/commands/catalog.js +166 -35
  21. package/dist/commands/catalog.js.map +1 -1
  22. package/dist/commands/check.d.ts +2 -0
  23. package/dist/commands/check.js +43 -0
  24. package/dist/commands/check.js.map +1 -0
  25. package/dist/commands/codegen.d.ts +2 -0
  26. package/dist/commands/codegen.js +49 -0
  27. package/dist/commands/codegen.js.map +1 -0
  28. package/dist/commands/contract.d.ts +52 -0
  29. package/dist/commands/contract.js +300 -0
  30. package/dist/commands/contract.js.map +1 -0
  31. package/dist/commands/dev.d.ts +7 -0
  32. package/dist/commands/dev.js +186 -12
  33. package/dist/commands/dev.js.map +1 -1
  34. package/dist/commands/index-experience.d.ts +31 -0
  35. package/dist/commands/index-experience.js +21 -0
  36. package/dist/commands/index-experience.js.map +1 -0
  37. package/dist/commands/init.d.ts +7 -0
  38. package/dist/commands/init.js +12 -0
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/login.d.ts +2 -0
  41. package/dist/commands/login.js +17 -0
  42. package/dist/commands/login.js.map +1 -1
  43. package/dist/commands/new.d.ts +2 -0
  44. package/dist/commands/new.js +39 -0
  45. package/dist/commands/new.js.map +1 -0
  46. package/dist/commands/publish.d.ts +59 -0
  47. package/dist/commands/publish.js +118 -65
  48. package/dist/commands/publish.js.map +1 -1
  49. package/dist/commands/runs.d.ts +7 -3
  50. package/dist/commands/runs.js +21 -5
  51. package/dist/commands/runs.js.map +1 -1
  52. package/dist/commands/scope-notice.d.ts +13 -0
  53. package/dist/commands/scope-notice.js +12 -4
  54. package/dist/commands/scope-notice.js.map +1 -1
  55. package/dist/commands/sources-roles.d.ts +5 -0
  56. package/dist/commands/sources-roles.js +235 -0
  57. package/dist/commands/sources-roles.js.map +1 -0
  58. package/dist/commands/sources.d.ts +5 -0
  59. package/dist/commands/sources.js +8 -1
  60. package/dist/commands/sources.js.map +1 -1
  61. package/dist/commands/sync.d.ts +2 -0
  62. package/dist/commands/sync.js +150 -0
  63. package/dist/commands/sync.js.map +1 -0
  64. package/dist/commands/team-agent-readiness.d.ts +18 -2
  65. package/dist/commands/team-agent-readiness.js +39 -39
  66. package/dist/commands/team-agent-readiness.js.map +1 -1
  67. package/dist/commands/team-agents-agents.d.ts +5 -2
  68. package/dist/commands/team-agents-agents.js +152 -15
  69. package/dist/commands/team-agents-agents.js.map +1 -1
  70. package/dist/commands/team-agents-define.d.ts +31 -0
  71. package/dist/commands/team-agents-define.js +176 -0
  72. package/dist/commands/team-agents-define.js.map +1 -0
  73. package/dist/commands/team-agents-mcp.js +112 -10
  74. package/dist/commands/team-agents-mcp.js.map +1 -1
  75. package/dist/commands/team-agents-triggers.d.ts +1 -1
  76. package/dist/commands/team-agents-triggers.js +137 -5
  77. package/dist/commands/team-agents-triggers.js.map +1 -1
  78. package/dist/commands/team-agents.d.ts +4 -1
  79. package/dist/commands/team-agents.js +17 -4
  80. package/dist/commands/team-agents.js.map +1 -1
  81. package/dist/commands/team-llm-key.d.ts +14 -0
  82. package/dist/commands/team-llm-key.js +122 -0
  83. package/dist/commands/team-llm-key.js.map +1 -0
  84. package/dist/commands/teams-audience.d.ts +12 -0
  85. package/dist/commands/teams-audience.js +144 -0
  86. package/dist/commands/teams-audience.js.map +1 -0
  87. package/dist/commands/teams-connect.js +123 -31
  88. package/dist/commands/teams-connect.js.map +1 -1
  89. package/dist/commands/teams-lifecycle.d.ts +90 -0
  90. package/dist/commands/teams-lifecycle.js +457 -0
  91. package/dist/commands/teams-lifecycle.js.map +1 -0
  92. package/dist/commands/teams-onboard.d.ts +14 -0
  93. package/dist/commands/teams-onboard.js +62 -13
  94. package/dist/commands/teams-onboard.js.map +1 -1
  95. package/dist/commands/teams-overview.js +6 -2
  96. package/dist/commands/teams-overview.js.map +1 -1
  97. package/dist/commands/teams-scope.js +4 -0
  98. package/dist/commands/teams-scope.js.map +1 -1
  99. package/dist/commands/teams.d.ts +25 -5
  100. package/dist/commands/teams.js +106 -39
  101. package/dist/commands/teams.js.map +1 -1
  102. package/dist/commands/workflows.d.ts +37 -0
  103. package/dist/commands/workflows.js +589 -0
  104. package/dist/commands/workflows.js.map +1 -0
  105. package/dist/compatibility.d.ts +10 -1
  106. package/dist/compatibility.js +10 -1
  107. package/dist/compatibility.js.map +1 -1
  108. package/dist/connect-fields.d.ts +22 -0
  109. package/dist/connect-fields.js +115 -0
  110. package/dist/connect-fields.js.map +1 -0
  111. package/dist/context.d.ts +12 -0
  112. package/dist/context.js +32 -9
  113. package/dist/context.js.map +1 -1
  114. package/dist/dev-experience.d.ts +125 -0
  115. package/dist/dev-experience.js +128 -0
  116. package/dist/dev-experience.js.map +1 -0
  117. package/dist/experience/boundary.d.ts +12 -0
  118. package/dist/experience/boundary.js +260 -0
  119. package/dist/experience/boundary.js.map +1 -0
  120. package/dist/experience/build.d.ts +16 -0
  121. package/dist/experience/build.js +90 -0
  122. package/dist/experience/build.js.map +1 -0
  123. package/dist/experience/checks.d.ts +29 -0
  124. package/dist/experience/checks.js +133 -0
  125. package/dist/experience/checks.js.map +1 -0
  126. package/dist/experience/contract-sources.d.ts +36 -0
  127. package/dist/experience/contract-sources.js +111 -0
  128. package/dist/experience/contract-sources.js.map +1 -0
  129. package/dist/experience/definition-checks.d.ts +26 -0
  130. package/dist/experience/definition-checks.js +201 -0
  131. package/dist/experience/definition-checks.js.map +1 -0
  132. package/dist/experience/definition-shape.d.ts +60 -0
  133. package/dist/experience/definition-shape.js +2 -0
  134. package/dist/experience/definition-shape.js.map +1 -0
  135. package/dist/experience/init.d.ts +10 -0
  136. package/dist/experience/init.js +64 -0
  137. package/dist/experience/init.js.map +1 -0
  138. package/dist/experience/integrations-codegen.d.ts +17 -0
  139. package/dist/experience/integrations-codegen.js +51 -0
  140. package/dist/experience/integrations-codegen.js.map +1 -0
  141. package/dist/experience/json-schema-to-ts.d.ts +1 -0
  142. package/dist/experience/json-schema-to-ts.js +90 -0
  143. package/dist/experience/json-schema-to-ts.js.map +1 -0
  144. package/dist/experience/load-experience.d.ts +23 -0
  145. package/dist/experience/load-experience.js +115 -0
  146. package/dist/experience/load-experience.js.map +1 -0
  147. package/dist/experience/overrides.d.ts +8 -0
  148. package/dist/experience/overrides.js +21 -0
  149. package/dist/experience/overrides.js.map +1 -0
  150. package/dist/experience/pin-integration.d.ts +8 -0
  151. package/dist/experience/pin-integration.js +17 -0
  152. package/dist/experience/pin-integration.js.map +1 -0
  153. package/dist/experience/pin-ops.d.ts +12 -0
  154. package/dist/experience/pin-ops.js +36 -0
  155. package/dist/experience/pin-ops.js.map +1 -0
  156. package/dist/experience/pins.d.ts +35 -0
  157. package/dist/experience/pins.js +91 -0
  158. package/dist/experience/pins.js.map +1 -0
  159. package/dist/experience/project.d.ts +52 -0
  160. package/dist/experience/project.js +149 -0
  161. package/dist/experience/project.js.map +1 -0
  162. package/dist/experience/publish.d.ts +51 -0
  163. package/dist/experience/publish.js +144 -0
  164. package/dist/experience/publish.js.map +1 -0
  165. package/dist/experience/regenerate.d.ts +10 -0
  166. package/dist/experience/regenerate.js +33 -0
  167. package/dist/experience/regenerate.js.map +1 -0
  168. package/dist/experience/report.d.ts +9 -0
  169. package/dist/experience/report.js +23 -0
  170. package/dist/experience/report.js.map +1 -0
  171. package/dist/harness-scaffold.d.ts +52 -18
  172. package/dist/harness-scaffold.js +189 -9
  173. package/dist/harness-scaffold.js.map +1 -1
  174. package/dist/index.d.ts +13 -0
  175. package/dist/index.js +494 -127
  176. package/dist/index.js.map +1 -1
  177. package/dist/invocation.d.ts +31 -0
  178. package/dist/invocation.js +58 -0
  179. package/dist/invocation.js.map +1 -0
  180. package/dist/project-checks.d.ts +12 -0
  181. package/dist/project-checks.js +46 -0
  182. package/dist/project-checks.js.map +1 -1
  183. package/dist/project.d.ts +14 -0
  184. package/dist/project.js +10 -0
  185. package/dist/project.js.map +1 -1
  186. package/dist/repo/publish.d.ts +42 -0
  187. package/dist/repo/publish.js +225 -0
  188. package/dist/repo/publish.js.map +1 -0
  189. package/dist/repo/scaffold.d.ts +30 -0
  190. package/dist/repo/scaffold.js +165 -0
  191. package/dist/repo/scaffold.js.map +1 -0
  192. package/dist/runs-api.js +8 -3
  193. package/dist/runs-api.js.map +1 -1
  194. package/dist/safe-fs.d.ts +18 -0
  195. package/dist/safe-fs.js +57 -0
  196. package/dist/safe-fs.js.map +1 -1
  197. package/dist/secret-form.d.ts +48 -0
  198. package/dist/secret-form.js +212 -0
  199. package/dist/secret-form.js.map +1 -0
  200. package/dist/secret-input.d.ts +96 -0
  201. package/dist/secret-input.js +299 -0
  202. package/dist/secret-input.js.map +1 -0
  203. package/dist/team-connect-api.d.ts +78 -3
  204. package/dist/team-connect-api.js +17 -2
  205. package/dist/team-connect-api.js.map +1 -1
  206. package/dist/team-lifecycle-api.d.ts +435 -0
  207. package/dist/team-lifecycle-api.js +301 -0
  208. package/dist/team-lifecycle-api.js.map +1 -0
  209. package/dist/teams-api.d.ts +49 -1
  210. package/dist/teams-api.js +149 -27
  211. package/dist/teams-api.js.map +1 -1
  212. package/dist/unknown-command.d.ts +18 -0
  213. package/dist/unknown-command.js +50 -0
  214. package/dist/unknown-command.js.map +1 -0
  215. package/dist/validate-findings.js +2 -1
  216. package/dist/validate-findings.js.map +1 -1
  217. package/dist/workflows-api.d.ts +69 -0
  218. package/dist/workflows-api.js +182 -0
  219. package/dist/workflows-api.js.map +1 -0
  220. package/package.json +3 -3
  221. package/templates/AGENTS.md.tmpl +6 -4
  222. package/templates/claude-skill.md.tmpl +4 -1
  223. package/templates/ekanos.json.tmpl +1 -0
  224. package/templates/experience/AGENTS.md.tmpl +22 -0
  225. package/templates/experience/ekanos.json.tmpl +7 -0
  226. package/templates/experience/ekanos.lock.json.tmpl +4 -0
  227. package/templates/experience/eslint.config.mjs.tmpl +25 -0
  228. package/templates/experience/gitignore.tmpl +17 -0
  229. package/templates/experience/package.json.tmpl +41 -0
  230. package/templates/experience/src/.ekanos/integrations.d.ts.tmpl +3 -0
  231. package/templates/experience/src/experience.ts.tmpl +30 -0
  232. package/templates/experience/src/widgets/hello-widget.tsx.tmpl +40 -0
  233. package/templates/experience/tsconfig.json.tmpl +20 -0
  234. package/templates/harness/app/%5F%5Fekanos/api/[...path]/route.ts.tmpl +9 -0
  235. package/templates/harness/app/[slug]/activation/page.tsx.tmpl +1 -1
  236. package/templates/harness/app/[slug]/page.tsx.tmpl +1 -1
  237. package/templates/harness/app/[slug]/tile/page.tsx.tmpl +1 -1
  238. package/templates/harness/app/[slug]/triggers/page.tsx.tmpl +1 -1
  239. package/templates/harness/app/[slug]/widgets/[widgetId]/page.tsx.tmpl +1 -1
  240. package/templates/harness/app/[slug]/widgets/page.tsx.tmpl +1 -1
  241. package/templates/harness/app/experience/layout.tsx.tmpl +17 -0
  242. package/templates/harness/app/experience/page.tsx.tmpl +1 -0
  243. package/templates/harness/app/experience/pages/[id]/page.tsx.tmpl +1 -0
  244. package/templates/harness/app/experience/review-queue/page.tsx.tmpl +1 -0
  245. package/templates/harness/app/experience/runs/page.tsx.tmpl +1 -0
  246. package/templates/harness/app/experience/widgets/[id]/page.tsx.tmpl +1 -0
  247. package/templates/harness/app/experience/widgets/page.tsx.tmpl +1 -0
  248. package/templates/harness/app/experience/workflows/[id]/page.tsx.tmpl +1 -0
  249. package/templates/harness/app/experience/workflows/page.tsx.tmpl +1 -0
  250. package/templates/harness/app/integrations/[slug]/connect/page.tsx.tmpl +1 -0
  251. package/templates/harness/app/integrations/[slug]/events/page.tsx.tmpl +1 -0
  252. package/templates/harness/app/integrations/[slug]/health/page.tsx.tmpl +1 -0
  253. package/templates/harness/app/integrations/[slug]/operations/[kind]/[name]/page.tsx.tmpl +1 -0
  254. package/templates/harness/app/integrations/[slug]/operations/page.tsx.tmpl +1 -0
  255. package/templates/harness/app/integrations/[slug]/page.tsx.tmpl +1 -0
  256. package/templates/harness/app/integrations/[slug]/preview/activation/page.tsx.tmpl +1 -0
  257. package/templates/harness/app/integrations/[slug]/preview/layout.tsx.tmpl +1 -0
  258. package/templates/harness/app/integrations/[slug]/preview/page.tsx.tmpl +1 -0
  259. package/templates/harness/app/integrations/[slug]/preview/tile/page.tsx.tmpl +1 -0
  260. package/templates/harness/app/integrations/[slug]/preview/triggers/page.tsx.tmpl +1 -0
  261. package/templates/harness/app/integrations/[slug]/preview/widgets/[widgetId]/page.tsx.tmpl +1 -0
  262. package/templates/harness/app/integrations/[slug]/preview/widgets/page.tsx.tmpl +1 -0
  263. package/templates/harness/app/integrations/[slug]/runs/page.tsx.tmpl +1 -0
  264. package/templates/harness/app/integrations/layout.tsx.tmpl +1 -0
  265. package/templates/harness/app/integrations/page.tsx.tmpl +1 -0
  266. package/templates/harness/app/page.experience.tsx.tmpl +5 -0
  267. package/templates/harness/repo/app/%5F%5Fekanos/api/[...path]/route.ts.tmpl +11 -0
  268. package/templates/harness/repo/app/(repo)/connections/page.tsx.tmpl +1 -0
  269. package/templates/harness/repo/app/(repo)/layout.tsx.tmpl +1 -0
  270. package/templates/harness/repo/app/(repo)/page.tsx.tmpl +1 -0
  271. package/templates/harness/repo/app/experiences/[name]/connect/page.tsx.tmpl +1 -0
  272. package/templates/harness/repo/app/experiences/[name]/layout.tsx.tmpl +9 -0
  273. package/templates/harness/repo/app/experiences/page.tsx.tmpl +5 -0
  274. package/templates/harness/repo/app/harness-shell.tsx.tmpl +9 -0
  275. package/templates/harness/repo/app/integrations/[slug]/layout.tsx.tmpl +1 -0
  276. package/templates/harness/repo/app/integrations/page.tsx.tmpl +5 -0
  277. package/templates/harness/repo/app/repo-experiences.ts.tmpl +5 -0
  278. package/templates/harness/styles/globals.css.tmpl +15 -1
  279. package/templates/package.json.tmpl +4 -4
  280. package/templates/skills/build-agent/SKILL.md +43 -10
  281. package/templates/skills/build-agent/references/agent-json.md +4 -1
  282. package/templates/skills/build-agent/references/app-setup.md +14 -7
  283. package/templates/skills/build-agent/references/rollout.md +26 -2
  284. package/templates/skills/build-agent/references/set-up-an-integration.md +46 -29
  285. package/templates/skills/build-integration/references/widget-design.md +1 -1
  286. package/templates/skills/ekanos-platform/SKILL.md +66 -14
  287. package/templates/skills/polish-widgets/references/patterns.md +3 -3
@@ -54,6 +54,7 @@ npx @ekanos/cli teams members invite bank-a raj@bank-a.com --role admin # defa
54
54
  npx @ekanos/cli teams members list bank-a # members and pending invitations
55
55
  npx @ekanos/cli teams members role bank-a raj@bank-a.com member
56
56
  npx @ekanos/cli teams members remove bank-a raj@bank-a.com --yes
57
+ npx @ekanos/cli teams members resend bank-a lee@bank-a.com # resend, or renew an expired invitation
57
58
  npx @ekanos/cli teams connect bank-a zendesk # connect it for the team (asks, signs in, waits)
58
59
  npx @ekanos/cli teams connect bank-a linear --as raj@bank-a.com # a sign-in link for raj
59
60
  npx @ekanos/cli sources products # what the Source has enabled (super-admin enables)
@@ -68,10 +69,13 @@ npx @ekanos/cli sources products # what the Source h
68
69
  - Roles are the team roles (owner / admin / member, or the Source's own
69
70
  customized ones). Pick a reviewer for agents by the role holding
70
71
  `agents.review` in `teams roles list`. The primary owner's role cannot be
71
- changed here; ownership moves in the app.
72
+ changed here; ownership moves in the app. The Source's custom roles
73
+ themselves are `sources roles` (`create|update|delete`; owner, admin and
74
+ member are fixed).
72
75
  - `teams connect <team> <product>` does the connect: it asks a form's fields
73
- at the user's terminal (hidden for secrets — so the user runs it, never you
74
- with values), runs the team-app prompts first when needed (Zendesk), or
76
+ at the user's terminal (hidden for secrets) or, run by you with
77
+ `--browser`, in a one-time form in the user's browser — never with values
78
+ from you — runs the team-app prompts first when needed (Zendesk), or
75
79
  opens a one-time sign-in link and waits. The person who signs in is a team
76
80
  member (owner/admin for a team-wide connection): the user when they are
77
81
  one, else `--as <email>` prints a link to send that member. `--no-wait`,
@@ -81,6 +85,17 @@ npx @ekanos/cli sources products # what the Source h
81
85
  what it has. Enabling one is a super-admin grant (`sources products enable`)
82
86
  that an `ekanos login` session cannot make — the super-admin does it in
83
87
  /admin.
88
+ - The rest of a team's life: `teams leave <team> --yes` (the user's own
89
+ membership), `teams groups list|create|update|delete|members` (groups
90
+ narrow what their members see to `--products a,b`), `teams health <team>
91
+ [<product>] [--run]` (each connected integration's health; `--run` checks
92
+ one now; `<product> --mine` the user's own personal connection),
93
+ `teams workspace list|default <team> [<workspace>]`, and
94
+ `sources people` (everyone on the Source and their teams). Each one that
95
+ takes something away needs `--yes` when you run it, which you pass only
96
+ after the user says so. Transferring a team's ownership and deleting a team
97
+ are not in the CLI: the primary owner does them in the app, confirmed by a
98
+ code emailed to them.
84
99
 
85
100
  ## Products: integrations and experiences
86
101
 
@@ -136,8 +151,8 @@ connect (`setupSteps` step `provider-app`). It is the Source's own app — for a
136
151
  white-label Source, under its product name and company — and its admin
137
152
  creates it once in the provider's console. The integration ships the steps
138
153
  (the catalog's `instructions`, with the Source's exact callback URLs filled
139
- in); `ekanos apps set <product>`, run by the admin at their own terminal,
140
- takes the client ID and secret. The `build-agent` skill walks through it
154
+ in); `ekanos apps set <product>` takes the client ID and secret — at the
155
+ admin's own terminal, or in a browser form when you run it with `--browser`. The `build-agent` skill walks through it
141
156
  (`references/app-setup.md`). Integrations whose teams each bring their own
142
157
  app (Zendesk) have no Source app; each team follows that app's steps.
143
158
 
@@ -158,8 +173,13 @@ changed through the CLI or the app, with no deploy.
158
173
  (links) and which calls wait for approval, and — per area, with
159
174
  `teamOverrides` — whether a team may change them. The template wins unless
160
175
  an area is opened to teams.
161
- - **A team's own** — built by a team in the app (Agents → New). Only that team
162
- has it, and the Source cannot update it.
176
+ - **A team's own** — built for one team, in the app (Agents → New) or with
177
+ `ekanos teams agents create <team> --from <dir>` from the same `agent.json`.
178
+ Only that team has it, and the Source cannot update it.
179
+ - **A personal agent** — one member's own (`--personal`, or "Just you" in the
180
+ app). It acts for its creator, with their own connections, on every trigger,
181
+ so only they change it, run it, decide its approvals or cancel its runs —
182
+ not a team manager and not the Source admin.
163
183
 
164
184
  Skills are folders (`SKILL.md` + references) an agent loads when needed.
165
185
  A Source admin pushes them with `ekanos skills push <dir>`: at Source level
@@ -183,11 +203,23 @@ always `ekanos teams <area> <verb> <team> …`:
183
203
 
184
204
  - `ekanos teams agents list <team>` — provided agents, on or off, the version
185
205
  each runs (pinned or following), triggers, links, the team's MCP servers,
186
- and what each still needs connected.
206
+ and what each still needs connected; then the team's own and personal
207
+ agents and whose each is.
208
+ - `ekanos teams agents create <team> --from <dir> [--personal]` /
209
+ `apply <team> <dir> [--base-version <n>]` — the team's own agent, or your
210
+ own, from an `agent.json` (+ `AGENT.md`, + `skills/<slug>/`). You become
211
+ its creator, so you must be an active member of the team. It starts as a
212
+ draft; `enable` turns it on.
187
213
  - `ekanos teams agents enable <team> <key> [--as <member-email>]
188
214
  [--confirm-access]` / `disable <team> <key>` — the app's "Turn on" /
189
215
  "Turn off". The agent runs as a team member who manages agents (the
190
- team's owner by default); `--confirm-access` also confirms it, as you.
216
+ team's owner by default): that member is its creator, whose personal
217
+ connections it uses. Who it runs as is chosen once, when it is turned
218
+ on; to change it, archive it and turn it on again with `--as`.
219
+ `--confirm-access` also confirms it, as you.
220
+ - `ekanos teams agents archive <team> <key> [--yes]` / `unarchive <team>
221
+ <key>` — the app's Archive: off the team's list, nothing starts it, its
222
+ runs and setup kept; `unarchive` brings it back paused, for `enable`.
191
223
  - `ekanos teams agents confirm <team> <key>` — you confirm, as yourself,
192
224
  that the agent may use its connections (the person it runs as's) in runs
193
225
  no one watches; the output says which products' connections that covers.
@@ -208,6 +240,9 @@ always `ekanos teams <area> <verb> <team> …`:
208
240
  skills the agent reads; attach a team skill (pushed with
209
241
  `skills push --team`) or a Source one. A provided agent takes them only
210
242
  when its template's `teamCustomization.skills` is on; its own stay.
243
+ - `ekanos teams agents tags <team> <key> [add|remove <tag>]` — labels that
244
+ organize the team's agents and grant nothing; `add` makes a tag the team
245
+ does not have yet.
211
246
  - `ekanos teams triggers list|add|remove <team> <key> …` — manual, schedule
212
247
  (`--cron`, `--timezone`), webhook (the token goes to a file only the
213
248
  user can read, never the output) and
@@ -216,12 +251,25 @@ always `ekanos teams <area> <verb> <team> …`:
216
251
  --filter '{"labels":["feedback"]}'`), plus `slack --channel '#name' [--dms]
217
252
  --yes` and `linear [--label <name>]` once the team has installed Slack or
218
253
  Ekanos's Linear app with `ekanos teams connect <team> slack|linear-app`.
254
+ - `ekanos teams triggers enable|disable <team> <key> <trigger-id|key>` and
255
+ `edit <team> <key> <trigger-id|key> [--prompt …] [--cron … --timezone …]
256
+ [--filter …] [--channel …] [--dms] [--label …]` — turn a trigger off
257
+ without removing it, or change it in place: a webhook keeps its URL and
258
+ token (only `rotate` makes a new one).
219
259
  - `ekanos teams links list|add|remove <team> <from-key> [<to-key>] --kind
220
260
  talk|delegate [--mode await|handoff]`.
221
261
  - `ekanos teams mcp list|add|status|token|effect <team> [<server-key> …]` — a
222
262
  team's own MCP server (`--url`, `--auth none|token|oauth`); a token is typed
223
- at the admin's terminal with hidden input, never in chat or arguments; OAuth
224
- prints a link for a team member to open.
263
+ at the admin's terminal with hidden input, or in the `--browser` form, never
264
+ in chat or arguments; OAuth prints a link for a team member to open.
265
+ `ekanos teams mcp attach|detach <team> <server-key> <agent-key>` gives one
266
+ agent a team server, or takes it away (where its template allows), and
267
+ `refresh <team> <server-key>` (or `--agent <key>`) lists its tools again.
268
+ - `ekanos teams llm-key show|set|remove <team>` — the team's own Anthropic
269
+ key, which its agents and assistant then use instead of the Source's.
270
+ `show` gives only whether one is saved and its last four characters; `set`
271
+ takes it like any secret (`--browser`, or `--secret-env <NAME>` /
272
+ `--secret-file <path>` the user prepared); `remove` needs `--yes`.
225
273
 
226
274
  Triggers, links and the policy of a provided agent follow its template by
227
275
  default; when the template has not turned on team overrides for that area,
@@ -263,19 +311,23 @@ is refused (`USER_NOT_IN_SOURCE`): `ekanos teams list` shows the teams.
263
311
  | Agents provided for every team | A Source admin, with `ekanos agents` (`agents archive <key>` retires one once no team has it on) |
264
312
  | Testing an unpublished agent version on one team | A Source admin: `ekanos teams agents enable\|pin <team> <key> --draft`, then `ekanos agents test <key> --team <slug>` |
265
313
  | Running a team's agent, reading its runs (transcript, tool calls) | A team's agent manager in the app, or a Source admin with `ekanos runs` |
266
- | Deciding what an agent run waits on (approve, reject, edit & send a reply) | A team's agent manager in the app, or a Source admin with `ekanos approvals` (for a team's own agent, only a Source admin who manages that team's agents) |
314
+ | Deciding what an agent run waits on (approve, reject, edit & send a reply) | A team's agent manager in the app, or with `ekanos approvals`: a Source admin (for a team's own agent, only one who manages that team's agents), or any seat holder with that authority themselves — a member who manages (or, for reply drafts, reviews) the team's agents, a named reviewer, a personal agent's creator |
315
+ | A team's workflows: saving one, turning it on, running it, deciding its approval gates | A team member who configures integrations, in the app's editor; or a Source admin with `ekanos workflows apply\|enable\|run\|approvals --team <slug>` (Workflows must be on for the Source; a member's personal workflow is theirs alone). Custom Code that writes or reaches a host is approved by whoever turns the workflow on: `ekanos workflows enable <workflow> --team <slug> --confirm-access` |
267
316
  | Skills (SKILL.md folders) for every team, or one team's own | A Source admin, with `ekanos skills push` (`--team <slug>` for one team); `ekanos skills archive` retires one nothing uses |
268
317
  | Knowledge articles for every team (General), or one team's own | A Source admin, with `ekanos knowledge push` (`--team <slug>` for one team); a team's members in the app |
269
318
  | Who decides agent drafts that wait for a person | A Source admin, with `ekanos reviewers` |
270
- | An integration's app for the whole Source (client ID and secret) | A Source admin, with `ekanos apps set` at their own terminal |
319
+ | An integration's app for the whole Source (client ID and secret) | A Source admin, with `ekanos apps set` (at their own terminal, or its `--browser` form) |
271
320
  | One connection for the whole Source, used by provided agents in every team | A Source admin, with `ekanos apps connect` (status: `ekanos apps show`), or **Shared integrations › Connections** in the Source admin area |
272
321
  | Which team gets which events on that connection (Zendesk organization → team) | A Source admin, with `ekanos routes` (`webhook`, `options`, `set`, `list`, `remove`, `unrouted`, `replay`), or **Shared integrations › Routing** in the Source admin area |
273
322
  | A team's own app for an integration (client ID, secrets, webhook URL) | The team in the app, or a Source admin with `ekanos teams` |
274
323
  | A provided agent's triggers, links and approvals | A Source admin, in the template (`ekanos agents triggers / links / policy / overrides`); teams change them only where `teamOverrides` allows |
275
324
  | Creating a team, inviting its members, changing their roles | A Source admin, with `ekanos teams create` / `ekanos teams members` (or the team's owner in the app) |
325
+ | A team's groups and default workspace | A Source admin, with `ekanos teams groups` / `ekanos teams workspace default`, or the team's owner in the app |
326
+ | Transferring a team's ownership, deleting a team | The team's primary owner in the app (a code emailed to them confirms it), or a super-admin under /admin |
327
+ | The Source's custom roles and their permissions | A Source admin, with `ekanos sources roles`; owner, admin and member are fixed |
276
328
  | Connecting an integration for a team (signing in) | A team member in the app, or a Source admin with `ekanos teams connect <team> <product>` (`--as <member-email>` when the connection is a person's own) |
277
329
  | Turning on a provided agent for a team, pinning its version, its triggers, links, MCP servers and approval policy | Each team in the app, or a Source admin with `ekanos teams agents\|triggers\|links\|mcp` |
278
330
  | Which products a team sees in the app (product scopes) | A Source admin: `ekanos sources scopes` (and `add`/`remove <scope> <product>`), `ekanos teams scope show\|set <team>`; creating a scope is in /admin |
279
331
  | Is a team's agent live, and if not, what is the next step | A Source admin, with `ekanos teams agents show <team> <key>`; the whole team on one screen with `ekanos teams show <team>` |
280
- | Disconnecting a team's integration, removing a team's MCP server | A Source admin, with `ekanos teams disconnect <team> <product> --yes` / `ekanos teams mcp remove <team> <server-key> --yes`, or the team in the app |
332
+ | Disconnecting a team's integration, removing a team's MCP server | A Source admin, with `ekanos teams disconnect <team> <product> --yes` / `ekanos teams mcp remove <team> <server-key> --yes`, or the team in the app. A personal connection: only its owner, `ekanos teams disconnect <team> <product> --mine --yes` |
281
333
  | Confirming an agent may use its connections | Whoever sets it up, as themselves: the Source admin with `ekanos teams agents confirm <team> <key>` (or `enable --confirm-access`, `agents publish --confirm-access`), or a team manager with **Confirm access** in the app — never a plain member. A publish is the confirmation for following teams: no team is held on an earlier version |
@@ -184,7 +184,7 @@ is not information-rich; it is unreadable.
184
184
  <div className="space-y-1 p-2">
185
185
  {events.map((e) => (
186
186
  <div key={e.id} className="flex gap-1 text-xs">
187
- <Icon name="fa-light fa-bolt" className="h-3 w-3" />
187
+ <Icon name="fa-bolt" className="h-3 w-3" />
188
188
  <span>{e.title}</span>
189
189
  </div>
190
190
  ))}
@@ -268,7 +268,7 @@ import {
268
268
  <DropdownMenuTrigger
269
269
  render={<Button variant="ghost" size="icon" className="h-8 w-8" />}
270
270
  >
271
- <Icon name="fa-light fa-ellipsis-vertical" className="h-4 w-4" />
271
+ <Icon name="fa-ellipsis-vertical" className="h-4 w-4" />
272
272
  </DropdownMenuTrigger>
273
273
  <DropdownMenuContent align="end">
274
274
  <DropdownMenuItem>View details</DropdownMenuItem>
@@ -293,7 +293,7 @@ said, and it matches every other widget on the board:
293
293
  ```tsx
294
294
  // AFTER — the SDK's empty state, one sentence of what appears here
295
295
  <Widget.Empty
296
- icon="fa-light fa-inbox"
296
+ icon="fa-inbox"
297
297
  title="No invoices yet"
298
298
  description="Invoices appear here as soon as your first one is issued."
299
299
  />