@thinkingai/ae-cli 6.1.27 → 6.1.29

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 (177) hide show
  1. package/README.md +52 -6
  2. package/README.zh.md +52 -6
  3. package/bin/ae-cli.js +5 -0
  4. package/bin/runtime-capabilities.json +5 -0
  5. package/cli-installation-guide.md +24 -3
  6. package/dist/{auth-WA7YGGRT.js → auth-OBQ5KVQM.js} +175 -45
  7. package/dist/{automation-VAAQBM7Y.js → automation-NAR5DDGL.js} +94 -38
  8. package/dist/{capability-GAAYJ3IQ.js → capability-LFSVNI5B.js} +57 -28
  9. package/dist/chunk-2UW3Y463.js +2289 -0
  10. package/dist/{chunk-VZZNLV3I.js → chunk-3SDHJOCR.js} +68 -18
  11. package/dist/chunk-6HAUVWOQ.js +132 -0
  12. package/dist/{chunk-5XJYLEVC.js → chunk-72NJKS7O.js} +4 -4
  13. package/dist/{chunk-Q5US7JC5.js → chunk-7JAVT5TK.js} +3 -3
  14. package/dist/{chunk-7KU2WNQE.js → chunk-CVCTFLSO.js} +37 -15
  15. package/dist/{chunk-GHXZK54S.js → chunk-H3K5UGYC.js} +41 -13
  16. package/dist/{chunk-OP44TT4H.js → chunk-IN7KKL6K.js} +4 -2
  17. package/dist/{chunk-S6M42KND.js → chunk-JEUXDY3B.js} +1 -1
  18. package/dist/{chunk-ZL7SGNIA.js → chunk-JNVVJ273.js} +58 -46
  19. package/dist/chunk-N6XBLRB7.js +105 -0
  20. package/dist/{chunk-AP7YP2NX.js → chunk-OAWPT7VP.js} +2 -2
  21. package/dist/{chunk-AQJPNWZF.js → chunk-PWXDWMCW.js} +7 -7
  22. package/dist/{chunk-CT7QDJS6.js → chunk-QVRIDN42.js} +2 -2
  23. package/dist/chunk-QZLRHGVH.js +222 -0
  24. package/dist/{chunk-RPBOAQQQ.js → chunk-QZUVLFNR.js} +1 -1
  25. package/dist/{chunk-3YVEAZUN.js → chunk-RJHGDWSC.js} +32 -21
  26. package/dist/{chunk-MWIA43UJ.js → chunk-VCZE3IWO.js} +10 -8
  27. package/dist/chunk-YVG6QD3V.js +233 -0
  28. package/dist/{chunk-WNGFSIOB.js → chunk-Z3Q2AEIN.js} +237 -86
  29. package/dist/{community-report-client-PEERQCX2.js → community-report-client-TJVCLZ3K.js} +1 -1
  30. package/dist/compat-check-CII6B74E.js +32 -0
  31. package/dist/{config-JOD5DOPE.js → config-YZ6O2UQ2.js} +40 -7
  32. package/dist/{context-NGVFPCBK.js → context-F6FCGTF3.js} +4 -4
  33. package/dist/{data-integration-BCLQFTGU.js → data-integration-6UAZO4GG.js} +207 -24
  34. package/dist/evaluation-4LO2O4AF.js +3714 -0
  35. package/dist/index.js +352 -81
  36. package/dist/{local-data-upload-client-TWMHFLUA.js → local-data-upload-client-KCMG6J62.js} +1 -1
  37. package/dist/{memory-CQKH2JAV.js → memory-HHPX3NF2.js} +6 -6
  38. package/dist/{metadata-NR3PHR23.js → metadata-TIFY24LW.js} +17 -9
  39. package/dist/{model-VX5M2CJ6.js → model-7UHGWYVR.js} +4 -4
  40. package/dist/{personal-semantic-preference-2RAI36P3.js → personal-semantic-preference-WKJEGPTM.js} +7 -6
  41. package/dist/{project-semantic-3BUGP3ZM.js → project-semantic-EIQVZNHW.js} +11 -10
  42. package/dist/{sync-RZIAV37C.js → sync-RV3OPCTI.js} +8 -7
  43. package/dist/{te-agent-AORRE2FM.js → te-agent-5ENVZJUH.js} +757 -94
  44. package/dist/{te-analysis-GP7DSQ7Q.js → te-analysis-USIK6ZZG.js} +584 -100
  45. package/dist/{te-community-42M7ICDO.js → te-community-WE2UU4XV.js} +722 -228
  46. package/dist/{te-dataops-BNKNZ4F2.js → te-dataops-XNMO7MBF.js} +9 -6
  47. package/dist/{te-engage-2CO6LRCX.js → te-engage-6C3HCFQR.js} +13 -12
  48. package/dist/{te-experiment-652CLXMU.js → te-experiment-LVTRI3QK.js} +55 -21
  49. package/dist/{te-kb-ULATOTQ3.js → te-kb-TUPGMVBY.js} +409 -85
  50. package/dist/{te-system-UGHVKBVV.js → te-system-YM657FKO.js} +6 -6
  51. package/dist/{te-team-YA6SNOJ3.js → te-team-G4VEJJNL.js} +64 -41
  52. package/dist/{things-DTCOQIQB.js → things-22KQWC23.js} +7 -7
  53. package/dist/{update-ESNYKUVR.js → update-XX4ILU7X.js} +11 -7
  54. package/dist/{workspace-JEOHKFPX.js → workspace-LYDAP647.js} +6 -6
  55. package/package.json +26 -11
  56. package/skills/ae-agent/SKILL.md +22 -3
  57. package/skills/ae-agent/references/command_index.md +8 -0
  58. package/skills/ae-agent/references/resource-package.md +57 -0
  59. package/skills/ae-analysis/SKILL.md +23 -10
  60. package/skills/ae-analysis/references/adhoc_export.md +1 -1
  61. package/skills/ae-analysis/references/agent_review_preflight.md +55 -10
  62. package/skills/ae-analysis/references/agent_review_priorities_comparisons.md +5 -3
  63. package/skills/ae-analysis/references/agent_review_submit_to_page.md +60 -24
  64. package/skills/ae-analysis/references/ai_models/event.md +58 -2
  65. package/skills/ae-analysis/references/ai_models/rank_list.md +1 -0
  66. package/skills/ae-analysis/references/ai_models/retention.md +2 -0
  67. package/skills/ae-analysis/references/ai_models/revenue.md +2 -0
  68. package/skills/ae-analysis/references/analysis_data_export.md +11 -1
  69. package/skills/ae-analysis/references/asset_batch_info_export.md +2 -2
  70. package/skills/ae-analysis/references/asset_batch_sql_export.md +2 -2
  71. package/skills/ae-analysis/references/asset_export.md +1 -1
  72. package/skills/ae-analysis/references/bi_panel_page_data_export.md +1 -1
  73. package/skills/ae-analysis/references/check_export.md +1 -1
  74. package/skills/ae-analysis/references/command_index.md +39 -26
  75. package/skills/ae-analysis/references/dashboard_report_data_export.md +2 -0
  76. package/skills/ae-analysis/references/dashboard_report_get.md +6 -2
  77. package/skills/ae-analysis/references/dashboard_report_update.md +24 -5
  78. package/skills/ae-analysis/references/feedback_submit.md +1 -1
  79. package/skills/ae-analysis/references/governance_recommendation_export.md +40 -18
  80. package/skills/ae-analysis/references/governance_recommendation_run_update.md +13 -0
  81. package/skills/ae-analysis/references/live_data_export.md +1 -1
  82. package/skills/ae-analysis/references/metric_create.md +29 -0
  83. package/skills/ae-analysis/references/metric_get.md +2 -0
  84. package/skills/ae-analysis/references/metric_update.md +2 -0
  85. package/skills/ae-analysis/references/operation_record_export.md +1 -1
  86. package/skills/ae-analysis/references/plan_change_log_export.md +1 -1
  87. package/skills/ae-analysis/references/plan_export.md +1 -1
  88. package/skills/ae-analysis/references/project_info_get.md +4 -0
  89. package/skills/ae-analysis/references/project_member_group_add_members.md +35 -0
  90. package/skills/ae-analysis/references/project_member_group_create.md +25 -0
  91. package/skills/ae-analysis/references/project_member_group_delete.md +34 -0
  92. package/skills/ae-analysis/references/project_member_group_list.md +29 -0
  93. package/skills/ae-analysis/references/project_member_group_members.md +28 -0
  94. package/skills/ae-analysis/references/project_member_group_remove_members.md +35 -0
  95. package/skills/ae-analysis/references/project_member_group_rename.md +26 -0
  96. package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +9 -1
  97. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +6 -1
  98. package/skills/ae-analysis/references/report_data_export.md +1 -1
  99. package/skills/ae-analysis/references/scenario_append.md +31 -0
  100. package/skills/ae-analysis/references/scenario_begin.md +11 -0
  101. package/skills/ae-analysis/references/scenario_collect.md +43 -0
  102. package/skills/ae-analysis/references/scenario_evaluation.md +18 -0
  103. package/skills/ae-analysis/references/scenario_get.md +15 -0
  104. package/skills/ae-analysis/references/scenario_list.md +64 -0
  105. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +73 -4
  106. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/company-kb.mjs +14 -1
  107. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +5 -1
  108. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/execution-contract.mjs +173 -0
  109. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +109 -64
  110. package/skills/ae-automation/SKILL.md +2 -2
  111. package/skills/ae-automation/references/cli.md +18 -1
  112. package/skills/ae-capability/SKILL.md +7 -3
  113. package/skills/ae-community/SKILL.md +77 -27
  114. package/skills/ae-community/references/community-analyzing-theme-comment.md +10 -8
  115. package/skills/ae-community/references/community-data-quality.md +68 -0
  116. package/skills/ae-community/references/community-query-evidence.md +85 -0
  117. package/skills/ae-community/references/community-scenario-capabilities.md +137 -0
  118. package/skills/ae-community/references/community-weekly-report.md +6 -3
  119. package/skills/ae-community/references/get_channel_info.md +7 -4
  120. package/skills/ae-community/references/get_comment_tag_analysis.md +3 -3
  121. package/skills/ae-community/references/get_comments_summary.md +4 -4
  122. package/skills/ae-community/references/get_corpus_tags.md +3 -3
  123. package/skills/ae-community/references/get_daily_summary.md +3 -3
  124. package/skills/ae-community/references/get_hot_topics.md +3 -3
  125. package/skills/ae-community/references/get_livestream_analysis.md +3 -3
  126. package/skills/ae-community/references/get_livestream_detail.md +4 -4
  127. package/skills/ae-community/references/get_livestream_list.md +3 -3
  128. package/skills/ae-community/references/get_livestream_overview.md +3 -3
  129. package/skills/ae-community/references/get_livestream_room_metrics.md +3 -3
  130. package/skills/ae-community/references/get_livestream_rooms.md +3 -3
  131. package/skills/ae-community/references/get_overview_metrics.md +3 -3
  132. package/skills/ae-community/references/get_post_detail.md +4 -4
  133. package/skills/ae-community/references/get_risk_content.md +5 -5
  134. package/skills/ae-community/references/get_sentiment_overview.md +4 -4
  135. package/skills/ae-community/references/get_tag_trends.md +3 -3
  136. package/skills/ae-community/references/get_topic_detail.md +3 -3
  137. package/skills/ae-community/references/list_sources.md +28 -0
  138. package/skills/ae-community/references/list_spaces.md +39 -0
  139. package/skills/ae-community/references/search_posts.md +21 -7
  140. package/skills/ae-data-integration/SKILL.md +6 -4
  141. package/skills/ae-data-integration/references/error-handling.md +1 -0
  142. package/skills/ae-data-integration/references/handoff.md +1 -1
  143. package/skills/ae-data-integration/references/sink-upload.md +11 -0
  144. package/skills/ae-data-integration/references/source-inspect.md +2 -1
  145. package/skills/ae-data-integration/references/transform.md +1 -1
  146. package/skills/ae-data-integration/references/ue-mapping.md +1 -1
  147. package/skills/ae-evaluation/SKILL.md +83 -0
  148. package/skills/ae-evaluation/references/access-and-members.md +55 -0
  149. package/skills/ae-evaluation/references/connections.md +78 -0
  150. package/skills/ae-evaluation/references/datasets.md +57 -0
  151. package/skills/ae-evaluation/references/evaluators.md +81 -0
  152. package/skills/ae-evaluation/references/files.md +33 -0
  153. package/skills/ae-evaluation/references/integrations.md +39 -0
  154. package/skills/ae-evaluation/references/runs.md +160 -0
  155. package/skills/ae-evaluation/references/schedules.md +31 -0
  156. package/skills/ae-experiment/SKILL.md +7 -1
  157. package/skills/ae-experiment/references/manage_experiment.md +18 -1
  158. package/skills/ae-experiment/references/query_experiment_detail.md +7 -0
  159. package/skills/ae-experiment/references/save_experiment.md +76 -2
  160. package/skills/ae-experiment/references/save_submit_experiment.md +7 -0
  161. package/skills/ae-kb/SKILL.md +33 -7
  162. package/skills/ae-kb/references/publication.md +81 -0
  163. package/skills/ae-kb/references/query-workflow.md +14 -1
  164. package/skills/ae-metadata/SKILL.md +3 -2
  165. package/skills/ae-metadata/references/metadata_data_table_download.md +7 -1
  166. package/skills/ae-metadata/references/metadata_data_table_get.md +37 -0
  167. package/skills/ae-system/SKILL.md +1 -1
  168. package/skills/ae-team/SKILL.md +2 -2
  169. package/skills/ae-team/references/run-start.md +1 -0
  170. package/skills/ae-team/references/run-watch.md +7 -5
  171. package/skills/ae-things/SKILL.md +53 -51
  172. package/skills/ae-things/references/cli.md +56 -54
  173. package/skills/ae-things-progress/SKILL.md +20 -20
  174. package/skills/ae-things-review/SKILL.md +19 -19
  175. package/skills/ae-workspace/SKILL.md +1 -1
  176. package/dist/chunk-6VNIR4AP.js +0 -1422
  177. package/dist/chunk-CI24BDR2.js +0 -43
@@ -16,6 +16,8 @@ Command:
16
16
  ae-cli analysis dashboard-report-data export --project-id <project_id> --dashboard-id <dashboard_id> [--report-ids '[1,2]'] [--filters '{...}'] [--cluster-query-scope GLOBAL|SLAVE] [--slave-cluster-id <id>] [--artifact-format jsonl] --output <file>
17
17
  ```
18
18
 
19
+ Omit `--timeout-seconds` to use the deployment's server default (normally 21600 seconds / 6 hours). The typed CLI accepts explicit `1..21600`; inspect this capability for the server default/max and use `capability run` for larger explicit values only when allowed. Read the run descriptor for the effective deadline; cancel earlier with `analysis query cancel --run-id <run_id>`.
20
+
19
21
  Omit cluster routing to follow the saved dashboard configuration. For an explicit route, use `GLOBAL` or `SLAVE` plus one physical cluster ID returned by `analysis query-cluster list`. SQL reports reject effective `GLOBAL`. Use CLI flag `--artifact-format` for the gateway `format` input; `--format` is only the CLI output formatter.
20
22
 
21
23
  `--filters` uses the same AI-facing filter model as report data. The gateway resolves fields and compiles it to the dashboard backend filter. Do not pass a dashboard UI control dump or raw QP filter. Minimal shape:
@@ -2,9 +2,9 @@
2
2
 
3
3
  Capability id: `analysis.dashboard_report.get`
4
4
 
5
- Use when the user needs the saved presentation of one event report card on an analysis board (`看板`). This L2 command uses typed IDs to distinguish the card from the source report and other boards.
5
+ Use when the user needs the frame size, saved grid position, or event presentation of one report card on an analysis board (`看板`). This L2 command uses typed IDs to distinguish the card from the source report and other boards.
6
6
 
7
- Do not use it to read a report definition or execute data. Use [`report get`](report_get.md) for the source definition, or `dashboard-report-data run/export` for the card's data. Only event report cards are supported by this presentation contract.
7
+ Do not use it to read a report definition or execute data. Use [`report get`](report_get.md) for the source definition, or `dashboard-report-data run/export` for the card's data. Frame geometry applies to saved report cards; chart/table presentation is available only for event cards. Tag and note cards are not `report_id` targets.
8
8
 
9
9
  ```bash
10
10
  ae-cli analysis dashboard-report get --project-id <project_id> --dashboard-id <dashboard_id> --report-id <report_id>
@@ -16,4 +16,8 @@ Output is the gateway envelope. `data` contains `project_id`, `dashboard_id`, `r
16
16
 
17
17
  For an authorized display change, use [`dashboard-report update`](dashboard_report_update.md). Get is read-only and does not alter the source definition, card, or other dashboards.
18
18
 
19
+ The response also includes `reports_version`, the dashboard's layout version, and `frame_size` when readable. Historical small cards can return `small`; updates currently accept only `medium` or `large`. A valid saved layout adds `position: {x,y}` and `layout_size: {w,h}`. Coordinates and dimensions are grid units on a 20-column board, not pixels; x/y are zero-based. Missing geometry means the saved layout is uninitialized or unreadable, not position `(0,0)`. Preserve that uncertainty. Non-event cards omit event `presentation`.
20
+
21
+ Use the fresh `reports_version` for size or position writes; this is not the source report's `version`. Conflicts require a new read and a deliberate update, not an automatic retry. Read-only permission does not authorize layout edits.
22
+
19
23
  For an effective card trend/combination chart, `presentation.series_scope=report` and `series` describe inherited source-report styles/axes, not card-local configuration. The board's trend button can render a source combo; use returned `chart_type=combo` and the series as evidence. Read [event-report presentation](event_report_presentation.md) before a source-series edit because it affects other trend cards too.
@@ -2,15 +2,15 @@
2
2
 
3
3
  Capability id: `analysis.dashboard_report.update`
4
4
 
5
- Use when the user explicitly requests changing one event report card's presentation on an analysis board (`看板`). Typed display flags are the L2 value: they select the card scope without exposing raw QP/UI fields.
5
+ Use when the user explicitly requests changing one report card's frame size or grid position, or one event card's presentation, on an analysis board (`看板`). Typed display and geometry flags are the L2 value: they select the card scope without exposing raw QP/UI fields.
6
6
 
7
- Do not use for the source report definition, BI dashboards (`仪表盘`), report creation, or adding a report to a board. Only event report cards are supported. Use [`report update`](report_update.md) for source report metadata/definition/chart/result-table layout.
7
+ Do not use for the source report definition, BI dashboards (`仪表盘`), report creation, or adding a report to a board. Frame size/position apply to saved report cards, not tag or note targets; chart/table presentation supports event cards only. Use [`report update`](report_update.md) for source report metadata/definition/chart/result-table layout.
8
8
 
9
9
  ```bash
10
10
  ae-cli analysis dashboard-report update --project-id <project_id> --dashboard-id <dashboard_id> --report-id <report_id> --chart-type table --table-layout event --date-outside false
11
11
  ```
12
12
 
13
- Input sends typed `project_id`, `dashboard_id`, `report_id`, and a top-level `presentation` object built from the supplied flags. At least one display flag is required:
13
+ Input sends typed `project_id`, `dashboard_id`, `report_id`, and optional top-level `presentation`, `frame_size`, `position`, and `reports_version`. At least one display or geometry change is required; a version alone is not a change. Only supplied chart/table flags form `presentation`:
14
14
 
15
15
  - `--chart-type line|combo|bar|stacked|cumulative|pie|table`: the selected card's chart. `table` is supported here, not in source-report presentation. Gateway validates the choice against the saved event definition; pie always needs grouping without time comparison. Total-time cards support bar/table, or pie only when those grouping/comparison conditions hold.
16
16
  - `--table-layout date|event|group`: the table layout. Omission preserves the saved layout.
@@ -18,10 +18,29 @@ Input sends typed `project_id`, `dashboard_id`, `report_id`, and a top-level `pr
18
18
 
19
19
  For a deterministic installed layout, explicitly choose both `--table-layout` and `--date-outside`. Historical inherited fields missing from get must not be treated as `date`/false defaults.
20
20
 
21
+ ## Frame size and position
22
+
23
+ Read [`dashboard-report get`](dashboard_report_get.md) first for the current card geometry and `reports_version`, then send the requested patch:
24
+
25
+ ```bash
26
+ ae-cli analysis dashboard-report update --project-id <project_id> --dashboard-id <dashboard_id> --report-id <report_id> --frame-size medium --reports-version <fresh_reports_version>
27
+ ae-cli analysis dashboard-report update --project-id <project_id> --dashboard-id <dashboard_id> --report-id <report_id> --position-x <grid_x> --position-y <grid_y> --reports-version <fresh_reports_version>
28
+ ```
29
+
30
+ - `--frame-size medium|large`: medium is 10x10 grid units; large is 20 columns wide and preserves a valid large-card height. Omit to preserve size. This does not change the chart type.
31
+ - `--position-x` and `--position-y`: supply both as non-negative integers. x is 0..19 and x plus the card width must not exceed 20; y is 0..10000 as a CLI safety bound against excessive page compaction work. These are zero-based grid coordinates, not an ordinal report index or pixels. Medium cards fit x=0..10; large cards require x=0.
32
+ - `--reports-version`: required for any size/position change, including a combined presentation patch. Use the fresh dashboard version, not `--report-version`. Zero is a valid initial version, not a conflict-check bypass.
33
+
34
+ The gateway preserves all other report, note, and tag entries and unknown layout settings. It rejects occupied destinations rather than silently moving other cards; combine size and position to choose a fitting unoccupied destination. The native page vertically compacts gaps, so the saved coordinates are a grid placement intent, not a promise to keep empty vertical space. Layout changes never add/remove cards or modify the source report.
35
+
36
+ Position changes require an initialized, valid saved layout containing the target card. If unavailable, save the board layout in the analysis page first; do not invent missing card positions or overwrite the full dashboard definition. A size-only change can update an uninitialized board without inventing its layout. Existing malformed layouts still fail safely. Stale versions and invalid mixed updates cause no partial layout, size, or presentation writes; reread and explicitly choose a new update after a conflict. Legacy presentation-only requests do not require a layout version.
37
+
38
+ ## Event chart and table presentation
39
+
21
40
  `--chart-type combo` selects the trend family only when the source already has combo series; it does not author series. The card inherits source-report metric styles/axes, including when the board's button is labeled trend/line. To get a pure line, reset the source first; a card `--chart-type line` against source combo is rejected rather than misreporting success. Read [event-report presentation](event_report_presentation.md) for source-series edits and their cross-card impact. There is no card `--series` flag or card-local series override.
22
41
 
23
42
  The report must already belong to the exact dashboard. For a new table card, create the event report, associate it through `report create --dashboard-ids` or [`dashboard-report add`](dashboard_report_add.md), then update with the exact returned report ID. Read existing presentation with [`dashboard-report get`](dashboard_report_get.md) when necessary; do not regenerate its definition for a display-only request.
24
43
 
25
- Only the selected card presentation changes. Omitted presentation fields, its source report definition/chart, and other dashboards remain unchanged. Never send `graphShape`, `reportGraphShape`, `tableFormat`, or `dateOutside` as CLI JSON fields. `--dry-run` previews the same targeted display update when requested; ordinary writes do not require a delete confirmation.
44
+ Only the selected card's requested geometry/presentation changes. Omitted presentation fields, its source report definition/chart, and other dashboards remain unchanged. Never send `graphShape`, `reportGraphShape`, `tableFormat`, or `dateOutside` as CLI JSON fields. `--dry-run` previews the same targeted update when requested; ordinary writes do not require a delete confirmation.
26
45
 
27
- Output is the gateway envelope. `data` contains the selected project/dashboard/report IDs, `model_type`, and `presentation` after the update. Use these returned values as card-display evidence; a successful mutation is not proof that a report data query succeeded.
46
+ Output is the gateway envelope. `data` contains the selected project/dashboard/report IDs, `model_type`, `updated`, readable `frame_size`, and `reports_version`; a valid initialized layout also returns `position` and `layout_size`. Event cards include `presentation` after the update; non-event cards omit it. Use these returned values as card-display evidence; a successful mutation is not proof that a report data query succeeded.
@@ -6,7 +6,7 @@ Risk: `write`. Supports `--validate` and `--dry-run`; neither emits a feedback e
6
6
 
7
7
  ## Trigger
8
8
 
9
- Only after an analysis data query has completed and the Agent has delivered its final business analysis answer, ask once in the user's language whether the analysis met expectations. A successful empty result with an explanation is eligible. Individual tool calls, discovery, metadata inspection, asset governance, asset writes, configuration, help and unrelated questions are not triggers. Query submission, running exports, permission errors and failed queries are not completed analysis results. Do not ask after each CLI call or intermediate analysis step.
9
+ For an existing collected scenario, append verbatim feedback through [scenario collection](scenario_collect.md) instead of duplicating it here. This legacy command remains available for explicit standalone user ratings. Do not routinely ask for a satisfaction rating. Collect feedback only when the user explicitly evaluates a completed analysis data query and final business analysis answer. A successful empty result with an explanation is eligible. Individual tool calls, discovery, metadata inspection, asset governance, asset writes, configuration, help and unrelated questions are not triggers. Query submission, running exports, permission errors and failed queries are not completed analysis results. Do not ask after each CLI call or intermediate analysis step.
10
10
 
11
11
  No feedback means no submit command, event, case creation or answer upload. Submit only an explicit user evaluation of the completed analysis. A follow-up question, new requirement, silence or a topic change is not a rating. If the target is ambiguous, do not guess. A spontaneous explicit evaluation of a completed analysis can also be submitted without repeating the question.
12
12
 
@@ -4,7 +4,7 @@ Requires `project_semantic_enable=on` for the target project. If export returns
4
4
 
5
5
  Use this as the required entry point for CLI Agent asset-authentication and metric-recommendation review.
6
6
 
7
- This command returns one evidence packet seeded from hot shared dashboards and their reports. For normal page-review submission, `--limit 20` is the initial candidate pool; use the bounded expansion procedure below when filtering leaves insufficient candidates. After the command returns, the Agent must transform the returned `work_units` into business-domain review groups before answering. `work_units` are evidence containers, not final answer sections and not an excuse to drop eligible hot dashboards.
7
+ This command returns one evidence packet seeded from eligible shared dashboards and their reports, ordered by available heat and then recent activity. For normal page-review submission, `--limit 20` is the initial candidate pool; use the bounded expansion procedure below when filtering leaves insufficient candidates. After the command returns, the Agent must transform the returned `work_units` into business-domain review groups before answering. `work_units` are evidence containers, not final answer sections and not an excuse to drop eligible dashboards.
8
8
 
9
9
  Do not use certification-state management commands as a substitute for this recommendation evidence packet.
10
10
  Do not load project semantics, project KB, or personal semantic preferences before this command. The recommendation packet is the prerequisite evidence for this review workflow.
@@ -33,38 +33,52 @@ Input sends `project_id`, optional `window_days`, optional `limit`, and optional
33
33
 
34
34
  Output includes `schema_version`, `run_id`, `project_id`, `snapshot_hash`, `work_units`, `coverage`, `stat_scopes`, and `agent_presentation_contract`.
35
35
 
36
+ ## Tracked page-recommendation lifecycle
37
+
38
+ For page-review recommendations, including sidebar, scheduled and external Agent runs, start with `export --project-id <id> --limit 20 --track-run true`. This requires the matching Common service release. A tracked export starts the project run only when the server accepts actual work; filling a prompt never starts it. Legacy exports without this optional flag retain their original behavior.
39
+
40
+ - Preserve `run_id`. Expansion to top-50/top-100 must pass `--track-run true --run-id <same_run_id>`; do not start another run. The server rejects competing project runs.
41
+ - During Agent interpretation, call `analysis-meta governance-recommendation run-update --project-id <id> --run-id <id> --status HEARTBEAT` at least every five minutes. A fifteen-minute lost lease becomes `TIMED_OUT`; do not resume an expired run.
42
+ - Submit the final packet with `source_run_id` equal to the tracked `run_id`. Successful page submission finishes the run with its exact `batch_id` automatically.
43
+ - An export with `run_status: SUCCEEDED` has no actionable candidates and is already complete; do not heartbeat or submit it. If later Agent filtering leaves no new recommendation, finish with `--status SUCCEEDED` and report the empty result. If interpretation fails, finish with `--status FAILED --reason <short_non_sensitive_reason>`; use `CANCELLED` only once actual execution has stopped. This command records a terminal state; it does not cancel an executing Agent.
44
+ - Terminal states release project occupancy. Never claim success merely because export finished, and never include credentials or raw tool logs in a reason.
45
+ - `RECOMMENDATION_RUNNING` means another run owns this project. Do not bypass it with an untracked export. Query `metadata.governance_recommendation.run_status` through capability discovery if diagnosis is needed.
46
+
36
47
  ## Customer/Agent Material Package Contract
37
48
 
38
- For page-review material preparation or inspection, continue with [independent Agent preflight](agent_review_preflight.md), including when the user requests no submission. Preserve full snapshots, not just the fields shown in a transport example; the preflight checks evidence integrity and interpretation separately.
39
- Generate [review priorities and classified definition comparisons](agent_review_priorities_comparisons.md) from that evidence. Export ranking and `conflict_risks` are inputs, not replacements for Agent interpretation of individual urgency and both sides of a comparison. A related asset is not automatically a conflicting definition.
49
+ Ordinary recommendations use concise purpose, recommendation basis, core report meaning and known material risks. Page preparation or a local rehearsal uses [focused preflight](agent_review_preflight.md#focused-recommendation-review-default); recommendation-only display does not require a separate full audit. Preserve full source snapshots even when the authored explanation is short. Interpret only selected assets and their necessary grouping/dependency evidence; scripts can account for overflow without an Agent narrative for each unselected candidate.
50
+
51
+ Read [priorities and definition comparisons](agent_review_priorities_comparisons.md) only for requested ranking, concrete comparison/conflict clues or an explicit full audit. Ordinary items do not need priority grades or comparison-coverage records. Export ranking and `conflict_risks` are inputs; a related asset is not automatically a conflicting definition. Unknown or unexamined conflict scope must never be reported as fully checked.
40
52
 
41
53
  - This command requires a numeric `--project-id`. If the user provides only a project name, resolve the project on the same host with `ae-cli project info list` before export.
42
54
  - `run_id`, `snapshot_hash`, and `review_material_package` are the handoff package for Agent review drafting.
43
55
  - `review_material_package` should contain candidate assets, heat evidence, source links, evidence links, dashboard/report/metadata relations, report definitions, AI-model definitions, `target_revision`, and hashes needed to draft a page review.
44
56
  - The Agent must generate the downstream `agent-review submit-to-page` draft from this package: batch `ai_summary`, `presentation_snapshot`, per-item `ai_summary` / recommendation reasons, copied `evidence_snapshot`, copied source links, and relations.
45
- - `work_units` are deterministic Common evidence containers. They are not the final page grouping. The Agent clusters selected assets into one or more business-domain topics and second-level groups for review.
57
+ - `work_units` are deterministic Common evidence containers. They are not the final page grouping. The Agent clusters selected assets into business domains and business subtopics for review. Apply [Business Topics and Subtopics](agent_review_submit_to_page.md#business-topics-and-subtopics) to both levels; a source dashboard is not a default subtopic.
46
58
  - For report and SQL-report items, use `review_material_package.candidate_assets[].evidence_snapshot.analysis` first. Call `analysis-meta agent-review evidence` only when the package marks a definition/analysis gap or when validating a generated draft.
47
59
 
48
- ## Rejection Filtering and Bounded Expansion
60
+ <a id="rejection-filtering-and-bounded-expansion"></a>
61
+
62
+ ## Current Candidates and Bounded Expansion
49
63
 
50
- Common selects hot dashboards before attaching decision state; it does not automatically replace rejected dashboards with lower-ranked ones. The Agent must apply this procedure before drafting a review:
64
+ Manual recommendation selects assets that currently need certification, by business value and current evidence. Do not query review history to select candidates. Earlier recommendations, pending reviews, rejection or deferral do not exclude an otherwise eligible uncertified asset. Historical fields returned in the packet remain audit context; they do not define manual recommendation eligibility. Automatic certification retains its separate explicit intent and safety rules.
51
65
 
52
- 1. Start with `--limit 20`, unless the user explicitly specifies a different scope or a diagnostic sample. Keep the same host, project, time window, and completed-context setting throughout expansion.
53
- 2. Match each source dashboard to its asset candidate by resource identity. If its current `action_state` is `PREVIOUSLY_REJECTED`, omit the dashboard and its entire display branch: its groups, report/metadata/metric placements, and relations. Do not display that rejected dashboard as completed context or submit it again. A historical `REJECT` alone is not enough to exclude a changed definition; use Common's current same-evidence decision state. Do not treat every `actionable=false` asset as rejected: authenticated context remains useful.
54
- 3. Rebuild the presentation from retained dashboard branches. Keep a shared report, metadata asset, or metric candidate when independently referenced by another retained dashboard, and show it only under retained branches. Deduplicate by scoped asset identity, not name. Remove orphan items, empty groups/topics, and relations to omitted items from `presentation_snapshot`; omit items supported only by removed branches from the submission. This is presentation filtering, not a cascading rejection or a certification-state change. Preserve copied source evidence unchanged.
55
- 4. Separate pending review work from context before judging the batch. Pending review work is a returned item that still needs a reviewer decision, for example `action_state:"PENDING"` or unauthenticated `authentication_status:0`, after excluding same-evidence rejects, active deferrals, and items already in an unfinished review batch when that state is available. `AUTHENTICATED` / completed assets are context only unless the evidence shows a material definition change that requires a new decision.
56
- 5. Assess whether the remaining pending review assets and visible business domains meet the user's requested breadth and have sufficient evidence for a useful review. If no count was requested, treat the pool as insufficient when there are fewer than about 10 pending review assets, fewer than 3 pending business domains, or the retained material is mostly authenticated context with little work for the reviewer. If insufficient and coverage indicates more dashboards exist, re-export with `--limit 50`; repeat filtering and assessment, then use `--limit 100` if still insufficient. These limits are cumulative top-N pools, not disjoint pages. Replace the previous drafting packet with the latest successful export; do not concatenate runs or mix their `run_id`, `snapshot_hash`, revisions, or evidence hashes.
57
- 6. Apply the daily review capacity after expansion. Expansion increases business-domain coverage; it does not authorize submitting every pending asset found. Unless the user requests a different batch size, target about 20-50 pending review assets, use a hard cap around 80, and keep roughly 3-6 visible business domains. When the expanded pool is larger than the cap, rank pending assets by impact_degree, heat_count90d, user_count90d, dependency/relation breadth, and whether their business domain is under-covered. Use per-domain quotas before taking many assets from one domain.
58
- 7. Stop when the pending review assets and business-domain breadth are sufficient, the available dashboard pool is exhausted, or the top 100 have been inspected. Do not automatically expand beyond 100. At the cap, submit only the ranked slice of genuinely eligible, evidence-supported candidates within the user's submission authorization; never revive rejected, deferred, already in-flight, or weak candidates to fill a quota. Record overflow counts and domains for later batches. If none remain, explain the result without submitting an empty batch. A failed export is an execution failure, not evidence of candidate scarcity; do not expand in response to an error or silently fall back to stale material.
59
- 8. Build page topics only for business domains that contain at least one selected pending review asset. Retain authenticated/completed assets only as direct context needed by those selected pending items, for example source dashboards, source reports, and referenced metadata along the relation path. Do not display or submit a zero-pending business domain as standalone work, even if it has many hot authenticated assets.
66
+ 1. Start with `--limit 20`, unless the user explicitly requests another scope. Keep the same host, project, time window and completed-context setting throughout expansion.
67
+ 2. Treat current `authentication_status:0` assets as pending review work. Use current certification facts in the asset or `evidence_snapshot.asset`; do not use historical `action_state`, `actionable`, or `previous_decision` as a substitute for current certification. Unknown certification or missing definition evidence is an evidence gap, not proof of eligibility. Authenticated assets are context only.
68
+ 3. Deduplicate shared assets by full scoped identity within this packet and preserve source evidence, links and known relations. Do not remove dashboard branches because they appeared in an earlier recommendation.
69
+ 4. Assess current candidates and business breadth. If there are fewer than about 10 pending review assets or fewer than 3 pending business domains and more dashboards exist, re-export with `--limit 50`, then use `--limit 100` if still insufficient. The pools are cumulative, not pages. Replace the earlier drafting packet with the latest successful export; never mix run IDs, hashes, revisions or snapshots.
70
+ 5. Apply the daily review capacity after expansion: target about 20-50 pending review assets, hard cap around 80, across roughly 3-6 visible business domains. Rank by impact_degree, heat_count90d, user_count90d and dependency breadth. Use per-domain quotas before adding many assets from one domain.
71
+ 6. Stop when candidates and domain coverage are sufficient, the pool is exhausted, or the top 100 have been inspected. Record overflow counts and domains for later batches. Do not fill a quota with weak or unsupported candidates. An export failure is an execution failure, not evidence of scarcity; do not expand because of an error or use stale material.
72
+ 7. Build visible domains only when they contain selected pending work. Retain authenticated assets only as direct supporting context. Do not display or submit a zero-pending business domain as standalone work.
73
+ 8. Submit the current material once when authorized. A new recommendation may include previously recommended assets. Reuse the same client request key and exact payload only when replaying the same submission after a network failure; a deliberate new submission uses a new key. Read back the returned batch rather than searching old batches to change the candidate set.
60
74
 
61
- Report the final requested limit, actual dashboards returned, same-definition rejected dashboards excluded, active deferrals or in-flight items excluded when known, retained dashboard count, visible pending-domain count, selected pending review asset count, context asset count, overflow pending count/domain summary, and stopping reason. Explain why expansion was needed or why candidates remain insufficient. Do not describe an expanded or filtered batch as covering all of the top 20/50/100 dashboards. Keep this scope summary separate from the hidden rejected branches, zero-pending context domains, and overflow left for later batches.
75
+ Report the final requested limit, actual dashboards returned, dashboards represented in the selected packet, visible pending-domain count, selected pending asset count, context count, overflow summary and stopping reason. Do not describe a selected slice as covering all top-N dashboards. Historical recommendation counts are not part of eligibility or the required scope report.
62
76
 
63
77
  ## Decision Rules
64
78
 
65
79
  - Use this command before presenting recommendations for certification or metrics.
66
80
  - After export, always build the business-domain review display before answering. The command output is evidence, not the response format.
67
- - For real review-page submission, apply Rejection Filtering and Bounded Expansion before grouping. Include eligible assets across the retained dashboard branches; do not compress them into a few representative themes or submit only the first hot dashboard or first `work_unit`. A smaller batch is valid when the evidence supports fewer eligible candidates or the user explicitly requests a sample or diagnostic batch. Explain the actual scope and omissions.
81
+ - For real review-page submission, apply Current Candidates and Bounded Expansion before grouping. Include eligible assets across the retained dashboard branches; do not compress them into a few representative themes or submit only the first hot dashboard or first `work_unit`. A smaller batch is valid when the evidence supports fewer eligible candidates or the user explicitly requests a sample or diagnostic batch. Explain the actual scope and omissions.
68
82
  - For recurring recommendation jobs, the default reviewer workspace is pending-first: only business domains with pending review assets are visible. Authenticated/completed assets remain available as relation/context rows under those domains, but they must not create a visible topic by themselves.
69
83
  - Treat `业务主题域` as a semantic cluster over the selected dashboards, not a copy of the dashboard list. Do not create one topic per hot dashboard just because `--limit 20` returned 20 work units. Merge dashboards into the same topic when their child reports, referenced metadata, metrics, folder context, or authored notes describe the same business process. Split only when the business meaning or review decision is materially different. A result where `topic_count == selected_dashboard_count` requires explicit evidence that every selected dashboard has a distinct business domain.
70
84
  - Do not call project-semantic, project-KB, or personal-semantic-preference commands as prerequisite context for this workflow.
@@ -76,13 +90,21 @@ Report the final requested limit, actual dashboards returned, same-definition re
76
90
  - Keep completed/authenticated context included by default so certified and uncertified assets from the returned evidence appear together under the same business domain. Pass `--include-completed false` only when the user explicitly asks for a pending-only review.
77
91
  - If this capability is missing on the target host, report the deployment/catalog gap. Do not synthesize a recommendation from ordinary asset-authentication or metric list commands.
78
92
 
93
+ ## Incomplete Usage and Lineage
94
+
95
+ The export may fall back from the requested materialized usage window to Poseidon heat (only for a 90-day request), then to recent activity/update ordering when neither statistic is available. Read `coverage.usage_window_state`, `selection_mode`, and each asset's `heat_source`. Missing statistics and lineage are evidence gaps, not proof of an empty project or a permission failure. Never replace null/unknown users, heat or impact with a factual zero; do not add counts from different sources or claim a Poseidon window anchor that is not exposed. Zero is an observed value and must not be overwritten with older heat. Report the actual returned coverage scope rather than describing all fallback candidates as hot assets. These candidates are for evidence-based manual review, not relaxed automatic certification.
96
+
97
+ The export marker covers the active request only and is released after success (including empty results) or failure. Do not assume it reserves a project throughout Agent drafting; page submission uses its own idempotency and revision checks.
98
+
99
+ Each newly authored topic includes optional transport field `semantic_basis: {business_question, grouping_reason, evidence_item_ids}`. Write these explanations from report/event/property/metric definitions and reference items displayed in that topic. The independent preflight must review all topic bases and grouping decisions; CLI/Common only validate nonempty structure and scoped references. Legacy packets without this field remain readable/submittable. Never generate topic business meaning by script templates.
100
+
79
101
  ## Agent Approval Display
80
102
 
81
103
  This is an Agent presentation contract, not a CLI flag and not a Common renderer. Use the basic fields returned by Common to produce exactly one review shape:
82
104
 
83
105
  - The top-level grouping must be `业务主题域`. Do not split the final answer into separate top-level sections such as `资产认证建议` and `推荐指标`.
84
- - Aggregate by `业务主题域` with each source dashboard as the core evidence package for coverage, not as the business-domain name. Infer each domain from the dashboard semantics plus the business meaning of `topic_seed`, `source_reports`, asset names, metric names, and semantic definitions. The final group name should describe the business area or process, such as payment/revenue, login/channel, retention, item economy, or lifecycle, not the backend work-unit label. This grouping is for review comprehension only; it must not reduce the retained dashboard set after rejection filtering and bounded expansion.
85
- - The expected page hierarchy is `业务域 -> 看板 -> 报表 -> 元数据`. Put multiple source dashboards under one topic when they belong to the same business domain. The topic is not the dashboard node; the dashboard remains a root asset row inside the topic.
106
+ - Aggregate by `业务主题域` with each source dashboard as the core evidence package for coverage, not as the business-domain name. Infer each domain from the dashboard semantics plus the business meaning of `topic_seed`, `source_reports`, asset names, metric names, and semantic definitions. The final group name should describe the business area or process, such as payment/revenue, login/channel, retention, item economy, or lifecycle, not the backend work-unit label. This grouping is for review comprehension only; it must not reduce the retained dashboard set after current-state selection and bounded expansion.
107
+ - The expected page hierarchy is `业务域 -> 业务小主题 -> 看板 -> 报表 -> 元数据`. Put source dashboards answering the same specific business question under one subtopic within their broader domain. Neither grouping level is the dashboard node; the dashboard remains an asset row inside a subtopic. Review one-group-per-dashboard layouts for missed business merges rather than accepting renamed dashboard containers.
86
108
  - Treat `work_units` as evidence containers, not presentation groups. One dashboard/work unit can split into multiple business domains when its child reports cover different business processes; one business domain can merge rows from multiple dashboards/work units when the evidence describes the same business process.
87
109
  - Keep each report-centered evidence chain together: the report row, metadata rows, and metric candidates introduced by that report follow the same `业务主题域`. Do not detach report metadata into a separate generic metadata group, and do not merge unrelated child-report domains only because they share one source dashboard.
88
110
  - When one source dashboard contains child reports for different business questions, create one `业务主题域` per child-report business question. Do not combine distinct report domains into a broad `A 与 B 运营`, `综合运营`, or `核心语义` group only because they share the same dashboard. The dashboard can appear as shared linked source evidence in each relevant domain.
@@ -0,0 +1,13 @@
1
+ # analysis-meta governance-recommendation run-update
2
+
3
+ Renew or finish the tracked recommendation started by [export](governance_recommendation_export.md#tracked-page-recommendation-lifecycle).
4
+
5
+ ```bash
6
+ ae-cli analysis-meta governance-recommendation run-update --project-id <project_id> --run-id <run_id> --status HEARTBEAT
7
+ ```
8
+
9
+ Capability: `metadata.governance_recommendation.run_update`. Input required flags: `--project-id`, `--run-id`, `--status`. Optional: `--reason` with a short non-sensitive reason.
10
+
11
+ Use HEARTBEAT at least every five minutes during actual interpretation. SUCCEEDED without page submission means an empty successful result. Page submission automatically records the exact batch ID. FAILED and CANCELLED release occupancy; record CANCELLED only after execution has stopped. Updating state does not cancel Agent execution. The server requires the same project, actor and active run ID; a fifteen-minute lost lease ends as TIMED_OUT and cannot be revived.
12
+
13
+ Do not use this command to start recommendations or bypass another run. Output returns the current project status, exact run ID and successful batch ID when present; terminal states release occupancy.
@@ -23,5 +23,5 @@ Parameters:
23
23
  | `--project-id` | Numeric project ID. | Yes |
24
24
  | `--data-type` | Live data type: normal (default) or error. | No |
25
25
  | `--request-id` | Optional caller-supplied cli_<32 lowercase hex> lifecycle ID. ae-cli generates and prints one before dispatch when omitted. | No |
26
- | `--timeout-seconds` | Async runtime in seconds. Default and max: 21600 (6 hours); cancel earlier with analysis query cancel --run-id <run_id>. | No |
26
+ | `--timeout-seconds` | Async runtime in seconds. Omit to use the server default (normally 21600 / 6 hours). Explicit CLI values remain in 1..21600. Inspect the capability for its server default/max; use capability run for larger values only when allowed. Cancel with analysis query cancel --run-id <run_id>. | No |
27
27
  | `--output` | Wait and download to this local file. | No |
@@ -35,3 +35,32 @@ Output `data.metric` contains the created metric summary.
35
35
  - Use public snake_case fields such as `time_range` and `dependencies[].event`; do not send backend-only camelCase fields such as `eventName` in the semantic definition.
36
36
  - For event metrics, `--metric-params` is usually a format config such as `{"format":"integer"}`.
37
37
  - For retention metrics, `--metric-params` should be the retention `eventView` configuration.
38
+
39
+ ## Saved metric filters
40
+
41
+ For a semantic event metric, root `filters` and the sole metric's own `filters` are combined with AND. Preserve each scope's `relation` and compound grouping: a root OR group must not become AND between its children, and a metric-level condition must not disappear. For example, this definition means `(country = US OR country = GB) AND elapsed_ms <= 3000`:
42
+
43
+ ```json
44
+ {
45
+ "time_range": {"mode":"previous","unit":"day","value":7},
46
+ "metrics": [{
47
+ "event":"reply",
48
+ "aggregation":"total_count",
49
+ "relation":"and",
50
+ "filters":[
51
+ {"field":{"type":"event_property","name":"elapsed_ms"},"operator":"lte","values":[3000]}
52
+ ]
53
+ }],
54
+ "relation":"or",
55
+ "filters":[
56
+ {"field":{"type":"user_property","name":"country"},"operator":"eq","values":["US"]},
57
+ {"field":{"type":"user_property","name":"country"},"operator":"eq","values":["GB"]}
58
+ ]
59
+ }
60
+ ```
61
+
62
+ Use the definition as the single item in `--metric-events`, replacing the example event and properties with verified metadata. Do not put semantic event filter conditions in `metric_params`: non-empty `filts` or misplaced `filters` there are rejected for semantic event creation instead of being silently ignored; null or empty arrays remain compatible. Keep formatting, such as `{"format":"integer"}`, in `--metric-params`. Existing native QP input remains a compatibility path; preserve its own representation rather than mixing it with a semantic definition.
63
+
64
+ A saved metric is a reusable calculation, not a saved report. The example's `time_range` supplies compilation context; report grouping, comparison periods, and calendar settings are not a promise of persisted query context for that metric. Choose the actual query period when using the metric.
65
+
66
+ After creation, use `analysis-meta metric get` to verify the saved filters before reusing the metric in a formula. An older backend can accept creation yet discard root filters; a successful response alone does not prove the calculation scope was saved. If readback loses a condition, stop the dependent query and report the backend deployment prerequisite instead of claiming that the filtered result is correct.
@@ -17,6 +17,8 @@ Input sends `project_id`, `metric_id`.
17
17
 
18
18
  Output `data.metric` contains the saved metric definition, or no metric when the ID does not resolve.
19
19
 
20
+ After creating or changing a filtered metric, verify the saved event filters and their relations in this returned native definition before formula reuse. Both semantic root conditions and metric-local conditions must still be represented. Do not interpret a successful create/update response or a formula's successful execution as proof that its filters were saved. If an older backend dropped conditions, stop the dependent query and report the scope mismatch; the CLI must not silently treat the metric as unfiltered.
21
+
20
22
  ## Parameters
21
23
  | Parameter | Required | Description |
22
24
  |---|---|---|
@@ -37,4 +37,6 @@ Output `data.metric` contains the updated summary for a full-definition update c
37
37
  - For full-definition updates, pass `--metric-name`, `--metric-desc`, one of `--model-type` / `--metric-mode`, and `--metric-events` together.
38
38
  - If both `--model-type` and `--metric-mode` are present, they must match: `event -> 0`, `retention -> 1`.
39
39
  - Use `analysis-meta metric get` before updating if the current definition needs to be preserved and edited.
40
+ - For a full-definition event update, use the native QP returned by `metric get`; semantic event-analysis definitions are not supported by `metric update`. Preserve the native filters, formula metadata, and metric params unless the user requests a calculation change. The semantic create example in [`metric_create.md`](metric_create.md) is not an update payload.
41
+ - For a display-name/remark-only edit, omit `--metric-events` and `--metric-params` so the existing filtered calculation stays unchanged. After a definition change, read back the saved metric and verify its conditions before using it in a formula.
40
42
  - This is an ordinary write operation; execute it without the high-risk confirmation flag.
@@ -29,6 +29,6 @@ This capability starts an asynchronous artifact export. Use `--wait --output <pa
29
29
 
30
30
  - `--artifact-format xlsx` selects the logical data format. Follow the returned descriptor for compression and content type.
31
31
  - `--request-id cli_<32 lowercase hex>` assigns a stable request identifier.
32
- - `--timeout-seconds` accepts 1–7200 (server default: 3600).
32
+ - Omit `--timeout-seconds` to use the server-provided default. This typed CLI accepts explicit values in `1..7200`; inspect this capability for the deployment default/max. Use `capability run` with a larger explicit `timeout_seconds` only when its schema permits it.
33
33
  - `--wait-timeout-seconds` controls how long this CLI invocation waits; it does not change the server runtime limit.
34
34
  - Explicit flags override corresponding `--payload` fields; omitted options preserve payload values.
@@ -23,5 +23,5 @@ Parameters:
23
23
  | `--project-id` | Numeric project ID. | Yes |
24
24
  | `--log-id` | Tracking plan change log ID. | Yes |
25
25
  | `--request-id` | Optional caller-supplied cli_<32 lowercase hex> lifecycle ID. ae-cli generates and prints one before dispatch when omitted. | No |
26
- | `--timeout-seconds` | Async runtime in seconds. Default and max: 21600 (6 hours); cancel earlier with analysis query cancel --run-id <run_id>. | No |
26
+ | `--timeout-seconds` | Async runtime in seconds. Omit to use the server default (normally 21600 / 6 hours). Explicit CLI values remain in 1..21600. Inspect the capability for its server default/max; use capability run for larger values only when allowed. Cancel with analysis query cancel --run-id <run_id>. | No |
27
27
  | `--output` | Wait and download to this local file. | No |
@@ -22,5 +22,5 @@ Parameters:
22
22
  | --- | --- | --- |
23
23
  | `--project-id` | Numeric project ID. | Yes |
24
24
  | `--request-id` | Optional caller-supplied cli_<32 lowercase hex> lifecycle ID. ae-cli generates and prints one before dispatch when omitted. | No |
25
- | `--timeout-seconds` | Async runtime in seconds. Default and max: 21600 (6 hours); cancel earlier with analysis query cancel --run-id <run_id>. | No |
25
+ | `--timeout-seconds` | Async runtime in seconds. Omit to use the server default (normally 21600 / 6 hours). Explicit CLI values remain in 1..21600. Inspect the capability for its server default/max; use capability run for larger values only when allowed. Cancel with analysis query cancel --run-id <run_id>. | No |
26
26
  | `--output` | Wait and download to this local file. | No |
@@ -20,3 +20,7 @@ Output uses the gateway envelope: success is `ok=true,data,meta`; failure is `ok
20
20
  | Parameter | Required | Description |
21
21
  |---|---|---|
22
22
  | `--project-id` | Yes | Numeric project ID. |
23
+
24
+ ## Scenario sample collection policy
25
+
26
+ `data.analysis_scenario_collection_enabled` is a live boolean from the source project's own configuration. It is true only for explicit `agent_analysis_scenario_collection_enabled=on`. Missing, invalid, or unreadable configuration defaults to false; company configuration is not inherited. This field does not change ordinary invocation/intent telemetry. Older servers may omit it; treat omission as disabled. Re-read for each scenario or append rather than keeping a previous grant.
@@ -0,0 +1,35 @@
1
+ # project member-group add-members
2
+
3
+ Use when the user explicitly requests adding existing project members to an existing project member group.
4
+
5
+ Do not use this command to invite someone into the project or company, change roles, create/delete a group, rename it, or change its default-join setting. AgentSpace/system membership and analysis user-cluster/user-tag audiences use their own command families.
6
+
7
+ 1. Resolve the target group with `project member-group list` and read its members with `project member-group members`, following pagination as needed. Resolve numeric `user_id` values from `project member list`; do not substitute login names or open IDs.
8
+ 2. Preview the exact change:
9
+
10
+ ```bash
11
+ ae-cli project member-group add-members --project-id 1 --group-id 20 --user-ids '[101,102]' --dry-run
12
+ ```
13
+
14
+ 3. Summarize the project, group, and requested member changes. After explicit user confirmation, execute the unchanged request with global `--yes`:
15
+
16
+ ```bash
17
+ ae-cli project member-group add-members --project-id 1 --group-id 20 --user-ids '[101,102]' --yes
18
+ ```
19
+
20
+ Capability ID: `project.member_group.add_members`. Risk: `high-risk-write`. Requires the project's `MAINTAIN_PROJECT_USER` permission. Non-interactive execution requires `--yes`; dry-run does not modify membership.
21
+
22
+ ## Parameters
23
+
24
+ | Flag | Required | Meaning |
25
+ |---|---|---|
26
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
27
+ | `--group-id` | Yes | Integer ID from 1 to 2147483647 of an existing group in this project. |
28
+ | `--user-ids` | Yes | JSON array containing 1 to 1000 integer user IDs from 1 to 2147483647, for example `[101,102]`. Strings, non-integers, zero, and negative IDs are rejected. |
29
+ | `--yes` | Execution | Global confirmation flag after explicit authorization. |
30
+
31
+ The gateway input uses `project_id`, `group_id`, `user_ids`, and `yes: true`. Every requested user must already belong to the project. The server applies the requested membership delta atomically, preserving the group name, default-join setting, and other group members. Do not send a replacement member list or call the page's full-group save interface.
32
+
33
+ ## Output
34
+
35
+ The gateway success envelope returns `group_id`, `requested_user_ids`, `changed_user_ids`, and the resulting `member_count` in `data`. Use `changed_user_ids` to report the actual change rather than assuming every requested ID changed. Read back with `project member-group members` when the user needs the resulting membership. Preserve any `request_id` and `invocation_id` in metadata; report gateway permission or membership-validation failures without claiming success.
@@ -0,0 +1,25 @@
1
+ # project member-group create
2
+
3
+ Use when the user needs a new project member group under Project management → Member management → Member groups.
4
+
5
+ Do not use this command to create a company/project member, an AgentSpace group, an audience cluster, or a user tag. It creates an empty group with `is_default=false`; it does not enroll project members or change another group's settings. Add existing project members afterward with `project member-group add-members`.
6
+
7
+ ```bash
8
+ ae-cli project member-group create --project-id 1 --group-name 'Customer Success' --dry-run
9
+ ae-cli project member-group create --project-id 1 --group-name 'Customer Success'
10
+ ```
11
+
12
+ Capability ID: `project.member_group.create`. Risk: `write`. Requires the project's `MAINTAIN_PROJECT_USER` permission.
13
+
14
+ ## Parameters
15
+
16
+ | Flag | Required | Meaning |
17
+ |---|---|---|
18
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
19
+ | `--group-name` | Yes | Non-blank group name of 1 to 80 characters. |
20
+
21
+ The gateway input uses `project_id` and `group_name`. No default-join flag is exposed.
22
+
23
+ ## Output
24
+
25
+ The gateway success envelope returns the new `group_id` and `group_name` in `data`. Use that ID for membership changes; read the resulting group with `project member-group list`. Preserve any `request_id` and `invocation_id` in metadata. Report name-validation or permission failures without claiming the group was created.
@@ -0,0 +1,34 @@
1
+ # project member-group delete
2
+
3
+ Use when the user explicitly requests deleting an existing project member group.
4
+
5
+ Do not use this command to remove users from a project/company or merely remove selected group members; use `project member-group remove-members` for the latter. Deleting the group leaves the users' project/company memberships intact. Group-based sharing can be affected, so identify the group and explain the impact before executing.
6
+
7
+ 1. Resolve the exact group ID with `project member-group list`; inspect current members with `project member-group members` if needed.
8
+ 2. Preview:
9
+
10
+ ```bash
11
+ ae-cli project member-group delete --project-id 1 --group-id 20 --dry-run
12
+ ```
13
+
14
+ 3. After explicit user confirmation, execute the unchanged request:
15
+
16
+ ```bash
17
+ ae-cli project member-group delete --project-id 1 --group-id 20 --yes
18
+ ```
19
+
20
+ Capability ID: `project.member_group.delete`. Risk: `high-risk-write`. Requires the project's `MAINTAIN_PROJECT_USER` permission. Non-interactive execution requires global `--yes`.
21
+
22
+ ## Parameters
23
+
24
+ | Flag | Required | Meaning |
25
+ |---|---|---|
26
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
27
+ | `--group-id` | Yes | Integer ID from 1 to 2147483647 of an existing group in this project. |
28
+ | `--yes` | Execution | Global confirmation flag after explicit authorization. |
29
+
30
+ The gateway input uses `project_id`, `group_id`, and `yes: true`. Dry-run validates and previews without deleting the group.
31
+
32
+ ## Output
33
+
34
+ Interpret the gateway result as group deletion only, never removal of its users from the project/company. Verify the group is absent with `project member-group list` when readback is needed. Preserve any `request_id` and `invocation_id` in metadata, and report permission or resource-validation failures without claiming deletion.
@@ -0,0 +1,29 @@
1
+ # project member-group list
2
+
3
+ Use when the user needs to find existing member groups in a project under Project management → Member management → Member groups.
4
+
5
+ Do not use this command for AgentSpace/system membership or analysis user-cluster/user-tag audiences. Project member-group membership is separate from project membership; use `project member list` to discover project members. Use `project member-group members` to inspect a group’s members; the group list returns counts, not nested member lists.
6
+
7
+ ```bash
8
+ ae-cli project member-group list --project-id 1 --limit 100 --offset 0
9
+ ```
10
+
11
+ Capability ID: `project.member_group.list`. Risk: `read`. Requires the project's `VIEW_PROJECT_MEMBER` permission.
12
+
13
+ For group lifecycle changes, read [create](project_member_group_create.md), [rename](project_member_group_rename.md), or [delete](project_member_group_delete.md). Membership changes use [add-members](project_member_group_add_members.md) and [remove-members](project_member_group_remove_members.md).
14
+
15
+ ## Parameters
16
+
17
+ | Flag | Required | Meaning |
18
+ |---|---|---|
19
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
20
+ | `--limit` | No | Integer page size from 1 to 1000; default 100. |
21
+ | `--offset` | No | Integer row offset from 0 to 2147483647; default 0. |
22
+
23
+ The gateway input uses `project_id`, `limit`, and `offset`.
24
+
25
+ ## Output and pagination
26
+
27
+ The gateway success envelope contains `data.items`, `total`, `limit`, `offset`, `has_more`, and `next_offset`. Each group item has `group_id`, `group_name`, `is_default`, and `member_count`.
28
+
29
+ When `has_more` is true, repeat with the returned `next_offset`. Continue until `has_more` is false before claiming a complete list; a page can contain at most 1000 rows. Preserve any `request_id` and `invocation_id` in the gateway metadata. A permission error does not mean the project or group is empty.
@@ -0,0 +1,28 @@
1
+ # project member-group members
2
+
3
+ Use when the user needs to inspect the members of an existing project member group under Project management → Member management → Member groups.
4
+
5
+ Do not use this command for AgentSpace/system membership or analysis user-cluster/user-tag audiences. Project member-group membership is separate from project membership; use `project member list` to discover project members. Use `project member-group list` to resolve the group ID first.
6
+
7
+ ```bash
8
+ ae-cli project member-group members --project-id 1 --group-id 20 --limit 100 --offset 0
9
+ ```
10
+
11
+ Capability ID: `project.member_group.members`. Risk: `read`. Requires the project's `VIEW_PROJECT_MEMBER` permission.
12
+
13
+ ## Parameters
14
+
15
+ | Flag | Required | Meaning |
16
+ |---|---|---|
17
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
18
+ | `--group-id` | Yes | Integer ID from 1 to 2147483647 returned by `project member-group list` for this project. |
19
+ | `--limit` | No | Integer page size from 1 to 1000; default 100. |
20
+ | `--offset` | No | Integer row offset from 0 to 2147483647; default 0. |
21
+
22
+ The gateway input uses `project_id`, `group_id`, `limit`, and `offset`.
23
+
24
+ ## Output and pagination
25
+
26
+ The gateway success envelope contains `data.items`, `total`, `limit`, `offset`, `has_more`, and `next_offset`. The result also identifies `group_id`; each member item has `user_id`, `login_name`, and `user_name`.
27
+
28
+ When `has_more` is true, repeat with the returned `next_offset`. Continue until `has_more` is false before claiming a complete list; a page can contain at most 1000 rows. Preserve any `request_id` and `invocation_id` in the gateway metadata. A permission error does not mean the project or group is empty.
@@ -0,0 +1,35 @@
1
+ # project member-group remove-members
2
+
3
+ Use when the user explicitly requests removing members from an existing project member group.
4
+
5
+ Do not use this command to remove a user from the project or company, change roles, create/delete a group, rename it, or change its default-join setting. AgentSpace/system membership and analysis user-cluster/user-tag audiences use their own command families.
6
+
7
+ 1. Resolve the target group with `project member-group list` and read its members with `project member-group members`, following pagination as needed. Use returned numeric `user_id` values, including retained inactive or former project members; do not substitute login names or open IDs.
8
+ 2. Preview the exact change:
9
+
10
+ ```bash
11
+ ae-cli project member-group remove-members --project-id 1 --group-id 20 --user-ids '[101,102]' --dry-run
12
+ ```
13
+
14
+ 3. Summarize the project, group, and requested member changes. After explicit user confirmation, execute the unchanged request with global `--yes`:
15
+
16
+ ```bash
17
+ ae-cli project member-group remove-members --project-id 1 --group-id 20 --user-ids '[101,102]' --yes
18
+ ```
19
+
20
+ Capability ID: `project.member_group.remove_members`. Risk: `high-risk-write`. Requires the project's `MAINTAIN_PROJECT_USER` permission. Non-interactive execution requires `--yes`; dry-run does not modify membership.
21
+
22
+ ## Parameters
23
+
24
+ | Flag | Required | Meaning |
25
+ |---|---|---|
26
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
27
+ | `--group-id` | Yes | Integer ID from 1 to 2147483647 of an existing group in this project. |
28
+ | `--user-ids` | Yes | JSON array containing 1 to 1000 integer user IDs from 1 to 2147483647, for example `[101,102]`. Strings, non-integers, zero, and negative IDs are rejected. |
29
+ | `--yes` | Execution | Global confirmation flag after explicit authorization. |
30
+
31
+ The gateway input uses `project_id`, `group_id`, `user_ids`, and `yes: true`. The server applies the requested membership delta atomically, preserving the group name, default-join setting, and other group members. An existing group membership can be removed even after that user becomes inactive or leaves the project. A current project member already absent from the group is an idempotent no-op; an ID belonging to neither this project nor this group is rejected. Do not send a replacement member list or call the page's full-group save interface.
32
+
33
+ ## Output
34
+
35
+ The gateway success envelope returns `group_id`, `requested_user_ids`, `changed_user_ids`, and the resulting `member_count` in `data`. Use `changed_user_ids` to report the actual change rather than assuming every requested ID changed. Read back with `project member-group members` when the user needs the resulting membership. Preserve any `request_id` and `invocation_id` in metadata; report gateway permission or membership-validation failures without claiming success.
@@ -0,0 +1,26 @@
1
+ # project member-group rename
2
+
3
+ Use when the user needs to rename an existing project member group.
4
+
5
+ Do not use this command to replace group members, change roles, or change the default-join setting. The rename preserves all existing group memberships and the group's default-join setting. Resolve the exact group ID with `project member-group list` before modifying it.
6
+
7
+ ```bash
8
+ ae-cli project member-group rename --project-id 1 --group-id 20 --group-name 'Customer Success' --dry-run
9
+ ae-cli project member-group rename --project-id 1 --group-id 20 --group-name 'Customer Success'
10
+ ```
11
+
12
+ Capability ID: `project.member_group.rename`. Risk: `write`. Requires the project's `MAINTAIN_PROJECT_USER` permission.
13
+
14
+ ## Parameters
15
+
16
+ | Flag | Required | Meaning |
17
+ |---|---|---|
18
+ | `--project-id` | Yes | Integer project ID from 1 to 2147483647. |
19
+ | `--group-id` | Yes | Integer ID from 1 to 2147483647 of an existing group in this project. |
20
+ | `--group-name` | Yes | Non-blank group name of 1 to 80 characters. |
21
+
22
+ The gateway input uses `project_id`, `group_id`, and `group_name`. Send only the new name; do not copy and resubmit a page-level group member list.
23
+
24
+ ## Output
25
+
26
+ The gateway success envelope returns `group_id` and the resulting `group_name` in `data`. Read back with `project member-group list` to verify the name. If the user needs membership evidence, use `project member-group members` and follow its pagination. Preserve any `request_id` and `invocation_id` in metadata; a permission failure is not a successful rename.