@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.
- package/dist/commands/ask.js +3 -3
- package/dist/commands/doctor.d.ts +26 -0
- package/dist/commands/doctor.js +334 -0
- package/dist/commands/iteration.js +1 -1
- package/dist/commands/study-analyze.js +1 -1
- package/dist/commands/study-run.js +80 -12
- package/dist/commands/study.js +11 -7
- package/dist/index.js +2 -0
- package/dist/lib/alias-store.js +1 -1
- package/dist/lib/api-client.d.ts +2 -0
- package/dist/lib/docs.js +57 -42
- package/dist/lib/local-sim/actions.d.ts +10 -2
- package/dist/lib/local-sim/actions.js +18 -11
- package/dist/lib/local-sim/adb.d.ts +113 -0
- package/dist/lib/local-sim/adb.js +366 -0
- package/dist/lib/local-sim/android.d.ts +111 -0
- package/dist/lib/local-sim/android.js +504 -0
- package/dist/lib/local-sim/apk-manifest.d.ts +22 -0
- package/dist/lib/local-sim/apk-manifest.js +210 -0
- package/dist/lib/local-sim/browser.d.ts +22 -0
- package/dist/lib/local-sim/browser.js +65 -0
- package/dist/lib/local-sim/coordinates.d.ts +69 -0
- package/dist/lib/local-sim/coordinates.js +59 -0
- package/dist/lib/local-sim/device.d.ts +143 -0
- package/dist/lib/local-sim/device.js +152 -0
- package/dist/lib/local-sim/ios.d.ts +185 -0
- package/dist/lib/local-sim/ios.js +599 -0
- package/dist/lib/local-sim/loop.d.ts +14 -2
- package/dist/lib/local-sim/loop.js +168 -73
- package/dist/lib/local-sim/native-a11y.d.ts +111 -0
- package/dist/lib/local-sim/native-a11y.js +419 -0
- package/dist/lib/local-sim/simctl.d.ts +55 -0
- package/dist/lib/local-sim/simctl.js +144 -0
- package/dist/lib/local-sim/types.d.ts +39 -2
- package/dist/lib/local-sim/upload.d.ts +1 -1
- package/dist/lib/local-sim/upload.js +9 -6
- package/dist/lib/local-sim/xcuitest.d.ts +60 -0
- package/dist/lib/local-sim/xcuitest.js +303 -0
- package/dist/lib/output.js +58 -12
- package/dist/lib/paths.d.ts +8 -0
- package/dist/lib/paths.js +12 -0
- package/dist/lib/skill-content.js +10 -9
- 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
|
-
- **
|
|
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
|
|
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
|
|
873
|
-
people + prompt before any credits are
|
|
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
|
|
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 (
|
|
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
|
|
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,
|
|
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.
|
|
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": {
|