@thinkingai/ae-cli 6.0.40 → 6.0.41

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 (131) hide show
  1. package/README.md +0 -2
  2. package/README.zh.md +0 -2
  3. package/dist/{auth-NN55553T.js → auth-GBMV6TEJ.js} +2 -2
  4. package/dist/{auth-GDV3H5I4.js → auth-NDSXE54J.js} +4 -4
  5. package/dist/{capability-TPORIKRQ.js → capability-CETVHGXF.js} +25 -15
  6. package/dist/{capability-VQNC5CF7.js → capability-ZSQBMNOE.js} +25 -15
  7. package/dist/{chunk-GJJA4CQZ.js → chunk-3FY3RJ26.js} +0 -4
  8. package/dist/chunk-4E3DB4MM.js +556 -0
  9. package/dist/{chunk-GS2P7LFD.js → chunk-5XUSIK27.js} +2 -2
  10. package/dist/{chunk-VTXHDCBW.js → chunk-AFXA7BRK.js} +2 -2
  11. package/dist/{chunk-7KQWSBSL.js → chunk-FNZA5RZA.js} +8 -8
  12. package/dist/{chunk-TS6BUGUY.js → chunk-J2N4PB56.js} +8 -8
  13. package/dist/{chunk-RBNKI5ZW.js → chunk-JUW4AJXN.js} +2 -2
  14. package/dist/{chunk-Z3OXWCIA.js → chunk-S5NTSDBS.js} +2 -2
  15. package/dist/{chunk-VKD5WQKN.js → chunk-VLWOLBGZ.js} +142 -24
  16. package/dist/chunk-WANVG6SY.js +556 -0
  17. package/dist/{chunk-YTG6Q75E.js → chunk-WZRX4KOH.js} +25 -3
  18. package/dist/{chunk-YV52FB5G.js → chunk-ZQKDZXDO.js} +1 -1
  19. package/dist/{cli-token-GL5MS5FK.js → cli-token-4UPER74P.js} +3 -3
  20. package/dist/{chunk-6A2FUCIS.js → client-L2YDMHQ6.js} +5 -6
  21. package/dist/{config-4VZNLBKF.js → config-OL2LWGBV.js} +4 -33
  22. package/dist/index.js +31 -44
  23. package/dist/{memory-RWJW4XFO.js → memory-MUP7PPL7.js} +4 -4
  24. package/dist/{memory-VO2ZJCRT.js → memory-U4O5PMXH.js} +4 -4
  25. package/dist/{metadata-YGTHR2XJ.js → metadata-UKZDNLLQ.js} +21 -11
  26. package/dist/{metadata-ZRN2GHPN.js → metadata-XXMJFN2M.js} +21 -11
  27. package/dist/{model-CLUIK3K5.js → model-JTUEO5M4.js} +2 -2
  28. package/dist/{sync-3REDHGY6.js → sync-MOSFNBVR.js} +5 -5
  29. package/dist/{te-agent-XNPELAKX.js → te-agent-IFKZDHZI.js} +25 -18
  30. package/dist/{te-analysis-GJI5FZUL.js → te-analysis-3QLLS35K.js} +1231 -456
  31. package/dist/{te-analysis-N2BRDJZ5.js → te-analysis-YSK2DBVL.js} +1231 -456
  32. package/dist/{te-community-SQXKE5OO.js → te-community-HNKVTERD.js} +207 -12
  33. package/dist/{te-community-TYSNU3NQ.js → te-community-IWE5B7W6.js} +208 -12
  34. package/dist/{te-dataops-OWIADNSM.js → te-dataops-KQPYNAE3.js} +262 -145
  35. package/dist/{te-dataops-5TM7WZDI.js → te-dataops-KXCEB4CS.js} +262 -145
  36. package/dist/{te-engage-L72HWRGO.js → te-engage-6RNGK5GH.js} +566 -17
  37. package/dist/{te-engage-QWM4GFS7.js → te-engage-IRMHTSQK.js} +566 -17
  38. package/dist/{te-kb-VRMEY3D4.js → te-kb-OIH3T6CS.js} +4 -4
  39. package/dist/{te-system-XGS5EQIQ.js → te-system-AZ3URMUO.js} +515 -11
  40. package/dist/{te-team-BZRDV2CM.js → te-team-GZPU6UWA.js} +5 -5
  41. package/dist/{update-HEDXGOJH.js → update-TOBFXF2V.js} +4 -4
  42. package/package.json +5 -5
  43. package/skills/ae-agent/SKILL.md +3 -3
  44. package/skills/ae-agent/references/list-skill-references.md +4 -4
  45. package/skills/ae-agent/references/read-skill-reference.md +10 -7
  46. package/skills/ae-agent/references/upload-skill-reference.md +11 -9
  47. package/skills/ae-analysis/SKILL.md +15 -12
  48. package/skills/ae-analysis/metadata_resolution.md +150 -0
  49. package/skills/ae-analysis/references/adhoc_export.md +17 -2
  50. package/skills/ae-analysis/references/adhoc_run.md +12 -8
  51. package/skills/ae-analysis/references/ai_models.md +31 -5
  52. package/skills/ae-analysis/references/analysis_data_retrieval.md +104 -16
  53. package/skills/ae-analysis/references/analysis_drilldown_contract.md +4 -4
  54. package/skills/ae-analysis/references/analysis_gateway_assets.md +12 -10
  55. package/skills/ae-analysis/references/artifact_download.md +4 -3
  56. package/skills/ae-analysis/references/asset_abnormal_list.md +5 -3
  57. package/skills/ae-analysis/references/asset_authentication_list.md +5 -3
  58. package/skills/ae-analysis/references/asset_search.md +5 -3
  59. package/skills/ae-analysis/references/bi_panel_page_data_export.md +1 -1
  60. package/skills/ae-analysis/references/bi_panel_page_data_run.md +4 -4
  61. package/skills/ae-analysis/references/catalog_export.md +28 -0
  62. package/skills/ae-analysis/references/catalog_list.md +44 -0
  63. package/skills/ae-analysis/references/command_index.md +72 -63
  64. package/skills/ae-analysis/references/dashboard_report_data_run.md +11 -4
  65. package/skills/ae-analysis/references/datatable_version_list.md +5 -3
  66. package/skills/ae-analysis/references/drilldown_entities_run.md +4 -4
  67. package/skills/ae-analysis/references/drilldown_events_run.md +2 -2
  68. package/skills/ae-analysis/references/drilldown_user_events_export.md +1 -1
  69. package/skills/ae-analysis/references/drilldown_user_events_run.md +2 -2
  70. package/skills/ae-analysis/references/entity_detail_run.md +4 -4
  71. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  72. package/skills/ae-analysis/references/event_detail_run.md +4 -4
  73. package/skills/ae-analysis/references/event_export.md +21 -0
  74. package/skills/ae-analysis/references/event_list.md +7 -6
  75. package/skills/ae-analysis/references/exchange_rule_list.md +5 -3
  76. package/skills/ae-analysis/references/history_tag_data_drilldown_export.md +4 -2
  77. package/skills/ae-analysis/references/history_tag_data_drilldown_run.md +2 -2
  78. package/skills/ae-analysis/references/history_tag_data_run.md +2 -2
  79. package/skills/ae-analysis/references/metric_export.md +21 -0
  80. package/skills/ae-analysis/references/metric_list.md +8 -7
  81. package/skills/ae-analysis/references/property_export.md +21 -0
  82. package/skills/ae-analysis/references/property_list.md +9 -8
  83. package/skills/ae-analysis/references/query_context_get.md +20 -0
  84. package/skills/ae-analysis/references/query_create_result_cluster.md +1 -1
  85. package/skills/ae-analysis/references/report_change_log_list.md +1 -1
  86. package/skills/ae-analysis/references/report_create.md +3 -3
  87. package/skills/ae-analysis/references/report_data_run.md +8 -8
  88. package/skills/ae-analysis/references/report_update.md +3 -3
  89. package/skills/ae-analysis/references/report_version_rollback.md +1 -1
  90. package/skills/ae-analysis/references/rule_list.md +6 -4
  91. package/skills/ae-analysis/references/run_inspect.md +8 -5
  92. package/skills/ae-analysis/references/run_wait.md +37 -0
  93. package/skills/ae-analysis/references/user_cluster_export.md +13 -0
  94. package/skills/ae-analysis/references/user_cluster_list.md +6 -2
  95. package/skills/ae-analysis/references/user_cluster_member_export.md +5 -3
  96. package/skills/ae-analysis/references/user_cluster_member_list.md +4 -4
  97. package/skills/ae-analysis/references/user_tag_export.md +13 -0
  98. package/skills/ae-analysis/references/user_tag_list.md +6 -2
  99. package/skills/ae-analysis/references/user_tag_member_export.md +5 -3
  100. package/skills/ae-analysis/references/user_tag_member_list.md +4 -4
  101. package/skills/ae-analysis/references/virtual_property_create.md +2 -2
  102. package/skills/ae-community/SKILL.md +2 -2
  103. package/skills/ae-dataops/SKILL.md +4 -3
  104. package/skills/ae-dataops/references/dataops-flow-create.md +47 -3
  105. package/skills/ae-engage/SKILL.md +46 -6
  106. package/skills/ae-engage/references/build-task-save-guide.md +12 -0
  107. package/skills/ae-engage/references/cancel-query-run.md +31 -0
  108. package/skills/ae-engage/references/config-item-analysis-report.md +14 -1
  109. package/skills/ae-engage/references/config-item-strategy-comparison.md +11 -1
  110. package/skills/ae-engage/references/config-item-trigger-report.md +15 -1
  111. package/skills/ae-engage/references/flow-metric-detail-report.md +134 -0
  112. package/skills/ae-engage/references/flow-metric-update.md +77 -0
  113. package/skills/ae-engage/references/flow-metric-user.md +118 -0
  114. package/skills/ae-engage/references/flow-node-metric-user.md +122 -0
  115. package/skills/ae-engage/references/flow-node-user.md +122 -0
  116. package/skills/ae-engage/references/push-record-query.md +32 -1
  117. package/skills/ae-engage/references/save-task.md +9 -0
  118. package/skills/ae-engage/references/task-data-detail.md +9 -2
  119. package/skills/ae-engage/references/task-metric-detail.md +9 -2
  120. package/skills/ae-engage/references/task-submit-approval.md +3 -0
  121. package/skills/ae-metadata/SKILL.md +2 -1
  122. package/skills/ae-metadata/references/metadata_data_table_download.md +10 -2
  123. package/skills/ae-metadata/references/metadata_data_table_list.md +5 -2
  124. package/skills/ae-system/SKILL.md +66 -3
  125. package/dist/chunk-DT6Y3TD7.js +0 -232
  126. package/dist/chunk-MVDZ7DBQ.js +0 -231
  127. package/dist/chunk-NBPKWKRA.js +0 -51
  128. package/dist/client-DAIPF7XN.js +0 -23
  129. package/dist/raw-52B4UKO4.js +0 -71
  130. package/dist/te-meta-53BVXPFI.js +0 -95
  131. package/dist/te-meta-TOCBPBXI.js +0 -95
@@ -1,28 +1,38 @@
1
1
  import {
2
- createCapabilityCommand
3
- } from "./chunk-7KQWSBSL.js";
4
- import {
5
- registerCapabilityGatewayRoute,
6
- resolveGatewayDomain
7
- } from "./chunk-PTE56QPL.js";
2
+ assertOutputPathAvailable,
3
+ clientWaitTimeoutSeconds,
4
+ downloadAnalysisArtifact,
5
+ validateLifecycleFlags,
6
+ waitForAnalysisRun,
7
+ withAsyncArtifactLifecycle,
8
+ withInterruptSignal
9
+ } from "./chunk-4E3DB4MM.js";
8
10
  import {
9
- withOutputMetadata
10
- } from "./chunk-YTG6Q75E.js";
11
+ createCapabilityCommand
12
+ } from "./chunk-J2N4PB56.js";
11
13
  import {
12
14
  CapabilityGatewayError,
13
15
  buildCapabilityGatewayUrl,
14
16
  dryRunCapability,
15
17
  executeCapability,
16
18
  executeCapabilityWithEnvelope,
17
- fetchCapabilityGateway,
18
19
  requestCapabilityGateway,
19
20
  requestCapabilityGatewayWithEnvelope,
20
21
  uploadInputFile,
21
22
  validateCapability
22
- } from "./chunk-RBNKI5ZW.js";
23
- import "./chunk-Z3OXWCIA.js";
24
- import "./chunk-YV52FB5G.js";
25
- import "./chunk-GJJA4CQZ.js";
23
+ } from "./chunk-5XUSIK27.js";
24
+ import {
25
+ withOutputMetadata
26
+ } from "./chunk-WZRX4KOH.js";
27
+ import {
28
+ registerCapabilityGatewayRoute,
29
+ resolveGatewayDomain
30
+ } from "./chunk-PTE56QPL.js";
31
+ import {
32
+ getCliToken
33
+ } from "./chunk-S5NTSDBS.js";
34
+ import "./chunk-ZQKDZXDO.js";
35
+ import "./chunk-3FY3RJ26.js";
26
36
  import {
27
37
  CliValidationError
28
38
  } from "./chunk-AXDXJTPC.js";
@@ -30,15 +40,17 @@ import "./chunk-JHENBQ5B.js";
30
40
 
31
41
  // src/commands/te-analysis/capability-shared.ts
32
42
  var ANALYSIS_GATEWAY_CLI_SERVICES = /* @__PURE__ */ new Set(["project", "system"]);
33
- var analysisDataRunRoutingHelp = "Routing: use run only for analysis data that fits <=1000 inline rows and <=180s; use export for full, unknown-size, >1000-row, or long-running data.";
34
- var analysisDataExportRoutingHelp = "Routing: use export for full, unknown-size, >1000-row, or long-running analysis data; inspect/download by run_id/artifact_id; use run only for <=1000-row inline previews.";
43
+ var analysisDataRunRoutingHelp = "Routing: --preview-rows bounds returned business rows per result; omit it to use the model current cluster-configured synchronous limit. Agents should normally pass --preview-rows 100. Use export for full, unknown-size, timed-out, or long-running data.";
44
+ var analysisDataExportRoutingHelp = "Routing: use export for full, unknown-size, timed-out, or long-running analysis data. Plain export submits only; --wait waits, --output waits and atomically downloads, and analysis run wait resumes by run_id. Export commands do not accept --preview-rows.";
35
45
  function createAnalysisCapabilityCommand(config) {
36
46
  const cliPath = resolveAnalysisGatewayCliPath(config);
37
- return createCapabilityCommand({
38
- ...config,
47
+ const { asyncArtifact, ...coreConfig } = config;
48
+ const command = createCapabilityCommand({
49
+ ...coreConfig,
39
50
  ...cliPath,
40
51
  gatewayDomain: "analysis"
41
52
  });
53
+ return asyncArtifact ? withAsyncArtifactLifecycle(command, typeof asyncArtifact === "object" ? asyncArtifact : void 0) : command;
42
54
  }
43
55
  function resolveAnalysisGatewayCliPath(config) {
44
56
  const [capabilityService, capabilityResource, capabilityAction, ...extraSegments] = config.capabilityId.split(".");
@@ -65,18 +77,22 @@ function resolveAnalysisGatewayCliPath(config) {
65
77
  return { cliService: capabilityService, resource, command };
66
78
  }
67
79
  function createAnalysisMetaCapabilityCommand(config) {
68
- return createCapabilityCommand({
69
- ...config,
80
+ const { asyncArtifact, ...coreConfig } = config;
81
+ const command = createCapabilityCommand({
82
+ ...coreConfig,
70
83
  cliService: "analysis-meta",
71
84
  gatewayDomain: "analysis"
72
85
  });
86
+ return asyncArtifact ? withAsyncArtifactLifecycle(command, typeof asyncArtifact === "object" ? asyncArtifact : void 0) : command;
73
87
  }
74
88
  function createAnalysisGovernanceCapabilityCommand(config) {
75
- return createCapabilityCommand({
76
- ...config,
89
+ const { asyncArtifact, ...coreConfig } = config;
90
+ const command = createCapabilityCommand({
91
+ ...coreConfig,
77
92
  cliService: "analysis-governance",
78
93
  gatewayDomain: "analysis"
79
94
  });
95
+ return asyncArtifact ? withAsyncArtifactLifecycle(command, typeof asyncArtifact === "object" ? asyncArtifact : void 0) : command;
80
96
  }
81
97
  var projectIdFlag = {
82
98
  name: "project-id",
@@ -106,20 +122,22 @@ var limitFlag = {
106
122
  desc: "Optional inline result limit.",
107
123
  alias: "l"
108
124
  };
109
- var directoryLimitFlag = {
110
- name: "limit",
125
+ var previewRowsFlag = {
126
+ name: "preview-rows",
111
127
  type: "number",
112
128
  required: false,
113
- desc: "Directory page size. Default: 50, max: 200. Values outside 1..200 are rejected.",
114
- alias: "l",
115
- min: 1,
116
- max: 200
129
+ desc: "Maximum business rows returned per result. Omit to use the current model/cluster synchronous limit. The runtime maximum varies by model; agents should normally pass 100.",
130
+ min: 1
131
+ };
132
+ var analysisModelPreviewRowsFlag = {
133
+ ...previewRowsFlag,
134
+ desc: "Maximum synchronous preview units returned per result. Units are business rows for tabular results. For path results, this limits real nodes per path level before overflow nodes are combined into more. Omit to use the current model/cluster synchronous limit. The runtime maximum varies by model; agents should normally pass 100."
117
135
  };
118
- var memberLimitFlag = {
136
+ var directoryLimitFlag = {
119
137
  name: "limit",
120
138
  type: "number",
121
139
  required: false,
122
- desc: "Bounded member row limit. Default: 50, max: 200. Values outside 1..200 are rejected.",
140
+ desc: "Directory page size. Default: 50, max: 200. Values outside 1..200 are rejected.",
123
141
  alias: "l",
124
142
  min: 1,
125
143
  max: 200
@@ -145,24 +163,6 @@ var reportModelTypesFlag = {
145
163
  required: false,
146
164
  desc: 'Optional semantic report model JSON array, for example ["event","sql","tag","revenue"].'
147
165
  };
148
- var syncLimitFlag = {
149
- name: "limit",
150
- type: "number",
151
- required: false,
152
- desc: "Maximum inline rows for sync query results. Default: 100, max: 1000. Use export for full data.",
153
- alias: "l",
154
- min: 1,
155
- max: 1e3
156
- };
157
- var detailPreviewLimitFlag = {
158
- name: "limit",
159
- type: "number",
160
- required: false,
161
- desc: "Maximum first preview rows. Default: 100, max: 1000. This is not a pagination window; use export for more rows.",
162
- alias: "l",
163
- min: 1,
164
- max: 1e3
165
- };
166
166
  var offsetFlag = {
167
167
  name: "offset",
168
168
  type: "number",
@@ -170,6 +170,14 @@ var offsetFlag = {
170
170
  desc: "Optional zero-based result offset.",
171
171
  alias: "o"
172
172
  };
173
+ var directoryOffsetFlag = {
174
+ name: "offset",
175
+ type: "number",
176
+ required: false,
177
+ desc: "Zero-based directory page offset. Default: 0. Negative values are rejected.",
178
+ alias: "o",
179
+ min: 0
180
+ };
173
181
  var payloadFlag = {
174
182
  name: "payload",
175
183
  type: "json",
@@ -275,8 +283,8 @@ function dashboardReportDataInput(ctx) {
275
283
  zone_offset: optionalNumber(ctx, "zone-offset"),
276
284
  use_cache: optionalBoolean(ctx, "use-cache"),
277
285
  request_id: optionalString(ctx, "request-id"),
286
+ preview_rows: optionalNumber(ctx, "preview-rows"),
278
287
  timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
279
- limit: optionalNumber(ctx, "limit"),
280
288
  format: optionalString(ctx, "artifact-format")
281
289
  });
282
290
  }
@@ -298,14 +306,10 @@ function biPanelPageDataInput(ctx) {
298
306
  permission_controls: optionalJson(ctx, "permission-controls"),
299
307
  chart_filter_controls: optionalJson(ctx, "chart-filter-controls"),
300
308
  columns: optionalJson(ctx, "columns"),
301
- row_limit: optionalNumber(ctx, "row-limit"),
302
- row_offset: optionalNumber(ctx, "row-offset"),
303
- block_limit: optionalNumber(ctx, "block-limit"),
304
- block_offset: optionalNumber(ctx, "block-offset"),
305
309
  use_cache: optionalBoolean(ctx, "use-cache"),
306
310
  request_id: optionalString(ctx, "request-id"),
311
+ preview_rows: optionalNumber(ctx, "preview-rows"),
307
312
  timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
308
- limit: optionalNumber(ctx, "limit"),
309
313
  format: optionalString(ctx, "artifact-format")
310
314
  });
311
315
  }
@@ -350,57 +354,280 @@ function compactInput(input) {
350
354
  }
351
355
  return result;
352
356
  }
353
- function applyAnalysisInlineLimit(result, input) {
354
- const limit = typeof input.limit === "number" && Number.isInteger(input.limit) && input.limit > 0 ? input.limit : void 0;
355
- if (!limit) {
356
- return result;
357
+
358
+ // src/commands/te-analysis/catalog-list.ts
359
+ import { createHash, randomBytes } from "crypto";
360
+ import { createReadStream } from "fs";
361
+ import { chmod, lstat, mkdir, open, rename, rm } from "fs/promises";
362
+ import { basename, dirname, extname, join, resolve } from "path";
363
+ var queriesFlag = {
364
+ name: "queries",
365
+ type: "json",
366
+ required: false,
367
+ desc: "Optional JSON array of 1 to 20 keyword filters. Results match any keyword."
368
+ };
369
+ var catalogExportOutputFlag = {
370
+ name: "output",
371
+ type: "string",
372
+ required: true,
373
+ desc: "JSONL output file path. Full rows stay in this file; completeness and identity metadata is written to the adjacent .meta.json file."
374
+ };
375
+ function validateCatalogListFlags(ctx) {
376
+ validateQueriesFlag(ctx);
377
+ }
378
+ function validateCatalogExportFlags(ctx) {
379
+ validateQueriesFlag(ctx);
380
+ const output = ctx.str("output");
381
+ if (!output) {
382
+ throw new CliValidationError("--output is required");
383
+ }
384
+ if (extname(output).toLowerCase() !== ".jsonl") {
385
+ throw new CliValidationError("--output must use the .jsonl extension");
357
386
  }
358
- const cloned = cloneJsonLike(result);
359
- const summary = {
360
- truncated: false,
361
- containers: 0,
362
- originalRows: 0,
363
- returnedRows: 0
387
+ }
388
+ function catalogArtifactMaterializer(resourceType) {
389
+ return async ({
390
+ ctx,
391
+ runId,
392
+ artifactId,
393
+ output,
394
+ force,
395
+ signal,
396
+ finalDescriptor
397
+ }) => {
398
+ const outputPath = resolve(output);
399
+ const metaPath = join(
400
+ dirname(outputPath),
401
+ `${basename(outputPath, extname(outputPath))}.meta.json`
402
+ );
403
+ await mkdir(dirname(outputPath), { recursive: true });
404
+ await assertRegularFileOrMissing(outputPath, force);
405
+ await assertRegularFileOrMissing(metaPath, force);
406
+ const suffix = `${process.pid}.${randomBytes(8).toString("hex")}`;
407
+ const partPath = `${outputPath}.part.${suffix}`;
408
+ const metaPartPath = `${metaPath}.part.${suffix}`;
409
+ let handle;
410
+ try {
411
+ const download = await downloadAnalysisArtifact(
412
+ ctx.host(),
413
+ runId,
414
+ artifactId,
415
+ partPath,
416
+ { force: true, signal, ensureReady: false }
417
+ );
418
+ const hash = createHash("sha256");
419
+ let bytes = 0;
420
+ let rows = 0;
421
+ for await (const chunk of createReadStream(partPath)) {
422
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
423
+ hash.update(buffer);
424
+ bytes += buffer.length;
425
+ for (const value of buffer) {
426
+ if (value === 10) rows++;
427
+ }
428
+ }
429
+ const contentSha256 = hash.digest("hex");
430
+ const token = await getCliToken(ctx.host());
431
+ const metadata = {
432
+ schema_version: 1,
433
+ resource_type: resourceType,
434
+ host: ctx.host(),
435
+ project_id: ctx.num("project-id"),
436
+ principal_fingerprint: `sha256:${createHash("sha256").update(token).digest("hex")}`,
437
+ generated_at: (/* @__PURE__ */ new Date()).toISOString(),
438
+ row_count: rows,
439
+ complete: true,
440
+ content_sha256: contentSha256,
441
+ run_id: runId,
442
+ artifact_id: artifactId
443
+ };
444
+ handle = await open(metaPartPath, "w", 384);
445
+ await handle.write(`${JSON.stringify(metadata)}
446
+ `, void 0, "utf8");
447
+ await handle.sync();
448
+ await handle.close();
449
+ handle = void 0;
450
+ await publishCatalogPair(partPath, outputPath, metaPartPath, metaPath, suffix);
451
+ return {
452
+ ...finalDescriptor,
453
+ ...download,
454
+ output_path: outputPath,
455
+ metadata_path: metaPath,
456
+ format: "jsonl",
457
+ row_count: rows,
458
+ bytes,
459
+ content_sha256: contentSha256,
460
+ complete: true
461
+ };
462
+ } catch (error) {
463
+ await handle?.close().catch(() => void 0);
464
+ await rm(partPath, { force: true }).catch(() => void 0);
465
+ await rm(metaPartPath, { force: true }).catch(() => void 0);
466
+ throw error;
467
+ }
364
468
  };
365
- trimRows(cloned, limit, summary);
366
- if (summary.truncated && cloned && typeof cloned === "object" && !Array.isArray(cloned)) {
367
- cloned._cli_inline_limit = {
368
- requested_limit: limit,
369
- containers_truncated: summary.containers,
370
- original_rows: summary.originalRows,
371
- returned_rows: summary.returnedRows,
372
- note: "Rows were truncated by ae-cli to keep sync run output within the inline limit. Use export for full data."
373
- };
469
+ }
470
+ async function preflightCatalogArtifactOutput({
471
+ output,
472
+ force
473
+ }) {
474
+ const outputPath = resolve(output);
475
+ const metaPath = join(
476
+ dirname(outputPath),
477
+ `${basename(outputPath, extname(outputPath))}.meta.json`
478
+ );
479
+ await assertRegularFileOrMissing(outputPath, force);
480
+ await assertRegularFileOrMissing(metaPath, force);
481
+ }
482
+ function validateQueriesFlag(ctx) {
483
+ const queries = ctx.json("queries");
484
+ if (queries === void 0 || queries === null) return;
485
+ if (!Array.isArray(queries) || queries.length < 1 || queries.length > 20 || queries.some((query) => typeof query !== "string" || query.trim().length === 0)) {
486
+ throw new CliValidationError("--queries must be a JSON array containing 1 to 20 non-empty strings");
374
487
  }
375
- return cloned;
376
488
  }
377
- function cloneJsonLike(value) {
378
- if (value === void 0 || value === null) return value;
379
- return JSON.parse(JSON.stringify(value));
489
+ function optionalQueries(ctx) {
490
+ const value = ctx.json("queries");
491
+ return value === void 0 || value === null ? void 0 : value;
492
+ }
493
+ function catalogExportPostProcess(resourceType, arrayField) {
494
+ return async (result, input, ctx) => {
495
+ if (typeof result !== "object" || result === null) {
496
+ throw new Error(`Full ${resourceType} catalog returned an invalid response`);
497
+ }
498
+ const data = result;
499
+ const rows = data[arrayField];
500
+ if (!Array.isArray(rows)) {
501
+ throw new Error(`Full ${resourceType} catalog response is missing ${arrayField}`);
502
+ }
503
+ if (data.complete !== true || typeof data.total !== "number" || data.total !== rows.length) {
504
+ throw new Error(
505
+ `Full ${resourceType} catalog is incomplete: total=${String(data.total)}, rows=${rows.length}, complete=${String(data.complete)}`
506
+ );
507
+ }
508
+ const outputPath = resolve(ctx.str("output"));
509
+ const metaPath = join(
510
+ dirname(outputPath),
511
+ `${basename(outputPath, extname(outputPath))}.meta.json`
512
+ );
513
+ await mkdir(dirname(outputPath), { recursive: true });
514
+ await assertRegularFileOrMissing(outputPath);
515
+ await assertRegularFileOrMissing(metaPath);
516
+ const suffix = `${process.pid}.${randomBytes(8).toString("hex")}`;
517
+ const partPath = `${outputPath}.part.${suffix}`;
518
+ const metaPartPath = `${metaPath}.part.${suffix}`;
519
+ const hash = createHash("sha256");
520
+ let bytes = 0;
521
+ let handle;
522
+ try {
523
+ handle = await open(partPath, "w", 384);
524
+ for (const row of rows) {
525
+ const line = `${JSON.stringify(row)}
526
+ `;
527
+ const buffer = Buffer.from(line, "utf8");
528
+ hash.update(buffer);
529
+ bytes += buffer.length;
530
+ await handle.write(buffer);
531
+ }
532
+ await handle.sync();
533
+ await handle.close();
534
+ handle = void 0;
535
+ const contentSha256 = hash.digest("hex");
536
+ const token = await getCliToken(ctx.host());
537
+ const metadata = {
538
+ schema_version: 1,
539
+ resource_type: resourceType,
540
+ host: ctx.host(),
541
+ project_id: input.project_id,
542
+ principal_fingerprint: `sha256:${createHash("sha256").update(token).digest("hex")}`,
543
+ generated_at: (/* @__PURE__ */ new Date()).toISOString(),
544
+ row_count: rows.length,
545
+ complete: true,
546
+ content_sha256: contentSha256
547
+ };
548
+ handle = await open(metaPartPath, "w", 384);
549
+ await handle.write(`${JSON.stringify(metadata)}
550
+ `, void 0, "utf8");
551
+ await handle.sync();
552
+ await handle.close();
553
+ handle = void 0;
554
+ await publishCatalogPair(partPath, outputPath, metaPartPath, metaPath, suffix);
555
+ return {
556
+ resource_type: resourceType,
557
+ output_path: outputPath,
558
+ metadata_path: metaPath,
559
+ format: "jsonl",
560
+ row_count: rows.length,
561
+ bytes,
562
+ content_sha256: contentSha256,
563
+ complete: true
564
+ };
565
+ } catch (error) {
566
+ await handle?.close().catch(() => void 0);
567
+ await rm(partPath, { force: true }).catch(() => void 0);
568
+ await rm(metaPartPath, { force: true }).catch(() => void 0);
569
+ throw error;
570
+ }
571
+ };
380
572
  }
381
- function trimRows(value, limit, summary) {
382
- if (!value || typeof value !== "object") return;
383
- if (Array.isArray(value)) {
384
- for (const item of value) trimRows(item, limit, summary);
385
- return;
573
+ async function assertRegularFileOrMissing(filePath, allowReplace = true) {
574
+ try {
575
+ const value = await lstat(filePath);
576
+ if (!value.isFile()) {
577
+ throw new Error(`Catalog output path must be a regular file: ${filePath}`);
578
+ }
579
+ if (!allowReplace) {
580
+ throw new Error(`Catalog output path already exists: ${filePath}. Use --force to replace it.`);
581
+ }
582
+ } catch (error) {
583
+ if (error.code !== "ENOENT") {
584
+ throw error;
585
+ }
386
586
  }
387
- const record = value;
388
- const rows = record.rows;
389
- if (Array.isArray(rows) && rows.length > limit) {
390
- record.rows = rows.slice(0, limit);
391
- record._cli_truncation = {
392
- field: "rows",
393
- requested_limit: limit,
394
- original_row_count: rows.length,
395
- returned_row_count: limit
396
- };
397
- summary.truncated = true;
398
- summary.containers += 1;
399
- summary.originalRows += rows.length;
400
- summary.returnedRows += limit;
587
+ }
588
+ async function publishCatalogPair(dataPartPath, dataPath, metaPartPath, metaPath, suffix) {
589
+ const dataBackupPath = `${dataPath}.backup.${suffix}`;
590
+ const metaBackupPath = `${metaPath}.backup.${suffix}`;
591
+ let dataBackedUp = false;
592
+ let metaBackedUp = false;
593
+ let dataPublished = false;
594
+ let metaPublished = false;
595
+ try {
596
+ dataBackedUp = await moveIfExists(dataPath, dataBackupPath);
597
+ metaBackedUp = await moveIfExists(metaPath, metaBackupPath);
598
+ await rename(dataPartPath, dataPath);
599
+ dataPublished = true;
600
+ await chmod(dataPath, 384);
601
+ await rename(metaPartPath, metaPath);
602
+ metaPublished = true;
603
+ await chmod(metaPath, 384);
604
+ await rm(dataBackupPath, { force: true });
605
+ await rm(metaBackupPath, { force: true });
606
+ } catch (error) {
607
+ if (metaPublished) {
608
+ await rm(metaPath, { force: true }).catch(() => void 0);
609
+ }
610
+ if (dataPublished) {
611
+ await rm(dataPath, { force: true }).catch(() => void 0);
612
+ }
613
+ if (metaBackedUp) {
614
+ await rename(metaBackupPath, metaPath).catch(() => void 0);
615
+ }
616
+ if (dataBackedUp) {
617
+ await rename(dataBackupPath, dataPath).catch(() => void 0);
618
+ }
619
+ throw error;
401
620
  }
402
- for (const child of Object.values(record)) {
403
- trimRows(child, limit, summary);
621
+ }
622
+ async function moveIfExists(source, target) {
623
+ try {
624
+ await rename(source, target);
625
+ return true;
626
+ } catch (error) {
627
+ if (error.code === "ENOENT") {
628
+ return false;
629
+ }
630
+ throw error;
404
631
  }
405
632
  }
406
633
 
@@ -409,19 +636,20 @@ var metadataEventList = createAnalysisMetaCapabilityCommand({
409
636
  resource: "event",
410
637
  command: "list",
411
638
  capabilityId: "metadata.event.list",
412
- description: "List project events with optional search, field projection, pagination, and authentication filtering.",
639
+ description: "List project events with batch keyword search and bounded pagination.",
413
640
  flags: [
414
641
  projectIdFlag,
415
- queryFlag,
642
+ queriesFlag,
416
643
  fieldsFlag,
417
- limitFlag,
418
- offsetFlag,
644
+ directoryLimitFlag,
645
+ directoryOffsetFlag,
419
646
  { name: "authenticated-only", type: "boolean", required: false, desc: "When true, return only authenticated events." }
420
647
  ],
421
648
  risk: "read",
649
+ validate: validateCatalogListFlags,
422
650
  buildInput: (ctx) => compactInput({
423
651
  ...projectInput(ctx),
424
- query: optionalString(ctx, "query"),
652
+ queries: optionalQueries(ctx),
425
653
  fields: optionalJson(ctx, "fields"),
426
654
  limit: optionalNumber(ctx, "limit"),
427
655
  offset: optionalNumber(ctx, "offset"),
@@ -429,6 +657,138 @@ var metadataEventList = createAnalysisMetaCapabilityCommand({
429
657
  })
430
658
  });
431
659
 
660
+ // src/commands/te-analysis/metadata-export.ts
661
+ import { createHash as createHash2, randomBytes as randomBytes2 } from "crypto";
662
+ import { chmod as chmod2, lstat as lstat2, mkdir as mkdir2, open as open2, rename as rename2, rm as rm2 } from "fs/promises";
663
+ import { dirname as dirname2, extname as extname2, resolve as resolve2 } from "path";
664
+ var metadataExportOutputFlag = {
665
+ name: "output",
666
+ type: "string",
667
+ required: true,
668
+ desc: "Local .json output file for the complete matching metadata rows."
669
+ };
670
+ function validateMetadataExportFlags(ctx) {
671
+ validateQueriesFlag(ctx);
672
+ const output = ctx.str("output").trim();
673
+ if (output && extname2(output).toLowerCase() !== ".json") {
674
+ throw new CliValidationError("--output must use the .json extension");
675
+ }
676
+ }
677
+ function metadataExportPostProcess(resourceType, arrayField) {
678
+ return async (result, _input, ctx) => {
679
+ if (typeof result !== "object" || result === null) {
680
+ throw new Error(`Metadata ${resourceType} export returned an invalid response`);
681
+ }
682
+ const data = result;
683
+ const rows = data[arrayField];
684
+ if (!Array.isArray(rows)) {
685
+ throw new Error(`Metadata ${resourceType} export response is missing ${arrayField}`);
686
+ }
687
+ if (data.complete !== true || typeof data.total !== "number" || data.total !== rows.length) {
688
+ throw new Error(
689
+ `Metadata ${resourceType} export is incomplete: total=${String(data.total)}, rows=${rows.length}, complete=${String(data.complete)}`
690
+ );
691
+ }
692
+ const outputPath = resolve2(ctx.str("output").trim());
693
+ await mkdir2(dirname2(outputPath), { recursive: true });
694
+ await assertRegularFileOrMissing2(outputPath);
695
+ const suffix = `${process.pid}.${randomBytes2(8).toString("hex")}`;
696
+ const partPath = `${outputPath}.part.${suffix}`;
697
+ const content = `${JSON.stringify(rows, null, 2)}
698
+ `;
699
+ const bytes = Buffer.byteLength(content, "utf8");
700
+ let handle;
701
+ try {
702
+ handle = await open2(partPath, "w", 384);
703
+ await handle.write(content, void 0, "utf8");
704
+ await handle.sync();
705
+ await handle.close();
706
+ handle = void 0;
707
+ await publishExport(partPath, outputPath, suffix);
708
+ } catch (error) {
709
+ await handle?.close().catch(() => void 0);
710
+ await rm2(partPath, { force: true }).catch(() => void 0);
711
+ throw error;
712
+ }
713
+ return {
714
+ resource_type: resourceType,
715
+ output_path: outputPath,
716
+ format: "json",
717
+ row_count: rows.length,
718
+ bytes,
719
+ content_sha256: createHash2("sha256").update(content).digest("hex"),
720
+ complete: true
721
+ };
722
+ };
723
+ }
724
+ async function publishExport(partPath, outputPath, suffix) {
725
+ const backupPath = `${outputPath}.backup.${suffix}`;
726
+ let backedUp = false;
727
+ let published = false;
728
+ try {
729
+ backedUp = await moveIfExists2(outputPath, backupPath);
730
+ await rename2(partPath, outputPath);
731
+ published = true;
732
+ await chmod2(outputPath, 384);
733
+ await rm2(backupPath, { force: true });
734
+ } catch (error) {
735
+ if (published) {
736
+ await rm2(outputPath, { force: true }).catch(() => void 0);
737
+ }
738
+ if (backedUp) {
739
+ await rename2(backupPath, outputPath).catch(() => void 0);
740
+ }
741
+ throw error;
742
+ }
743
+ }
744
+ async function moveIfExists2(source, target) {
745
+ try {
746
+ await rename2(source, target);
747
+ return true;
748
+ } catch (error) {
749
+ if (error.code === "ENOENT") {
750
+ return false;
751
+ }
752
+ throw error;
753
+ }
754
+ }
755
+ async function assertRegularFileOrMissing2(filePath) {
756
+ try {
757
+ const value = await lstat2(filePath);
758
+ if (!value.isFile()) {
759
+ throw new Error(`Metadata export output path must be a regular file: ${filePath}`);
760
+ }
761
+ } catch (error) {
762
+ if (error.code !== "ENOENT") {
763
+ throw error;
764
+ }
765
+ }
766
+ }
767
+
768
+ // src/commands/te-analysis/meta/event/export.ts
769
+ var metadataEventExport = createAnalysisMetaCapabilityCommand({
770
+ resource: "event",
771
+ command: "export",
772
+ capabilityId: "metadata.event.export",
773
+ description: "Export every matching project event to one local JSON file without pagination.",
774
+ flags: [
775
+ projectIdFlag,
776
+ queriesFlag,
777
+ fieldsFlag,
778
+ { name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated events." },
779
+ metadataExportOutputFlag
780
+ ],
781
+ risk: "read",
782
+ validate: validateMetadataExportFlags,
783
+ buildInput: (ctx) => compactInput({
784
+ ...projectInput(ctx),
785
+ queries: optionalQueries(ctx),
786
+ fields: optionalJson(ctx, "fields"),
787
+ authenticated_only: optionalBoolean(ctx, "authenticated-only")
788
+ }),
789
+ postProcess: metadataExportPostProcess("event", "events")
790
+ });
791
+
432
792
  // src/commands/te-analysis/meta/event/get.ts
433
793
  var metadataEventGet = createAnalysisMetaCapabilityCommand({
434
794
  resource: "event",
@@ -547,6 +907,7 @@ var metadataEventChangelogList = createAnalysisMetaCapabilityCommand({
547
907
  // src/commands/te-analysis/meta/event/index.ts
548
908
  var commands = [
549
909
  metadataEventList,
910
+ metadataEventExport,
550
911
  metadataEventGet,
551
912
  metadataEventCreate,
552
913
  metadataEventUpdate,
@@ -563,25 +924,26 @@ var metadataPropertyList = createAnalysisMetaCapabilityCommand({
563
924
  resource: "property",
564
925
  command: "list",
565
926
  capabilityId: "metadata.property.list",
566
- description: "List event or user properties with optional search, field projection, pagination, and authentication filtering.",
927
+ description: "List event, user, dimension-table, or complex child properties with batch keyword search and bounded pagination.",
567
928
  flags: [
568
929
  projectIdFlag,
569
930
  { name: "table-type", type: "string", required: false, desc: "Optional property table type: event or user." },
570
931
  { name: "scope", type: "string", required: false, desc: "Optional property scope: event or user." },
571
932
  { name: "event-name", type: "string", required: false, desc: "Optional event name filter for event properties." },
572
- queryFlag,
933
+ queriesFlag,
573
934
  fieldsFlag,
574
- limitFlag,
575
- offsetFlag,
935
+ directoryLimitFlag,
936
+ directoryOffsetFlag,
576
937
  { name: "authenticated-only", type: "boolean", required: false, desc: "When true, return only authenticated properties." }
577
938
  ],
578
939
  risk: "read",
940
+ validate: validateCatalogListFlags,
579
941
  buildInput: (ctx) => compactInput({
580
942
  ...projectInput(ctx),
581
943
  table_type: optionalString(ctx, "table-type"),
582
944
  scope: optionalString(ctx, "scope"),
583
945
  event_name: optionalString(ctx, "event-name"),
584
- query: optionalString(ctx, "query"),
946
+ queries: optionalQueries(ctx),
585
947
  fields: optionalJson(ctx, "fields"),
586
948
  limit: optionalNumber(ctx, "limit"),
587
949
  offset: optionalNumber(ctx, "offset"),
@@ -589,6 +951,36 @@ var metadataPropertyList = createAnalysisMetaCapabilityCommand({
589
951
  })
590
952
  });
591
953
 
954
+ // src/commands/te-analysis/meta/property/export.ts
955
+ var metadataPropertyExport = createAnalysisMetaCapabilityCommand({
956
+ resource: "property",
957
+ command: "export",
958
+ capabilityId: "metadata.property.export",
959
+ description: "Export every matching property to one local JSON file without pagination.",
960
+ flags: [
961
+ projectIdFlag,
962
+ { name: "table-type", type: "string", required: false, desc: "Optional property table type: event or user." },
963
+ { name: "scope", type: "string", required: false, desc: "Optional property scope: event or user." },
964
+ { name: "event-name", type: "string", required: false, desc: "Optional event name filter for event properties." },
965
+ queriesFlag,
966
+ fieldsFlag,
967
+ { name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated properties." },
968
+ metadataExportOutputFlag
969
+ ],
970
+ risk: "read",
971
+ validate: validateMetadataExportFlags,
972
+ buildInput: (ctx) => compactInput({
973
+ ...projectInput(ctx),
974
+ table_type: optionalString(ctx, "table-type"),
975
+ scope: optionalString(ctx, "scope"),
976
+ event_name: optionalString(ctx, "event-name"),
977
+ queries: optionalQueries(ctx),
978
+ fields: optionalJson(ctx, "fields"),
979
+ authenticated_only: optionalBoolean(ctx, "authenticated-only")
980
+ }),
981
+ postProcess: metadataExportPostProcess("property", "properties")
982
+ });
983
+
592
984
  // src/commands/te-analysis/meta/property/get.ts
593
985
  var metadataPropertyGet = createAnalysisMetaCapabilityCommand({
594
986
  resource: "property",
@@ -729,6 +1121,7 @@ var metadataPropertyRelatedEvents = createAnalysisMetaCapabilityCommand({
729
1121
  // src/commands/te-analysis/meta/property/index.ts
730
1122
  var commands2 = [
731
1123
  metadataPropertyList,
1124
+ metadataPropertyExport,
732
1125
  metadataPropertyGet,
733
1126
  metadataPropertyCreate,
734
1127
  metadataPropertyUpdate,
@@ -831,7 +1224,7 @@ var metadataVirtualPropertyCreate = createAnalysisMetaCapabilityCommand({
831
1224
  flags: [
832
1225
  projectIdFlag,
833
1226
  { name: "sql-expression", type: "string", required: true, desc: "SQL expression used to calculate the virtual property." },
834
- { name: "v-prop", type: "json", required: false, desc: "Virtual property JSON object with property.column_name/table_type/select_type fields." },
1227
+ { name: "v-prop", type: "json", required: false, desc: "Virtual property JSON object with property.column_name/property.table_type/property.select_type fields." },
835
1228
  { name: "property-name", type: "string", required: false, desc: "Virtual property name. Must start with '#vp@'." },
836
1229
  { name: "property-desc", type: "string", required: false, desc: "Virtual property display name." },
837
1230
  { name: "table-type", type: "string", required: false, desc: "Property table type: event or user." },
@@ -938,21 +1331,22 @@ var metadataMetricList = createAnalysisMetaCapabilityCommand({
938
1331
  resource: "metric",
939
1332
  command: "list",
940
1333
  capabilityId: "metadata.metric.list",
941
- description: "List project metrics with optional search, projection, pagination, and authentication filtering.",
1334
+ description: "List project metrics with batch keyword search and bounded pagination.",
942
1335
  flags: [
943
1336
  projectIdFlag,
944
1337
  { name: "ignore-authentication", type: "boolean", required: false, desc: "Whether to skip asset authentication status decoration." },
945
- queryFlag,
1338
+ queriesFlag,
946
1339
  fieldsFlag,
947
- limitFlag,
948
- offsetFlag,
1340
+ directoryLimitFlag,
1341
+ directoryOffsetFlag,
949
1342
  { name: "authenticated-only", type: "boolean", required: false, desc: "When true, return only authenticated metrics." }
950
1343
  ],
951
1344
  risk: "read",
1345
+ validate: validateCatalogListFlags,
952
1346
  buildInput: (ctx) => compactInput({
953
1347
  ...projectInput(ctx),
954
1348
  ignore_authentication: optionalBoolean(ctx, "ignore-authentication"),
955
- query: optionalString(ctx, "query"),
1349
+ queries: optionalQueries(ctx),
956
1350
  fields: optionalJson(ctx, "fields"),
957
1351
  limit: optionalNumber(ctx, "limit"),
958
1352
  offset: optionalNumber(ctx, "offset"),
@@ -960,6 +1354,32 @@ var metadataMetricList = createAnalysisMetaCapabilityCommand({
960
1354
  })
961
1355
  });
962
1356
 
1357
+ // src/commands/te-analysis/meta/metric/export.ts
1358
+ var metadataMetricExport = createAnalysisMetaCapabilityCommand({
1359
+ resource: "metric",
1360
+ command: "export",
1361
+ capabilityId: "metadata.metric.export",
1362
+ description: "Export every matching project metric to one local JSON file without pagination.",
1363
+ flags: [
1364
+ projectIdFlag,
1365
+ { name: "ignore-authentication", type: "boolean", required: false, desc: "Whether to skip asset authentication status decoration." },
1366
+ queriesFlag,
1367
+ fieldsFlag,
1368
+ { name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated metrics." },
1369
+ metadataExportOutputFlag
1370
+ ],
1371
+ risk: "read",
1372
+ validate: validateMetadataExportFlags,
1373
+ buildInput: (ctx) => compactInput({
1374
+ ...projectInput(ctx),
1375
+ ignore_authentication: optionalBoolean(ctx, "ignore-authentication"),
1376
+ queries: optionalQueries(ctx),
1377
+ fields: optionalJson(ctx, "fields"),
1378
+ authenticated_only: optionalBoolean(ctx, "authenticated-only")
1379
+ }),
1380
+ postProcess: metadataExportPostProcess("metric", "metrics")
1381
+ });
1382
+
963
1383
  // src/commands/te-analysis/meta/metric/get.ts
964
1384
  var metadataMetricGet = createAnalysisMetaCapabilityCommand({
965
1385
  resource: "metric",
@@ -1082,6 +1502,7 @@ var metadataMetricDelete = createAnalysisMetaCapabilityCommand({
1082
1502
  // src/commands/te-analysis/meta/metric/index.ts
1083
1503
  var commands5 = [
1084
1504
  metadataMetricList,
1505
+ metadataMetricExport,
1085
1506
  metadataMetricGet,
1086
1507
  metadataMetricCreate,
1087
1508
  metadataMetricUpdate,
@@ -1097,10 +1518,17 @@ var metadataAssetSearch = createAnalysisMetaCapabilityCommand({
1097
1518
  description: "Search project assets by keyword.",
1098
1519
  flags: [
1099
1520
  projectIdFlag,
1100
- requiredPayloadFlag
1521
+ requiredPayloadFlag,
1522
+ directoryLimitFlag,
1523
+ directoryOffsetFlag
1101
1524
  ],
1102
1525
  risk: "read",
1103
- buildInput: (ctx) => ({ ...projectInput(ctx), payload: ctx.json("payload") })
1526
+ buildInput: (ctx) => compactInput({
1527
+ ...projectInput(ctx),
1528
+ payload: ctx.json("payload"),
1529
+ limit: optionalNumber(ctx, "limit"),
1530
+ offset: optionalNumber(ctx, "offset")
1531
+ })
1104
1532
  });
1105
1533
 
1106
1534
  // src/commands/te-analysis/meta/asset/recent-list.ts
@@ -1124,10 +1552,16 @@ var metadataAssetAuthenticationList = createAnalysisMetaCapabilityCommand({
1124
1552
  capabilityId: "metadata.asset_authentication.list",
1125
1553
  description: "List authenticatable project assets and authentication status.",
1126
1554
  flags: [
1127
- projectIdFlag
1555
+ projectIdFlag,
1556
+ directoryLimitFlag,
1557
+ directoryOffsetFlag
1128
1558
  ],
1129
1559
  risk: "read",
1130
- buildInput: projectInput
1560
+ buildInput: (ctx) => compactInput({
1561
+ ...projectInput(ctx),
1562
+ limit: optionalNumber(ctx, "limit"),
1563
+ offset: optionalNumber(ctx, "offset")
1564
+ })
1131
1565
  });
1132
1566
 
1133
1567
  // src/commands/te-analysis/meta/asset/authentication-update.ts
@@ -1152,10 +1586,17 @@ var metadataAssetAbnormalList = createAnalysisMetaCapabilityCommand({
1152
1586
  description: "List abnormal assets by resource type.",
1153
1587
  flags: [
1154
1588
  projectIdFlag,
1155
- { name: "resource-types", type: "string", required: true, desc: "Resource types to query." }
1589
+ { name: "resource-types", type: "string", required: true, desc: "Resource types to query." },
1590
+ directoryLimitFlag,
1591
+ directoryOffsetFlag
1156
1592
  ],
1157
1593
  risk: "read",
1158
- buildInput: (ctx) => ({ ...projectInput(ctx), resource_types: ctx.str("resource-types") })
1594
+ buildInput: (ctx) => compactInput({
1595
+ ...projectInput(ctx),
1596
+ resource_types: ctx.str("resource-types"),
1597
+ limit: optionalNumber(ctx, "limit"),
1598
+ offset: optionalNumber(ctx, "offset")
1599
+ })
1159
1600
  });
1160
1601
 
1161
1602
  // src/commands/te-analysis/meta/asset/abnormal-get.ts
@@ -1309,10 +1750,16 @@ var metadataExchangeRuleList = createAnalysisMetaCapabilityCommand({
1309
1750
  capabilityId: "metadata.exchange_rule.list",
1310
1751
  description: "List exchange-rate conversion rules.",
1311
1752
  flags: [
1312
- projectIdFlag
1753
+ projectIdFlag,
1754
+ directoryLimitFlag,
1755
+ directoryOffsetFlag
1313
1756
  ],
1314
1757
  risk: "read",
1315
- buildInput: projectInput
1758
+ buildInput: (ctx) => compactInput({
1759
+ ...projectInput(ctx),
1760
+ limit: optionalNumber(ctx, "limit"),
1761
+ offset: optionalNumber(ctx, "offset")
1762
+ })
1316
1763
  });
1317
1764
 
1318
1765
  // src/commands/te-analysis/meta/exchange/rule-validate.ts
@@ -1411,6 +1858,7 @@ var metadataSuperMetadataExport = createAnalysisMetaCapabilityCommand({
1411
1858
  resource: "event-property-bundle",
1412
1859
  command: "export",
1413
1860
  capabilityId: "metadata.event_property_bundle.export",
1861
+ asyncArtifact: true,
1414
1862
  description: "Export super event and super property configuration as an asynchronous XLSX artifact.",
1415
1863
  flags: [
1416
1864
  projectIdFlag,
@@ -1491,10 +1939,17 @@ var metadataDataTableVersionList = createAnalysisMetaCapabilityCommand({
1491
1939
  description: "List data table historical versions.",
1492
1940
  flags: [
1493
1941
  projectIdFlag,
1494
- { name: "datatable-id", type: "number", required: true, desc: "Data table ID." }
1942
+ { name: "datatable-id", type: "number", required: true, desc: "Data table ID." },
1943
+ directoryLimitFlag,
1944
+ directoryOffsetFlag
1495
1945
  ],
1496
1946
  risk: "read",
1497
- buildInput: (ctx) => ({ ...projectInput(ctx), datatable_id: ctx.num("datatable-id") })
1947
+ buildInput: (ctx) => ({
1948
+ ...projectInput(ctx),
1949
+ datatable_id: ctx.num("datatable-id"),
1950
+ limit: optionalNumber(ctx, "limit"),
1951
+ offset: optionalNumber(ctx, "offset")
1952
+ })
1498
1953
  });
1499
1954
 
1500
1955
  // src/commands/te-analysis/meta/datatable/version-get.ts
@@ -1520,8 +1975,96 @@ var commands9 = [
1520
1975
  ];
1521
1976
  var datatable_default = commands9;
1522
1977
 
1978
+ // src/commands/te-analysis/meta/catalog/export.ts
1979
+ var metadataCatalogExport = createAnalysisMetaCapabilityCommand({
1980
+ resource: "catalog",
1981
+ command: "export",
1982
+ capabilityId: "metadata.catalog.export",
1983
+ asyncArtifact: {
1984
+ preflightOutput: preflightCatalogArtifactOutput,
1985
+ materialize: catalogArtifactMaterializer("analysis_metadata")
1986
+ },
1987
+ description: "Export the complete accessible analysis metadata catalog to JSONL with an integrity sidecar.",
1988
+ flags: [projectIdFlag, requestIdFlag, asyncTimeoutSecondsFlag],
1989
+ risk: "read",
1990
+ validate: validateCatalogExportFlags,
1991
+ buildInput: (ctx) => compactInput({
1992
+ ...projectInput(ctx),
1993
+ request_id: optionalString(ctx, "request-id"),
1994
+ timeout_seconds: optionalNumber(ctx, "timeout-seconds")
1995
+ })
1996
+ });
1997
+
1998
+ // src/commands/te-analysis/meta/catalog/list.ts
1999
+ var resourceTypes = [
2000
+ "event",
2001
+ "metric",
2002
+ "event_property",
2003
+ "user_property",
2004
+ "cluster",
2005
+ "tag"
2006
+ ];
2007
+ var resourceTypesFlag = {
2008
+ name: "resource-types",
2009
+ type: "json",
2010
+ required: false,
2011
+ desc: "Online search resource type filter JSON array. Use event, metric, event_property, user_property, cluster, or tag."
2012
+ };
2013
+ var limitPerTypeFlag = {
2014
+ name: "limit-per-type",
2015
+ type: "number",
2016
+ required: false,
2017
+ min: 1,
2018
+ max: 200,
2019
+ desc: "Maximum online search results per resource type. Default: 20, max: 200."
2020
+ };
2021
+ function optionalResourceTypes(ctx) {
2022
+ const value = ctx.json("resource-types");
2023
+ return value === void 0 || value === null ? void 0 : value;
2024
+ }
2025
+ function validateMetadataCatalogList(ctx) {
2026
+ const queries = ctx.json("queries");
2027
+ const selectedTypes = ctx.json("resource-types");
2028
+ const limitPerType = ctx.optionalNum("limit-per-type");
2029
+ validateCatalogListFlags(ctx);
2030
+ if (queries === void 0 || selectedTypes === void 0) {
2031
+ throw new CliValidationError(
2032
+ "online catalog search requires --queries and --resource-types"
2033
+ );
2034
+ }
2035
+ if (!Array.isArray(selectedTypes) || selectedTypes.length < 1 || selectedTypes.length > resourceTypes.length || selectedTypes.some((type) => typeof type !== "string" || !resourceTypes.includes(type))) {
2036
+ throw new CliValidationError(
2037
+ "--resource-types must be a JSON array containing only event, metric, event_property, user_property, cluster, or tag"
2038
+ );
2039
+ }
2040
+ }
2041
+ var metadataCatalogList = createAnalysisMetaCapabilityCommand({
2042
+ resource: "catalog",
2043
+ command: "list",
2044
+ capabilityId: "metadata.catalog.list",
2045
+ description: "Search selected analysis metadata types with bounded per-type results.",
2046
+ flags: [
2047
+ projectIdFlag,
2048
+ queriesFlag,
2049
+ resourceTypesFlag,
2050
+ limitPerTypeFlag
2051
+ ],
2052
+ risk: "read",
2053
+ validate: validateMetadataCatalogList,
2054
+ buildInput: (ctx) => compactInput({
2055
+ ...projectInput(ctx),
2056
+ queries: optionalQueries(ctx),
2057
+ resource_types: optionalResourceTypes(ctx),
2058
+ limit_per_type: ctx.optionalNum("limit-per-type")
2059
+ })
2060
+ });
2061
+
2062
+ // src/commands/te-analysis/meta/catalog/index.ts
2063
+ var commands10 = [metadataCatalogList, metadataCatalogExport];
2064
+ var catalog_default = commands10;
2065
+
1523
2066
  // src/commands/te-analysis/meta/index.ts
1524
- var commands10 = [
2067
+ var commands11 = [
1525
2068
  ...event_default,
1526
2069
  ...property_default,
1527
2070
  ...virtual_event_default,
@@ -1530,9 +2073,10 @@ var commands10 = [
1530
2073
  ...asset_default,
1531
2074
  ...exchange_default,
1532
2075
  ...super_metadata_default,
1533
- ...datatable_default
2076
+ ...datatable_default,
2077
+ ...catalog_default
1534
2078
  ];
1535
- var meta_default = commands10;
2079
+ var meta_default = commands11;
1536
2080
 
1537
2081
  // src/commands/te-analysis/meta/asset/usage-list.ts
1538
2082
  var analysisMetaAssetUsageList = createAnalysisGovernanceCapabilityCommand({
@@ -1540,7 +2084,7 @@ var analysisMetaAssetUsageList = createAnalysisGovernanceCapabilityCommand({
1540
2084
  command: "list",
1541
2085
  capabilityId: "governance.asset.list",
1542
2086
  description: "List assets for usage governance.",
1543
- flags: [projectIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, directoryLimitFlag, offsetFlag, payloadFlag],
2087
+ flags: [projectIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
1544
2088
  risk: "read",
1545
2089
  buildInput: (ctx) => assetGovernanceInput(ctx, ["query", "searchs", "rule", "operation_type", "limit", "offset"])
1546
2090
  });
@@ -1573,7 +2117,7 @@ var analysisMetaAssetDependencyList = createAnalysisGovernanceCapabilityCommand(
1573
2117
  command: "list",
1574
2118
  capabilityId: "governance.asset_dependency.list",
1575
2119
  description: "List upstream dependencies for one asset.",
1576
- flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, offsetFlag, payloadFlag],
2120
+ flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
1577
2121
  risk: "read",
1578
2122
  buildInput: (ctx) => assetGovernanceInput(ctx, ["node_id", "query", "searchs", "rule", "limit", "offset"])
1579
2123
  });
@@ -1584,7 +2128,7 @@ var analysisMetaAssetImpactList = createAnalysisGovernanceCapabilityCommand({
1584
2128
  command: "list",
1585
2129
  capabilityId: "governance.asset_impact.list",
1586
2130
  description: "List downstream impacts for one asset.",
1587
- flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, offsetFlag, payloadFlag],
2131
+ flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
1588
2132
  risk: "read",
1589
2133
  buildInput: (ctx) => assetGovernanceInput(ctx, ["node_id", "query", "searchs", "rule", "limit", "offset"])
1590
2134
  });
@@ -1595,7 +2139,7 @@ var analysisMetaAssetQueryHistoryList = createAnalysisGovernanceCapabilityComman
1595
2139
  command: "list",
1596
2140
  capabilityId: "governance.asset_query_history.list",
1597
2141
  description: "List query history for one asset.",
1598
- flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, offsetFlag, payloadFlag],
2142
+ flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
1599
2143
  risk: "read",
1600
2144
  buildInput: (ctx) => assetGovernanceInput(ctx, ["node_id", "query", "searchs", "rule", "limit", "offset"])
1601
2145
  });
@@ -1617,9 +2161,9 @@ var analysisMetaAssetRuleList = createAnalysisGovernanceCapabilityCommand({
1617
2161
  command: "list",
1618
2162
  capabilityId: "governance.rule.list",
1619
2163
  description: "List asset governance rules.",
1620
- flags: [projectIdFlag, payloadFlag],
2164
+ flags: [projectIdFlag, payloadFlag, directoryLimitFlag, directoryOffsetFlag],
1621
2165
  risk: "read",
1622
- buildInput: (ctx) => assetGovernanceInput(ctx, [])
2166
+ buildInput: (ctx) => assetGovernanceInput(ctx, ["limit", "offset"])
1623
2167
  });
1624
2168
 
1625
2169
  // src/commands/te-analysis/meta/asset/rule-create.ts
@@ -1738,7 +2282,7 @@ var analysisMetaAssetOperationRecordList = createAnalysisGovernanceCapabilityCom
1738
2282
  command: "list",
1739
2283
  capabilityId: "governance.operation_record.list",
1740
2284
  description: "List asset batch operation records.",
1741
- flags: [projectIdFlag, typeFlag, statusFlag, queryFlag, sortFieldFlag, sortOrderFlag, directoryLimitFlag, offsetFlag, payloadFlag],
2285
+ flags: [projectIdFlag, typeFlag, statusFlag, queryFlag, sortFieldFlag, sortOrderFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
1742
2286
  risk: "read",
1743
2287
  buildInput: (ctx) => assetGovernanceInput(ctx, ["type", "status", "query", "sort_field", "sort_order", "limit", "offset"])
1744
2288
  });
@@ -1755,7 +2299,7 @@ var analysisMetaAssetOperationRecordExport = createAnalysisGovernanceCapabilityC
1755
2299
  });
1756
2300
 
1757
2301
  // src/commands/te-analysis/governance/index.ts
1758
- var commands11 = [
2302
+ var commands12 = [
1759
2303
  analysisMetaAssetUsageList,
1760
2304
  analysisMetaAssetUsageExport,
1761
2305
  analysisMetaAssetBatchInfoExport,
@@ -1777,7 +2321,7 @@ var commands11 = [
1777
2321
  analysisMetaAssetOperationRecordList,
1778
2322
  analysisMetaAssetOperationRecordExport
1779
2323
  ];
1780
- var governance_default = commands11;
2324
+ var governance_default = commands12;
1781
2325
 
1782
2326
  // src/commands/te-analysis/report/list.ts
1783
2327
  var reportList = createAnalysisCapabilityCommand({
@@ -1785,7 +2329,7 @@ var reportList = createAnalysisCapabilityCommand({
1785
2329
  command: "list",
1786
2330
  capabilityId: "analysis.report.list",
1787
2331
  description: "List analysis reports visible to the current user through the capability gateway.",
1788
- flags: [projectIdFlag, queryFlag, fieldsFlag, reportModelTypesFlag, reportListLimitFlag, offsetFlag],
2332
+ flags: [projectIdFlag, queryFlag, fieldsFlag, reportModelTypesFlag, reportListLimitFlag, directoryOffsetFlag],
1789
2333
  risk: "read",
1790
2334
  buildInput: reportListInput
1791
2335
  });
@@ -1795,6 +2339,7 @@ var reportListExport = createAnalysisCapabilityCommand({
1795
2339
  resource: "report",
1796
2340
  command: "list-export",
1797
2341
  capabilityId: "analysis.report.list_export",
2342
+ asyncArtifact: true,
1798
2343
  description: "Export the accessible report catalog as a gzip artifact.",
1799
2344
  flags: [
1800
2345
  projectIdFlag,
@@ -1850,7 +2395,7 @@ var REPORT_WRITE_MODEL_TYPE_VALUES = [
1850
2395
  "tag"
1851
2396
  ];
1852
2397
  var REPORT_WRITE_MODEL_DESCRIPTION = `${AI_MODEL_DESCRIPTION} Report create/update also supports tag for saved tag report data; use tag as the AI-facing spelling.`;
1853
- var AI_DEFINITION_DESCRIPTION = 'AI-facing model definition JSON. Do not pass raw QP, events, event_view, visual_view, or analysis_query. For path definitions, global filters support user_property, cluster, and tag only; event_property is not supported. session_unit accepts second (1..999), minute (1..999), or hour (1..24). Do not use day; express one day as session_interval=24 and session_unit=hour. For SQL, a simple query is {"sql":"select ..."}; raw variables use ${name}, while typed params use ${Text:name}, ${Selector:name}, or ${PartDate:name}. PartDate expands to a complete predicate, so write WHERE ${PartDate:d}, not a column followed by the placeholder. A part_date parameter may set boolean use_timezone; it defaults to false and controls whether that parameter uses the query effective timezone. Selector value must match one options[].value. Trino identifiers containing #, $, @, spaces, or punctuation must be delimited with double quotes, for example SELECT "#user_id", "$part_event" FROM ...; single quotes are string literals. Queries against an event table must include a date-partition predicate on the quoted "$part_date" column, for example WHERE "$part_date" BETWEEN \'2026-07-01\' AND \'2026-07-07\'; the backend rejects event-table SQL without it. The CLI preserves SQL text and never auto-quotes identifiers.';
2398
+ var AI_DEFINITION_DESCRIPTION = 'AI-facing model definition JSON. Do not pass raw QP, events, event_view, visual_view, or analysis_query. Distribution filters must be attached to the corresponding distribution_metrics[].filters; do not use top-level filters or relation. For path definitions, global filters support user_property, cluster, and tag only; event_property is not supported. session_unit accepts second (1..999), minute (1..999), or hour (1..24). Do not use day; express one day as session_interval=24 and session_unit=hour. For SQL, a simple query is {"sql":"select ..."}; raw variables use ${name}, while typed params use ${Text:name}, ${Selector:name}, or ${PartDate:name}. PartDate expands to a complete predicate, so write WHERE ${PartDate:d}, not a column followed by the placeholder. A part_date parameter may set boolean use_timezone; it defaults to false and controls whether that parameter uses the query effective timezone. Selector value must match one options[].value. Trino identifiers containing #, $, @, spaces, punctuation, or a reserved word must be delimited with double quotes, for example SELECT "#user_id", "$part_event", "end" FROM ...; single quotes are string literals. For multiline SQL JSON, the decoded sql value must contain a real line break; do not submit a literal \\n sequence outside quoted SQL text. Queries against an event table must include a date-partition predicate on the quoted "$part_date" column, for example WHERE "$part_date" BETWEEN \'2026-07-01\' AND \'2026-07-07\'; the backend rejects event-table SQL without it. The CLI preserves SQL text and never auto-quotes identifiers.';
1854
2399
  var REPORT_WRITE_DEFINITION_DESCRIPTION = `${AI_DEFINITION_DESCRIPTION} For model_type=tag, pass a tag report intent such as {"tag":{"tag_name":"vip_users","time_range":{"mode":"recent","unit":"day","value":7}}}. Tags are supported for report create/update and report data, not ad-hoc analysis.`;
1855
2400
  function aiModelTypeFlag(required) {
1856
2401
  return {
@@ -1884,6 +2429,21 @@ function reportWriteDefinitionFlag(required) {
1884
2429
  desc: REPORT_WRITE_DEFINITION_DESCRIPTION
1885
2430
  };
1886
2431
  }
2432
+ var metadataResolutionsFlag = {
2433
+ name: "resolutions",
2434
+ type: "json",
2435
+ required: false,
2436
+ desc: "Optional user-confirmed metadata bindings keyed by compiler error path. Each value requires raw_value, resource_type, and resource_key. Reuse the unchanged definition and only pass values explicitly confirmed by the user."
2437
+ };
2438
+ var reportMetadataResolutionsFlag = {
2439
+ ...metadataResolutionsFlag,
2440
+ desc: `${metadataResolutionsFlag.desc} This option is not supported with --model-type tag.`
2441
+ };
2442
+ function validateReportMetadataResolutions(ctx) {
2443
+ if (ctx.json("resolutions") !== void 0 && ctx.str("model-type") === "tag") {
2444
+ throw new Error("--resolutions is not supported with --model-type tag.");
2445
+ }
2446
+ }
1887
2447
 
1888
2448
  // src/commands/te-analysis/report/create.ts
1889
2449
  var reportCreate = createAnalysisCapabilityCommand({
@@ -1896,17 +2456,20 @@ var reportCreate = createAnalysisCapabilityCommand({
1896
2456
  { name: "report-name", type: "string", required: true, desc: "Report display name." },
1897
2457
  reportWriteModelTypeFlag(true),
1898
2458
  reportWriteDefinitionFlag(true),
2459
+ reportMetadataResolutionsFlag,
1899
2460
  { name: "report-desc", type: "string", required: false, desc: "Optional report description." },
1900
2461
  { name: "cache-seconds", type: "number", required: false, desc: "Optional cache duration in seconds." },
1901
2462
  { name: "query-duration-ms", type: "number", required: false, desc: "Optional last query duration in milliseconds." },
1902
2463
  { name: "dashboard-ids", type: "json", required: false, desc: "Optional dashboard ID array to associate after creation." }
1903
2464
  ],
1904
2465
  risk: "write",
2466
+ validate: validateReportMetadataResolutions,
1905
2467
  buildInput: (ctx) => compactInput({
1906
2468
  ...projectInput(ctx),
1907
2469
  report_name: ctx.str("report-name"),
1908
2470
  model_type: ctx.str("model-type"),
1909
2471
  definition: ctx.json("definition"),
2472
+ resolutions: optionalJson(ctx, "resolutions"),
1910
2473
  report_desc: optionalString(ctx, "report-desc"),
1911
2474
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
1912
2475
  query_duration_ms: optionalNumber(ctx, "query-duration-ms"),
@@ -1917,6 +2480,7 @@ var reportCreate = createAnalysisCapabilityCommand({
1917
2480
  // src/commands/te-analysis/report/update.ts
1918
2481
  function validateReportUpdate(ctx) {
1919
2482
  const hasDefinition = ctx.str("definition") !== "";
2483
+ const hasResolutions = ctx.json("resolutions") !== void 0;
1920
2484
  const hasMetadataUpdate = ctx.str("report-name") !== "" || ctx.str("report-desc") !== "";
1921
2485
  if (!hasDefinition && !hasMetadataUpdate) {
1922
2486
  throw new Error("At least one of --report-name, --report-desc, or --definition is required.");
@@ -1924,6 +2488,10 @@ function validateReportUpdate(ctx) {
1924
2488
  if (hasDefinition && ctx.str("model-type") === "") {
1925
2489
  throw new Error("--model-type is required when --definition is provided.");
1926
2490
  }
2491
+ if (hasResolutions && !hasDefinition) {
2492
+ throw new Error("--resolutions requires --definition.");
2493
+ }
2494
+ validateReportMetadataResolutions(ctx);
1927
2495
  }
1928
2496
  var reportUpdate = createAnalysisCapabilityCommand({
1929
2497
  resource: "report",
@@ -1938,6 +2506,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
1938
2506
  { name: "report-desc", type: "string", required: false, desc: "New report description." },
1939
2507
  reportWriteModelTypeFlag(false),
1940
2508
  reportWriteDefinitionFlag(false),
2509
+ reportMetadataResolutionsFlag,
1941
2510
  { name: "cache-seconds", type: "number", required: false, desc: "Optional cache duration in seconds." },
1942
2511
  { name: "query-duration-ms", type: "number", required: false, desc: "Optional last query duration in milliseconds." }
1943
2512
  ],
@@ -1951,6 +2520,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
1951
2520
  report_desc: optionalString(ctx, "report-desc"),
1952
2521
  model_type: optionalString(ctx, "model-type"),
1953
2522
  definition: optionalJson(ctx, "definition"),
2523
+ resolutions: optionalJson(ctx, "resolutions"),
1954
2524
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
1955
2525
  query_duration_ms: optionalNumber(ctx, "query-duration-ms")
1956
2526
  })
@@ -1971,7 +2541,7 @@ var reportDelete = createAnalysisCapabilityCommand({
1971
2541
  });
1972
2542
 
1973
2543
  // src/commands/te-analysis/report/index.ts
1974
- var commands12 = [
2544
+ var commands13 = [
1975
2545
  reportList,
1976
2546
  reportListExport,
1977
2547
  reportGet,
@@ -1979,7 +2549,7 @@ var commands12 = [
1979
2549
  reportUpdate,
1980
2550
  reportDelete
1981
2551
  ];
1982
- var report_default = commands12;
2552
+ var report_default = commands13;
1983
2553
 
1984
2554
  // src/commands/te-analysis/report-data/shared.ts
1985
2555
  var reportDataZoneOffsetDescription = "Query execution timezone. Omit it to match the report UI for the current user (user selection when available, otherwise project default). Use a fixed UTC offset from -12 through 14, or 99 for local-time mode with no conversion to one fixed UTC offset; 99 is not UTC+99. This is not persisted in the report definition.";
@@ -1998,14 +2568,13 @@ function reportDataInput(ctx) {
1998
2568
  slave_cluster_id: optionalString(ctx, "slave-cluster-id"),
1999
2569
  zone_offset: optionalNumber(ctx, "zone-offset"),
2000
2570
  use_cache: optionalBoolean(ctx, "use-cache"),
2001
- limit: optionalNumber(ctx, "limit"),
2571
+ preview_rows: optionalNumber(ctx, "preview-rows"),
2002
2572
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
2003
2573
  });
2004
2574
  }
2005
2575
  function reportDataExportInput(ctx) {
2006
2576
  return compactInput({
2007
2577
  ...reportDataInput(ctx),
2008
- limit: void 0,
2009
2578
  ...exportLifecycleInput(ctx)
2010
2579
  });
2011
2580
  }
@@ -2030,13 +2599,12 @@ var reportDataRun = createAnalysisCapabilityCommand({
2030
2599
  slaveClusterIdFlag,
2031
2600
  { name: "zone-offset", type: "number", required: false, desc: reportDataZoneOffsetDescription },
2032
2601
  { name: "use-cache", type: "boolean", required: false, desc: "Whether to use cache. Default: true." },
2033
- syncLimitFlag,
2602
+ analysisModelPreviewRowsFlag,
2034
2603
  syncTimeoutSecondsFlag
2035
2604
  ],
2036
2605
  risk: "read",
2037
2606
  validate: validateClusterQueryRouting,
2038
- buildInput: reportDataInput,
2039
- postProcess: applyAnalysisInlineLimit
2607
+ buildInput: reportDataInput
2040
2608
  });
2041
2609
 
2042
2610
  // src/commands/te-analysis/report-data/export.ts
@@ -2044,6 +2612,7 @@ var reportDataExport = createAnalysisCapabilityCommand({
2044
2612
  resource: "report-data",
2045
2613
  command: "export",
2046
2614
  capabilityId: "analysis.report_data.export",
2615
+ asyncArtifact: true,
2047
2616
  description: `Submit report data as an asynchronous gzip artifact. Override contract: SQL uses only --sql-params; non-SQL analysis models use filters/group/time; tag uses its saved tag definition. Mixed-model batches are best-effort. Exports do not create interactive drilldown contexts. ${analysisDataExportRoutingHelp}`,
2048
2617
  flags: [
2049
2618
  projectIdFlag,
@@ -2068,11 +2637,11 @@ var reportDataExport = createAnalysisCapabilityCommand({
2068
2637
  });
2069
2638
 
2070
2639
  // src/commands/te-analysis/report-data/index.ts
2071
- var commands13 = [
2640
+ var commands14 = [
2072
2641
  reportDataRun,
2073
2642
  reportDataExport
2074
2643
  ];
2075
- var report_data_default = commands13;
2644
+ var report_data_default = commands14;
2076
2645
 
2077
2646
  // src/commands/te-analysis/report-change-log/list.ts
2078
2647
  var reportChangeLogList = createAnalysisCapabilityCommand({
@@ -2108,11 +2677,11 @@ var reportChangeLogGet = createAnalysisCapabilityCommand({
2108
2677
  });
2109
2678
 
2110
2679
  // src/commands/te-analysis/report-change-log/index.ts
2111
- var commands14 = [
2680
+ var commands15 = [
2112
2681
  reportChangeLogList,
2113
2682
  reportChangeLogGet
2114
2683
  ];
2115
- var report_change_log_default = commands14;
2684
+ var report_change_log_default = commands15;
2116
2685
 
2117
2686
  // src/commands/te-analysis/report-version/rollback.ts
2118
2687
  var reportVersionRollback = createAnalysisCapabilityCommand({
@@ -2134,10 +2703,10 @@ var reportVersionRollback = createAnalysisCapabilityCommand({
2134
2703
  });
2135
2704
 
2136
2705
  // src/commands/te-analysis/report-version/index.ts
2137
- var commands15 = [
2706
+ var commands16 = [
2138
2707
  reportVersionRollback
2139
2708
  ];
2140
- var report_version_default = commands15;
2709
+ var report_version_default = commands16;
2141
2710
 
2142
2711
  // src/commands/te-analysis/report-abnormal/get.ts
2143
2712
  var reportAbnormalGet = createAnalysisCapabilityCommand({
@@ -2154,10 +2723,10 @@ var reportAbnormalGet = createAnalysisCapabilityCommand({
2154
2723
  });
2155
2724
 
2156
2725
  // src/commands/te-analysis/report-abnormal/index.ts
2157
- var commands16 = [
2726
+ var commands17 = [
2158
2727
  reportAbnormalGet
2159
2728
  ];
2160
- var report_abnormal_default = commands16;
2729
+ var report_abnormal_default = commands17;
2161
2730
 
2162
2731
  // src/commands/te-analysis/dashboard/list.ts
2163
2732
  var dashboardList = createAnalysisCapabilityCommand({
@@ -2176,7 +2745,7 @@ var dashboardList = createAnalysisCapabilityCommand({
2176
2745
  alias: "f"
2177
2746
  },
2178
2747
  directoryLimitFlag,
2179
- offsetFlag
2748
+ directoryOffsetFlag
2180
2749
  ],
2181
2750
  risk: "read",
2182
2751
  buildInput: listInput
@@ -2406,7 +2975,7 @@ var dashboardTaskStatus = createAnalysisCapabilityCommand({
2406
2975
  });
2407
2976
 
2408
2977
  // src/commands/te-analysis/dashboard/index.ts
2409
- var commands17 = [
2978
+ var commands18 = [
2410
2979
  dashboardList,
2411
2980
  dashboardCreate,
2412
2981
  dashboardGet,
@@ -2420,7 +2989,7 @@ var commands17 = [
2420
2989
  dashboardAbnormalGet,
2421
2990
  dashboardTaskStatus
2422
2991
  ];
2423
- var dashboard_default = commands17;
2992
+ var dashboard_default = commands18;
2424
2993
 
2425
2994
  // src/commands/te-analysis/dashboard-report/add.ts
2426
2995
  var dashboardReportAdd = createAnalysisCapabilityCommand({
@@ -2442,10 +3011,10 @@ var dashboardReportAdd = createAnalysisCapabilityCommand({
2442
3011
  });
2443
3012
 
2444
3013
  // src/commands/te-analysis/dashboard-report/index.ts
2445
- var commands18 = [
3014
+ var commands19 = [
2446
3015
  dashboardReportAdd
2447
3016
  ];
2448
- var dashboard_report_default = commands18;
3017
+ var dashboard_report_default = commands19;
2449
3018
 
2450
3019
  // src/commands/te-analysis/dashboard-report-data/run.ts
2451
3020
  var dashboardReportDataRun = createAnalysisCapabilityCommand({
@@ -2465,13 +3034,12 @@ var dashboardReportDataRun = createAnalysisCapabilityCommand({
2465
3034
  { name: "zone-offset", type: "number", required: false, desc: reportDataZoneOffsetDescription },
2466
3035
  { name: "use-cache", type: "boolean", required: false, desc: "Whether to use cache. Default: true." },
2467
3036
  { name: "request-id", type: "string", required: false, desc: "Optional cli_<32 lowercase hex> request ID. Generated when omitted." },
2468
- dashboardSyncTimeoutSecondsFlag,
2469
- syncLimitFlag
3037
+ analysisModelPreviewRowsFlag,
3038
+ dashboardSyncTimeoutSecondsFlag
2470
3039
  ],
2471
3040
  risk: "read",
2472
3041
  validate: validateClusterQueryRouting,
2473
- buildInput: dashboardReportDataInput,
2474
- postProcess: applyAnalysisInlineLimit
3042
+ buildInput: dashboardReportDataInput
2475
3043
  });
2476
3044
 
2477
3045
  // src/commands/te-analysis/dashboard-report-data/export.ts
@@ -2479,6 +3047,7 @@ var dashboardReportDataExport = createAnalysisCapabilityCommand({
2479
3047
  resource: "dashboard-report-data",
2480
3048
  command: "export",
2481
3049
  capabilityId: "analysis.dashboard_report_data.export",
3050
+ asyncArtifact: true,
2482
3051
  description: `Submit dashboard report data as an asynchronous gzip JSONL artifact. Filters and time overrides do not apply to SQL reports; the artifact still contains data plus structured warnings. Exports do not create interactive drilldown contexts. ${analysisDataExportRoutingHelp}`,
2483
3052
  flags: [
2484
3053
  projectIdFlag,
@@ -2501,11 +3070,11 @@ var dashboardReportDataExport = createAnalysisCapabilityCommand({
2501
3070
  });
2502
3071
 
2503
3072
  // src/commands/te-analysis/dashboard-report-data/index.ts
2504
- var commands19 = [
3073
+ var commands20 = [
2505
3074
  dashboardReportDataRun,
2506
3075
  dashboardReportDataExport
2507
3076
  ];
2508
- var dashboard_report_data_default = commands19;
3077
+ var dashboard_report_data_default = commands20;
2509
3078
 
2510
3079
  // src/commands/te-analysis/query/cancel.ts
2511
3080
  var queryCancel = createAnalysisCapabilityCommand({
@@ -2529,13 +3098,13 @@ var sourceFlag = {
2529
3098
  name: "source",
2530
3099
  type: "json",
2531
3100
  required: false,
2532
- desc: "Source selector copied from sources[] when the synchronous preview contains multiple reports or charts. Pass only returned selector fields such as report_id or chart_id."
3101
+ desc: "Source selector copied from the compact sources[] summary when the synchronous preview contains multiple reports or charts. Pass exactly one returned field: report_id or chart_id."
2533
3102
  };
2534
3103
  var coordinateFlag = {
2535
3104
  name: "coordinate",
2536
3105
  type: "json",
2537
3106
  required: true,
2538
- desc: "One semantic cell coordinate assembled only from the selected source.drilldown row_options, column_options, and metric_options. Never pass target_id, raw QP, or values absent from the synchronous preview."
3107
+ desc: "One semantic cell coordinate assembled only from row_options, column_options, and metric_options returned by analysis query-context get. Never pass target_id, raw QP, or inferred values."
2539
3108
  };
2540
3109
  var propertiesFlag = {
2541
3110
  name: "properties",
@@ -2600,11 +3169,44 @@ var queryCreateResultCluster = createAnalysisCapabilityCommand({
2600
3169
  });
2601
3170
 
2602
3171
  // src/commands/te-analysis/query/index.ts
2603
- var commands20 = [
3172
+ var commands21 = [
2604
3173
  queryCancel,
2605
3174
  queryCreateResultCluster
2606
3175
  ];
2607
- var query_default = commands20;
3176
+ var query_default = commands21;
3177
+
3178
+ // src/commands/te-analysis/query-context/get.ts
3179
+ var queryContextGet = createAnalysisCapabilityCommand({
3180
+ resource: "query-context",
3181
+ command: "get",
3182
+ capabilityId: "analysis.query.context_get",
3183
+ description: "Read full selectable row, column, and metric coordinate options for one source from a synchronous analysis query context.",
3184
+ flags: [
3185
+ projectIdFlag,
3186
+ {
3187
+ name: "query-context-id",
3188
+ type: "string",
3189
+ required: true,
3190
+ desc: "query_context_id returned by a synchronous analysis preview."
3191
+ },
3192
+ {
3193
+ name: "source",
3194
+ type: "json",
3195
+ required: false,
3196
+ desc: "Source selector copied from the compact sources[] summary. Required for multi-source contexts; pass exactly one field: report_id or chart_id."
3197
+ }
3198
+ ],
3199
+ risk: "read",
3200
+ buildInput: (ctx) => compactInput({
3201
+ project_id: ctx.num("project-id"),
3202
+ query_context_id: ctx.str("query-context-id"),
3203
+ source: optionalJson(ctx, "source")
3204
+ })
3205
+ });
3206
+
3207
+ // src/commands/te-analysis/query-context/index.ts
3208
+ var commands22 = [queryContextGet];
3209
+ var query_context_default = commands22;
2608
3210
 
2609
3211
  // src/commands/te-analysis/run/inspect.ts
2610
3212
  var runInspect = {
@@ -2634,15 +3236,76 @@ var runInspect = {
2634
3236
  }
2635
3237
  };
2636
3238
 
3239
+ // src/commands/te-analysis/run/wait.ts
3240
+ var runWait = {
3241
+ service: "analysis",
3242
+ resource: "run",
3243
+ command: "wait",
3244
+ description: "Resume waiting for an async run; optionally stream its completed artifact to a local file.",
3245
+ flags: [
3246
+ { name: "run-id", type: "string", required: true, desc: "Async run ID returned by an export capability." },
3247
+ { name: "wait-timeout-seconds", type: "number", required: false, min: 1, max: 21600, desc: "Maximum time this CLI process waits. Default: 600 seconds; expiry never cancels the remote run." },
3248
+ { name: "output", type: "string", required: false, desc: "After success, stream the artifact to this local file." },
3249
+ { name: "force", type: "boolean", required: false, desc: "Allow --output to atomically replace an existing file." }
3250
+ ],
3251
+ risk: "read",
3252
+ validate: (ctx) => validateLifecycleFlags(ctx, true),
3253
+ dryRun: (ctx) => ({
3254
+ method: "GET",
3255
+ url: buildCapabilityGatewayUrl(
3256
+ ctx.host(),
3257
+ resolveGatewayDomain("analysis"),
3258
+ `runs/${encodeURIComponent(ctx.str("run-id"))}`
3259
+ ),
3260
+ wait_until_terminal: true,
3261
+ wait_timeout_seconds: clientWaitTimeoutSeconds(ctx),
3262
+ ...ctx.str("output") ? { output_path: ctx.str("output") } : {}
3263
+ }),
3264
+ execute: async (ctx) => {
3265
+ validateLifecycleFlags(ctx, true);
3266
+ const runId = ctx.str("run-id");
3267
+ const output = ctx.str("output");
3268
+ if (output) await assertOutputPathAvailable(output, ctx.bool("force"), { run_id: runId });
3269
+ return withInterruptSignal(async (signal) => {
3270
+ const descriptor = await waitForAnalysisRun(ctx.host(), runId, {
3271
+ signal,
3272
+ waitTimeoutSeconds: clientWaitTimeoutSeconds(ctx)
3273
+ });
3274
+ if (!output) return descriptor;
3275
+ const artifactId = artifactIdFrom(descriptor);
3276
+ if (!artifactId) {
3277
+ throw new CapabilityGatewayError(
3278
+ `Completed async run ${runId} has no artifact_id.`,
3279
+ "ASYNC_RUN_PROTOCOL_ERROR",
3280
+ 502,
3281
+ `Inspect with: ae-cli analysis run inspect --run-id ${runId}`,
3282
+ { run_id: runId }
3283
+ );
3284
+ }
3285
+ const download = await downloadAnalysisArtifact(
3286
+ ctx.host(),
3287
+ runId,
3288
+ artifactId,
3289
+ output,
3290
+ { force: ctx.bool("force"), signal, ensureReady: false }
3291
+ );
3292
+ return { ...descriptor, ...download };
3293
+ }, runId);
3294
+ }
3295
+ };
3296
+ function artifactIdFrom(descriptor) {
3297
+ return descriptor.artifact_id ?? descriptor.artifact?.artifact_id ?? descriptor.artifact?.id;
3298
+ }
3299
+
2637
3300
  // src/commands/te-analysis/run/index.ts
2638
- var commands21 = [
2639
- runInspect
3301
+ var commands23 = [
3302
+ runInspect,
3303
+ runWait
2640
3304
  ];
2641
- var run_default = commands21;
3305
+ var run_default = commands23;
2642
3306
 
2643
3307
  // src/commands/te-analysis/artifact/download.ts
2644
- import { mkdir, writeFile } from "fs/promises";
2645
- import { dirname, resolve } from "path";
3308
+ import { resolve as resolve3 } from "path";
2646
3309
  function artifactPath(runId, artifactId) {
2647
3310
  return `runs/${encodeURIComponent(runId)}/artifacts/${encodeURIComponent(artifactId)}/download`;
2648
3311
  }
@@ -2650,13 +3313,15 @@ var artifactDownload = {
2650
3313
  service: "analysis",
2651
3314
  resource: "artifact",
2652
3315
  command: "download",
2653
- description: "Download an analysis capability-gateway artifact by run_id and artifact_id. Keep run_id bound to artifact_id from the export result.",
3316
+ description: "Stream a completed analysis capability-gateway artifact to a local file by its bound run_id/artifact_id pair.",
2654
3317
  flags: [
2655
3318
  { name: "run-id", type: "string", required: true, desc: "Async run ID returned by an export capability." },
2656
3319
  { name: "artifact-id", type: "string", required: true, desc: "Artifact ID returned by the same export capability." },
2657
- { name: "output", type: "string", required: true, desc: "Local output file path. Use a file path, not a directory." }
3320
+ { name: "output", type: "string", required: true, desc: "Local output file path. Existing paths are refused unless --force is passed." },
3321
+ { name: "force", type: "boolean", required: false, desc: "Atomically replace an existing output file." }
2658
3322
  ],
2659
3323
  risk: "read",
3324
+ validate: validateLifecycleFlags,
2660
3325
  dryRun: (ctx) => ({
2661
3326
  method: "GET",
2662
3327
  url: buildCapabilityGatewayUrl(
@@ -2664,72 +3329,30 @@ var artifactDownload = {
2664
3329
  resolveGatewayDomain("analysis"),
2665
3330
  artifactPath(ctx.str("run-id"), ctx.str("artifact-id"))
2666
3331
  ),
2667
- output_path: resolve(ctx.str("output"))
3332
+ output_path: resolve3(ctx.str("output")),
3333
+ ...ctx.bool("force") ? { force: true } : {}
2668
3334
  }),
2669
3335
  execute: async (ctx) => {
3336
+ validateLifecycleFlags(ctx);
2670
3337
  const runId = ctx.str("run-id");
2671
- const artifactId = ctx.str("artifact-id");
2672
- const outputPath = resolve(ctx.str("output"));
2673
- await ensureArtifactReady(ctx.host(), runId, artifactId);
2674
- const resp = await fetchArtifact(ctx.host(), runId, artifactId);
2675
- const bytes = Buffer.from(await resp.arrayBuffer());
2676
- await mkdir(dirname(outputPath), { recursive: true });
2677
- await writeFile(outputPath, bytes);
2678
- return {
2679
- run_id: runId,
2680
- artifact_id: artifactId,
2681
- output_path: outputPath,
2682
- bytes: bytes.length,
2683
- content_type: resp.headers.get("content-type") ?? void 0,
2684
- content_encoding: resp.headers.get("content-encoding") ?? void 0,
2685
- content_disposition: resp.headers.get("content-disposition") ?? void 0
2686
- };
2687
- }
2688
- };
2689
- async function ensureArtifactReady(host, runId, artifactId) {
2690
- const descriptor = await inspectRun(host, runId);
2691
- if (descriptor.artifact_id && descriptor.artifact_id !== artifactId) {
2692
- throw new CapabilityGatewayError(
2693
- `artifact_id ${artifactId} does not belong to run_id ${runId}`,
2694
- "ARTIFACT_RUN_MISMATCH",
2695
- 400,
2696
- "Use the run_id and artifact_id pair from the same export response."
3338
+ return withInterruptSignal(
3339
+ (signal) => downloadAnalysisArtifact(
3340
+ ctx.host(),
3341
+ runId,
3342
+ ctx.str("artifact-id"),
3343
+ ctx.str("output"),
3344
+ { force: ctx.bool("force"), signal }
3345
+ ),
3346
+ runId
2697
3347
  );
2698
3348
  }
2699
- if (descriptor.status === "SUCCEEDED" && descriptor.artifact_status === "COMPLETED") {
2700
- return;
2701
- }
2702
- const reason = descriptor.error_message ? `; error=${descriptor.error_message}` : "";
2703
- throw new CapabilityGatewayError(
2704
- `Artifact is not ready: run_status=${descriptor.status ?? "UNKNOWN"}, artifact_status=${descriptor.artifact_status ?? "UNKNOWN"}${reason}`,
2705
- "ARTIFACT_NOT_READY",
2706
- 409,
2707
- "Run ae-cli analysis run inspect --run-id <run_id> until status=SUCCEEDED and artifact_status=COMPLETED, then retry artifact download. If status is FAILED or CANCELED, do not retry download."
2708
- );
2709
- }
2710
- async function inspectRun(host, runId) {
2711
- return await requestCapabilityGateway(
2712
- host,
2713
- resolveGatewayDomain("analysis"),
2714
- `runs/${encodeURIComponent(runId)}`
2715
- );
2716
- }
2717
- async function fetchArtifact(host, runId, artifactId) {
2718
- return fetchCapabilityGateway(
2719
- host,
2720
- resolveGatewayDomain("analysis"),
2721
- artifactPath(runId, artifactId),
2722
- "GET",
2723
- void 0,
2724
- "application/octet-stream"
2725
- );
2726
- }
3349
+ };
2727
3350
 
2728
3351
  // src/commands/te-analysis/artifact/index.ts
2729
- var commands22 = [
3352
+ var commands24 = [
2730
3353
  artifactDownload
2731
3354
  ];
2732
- var artifact_default = commands22;
3355
+ var artifact_default = commands24;
2733
3356
 
2734
3357
  // src/commands/te-analysis/adhoc/shared.ts
2735
3358
  var useCacheFlag2 = {
@@ -2749,13 +3372,14 @@ function adhocRunInput(ctx) {
2749
3372
  project_id: ctx.num("project-id"),
2750
3373
  model_type: ctx.str("model-type"),
2751
3374
  definition: ctx.json("definition"),
3375
+ resolutions: optionalJson(ctx, "resolutions"),
2752
3376
  request_id: optionalString(ctx, "request-id"),
2753
3377
  use_cache: optionalBoolean(ctx, "use-cache"),
2754
3378
  zone_offset: optionalNumber(ctx, "zone-offset"),
2755
3379
  fields: optionalJsonArray(ctx, "fields"),
2756
3380
  cluster_query_scope: optionalString(ctx, "cluster-query-scope"),
2757
3381
  slave_cluster_id: optionalString(ctx, "slave-cluster-id"),
2758
- limit: optionalNumber(ctx, "limit"),
3382
+ preview_rows: optionalNumber(ctx, "preview-rows"),
2759
3383
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
2760
3384
  });
2761
3385
  }
@@ -2764,6 +3388,7 @@ function adhocExportInput(ctx) {
2764
3388
  project_id: ctx.num("project-id"),
2765
3389
  model_type: ctx.str("model-type"),
2766
3390
  definition: ctx.json("definition"),
3391
+ resolutions: optionalJson(ctx, "resolutions"),
2767
3392
  request_id: optionalString(ctx, "request-id"),
2768
3393
  use_cache: optionalBoolean(ctx, "use-cache"),
2769
3394
  zone_offset: optionalNumber(ctx, "zone-offset"),
@@ -2778,6 +3403,7 @@ var adhocBaseFlags = [
2778
3403
  projectIdFlag,
2779
3404
  aiModelTypeFlag(true),
2780
3405
  aiDefinitionFlag(true),
3406
+ metadataResolutionsFlag,
2781
3407
  requestIdFlag,
2782
3408
  useCacheFlag2,
2783
3409
  zoneOffsetFlag2,
@@ -2785,6 +3411,10 @@ var adhocBaseFlags = [
2785
3411
  clusterQueryScopeFlag,
2786
3412
  slaveClusterIdFlag
2787
3413
  ];
3414
+ var adhocRunFlags = [
3415
+ ...adhocBaseFlags,
3416
+ analysisModelPreviewRowsFlag
3417
+ ];
2788
3418
  var adhocExportFlags = [
2789
3419
  ...adhocBaseFlags,
2790
3420
  artifactFormatFlag,
@@ -2798,14 +3428,12 @@ var adhocRun = createAnalysisCapabilityCommand({
2798
3428
  capabilityId: "analysis.adhoc.run",
2799
3429
  description: `Run one unified ad-hoc analysis from an AI-facing model definition. Supports 12 AI-facing models: 9 common models plus 3 scenario models. Tags and cohorts/clusters are separate capabilities, not ad-hoc model_type values. Returns query_context_id for Redis-backed query follow-ups. ${analysisDataRunRoutingHelp}`,
2800
3430
  flags: [
2801
- ...adhocBaseFlags,
2802
- syncLimitFlag,
3431
+ ...adhocRunFlags,
2803
3432
  syncTimeoutSecondsFlag
2804
3433
  ],
2805
3434
  risk: "read",
2806
3435
  validate: validateClusterQueryRouting,
2807
- buildInput: adhocRunInput,
2808
- postProcess: applyAnalysisInlineLimit
3436
+ buildInput: adhocRunInput
2809
3437
  });
2810
3438
 
2811
3439
  // src/commands/te-analysis/adhoc/export.ts
@@ -2813,6 +3441,7 @@ var adhocExport = createAnalysisCapabilityCommand({
2813
3441
  resource: "adhoc",
2814
3442
  command: "export",
2815
3443
  capabilityId: "analysis.adhoc.export",
3444
+ asyncArtifact: true,
2816
3445
  description: `Submit one unified ad-hoc analysis export from an AI-facing model definition. Returns run_id/artifact_id plus the actual format, compression, file_name, content_type, and content_encoding. Exports do not create interactive drilldown contexts. ${analysisDataExportRoutingHelp}`,
2817
3446
  flags: [
2818
3447
  ...adhocExportFlags
@@ -2823,11 +3452,11 @@ var adhocExport = createAnalysisCapabilityCommand({
2823
3452
  });
2824
3453
 
2825
3454
  // src/commands/te-analysis/adhoc/index.ts
2826
- var commands23 = [
3455
+ var commands25 = [
2827
3456
  adhocRun,
2828
3457
  adhocExport
2829
3458
  ];
2830
- var adhoc_default = commands23;
3459
+ var adhoc_default = commands25;
2831
3460
 
2832
3461
  // src/commands/te-analysis/dashboard-definition/export.ts
2833
3462
  var dashboardDefinitionExport = createAnalysisCapabilityCommand({
@@ -2882,11 +3511,11 @@ var dashboardDefinitionImport = createAnalysisCapabilityCommand({
2882
3511
  });
2883
3512
 
2884
3513
  // src/commands/te-analysis/dashboard-definition/index.ts
2885
- var commands24 = [
3514
+ var commands26 = [
2886
3515
  dashboardDefinitionExport,
2887
3516
  dashboardDefinitionImport
2888
3517
  ];
2889
- var dashboard_definition_default = commands24;
3518
+ var dashboard_definition_default = commands26;
2890
3519
 
2891
3520
  // src/commands/te-analysis/dashboard-daily-report/get.ts
2892
3521
  var dashboardDailyReportGet = createAnalysisCapabilityCommand({
@@ -3070,13 +3699,13 @@ var dashboardDailyReportSendStatus = createAnalysisCapabilityCommand({
3070
3699
  });
3071
3700
 
3072
3701
  // src/commands/te-analysis/dashboard-daily-report/index.ts
3073
- var commands25 = [
3702
+ var commands27 = [
3074
3703
  dashboardDailyReportGet,
3075
3704
  dashboardDailyReportUpdate,
3076
3705
  dashboardDailyReportSend,
3077
3706
  dashboardDailyReportSendStatus
3078
3707
  ];
3079
- var dashboard_daily_report_default = commands25;
3708
+ var dashboard_daily_report_default = commands27;
3080
3709
 
3081
3710
  // src/commands/te-analysis/bi-panel/list.ts
3082
3711
  var biPanelList = createAnalysisCapabilityCommand({
@@ -3084,7 +3713,7 @@ var biPanelList = createAnalysisCapabilityCommand({
3084
3713
  command: "list",
3085
3714
  capabilityId: "analysis.bi_panel.list",
3086
3715
  description: "List BI panels visible to the current user through the capability gateway.",
3087
- flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, offsetFlag],
3716
+ flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, directoryOffsetFlag],
3088
3717
  risk: "read",
3089
3718
  buildInput: listInput
3090
3719
  });
@@ -3203,7 +3832,7 @@ var biPanelCopy = createAnalysisCapabilityCommand({
3203
3832
  });
3204
3833
 
3205
3834
  // src/commands/te-analysis/bi-panel/index.ts
3206
- var commands26 = [
3835
+ var commands28 = [
3207
3836
  biPanelList,
3208
3837
  biPanelGet,
3209
3838
  biPanelCreate,
@@ -3212,7 +3841,7 @@ var commands26 = [
3212
3841
  biPanelShare,
3213
3842
  biPanelCopy
3214
3843
  ];
3215
- var bi_panel_default = commands26;
3844
+ var bi_panel_default = commands28;
3216
3845
 
3217
3846
  // src/commands/te-analysis/bi-panel-version/get.ts
3218
3847
  var biPanelVersionGet = createAnalysisCapabilityCommand({
@@ -3259,18 +3888,18 @@ var biPanelVersionPublish = createAnalysisCapabilityCommand({
3259
3888
  });
3260
3889
 
3261
3890
  // src/commands/te-analysis/bi-panel-version/index.ts
3262
- var commands27 = [
3891
+ var commands29 = [
3263
3892
  biPanelVersionGet,
3264
3893
  biPanelVersionPublish
3265
3894
  ];
3266
- var bi_panel_version_default = commands27;
3895
+ var bi_panel_version_default = commands29;
3267
3896
 
3268
3897
  // src/commands/te-analysis/bi-panel-page-data/run.ts
3269
3898
  var biPanelPageDataRun = createAnalysisCapabilityCommand({
3270
3899
  resource: "bi-panel-page-data",
3271
3900
  command: "run",
3272
3901
  capabilityId: "analysis.bi_panel_page_data.run",
3273
- description: `Run a bounded BI panel page data query and return inline JSON. BI SQL chart data does not support analysis model drilldown or result-cluster creation. ${analysisDataRunRoutingHelp}`,
3902
+ description: `Run a BI panel page query with the same chart result cap as the UI and return has_more when that cap is reached. BI SQL chart data does not support analysis model drilldown or result-cluster creation. ${analysisDataRunRoutingHelp}`,
3274
3903
  flags: [
3275
3904
  projectIdFlag,
3276
3905
  { name: "panel-id", type: "number", required: true, desc: "BI panel ID." },
@@ -3281,18 +3910,13 @@ var biPanelPageDataRun = createAnalysisCapabilityCommand({
3281
3910
  { name: "permission-controls", type: "json", required: false, desc: "Optional permission control array." },
3282
3911
  { name: "chart-filter-controls", type: "json", required: false, desc: "Optional chart filter control array." },
3283
3912
  { name: "columns", type: "json", required: false, desc: "Optional returned column array." },
3284
- { name: "row-limit", type: "number", required: false, desc: "BI chart row window control. Default: 100, max: 1000. This is chart paging, not the sync/export routing policy.", min: 1, max: 1e3 },
3285
- { name: "row-offset", type: "number", required: false, desc: "Chart row offset." },
3286
- { name: "block-limit", type: "number", required: false, desc: "Summary block limit." },
3287
- { name: "block-offset", type: "number", required: false, desc: "Summary block offset." },
3288
3913
  { name: "use-cache", type: "boolean", required: false, desc: "Whether to use cache. Default: true." },
3289
3914
  { name: "request-id", type: "string", required: false, desc: "Optional cli_<32 lowercase hex> request ID. Generated when omitted." },
3290
- syncTimeoutSecondsFlag,
3291
- syncLimitFlag
3915
+ previewRowsFlag,
3916
+ syncTimeoutSecondsFlag
3292
3917
  ],
3293
3918
  risk: "read",
3294
- buildInput: biPanelPageDataInput,
3295
- postProcess: applyAnalysisInlineLimit
3919
+ buildInput: biPanelPageDataInput
3296
3920
  });
3297
3921
 
3298
3922
  // src/commands/te-analysis/bi-panel-page-data/export.ts
@@ -3300,21 +3924,18 @@ var biPanelPageDataExport = createAnalysisCapabilityCommand({
3300
3924
  resource: "bi-panel-page-data",
3301
3925
  command: "export",
3302
3926
  capabilityId: "analysis.bi_panel_page_data.export",
3303
- description: `Submit a BI panel page data query as an asynchronous gzip JSONL artifact. BI SQL chart exports do not create analysis drilldown contexts. ${analysisDataExportRoutingHelp}`,
3927
+ asyncArtifact: true,
3928
+ description: `Stream complete BI panel chart data into an asynchronous gzip JSONL artifact under Common's full-download row cap. BI SQL chart exports do not create analysis drilldown contexts. ${analysisDataExportRoutingHelp}`,
3304
3929
  flags: [
3305
3930
  projectIdFlag,
3306
3931
  { name: "panel-id", type: "number", required: true, desc: "BI panel ID." },
3307
3932
  { name: "page-key", type: "string", required: true, desc: "Page key returned by bi-panel get." },
3308
- { name: "result-type", type: "string", required: true, desc: "Result type: charts or summary." },
3933
+ { name: "result-type", type: "string", required: true, desc: "Must be charts. Summary is presentation data and is available only from run." },
3309
3934
  { name: "chart-ids", type: "json", required: false, desc: "Optional chart ID array." },
3310
3935
  { name: "parameter-controls", type: "json", required: false, desc: "Optional parameter control override array." },
3311
3936
  { name: "permission-controls", type: "json", required: false, desc: "Optional permission control array." },
3312
3937
  { name: "chart-filter-controls", type: "json", required: false, desc: "Optional chart filter control array." },
3313
3938
  { name: "columns", type: "json", required: false, desc: "Optional returned column array." },
3314
- { name: "row-limit", type: "number", required: false, desc: "BI chart row window control. Default: 100, max: 1000. This is chart paging, not the async artifact total-row policy.", min: 1, max: 1e3 },
3315
- { name: "row-offset", type: "number", required: false, desc: "Chart row offset." },
3316
- { name: "block-limit", type: "number", required: false, desc: "Summary block limit." },
3317
- { name: "block-offset", type: "number", required: false, desc: "Summary block offset." },
3318
3939
  { name: "use-cache", type: "boolean", required: false, desc: "Whether to use cache. Default: true." },
3319
3940
  { name: "request-id", type: "string", required: false, desc: "Optional cli_<32 lowercase hex> request ID. Generated when omitted." },
3320
3941
  asyncTimeoutSecondsFlag,
@@ -3325,11 +3946,11 @@ var biPanelPageDataExport = createAnalysisCapabilityCommand({
3325
3946
  });
3326
3947
 
3327
3948
  // src/commands/te-analysis/bi-panel-page-data/index.ts
3328
- var commands28 = [
3949
+ var commands30 = [
3329
3950
  biPanelPageDataRun,
3330
3951
  biPanelPageDataExport
3331
3952
  ];
3332
- var bi_panel_page_data_default = commands28;
3953
+ var bi_panel_page_data_default = commands30;
3333
3954
 
3334
3955
  // src/commands/te-analysis/project-space/list.ts
3335
3956
  var projectSpaceList = createAnalysisCapabilityCommand({
@@ -3337,7 +3958,7 @@ var projectSpaceList = createAnalysisCapabilityCommand({
3337
3958
  command: "list",
3338
3959
  capabilityId: "analysis.project_space.list",
3339
3960
  description: "List project spaces visible to the current user.",
3340
- flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, offsetFlag],
3961
+ flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, directoryOffsetFlag],
3341
3962
  risk: "read",
3342
3963
  buildInput: listInput
3343
3964
  });
@@ -3358,11 +3979,11 @@ var projectSpaceGet = createAnalysisCapabilityCommand({
3358
3979
  });
3359
3980
 
3360
3981
  // src/commands/te-analysis/project-space/index.ts
3361
- var commands29 = [
3982
+ var commands31 = [
3362
3983
  projectSpaceList,
3363
3984
  projectSpaceGet
3364
3985
  ];
3365
- var project_space_default = commands29;
3986
+ var project_space_default = commands31;
3366
3987
 
3367
3988
  // src/commands/te-analysis/favorite/add.ts
3368
3989
  var favoriteAdd = createAnalysisCapabilityCommand({
@@ -3415,11 +4036,11 @@ var favoriteRemove = createAnalysisCapabilityCommand({
3415
4036
  });
3416
4037
 
3417
4038
  // src/commands/te-analysis/favorite/index.ts
3418
- var commands30 = [
4039
+ var commands32 = [
3419
4040
  favoriteAdd,
3420
4041
  favoriteRemove
3421
4042
  ];
3422
- var favorite_default = commands30;
4043
+ var favorite_default = commands32;
3423
4044
 
3424
4045
  // src/commands/te-analysis/public-link/create.ts
3425
4046
  var publicLinkCreate = createAnalysisCapabilityCommand({
@@ -3458,7 +4079,7 @@ var publicLinkList = createAnalysisCapabilityCommand({
3458
4079
  command: "list",
3459
4080
  capabilityId: "analysis.public_link.list",
3460
4081
  description: "List public links in a project.",
3461
- flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, offsetFlag],
4082
+ flags: [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, directoryOffsetFlag],
3462
4083
  risk: "read",
3463
4084
  buildInput: listInput
3464
4085
  });
@@ -3535,14 +4156,14 @@ var publicLinkDelete = createAnalysisCapabilityCommand({
3535
4156
  });
3536
4157
 
3537
4158
  // src/commands/te-analysis/public-link/index.ts
3538
- var commands31 = [
4159
+ var commands33 = [
3539
4160
  publicLinkCreate,
3540
4161
  publicLinkList,
3541
4162
  publicLinkUpdate,
3542
4163
  publicLinkOffline,
3543
4164
  publicLinkDelete
3544
4165
  ];
3545
- var public_link_default = commands31;
4166
+ var public_link_default = commands33;
3546
4167
 
3547
4168
  // src/commands/te-analysis/filter-value/list.ts
3548
4169
  var filterValueList = createAnalysisCapabilityCommand({
@@ -3576,8 +4197,8 @@ var filterValueList = createAnalysisCapabilityCommand({
3576
4197
  });
3577
4198
 
3578
4199
  // src/commands/te-analysis/filter-value/index.ts
3579
- var commands32 = [filterValueList];
3580
- var filter_value_default = commands32;
4200
+ var commands34 = [filterValueList];
4201
+ var filter_value_default = commands34;
3581
4202
 
3582
4203
  // src/commands/te-analysis/event-detail/shared.ts
3583
4204
  var eventDetailDefinitionFlag = {
@@ -3586,6 +4207,12 @@ var eventDetailDefinitionFlag = {
3586
4207
  required: true,
3587
4208
  desc: 'AI-facing event detail definition: {"event":"login","time_range":{"mode":"absolute","start_time":"2026-07-01 00:00:00","end_time":"2026-07-01 23:59:59"},"filters":{"relation":"and","items":[{"field":{"name":"country","type":"user_property"},"operator":"eq","values":["US"]}]},"properties":["#event_time",{"name":"country","type":"user_property"}],"sort":[{"field":"#event_time","order":"desc"}]}. Do not pass raw QP/eventView/taFilters.'
3588
4209
  };
4210
+ var eventDetailArtifactFormatFlag = {
4211
+ name: "artifact-format",
4212
+ type: "string",
4213
+ required: false,
4214
+ desc: "Native streaming artifact format: jsonl or csv. Default: jsonl."
4215
+ };
3589
4216
  function eventDetailRunInput(ctx) {
3590
4217
  return compactInput({
3591
4218
  project_id: ctx.num("project-id"),
@@ -3593,18 +4220,22 @@ function eventDetailRunInput(ctx) {
3593
4220
  request_id: optionalString(ctx, "request-id"),
3594
4221
  use_cache: optionalBoolean(ctx, "use-cache"),
3595
4222
  zone_offset: optionalNumber(ctx, "zone-offset"),
3596
- limit: optionalNumber(ctx, "limit"),
4223
+ preview_rows: optionalNumber(ctx, "preview-rows"),
3597
4224
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3598
4225
  });
3599
4226
  }
3600
4227
  function eventDetailExportInput(ctx) {
4228
+ const format = optionalString(ctx, "artifact-format");
4229
+ if (format !== void 0 && format !== "jsonl" && format !== "csv") {
4230
+ throw new Error("--artifact-format only supports jsonl or csv for event detail export");
4231
+ }
3601
4232
  return compactInput({
3602
4233
  project_id: ctx.num("project-id"),
3603
4234
  definition: ctx.json("definition"),
3604
4235
  request_id: optionalString(ctx, "request-id"),
3605
4236
  use_cache: optionalBoolean(ctx, "use-cache"),
3606
4237
  zone_offset: optionalNumber(ctx, "zone-offset"),
3607
- format: optionalString(ctx, "artifact-format"),
4238
+ format,
3608
4239
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3609
4240
  });
3610
4241
  }
@@ -3617,7 +4248,7 @@ var eventDetailBaseFlags = [
3617
4248
  ];
3618
4249
  var eventDetailExportFlags = [
3619
4250
  ...eventDetailBaseFlags,
3620
- artifactFormatFlag,
4251
+ eventDetailArtifactFormatFlag,
3621
4252
  asyncTimeoutSecondsFlag
3622
4253
  ];
3623
4254
 
@@ -3629,12 +4260,11 @@ var eventDetailRun = createAnalysisCapabilityCommand({
3629
4260
  description: `Run a bounded event detail query from an AI-facing definition. ${analysisDataRunRoutingHelp}`,
3630
4261
  flags: [
3631
4262
  ...eventDetailBaseFlags,
3632
- detailPreviewLimitFlag,
4263
+ previewRowsFlag,
3633
4264
  syncTimeoutSecondsFlag
3634
4265
  ],
3635
4266
  risk: "read",
3636
- buildInput: eventDetailRunInput,
3637
- postProcess: applyAnalysisInlineLimit
4267
+ buildInput: eventDetailRunInput
3638
4268
  });
3639
4269
 
3640
4270
  // src/commands/te-analysis/event-detail/export.ts
@@ -3642,7 +4272,8 @@ var eventDetailExport = createAnalysisCapabilityCommand({
3642
4272
  resource: "event-detail",
3643
4273
  command: "export",
3644
4274
  capabilityId: "analysis.event_detail.export",
3645
- description: "Export complete event detail data as an asynchronous gzip artifact. The server reads backend pages internally; callers inspect and download one artifact without pagination.",
4275
+ asyncArtifact: true,
4276
+ description: "Export complete event detail data through the native Trino JSONL or CSV stream as an asynchronous gzip artifact. Default: JSONL.",
3646
4277
  flags: [
3647
4278
  ...eventDetailExportFlags
3648
4279
  ],
@@ -3651,11 +4282,11 @@ var eventDetailExport = createAnalysisCapabilityCommand({
3651
4282
  });
3652
4283
 
3653
4284
  // src/commands/te-analysis/event-detail/index.ts
3654
- var commands33 = [
4285
+ var commands35 = [
3655
4286
  eventDetailRun,
3656
4287
  eventDetailExport
3657
4288
  ];
3658
- var event_detail_default = commands33;
4289
+ var event_detail_default = commands35;
3659
4290
 
3660
4291
  // src/commands/te-analysis/entity-detail/shared.ts
3661
4292
  var entityDetailDefinitionFlag = {
@@ -3664,6 +4295,12 @@ var entityDetailDefinitionFlag = {
3664
4295
  required: true,
3665
4296
  desc: 'Bounded entity detail definition. properties is supported only for entity="user" (#user_id); user rows always include #user_id, #account_id, and #distinct_id plus requested user properties. Custom entities reject properties and return only their entity value column. cohort is AI-facing for user_property/tag/cluster filters; do not pass raw QP.'
3666
4297
  };
4298
+ var entityDetailArtifactFormatFlag = {
4299
+ name: "artifact-format",
4300
+ type: "string",
4301
+ required: false,
4302
+ desc: "Native streaming artifact format: jsonl or csv. Default: jsonl."
4303
+ };
3667
4304
  function entityDetailRunInput(ctx) {
3668
4305
  return compactInput({
3669
4306
  project_id: ctx.num("project-id"),
@@ -3671,18 +4308,22 @@ function entityDetailRunInput(ctx) {
3671
4308
  request_id: optionalString(ctx, "request-id"),
3672
4309
  use_cache: optionalBoolean(ctx, "use-cache"),
3673
4310
  zone_offset: optionalNumber(ctx, "zone-offset"),
3674
- limit: optionalNumber(ctx, "limit"),
4311
+ preview_rows: optionalNumber(ctx, "preview-rows"),
3675
4312
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3676
4313
  });
3677
4314
  }
3678
4315
  function entityDetailExportInput(ctx) {
4316
+ const format = optionalString(ctx, "artifact-format");
4317
+ if (format !== void 0 && format !== "jsonl" && format !== "csv") {
4318
+ throw new Error("--artifact-format only supports jsonl or csv for entity detail export");
4319
+ }
3679
4320
  return compactInput({
3680
4321
  project_id: ctx.num("project-id"),
3681
4322
  definition: ctx.json("definition"),
3682
4323
  request_id: optionalString(ctx, "request-id"),
3683
4324
  use_cache: optionalBoolean(ctx, "use-cache"),
3684
4325
  zone_offset: optionalNumber(ctx, "zone-offset"),
3685
- format: optionalString(ctx, "artifact-format"),
4326
+ format,
3686
4327
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3687
4328
  });
3688
4329
  }
@@ -3695,7 +4336,7 @@ var entityDetailBaseFlags = [
3695
4336
  ];
3696
4337
  var entityDetailExportFlags = [
3697
4338
  ...entityDetailBaseFlags,
3698
- artifactFormatFlag,
4339
+ entityDetailArtifactFormatFlag,
3699
4340
  asyncTimeoutSecondsFlag
3700
4341
  ];
3701
4342
 
@@ -3707,12 +4348,11 @@ var entityDetailRun = createAnalysisCapabilityCommand({
3707
4348
  description: `Run a bounded entity detail query from a cluster cohort definition. ${analysisDataRunRoutingHelp}`,
3708
4349
  flags: [
3709
4350
  ...entityDetailBaseFlags,
3710
- detailPreviewLimitFlag,
4351
+ previewRowsFlag,
3711
4352
  syncTimeoutSecondsFlag
3712
4353
  ],
3713
4354
  risk: "read",
3714
- buildInput: entityDetailRunInput,
3715
- postProcess: applyAnalysisInlineLimit
4355
+ buildInput: entityDetailRunInput
3716
4356
  });
3717
4357
 
3718
4358
  // src/commands/te-analysis/entity-detail/export.ts
@@ -3720,7 +4360,8 @@ var entityDetailExport = createAnalysisCapabilityCommand({
3720
4360
  resource: "entity-detail",
3721
4361
  command: "export",
3722
4362
  capabilityId: "analysis.entity_detail.export",
3723
- description: "Export complete entity detail data as an asynchronous gzip artifact. The server reads backend pages internally; callers inspect and download one artifact without pagination.",
4363
+ asyncArtifact: true,
4364
+ description: "Export complete entity detail data through the native Trino JSONL or CSV stream as an asynchronous gzip artifact. Default: JSONL.",
3724
4365
  flags: [
3725
4366
  ...entityDetailExportFlags
3726
4367
  ],
@@ -3729,11 +4370,11 @@ var entityDetailExport = createAnalysisCapabilityCommand({
3729
4370
  });
3730
4371
 
3731
4372
  // src/commands/te-analysis/entity-detail/index.ts
3732
- var commands34 = [
4373
+ var commands36 = [
3733
4374
  entityDetailRun,
3734
4375
  entityDetailExport
3735
4376
  ];
3736
- var entity_detail_default = commands34;
4377
+ var entity_detail_default = commands36;
3737
4378
 
3738
4379
  // src/commands/te-analysis/drilldown-events/shared.ts
3739
4380
  var queryContextIdFlag = {
@@ -3750,7 +4391,7 @@ var drilldownEventsRunFlags = [
3750
4391
  propertiesFlag,
3751
4392
  requestIdFlag,
3752
4393
  useCacheFlag,
3753
- detailPreviewLimitFlag,
4394
+ previewRowsFlag,
3754
4395
  syncTimeoutSecondsFlag
3755
4396
  ];
3756
4397
  var csvArtifactFormatFlag = {
@@ -3779,7 +4420,7 @@ function drilldownEventsRunInput(ctx) {
3779
4420
  properties: optionalJson(ctx, "properties"),
3780
4421
  request_id: optionalString(ctx, "request-id"),
3781
4422
  use_cache: optionalBoolean(ctx, "use-cache"),
3782
- limit: optionalNumber(ctx, "limit"),
4423
+ preview_rows: optionalNumber(ctx, "preview-rows"),
3783
4424
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3784
4425
  });
3785
4426
  }
@@ -3802,6 +4443,7 @@ var drilldownEventsExport = createAnalysisCapabilityCommand({
3802
4443
  resource: "drilldown-events",
3803
4444
  command: "export",
3804
4445
  capabilityId: "analysis.query.drilldown_events_export",
4446
+ asyncArtifact: true,
3805
4447
  description: `Stream all raw events behind one synchronous event-analysis cell into one csv.gz artifact. ${analysisDataExportRoutingHelp}`,
3806
4448
  flags: [...drilldownEventsExportFlags],
3807
4449
  risk: "read",
@@ -3816,13 +4458,12 @@ var drilldownEventsRun = createAnalysisCapabilityCommand({
3816
4458
  description: `Preview raw events behind one synchronous event-analysis cell whose selected metric advertises drilldown_events. ${analysisDataRunRoutingHelp}`,
3817
4459
  flags: [...drilldownEventsRunFlags],
3818
4460
  risk: "read",
3819
- buildInput: drilldownEventsRunInput,
3820
- postProcess: applyAnalysisInlineLimit
4461
+ buildInput: drilldownEventsRunInput
3821
4462
  });
3822
4463
 
3823
4464
  // src/commands/te-analysis/drilldown-events/index.ts
3824
- var commands35 = [drilldownEventsRun, drilldownEventsExport];
3825
- var drilldown_events_default = commands35;
4465
+ var commands37 = [drilldownEventsRun, drilldownEventsExport];
4466
+ var drilldown_events_default = commands37;
3826
4467
 
3827
4468
  // src/commands/te-analysis/drilldown-entities/shared.ts
3828
4469
  var queryContextIdFlag2 = {
@@ -3848,7 +4489,7 @@ var drilldownEntitiesBaseFlags = [
3848
4489
  ];
3849
4490
  var drilldownEntitiesRunFlags = [
3850
4491
  ...drilldownEntitiesBaseFlags,
3851
- detailPreviewLimitFlag,
4492
+ previewRowsFlag,
3852
4493
  syncTimeoutSecondsFlag
3853
4494
  ];
3854
4495
  var drilldownEntitiesExportFlags = [
@@ -3859,7 +4500,7 @@ var drilldownEntitiesExportFlags = [
3859
4500
  function drilldownEntitiesRunInput(ctx) {
3860
4501
  return compactInput({
3861
4502
  ...baseInput(ctx),
3862
- limit: optionalNumber(ctx, "limit"),
4503
+ preview_rows: optionalNumber(ctx, "preview-rows"),
3863
4504
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3864
4505
  });
3865
4506
  }
@@ -3887,6 +4528,7 @@ var drilldownEntitiesExport = createAnalysisCapabilityCommand({
3887
4528
  resource: "drilldown-entities",
3888
4529
  command: "export",
3889
4530
  capabilityId: "analysis.query.drilldown_entities_export",
4531
+ asyncArtifact: true,
3890
4532
  description: `Stream all users or custom entities behind one synchronous-preview cell into one csv.gz artifact. ${analysisDataExportRoutingHelp}`,
3891
4533
  flags: [...drilldownEntitiesExportFlags],
3892
4534
  risk: "read",
@@ -3901,13 +4543,12 @@ var drilldownEntitiesRun = createAnalysisCapabilityCommand({
3901
4543
  description: `Preview users or custom entities behind one synchronous-preview cell whose metric advertises drilldown_entities. ${analysisDataRunRoutingHelp}`,
3902
4544
  flags: [...drilldownEntitiesRunFlags],
3903
4545
  risk: "read",
3904
- buildInput: drilldownEntitiesRunInput,
3905
- postProcess: applyAnalysisInlineLimit
4546
+ buildInput: drilldownEntitiesRunInput
3906
4547
  });
3907
4548
 
3908
4549
  // src/commands/te-analysis/drilldown-entities/index.ts
3909
- var commands36 = [drilldownEntitiesRun, drilldownEntitiesExport];
3910
- var drilldown_entities_default = commands36;
4550
+ var commands38 = [drilldownEntitiesRun, drilldownEntitiesExport];
4551
+ var drilldown_entities_default = commands38;
3911
4552
 
3912
4553
  // src/commands/te-analysis/drilldown-user-events/shared.ts
3913
4554
  var drilldownContextIdFlag = {
@@ -3946,7 +4587,7 @@ var drilldownUserEventsBaseFlags = [
3946
4587
  ];
3947
4588
  var drilldownUserEventsRunFlags = [
3948
4589
  ...drilldownUserEventsBaseFlags,
3949
- detailPreviewLimitFlag,
4590
+ previewRowsFlag,
3950
4591
  syncTimeoutSecondsFlag
3951
4592
  ];
3952
4593
  var drilldownUserEventsExportFlags = [
@@ -3957,7 +4598,7 @@ var drilldownUserEventsExportFlags = [
3957
4598
  function drilldownUserEventsRunInput(ctx) {
3958
4599
  return compactInput({
3959
4600
  ...baseInput2(ctx),
3960
- limit: optionalNumber(ctx, "limit"),
4601
+ preview_rows: optionalNumber(ctx, "preview-rows"),
3961
4602
  timeout_seconds: optionalNumber(ctx, "timeout-seconds")
3962
4603
  });
3963
4604
  }
@@ -3989,6 +4630,7 @@ var drilldownUserEventsExport = createAnalysisCapabilityCommand({
3989
4630
  resource: "drilldown-user-events",
3990
4631
  command: "export",
3991
4632
  capabilityId: "analysis.query.drilldown_user_events_export",
4633
+ asyncArtifact: true,
3992
4634
  description: `Stream one user's complete event sequence from a drilldown context into one csv.gz artifact. ${analysisDataExportRoutingHelp}`,
3993
4635
  flags: [...drilldownUserEventsExportFlags],
3994
4636
  risk: "read",
@@ -4003,13 +4645,12 @@ var drilldownUserEventsRun = createAnalysisCapabilityCommand({
4003
4645
  description: `Preview one user's event sequence from a drilldown context. Do not pass raw QP. ${analysisDataRunRoutingHelp}`,
4004
4646
  flags: [...drilldownUserEventsRunFlags],
4005
4647
  risk: "read",
4006
- buildInput: drilldownUserEventsRunInput,
4007
- postProcess: applyAnalysisInlineLimit
4648
+ buildInput: drilldownUserEventsRunInput
4008
4649
  });
4009
4650
 
4010
4651
  // src/commands/te-analysis/drilldown-user-events/index.ts
4011
- var commands37 = [drilldownUserEventsRun, drilldownUserEventsExport];
4012
- var drilldown_user_events_default = commands37;
4652
+ var commands39 = [drilldownUserEventsRun, drilldownUserEventsExport];
4653
+ var drilldown_user_events_default = commands39;
4013
4654
 
4014
4655
  // src/commands/te-analysis/user/index.ts
4015
4656
  import { existsSync, statSync } from "fs";
@@ -4035,6 +4676,12 @@ var clusterMemberFieldsFlag = {
4035
4676
  ...fieldsFlag,
4036
4677
  desc: "Optional result fields. Defaults to #user_id, #account_id, and #distinct_id."
4037
4678
  };
4679
+ var memberPreviewRowsFlag = {
4680
+ ...previewRowsFlag,
4681
+ max: 1e5,
4682
+ desc: "Maximum business rows returned per result. Default: 1000, matching the UI member query. Maximum: 100000."
4683
+ };
4684
+ var memberDataRunRoutingHelp = "Routing: --preview-rows bounds returned business rows per result; omitting it defaults to 1000 rows, matching the UI member query. Use export for full, unknown-size, timed-out, or long-running data.";
4038
4685
  var clusterNameFlag = {
4039
4686
  name: "cluster-name",
4040
4687
  type: "string",
@@ -4171,7 +4818,13 @@ var jsonlArtifactFormatFlag = {
4171
4818
  name: "artifact-format",
4172
4819
  type: "string",
4173
4820
  required: false,
4174
- desc: "Artifact format. Only jsonl is supported for user member/history-tag exports."
4821
+ desc: "Artifact format. Only jsonl is supported for history-tag statistics exports."
4822
+ };
4823
+ var memberArtifactFormatFlag = {
4824
+ name: "artifact-format",
4825
+ type: "string",
4826
+ required: false,
4827
+ desc: "Artifact format: jsonl or csv. Default: jsonl. Both formats use native full-download streaming and gzip compression."
4175
4828
  };
4176
4829
  var confirmedFlag = {
4177
4830
  name: "confirmed",
@@ -4197,7 +4850,7 @@ var groupColFlag = {
4197
4850
  required: true,
4198
4851
  desc: "Exact statistic value or bucket from history-tag-data results to drill down into."
4199
4852
  };
4200
- function capability(resource, command, capabilityId, description, flags, risk, buildInput2) {
4853
+ function capability(resource, command, capabilityId, description, flags, risk, buildInput2, options = {}) {
4201
4854
  return createAnalysisCapabilityCommand({
4202
4855
  resource,
4203
4856
  command,
@@ -4205,7 +4858,8 @@ function capability(resource, command, capabilityId, description, flags, risk, b
4205
4858
  description,
4206
4859
  flags,
4207
4860
  risk,
4208
- buildInput: buildInput2
4861
+ buildInput: buildInput2,
4862
+ ...options
4209
4863
  });
4210
4864
  }
4211
4865
  function idImportCapability(command) {
@@ -4292,13 +4946,21 @@ function uploadedInputFileId(value) {
4292
4946
  function assetListInput(ctx) {
4293
4947
  return compactInput({
4294
4948
  project_id: ctx.num("project-id"),
4295
- query: optionalString(ctx, "query"),
4949
+ queries: optionalQueries(ctx),
4296
4950
  fields: optionalJsonArray(ctx, "fields"),
4297
4951
  limit: optionalNumber(ctx, "limit"),
4298
4952
  offset: optionalNumber(ctx, "offset"),
4299
4953
  authenticated_only: optionalBoolean(ctx, "authenticated-only")
4300
4954
  });
4301
4955
  }
4956
+ function assetExportInput(ctx) {
4957
+ return compactInput({
4958
+ project_id: ctx.num("project-id"),
4959
+ queries: optionalQueries(ctx),
4960
+ fields: optionalJsonArray(ctx, "fields"),
4961
+ authenticated_only: optionalBoolean(ctx, "authenticated-only")
4962
+ });
4963
+ }
4302
4964
  function memberInput(ctx, kind, inline) {
4303
4965
  return compactInput({
4304
4966
  project_id: ctx.num("project-id"),
@@ -4306,13 +4968,13 @@ function memberInput(ctx, kind, inline) {
4306
4968
  tag_name: kind === "tag" ? ctx.str("tag-name") : void 0,
4307
4969
  snapshot_date: kind === "tag" ? optionalString(ctx, "snapshot-date") : void 0,
4308
4970
  property_names: optionalJsonArray(ctx, "property-names"),
4309
- fields: optionalJsonArray(ctx, "fields"),
4310
- query: optionalString(ctx, "query"),
4311
- use_cache: optionalBoolean(ctx, "use-cache"),
4971
+ fields: inline ? optionalJsonArray(ctx, "fields") : void 0,
4972
+ query: inline ? optionalString(ctx, "query") : void 0,
4973
+ use_cache: inline ? optionalBoolean(ctx, "use-cache") : void 0,
4974
+ preview_rows: inline ? optionalNumber(ctx, "preview-rows") : void 0,
4312
4975
  request_id: optionalString(ctx, "request-id"),
4313
4976
  timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
4314
- limit: inline ? optionalNumber(ctx, "limit") : void 0,
4315
- format: inline ? void 0 : optionalJsonlFormat(ctx)
4977
+ format: inline ? void 0 : optionalMemberFormat(ctx)
4316
4978
  });
4317
4979
  }
4318
4980
  function clusterWriteInput(ctx, create) {
@@ -4377,9 +5039,9 @@ function historyTagDataInput(ctx, inline) {
4377
5039
  project_id: ctx.num("project-id"),
4378
5040
  tag_name: ctx.str("tag-name"),
4379
5041
  view: ctx.json("view"),
5042
+ preview_rows: inline ? optionalNumber(ctx, "preview-rows") : void 0,
4380
5043
  request_id: optionalString(ctx, "request-id"),
4381
5044
  timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
4382
- limit: inline ? optionalNumber(ctx, "limit") : void 0,
4383
5045
  format: inline ? void 0 : optionalJsonlFormat(ctx)
4384
5046
  });
4385
5047
  }
@@ -4391,13 +5053,13 @@ function historyTagDataDrilldownInput(ctx, inline) {
4391
5053
  group_col: ctx.str("group-col"),
4392
5054
  view: ctx.json("view"),
4393
5055
  property_names: optionalJsonArray(ctx, "property-names"),
4394
- fields: optionalJsonArray(ctx, "fields"),
4395
- query: optionalString(ctx, "query"),
4396
- use_cache: optionalBoolean(ctx, "use-cache"),
5056
+ fields: inline ? optionalJsonArray(ctx, "fields") : void 0,
5057
+ query: inline ? optionalString(ctx, "query") : void 0,
5058
+ use_cache: inline ? optionalBoolean(ctx, "use-cache") : void 0,
5059
+ preview_rows: inline ? optionalNumber(ctx, "preview-rows") : void 0,
4397
5060
  request_id: optionalString(ctx, "request-id"),
4398
5061
  timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
4399
- limit: inline ? optionalNumber(ctx, "limit") : void 0,
4400
- format: inline ? void 0 : optionalJsonlFormat(ctx)
5062
+ format: inline ? void 0 : optionalMemberFormat(ctx)
4401
5063
  });
4402
5064
  }
4403
5065
  function optionalJsonlFormat(ctx) {
@@ -4407,30 +5069,86 @@ function optionalJsonlFormat(ctx) {
4407
5069
  }
4408
5070
  return format;
4409
5071
  }
4410
- var listFlags = [projectIdFlag, queryFlag, fieldsFlag, directoryLimitFlag, offsetFlag, authenticatedOnlyFlag];
4411
- var tagListFlags = [projectIdFlag, queryFlag, tagListFieldsFlag, directoryLimitFlag, offsetFlag, authenticatedOnlyFlag];
5072
+ function optionalMemberFormat(ctx) {
5073
+ const format = optionalString(ctx, "artifact-format");
5074
+ if (format !== void 0 && format !== "jsonl" && format !== "csv") {
5075
+ throw new Error("--artifact-format only supports jsonl or csv for member full-download exports");
5076
+ }
5077
+ return format;
5078
+ }
5079
+ var listFlags = [
5080
+ projectIdFlag,
5081
+ queriesFlag,
5082
+ fieldsFlag,
5083
+ directoryLimitFlag,
5084
+ directoryOffsetFlag,
5085
+ authenticatedOnlyFlag
5086
+ ];
5087
+ var tagListFlags = [
5088
+ projectIdFlag,
5089
+ queriesFlag,
5090
+ tagListFieldsFlag,
5091
+ directoryLimitFlag,
5092
+ directoryOffsetFlag,
5093
+ authenticatedOnlyFlag
5094
+ ];
5095
+ var exportFlags = [
5096
+ projectIdFlag,
5097
+ queriesFlag,
5098
+ fieldsFlag,
5099
+ authenticatedOnlyFlag,
5100
+ catalogExportOutputFlag
5101
+ ];
5102
+ var tagExportFlags = [
5103
+ projectIdFlag,
5104
+ queriesFlag,
5105
+ tagListFieldsFlag,
5106
+ authenticatedOnlyFlag,
5107
+ catalogExportOutputFlag
5108
+ ];
4412
5109
  var memberRunFlags = (memberFieldsFlag) => [
4413
5110
  projectIdFlag,
4414
5111
  propertyNamesFlag,
4415
5112
  memberFieldsFlag,
4416
5113
  queryFlag,
4417
5114
  { name: "use-cache", type: "boolean", required: false, desc: "Whether to use query cache. Default: true." },
5115
+ memberPreviewRowsFlag,
4418
5116
  requestIdFlag,
4419
- memberLimitFlag,
4420
5117
  syncTimeoutSecondsFlag
4421
5118
  ];
4422
- var memberExportFlags = (memberFieldsFlag) => [
5119
+ var memberExportFlags = [
4423
5120
  projectIdFlag,
4424
5121
  propertyNamesFlag,
4425
- memberFieldsFlag,
4426
- queryFlag,
4427
- { name: "use-cache", type: "boolean", required: false, desc: "Whether to use query cache. Default: true." },
4428
5122
  requestIdFlag,
4429
- jsonlArtifactFormatFlag,
5123
+ memberArtifactFormatFlag,
4430
5124
  asyncTimeoutSecondsFlag
4431
5125
  ];
4432
- var commands38 = [
4433
- capability("user-cluster", "list", "analysis.user_cluster.list", "List user clusters for discovery. Use offset only for stable asset browsing.", listFlags, "read", assetListInput),
5126
+ var commands40 = [
5127
+ capability(
5128
+ "user-cluster",
5129
+ "list",
5130
+ "analysis.user_cluster.list",
5131
+ "List user clusters with bounded discovery.",
5132
+ listFlags,
5133
+ "read",
5134
+ assetListInput,
5135
+ {
5136
+ validate: validateCatalogListFlags
5137
+ }
5138
+ ),
5139
+ capability(
5140
+ "user-cluster",
5141
+ "export",
5142
+ "analysis.user_cluster.export",
5143
+ "Export the complete matching user-cluster catalog to JSONL with an integrity sidecar.",
5144
+ exportFlags,
5145
+ "read",
5146
+ assetExportInput,
5147
+ {
5148
+ validate: validateCatalogExportFlags,
5149
+ postProcess: catalogExportPostProcess("cluster", "items")
5150
+ }
5151
+ ),
4434
5152
  capability("user-cluster", "get", "analysis.user_cluster.get", "Get user cluster details by exact cluster_name values.", [
4435
5153
  projectIdFlag,
4436
5154
  { name: "cluster-names", type: "json", required: true, desc: "JSON array of exact cluster_name values." }
@@ -4438,14 +5156,14 @@ var commands38 = [
4438
5156
  project_id: ctx.num("project-id"),
4439
5157
  cluster_names: ctx.json("cluster-names")
4440
5158
  })),
4441
- capability("user-cluster-member", "list", "analysis.user_cluster_member.list", `Run a bounded user cluster member query. ${analysisDataRunRoutingHelp}`, [
5159
+ capability("user-cluster-member", "list", "analysis.user_cluster_member.list", `Run a bounded user cluster member query. ${memberDataRunRoutingHelp}`, [
4442
5160
  clusterNameFlag,
4443
5161
  ...memberRunFlags(clusterMemberFieldsFlag)
4444
5162
  ], "read", (ctx) => memberInput(ctx, "cluster", true)),
4445
- capability("user-cluster-member", "export", "analysis.user_cluster_member.export", `Export user cluster members as a jsonl artifact. ${analysisDataExportRoutingHelp}`, [
5163
+ capability("user-cluster-member", "export", "analysis.user_cluster_member.export", `Stream the native full user-cluster download as a jsonl.gz or csv.gz artifact. ${analysisDataExportRoutingHelp}`, [
4446
5164
  clusterNameFlag,
4447
- ...memberExportFlags(clusterMemberFieldsFlag)
4448
- ], "read", (ctx) => memberInput(ctx, "cluster", false)),
5165
+ ...memberExportFlags
5166
+ ], "read", (ctx) => memberInput(ctx, "cluster", false), { asyncArtifact: true }),
4449
5167
  capability("user-cluster", "create", "analysis.user_cluster.create", "Create a condition or SQL user cluster directly from an AI-facing definition request.", [
4450
5168
  projectIdFlag,
4451
5169
  newClusterNameFlag,
@@ -4496,7 +5214,31 @@ var commands38 = [
4496
5214
  cluster_name: ctx.str("cluster-name"),
4497
5215
  confirmed: optionalBoolean(ctx, "confirmed")
4498
5216
  })),
4499
- capability("user-tag", "list", "analysis.user_tag.list", "List user tags for discovery. Returned identifiers use canonical tag_name. Use offset only for stable asset browsing.", tagListFlags, "read", assetListInput),
5217
+ capability(
5218
+ "user-tag",
5219
+ "list",
5220
+ "analysis.user_tag.list",
5221
+ "List user tags with bounded discovery. Returned identifiers use canonical tag_name.",
5222
+ tagListFlags,
5223
+ "read",
5224
+ assetListInput,
5225
+ {
5226
+ validate: validateCatalogListFlags
5227
+ }
5228
+ ),
5229
+ capability(
5230
+ "user-tag",
5231
+ "export",
5232
+ "analysis.user_tag.export",
5233
+ "Export the complete matching user-tag catalog to JSONL with an integrity sidecar.",
5234
+ tagExportFlags,
5235
+ "read",
5236
+ assetExportInput,
5237
+ {
5238
+ validate: validateCatalogExportFlags,
5239
+ postProcess: catalogExportPostProcess("tag", "items")
5240
+ }
5241
+ ),
4500
5242
  capability("user-tag", "get", "analysis.user_tag.get", "Get user tag details by exact tag_name values.", [
4501
5243
  projectIdFlag,
4502
5244
  { name: "tag-names", type: "json", required: true, desc: "JSON array of exact tag_name values." }
@@ -4504,16 +5246,16 @@ var commands38 = [
4504
5246
  project_id: ctx.num("project-id"),
4505
5247
  tag_names: ctx.json("tag-names")
4506
5248
  })),
4507
- capability("user-tag-member", "list", "analysis.user_tag_member.list", `Run a bounded user tag member query. ${analysisDataRunRoutingHelp}`, [
5249
+ capability("user-tag-member", "list", "analysis.user_tag_member.list", `Run a bounded user tag member query. ${memberDataRunRoutingHelp}`, [
4508
5250
  tagNameFlag,
4509
5251
  snapshotDateFlag,
4510
5252
  ...memberRunFlags(tagMemberFieldsFlag)
4511
5253
  ], "read", (ctx) => memberInput(ctx, "tag", true)),
4512
- capability("user-tag-member", "export", "analysis.user_tag_member.export", `Export user tag members as a jsonl artifact. ${analysisDataExportRoutingHelp}`, [
5254
+ capability("user-tag-member", "export", "analysis.user_tag_member.export", `Stream the native full user-tag download as a jsonl.gz or csv.gz artifact. ${analysisDataExportRoutingHelp}`, [
4513
5255
  tagNameFlag,
4514
5256
  snapshotDateFlag,
4515
- ...memberExportFlags(tagMemberFieldsFlag)
4516
- ], "read", (ctx) => memberInput(ctx, "tag", false)),
5257
+ ...memberExportFlags
5258
+ ], "read", (ctx) => memberInput(ctx, "tag", false), { asyncArtifact: true }),
4517
5259
  capability("user-tag", "create", "analysis.user_tag.create", "Create a user tag directly from an AI-facing definition request.", [
4518
5260
  projectIdFlag,
4519
5261
  newTagNameFlag,
@@ -4606,8 +5348,8 @@ var commands38 = [
4606
5348
  projectIdFlag,
4607
5349
  tagNameFlag,
4608
5350
  historyViewFlag,
5351
+ previewRowsFlag,
4609
5352
  requestIdFlag,
4610
- limitFlag,
4611
5353
  syncTimeoutSecondsFlag
4612
5354
  ], "read", (ctx) => historyTagDataInput(ctx, true)),
4613
5355
  capability("history-tag-data", "export", "analysis.history_tag_data.export", `Export history tag statistics as a jsonl artifact. ${analysisDataExportRoutingHelp}`, [
@@ -4617,7 +5359,7 @@ var commands38 = [
4617
5359
  requestIdFlag,
4618
5360
  jsonlArtifactFormatFlag,
4619
5361
  asyncTimeoutSecondsFlag
4620
- ], "read", (ctx) => historyTagDataInput(ctx, false)),
5362
+ ], "read", (ctx) => historyTagDataInput(ctx, false), { asyncArtifact: true }),
4621
5363
  capability("history-tag-data-drilldown", "run", "analysis.history_tag_data_drilldown.run", `Run a bounded drilldown user query for one history tag statistic value. ${analysisDataRunRoutingHelp}`, [
4622
5364
  tagNameFlag,
4623
5365
  { ...snapshotDateFlag, required: true, desc: "History tag snapshot date, yyyy-MM-dd." },
@@ -4625,15 +5367,15 @@ var commands38 = [
4625
5367
  historyViewFlag,
4626
5368
  ...memberRunFlags(tagMemberFieldsFlag)
4627
5369
  ], "read", (ctx) => historyTagDataDrilldownInput(ctx, true)),
4628
- capability("history-tag-data-drilldown", "export", "analysis.history_tag_data_drilldown.export", `Export drilldown users for one history tag statistic value as a jsonl artifact. ${analysisDataExportRoutingHelp}`, [
5370
+ capability("history-tag-data-drilldown", "export", "analysis.history_tag_data_drilldown.export", `Stream the native full history-tag drilldown download as a jsonl.gz or csv.gz artifact. ${analysisDataExportRoutingHelp}`, [
4629
5371
  tagNameFlag,
4630
5372
  { ...snapshotDateFlag, required: true, desc: "History tag snapshot date, yyyy-MM-dd." },
4631
5373
  groupColFlag,
4632
5374
  historyViewFlag,
4633
- ...memberExportFlags(tagMemberFieldsFlag)
4634
- ], "read", (ctx) => historyTagDataDrilldownInput(ctx, false))
5375
+ ...memberExportFlags
5376
+ ], "read", (ctx) => historyTagDataDrilldownInput(ctx, false), { asyncArtifact: true })
4635
5377
  ];
4636
- var user_default = commands38;
5378
+ var user_default = commands40;
4637
5379
 
4638
5380
  // src/commands/te-analysis/query-cluster/list.ts
4639
5381
  var queryClusterList = createAnalysisCapabilityCommand({
@@ -4647,8 +5389,8 @@ var queryClusterList = createAnalysisCapabilityCommand({
4647
5389
  });
4648
5390
 
4649
5391
  // src/commands/te-analysis/query-cluster/index.ts
4650
- var commands39 = [queryClusterList];
4651
- var query_cluster_default = commands39;
5392
+ var commands41 = [queryClusterList];
5393
+ var query_cluster_default = commands41;
4652
5394
 
4653
5395
  // src/commands/te-analysis/sql-table/columns.ts
4654
5396
  var sqlTableColumns = createAnalysisCapabilityCommand({
@@ -4680,7 +5422,7 @@ var sqlTableList = createAnalysisCapabilityCommand({
4680
5422
  command: "list",
4681
5423
  capabilityId: "analysis.sql_table.list",
4682
5424
  description: "List server-authoritative SQL table references queryable by the current user in a project.",
4683
- flags: [projectIdFlag, queryFlag, directoryLimitFlag, offsetFlag, sqlTableUsageFlag],
5425
+ flags: [projectIdFlag, queryFlag, directoryLimitFlag, directoryOffsetFlag, sqlTableUsageFlag],
4684
5426
  risk: "read",
4685
5427
  buildInput: (ctx) => compactInput({
4686
5428
  project_id: ctx.num("project-id"),
@@ -4692,8 +5434,8 @@ var sqlTableList = createAnalysisCapabilityCommand({
4692
5434
  });
4693
5435
 
4694
5436
  // src/commands/te-analysis/sql-table/index.ts
4695
- var commands40 = [sqlTableList, sqlTableColumns];
4696
- var sql_table_default = commands40;
5437
+ var commands42 = [sqlTableList, sqlTableColumns];
5438
+ var sql_table_default = commands42;
4697
5439
 
4698
5440
  // src/commands/te-analysis/entity/id-import-options.ts
4699
5441
  var entityIdImportOptions = createAnalysisCapabilityCommand({
@@ -4718,8 +5460,8 @@ var entityIdImportOptions = createAnalysisCapabilityCommand({
4718
5460
  });
4719
5461
 
4720
5462
  // src/commands/te-analysis/entity/index.ts
4721
- var commands41 = [entityIdImportOptions];
4722
- var entity_default = commands41;
5463
+ var commands43 = [entityIdImportOptions];
5464
+ var entity_default = commands43;
4723
5465
 
4724
5466
  // src/commands/te-analysis/input-file/inspect.ts
4725
5467
  var inputFileInspect = {
@@ -4802,8 +5544,8 @@ var inputFileUpload = {
4802
5544
  };
4803
5545
 
4804
5546
  // src/commands/te-analysis/input-file/index.ts
4805
- var commands42 = [inputFileUpload, inputFileInspect, inputFilePurposeList];
4806
- var input_file_default = commands42;
5547
+ var commands44 = [inputFileUpload, inputFileInspect, inputFilePurposeList];
5548
+ var input_file_default = commands44;
4807
5549
 
4808
5550
  // src/commands/te-analysis/project/access-detail/get.ts
4809
5551
  var projectAccessDetailGet = createAnalysisCapabilityCommand({
@@ -4821,10 +5563,10 @@ var projectAccessDetailGet = createAnalysisCapabilityCommand({
4821
5563
  });
4822
5564
 
4823
5565
  // src/commands/te-analysis/project/access-detail/index.ts
4824
- var commands43 = [
5566
+ var commands45 = [
4825
5567
  projectAccessDetailGet
4826
5568
  ];
4827
- var access_detail_default = commands43;
5569
+ var access_detail_default = commands45;
4828
5570
 
4829
5571
  // src/commands/te-analysis/project/data-power/delete.ts
4830
5572
  var projectDataPowerDelete = createAnalysisCapabilityCommand({
@@ -4896,13 +5638,13 @@ var projectDataPowerUpsert = createAnalysisCapabilityCommand({
4896
5638
  });
4897
5639
 
4898
5640
  // src/commands/te-analysis/project/data-power/index.ts
4899
- var commands44 = [
5641
+ var commands46 = [
4900
5642
  projectDataPowerDelete,
4901
5643
  projectDataPowerGet,
4902
5644
  projectDataPowerList,
4903
5645
  projectDataPowerUpsert
4904
5646
  ];
4905
- var data_power_default = commands44;
5647
+ var data_power_default = commands46;
4906
5648
 
4907
5649
  // src/commands/te-analysis/project/entity/create.ts
4908
5650
  var projectEntityCreate = createAnalysisCapabilityCommand({
@@ -5013,14 +5755,14 @@ var projectEntityUpdate = createAnalysisCapabilityCommand({
5013
5755
  });
5014
5756
 
5015
5757
  // src/commands/te-analysis/project/entity/index.ts
5016
- var commands45 = [
5758
+ var commands47 = [
5017
5759
  projectEntityCreate,
5018
5760
  projectEntityDelete,
5019
5761
  projectEntityGet,
5020
5762
  projectEntityList,
5021
5763
  projectEntityUpdate
5022
5764
  ];
5023
- var entity_default2 = commands45;
5765
+ var entity_default2 = commands47;
5024
5766
 
5025
5767
  // src/commands/te-analysis/project/entity-event/list.ts
5026
5768
  var projectEntityEventList = createAnalysisCapabilityCommand({
@@ -5040,10 +5782,10 @@ var projectEntityEventList = createAnalysisCapabilityCommand({
5040
5782
  });
5041
5783
 
5042
5784
  // src/commands/te-analysis/project/entity-event/index.ts
5043
- var commands46 = [
5785
+ var commands48 = [
5044
5786
  projectEntityEventList
5045
5787
  ];
5046
- var entity_event_default = commands46;
5788
+ var entity_event_default = commands48;
5047
5789
 
5048
5790
  // src/commands/te-analysis/project/function/list.ts
5049
5791
  var projectFunctionList = createAnalysisCapabilityCommand({
@@ -5063,10 +5805,10 @@ var projectFunctionList = createAnalysisCapabilityCommand({
5063
5805
  });
5064
5806
 
5065
5807
  // src/commands/te-analysis/project/function/index.ts
5066
- var commands47 = [
5808
+ var commands49 = [
5067
5809
  projectFunctionList
5068
5810
  ];
5069
- var function_default = commands47;
5811
+ var function_default = commands49;
5070
5812
 
5071
5813
  // src/commands/te-analysis/project/info/create.ts
5072
5814
  var projectInfoCreate = createAnalysisCapabilityCommand({
@@ -5161,14 +5903,14 @@ var projectInfoUpdate = createAnalysisCapabilityCommand({
5161
5903
  });
5162
5904
 
5163
5905
  // src/commands/te-analysis/project/info/index.ts
5164
- var commands48 = [
5906
+ var commands50 = [
5165
5907
  projectInfoCreate,
5166
5908
  projectInfoDelete,
5167
5909
  projectInfoGet,
5168
5910
  projectInfoList,
5169
5911
  projectInfoUpdate
5170
5912
  ];
5171
- var info_default = commands48;
5913
+ var info_default = commands50;
5172
5914
 
5173
5915
  // src/commands/te-analysis/project/mark-time/create.ts
5174
5916
  var projectMarkTimeCreate = createAnalysisCapabilityCommand({
@@ -5262,13 +6004,13 @@ var projectMarkTimeUpdate = createAnalysisCapabilityCommand({
5262
6004
  });
5263
6005
 
5264
6006
  // src/commands/te-analysis/project/mark-time/index.ts
5265
- var commands49 = [
6007
+ var commands51 = [
5266
6008
  projectMarkTimeCreate,
5267
6009
  projectMarkTimeDelete,
5268
6010
  projectMarkTimeList,
5269
6011
  projectMarkTimeUpdate
5270
6012
  ];
5271
- var mark_time_default = commands49;
6013
+ var mark_time_default = commands51;
5272
6014
 
5273
6015
  // src/commands/te-analysis/project/member/add.ts
5274
6016
  var projectMemberAdd = createAnalysisCapabilityCommand({
@@ -5379,7 +6121,7 @@ var projectMemberUpdate = createAnalysisCapabilityCommand({
5379
6121
  });
5380
6122
 
5381
6123
  // src/commands/te-analysis/project/member/index.ts
5382
- var commands50 = [
6124
+ var commands52 = [
5383
6125
  projectMemberAdd,
5384
6126
  projectMemberBatchUpdate,
5385
6127
  projectMemberImport,
@@ -5387,7 +6129,7 @@ var commands50 = [
5387
6129
  projectMemberRemove,
5388
6130
  projectMemberUpdate
5389
6131
  ];
5390
- var member_default = commands50;
6132
+ var member_default = commands52;
5391
6133
 
5392
6134
  // src/commands/te-analysis/project/member-candidate/list.ts
5393
6135
  var projectMemberCandidateList = createAnalysisCapabilityCommand({
@@ -5409,16 +6151,17 @@ var projectMemberCandidateList = createAnalysisCapabilityCommand({
5409
6151
  });
5410
6152
 
5411
6153
  // src/commands/te-analysis/project/member-candidate/index.ts
5412
- var commands51 = [
6154
+ var commands53 = [
5413
6155
  projectMemberCandidateList
5414
6156
  ];
5415
- var member_candidate_default = commands51;
6157
+ var member_candidate_default = commands53;
5416
6158
 
5417
6159
  // src/commands/te-analysis/project/member-handover/export.ts
5418
6160
  var projectMemberHandoverExport = createAnalysisCapabilityCommand({
5419
6161
  resource: "project member-handover",
5420
6162
  command: "export",
5421
6163
  capabilityId: "project.member_handover.export",
6164
+ asyncArtifact: true,
5422
6165
  description: "Run batch project member asset handover and export the generated detail file as a CLI artifact.",
5423
6166
  flags: [
5424
6167
  projectIdFlag,
@@ -5452,11 +6195,11 @@ var projectMemberHandoverRun = createAnalysisCapabilityCommand({
5452
6195
  });
5453
6196
 
5454
6197
  // src/commands/te-analysis/project/member-handover/index.ts
5455
- var commands52 = [
6198
+ var commands54 = [
5456
6199
  projectMemberHandoverExport,
5457
6200
  projectMemberHandoverRun
5458
6201
  ];
5459
- var member_handover_default = commands52;
6202
+ var member_handover_default = commands54;
5460
6203
 
5461
6204
  // src/commands/te-analysis/project/member-receiver/list.ts
5462
6205
  var projectMemberReceiverList = createAnalysisCapabilityCommand({
@@ -5474,10 +6217,10 @@ var projectMemberReceiverList = createAnalysisCapabilityCommand({
5474
6217
  });
5475
6218
 
5476
6219
  // src/commands/te-analysis/project/member-receiver/index.ts
5477
- var commands53 = [
6220
+ var commands55 = [
5478
6221
  projectMemberReceiverList
5479
6222
  ];
5480
- var member_receiver_default = commands53;
6223
+ var member_receiver_default = commands55;
5481
6224
 
5482
6225
  // src/commands/te-analysis/project/owner/update.ts
5483
6226
  var projectOwnerUpdate = createAnalysisCapabilityCommand({
@@ -5503,10 +6246,10 @@ var projectOwnerUpdate = createAnalysisCapabilityCommand({
5503
6246
  });
5504
6247
 
5505
6248
  // src/commands/te-analysis/project/owner/index.ts
5506
- var commands54 = [
6249
+ var commands56 = [
5507
6250
  projectOwnerUpdate
5508
6251
  ];
5509
- var owner_default = commands54;
6252
+ var owner_default = commands56;
5510
6253
 
5511
6254
  // src/commands/te-analysis/project/permission-binding/list.ts
5512
6255
  var projectPermissionBindingList = createAnalysisCapabilityCommand({
@@ -5528,10 +6271,10 @@ var projectPermissionBindingList = createAnalysisCapabilityCommand({
5528
6271
  });
5529
6272
 
5530
6273
  // src/commands/te-analysis/project/permission-binding/index.ts
5531
- var commands55 = [
6274
+ var commands57 = [
5532
6275
  projectPermissionBindingList
5533
6276
  ];
5534
- var permission_binding_default = commands55;
6277
+ var permission_binding_default = commands57;
5535
6278
 
5536
6279
  // src/commands/te-analysis/project/receive-status/update.ts
5537
6280
  var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
@@ -5552,10 +6295,10 @@ var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
5552
6295
  });
5553
6296
 
5554
6297
  // src/commands/te-analysis/project/receive-status/index.ts
5555
- var commands56 = [
6298
+ var commands58 = [
5556
6299
  projectReceiveStatusUpdate
5557
6300
  ];
5558
- var receive_status_default = commands56;
6301
+ var receive_status_default = commands58;
5559
6302
 
5560
6303
  // src/commands/te-analysis/project/role/delete.ts
5561
6304
  var projectRoleDelete = createAnalysisCapabilityCommand({
@@ -5631,13 +6374,13 @@ var projectRoleUpsert = createAnalysisCapabilityCommand({
5631
6374
  });
5632
6375
 
5633
6376
  // src/commands/te-analysis/project/role/index.ts
5634
- var commands57 = [
6377
+ var commands59 = [
5635
6378
  projectRoleDelete,
5636
6379
  projectRoleGet,
5637
6380
  projectRoleList,
5638
6381
  projectRoleUpsert
5639
6382
  ];
5640
- var role_default = commands57;
6383
+ var role_default = commands59;
5641
6384
 
5642
6385
  // src/commands/te-analysis/project/role-function/list.ts
5643
6386
  var projectRoleFunctionList = createAnalysisCapabilityCommand({
@@ -5663,10 +6406,10 @@ var projectRoleFunctionList = createAnalysisCapabilityCommand({
5663
6406
  });
5664
6407
 
5665
6408
  // src/commands/te-analysis/project/role-function/index.ts
5666
- var commands58 = [
6409
+ var commands60 = [
5667
6410
  projectRoleFunctionList
5668
6411
  ];
5669
- var role_function_default = commands58;
6412
+ var role_function_default = commands60;
5670
6413
 
5671
6414
  // src/commands/te-analysis/project/role-user/list.ts
5672
6415
  var projectRoleUserList = createAnalysisCapabilityCommand({
@@ -5686,10 +6429,10 @@ var projectRoleUserList = createAnalysisCapabilityCommand({
5686
6429
  });
5687
6430
 
5688
6431
  // src/commands/te-analysis/project/role-user/index.ts
5689
- var commands59 = [
6432
+ var commands61 = [
5690
6433
  projectRoleUserList
5691
6434
  ];
5692
- var role_user_default = commands59;
6435
+ var role_user_default = commands61;
5693
6436
 
5694
6437
  // src/commands/te-analysis/project/timezone/get.ts
5695
6438
  var projectTimezoneGet = createAnalysisCapabilityCommand({
@@ -5741,12 +6484,12 @@ var projectTimezoneUpdate = createAnalysisCapabilityCommand({
5741
6484
  });
5742
6485
 
5743
6486
  // src/commands/te-analysis/project/timezone/index.ts
5744
- var commands60 = [
6487
+ var commands62 = [
5745
6488
  projectTimezoneGet,
5746
6489
  projectTimezoneOverview,
5747
6490
  projectTimezoneUpdate
5748
6491
  ];
5749
- var timezone_default = commands60;
6492
+ var timezone_default = commands62;
5750
6493
 
5751
6494
  // src/commands/te-analysis/project/user-id-items/update.ts
5752
6495
  var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
@@ -5766,13 +6509,13 @@ var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
5766
6509
  });
5767
6510
 
5768
6511
  // src/commands/te-analysis/project/user-id-items/index.ts
5769
- var commands61 = [
6512
+ var commands63 = [
5770
6513
  projectUserIdItemsUpdate
5771
6514
  ];
5772
- var user_id_items_default = commands61;
6515
+ var user_id_items_default = commands63;
5773
6516
 
5774
6517
  // src/commands/te-analysis/project/index.ts
5775
- var commands62 = [
6518
+ var commands64 = [
5776
6519
  ...access_detail_default,
5777
6520
  ...data_power_default,
5778
6521
  ...entity_default2,
@@ -5793,15 +6536,17 @@ var commands62 = [
5793
6536
  ...timezone_default,
5794
6537
  ...user_id_items_default
5795
6538
  ];
5796
- var project_default = commands62;
6539
+ var project_default = commands64;
5797
6540
 
5798
6541
  // src/commands/te-analysis/tracking/shared.ts
5799
6542
  function createTrackingCapabilityCommand(config) {
5800
- return createCapabilityCommand({
5801
- ...config,
6543
+ const { asyncArtifact, ...coreConfig } = config;
6544
+ const command = createCapabilityCommand({
6545
+ ...coreConfig,
5802
6546
  cliService: "tracking",
5803
6547
  gatewayDomain: "analysis"
5804
6548
  });
6549
+ return asyncArtifact ? withAsyncArtifactLifecycle(command) : command;
5805
6550
  }
5806
6551
  var eventsFlag = {
5807
6552
  name: "events",
@@ -6044,6 +6789,7 @@ var trackingPlanExport = createTrackingCapabilityCommand({
6044
6789
  resource: "plan",
6045
6790
  command: "export",
6046
6791
  capabilityId: "tracking.plan.export",
6792
+ asyncArtifact: true,
6047
6793
  description: "Export the tracking plan as an artifact.",
6048
6794
  flags: [projectIdFlag, requestIdFlag, asyncTimeoutSecondsFlag],
6049
6795
  risk: "read",
@@ -6321,6 +7067,7 @@ var LIST_CAPABILITIES = {
6321
7067
  };
6322
7068
  var EDIT_CAPABILITY = "metadata.super_metadata.batch_edit";
6323
7069
  var MAX_BATCH_SIZE = 200;
7070
+ var DIRECTORY_PAGE_SIZE = 200;
6324
7071
  var trackingPlanSyncDisplayNames = {
6325
7072
  service: "tracking",
6326
7073
  resource: "plan",
@@ -6376,40 +7123,40 @@ var trackingPlanSyncDisplayNames = {
6376
7123
  const draftPath = ctx.str("draft");
6377
7124
  const draft = await readDraft(draftPath);
6378
7125
  const [eventResult, eventPropertyResult, userPropertyResult] = await Promise.all([
6379
- executeCapability(
7126
+ fetchAllDirectoryItems(
6380
7127
  ctx.host(),
6381
- GATEWAY_DOMAIN,
6382
7128
  LIST_CAPABILITIES.events,
6383
7129
  {
6384
7130
  project_id: projectId,
6385
7131
  fields: ["event_name", "event_desc"]
6386
- }
7132
+ },
7133
+ "events"
6387
7134
  ),
6388
- executeCapability(
7135
+ fetchAllDirectoryItems(
6389
7136
  ctx.host(),
6390
- GATEWAY_DOMAIN,
6391
7137
  LIST_CAPABILITIES.eventProperties,
6392
7138
  {
6393
7139
  project_id: projectId,
6394
7140
  table_type: "event",
6395
7141
  fields: ["prop_name", "prop_desc"]
6396
- }
7142
+ },
7143
+ "properties"
6397
7144
  ),
6398
- executeCapability(
7145
+ fetchAllDirectoryItems(
6399
7146
  ctx.host(),
6400
- GATEWAY_DOMAIN,
6401
7147
  LIST_CAPABILITIES.userProperties,
6402
7148
  {
6403
7149
  project_id: projectId,
6404
7150
  table_type: "user",
6405
7151
  fields: ["prop_name", "prop_desc"]
6406
- }
7152
+ },
7153
+ "properties"
6407
7154
  )
6408
7155
  ]);
6409
7156
  const plan = buildDisplayNameSyncPlan(draft, {
6410
- events: eventResult?.events,
6411
- eventProperties: eventPropertyResult?.properties,
6412
- userProperties: userPropertyResult?.properties
7157
+ events: eventResult,
7158
+ eventProperties: eventPropertyResult,
7159
+ userProperties: userPropertyResult
6413
7160
  });
6414
7161
  const updateResults = {};
6415
7162
  for (const group of Object.values(plan)) {
@@ -6447,6 +7194,35 @@ var trackingPlanSyncDisplayNames = {
6447
7194
  };
6448
7195
  }
6449
7196
  };
7197
+ async function fetchAllDirectoryItems(host, capabilityId, input, arrayField) {
7198
+ const items = [];
7199
+ let offset = 0;
7200
+ const visitedOffsets = /* @__PURE__ */ new Set();
7201
+ while (true) {
7202
+ if (visitedOffsets.has(offset)) {
7203
+ throw new Error(`${capabilityId} returned a repeated next_offset: ${offset}`);
7204
+ }
7205
+ visitedOffsets.add(offset);
7206
+ const result = await executeCapability(host, GATEWAY_DOMAIN, capabilityId, {
7207
+ ...input,
7208
+ limit: DIRECTORY_PAGE_SIZE,
7209
+ offset
7210
+ });
7211
+ const page = result?.[arrayField];
7212
+ if (!Array.isArray(page)) {
7213
+ throw new Error(`${capabilityId} response is missing ${arrayField}`);
7214
+ }
7215
+ items.push(...page);
7216
+ if (result?.has_more !== true) {
7217
+ return items;
7218
+ }
7219
+ const nextOffset = result?.next_offset;
7220
+ if (!Number.isInteger(nextOffset) || nextOffset <= offset) {
7221
+ throw new Error(`${capabilityId} returned an invalid next_offset: ${String(nextOffset)}`);
7222
+ }
7223
+ offset = nextOffset;
7224
+ }
7225
+ }
6450
7226
  async function readDraft(filePath) {
6451
7227
  let value;
6452
7228
  try {
@@ -6491,7 +7267,7 @@ function counts(plan, value) {
6491
7267
  }
6492
7268
 
6493
7269
  // src/commands/te-analysis/tracking/plan/index.ts
6494
- var commands63 = [
7270
+ var commands65 = [
6495
7271
  trackingPlanGet,
6496
7272
  trackingPlanSaveItems,
6497
7273
  trackingPlanDeleteItems,
@@ -6501,7 +7277,7 @@ var commands63 = [
6501
7277
  trackingPlanSyncFromMeta,
6502
7278
  trackingPlanSyncDisplayNames
6503
7279
  ];
6504
- var plan_default = commands63;
7280
+ var plan_default = commands65;
6505
7281
 
6506
7282
  // src/commands/te-analysis/tracking/sdk-sample/generate.ts
6507
7283
  var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
@@ -6515,10 +7291,10 @@ var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
6515
7291
  });
6516
7292
 
6517
7293
  // src/commands/te-analysis/tracking/sdk-sample/index.ts
6518
- var commands64 = [
7294
+ var commands66 = [
6519
7295
  trackingSdkSampleGenerate
6520
7296
  ];
6521
- var sdk_sample_default = commands64;
7297
+ var sdk_sample_default = commands66;
6522
7298
 
6523
7299
  // src/commands/te-analysis/tracking/plan-change-log/list.ts
6524
7300
  var trackingPlanChangeLogList = createTrackingCapabilityCommand({
@@ -6536,6 +7312,7 @@ var trackingPlanChangeLogExport = createTrackingCapabilityCommand({
6536
7312
  resource: "plan-change-log",
6537
7313
  command: "export",
6538
7314
  capabilityId: "tracking.plan_change_log.export",
7315
+ asyncArtifact: true,
6539
7316
  description: "Export one tracking plan change log.",
6540
7317
  flags: [projectIdFlag, logIdFlag, requestIdFlag, asyncTimeoutSecondsFlag],
6541
7318
  risk: "read",
@@ -6543,11 +7320,11 @@ var trackingPlanChangeLogExport = createTrackingCapabilityCommand({
6543
7320
  });
6544
7321
 
6545
7322
  // src/commands/te-analysis/tracking/plan-change-log/index.ts
6546
- var commands65 = [
7323
+ var commands67 = [
6547
7324
  trackingPlanChangeLogList,
6548
7325
  trackingPlanChangeLogExport
6549
7326
  ];
6550
- var plan_change_log_default = commands65;
7327
+ var plan_change_log_default = commands67;
6551
7328
 
6552
7329
  // src/commands/te-analysis/tracking/check/run.ts
6553
7330
  var trackingCheckRun = createTrackingCapabilityCommand({
@@ -6613,6 +7390,7 @@ var trackingCheckExport = createTrackingCapabilityCommand({
6613
7390
  resource: "check",
6614
7391
  command: "export",
6615
7392
  capabilityId: "tracking.check.export",
7393
+ asyncArtifact: true,
6616
7394
  description: "Export one tracking validation result.",
6617
7395
  flags: [projectIdFlag, uuidFlag, requestIdFlag, asyncTimeoutSecondsFlag],
6618
7396
  risk: "read",
@@ -6620,7 +7398,7 @@ var trackingCheckExport = createTrackingCapabilityCommand({
6620
7398
  });
6621
7399
 
6622
7400
  // src/commands/te-analysis/tracking/check/index.ts
6623
- var commands66 = [
7401
+ var commands68 = [
6624
7402
  trackingCheckRun,
6625
7403
  trackingCheckList,
6626
7404
  trackingCheckGet,
@@ -6628,7 +7406,7 @@ var commands66 = [
6628
7406
  trackingCheckDelete,
6629
7407
  trackingCheckExport
6630
7408
  ];
6631
- var check_default = commands66;
7409
+ var check_default = commands68;
6632
7410
 
6633
7411
  // src/commands/te-analysis/tracking/ingest/summary.ts
6634
7412
  var trackingIngestSummary = createTrackingCapabilityCommand({
@@ -6642,10 +7420,10 @@ var trackingIngestSummary = createTrackingCapabilityCommand({
6642
7420
  });
6643
7421
 
6644
7422
  // src/commands/te-analysis/tracking/ingest/index.ts
6645
- var commands67 = [
7423
+ var commands69 = [
6646
7424
  trackingIngestSummary
6647
7425
  ];
6648
- var ingest_default = commands67;
7426
+ var ingest_default = commands69;
6649
7427
 
6650
7428
  // src/commands/te-analysis/tracking/ingest-error/list.ts
6651
7429
  var trackingIngestErrorList = createTrackingCapabilityCommand({
@@ -6659,10 +7437,10 @@ var trackingIngestErrorList = createTrackingCapabilityCommand({
6659
7437
  });
6660
7438
 
6661
7439
  // src/commands/te-analysis/tracking/ingest-error/index.ts
6662
- var commands68 = [
7440
+ var commands70 = [
6663
7441
  trackingIngestErrorList
6664
7442
  ];
6665
- var ingest_error_default = commands68;
7443
+ var ingest_error_default = commands70;
6666
7444
 
6667
7445
  // src/commands/te-analysis/tracking/live-data/list.ts
6668
7446
  var trackingLiveDataList = createTrackingCapabilityCommand({
@@ -6680,6 +7458,7 @@ var trackingLiveDataExport = createTrackingCapabilityCommand({
6680
7458
  resource: "live-data",
6681
7459
  command: "export",
6682
7460
  capabilityId: "tracking.live_data.export",
7461
+ asyncArtifact: true,
6683
7462
  description: "Export recent tracking live data.",
6684
7463
  flags: [projectIdFlag, dataTypeFlag, requestIdFlag, asyncTimeoutSecondsFlag],
6685
7464
  risk: "read",
@@ -6687,11 +7466,11 @@ var trackingLiveDataExport = createTrackingCapabilityCommand({
6687
7466
  });
6688
7467
 
6689
7468
  // src/commands/te-analysis/tracking/live-data/index.ts
6690
- var commands69 = [
7469
+ var commands71 = [
6691
7470
  trackingLiveDataList,
6692
7471
  trackingLiveDataExport
6693
7472
  ];
6694
- var live_data_default = commands69;
7473
+ var live_data_default = commands71;
6695
7474
 
6696
7475
  // src/commands/te-analysis/tracking/event-blacklist/list.ts
6697
7476
  var trackingEventBlacklistList = createTrackingCapabilityCommand({
@@ -6727,12 +7506,12 @@ var trackingEventBlacklistUpdate = createTrackingCapabilityCommand({
6727
7506
  });
6728
7507
 
6729
7508
  // src/commands/te-analysis/tracking/event-blacklist/index.ts
6730
- var commands70 = [
7509
+ var commands72 = [
6731
7510
  trackingEventBlacklistList,
6732
7511
  trackingEventBlacklistAdd,
6733
7512
  trackingEventBlacklistUpdate
6734
7513
  ];
6735
- var event_blacklist_default = commands70;
7514
+ var event_blacklist_default = commands72;
6736
7515
 
6737
7516
  // src/commands/te-analysis/tracking/debug-device/add.ts
6738
7517
  var trackingDebugDeviceAdd = createTrackingCapabilityCommand({
@@ -6775,12 +7554,12 @@ var trackingDebugDeviceSelect = createTrackingCapabilityCommand({
6775
7554
  });
6776
7555
 
6777
7556
  // src/commands/te-analysis/tracking/debug-device/index.ts
6778
- var commands71 = [
7557
+ var commands73 = [
6779
7558
  trackingDebugDeviceList,
6780
7559
  trackingDebugDeviceAdd,
6781
7560
  trackingDebugDeviceSelect
6782
7561
  ];
6783
- var debug_device_default = commands71;
7562
+ var debug_device_default = commands73;
6784
7563
 
6785
7564
  // src/commands/te-analysis/tracking/debug-data/list.ts
6786
7565
  var debugStartTimeFlag = {
@@ -6839,11 +7618,11 @@ function isRecord2(value) {
6839
7618
  }
6840
7619
 
6841
7620
  // src/commands/te-analysis/tracking/debug-data/index.ts
6842
- var commands72 = [trackingDebugDataList];
6843
- var debug_data_default = commands72;
7621
+ var commands74 = [trackingDebugDataList];
7622
+ var debug_data_default = commands74;
6844
7623
 
6845
7624
  // src/commands/te-analysis/tracking/index.ts
6846
- var commands73 = [
7625
+ var commands75 = [
6847
7626
  ...plan_default,
6848
7627
  ...sdk_sample_default,
6849
7628
  ...plan_change_log_default,
@@ -6855,7 +7634,7 @@ var commands73 = [
6855
7634
  ...debug_device_default,
6856
7635
  ...debug_data_default
6857
7636
  ];
6858
- var tracking_default = commands73;
7637
+ var tracking_default = commands75;
6859
7638
 
6860
7639
  // src/commands/te-analysis/alert/shared.ts
6861
7640
  var alertIdFlag = {
@@ -6870,14 +7649,6 @@ var definitionRequestFlag = {
6870
7649
  required: true,
6871
7650
  desc: "Structured alert definition request JSON object using snake_case field names."
6872
7651
  };
6873
- var limitFlag2 = {
6874
- name: "limit",
6875
- type: "number",
6876
- required: false,
6877
- desc: "Page size. Default: 50, max: 200.",
6878
- min: 1,
6879
- max: 200
6880
- };
6881
7652
  var startTimeFlag2 = {
6882
7653
  name: "start-time",
6883
7654
  type: "string",
@@ -6903,7 +7674,7 @@ var analysisAlertList = createAnalysisCapabilityCommand({
6903
7674
  command: "list",
6904
7675
  capabilityId: "analysis.alert.list",
6905
7676
  description: "List project alerts.",
6906
- flags: [projectIdFlag, queryFlag, limitFlag2, offsetFlag],
7677
+ flags: [projectIdFlag, queryFlag, directoryLimitFlag, directoryOffsetFlag],
6907
7678
  risk: "read",
6908
7679
  buildInput: (ctx) => compactInput({ ...projectInput3(ctx), query: optionalString(ctx, "query"), limit: optionalNumber(ctx, "limit"), offset: optionalNumber(ctx, "offset") })
6909
7680
  });
@@ -6975,7 +7746,7 @@ var analysisAlertStop = createAnalysisCapabilityCommand({
6975
7746
  });
6976
7747
 
6977
7748
  // src/commands/te-analysis/alert/index.ts
6978
- var commands74 = [
7749
+ var commands76 = [
6979
7750
  analysisAlertList,
6980
7751
  analysisAlertGet,
6981
7752
  analysisAlertCreate,
@@ -6984,7 +7755,7 @@ var commands74 = [
6984
7755
  analysisAlertStart,
6985
7756
  analysisAlertStop
6986
7757
  ];
6987
- var alert_default = commands74;
7758
+ var alert_default = commands76;
6988
7759
 
6989
7760
  // src/commands/te-analysis/alert-detail/list.ts
6990
7761
  var analysisAlertDetailList = createAnalysisCapabilityCommand({
@@ -6998,10 +7769,10 @@ var analysisAlertDetailList = createAnalysisCapabilityCommand({
6998
7769
  });
6999
7770
 
7000
7771
  // src/commands/te-analysis/alert-detail/index.ts
7001
- var commands75 = [
7772
+ var commands77 = [
7002
7773
  analysisAlertDetailList
7003
7774
  ];
7004
- var alert_detail_default = commands75;
7775
+ var alert_detail_default = commands77;
7005
7776
 
7006
7777
  // src/commands/te-analysis/alert-job/list.ts
7007
7778
  var analysisAlertJobList = createAnalysisCapabilityCommand({
@@ -7015,10 +7786,10 @@ var analysisAlertJobList = createAnalysisCapabilityCommand({
7015
7786
  });
7016
7787
 
7017
7788
  // src/commands/te-analysis/alert-job/index.ts
7018
- var commands76 = [
7789
+ var commands78 = [
7019
7790
  analysisAlertJobList
7020
7791
  ];
7021
- var alert_job_default = commands76;
7792
+ var alert_job_default = commands78;
7022
7793
 
7023
7794
  // src/commands/te-analysis/alert-notice-config/list.ts
7024
7795
  var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
@@ -7032,10 +7803,10 @@ var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
7032
7803
  });
7033
7804
 
7034
7805
  // src/commands/te-analysis/alert-notice-config/index.ts
7035
- var commands77 = [
7806
+ var commands79 = [
7036
7807
  analysisAlertNoticeConfigList
7037
7808
  ];
7038
- var alert_notice_config_default = commands77;
7809
+ var alert_notice_config_default = commands79;
7039
7810
 
7040
7811
  // src/commands/te-analysis/system/shared.ts
7041
7812
  import { readFileSync, statSync as statSync2 } from "fs";
@@ -7079,6 +7850,7 @@ function defineSystemCommand(spec) {
7079
7850
  resource: `system ${spec.resource}`,
7080
7851
  command: spec.command,
7081
7852
  capabilityId: spec.capabilityId,
7853
+ asyncArtifact: spec.asyncArtifact,
7082
7854
  description: spec.description,
7083
7855
  flags: [
7084
7856
  ...fields.map(fieldFlag),
@@ -7790,6 +8562,7 @@ var systemMonitoringCommands = [
7790
8562
  resource: "query-task",
7791
8563
  command: "export",
7792
8564
  capabilityId: "system.query_task.export",
8565
+ asyncArtifact: true,
7793
8566
  description: "Export query tasks; run query-task options first to discover filter codes.",
7794
8567
  risk: "read",
7795
8568
  fields: [
@@ -8061,6 +8834,7 @@ var systemUsageCommands = [
8061
8834
  resource: "usage-trend",
8062
8835
  command: "export",
8063
8836
  capabilityId: "system.usage_trend.export",
8837
+ asyncArtifact: true,
8064
8838
  description: "Export a bounded usage trend as a cancellable run-scoped gzip JSONL artifact.",
8065
8839
  risk: "read",
8066
8840
  fields: [
@@ -8096,14 +8870,14 @@ var systemUsageCommands = [
8096
8870
  ];
8097
8871
 
8098
8872
  // src/commands/te-analysis/system/index.ts
8099
- var commands78 = [
8873
+ var commands80 = [
8100
8874
  ...systemUsageCommands,
8101
8875
  ...systemIdentityCommands,
8102
8876
  ...systemSecurityCommands,
8103
8877
  ...systemMonitoringCommands,
8104
8878
  ...systemConfigurationCommands
8105
8879
  ];
8106
- var system_default = commands78;
8880
+ var system_default = commands80;
8107
8881
 
8108
8882
  // src/commands/te-analysis/index.ts
8109
8883
  registerCapabilityGatewayRoute("analysis", { gatewayDomain: "analysis" });
@@ -8122,6 +8896,7 @@ var baseCommands = [
8122
8896
  ...dashboard_report_default,
8123
8897
  ...dashboard_report_data_default,
8124
8898
  ...query_default,
8899
+ ...query_context_default,
8125
8900
  ...run_default,
8126
8901
  ...artifact_default,
8127
8902
  ...adhoc_default,
@@ -8152,8 +8927,8 @@ var baseCommands = [
8152
8927
  ...alert_notice_config_default,
8153
8928
  ...system_default
8154
8929
  ];
8155
- var commands79 = [...baseCommands];
8156
- var te_analysis_default = commands79;
8930
+ var commands81 = [...baseCommands];
8931
+ var te_analysis_default = commands81;
8157
8932
  export {
8158
8933
  baseCommands,
8159
8934
  te_analysis_default as default