@ishlabs/cli 0.23.0 → 0.23.1

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.
@@ -175,6 +175,8 @@ Examples:
175
175
  Usage counters:
176
176
  studies_used / studies_max — current study count vs the user's plan cap
177
177
  people_used / people_max — workspace-private participant profile count vs cap
178
+ concurrent_participants_max — max in-flight participants per dispatch
179
+ workspace_members_max — max workspace members (seats)
178
180
 
179
181
  Caps fall back to null when the user's plan grants unlimited (math.inf). The
180
182
  account tier is read from /account/me; limit tables come from /billing/limits.
@@ -196,7 +198,11 @@ Examples:
196
198
  if (usage.tier)
197
199
  console.log(`Plan: ${usage.tier}`);
198
200
  console.log(`Studies: ${usage.studies_used} / ${renderCap(usage.studies_max)}`);
199
- console.log(`Custom people: ${usage.people_used} / ${renderCap(usage.people_max)}`);
201
+ console.log(`Custom people: ${usage.people_used} / ${renderCap(usage.people_max)}`);
202
+ if (usage.concurrent_participants_max !== null)
203
+ console.log(`Max concurrent: ${renderCap(usage.concurrent_participants_max)}`);
204
+ if (usage.workspace_members_max !== null)
205
+ console.log(`Max members: ${renderCap(usage.workspace_members_max)}`);
200
206
  });
201
207
  });
202
208
  workspace
@@ -276,19 +282,18 @@ async function collectWorkspaceUsage(client, workspaceId) {
276
282
  ]);
277
283
  const tier = typeof account.credits?.tier === "string" ? account.credits.tier : null;
278
284
  const tierTable = tier ? limits.tiers?.[tier] ?? null : null;
279
- const studiesMax = tierTable && "maxStudiesPerProduct" in tierTable ? tierTable.maxStudiesPerProduct : null;
280
- const peopleMax = tierTable && "maxCustomPersons" in tierTable
281
- ? tierTable.maxCustomPersons
282
- : null;
285
+ const lookupLimit = (key) => tierTable && key in tierTable ? tierTable[key] : null;
283
286
  return {
284
287
  id: workspaceId,
285
288
  name: product?.name ?? null,
286
289
  base_url: product?.base_url ?? null,
287
290
  tier,
288
291
  studies_used: Array.isArray(studies) ? studies.length : 0,
289
- studies_max: studiesMax,
292
+ studies_max: lookupLimit("maxStudiesPerProduct"),
290
293
  people_used: typeof participants.total === "number" ? participants.total : 0,
291
- people_max: peopleMax,
294
+ people_max: lookupLimit("maxCustomPersons"),
295
+ concurrent_participants_max: lookupLimit("maxConcurrentParticipants"),
296
+ workspace_members_max: lookupLimit("maxWorkspaceMembers"),
292
297
  };
293
298
  }
294
299
  // ---------------------------------------------------------------------------
package/dist/lib/docs.js CHANGED
@@ -113,15 +113,17 @@ ish workspace info --json
113
113
  {
114
114
  "studies_used": 2,
115
115
  "studies_max": 3,
116
- "participants_used": 0,
117
- "participants_max": 3,
116
+ "people_used": 0,
117
+ "people_max": 3,
118
+ "concurrent_participants_max": 3,
119
+ "workspace_members_max": 1,
118
120
  "tier": "free"
119
121
  }
120
122
  \`\`\`
121
123
 
122
124
  A \`null\` value on a \`*_max\` field means "unlimited" (paid tiers).
123
125
  Branch on \`studies_used >= studies_max\` before \`study create\`,
124
- likewise for \`participants_used\` before \`study run --sample\`.
126
+ likewise for \`people_used\` before \`study run --sample\`.
125
127
 
126
128
  ## Cold start — \`workspace_create\` is not safe to call blind
127
129
 
@@ -3027,16 +3029,21 @@ The \`formula\` key is stable: agents can branch on it (\`media_per_participant\
3027
3029
 
3028
3030
  ## Tier allotments
3029
3031
 
3030
- | Tier | Monthly credits | Notes |
3031
- |-------------|---------------------------|--------------------------------|
3032
- | FREE | 200 (one-time signup) | Never refilled |
3033
- | STARTER | 1,000 / month | Monthly reset |
3034
- | PRO | 3,000 / month | Monthly reset |
3035
- | ENTERPRISE | unlimited | Custom contract |
3032
+ Paid tiers use **dynamic credit budgets** — the user selects a credit
3033
+ bucket at subscription time. The table shows the range of available
3034
+ buckets per tier:
3035
+
3036
+ | Tier | Monthly credits | Notes |
3037
+ |-------------|---------------------------|--------------------------------------|
3038
+ | FREE | 200 (one-time signup) | Never refilled |
3039
+ | STARTER | 200 – 2,500 / month | User selects bucket (solo, 1 seat) |
3040
+ | PRO | 500 – 10,000 / month | User selects bucket (team, 10 seats) |
3041
+ | ENTERPRISE | unlimited | Custom contract |
3036
3042
 
3037
3043
  The CLI does not enforce these — the backend does. The CLI's job is to
3038
3044
  *preview*, so an agent doesn't dispatch a 5,000-credit run on a
3039
- 200-credit account.
3045
+ 200-credit account. The actual credit budget for a given account depends
3046
+ on which bucket the user chose — query \`workspace info\` for headroom.
3040
3047
 
3041
3048
  ## Insufficient-credit rejection shape
3042
3049
 
@@ -3116,12 +3123,18 @@ request time, for any client, is the backend's \`TIER_LIMITS\` dict in
3116
3123
  | \`maxProducts\` | 1 | 1 | ∞ | ∞ | ∞ |
3117
3124
  | \`maxStudiesPerProduct\` | 3 | ∞ | ∞ | ∞ | ∞ |
3118
3125
  | \`maxIterationsPerStudy\` | 2 | ∞ | ∞ | ∞ | ∞ |
3119
- | \`maxCustomPersons\` | 3 | 10 | 10 | ∞ | ∞ |
3126
+ | \`maxCustomPersons\` | 3 | 10 | 10 | ∞ | ∞ |
3127
+ | \`maxConcurrentParticipants\` | 3 | 3 | 10 | 50 | ∞ |
3128
+ | \`maxWorkspaceMembers\` | 1 | 1 | 1 | 10 | ∞ |
3120
3129
 
3121
3130
  Commands that may hit a limit: \`ish workspace create\`,
3122
3131
  \`ish study create\`, \`ish study generate\`, \`ish iteration create\`,
3123
3132
  \`ish person create\`, \`ish person generate\`.
3124
3133
 
3134
+ \`maxConcurrentParticipants\` gates how many participants can be in-flight
3135
+ at once per dispatch. \`maxWorkspaceMembers\` gates workspace membership
3136
+ (seats). Both are enforced server-side.
3137
+
3125
3138
  ## What you see when a limit is hit
3126
3139
 
3127
3140
  Human output (stderr):
@@ -585,7 +585,7 @@ also in \`study poll --json\`. Branch on it instead of treating
585
585
  \`interaction_count: 0\` as a generic failure.
586
586
 
587
587
  Pre-flight tip: \`ish workspace info\` exposes
588
- \`{studies_used, studies_max, participants_used, participants_max, tier}\` so
588
+ \`{studies_used, studies_max, people_used, people_max, concurrent_participants_max, workspace_members_max, tier}\` so
589
589
  you can branch on plan caps before \`study create\` returns
590
590
  \`error_code: usage_limit_reached\`.
591
591
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ishlabs/cli",
3
- "version": "0.23.0",
3
+ "version": "0.23.1",
4
4
  "description": "The command-line interface for ish",
5
5
  "type": "module",
6
6
  "bin": {