@owlmetry/cli 0.1.14 → 0.1.15

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/index.cjs CHANGED
@@ -6983,14 +6983,14 @@ funnelsCommand.command("delete <slug>").description("Delete a funnel definition"
6983
6983
  await client.deleteFunnel(slug, opts.projectId);
6984
6984
  console.log(source_default.green(`Funnel "${slug}" deleted.`));
6985
6985
  });
6986
- funnelsCommand.command("query <slug>").description("Query funnel analytics").requiredOption("--project-id <id>", "Project ID").option("--since <date>", "Start time (e.g. 1h, 30m, 7d, or ISO 8601)").option("--until <date>", "End time (e.g. 1h, 30m, 7d, or ISO 8601)").option("--open", "Make this an open funnel. In an open funnel, users don't have to complete a previous step in order to be included in a subsequent step.").option("--app-version <version>", "Filter by app version").option("--environment <env>", "Filter by environment (ios, ipados, macos, android, web, backend)").option("--experiment <name:variant>", "Filter by experiment (format: name:variant)").option("--group-by <field>", "Group by: environment, app_version, or experiment:<name>").addOption(
6986
+ funnelsCommand.command("query <slug>").description("Query funnel analytics").requiredOption("--project-id <id>", "Project ID").option("--since <date>", "Start time (e.g. 1h, 30m, 7d, or ISO 8601)").option("--until <date>", "End time (e.g. 1h, 30m, 7d, or ISO 8601)").option("--closed", "Use closed (sequential) mode. Users must complete each step in order.").option("--app-version <version>", "Filter by app version").option("--environment <env>", "Filter by environment (ios, ipados, macos, android, web, backend)").option("--experiment <name:variant>", "Filter by experiment (format: name:variant)").option("--group-by <field>", "Group by: environment, app_version, or experiment:<name>").addOption(
6987
6987
  new Option("--data-mode <mode>", "Data mode: production, development, or all").choices(["production", "development", "all"]).default("production")
6988
6988
  ).action(async (slug, opts, cmd) => {
6989
6989
  const { client, globals } = createClient(cmd);
6990
6990
  const result = await client.queryFunnel(slug, opts.projectId, {
6991
6991
  since: opts.since,
6992
6992
  until: opts.until,
6993
- mode: opts.open ? "open" : "closed",
6993
+ mode: opts.closed ? "closed" : "open",
6994
6994
  app_version: opts.appVersion,
6995
6995
  environment: opts.environment,
6996
6996
  experiment: opts.experiment,
@@ -7169,7 +7169,7 @@ var switchCommand = new Command("switch").description("Switch active team profil
7169
7169
  });
7170
7170
 
7171
7171
  // src/index.ts
7172
- var program2 = new Command().name("owlmetry").version("0.1.14").description("OwlMetry CLI \u2014 query metrics and manage your apps from the terminal").addOption(
7172
+ var program2 = new Command().name("owlmetry").version("0.1.15").description("OwlMetry CLI \u2014 query metrics and manage your apps from the terminal").addOption(
7173
7173
  new Option("--format <format>", "Output format").choices(["table", "json", "log"]).default("table")
7174
7174
  ).option("--endpoint <url>", "OwlMetry API server URL").option("--api-key <key>", "API key").option("--ingest-endpoint <url>", "OwlMetry ingest endpoint URL (for SDKs; defaults to API endpoint for self-hosted)").option("--team <name-or-id>", "Use a specific team profile for this command");
7175
7175
  program2.addCommand(authCommand);
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: owlmetry-cli
3
- version: 0.1.14
3
+ version: 0.1.15
4
4
  description: >-
5
5
  Install the OwlMetry CLI, sign up, and manage projects, apps, metrics,
6
6
  funnels, and events. Use when adding OwlMetry to a project, querying
@@ -172,7 +172,7 @@ owlmetry funnels view <slug> --project-id <id> --format json
172
172
  owlmetry funnels create --project-id <id> --name <name> --slug <slug> --steps-file <path> [--description <desc>] --format json
173
173
  owlmetry funnels update <slug> --project-id <id> --steps-file <path> --format json
174
174
  owlmetry funnels delete <slug> --project-id <id>
175
- owlmetry funnels query <slug> --project-id <id> [--since <time>] [--until <time>] [--open] [--group-by <field>] --format json
175
+ owlmetry funnels query <slug> --project-id <id> [--since <time>] [--until <time>] [--closed] [--group-by <field>] --format json
176
176
 
177
177
  # Events
178
178
  owlmetry events [--project-id <id>] [--app-id <id>] [--level <level>] [--user-id <id>] [--session-id <id>] [--since <time>] [--limit <n>] --format json
@@ -240,9 +240,9 @@ Funnels measure how users progress through a multi-step flow and where they drop
240
240
 
241
241
  Step definitions match directly on the step name passed to `track()` in the SDK — no prefix or transformation needed.
242
242
 
243
- Funnels support two analysis modes:
244
- - **Closed mode** (default): sequential — a user must complete steps in order (step 2 only counts if step 1 was completed first). Use for linear flows like onboarding or checkout.
245
- - **Open mode** (`--open` on query): independent — each step is evaluated separately. Use when steps can happen in any order.
243
+ Both modes group events by `user_id` — events with no `user_id` are excluded from funnel analytics. Funnels support two analysis modes:
244
+ - **Closed mode** (`--closed` on query): sequential — a user must complete steps in order. The system uses each user's earliest timestamp per step and requires strict chronological ordering (step 2 must occur after step 1). Use for linear flows like onboarding or checkout.
245
+ - **Open mode** (default): independent — each step counts distinct users separately, regardless of other steps.
246
246
 
247
247
  Maximum 20 steps per funnel.
248
248
 
@@ -325,10 +325,10 @@ owlmetry metrics query <slug> --project-id <id> [--since <time>] [--until <time>
325
325
  Funnel queries return conversion rates and drop-off between steps. The output shows how many users entered each step and what percentage continued to the next. Use `--group-by` to segment results and compare conversion across environments, app versions, or A/B experiment variants.
326
326
 
327
327
  ```bash
328
- owlmetry funnels query <slug> --project-id <id> [--since <time>] [--until <time>] [--open] [--app-version <v>] [--environment <env>] [--experiment <name:variant>] [--group-by environment|app_version|experiment:<name>] [--data-mode <mode>] --format json
328
+ owlmetry funnels query <slug> --project-id <id> [--since <time>] [--until <time>] [--closed] [--app-version <v>] [--environment <env>] [--experiment <name:variant>] [--group-by environment|app_version|experiment:<name>] [--data-mode <mode>] --format json
329
329
  ```
330
330
 
331
- `--open` = open funnel mode (steps evaluated independently, not sequentially).
331
+ `--closed` = closed (sequential) funnel mode. Without this flag, open mode is used (steps evaluated independently).
332
332
 
333
333
  ### Audit Logs
334
334
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: owlmetry-node
3
- version: 0.1.14
3
+ version: 0.1.15
4
4
  description: >-
5
5
  Integrate the OwlMetry Node.js SDK into a backend service for server-side
6
6
  analytics, event tracking, metrics, funnels, and A/B experiments. Use when
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: owlmetry-swift
3
- version: 0.1.14
3
+ version: 0.1.15
4
4
  description: >-
5
5
  Integrate the OwlMetry Swift SDK into an iOS or macOS app for analytics,
6
6
  event tracking, metrics, funnels, and A/B experiments. Use when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmetry/cli",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "OwlMetry CLI — manage projects, apps, metrics, funnels, and events from the terminal. Includes AI skill files for agent-assisted development.",
5
5
  "type": "module",
6
6
  "license": "MIT",