@ishlabs/cli 0.24.1 → 0.26.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 (43) hide show
  1. package/dist/commands/ask.js +3 -3
  2. package/dist/commands/doctor.d.ts +26 -0
  3. package/dist/commands/doctor.js +334 -0
  4. package/dist/commands/iteration.js +1 -1
  5. package/dist/commands/study-analyze.js +1 -1
  6. package/dist/commands/study-run.js +80 -12
  7. package/dist/commands/study.js +11 -7
  8. package/dist/index.js +2 -0
  9. package/dist/lib/alias-store.js +1 -1
  10. package/dist/lib/api-client.d.ts +2 -0
  11. package/dist/lib/docs.js +57 -42
  12. package/dist/lib/local-sim/actions.d.ts +10 -2
  13. package/dist/lib/local-sim/actions.js +18 -11
  14. package/dist/lib/local-sim/adb.d.ts +113 -0
  15. package/dist/lib/local-sim/adb.js +366 -0
  16. package/dist/lib/local-sim/android.d.ts +111 -0
  17. package/dist/lib/local-sim/android.js +504 -0
  18. package/dist/lib/local-sim/apk-manifest.d.ts +22 -0
  19. package/dist/lib/local-sim/apk-manifest.js +210 -0
  20. package/dist/lib/local-sim/browser.d.ts +22 -0
  21. package/dist/lib/local-sim/browser.js +65 -0
  22. package/dist/lib/local-sim/coordinates.d.ts +69 -0
  23. package/dist/lib/local-sim/coordinates.js +59 -0
  24. package/dist/lib/local-sim/device.d.ts +143 -0
  25. package/dist/lib/local-sim/device.js +152 -0
  26. package/dist/lib/local-sim/ios.d.ts +185 -0
  27. package/dist/lib/local-sim/ios.js +599 -0
  28. package/dist/lib/local-sim/loop.d.ts +14 -2
  29. package/dist/lib/local-sim/loop.js +168 -73
  30. package/dist/lib/local-sim/native-a11y.d.ts +111 -0
  31. package/dist/lib/local-sim/native-a11y.js +419 -0
  32. package/dist/lib/local-sim/simctl.d.ts +55 -0
  33. package/dist/lib/local-sim/simctl.js +144 -0
  34. package/dist/lib/local-sim/types.d.ts +39 -2
  35. package/dist/lib/local-sim/upload.d.ts +1 -1
  36. package/dist/lib/local-sim/upload.js +9 -6
  37. package/dist/lib/local-sim/xcuitest.d.ts +60 -0
  38. package/dist/lib/local-sim/xcuitest.js +303 -0
  39. package/dist/lib/output.js +58 -12
  40. package/dist/lib/paths.d.ts +8 -0
  41. package/dist/lib/paths.js +12 -0
  42. package/dist/lib/skill-content.js +10 -9
  43. package/package.json +2 -1
package/dist/lib/paths.js CHANGED
@@ -34,6 +34,18 @@ export function cloudflaredBin() {
34
34
  const exe = process.platform === "win32" ? "cloudflared.exe" : "cloudflared";
35
35
  return path.join(binDir(), exe);
36
36
  }
37
+ /**
38
+ * Cache dir for the prebuilt iOS XCUITest runner (WebDriverAgent) bundle —
39
+ * the `.app` + `.xctestrun` fetched on demand for native iOS simulations,
40
+ * mirroring how `cloudflaredBin()` is fetched into `binDir()`.
41
+ */
42
+ export function wdaDir() {
43
+ return path.join(binDir(), "wda");
44
+ }
45
+ /** Stamp file recording which CLI/runner version the cached WDA bundle is for. */
46
+ export function wdaVersionFile() {
47
+ return path.join(wdaDir(), "VERSION");
48
+ }
37
49
  export function connectLockPath() {
38
50
  return path.join(rootDir(), "connect.lock");
39
51
  }
@@ -174,7 +174,7 @@ Examples below use MCP shape; for CLI, kebab-case the tool name (\`ask_run\` →
174
174
 
175
175
  - **Input**: a \`description\`, a \`count\`, and optionally \`sources\` (transcripts / audio / images / docs that seed persona generation — for "make profiles that feel like these real customers"). Local files force CLI (binary upload constraint).
176
176
  - **Output**: a list of \`person_ids\` to pass into \`ask_run\` or \`study_run\`.
177
- - **Cost**: slow (~30-120s) + credit-bearing. Reuse profiles via \`profile_list\` when possible. Sensible defaults: \`count: 5-10\` for ad-hoc tests, \`count: 20+\` for studies where you want statistical signal.
177
+ - **Usage**: slow (~30-120s) + draws credits. Reuse profiles via \`profile_list\` when possible. Sensible defaults: \`count: 5-10\` for ad-hoc tests, \`count: 20+\` for studies where you want statistical signal.
178
178
  - **Growing a group of people**: build only the delta — don't rebuild. Concat the new \`person_ids\` with the existing ones for the next run. The "audience is a query" framing means there's no audience entity to update.
179
179
  - **Shapes**:
180
180
  \`\`\`
@@ -216,7 +216,7 @@ To hand a study to someone **without an ish account** — a prospect, a stakehol
216
216
  - **Cold start on free plan**: \`workspace_create\` returns \`usage_limit_reached\` at the free-plan cap (1 workspace). Always inspect with \`workspace_list\` first. **MCP-only recipe** (no \`--ensure\` available): \`workspace_list\` → if non-empty, use the first; if empty, \`workspace_create\`; if \`workspace_create\` returns \`usage_limit_reached\`, re-call \`workspace_list\` (a workspace exists you didn't see — possibly created by another session). **CLI shortcut**: \`ish workspace create --name <name> --ensure\` is idempotent by name.
217
217
  - **Ask participants vs variants** — see Lifecycle table for the re-use vs new-ask decision.
218
218
  - **Study iterations are immutable once they have results** — see Lifecycle table for new-iteration vs new-study.
219
- - **Credit costs**: \`ask_run\`, \`study_run\`, and \`group_build\` consume credits. Check \`workspace_get\`'s \`credits\` headroom before dispatching large runs. For free-plan ad-hoc tests, default \`count: 5-8\` participants + 2 variants is usually within budget.
219
+ - **Credit usage**: \`ask_run\`, \`study_run\`, and \`group_build\` draw credits — this is the normal, expected way to use ish, so run them without hesitation. Credits are a usage allowance (paid plans refill monthly; the free tier is a one-time signup grant), not a per-call bill. Check \`workspace_get\`'s \`credits\` headroom before dispatching large runs. For free-plan ad-hoc tests, default \`count: 5-8\` participants + 2 variants comfortably fits the signup grant.
220
220
  - **\`group_build\` may return fewer profiles than requested** if the description is over-constrained. Always read the returned \`person_ids\` count, don't trust the requested \`count\` blindly.
221
221
  - **Variants of wildly different length** (one-line vs paragraph) can skew picks toward the longer one. Keep variants comparable in shape.
222
222
  - **Chatbot endpoint response-shape mismatch**: \`chat_endpoint_test\` succeeds shallowly if the bot responds at all, but a wrong response path (e.g. bot returns \`{ data: { reply } }\` instead of \`{ reply }\`) produces empty transcripts on the actual run. Inspect one full test response before dispatching participants.
@@ -869,12 +869,13 @@ ish study results <study-id> --transcript <participant-id> --json
869
869
 
870
870
  ## 9. Stage an ask for human review, then dispatch
871
871
 
872
- Goal: prepare a billable A/B but let the user inspect and approve the
873
- people + prompt before any credits are spent. Two-step flow with a
874
- DRAFT status in between.
872
+ Goal: prepare an A/B but let the user inspect and approve the
873
+ people + prompt before any credits are drawn. Two-step flow with a
874
+ DRAFT status in between. (Drawing credits to run an ask is normal — the
875
+ draft step is for human review, not to avoid the credit usage.)
875
876
 
876
877
  \`\`\`bash
877
- # 1. Stage. No worker enqueued, no bill. Audience flags are still
878
+ # 1. Stage. No worker enqueued, no credits drawn. Audience flags are still
878
879
  # required — participants materialize at create time.
879
880
  ASK=$(ish ask create --name "tagline AB" \\
880
881
  --prompt "Which sounds better?" \\
@@ -888,7 +889,7 @@ ASK=$(ish ask create --name "tagline AB" \\
888
889
  # ish ask get "$ASK" # status: draft
889
890
  # ish ask get "$ASK" --json | jq '.participants | length'
890
891
 
891
- # 2. Dispatch once approved (BILLABLE). Idempotent: a non-DRAFT ask
892
+ # 2. Dispatch once approved (draws credits). Idempotent: a non-DRAFT ask
892
893
  # returns 409 mapped to exit 2, so re-running is safe.
893
894
  ish ask dispatch "$ASK" --wait
894
895
  \`\`\`
@@ -971,7 +972,7 @@ Rules to remember:
971
972
  untouched. Get the new id from \`.participant_id\` / \`.participant_alias\` on
972
973
  \`--json\`.
973
974
  - \`--add-steps\` is **only** the extra budget; it does NOT include the
974
- source's original cap. Credits debit per
975
+ source's original cap. Credits draw per
975
976
  \`max(1, round(additional_steps / 10))\` — same formula as
976
977
  \`study run\` interactive, just scoped to the extension.
977
978
  - \`--instruction\` accepts three input shapes (matching the rest of
@@ -982,7 +983,7 @@ Rules to remember:
982
983
  \`study run\`. Extend always inherits the source's iteration config.
983
984
 
984
985
  See \`ish docs get-page concepts/extending-a-simulation\` for the full
985
- mental model (cancel + extend as a pair, error envelopes, cost model).
986
+ mental model (cancel + extend as a pair, error envelopes, credit model).
986
987
 
987
988
  ## 12. Slice study results by frame / segment / turn / sentiment
988
989
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ishlabs/cli",
3
- "version": "0.24.1",
3
+ "version": "0.26.0",
4
4
  "description": "The command-line interface for ish",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,6 +14,7 @@
14
14
  "verify:skills-parity": "npm run build && node scripts/verify-skills-parity.mjs",
15
15
  "dev": "tsc --watch",
16
16
  "test": "npm run build && node --test --test-concurrency=1 tests/*.test.mjs",
17
+ "mobile-e2e": "./scripts/mobile-e2e/run.sh all",
17
18
  "prepublishOnly": "npm test"
18
19
  },
19
20
  "engines": {