@atollhq/skill-gemini 0.1.5 → 0.1.7

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 CHANGED
@@ -7,7 +7,7 @@ Gives your Gemini agent the ability to manage tasks, goals, KPIs, initiatives, m
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- npx @atollhq/skill-gemini --key sk_atoll_... --org your-org-slug
10
+ npx @atollhq/skill-gemini --key sk_atoll_... --org your-org-id
11
11
  ```
12
12
 
13
13
  Get an API key from **Settings > Members > Add Agent** (or **Create API Key** for integrations) in the Atoll app.
@@ -16,7 +16,7 @@ This does three things:
16
16
 
17
17
  1. Appends (or updates) an `# Atoll Integration` section in `~/.gemini/GEMINI.md`
18
18
  2. Copies API reference files to `~/.gemini/atoll-references/`
19
- 3. Appends `ATOLL_API_KEY` and `ATOLL_ORG_SLUG` exports to your shell profile (`~/.zshrc` or `~/.bashrc`)
19
+ 3. Appends `ATOLL_API_KEY` and `ATOLL_ORG_ID` exports to your shell profile (`~/.zshrc` or `~/.bashrc`)
20
20
 
21
21
  Open a fresh shell (or `source` your profile) and Gemini has the Atoll integration.
22
22
 
@@ -42,6 +42,14 @@ atoll config set-org your-org-slug
42
42
  atoll issue list
43
43
  ```
44
44
 
45
+ For multiple agents or orgs, use CLI auth profiles:
46
+
47
+ ```bash
48
+ atoll auth login --profile agent-a --key sk_atoll_... --org acme
49
+ atoll auth login --profile agent-b --key sk_atoll_... --org client
50
+ atoll --profile agent-b issue list
51
+ ```
52
+
45
53
  ## License
46
54
 
47
55
  MIT
package/bin/install.mjs CHANGED
@@ -19,16 +19,16 @@ function parseArgs(argv) {
19
19
 
20
20
  function printUsage() {
21
21
  console.log(`
22
- Usage: npx @atollhq/skill-gemini --key <api-key> --org <org-slug>
22
+ Usage: npx @atollhq/skill-gemini --key <api-key> --org <org-id>
23
23
 
24
24
  Options:
25
25
  --key Atoll API key (sk_atoll_...)
26
- --org Organization slug
26
+ --org Organization ID
27
27
  --help Show this help message
28
28
 
29
29
  Installs the Atoll integration for Gemini CLI:
30
30
  - Writes GEMINI.md with API reference to ~/.gemini/
31
- - Sets ATOLL_API_KEY and ATOLL_ORG_SLUG env vars
31
+ - Sets ATOLL_API_KEY and ATOLL_ORG_ID env vars
32
32
  `)
33
33
  }
34
34
 
@@ -62,7 +62,7 @@ ${body}
62
62
  ## Credentials
63
63
 
64
64
  - API Key: set as ATOLL_API_KEY environment variable
65
- - Org: ${args.org}
65
+ - Org ID: ${args.org}
66
66
  `
67
67
 
68
68
  const geminiPath = join(geminiDir, 'GEMINI.md')
@@ -93,19 +93,26 @@ const profilePath = shell.includes('zsh')
93
93
  ? join(homedir(), '.zshrc')
94
94
  : join(homedir(), '.bashrc')
95
95
 
96
- const envBlock = `\n# Atoll (added by @atollhq/skill-gemini)\nexport ATOLL_API_KEY="${args.key}"\nexport ATOLL_ORG_SLUG="${args.org}"\n`
96
+ function upsertExport(profile, name, value) {
97
+ const line = `export ${name}="${value}"`
98
+ const pattern = new RegExp(`^export ${name}=.*$`, 'm')
99
+ if (pattern.test(profile)) return profile.replace(pattern, line)
100
+ return `${profile.trimEnd()}\n${line}\n`
101
+ }
97
102
 
98
103
  if (existsSync(profilePath)) {
99
- const profile = readFileSync(profilePath, 'utf-8')
100
- if (profile.includes('ATOLL_API_KEY')) {
101
- console.log(`ATOLL_API_KEY already set in ${profilePath} update manually if needed`)
102
- } else {
103
- writeFileSync(profilePath, profile.trimEnd() + '\n' + envBlock)
104
- console.log(`Added ATOLL_API_KEY and ATOLL_ORG_SLUG to ${profilePath}`)
104
+ let profile = readFileSync(profilePath, 'utf-8')
105
+ if (!profile.includes('# Atoll (added by @atollhq/skill-gemini)')) {
106
+ profile = `${profile.trimEnd()}\n\n# Atoll (added by @atollhq/skill-gemini)\n`
105
107
  }
108
+ profile = upsertExport(profile, 'ATOLL_API_KEY', args.key)
109
+ profile = upsertExport(profile, 'ATOLL_ORG_ID', args.org)
110
+ writeFileSync(profilePath, profile)
111
+ console.log(`Configured ATOLL_API_KEY and ATOLL_ORG_ID in ${profilePath}`)
106
112
  } else {
113
+ const envBlock = `\n# Atoll (added by @atollhq/skill-gemini)\nexport ATOLL_API_KEY="${args.key}"\nexport ATOLL_ORG_ID="${args.org}"\n`
107
114
  writeFileSync(profilePath, envBlock)
108
- console.log(`Created ${profilePath} with ATOLL_API_KEY and ATOLL_ORG_SLUG`)
115
+ console.log(`Created ${profilePath} with ATOLL_API_KEY and ATOLL_ORG_ID`)
109
116
  }
110
117
 
111
118
  console.log(`\nDone! Restart your shell, then Gemini CLI will have access to the Atoll API.`)
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@atollhq/skill-gemini",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Install the Atoll project management integration for Gemini CLI",
5
5
  "bin": {
6
- "skill-gemini": "./bin/install.mjs"
6
+ "skill-gemini": "bin/install.mjs"
7
7
  },
8
8
  "files": [
9
9
  "bin/",
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "https://github.com/atollhq/atoll.git",
21
+ "url": "git+https://github.com/atollhq/atoll.git",
22
22
  "directory": "packages/skill-gemini"
23
23
  },
24
24
  "license": "MIT",
package/skill/SKILL.md CHANGED
@@ -60,6 +60,18 @@ atoll auth login --key sk_atoll_...
60
60
  atoll config set-org my-org
61
61
  ```
62
62
 
63
+ For machines or agents that need multiple credentials, use auth profiles:
64
+
65
+ ```bash
66
+ atoll auth login --profile agent-a --key sk_atoll_... --org acme
67
+ atoll auth login --profile agent-b --key sk_atoll_... --org client
68
+ atoll auth profiles
69
+ atoll auth use agent-a
70
+
71
+ # Run one command as a specific profile
72
+ atoll --profile agent-b issue list
73
+ ```
74
+
63
75
  Common commands:
64
76
 
65
77
  ```bash
@@ -150,6 +162,12 @@ Every KPI snapshot can be attributed to an initiative or issue, building a recor
150
162
 
151
163
  `POST /api/orgs/{id}/issues/bulk` with `{ "issues": [{...}, ...] }` (max 50).
152
164
 
165
+ ### Billing and plan limits
166
+
167
+ Owners/admins can read billing state with `GET /api/orgs/{id}/billing` and start Stripe checkout with `POST /api/orgs/{id}/billing/checkout` using `{ "plan": "starter" }` or `{ "plan": "team" }`.
168
+
169
+ Creation endpoints can return `402` with `code: "PLAN_LIMIT_REACHED"` when an org reaches limits for humans, agents/integrations, active projects, or active issues.
170
+
153
171
  ## API Reference
154
172
 
155
173
  Full endpoint tables and field schemas:
@@ -10,6 +10,7 @@ All endpoints require `Authorization: Bearer sk_atoll_...` header.
10
10
  - [Projects](#projects)
11
11
  - [Project Members](#project-members)
12
12
  - [Project Teams](#project-teams)
13
+ - [Billing](#billing)
13
14
  - [Tasks (Issues)](#tasks-issues)
14
15
  - [Dependencies](#dependencies)
15
16
  - [Comments](#comments)
@@ -85,6 +86,18 @@ Access levels: `view`, `edit`, `admin` (default: `view`).
85
86
  | POST | `/api/orgs/{id}/projects/{projectId}/teams` | Add team (`{ teamId }`) |
86
87
  | DELETE | `/api/orgs/{id}/projects/{projectId}/teams?teamId=...` | Remove team |
87
88
 
89
+ ## Billing
90
+
91
+ Org billing is managed through Stripe. Owners/admins can create checkout and billing portal sessions.
92
+
93
+ | Method | Endpoint | Description |
94
+ |--------|----------|-------------|
95
+ | GET | `/api/orgs/{id}/billing` | Get plan, status, usage, limits, and subscription summary |
96
+ | POST | `/api/orgs/{id}/billing/checkout` | Create Stripe Checkout Session (`{ plan: "starter" \| "team" }`) |
97
+ | POST | `/api/orgs/{id}/billing/portal` | Create Stripe Billing Portal Session |
98
+
99
+ Plan limits are enforced when creating projects, human members, agents/integrations, and active tasks. Limit errors return `402` with `code: "PLAN_LIMIT_REACHED"`.
100
+
88
101
  ## Tasks (Issues)
89
102
 
90
103
  | Method | Endpoint | Description |
@@ -12,6 +12,7 @@
12
12
  - [Webhook Fields](#webhook-fields)
13
13
  - [Heartbeat Response](#heartbeat-response)
14
14
  - [Analytics Response](#analytics-response)
15
+ - [Plan Limit Errors](#plan-limit-errors)
15
16
  - [Enums](#enums)
16
17
 
17
18
  ---
@@ -53,6 +54,23 @@ All fields work on both POST (create) and PATCH (update).
53
54
  ```
54
55
  Returns `{ issues: [...], count: N }` (201). Max 50 per request.
55
56
 
57
+ ## Plan Limit Errors
58
+
59
+ Creation endpoints may return `402` when an org reaches its billing plan limit:
60
+
61
+ ```json
62
+ {
63
+ "error": "Plan limit reached",
64
+ "code": "PLAN_LIMIT_REACHED",
65
+ "resource": "activeProjects",
66
+ "plan": "free",
67
+ "limit": 2,
68
+ "usage": 2
69
+ }
70
+ ```
71
+
72
+ `resource` is one of `humans`, `agents`, `activeProjects`, or `activeIssues`.
73
+
56
74
  ## Goal Fields
57
75
 
58
76
  ```json
@@ -234,7 +252,7 @@ URL must be HTTPS. Response includes `secret` for HMAC signature verification.
234
252
 
235
253
  ## Response Format
236
254
 
237
- All endpoints return JSON. Successful: `200` or `201`. Errors: `{ "error": "message" }` with `400`, `401`, `403`, `404`, `409`, or `500`.
255
+ All endpoints return JSON. Successful: `200` or `201`. Errors: `{ "error": "message" }` with `400`, `401`, `402`, `403`, `404`, `409`, or `500`.
238
256
 
239
257
  List responses include `total`, `limit`, `offset` for pagination.
240
258