@thinkingai/ae-cli 6.1.11 → 6.1.13

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 (150) 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-TAMDRZYV.js} +23 -10
  6. package/dist/{capability-VQNC5CF7.js → capability-U7TDEEEG.js} +23 -10
  7. package/dist/{chunk-GJJA4CQZ.js → chunk-3FY3RJ26.js} +0 -4
  8. package/dist/{chunk-GS2P7LFD.js → chunk-5XUSIK27.js} +2 -2
  9. package/dist/{chunk-7KQWSBSL.js → chunk-753BUTNZ.js} +3 -3
  10. package/dist/{chunk-VTXHDCBW.js → chunk-AFXA7BRK.js} +2 -2
  11. package/dist/chunk-IBH3LDAH.js +556 -0
  12. package/dist/{chunk-RBNKI5ZW.js → chunk-JUW4AJXN.js} +2 -2
  13. package/dist/{chunk-TS6BUGUY.js → chunk-QATA32VR.js} +3 -3
  14. package/dist/{chunk-Z3OXWCIA.js → chunk-S5NTSDBS.js} +2 -2
  15. package/dist/chunk-UIHQJK5E.js +556 -0
  16. package/dist/{chunk-VKD5WQKN.js → chunk-VLWOLBGZ.js} +142 -24
  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 +25 -38
  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-UORZTW3T.js} +21 -11
  26. package/dist/{metadata-ZRN2GHPN.js → metadata-VVQ3AQT5.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-KOKHJJPE.js} +1225 -450
  31. package/dist/{te-analysis-N2BRDJZ5.js → te-analysis-LLOCCBJ4.js} +1225 -450
  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-F7V55KVW.js → te-engage-BRLSRVQT.js} +960 -41
  37. package/dist/{te-engage-FMYAYCNV.js → te-engage-HE4OPZIT.js} +960 -41
  38. package/dist/{te-experiment-JWXOYJ3W.js → te-experiment-K5US7RMG.js} +115 -9
  39. package/dist/{te-experiment-UPDMHCAJ.js → te-experiment-WA7TFMEL.js} +115 -9
  40. package/dist/{te-kb-VRMEY3D4.js → te-kb-OIH3T6CS.js} +4 -4
  41. package/dist/{te-system-XGS5EQIQ.js → te-system-AZ3URMUO.js} +515 -11
  42. package/dist/{te-team-BZRDV2CM.js → te-team-GZPU6UWA.js} +5 -5
  43. package/dist/{update-HEDXGOJH.js → update-TOBFXF2V.js} +4 -4
  44. package/package.json +6 -6
  45. package/skills/ae-agent/SKILL.md +3 -3
  46. package/skills/ae-agent/references/list-skill-references.md +4 -4
  47. package/skills/ae-agent/references/read-skill-reference.md +10 -7
  48. package/skills/ae-agent/references/upload-skill-reference.md +11 -9
  49. package/skills/ae-analysis/SKILL.md +15 -12
  50. package/skills/ae-analysis/metadata_resolution.md +150 -0
  51. package/skills/ae-analysis/references/adhoc_export.md +17 -2
  52. package/skills/ae-analysis/references/adhoc_run.md +12 -8
  53. package/skills/ae-analysis/references/ai_models.md +31 -5
  54. package/skills/ae-analysis/references/analysis_data_retrieval.md +104 -16
  55. package/skills/ae-analysis/references/analysis_drilldown_contract.md +4 -4
  56. package/skills/ae-analysis/references/analysis_gateway_assets.md +12 -10
  57. package/skills/ae-analysis/references/artifact_download.md +4 -3
  58. package/skills/ae-analysis/references/asset_abnormal_list.md +5 -3
  59. package/skills/ae-analysis/references/asset_authentication_list.md +5 -3
  60. package/skills/ae-analysis/references/asset_search.md +5 -3
  61. package/skills/ae-analysis/references/bi_panel_page_data_export.md +1 -1
  62. package/skills/ae-analysis/references/bi_panel_page_data_run.md +4 -4
  63. package/skills/ae-analysis/references/catalog_export.md +28 -0
  64. package/skills/ae-analysis/references/catalog_list.md +44 -0
  65. package/skills/ae-analysis/references/command_index.md +72 -63
  66. package/skills/ae-analysis/references/dashboard_report_data_run.md +11 -4
  67. package/skills/ae-analysis/references/datatable_version_list.md +5 -3
  68. package/skills/ae-analysis/references/drilldown_entities_run.md +4 -4
  69. package/skills/ae-analysis/references/drilldown_events_run.md +2 -2
  70. package/skills/ae-analysis/references/drilldown_user_events_export.md +1 -1
  71. package/skills/ae-analysis/references/drilldown_user_events_run.md +2 -2
  72. package/skills/ae-analysis/references/entity_detail_run.md +4 -4
  73. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  74. package/skills/ae-analysis/references/event_detail_run.md +4 -4
  75. package/skills/ae-analysis/references/event_export.md +21 -0
  76. package/skills/ae-analysis/references/event_list.md +7 -6
  77. package/skills/ae-analysis/references/exchange_rule_list.md +5 -3
  78. package/skills/ae-analysis/references/history_tag_data_drilldown_export.md +4 -2
  79. package/skills/ae-analysis/references/history_tag_data_drilldown_run.md +2 -2
  80. package/skills/ae-analysis/references/history_tag_data_run.md +2 -2
  81. package/skills/ae-analysis/references/metric_export.md +21 -0
  82. package/skills/ae-analysis/references/metric_list.md +8 -7
  83. package/skills/ae-analysis/references/property_export.md +21 -0
  84. package/skills/ae-analysis/references/property_list.md +9 -8
  85. package/skills/ae-analysis/references/query_context_get.md +20 -0
  86. package/skills/ae-analysis/references/query_create_result_cluster.md +1 -1
  87. package/skills/ae-analysis/references/report_change_log_list.md +1 -1
  88. package/skills/ae-analysis/references/report_create.md +3 -3
  89. package/skills/ae-analysis/references/report_data_run.md +8 -8
  90. package/skills/ae-analysis/references/report_update.md +3 -3
  91. package/skills/ae-analysis/references/report_version_rollback.md +1 -1
  92. package/skills/ae-analysis/references/rule_list.md +6 -4
  93. package/skills/ae-analysis/references/run_inspect.md +8 -5
  94. package/skills/ae-analysis/references/run_wait.md +37 -0
  95. package/skills/ae-analysis/references/user_cluster_export.md +13 -0
  96. package/skills/ae-analysis/references/user_cluster_list.md +6 -2
  97. package/skills/ae-analysis/references/user_cluster_member_export.md +5 -3
  98. package/skills/ae-analysis/references/user_cluster_member_list.md +4 -4
  99. package/skills/ae-analysis/references/user_tag_export.md +13 -0
  100. package/skills/ae-analysis/references/user_tag_list.md +6 -2
  101. package/skills/ae-analysis/references/user_tag_member_export.md +5 -3
  102. package/skills/ae-analysis/references/user_tag_member_list.md +4 -4
  103. package/skills/ae-analysis/references/virtual_property_create.md +2 -2
  104. package/skills/ae-community/SKILL.md +2 -2
  105. package/skills/ae-dataops/SKILL.md +4 -3
  106. package/skills/ae-dataops/references/dataops-flow-create.md +47 -3
  107. package/skills/ae-engage/SKILL.md +57 -7
  108. package/skills/ae-engage/references/activity-data-detail.md +61 -0
  109. package/skills/ae-engage/references/build-task-save-guide.md +37 -1
  110. package/skills/ae-engage/references/cancel-query-run.md +31 -0
  111. package/skills/ae-engage/references/common-metric.md +45 -0
  112. package/skills/ae-engage/references/config-item-analysis-report.md +14 -1
  113. package/skills/ae-engage/references/config-item-strategy-comparison.md +11 -1
  114. package/skills/ae-engage/references/config-item-trigger-report.md +15 -1
  115. package/skills/ae-engage/references/flow-metric-detail-report.md +134 -0
  116. package/skills/ae-engage/references/flow-metric-update.md +77 -0
  117. package/skills/ae-engage/references/flow-metric-user.md +118 -0
  118. package/skills/ae-engage/references/flow-node-metric-user.md +122 -0
  119. package/skills/ae-engage/references/flow-node-user.md +122 -0
  120. package/skills/ae-engage/references/preset-event.md +2 -0
  121. package/skills/ae-engage/references/push-record-query.md +32 -1
  122. package/skills/ae-engage/references/save-flow.md +14 -0
  123. package/skills/ae-engage/references/save-task.md +44 -0
  124. package/skills/ae-engage/references/scene-strategy-audience.md +12 -7
  125. package/skills/ae-engage/references/task-data-detail.md +9 -2
  126. package/skills/ae-engage/references/task-metric-detail.md +9 -2
  127. package/skills/ae-engage/references/task-submit-approval.md +3 -0
  128. package/skills/ae-experiment/SKILL.md +17 -4
  129. package/skills/ae-experiment/references/delete_metric.md +2 -0
  130. package/skills/ae-experiment/references/query_experiment_metric_trend.md +5 -5
  131. package/skills/ae-experiment/references/query_experiment_report_summary.md +4 -3
  132. package/skills/ae-experiment/references/query_experiment_sample_size_report.md +6 -5
  133. package/skills/ae-experiment/references/save_build_guide.md +39 -0
  134. package/skills/ae-experiment/references/save_experiment.md +11 -0
  135. package/skills/ae-experiment/references/save_metric.md +5 -1
  136. package/skills/ae-experiment/references/save_validate.md +33 -0
  137. package/skills/ae-experiment-design/SKILL.md +1 -1
  138. package/skills/ae-experiment-design/references/platform-operations.md +10 -4
  139. package/skills/ae-experiment-insight/references/platform-operations.md +10 -4
  140. package/skills/ae-metadata/SKILL.md +2 -1
  141. package/skills/ae-metadata/references/metadata_data_table_download.md +10 -2
  142. package/skills/ae-metadata/references/metadata_data_table_list.md +5 -2
  143. package/skills/ae-system/SKILL.md +66 -3
  144. package/dist/chunk-DT6Y3TD7.js +0 -232
  145. package/dist/chunk-MVDZ7DBQ.js +0 -231
  146. package/dist/chunk-NBPKWKRA.js +0 -51
  147. package/dist/client-DAIPF7XN.js +0 -23
  148. package/dist/raw-52B4UKO4.js +0 -71
  149. package/dist/te-meta-53BVXPFI.js +0 -95
  150. package/dist/te-meta-TOCBPBXI.js +0 -95
@@ -27,6 +27,8 @@ Provide exactly one of `--task-id` or `--request`.
27
27
 
28
28
  - Prefer `task save` followed by `submit-approval --task-id`. The server loads the persisted draft, validates its
29
29
  trigger rule, and reuses the existing save-and-submit approval workflow.
30
+ - Never put `taskId` or `task_id` inside `--request`. Existing drafts must use `--task-id`; embedded task IDs fail
31
+ with `REQUEST_TASK_ID_NOT_ALLOWED` so request fields are never silently discarded.
30
32
  - Do not reconstruct or pass `trigger_rule`. It is an internal persisted field.
31
33
  - The legacy `--request` mode remains available for existing callers.
32
34
  - Required body fields (server validates): `task_name`, `channel_type`, `channel_id`, `group_content_list`, `target_cluster_type`, `trigger_type`, `completion_indicator_def`, `frequency_limits`, `enable_channel_touch_limits`, `group_id`, `trigger_time_strategy`.
@@ -41,5 +43,6 @@ Provide exactly one of `--task-id` or `--request`.
41
43
  |---|---|
42
44
  | `APPROVAL_INPUT_INVALID` | neither or both of `task_id` and `request` supplied |
43
45
  | `REQUEST_REQUIRED` | `--request` missing or not an object |
46
+ | `REQUEST_TASK_ID_NOT_ALLOWED` | `request.taskId` or `request.task_id` supplied; use `--task-id` |
44
47
  | `REQUEST_FIELDS_REQUIRED` | required body fields absent/blank |
45
48
  | `CAPABILITY_EXECUTION_FAILED` | unmapped domain failure; check `invocation_id` / Hermes logs |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ae-experiment
3
- version: 1.0.0
3
+ version: 1.0.1
4
4
  description: "Use when managing Atlas AB experiments, traffic layers, Features, metrics, buckets, and experiment reports through ae-cli"
5
5
  ---
6
6
 
@@ -14,6 +14,7 @@ AE CLI (`ae-cli`) exposes Atlas AB Experiment capabilities through the `experime
14
14
  - Use `--project-id` / `-p` for project-scoped commands.
15
15
  - Use `--req` JSON for complex save, status, and delete DTOs.
16
16
  - Do not invent experiment IDs, traffic layer IDs, bucket IDs, Feature keys, metric IDs, or payload field names.
17
+ - Bind only metric IDs returned by `experiment metric list`; create and verify a missing metric before saving the experiment.
17
18
  - Read commands can run directly after IDs are verified.
18
19
  - Write commands require explicit user intent and normally keep the confirmation prompt. Use `--dry-run` before write calls when composing JSON.
19
20
 
@@ -22,6 +23,12 @@ Naming and response boundary:
22
23
  - CLI command segments and flags use kebab-case.
23
24
  - Outer Capability input and all response keys use snake_case.
24
25
  - Nested business DTOs passed through `--req` keep their native camelCase fields.
26
+ - **CRITICAL:** `save build-guide` / `save validate` responses recursively snake_case
27
+ `example_args.req`. Never copy those keys into `--req`. Use camelCase
28
+ (`expName`, `metricId`, …). Authoritative names:
29
+ `ae-cli capability inspect experiment.experiment.save` (or the matching final save id)
30
+ → `input_schema.properties.req`. `save validate` `valid: true` is **not** a final-save
31
+ schema pass — snake_case `req` can still fail on `experiment … save`.
25
32
  - Audience QP is semantic at the CLI boundary: write `targeting.definitionRequest`; read
26
33
  `targeting.definition_request`. Never generate or submit `targetConfig`.
27
34
  - Metric QP is semantic at the CLI boundary: write `metricDefinition`; read
@@ -52,7 +59,9 @@ Naming and response boundary:
52
59
  4. Check readiness with `experiment experiment ready-check`.
53
60
  5. For a non-mutex traffic layer, run `experiment experiment conflict-check` before submit (needs `feature_key_list` from context or `experiment get`).
54
61
  6. Move status with `experiment experiment manage`.
55
- 7. Query reports with summary, sample-size, and metric-trend commands.
62
+ 7. Query reports with `experiment report summary`, `experiment report sample-size`, and `experiment report metric-trend`.
63
+
64
+ If an experiment save returns `error_code: METRIC_NOT_FOUND`, list metrics for the same project. Create and verify the metric before retrying; never retry with another invented ID. Metric deletion returns `error_code: METRIC_IN_USE` while an active experiment binding exists.
56
65
 
57
66
  ## Parameter Conventions
58
67
 
@@ -62,7 +71,7 @@ Naming and response boundary:
62
71
  ae-cli experiment experiment get --project-id 1 --exp-id exp_123
63
72
  ae-cli experiment experiment save --project-id 1 --req '{"expName":"Demo"}' --dry-run
64
73
  ae-cli experiment metric save --project-id 1 --req '{"metricId":"login_users","metricName":"Login users","createType":"event","goalDirection":"up","metricDesc":"Users who logged in","metricDefinition":{"type":"event","event":"login","aggregation":"user_count"}}' --dry-run
65
- ae-cli capability run experiment.report.metric-trend --input '{"project_id":1,"exp_id":"exp_123","metric_id":"metric_1","start_time":"2026-07-01","end_time":"2026-07-07"}'
74
+ ae-cli experiment report metric-trend --project-id 1 --exp-id exp_123 --metric-id metric_1 --start-time 2026-07-01 --end-time 2026-07-07
66
75
  ```
67
76
 
68
77
  Optional global parameters work as in other domains: `--host`, `--mcp-url`, `--format`, `--jq`, `--dry-run`, and `--yes`.
@@ -77,6 +86,10 @@ Open the matching file in `references/` before using a command, especially for w
77
86
 
78
87
  When a save command returns `next_tool: experiment.save.build-guide`, call the guide first, then `experiment save validate`, then retry the final save capability.
79
88
 
89
+ Read [`save_build_guide.md`](references/save_build_guide.md) and
90
+ [`save_validate.md`](references/save_validate.md) before using these helpers. Rebuild
91
+ `--req` in camelCase from `inspect` / skill references; do not paste `example_args.req`.
92
+
80
93
  ### Experiment
81
94
 
82
95
  `experiment experiment save`, `capability run experiment.experiment.save-submit`, `experiment experiment list`, `experiment experiment list-archived`, `experiment experiment get`, `experiment experiment ready-check`, `experiment experiment conflict-check`, `experiment experiment manage`, `experiment experiment update-group`, `experiment experiment batch-delete`, `experiment operation-log query`
@@ -87,7 +100,7 @@ When a save command returns `next_tool: experiment.save.build-guide`, call the g
87
100
 
88
101
  ### Reports
89
102
 
90
- `capability run experiment.report.summary`, `capability run experiment.report.sample-size`, `capability run experiment.report.metric-trend`, `capability run experiment.query.cancel`
103
+ `experiment report summary`, `experiment report sample-size`, `experiment report metric-trend`, `capability run experiment.query.cancel`
91
104
 
92
105
  ### Metric and Feature
93
106
 
@@ -9,3 +9,5 @@ ae-cli experiment metric delete --project-id <id> --metric-id <metricId> [--yes]
9
9
  Flags:
10
10
  - `--project-id`, `-p`: Project ID.
11
11
  - `--metric-id`: Metric ID.
12
+
13
+ Deletion is rejected with `error_code: METRIC_IN_USE` while the metric has an active experiment binding. Remove the metric from the related experiment before retrying.
@@ -1,12 +1,12 @@
1
- # capability run experiment.report.metric-trend
1
+ # experiment report metric-trend
2
2
 
3
3
  Query experiment metric trend report.
4
4
 
5
5
  ```bash
6
- ae-cli capability run experiment.report.metric-trend --input '{"project_id":1,"exp_id":"exp_123","metric_id":"metric_1","start_time":"2026-07-01","end_time":"2026-07-07"}'
6
+ ae-cli experiment report metric-trend --project-id 1 --exp-id exp_123 --metric-id metric_1 --start-time 2026-07-01 --end-time 2026-07-07
7
7
  ```
8
8
 
9
- Required input: `project_id`, `exp_id`, `metric_id`, `start_time`, `end_time`.
10
- Optional input: `request_id`, `force_refresh`.
9
+ Required flags: `--project-id`, `--exp-id`, `--metric-id`, `--start-time`, `--end-time`.
10
+ Optional: `--request-id`, `--force-refresh`.
11
11
 
12
- Response shape: `data.report`, with recursively snake_case keys. Preserve `request_id` for cancellation.
12
+ Response shape: `data.report`, with recursively snake_case keys. Preserve `request_id` for cancellation via `capability run experiment.query.cancel`.
@@ -1,11 +1,12 @@
1
- # capability run experiment.report.summary
1
+ # experiment report summary
2
2
 
3
3
  Query experiment report summary.
4
4
 
5
5
  ```bash
6
- ae-cli capability run experiment.report.summary --input '{"project_id":1,"exp_id":"exp_123","force_refresh":false}'
6
+ ae-cli experiment report summary --project-id 1 --exp-id exp_123
7
+ ae-cli experiment report summary --project-id 1 --exp-id exp_123 --force-refresh true
7
8
  ```
8
9
 
9
- Required input: `project_id`, `exp_id`. Optional input: `force_refresh`.
10
+ Required flags: `--project-id`, `--exp-id`. Optional: `--force-refresh`.
10
11
 
11
12
  Response shape: `data.report`, with recursively snake_case keys.
@@ -1,12 +1,13 @@
1
- # capability run experiment.report.sample-size
1
+ # experiment report sample-size
2
2
 
3
3
  Query experiment sample-size report.
4
4
 
5
5
  ```bash
6
- ae-cli capability run experiment.report.sample-size --input '{"project_id":1,"exp_id":"exp_123","start_time":"2026-07-01","end_time":"2026-07-07","by_hour":false}'
6
+ ae-cli experiment report sample-size --project-id 1 --exp-id exp_123 --start-time 2026-07-01 --end-time 2026-07-07
7
+ ae-cli experiment report sample-size --project-id 1 --exp-id exp_123 --start-time 2026-07-01 --end-time 2026-07-07 --by-hour true
7
8
  ```
8
9
 
9
- Required input: `project_id`, `exp_id`, `start_time`, `end_time`.
10
- Optional input: `request_id`, `force_refresh`, `by_hour`.
10
+ Required flags: `--project-id`, `--exp-id`, `--start-time`, `--end-time`.
11
+ Optional: `--request-id`, `--force-refresh`, `--by-hour`.
11
12
 
12
- Response shape: `data.report`, with recursively snake_case keys. Preserve `request_id` for cancellation.
13
+ Response shape: `data.report`, with recursively snake_case keys. Preserve `request_id` for cancellation via `capability run experiment.query.cancel`.
@@ -0,0 +1,39 @@
1
+ # experiment save build-guide
2
+
3
+ Build a read-only save guide for feature, traffic layer, experiment, or metric saves.
4
+
5
+ ```bash
6
+ ae-cli experiment save build-guide --project-id <id> --operation-mode save_experiment
7
+ ```
8
+
9
+ Flags:
10
+ - `--project-id`, `-p`: Project ID.
11
+ - `--operation-mode`: `save_feature`, `save_traffic_layer`, `save_experiment`, or `save_metric`.
12
+
13
+ ## CRITICAL — do not copy `example_args.req` keys verbatim
14
+
15
+ Guide responses are recursively snake_cased for display. That wrongly rewrites nested DTO
16
+ placeholders inside `data.guide.example_args.req` (for example `expName` → `exp_name`,
17
+ `metricId` → `metric_id`).
18
+
19
+ Those snake_case keys are **not** valid `--req` fields for the final save commands.
20
+
21
+ Authoritative field names:
22
+
23
+ | Mode | Inspect / final save | Nested `--req` style |
24
+ | --- | --- | --- |
25
+ | `save_experiment` | `experiment.experiment.save` | camelCase (`expName`, `trafficLayerId`, …) |
26
+ | `save_metric` | `experiment.metric.save` | camelCase (`metricId`, `metricDefinition`, …) |
27
+ | `save_feature` | `experiment.feature.save` | camelCase (`featureKey`, `targetPlatform`, …) |
28
+ | `save_traffic_layer` | `experiment.traffic-layer.save` | camelCase (`bucketId`, `layerName`, …) |
29
+
30
+ Before composing `--req`:
31
+
32
+ 1. Read `data.guide.required_fields` / `mode_rules` for **what** is required (names there may
33
+ already be camelCase).
34
+ 2. Treat `example_args.req` as structure-only placeholders; **rename keys to camelCase**.
35
+ 3. Prefer `ae-cli capability inspect <final-save-capability-id>` `input_schema.properties.req`
36
+ when unsure.
37
+ 4. Then run `experiment save validate` and the final `experiment … save`.
38
+
39
+ Response shape: `data.guide`.
@@ -16,6 +16,12 @@ Flags:
16
16
  - Capability input uses outer `project_id`; nested `req` fields remain native camelCase. Hermes overwrites `req.projectId` with the outer project ID.
17
17
  - Never call this with `req=null`, `req={}`, or a modify payload containing only `expId`; those are terminal validation failures.
18
18
  - On `valid=false`, do not retry the same payload. Fix the reported field(s) or ask the user for missing input.
19
+ - **Do not** paste `save build-guide` / `save validate` `example_args.req` keys into `--req`.
20
+ Those responses snake_case nested placeholders (`exp_name`). Final save requires camelCase
21
+ (`expName`, `expSupposition`, `trafficLayerId`, `featureKeyList`, `metrics[].metricId`, …).
22
+ If unsure, run `ae-cli capability inspect experiment.experiment.save` and copy
23
+ `input_schema.properties.req` field names. `save validate` may return `valid: true` for
24
+ snake_case `req` and still fail here with `unknown field …`.
19
25
 
20
26
  Response shape is `data.result`. Object keys inside the result are recursively snake_case. A create commonly returns the new experiment ID as `data.result`; a patch commonly returns `true`.
21
27
 
@@ -36,6 +42,7 @@ Nested payload fields must match the server DTO types, not just the visible CLI
36
42
  - `groups[].allocation` rule: each value must be an **integer**, and the **sum of all group allocations must equal `100` exactly** (for example `34 + 33 + 33 = 100`, not `33 + 33 + 33 = 99` and not decimal thirds).
37
43
  - `groups[].expGroupValue` is a JSON-encoded string of a string array. Pass a string whose content is a JSON array, not a native JSON array.
38
44
  - `metrics` is an array of metric binding objects. Each object contains `metricId` and `metricRole`.
45
+ - Every `metricId` must come from `experiment metric list` for the same project. If save returns `error_code: METRIC_NOT_FOUND`, create the metric with `experiment metric save`, verify it, and then retry the experiment save.
39
46
 
40
47
  ## Modes
41
48
 
@@ -103,6 +110,10 @@ ae-cli experiment experiment save --project-id 1 --req '{"expId":"exp_123","allo
103
110
  `targeting.definitionRequest`. Do not submit the internal `targeting.targetConfig`
104
111
  JSON or any `Cxx`/`Axxx` code. Resolve event and property names with Analysis
105
112
  metadata first.
113
+ - Avoid redundant adjacent `compound` groups with the same `relation`. Hermes
114
+ safely flattens those groups when an Atlas experiment is saved or submitted so
115
+ the generated cluster QP stays within the backend layer limit. Different
116
+ relations are always preserved.
106
117
 
107
118
  Semantic audience example:
108
119
 
@@ -8,10 +8,14 @@ ae-cli experiment metric save --project-id <id> --req '<json>'
8
8
 
9
9
  Flags:
10
10
  - `--project-id`, `-p`: Project ID.
11
- - `--req`: Metric save request JSON object.
11
+ - `--req`: Metric save request JSON object (**camelCase** keys such as `metricId`, `metricDefinition`).
12
12
 
13
13
  Create mode requires metric identifiers and metric configuration. Modify mode uses `update=true`.
14
14
 
15
+ Do not paste `save build-guide` / `save validate` `example_args.req` keys (`metric_id`, …) into
16
+ `--req`. Those responses snake_case nested placeholders; final save requires camelCase.
17
+ See [`save_build_guide.md`](save_build_guide.md) / [`save_validate.md`](save_validate.md).
18
+
15
19
  ## Semantic Metric Contract
16
20
 
17
21
  - Supply metric QP as `req.metricDefinition`.
@@ -0,0 +1,33 @@
1
+ # experiment save validate
2
+
3
+ Dry-run helper for save payloads. Does **not** persist data.
4
+
5
+ ```bash
6
+ ae-cli experiment save validate --project-id <id> --operation-mode save_experiment --req '{"expName":"Demo"}'
7
+ ```
8
+
9
+ Flags:
10
+ - `--project-id`, `-p`: Project ID.
11
+ - `--operation-mode`: `save_feature`, `save_traffic_layer`, `save_experiment`, or `save_metric`.
12
+ - `--req`: Candidate save request object. **Must use native camelCase DTO keys.**
13
+
14
+ ## CRITICAL — `valid: true` is not a save schema pass
15
+
16
+ `experiment.save.validate` checks operation-mode / outer helper contract. It does **not**
17
+ fully enforce the final save capability `input_schema`.
18
+
19
+ Consequences:
20
+
21
+ - `--req '{"exp_name":"Demo"}'` can return `valid: true`.
22
+ - The same payload fails on `experiment experiment save` with `unknown field exp_name`.
23
+
24
+ Rules:
25
+
26
+ 1. Never submit snake_case DTO keys in `--req` (`exp_name`, `metric_id`, `feature_key`, …).
27
+ 2. Do not trust `data.validation.example_args.req` key casing; rebuild with camelCase.
28
+ 3. After `valid: true`, still use camelCase and prefer
29
+ `ae-cli … save --dry-run` / `capability inspect` before a real write.
30
+ 4. On final save `INVALID_CAPABILITY_INPUT` / `unknown field`, fix casing — do not widen
31
+ the payload with more snake_case keys.
32
+
33
+ Response shape: `data.validation`.
@@ -9,7 +9,7 @@ Turn a business objective into an evidence-backed experiment design, an implemen
9
9
 
10
10
  ## Hard boundaries
11
11
 
12
- - Use `ae-cli` for every AE/TE platform interaction. Do not substitute raw HTTP, browser automation, direct database queries, MCP tools, or application SDKs.
12
+ - Use `ae-cli` for every AE/TE platform interaction. Do not substitute raw HTTP, browser automation, direct database queries, or application SDKs.
13
13
  - Do not infer an SDK request from the fact that an experiment needs implementation. Load SDK references only when the user explicitly asks about an A/B experiment SDK or client SDK integration.
14
14
  - Do not copy general tracking SDK documentation into this Skill. Route generic initialization, event reporting, `track`, user identity, user properties, data upload, LogBus, and REST questions to `ae-data-integration-helper` when that Skill is available.
15
15
  - Use only the event-metric calculation contracts defined in
@@ -4,12 +4,12 @@ Read this reference before any AE/TE platform interaction.
4
4
 
5
5
  ## Hard boundary
6
6
 
7
- All platform operations must use `ae-cli`. Do not call raw APIs, use browser automation, query a database, invoke te-mcp, or fabricate a platform result.
7
+ Use `ae-cli` for all platform operations. Do not call raw APIs, use browser automation, query a database, or fabricate a platform result.
8
8
 
9
9
  Use curated commands when their contract is known. Use the Capability Gateway for experiment capabilities that do not yet have a curated command:
10
10
 
11
11
  ```bash
12
- ae-cli capability search "<terms>" [--project-id <id>]
12
+ ae-cli capability search "<terms>" --domain <domain> [--project-id <id>]
13
13
  ae-cli capability inspect <capability-id> --project-id <id>
14
14
  ae-cli capability validate <capability-id> --input '<json-object>'
15
15
  ae-cli capability dry-run <capability-id> --input '<json-object>'
@@ -30,10 +30,16 @@ After every `ae-cli` invocation, inspect stderr and `_notice.host_compat`. If a
30
30
 
31
31
  ## Project gate
32
32
 
33
- Resolve an unverified project through:
33
+ When the user supplies a project ID, resolve it directly:
34
34
 
35
35
  ```bash
36
- ae-cli analysis project info list --query "<project name>" --fields '["project_id","project_name"]' --limit 20 --offset 0
36
+ ae-cli project info get --project-id <id>
37
+ ```
38
+
39
+ When the user supplies only a project name, search and disambiguate:
40
+
41
+ ```bash
42
+ ae-cli project info list --query "<project name>" --fields '["project_id","project_name"]' --limit 20 --offset 0
37
43
  ```
38
44
 
39
45
  Reuse a project only when its ID and host were verified in the same continuous conversation. If multiple projects match, stop and ask the user to choose.
@@ -4,12 +4,12 @@ Read this reference before retrieving any AE/TE experiment evidence.
4
4
 
5
5
  ## Hard boundary
6
6
 
7
- All platform discovery and reads must use `ae-cli`. Do not call raw APIs, use browser automation, query a database, invoke te-mcp, or invent report values.
7
+ Use `ae-cli` for all platform discovery and reads. Do not call raw APIs, use browser automation, query a database, or invent report values.
8
8
 
9
9
  Use the Capability Gateway when no curated experiment command exists:
10
10
 
11
11
  ```bash
12
- ae-cli capability search "<terms>" [--project-id <id>]
12
+ ae-cli capability search "<terms>" --domain <domain> [--project-id <id>]
13
13
  ae-cli capability inspect <capability-id> --project-id <id>
14
14
  ae-cli capability run <capability-id> --input '<json-object>'
15
15
  ```
@@ -22,10 +22,16 @@ After every `ae-cli` invocation, inspect stderr and `_notice.host_compat`. If pr
22
22
 
23
23
  ## Resolution gates
24
24
 
25
- Resolve the project first:
25
+ When the user supplies a project ID, resolve it directly:
26
26
 
27
27
  ```bash
28
- ae-cli analysis project info list --query "<project name>" --fields '["project_id","project_name"]' --limit 20 --offset 0
28
+ ae-cli project info get --project-id <id>
29
+ ```
30
+
31
+ When the user supplies only a project name, search and disambiguate:
32
+
33
+ ```bash
34
+ ae-cli project info list --query "<project name>" --fields '["project_id","project_name"]' --limit 20 --offset 0
29
35
  ```
30
36
 
31
37
  Then discover experiment list/get capabilities and resolve the exact experiment by verified ID or exact-match name. If multiple candidates remain, ask the user.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ae-metadata
3
- version: 1.0.0
3
+ version: 1.0.1
4
4
  description: "AE/TE metadata capability-gateway CLI: metadata data-table management and property dimension-table binding. Metadata CLI routes through the analysis gateway. Input-file upload and event/property detail belong to ae-analysis."
5
5
  ---
6
6
 
@@ -30,6 +30,7 @@ Safety:
30
30
  - Ordinary writes (`data-table *-write`, `property-bindings-update`, dimension-table bind/create) execute without `--yes`. Delete commands are `high-risk-write`: dry-run first, summarize impact, wait for explicit confirmation, then execute with `--yes`.
31
31
  - **Before any command**, read the matching `references/<name>.md` (filename = command with spaces → underscores, e.g. `metadata data-table list` → `metadata_data_table_list.md`).
32
32
  - Never invent `project_id`, event/property names, `input_file_id`, or `data_table_id`. Discover names via `ae-analysis` and data table IDs via `metadata data-table list`.
33
+ - `metadata data-table download` is an async artifact command: plain invocation submits, `--wait` waits, and `--output <file>` waits then streams atomically. Resume with `analysis run wait`; local interruption never cancels the remote run.
33
34
 
34
35
  ## When to Use
35
36
 
@@ -5,6 +5,7 @@
5
5
  ```bash
6
6
  ae-cli metadata data-table download --project-id <project_id> --data-table-id <id>
7
7
  ae-cli metadata data-table download --project-id <project_id> --data-table-id <id> --request-id cli_0123456789abcdef0123456789abcdef --timeout-seconds 120
8
+ ae-cli metadata data-table download --project-id <project_id> --data-table-id <id> --output <file>
8
9
  ```
9
10
 
10
11
  | Parameter | Required | Description |
@@ -12,6 +13,13 @@ ae-cli metadata data-table download --project-id <project_id> --data-table-id <i
12
13
  | `--project-id` / `-p` | Yes | Numeric project ID. |
13
14
  | `--data-table-id` | Yes | Data table ID. |
14
15
  | `--request-id` | No | Optional `cli_<32 lowercase hex>` request ID. |
15
- | `--timeout-seconds` | No | Timeout in seconds, 1 to 7200. |
16
+ | `--timeout-seconds` | No | Remote runtime in seconds, 1 to 21600. |
17
+ | `--wait` | No | Wait for run `SUCCEEDED` and artifact `COMPLETED`. |
18
+ | `--output` | No | Wait, then stream and atomically publish the artifact to this file. |
19
+ | `--force` | No | Replace an existing `--output` file atomically; invalid without `--output`. |
16
20
 
17
- Use this command when the user needs an exported data-table artifact.
21
+ Use this command when the user needs an exported data-table artifact. Plain
22
+ invocation submits only. `--output` implies `--wait`; resume an interrupted
23
+ wait with `ae-cli analysis run wait --run-id <run_id> [--output <file>]`.
24
+ Local interruption never cancels the remote run. Do not use this command for
25
+ inline data-table metadata; use `metadata data-table get` instead.
@@ -5,7 +5,7 @@
5
5
  ## Command
6
6
 
7
7
  ```bash
8
- ae-cli metadata data-table list --project-id <project_id>
8
+ ae-cli metadata data-table list --project-id <project_id> --limit 50 --offset 0
9
9
  ae-cli metadata data-table list --project-id <project_id> --dry-run
10
10
  ```
11
11
 
@@ -14,14 +14,17 @@ ae-cli metadata data-table list --project-id <project_id> --dry-run
14
14
  | Parameter | Required | Description |
15
15
  |---|---|---|
16
16
  | `--project-id` / `-p` | Yes | Numeric project ID. |
17
+ | `--limit` / `-l` | No | Page size. Default: 50, maximum: 200. |
18
+ | `--offset` / `-o` | No | Zero-based page offset. Default: 0. |
17
19
 
18
20
  ## Request Body
19
21
 
20
22
  ```json
21
- { "project_id": 1 }
23
+ { "project_id": 1, "limit": 50, "offset": 0 }
22
24
  ```
23
25
 
24
26
  ## Decision Rules
25
27
 
26
28
  - Use this command to discover `data_table_id` before get, delete, download, or property binding.
27
29
  - If the list is empty, do not invent IDs; create/upload a table first or ask for the target table.
30
+ - Read rows from `data.items`; pagination metadata is always `total`, `limit`, `offset`, `has_more`, and `next_offset`.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ae-system
3
- version: 1.0.0
4
- description: "AE Agent system administration CLI for root and agent administrators. Use when the user asks to manage Agent members, sandboxes, company model visibility/defaults, usage statistics, cost quotas, balance alerts, or IM channels. Must use ae-cli system commands, discover real IDs before writes, and never attempt to bypass a permission denial."
3
+ version: 1.1.0
4
+ description: "AE Agent system administration CLI for root and agent administrators. Use when the user asks to manage Agent members, sandboxes and shared tools, company model visibility/defaults/pricing, usage statistics and exports, cost quotas, balance alerts, or IM channels. Must use ae-cli system commands, discover real IDs before writes, and never attempt to bypass a permission denial."
5
5
  ---
6
6
 
7
7
  # ae-system
@@ -19,11 +19,13 @@ ae-cli system +<command> [options]
19
19
  - Run `ae-cli auth login --host <host>` before using this domain. System administration requires a user access-token session; sandbox identity headers are not an authorization substitute.
20
20
  - `+npm-install` is the exception that must also run inside a Linux te-agent sandbox because it packages the installed Linux files. It still requires the logged-in user to be `root` or `agent_admin`.
21
21
  - Discover real IDs with a list command before any update or delete. Never guess a user, sandbox, model, quota rule, or channel ID.
22
- - Read and ordinary write commands run without confirmation. Commands marked `high-risk-write` require confirmation unless the user explicitly authorizes `--yes`.
22
+ - Before every write, run `--dry-run`, show the target and effect, and obtain explicit user confirmation. The CLI itself prompts only for `high-risk-write`; `--yes` can bypass that prompt and is not a security boundary.
23
23
  - Use `--dry-run` to inspect method, path, query, and redacted body without executing.
24
24
  - JSON inputs accept inline JSON, `@file`, or `-` for stdin. Prefer `@file` for channel credentials and other sensitive values.
25
25
  - Successful output is JSON by default. Use `--format table` only when a human-readable table is more useful.
26
26
  - After each command, check stderr and `_notice.host_compat`. If present, show the version warning and its update commands before the business result.
27
+ - Do not treat an absent ae-cli command as proof that an HTTP endpoint is unreachable. An Agent with Bash/network access can construct requests directly; server authentication, role checks, company isolation, and resource ownership are the actual controls.
28
+ - Do not call `DELETE /api/admin/members?openId=...` or `/api/internal/sandboxes/**` through ad-hoc HTTP. They are intentionally excluded from this Skill because other systems own those integration contracts.
27
29
 
28
30
  ## Command Groups
29
31
 
@@ -37,6 +39,7 @@ ae-cli system +<command> [options]
37
39
  | `+set-member-status` | write | Enable or disable a member. |
38
40
  | `+set-member-role` | write | Change a non-root member between `agent_admin` and `member`. |
39
41
  | `+remove-member` | high-risk-write | Remove a non-root member. |
42
+ | `+get-member-stats` | read | Get one member's token usage and recent conversation count. |
40
43
 
41
44
  Examples:
42
45
 
@@ -77,6 +80,7 @@ Optional flags are `--rule-id` and `--create-sandbox true|false`.
77
80
  | Command | Risk | Purpose |
78
81
  | --- | --- | --- |
79
82
  | `+list-sandboxes` | read | List company sandboxes. |
83
+ | `+get-sandbox-config` | read | Read feature status and create/active seat limits. |
80
84
  | `+batch-create-sandboxes` | write | Create personal sandboxes for 1-100 users. |
81
85
  | `+update-sandbox` | write | Update a sandbox description. |
82
86
  | `+set-sandbox-enabled` | write | Enable or disable a sandbox. |
@@ -106,9 +110,33 @@ Use Agent database user IDs from `+list-members`, not TE openIds, for sandbox co
106
110
  | --- | --- | --- |
107
111
  | `+upload-sandbox-tool` | write | Validate, ZIP, and upload an existing tool directory. |
108
112
  | `+npm-install` | write | Install one exact npm CLI version in a temporary sandbox directory, generate `tool.json`, and upload it. |
113
+ | `+list-sandbox-tools` | read | List preset and custom tools for the current company. |
114
+ | `+sync-sandbox-tools` | write | Synchronize preset tools from the server manifest. |
115
+ | `+get-sandbox-tool-distribution` | read | Read the sandboxes currently receiving one tool. |
116
+ | `+set-sandbox-tool-enabled` | write | Enable or disable one registered tool. |
117
+ | `+remove-sandbox-tool` | high-risk-write | Delete a fully reclaimed tool registration. |
118
+ | `+activate-sandbox-tools` | write | Activate selected commands on selected or all running sandboxes. |
119
+ | `+deactivate-sandbox-tools` | write | Remove managed command shims from selected or all running sandboxes. |
120
+ | `+refresh-sandbox-tool-status` | write | Refresh observed tool state on target sandboxes. |
121
+ | `+list-sandbox-tool-operations` | read | List activation/deactivation history. |
109
122
 
110
123
  Uploaded tools are registered for the current company with `enabled=false`. Upload does not activate the tool in any running sandbox. Review and enable/activate it through sandbox tool management after upload.
111
124
 
125
+ For activate/deactivate/status operations:
126
+
127
+ ```bash
128
+ ae-cli system +activate-sandbox-tools \
129
+ --target-mode selected \
130
+ --sandbox-ids '["<sandbox-id>"]' \
131
+ --tool-ids '["<tool-id>"]'
132
+ ```
133
+
134
+ - `--target-mode selected` requires 1-50 `--sandbox-ids`; `all-running` forbids them.
135
+ - `--tool-ids` contains 1-20 real IDs from `+list-sandbox-tools`.
136
+ - `--command-names-by-tool-id` optionally limits an operation to named commands.
137
+ - `--expected-tool-snapshots-by-id` carries the version/package/command snapshot returned by the server for optimistic concurrency checks.
138
+ - JSON maps accept inline JSON, `@file`, or stdin. Use dry-run and user confirmation before distribution changes.
139
+
112
140
  #### Preferred npm Flow
113
141
 
114
142
  Run this inside the target Linux te-agent sandbox:
@@ -189,6 +217,9 @@ Upload contract:
189
217
  | --- | --- | --- |
190
218
  | `+list-system-models` | read | List system models and company visibility. |
191
219
  | `+set-system-model-enabled` | write | Toggle a system model for the current company. |
220
+ | `+get-model-sync-settings` | read | Read the default visibility policy for newly synchronized system models. |
221
+ | `+set-model-sync-settings` | write | Update the new-system-model visibility policy. |
222
+ | `+get-system-model-price-rules` | read | Read one managed system model's stored pricing snapshot. |
192
223
  | `+list-company-models` | read | List company models, including disabled models. |
193
224
  | `+set-company-model-enabled` | write | Toggle a company model for all company users. |
194
225
  | `+get-default-models` | read | Read the `AE_AGENT` and `AI_QA` default slots. |
@@ -211,11 +242,16 @@ ae-cli system +set-default-model --model-id <model-id> --biz-type AE_AGENT
211
242
  | --- | --- | --- |
212
243
  | `+get-usage-summary` | read | Get token/cost summary for a relative or absolute range. |
213
244
  | `+get-usage-details` | read | Get paginated usage grouped by user, model, date, or application type. |
245
+ | `+get-agent-tool-calls` | read | Get Agent tool-call count for a range, optionally refreshing the cache. |
246
+ | `+get-usage-combinations` | read | Drill one parent group into the remaining dimensions. |
247
+ | `+export-usage` | read | Stream filtered one-dimension usage groups to CSV. |
248
+ | `+export-usage-details` | read | Stream full or drill-down multi-dimension details to CSV. |
214
249
 
215
250
  Examples:
216
251
 
217
252
  ```bash
218
253
  ae-cli system +get-usage-summary --days 30
254
+ ae-cli system +get-usage-summary --days 30 --refresh true
219
255
 
220
256
  ae-cli system +get-usage-details \
221
257
  --start-date 2026-07-01 \
@@ -223,12 +259,26 @@ ae-cli system +get-usage-details \
223
259
  --group-by user \
224
260
  --page 1 \
225
261
  --page-size 20
262
+
263
+ ae-cli system +get-usage-combinations \
264
+ --start-date 2026-07-01 \
265
+ --end-date 2026-07-24 \
266
+ --parent-dimension user \
267
+ --open-id <open-id>
268
+
269
+ ae-cli system +export-usage \
270
+ --start-date 2026-07-01 \
271
+ --end-date 2026-07-24 \
272
+ --group-by user \
273
+ --output ./system-usage.csv
226
274
  ```
227
275
 
228
276
  Summary range:
229
277
 
230
278
  - Use `--days 1..365`, or provide both `--start-date` and `--end-date`.
231
279
  - Dates use `YYYY-MM-DD`.
280
+ - Do not combine `--days` with an absolute date pair.
281
+ - `--refresh true` is available on `+get-usage-summary` and `+get-agent-tool-calls` and bypasses the overview cache.
232
282
 
233
283
  Details flags:
234
284
 
@@ -239,11 +289,22 @@ Details flags:
239
289
  - `--sort-by`: `totalTokens | cost | share | requestCount`.
240
290
  - `--sort-dir`: `asc | desc`.
241
291
 
292
+ Combination drill-down requires exactly one parent selector:
293
+
294
+ - `user` → `--open-id` only.
295
+ - `model` → `--model-id` and `--model-scope` only.
296
+ - `app_type` → `--app-type` only.
297
+ - `date` → `--date` only, inside the selected range.
298
+
299
+ CSV exports require an explicit `--output`. The target is created exclusively: an existing file is never overwritten, and an HTTP or stream failure removes the incomplete file. The JSON result reports the absolute local path, bytes written, server filename, and content type.
300
+
242
301
  ### Cost Control
243
302
 
244
303
  | Command | Risk | Purpose |
245
304
  | --- | --- | --- |
246
305
  | `+get-cost-summary` | read | Get company cost, quota, and usage summary. |
306
+ | `+get-balance` | read | Get the current model account balance and currency. |
307
+ | `+list-over-limit-users` | read | List members over cost or token quota limits. |
247
308
  | `+get-balance-alert` | read | Get balance alert config and current status. |
248
309
  | `+set-balance-alert` | write | Enable, update, or disable the balance alert. |
249
310
  | `+list-quota-rules` | read | List cost/token quota rules. |
@@ -347,6 +408,8 @@ On this response:
347
408
  2. Do not recommend re-login unless the server returned 401 instead.
348
409
  3. Tell the user that `root` or `agent_admin` is required.
349
410
 
411
+ An authenticated `root` or `agent_admin` is still scoped to their own company. The current service checks the database role and company against the session, and audited member, channel, sandbox-tool, and sandbox-management routes apply company/resource ownership checks. Never use that statement as a claim that every unreviewed admin route is safe.
412
+
350
413
  ## Transport Status
351
414
 
352
415
  This is a Transitional L2 domain backed by te-agent `/api/admin/**`.