@thinkingai/ae-cli 6.1.23 → 6.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkingai/ae-cli",
3
- "version": "6.1.23",
3
+ "version": "6.1.24",
4
4
  "description": "CLI tool for ThinkingAI (AE) analytics platform",
5
5
  "type": "module",
6
6
  "bin": {
@@ -67,7 +67,7 @@ Report review details must explain calculation logic and statistical measures, n
67
67
 
68
68
  Scripts may build the transport file, preserve IDs, copy evidence, normalize links, and run deterministic completeness checks. Scripts must not author page-visible `ai_summary.summary`, `analysis_explanation.*.statement`, limitations, open questions, or approval rationale by filling reusable sentence templates. Those fields must be Agent-written interpretation from the current asset/report evidence; if many submitted items share the same narrative shape after only asset names or numbers change, flag a quality failure and follow the bounded correction/warning procedure in `references/agent_review_preflight.md`.
69
69
 
70
- Page-visible review text is for human asset reviewers, not implementers. In `item.ai_summary.summary`, visible statements, and open questions, write plain business Chinese: what the asset is for, how it is calculated, which filters/date windows matter, and what the reviewer should confirm. Saved business event names and field names such as `agent_session_message_send`, `session_id`, and `response_duration` may appear when they help the reviewer verify the 口径. Do not expose internal evidence, parser terms, temporary SQL aliases, or runtime parameter names such as `SAVED_REPORT_ONLY`, `DYNAMIC`, `REPORT`, `T1`, `a0`, `a1`, `Variable2`, `selector3`, `PartDate date1`, `source_path`, `evidence_snapshot`, raw JSON, raw SQL, hash/revision details, dashboard override warnings, timezone-not-saved notes, or claims about query execution unless the user explicitly asks for debug evidence. Convert internal values before display, for example `T1`/`day` becomes `按天`, and dynamic SQL caveats become business confirmation items such as “确认参数含义、默认日期范围和是否包含测试数据”.
70
+ Page-visible review text is for human asset reviewers, not implementers. In `item.ai_summary.summary`, visible statements, and open questions, write plain business Chinese: what the asset is for, how it is calculated, which filters/date windows matter, and what the reviewer should confirm. Use event and property names from the current asset definition when they help the reviewer verify the calculation definition. Do not expose internal evidence, parser terms, temporary SQL aliases, or runtime parameter names such as `SAVED_REPORT_ONLY`, `DYNAMIC`, `REPORT`, `T1`, `a0`, `a1`, `Variable2`, `selector3`, `PartDate date1`, `source_path`, `evidence_snapshot`, raw JSON, raw SQL, hash/revision details, dashboard override warnings, timezone-not-saved notes, or claims about query execution unless the user explicitly asks for debug evidence. Convert internal values before display, for example `T1`/`day` becomes `按天`, and dynamic SQL caveats become business confirmation items such as “确认参数含义、默认日期范围和是否包含测试数据”.
71
71
 
72
72
  For real review-page submission, start with `analysis-meta governance-recommendation export --limit 20`. This is the initial candidate pool, not a required submission count. Follow the rejection filtering and bounded expansion procedure in `references/governance_recommendation_export.md`: hide each same-definition rejected dashboard's entire display branch, retain shared assets only under other retained dashboards, filter out already completed/authenticated, deferred, or in-flight assets as pending work, and expand an insufficient pool from 20 to 50 to 100, then stop. Expansion is for business-domain coverage, not unlimited workload: for recurring daily batches, target about 20-50 pending review assets, hard cap around 80, and balance roughly 3-6 visible domains with per-domain quotas before adding context. Use the latest successful export as the drafting evidence and report the actual reviewed scope plus overflow left for later batches. Do not compress eligible coverage into a few representative themes or submit only the first work unit unless the user requests a sample or diagnostic batch. Business themes organize the retained dashboard set; they do not replace its coverage. For recurring recommendation jobs, submit only business domains that still contain pending review assets; authenticated assets are supporting context under those visible domains, not standalone work. Do not write long Agent summaries for hidden domains or pure authenticated context.
73
73
 
@@ -131,7 +131,7 @@ Scripts may build the transport file, preserve IDs, copy evidence, normalize lin
131
131
 
132
132
  For dashboard, report, and SQL report drafts, write the page-visible explanation with the same intent as the project-KB source file's single `Agent 使用摘要`: business purpose, calculation caliber, input/date/filter meaning, output fields or measures, applicable questions, non-applicable questions, and concrete reviewer confirmations. The review page does not need a second SQL-specific section or a source-code reading note. If the packaged evidence includes SQL, use the SQL only as source material for business interpretation; keep raw SQL, parser output, and unresolved parameter tokens in `evidence_snapshot.analysis`. If a fact is not supported, write the business-facing unknown or confirmation question, for example "确认日期参数默认范围和是否包含测试数据", instead of copying `${PartDate:...}`, `selector3`, `parse_status`, or `DYNAMIC`.
133
133
 
134
- Write all page-visible review text for a business reviewer. `item.ai_summary.summary`, `business_purpose`, `calculations`, `filters`, `time_scope`, `limitations`, `open_questions`, and presentation labels must use plain Chinese that explains purpose, calculation 口径, date/filter choices, and reviewer action. Saved business event names and field names such as `agent_session_message_send`, `session_id`, and `response_duration` may appear when they help the reviewer verify the 口径. While drafting, avoid template copy such as “保存定义摘要”, “审核时需确认口径”, “本草稿不改写 SQL”, “其下报表和依赖元数据已随同提交审核”, or a sentence that only repeats asset name + heat + 未认证. Such copy is a quality finding handled by the bounded correction/warning procedure, not an unconditional dispatch ban. The item reason must answer why this exact asset is worth reviewing now, which saved definition facts support it, and what concrete risk remains. Keep implementation vocabulary out of visible text: do not show `SAVED_REPORT_ONLY`, `DYNAMIC`, `REPORT`, `T1`, temporary SQL aliases such as `a0`/`a1`, runtime parameter names such as `Variable2`/`selector3`/`PartDate date1`, `source_path`, `evidence_snapshot`, raw JSON, raw SQL, projection/select-column jargon, hash/revision values, dashboard-override limitations, timezone-not-saved notes, or “query not proven/executed/returned rows” caveats. Convert them to reviewer decisions only when material: for example `T1`/`day` means `按天`, and dynamic SQL parameter uncertainty becomes “确认参数含义、默认日期范围和是否包含测试数据”.
134
+ Write all page-visible review text for a business reviewer. `item.ai_summary.summary`, `business_purpose`, `calculations`, `filters`, `time_scope`, `limitations`, `open_questions`, and presentation labels must use plain Chinese that explains purpose, calculation 口径, date/filter choices, and reviewer action. Use event and property names from the current asset definition when they help the reviewer verify the calculation definition. While drafting, avoid template copy such as “保存定义摘要”, “审核时需确认口径”, “本草稿不改写 SQL”, “其下报表和依赖元数据已随同提交审核”, or a sentence that only repeats asset name + heat + 未认证. Such copy is a quality finding handled by the bounded correction/warning procedure, not an unconditional dispatch ban. The item reason must answer why this exact asset is worth reviewing now, which saved definition facts support it, and what concrete risk remains. Keep implementation vocabulary out of visible text: do not show `SAVED_REPORT_ONLY`, `DYNAMIC`, `REPORT`, `T1`, temporary SQL aliases such as `a0`/`a1`, runtime parameter names such as `Variable2`/`selector3`/`PartDate date1`, `source_path`, `evidence_snapshot`, raw JSON, raw SQL, projection/select-column jargon, hash/revision values, dashboard-override limitations, timezone-not-saved notes, or “query not proven/executed/returned rows” caveats. Convert them to reviewer decisions only when material: for example `T1`/`day` means `按天`, and dynamic SQL parameter uncertainty becomes “确认参数含义、默认日期范围和是否包含测试数据”.
135
135
 
136
136
  ## Normal Submission Workflow
137
137
 
@@ -86,13 +86,13 @@ Tag and cluster result-date policy:
86
86
  - `AUTO` dynamically matches the computed result for each analysis date. Use it for historical daily analysis that must evaluate each day against that day's tag or cluster state.
87
87
  - `SPECIFIED` uses one fixed result date and requires `specified_cluster_date` in `yyyy-MM-dd` format. Do not send `specified_cluster_date` with `LATEST` or `AUTO`.
88
88
 
89
- For example, the following filter evaluates `tag_pay_level != 非R` against each analysis day's tag result:
89
+ For example, the following filter evaluates `<verified_tag_name> != <excluded_tag_value>` against each analysis day's tag result:
90
90
 
91
91
  ```json
92
92
  {
93
- "field": {"name": "tag_pay_level", "type": "tag"},
93
+ "field": {"name": "<verified_tag_name>", "type": "tag"},
94
94
  "operator": "neq",
95
- "values": ["非R"],
95
+ "values": ["<excluded_tag_value>"],
96
96
  "cluster_date_policy": "AUTO"
97
97
  }
98
98
  ```
@@ -31,10 +31,10 @@ The KB description is part of Agent auto-loading and source selection, not a cas
31
31
  <project_name><asset_scope_label>项目语义知识库,用于辅助 Agent 在分析前召回业务域、资产口径、SQL 报表语义和治理边界。
32
32
  ```
33
33
 
34
- For example:
34
+ For example, using a fictional project name:
35
35
 
36
36
  ```text
37
- 产品雷达已认证资产项目语义知识库,用于辅助 Agent 在分析前召回业务域、资产口径、SQL 报表语义和治理边界。
37
+ 示例项目的已认证资产语义知识库,帮助 Agent 在分析前查阅业务域、资产口径、SQL 报表含义和治理边界。
38
38
  ```
39
39
 
40
40
  ```bash
@@ -15,7 +15,7 @@ These rules guide Schema generation for project semantic knowledge bases built f
15
15
 
16
16
  The generated top-level `index.md` must be a decision-oriented navigation page. It may contain only module navigation, common-entry guidance, and a compact category/count overview. Do not append a complete page list, sitemap, individual asset files, metadata property pages, numeric report IDs, numeric dashboard IDs, source container IDs, or raw source filenames to the top-level page. Top-level navigation should link to project overview, business domains, recall cards, asset category indexes, decisions, and review pages. List individual assets only inside the matching asset index page, domain page, dashboard page, source-container page, or search result context. If the compiler wants to expose a full sitemap, put it under `wiki/index.md` or category index pages, never in root `index.md`.
17
17
 
18
- When linking to an individual asset, use its business title as the visible link text and keep the numeric ID only as supporting identity beside the title, for example `近期客户成员聊天数量(report 13270719)`. Do not render bare numeric links such as `13270719` as navigation items.
18
+ When linking to an individual asset, use its business title as the visible link text and keep the numeric ID only as supporting identity beside the title, for example `示例报表(report 1001)`. Do not render bare numeric links such as `1001` as navigation items.
19
19
 
20
20
  ## Precompiled source contract
21
21
 
@@ -72,7 +72,7 @@ unique_ptr<TAConsumer> getDebugConsumer() {
72
72
  ```cpp
73
73
  //上传事件
74
74
  TaSDK::PropertiesNode event_properties;
75
- event_properties.SetString("name1", "XZ_debug");//上报字符串类型属性
75
+ event_properties.SetString("name1", "example");//上报字符串类型属性
76
76
  event_properties.SetNumber("test_number_int", 3);//上报数值类型属性
77
77
  event_properties.SetBool("test_bool", true);//上报布尔类型属性
78
78
  //上报列表型属性SetList
@@ -82,7 +82,7 @@ list.emplace_back("item21");
82
82
  event_properties.SetList("test_list1", list);
83
83
  //上报对象类型属性SetObject
84
84
  PropertiesNode properties;
85
- properties.SetString("name2", "logBugs");
85
+ properties.SetString("name2", "example");
86
86
  properties.SetString("#uuid", "1234567890");
87
87
  properties.SetNumber("test_number_int", 3);
88
88
  properties.SetNumber("test_number_double", 3.14);
@@ -201,13 +201,13 @@ class ParserServicer(parser_pb2_grpc.ParserServicer):
201
201
  parse_data = json.loads(raw_data_list[1])
202
202
  new_parse_data = {}
203
203
  new_parse_data["properties"] = parse_data.copy()
204
- new_parse_data["#account_id"] = parse_data["ACCOUNTID"]
205
- new_parse_data["#distinct_id"] = parse_data["OSTYPE"]
204
+ new_parse_data["#account_id"] = parse_data["user_id"]
205
+ new_parse_data["#distinct_id"] = parse_data["distinct_id"]
206
206
  new_parse_data["#type"] = "track"
207
- new_parse_data["#ip"] = parse_data["IP"]
208
- new_parse_data["#uuid"] = parse_data["UID"]
209
- new_parse_data["#time"] = parse_data["LOGTM"]
210
- new_parse_data["#event_name"] = "event_" + str(parse_data["CODE"])
207
+ new_parse_data["#ip"] = parse_data["ip"]
208
+ new_parse_data["#uuid"] = parse_data["event_id"]
209
+ new_parse_data["#time"] = parse_data["event_time"]
210
+ new_parse_data["#event_name"] = "event_" + str(parse_data["event_code"])
211
211
  return_data_list.append(json.dumps(new_parse_data))
212
212
  except Exception as ve:
213
213
  return_data_list.append('{}')
@@ -52,7 +52,7 @@ mode:表示SDK使用的模式
52
52
  "#type" : "track",
53
53
  "#uuid" : "DB2B97A5-183A-439E-B8B2-FE9AF77D7421",
54
54
  "#distinct_id" : "E5ABB02F-EA10-47AC-AB6C-A8E47E55B4E9",
55
- "#event_name" : "testA",
55
+ "#event_name" : "example_event",
56
56
  "#time" : "2022-10-25 14:30:29.256"
57
57
  }
58
58
  ```
@@ -108,7 +108,7 @@ code为0代表上传成功
108
108
  "#type" : "track",
109
109
  "#uuid" : "0ECCD33B-8076-42A5-BA2B-89DE0773B84B",
110
110
  "#distinct_id" : "51C6265F-8F03-461E-91D3-D0FFB11DFCFD_2",
111
- "#event_name" : "iOS_001",
111
+ "#event_name" : "example_event",
112
112
  "#time" : "2023-09-05 14:27:44.719"
113
113
  }
114
114
  ```
@@ -156,7 +156,7 @@ mode:表示SDK使用的模式
156
156
  "#type": "track",
157
157
  "#time": "2022-10-26 10:56:54.285",
158
158
  "#distinct_id": "04af1a3d-56b2-4c8f-a54a-2b6f655b8286",
159
- "#event_name": "testA",
159
+ "#event_name": "example_event",
160
160
  ...
161
161
  }
162
162
  ```
@@ -193,7 +193,7 @@ TDAnalytics.enableLog(true);
193
193
  "#type": "track",
194
194
  "#time": "2023-09-14 10:09:52.445",
195
195
  "#distinct_id": "b86de4eb-12b8-4ce4-924a-54cd12b5fa25",
196
- "#event_name": "android_001",
196
+ "#event_name": "example_event",
197
197
  ...
198
198
  }
199
199
  ```
@@ -23,8 +23,8 @@ Create a new Engage **运营设置** push channel (not config-center channels; t
23
23
  | `pushIdType` | string | Yes | prefixed property code — **rules differ by channel kind** |
24
24
  | `config` | string | Yes | channel config JSON **string** — **shape differs by channel kind** |
25
25
  | `enableTouchEvent` | number | Yes | reach funnel: `0` off · `1` on |
26
- | `eventClickName` | string | Yes when funnel on | click event (e.g. `ops_click`) |
27
- | `eventDeliveryName` | string | Yes when funnel on | delivery event (e.g. `ops_view`) |
26
+ | `eventClickName` | string | Yes when funnel on | click event (e.g. `click`) |
27
+ | `eventDeliveryName` | string | Yes when funnel on | delivery event (e.g. `delivery`) |
28
28
  | `touchEventSource` | string | Yes | usually `custom` for custom event names |
29
29
 
30
30
  The outer Capability input uses `project_id` and `req`; fields inside `req` keep the native camelCase DTO shape. The Hermes Capability handler assigns the outer `--project-id` to `req.projectId`.
@@ -110,7 +110,7 @@ Do **not** put `client:…` in webhook `userParamsList` unless you have confirme
110
110
 
111
111
  ```bash
112
112
  ae-cli engage-setting channel create --project-id 1 \
113
- --req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo_webhook","pushIdType":"user:#account_id","config":"{\"url\":\"https://example.com/hook\",\"paramsList\":[{\"key\":\"title\",\"keyName\":\"标题\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"city\",\"columnName\":\"user:city\",\"defaultValue\":\"-\"}],\"authConfig\":{\"enable\":false}}","enableTouchEvent":1,"eventDeliveryName":"ops_view","eventClickName":"ops_click","touchEventSource":"custom"}'
113
+ --req '{"channelType":1,"channelSubBizType":"webhook","channelName":"demo_webhook","pushIdType":"user:#account_id","config":"{\"url\":\"https://example.com/hook\",\"paramsList\":[{\"key\":\"title\",\"keyName\":\"标题\",\"type\":\"STRING\",\"required\":0}],\"userParamsList\":[{\"key\":\"city\",\"columnName\":\"user:city\",\"defaultValue\":\"-\"}],\"authConfig\":{\"enable\":false}}","enableTouchEvent":1,"eventDeliveryName":"delivery","eventClickName":"click","touchEventSource":"custom"}'
114
114
  ```
115
115
 
116
116
  ---
@@ -51,13 +51,13 @@ Object-group filter example:
51
51
  ```json
52
52
  {
53
53
  "type": "object_group",
54
- "field": "equipment_list",
54
+ "field": "items",
55
55
  "operator": "any_satisfy",
56
56
  "conditions": {
57
57
  "relation": "and",
58
58
  "items": [
59
59
  {
60
- "field": "equipment_list.item_level",
60
+ "field": "items.quantity",
61
61
  "operator": "gte",
62
62
  "values": [10]
63
63
  }
@@ -135,13 +135,13 @@ property filter. Use an object-group filter and place only that parent's child p
135
135
  ```json
136
136
  {
137
137
  "type": "object_group",
138
- "field": "equipment_list",
138
+ "field": "items",
139
139
  "operator": "any_satisfy",
140
140
  "conditions": {
141
141
  "relation": "and",
142
142
  "items": [
143
143
  {
144
- "field": "equipment_list.item_level",
144
+ "field": "items.quantity",
145
145
  "operator": "gte",
146
146
  "values": [10]
147
147
  }
@@ -117,7 +117,7 @@ First, check if both `.ae-cli/draft.json` and `.ae-cli/draft.xlsx` exist:
117
117
 
118
118
  1. **Do you need to generate a tracking plan first?**
119
119
  - Yes → suggest using `ae-generate-tracking-plan` skill
120
- - Reference: tracking plan document (Feishu: https://www.feishu.cn/docx/Jt0VdhNB6oSJ4TxISs1cq2Ebnmg)
120
+ - Reference: use a tracking plan document supplied by the user as source material.
121
121
 
122
122
  2. **If you already have a tracking plan**
123
123
  - Provide the xlsx file path and use `ae-cli tracking code import-template --template` to import