@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.
- package/README.md +103 -8
- package/dist/auth/ekanos-api.d.ts +23 -0
- package/dist/auth/ekanos-api.js +33 -6
- package/dist/auth/ekanos-api.js.map +1 -1
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.js +118 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/agents.js +3 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/apps.d.ts +11 -3
- package/dist/commands/apps.js +86 -28
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/audiences.d.ts +31 -0
- package/dist/commands/audiences.js +239 -0
- package/dist/commands/audiences.js.map +1 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.js +41 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/catalog.d.ts +4 -2
- package/dist/commands/catalog.js +166 -35
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/check.d.ts +2 -0
- package/dist/commands/check.js +43 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/codegen.d.ts +2 -0
- package/dist/commands/codegen.js +49 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/commands/contract.d.ts +52 -0
- package/dist/commands/contract.js +300 -0
- package/dist/commands/contract.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.js +186 -12
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/index-experience.d.ts +31 -0
- package/dist/commands/index-experience.js +21 -0
- package/dist/commands/index-experience.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +12 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.js +17 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/new.d.ts +2 -0
- package/dist/commands/new.js +39 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/publish.d.ts +59 -0
- package/dist/commands/publish.js +118 -65
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/runs.d.ts +7 -3
- package/dist/commands/runs.js +21 -5
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/scope-notice.d.ts +13 -0
- package/dist/commands/scope-notice.js +12 -4
- package/dist/commands/scope-notice.js.map +1 -1
- package/dist/commands/sources-roles.d.ts +5 -0
- package/dist/commands/sources-roles.js +235 -0
- package/dist/commands/sources-roles.js.map +1 -0
- package/dist/commands/sources.d.ts +5 -0
- package/dist/commands/sources.js +8 -1
- package/dist/commands/sources.js.map +1 -1
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.js +150 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/team-agent-readiness.d.ts +18 -2
- package/dist/commands/team-agent-readiness.js +39 -39
- package/dist/commands/team-agent-readiness.js.map +1 -1
- package/dist/commands/team-agents-agents.d.ts +5 -2
- package/dist/commands/team-agents-agents.js +152 -15
- package/dist/commands/team-agents-agents.js.map +1 -1
- package/dist/commands/team-agents-define.d.ts +31 -0
- package/dist/commands/team-agents-define.js +176 -0
- package/dist/commands/team-agents-define.js.map +1 -0
- package/dist/commands/team-agents-mcp.js +112 -10
- package/dist/commands/team-agents-mcp.js.map +1 -1
- package/dist/commands/team-agents-triggers.d.ts +1 -1
- package/dist/commands/team-agents-triggers.js +137 -5
- package/dist/commands/team-agents-triggers.js.map +1 -1
- package/dist/commands/team-agents.d.ts +4 -1
- package/dist/commands/team-agents.js +17 -4
- package/dist/commands/team-agents.js.map +1 -1
- package/dist/commands/team-llm-key.d.ts +14 -0
- package/dist/commands/team-llm-key.js +122 -0
- package/dist/commands/team-llm-key.js.map +1 -0
- package/dist/commands/teams-audience.d.ts +12 -0
- package/dist/commands/teams-audience.js +144 -0
- package/dist/commands/teams-audience.js.map +1 -0
- package/dist/commands/teams-connect.js +123 -31
- package/dist/commands/teams-connect.js.map +1 -1
- package/dist/commands/teams-lifecycle.d.ts +90 -0
- package/dist/commands/teams-lifecycle.js +457 -0
- package/dist/commands/teams-lifecycle.js.map +1 -0
- package/dist/commands/teams-onboard.d.ts +14 -0
- package/dist/commands/teams-onboard.js +62 -13
- package/dist/commands/teams-onboard.js.map +1 -1
- package/dist/commands/teams-overview.js +6 -2
- package/dist/commands/teams-overview.js.map +1 -1
- package/dist/commands/teams-scope.js +4 -0
- package/dist/commands/teams-scope.js.map +1 -1
- package/dist/commands/teams.d.ts +25 -5
- package/dist/commands/teams.js +106 -39
- package/dist/commands/teams.js.map +1 -1
- package/dist/commands/workflows.d.ts +37 -0
- package/dist/commands/workflows.js +589 -0
- package/dist/commands/workflows.js.map +1 -0
- package/dist/compatibility.d.ts +10 -1
- package/dist/compatibility.js +10 -1
- package/dist/compatibility.js.map +1 -1
- package/dist/connect-fields.d.ts +22 -0
- package/dist/connect-fields.js +115 -0
- package/dist/connect-fields.js.map +1 -0
- package/dist/context.d.ts +12 -0
- package/dist/context.js +32 -9
- package/dist/context.js.map +1 -1
- package/dist/dev-experience.d.ts +125 -0
- package/dist/dev-experience.js +128 -0
- package/dist/dev-experience.js.map +1 -0
- package/dist/experience/boundary.d.ts +12 -0
- package/dist/experience/boundary.js +260 -0
- package/dist/experience/boundary.js.map +1 -0
- package/dist/experience/build.d.ts +16 -0
- package/dist/experience/build.js +90 -0
- package/dist/experience/build.js.map +1 -0
- package/dist/experience/checks.d.ts +29 -0
- package/dist/experience/checks.js +133 -0
- package/dist/experience/checks.js.map +1 -0
- package/dist/experience/contract-sources.d.ts +36 -0
- package/dist/experience/contract-sources.js +111 -0
- package/dist/experience/contract-sources.js.map +1 -0
- package/dist/experience/definition-checks.d.ts +26 -0
- package/dist/experience/definition-checks.js +201 -0
- package/dist/experience/definition-checks.js.map +1 -0
- package/dist/experience/definition-shape.d.ts +60 -0
- package/dist/experience/definition-shape.js +2 -0
- package/dist/experience/definition-shape.js.map +1 -0
- package/dist/experience/init.d.ts +10 -0
- package/dist/experience/init.js +64 -0
- package/dist/experience/init.js.map +1 -0
- package/dist/experience/integrations-codegen.d.ts +17 -0
- package/dist/experience/integrations-codegen.js +51 -0
- package/dist/experience/integrations-codegen.js.map +1 -0
- package/dist/experience/json-schema-to-ts.d.ts +1 -0
- package/dist/experience/json-schema-to-ts.js +90 -0
- package/dist/experience/json-schema-to-ts.js.map +1 -0
- package/dist/experience/load-experience.d.ts +23 -0
- package/dist/experience/load-experience.js +115 -0
- package/dist/experience/load-experience.js.map +1 -0
- package/dist/experience/overrides.d.ts +8 -0
- package/dist/experience/overrides.js +21 -0
- package/dist/experience/overrides.js.map +1 -0
- package/dist/experience/pin-integration.d.ts +8 -0
- package/dist/experience/pin-integration.js +17 -0
- package/dist/experience/pin-integration.js.map +1 -0
- package/dist/experience/pin-ops.d.ts +12 -0
- package/dist/experience/pin-ops.js +36 -0
- package/dist/experience/pin-ops.js.map +1 -0
- package/dist/experience/pins.d.ts +35 -0
- package/dist/experience/pins.js +91 -0
- package/dist/experience/pins.js.map +1 -0
- package/dist/experience/project.d.ts +52 -0
- package/dist/experience/project.js +149 -0
- package/dist/experience/project.js.map +1 -0
- package/dist/experience/publish.d.ts +51 -0
- package/dist/experience/publish.js +144 -0
- package/dist/experience/publish.js.map +1 -0
- package/dist/experience/regenerate.d.ts +10 -0
- package/dist/experience/regenerate.js +33 -0
- package/dist/experience/regenerate.js.map +1 -0
- package/dist/experience/report.d.ts +9 -0
- package/dist/experience/report.js +23 -0
- package/dist/experience/report.js.map +1 -0
- package/dist/harness-scaffold.d.ts +52 -18
- package/dist/harness-scaffold.js +189 -9
- package/dist/harness-scaffold.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.js +494 -127
- package/dist/index.js.map +1 -1
- package/dist/invocation.d.ts +31 -0
- package/dist/invocation.js +58 -0
- package/dist/invocation.js.map +1 -0
- package/dist/project-checks.d.ts +12 -0
- package/dist/project-checks.js +46 -0
- package/dist/project-checks.js.map +1 -1
- package/dist/project.d.ts +14 -0
- package/dist/project.js +10 -0
- package/dist/project.js.map +1 -1
- package/dist/repo/publish.d.ts +42 -0
- package/dist/repo/publish.js +225 -0
- package/dist/repo/publish.js.map +1 -0
- package/dist/repo/scaffold.d.ts +30 -0
- package/dist/repo/scaffold.js +165 -0
- package/dist/repo/scaffold.js.map +1 -0
- package/dist/runs-api.js +8 -3
- package/dist/runs-api.js.map +1 -1
- package/dist/safe-fs.d.ts +18 -0
- package/dist/safe-fs.js +57 -0
- package/dist/safe-fs.js.map +1 -1
- package/dist/secret-form.d.ts +48 -0
- package/dist/secret-form.js +212 -0
- package/dist/secret-form.js.map +1 -0
- package/dist/secret-input.d.ts +96 -0
- package/dist/secret-input.js +299 -0
- package/dist/secret-input.js.map +1 -0
- package/dist/team-connect-api.d.ts +78 -3
- package/dist/team-connect-api.js +17 -2
- package/dist/team-connect-api.js.map +1 -1
- package/dist/team-lifecycle-api.d.ts +435 -0
- package/dist/team-lifecycle-api.js +301 -0
- package/dist/team-lifecycle-api.js.map +1 -0
- package/dist/teams-api.d.ts +49 -1
- package/dist/teams-api.js +149 -27
- package/dist/teams-api.js.map +1 -1
- package/dist/unknown-command.d.ts +18 -0
- package/dist/unknown-command.js +50 -0
- package/dist/unknown-command.js.map +1 -0
- package/dist/validate-findings.js +2 -1
- package/dist/validate-findings.js.map +1 -1
- package/dist/workflows-api.d.ts +69 -0
- package/dist/workflows-api.js +182 -0
- package/dist/workflows-api.js.map +1 -0
- package/package.json +3 -3
- package/templates/AGENTS.md.tmpl +6 -4
- package/templates/claude-skill.md.tmpl +4 -1
- package/templates/ekanos.json.tmpl +1 -0
- package/templates/experience/AGENTS.md.tmpl +22 -0
- package/templates/experience/ekanos.json.tmpl +7 -0
- package/templates/experience/ekanos.lock.json.tmpl +4 -0
- package/templates/experience/eslint.config.mjs.tmpl +25 -0
- package/templates/experience/gitignore.tmpl +17 -0
- package/templates/experience/package.json.tmpl +41 -0
- package/templates/experience/src/.ekanos/integrations.d.ts.tmpl +3 -0
- package/templates/experience/src/experience.ts.tmpl +30 -0
- package/templates/experience/src/widgets/hello-widget.tsx.tmpl +40 -0
- package/templates/experience/tsconfig.json.tmpl +20 -0
- package/templates/harness/app/%5F%5Fekanos/api/[...path]/route.ts.tmpl +9 -0
- package/templates/harness/app/[slug]/activation/page.tsx.tmpl +1 -1
- package/templates/harness/app/[slug]/page.tsx.tmpl +1 -1
- package/templates/harness/app/[slug]/tile/page.tsx.tmpl +1 -1
- package/templates/harness/app/[slug]/triggers/page.tsx.tmpl +1 -1
- package/templates/harness/app/[slug]/widgets/[widgetId]/page.tsx.tmpl +1 -1
- package/templates/harness/app/[slug]/widgets/page.tsx.tmpl +1 -1
- package/templates/harness/app/experience/layout.tsx.tmpl +17 -0
- package/templates/harness/app/experience/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/pages/[id]/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/review-queue/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/runs/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/widgets/[id]/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/widgets/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/workflows/[id]/page.tsx.tmpl +1 -0
- package/templates/harness/app/experience/workflows/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/connect/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/events/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/health/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/operations/[kind]/[name]/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/operations/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/activation/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/layout.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/tile/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/triggers/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/widgets/[widgetId]/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/preview/widgets/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/[slug]/runs/page.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/layout.tsx.tmpl +1 -0
- package/templates/harness/app/integrations/page.tsx.tmpl +1 -0
- package/templates/harness/app/page.experience.tsx.tmpl +5 -0
- package/templates/harness/repo/app/%5F%5Fekanos/api/[...path]/route.ts.tmpl +11 -0
- package/templates/harness/repo/app/(repo)/connections/page.tsx.tmpl +1 -0
- package/templates/harness/repo/app/(repo)/layout.tsx.tmpl +1 -0
- package/templates/harness/repo/app/(repo)/page.tsx.tmpl +1 -0
- package/templates/harness/repo/app/experiences/[name]/connect/page.tsx.tmpl +1 -0
- package/templates/harness/repo/app/experiences/[name]/layout.tsx.tmpl +9 -0
- package/templates/harness/repo/app/experiences/page.tsx.tmpl +5 -0
- package/templates/harness/repo/app/harness-shell.tsx.tmpl +9 -0
- package/templates/harness/repo/app/integrations/[slug]/layout.tsx.tmpl +1 -0
- package/templates/harness/repo/app/integrations/page.tsx.tmpl +5 -0
- package/templates/harness/repo/app/repo-experiences.ts.tmpl +5 -0
- package/templates/harness/styles/globals.css.tmpl +15 -1
- package/templates/package.json.tmpl +4 -4
- package/templates/skills/build-agent/SKILL.md +43 -10
- package/templates/skills/build-agent/references/agent-json.md +4 -1
- package/templates/skills/build-agent/references/app-setup.md +14 -7
- package/templates/skills/build-agent/references/rollout.md +26 -2
- package/templates/skills/build-agent/references/set-up-an-integration.md +46 -29
- package/templates/skills/build-integration/references/widget-design.md +1 -1
- package/templates/skills/ekanos-platform/SKILL.md +66 -14
- 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
|
|
74
|
-
|
|
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
|
|
140
|
-
|
|
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
|
|
162
|
-
|
|
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)
|
|
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,
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
/>
|