@thinkingai/ae-cli 1.0.28 → 6.0.16-1
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/README.md +1 -16
- package/README.zh.md +1 -16
- package/dist/{auth-H2376DEF.js → auth-DYC2BGLM.js} +2 -2
- package/dist/{auth-5NSDQFQB.js → auth-GHBMJ5ZR.js} +31 -12
- package/dist/{chunk-CLJF7MQA.js → chunk-2DUEAXV3.js} +1 -1
- package/dist/chunk-5OC7CYCG.js +98 -0
- package/dist/{chunk-SRJIAOBN.js → chunk-6W4QOZAL.js} +10 -0
- package/dist/{chunk-LU7SXK4Q.js → chunk-BJX3GXWC.js} +2 -2
- package/dist/{chunk-WCHI7725.js → chunk-DMMEPCST.js} +47 -6
- package/dist/{chunk-IMBKVXKY.js → chunk-EGEIXA2Z.js} +82 -10
- package/dist/{chunk-AD5V3ZPJ.js → chunk-I5CRVM2S.js} +98 -10
- package/dist/chunk-NOO24N7W.js +11 -0
- package/dist/{chunk-GSJGPNKK.js → chunk-PN3OS34E.js} +1 -1
- package/dist/{chunk-CAQYQA4R.js → chunk-RSHMZ3LG.js} +15 -1
- package/dist/{client-FCMK3XEK.js → client-2UJ63MVQ.js} +3 -3
- package/dist/{config-64G36TJL.js → config-NCUGK6NS.js} +3 -3
- package/dist/index.js +2553 -29
- package/dist/{model-EZ6K7FXI.js → model-SJSOZTRS.js} +5 -7
- package/dist/{raw-VEF3D6UD.js → raw-7NVWSVJP.js} +4 -4
- package/dist/{sync-NRODEVNH.js → sync-GRVO4K3U.js} +120 -23
- package/dist/{te-agent-7U7JLJKU.js → te-agent-KZRIEN4N.js} +468 -47
- package/dist/{te-analysis-A2OSGHQ4.js → te-analysis-VAR4KUOK.js} +145 -28
- package/dist/{te-audience-LI67PPGO.js → te-audience-KMKYI2YJ.js} +23 -14
- package/dist/{te-common-35WVU3C5.js → te-common-WNCZB7R7.js} +5 -4
- package/dist/{te-community-LEAP6PWT.js → te-community-JEEFXPB3.js} +11 -10
- package/dist/{te-dataops-N2LGZBOX.js → te-dataops-GD3XBYCS.js} +33 -32
- package/dist/{te-engage-H7C72Z46.js → te-engage-4XHCTS6I.js} +5 -4
- package/dist/{te-kb-I2OKTBAI.js → te-kb-B62KFP2A.js} +97 -7
- package/dist/{te-meta-HBTIEDRO.js → te-meta-EPZGQN56.js} +10 -9
- package/dist/{te-team-EM5OWRQL.js → te-team-YY24VORI.js} +16 -12
- package/dist/tracking/i18n/resources/cli/en.json +153 -0
- package/dist/tracking/i18n/resources/cli/ja.json +153 -0
- package/dist/tracking/i18n/resources/cli/ko.json +153 -0
- package/dist/tracking/i18n/resources/cli/zh.json +153 -0
- package/package.json +9 -3
- package/skills/ae-agent/SKILL.md +66 -26
- package/skills/ae-analysis/SKILL.md +108 -8
- package/skills/ae-analysis/references/cancel_query.md +39 -0
- package/skills/ae-analysis/references/drilldown_user_events.md +4 -2
- package/skills/ae-analysis/references/drilldown_users.md +4 -2
- package/skills/ae-analysis/references/get_bi_panel_detail.md +35 -0
- package/skills/ae-analysis/references/list_alerts.md +1 -1
- package/skills/ae-analysis/references/list_bi_panels.md +35 -0
- package/skills/ae-analysis/references/list_cluster_members.md +4 -1
- package/skills/ae-analysis/references/list_dashboards.md +1 -1
- package/skills/ae-analysis/references/list_entities.md +1 -1
- package/skills/ae-analysis/references/list_events.md +1 -1
- package/skills/ae-analysis/references/list_metrics.md +1 -1
- package/skills/ae-analysis/references/list_project_mark_times.md +1 -1
- package/skills/ae-analysis/references/list_properties.md +1 -1
- package/skills/ae-analysis/references/list_public_access_links.md +1 -1
- package/skills/ae-analysis/references/list_reports.md +1 -1
- package/skills/ae-analysis/references/list_tag_members.md +4 -1
- package/skills/ae-analysis/references/query_adhoc.md +6 -5
- package/skills/ae-analysis/references/query_bi_panel_data.md +58 -0
- package/skills/ae-analysis/references/query_dashboard_report_data.md +4 -1
- package/skills/ae-analysis/references/query_entity_details.md +5 -2
- package/skills/ae-analysis/references/query_event_details.md +4 -1
- package/skills/ae-analysis/references/query_report_data.md +2 -2
- package/skills/ae-analysis-global/SKILL.md +3 -1
- package/skills/ae-analysis-intent/SKILL.md +132 -0
- package/skills/ae-data-integration-helper/SKILL.md +242 -0
- package/skills/ae-data-integration-helper/references/android_sdk_faq.md +179 -0
- package/skills/ae-data-integration-helper/references/c_sdk_compilation.md +83 -0
- package/skills/ae-data-integration-helper/references/c_sdk_faq.md +416 -0
- package/skills/ae-data-integration-helper/references/cocoscreator_sdk_faq.md +123 -0
- package/skills/ae-data-integration-helper/references/cpp_server_sdk_faq.md +365 -0
- package/skills/ae-data-integration-helper/references/index.md +56 -0
- package/skills/ae-data-integration-helper/references/ios_sdk_faq.md +118 -0
- package/skills/ae-data-integration-helper/references/java_sdk_faq.md +406 -0
- package/skills/ae-data-integration-helper/references/javascript_sdk_faq.md +129 -0
- package/skills/ae-data-integration-helper/references/logbus2_guide.md +309 -0
- package/skills/ae-data-integration-helper/references/logbus2_parser_plugin.md +348 -0
- package/skills/ae-data-integration-helper/references/minigame_sdk_faq.md +115 -0
- package/skills/ae-data-integration-helper/references/miniprogram_sdk_faq.md +118 -0
- package/skills/ae-data-integration-helper/references/python_sdk_faq.md +232 -0
- package/skills/ae-data-integration-helper/references/restful_api_notes.md +74 -0
- package/skills/ae-data-integration-helper/references/sdk_log_guide.md +316 -0
- package/skills/ae-data-integration-helper/references/sdk_usage_notes.md +107 -0
- package/skills/ae-data-integration-helper/references/unity_sdk_faq.md +115 -0
- package/skills/ae-generate-tracking-code/SKILL.md +629 -0
- package/skills/ae-generate-tracking-code/references/autotrack-enum.md +183 -0
- package/skills/ae-generate-tracking-code/references/client-sdk-insert.md +202 -0
- package/skills/ae-generate-tracking-code/references/datax-config.md +43 -0
- package/skills/ae-generate-tracking-code/references/debug-script.md +102 -0
- package/skills/ae-generate-tracking-code/references/logbus-config.md +200 -0
- package/skills/ae-generate-tracking-code/references/modes.md +83 -0
- package/skills/ae-generate-tracking-code/references/restful-call.md +36 -0
- package/skills/ae-generate-tracking-code/references/sdk-index.md +128 -0
- package/skills/ae-generate-tracking-code/references/server-sdk-insert.md +206 -0
- package/skills/ae-generate-tracking-code/references/snippet-delivery.md +394 -0
- package/skills/ae-generate-tracking-code/references/te-api.md +181 -0
- package/skills/ae-generate-tracking-plan/SKILL.md +1083 -0
- package/skills/ae-generate-tracking-plan/references/autotrack-events.md +273 -0
- package/skills/ae-generate-tracking-plan/references/business-dimension-mapping.md +425 -0
- package/skills/ae-generate-tracking-plan/references/te-api.md +100 -0
- package/skills/ae-generate-tracking-plan/references/xlsx-schema.md +152 -0
- package/skills/ae-kb/SKILL.md +38 -5
- package/tracking-plan-template/MMO/346/211/213/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +104 -0
- package/tracking-plan-template/MMO/346/211/213/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/MMO/351/241/265/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +117 -0
- package/tracking-plan-template/MMO/351/241/265/346/270/270/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template/RPG/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +72 -0
- package/tracking-plan-template/RPG/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/SLG/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +86 -0
- package/tracking-plan-template/SLG/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/Slots/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +80 -0
- package/tracking-plan-template/Slots/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template/TE /345/237/213/347/202/271/347/244/272/344/276/213/346/250/241/346/235/277.md" +40 -0
- package/tracking-plan-template/TE /345/237/213/347/202/271/347/244/272/344/276/213/346/250/241/346/235/277.xlsx +0 -0
- package/tracking-plan-template/TE/345/256/230/346/226/271/346/250/241/346/235/277_dataTrackSample.md +40 -0
- package/tracking-plan-template/TE/345/256/230/346/226/271/346/250/241/346/235/277_dataTrackSample.xlsx +0 -0
- package/tracking-plan-template//344/274/221/351/227/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +92 -0
- package/tracking-plan-template//344/274/221/351/227/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template//345/215/241/347/211/214/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +119 -0
- package/tracking-plan-template//345/215/241/347/211/214/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//345/241/224/351/230/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_V1.md +130 -0
- package/tracking-plan-template//345/241/224/351/230/262/345/205/273/346/210/220/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_V1.xlsx +0 -0
- package/tracking-plan-template//345/276/256/344/277/241/345/260/217/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +52 -0
- package/tracking-plan-template//345/276/256/344/277/241/345/260/217/346/270/270/346/210/217/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/215/225/351/261/274/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +68 -0
- package/tracking-plan-template//346/215/225/351/261/274/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/215/241/347/211/214/346/270/270/346/210/217_/345/237/213/347/202/271/346/250/241/347/211/210v1.md +108 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/215/241/347/211/214/346/270/270/346/210/217_/345/237/213/347/202/271/346/250/241/347/211/210v1.xlsx +0 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +119 -0
- package/tracking-plan-template//346/224/276/347/275/256/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/346/226/227/345/234/260/344/270/273/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +63 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/346/226/227/345/234/260/344/270/273/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/351/272/273/345/260/206/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v2.md +101 -0
- package/tracking-plan-template//346/243/213/347/211/214/347/261/273/357/274/210/351/272/273/345/260/206/357/274/211/345/237/213/347/202/271/346/250/241/346/235/277_v2.xlsx +0 -0
- package/tracking-plan-template//347/224/265/345/225/206/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.md +84 -0
- package/tracking-plan-template//347/224/265/345/225/206/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//347/237/255/345/211/247/344/272/247/345/223/201/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.md +79 -0
- package/tracking-plan-template//347/237/255/345/211/247/344/272/247/345/223/201/345/237/213/347/202/271/346/226/271/346/241/210/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//347/244/276/344/272/244/350/201/212/345/244/251/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +105 -0
- package/tracking-plan-template//347/244/276/344/272/244/350/201/212/345/244/251/347/261/273/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/tracking-plan-template//351/230/205/350/257/273/347/261/273APP/345/237/213/347/202/271/346/250/241/346/235/277_v1.md +83 -0
- package/tracking-plan-template//351/230/205/350/257/273/347/261/273APP/345/237/213/347/202/271/346/250/241/346/235/277_v1.xlsx +0 -0
- package/wiki/te-docs/index.md +225 -0
- package/wiki/te-docs/raw/advanced-data-type/first-event-check.md +66 -0
- package/wiki/te-docs/raw/advanced-data-type/updated-event.md +87 -0
- package/wiki/te-docs/raw/advanced-data-type.md +16 -0
- package/wiki/te-docs/raw/data-ingestion-guide/about-gdpr.md +55 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/automatic-event-tracking.md +431 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/debugging-and-logging.md +49 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/multi-instance.md +66 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/preset-properties.md +466 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced/third-party-integration.md +127 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/android-advanced.md +513 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android/release-notes.md +177 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/android.md +228 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c/c-advanced.md +419 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/c.md +110 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/client-side-sdk-faq.md +52 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp/cpp-advanced.md +366 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp/release-notes.md +103 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cpp.md +201 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/compliance.md +26 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/automatically-track-events.md +117 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced/preset-properties.md +52 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/flutter-advanced.md +267 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter/release-notes.md +82 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/flutter.md +139 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/compliance.md +26 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/automatically-track-events.md +121 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/debugging-and-logging.md +54 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced/preset-properties.md +18 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/reactnative-advanced.md +305 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native/release-notes.md +79 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/react-native.md +137 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/release-notes.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/automatically-track-events.md +54 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/debugging-and-logging.md +53 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/multi-instance.md +42 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/preset-properties.md +119 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced/support-native.md +81 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app/uniapp-advanced.md +331 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform/uni-app.md +156 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/cross-platform.md +12 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/automatic-event-tracking.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/multi-instance.md +21 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced/preset-properties.md +249 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/cocos2d-x-advanced.md +301 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x/release-notes.md +51 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocos2d-x.md +281 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/automatic-event-tracking.md +70 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/debugging-and-logging.md +57 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/native-support.md +104 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance/preset-properties.md +91 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/cocoscreator-advance.md +374 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/compliance.md +35 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator/release-notes.md +109 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/cocoscreator.md +170 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/compliance.md +28 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/automatic-event-tracking.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/debugging-and-logging.md +58 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced/preset-properties.md +43 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/corona-advanced.md +204 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona/release-notes.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/corona.md +269 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/release-notes.md +177 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/automatic-event-tracking.md +119 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/multi-instance.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/native-pluggable.md +43 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/preset-properties.md +212 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced/third-party-integration.md +77 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity/unity-advanced.md +396 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unity.md +176 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/release-notes.md +81 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/automatic-event-tracking.md +79 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/debugging-and-logging.md +31 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/preset-properties.md +25 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced/third-party-integrations.md +141 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal/unreal-advanced.md +278 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine/unreal.md +190 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/game-engine.md +14 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/h5-and-app-sdk-connection.md +147 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/instant-app-and-game.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/compliance.md +24 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/automatic-event-tracking.md +272 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/debugging-and-logging.md +77 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/multi-instance.md +142 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/preset-properties.md +484 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced/third-party-integrations.md +132 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/ios-advanced.md +682 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios/release-notes.md +163 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/ios.md +304 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/compliance.md +29 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/automatic-event-tracking.md +136 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/debugging-and-logging.md +48 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/multi-instance.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced/preset-properties.md +132 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/javascript-advanced.md +462 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript/release-notes.md +107 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/javascript.md +208 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced/debugging-and-logging.md +62 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced/preset-properties.md +118 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos/macos-advanced.md +556 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk/macos.md +231 -0
- package/wiki/te-docs/raw/data-ingestion-guide/client-sdk.md +25 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/filebeat-logstash-user-guide.md +610 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/logbus2-user-guide.md +1215 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools/ta-datax-writer-plugin-user-guide.md +278 -0
- package/wiki/te-docs/raw/data-ingestion-guide/data-import-tools.md +15 -0
- package/wiki/te-docs/raw/data-ingestion-guide/privacy-policy.md +38 -0
- package/wiki/te-docs/raw/data-ingestion-guide/restful-api-user-guide.md +155 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging-FM9Cwz.md +37 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging-RSyfw7.md +41 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/debugging-and-logging.md +89 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties-OxzWw.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties-VuE3wr.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced-IauKwI.md +175 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced-YAilwk.md +210 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/c-advanced.md +211 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes-PVazwa.md +62 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes-TADbwY.md +50 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c/release-notes.md +69 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c-V2W3wv.md +131 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c-Zf9Jwl.md +179 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/c.md +189 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced/debugging-and-logging.md +38 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/erlang-advanced.md +113 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang/release-notes.md +34 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/erlang.md +155 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced/debugging-and-logging.md +42 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/golang-advanced.md +157 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang/release-notes.md +72 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/golang.md +148 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced/debugging-and-logging.md +49 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/java-advanced.md +223 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java/release-notes.md +88 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/java.md +174 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced/debugging-and-logging.md +46 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/lua-advanced.md +182 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua/release-notes.md +61 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/lua.md +121 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced/debugging-and-logging.md +55 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/nodejs-advanced.md +225 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/nodejs.md +141 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced/debugging-and-logging.md +41 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/php-advanced.md +216 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php/release-notes.md +45 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/php.md +173 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced/debugging-and-logging.md +40 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/python-advanced.md +206 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python/release-notes.md +51 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/python.md +116 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/release-notes.md +44 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced/debugging-and-logging.md +47 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced/preset-properties.md +126 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby/ruby-advanced.md +189 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk/ruby.md +142 -0
- package/wiki/te-docs/raw/data-ingestion-guide/server-sdk.md +22 -0
- package/wiki/te-docs/raw/data-ingestion-guide/thinkingdata-privacy-policy.md +37 -0
- package/wiki/te-docs/raw/data-ingestion-guide.md +48 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/data-rules.md +396 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/preset-properties-and-system-fields.md +957 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion/user-identification-rules.md +723 -0
- package/wiki/te-docs/raw/preparations-before-data-ingestion.md +203 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//345/220/210/350/247/204/346/214/207/345/215/227.md +96 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//346/233/264/346/226/260/346/227/245/345/277/227.md +97 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//345/244/232/345/256/236/344/276/213.md +52 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +48 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +447 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony//350/277/233/351/230/266/346/214/207/345/215/227.md +370 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk/openharmony.md +172 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//345/220/210/350/247/204/346/214/207/345/215/227.md +37 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//346/233/264/346/226/260/346/227/245/345/277/227.md +209 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//345/244/232/345/256/236/344/276/213.md +71 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +49 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +125 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +498 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217//350/277/233/351/230/266/346/214/207/345/215/227.md +612 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//345/260/217/347/250/213/345/272/217/345/260/217/346/270/270/346/210/217.md +373 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//345/220/210/350/247/204/346/214/207/345/215/227.md +26 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//346/233/264/346/226/260/346/227/245/345/277/227.md +32 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +48 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +30 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +61 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua//350/277/233/351/230/266/346/214/207/345/215/227.md +236 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/cocos2d-lua.md +200 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//346/233/264/346/226/260/346/227/245/345/277/227.md +83 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227/native/346/224/257/346/214/201.md +66 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +54 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +62 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +358 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret//350/277/233/351/230/266/346/214/207/345/215/227.md +615 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/egret.md +166 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//346/233/264/346/226/260/346/227/245/345/277/227.md +87 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227/native/346/224/257/346/214/201.md +71 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//345/256/236/346/227/266/350/260/203/350/257/225.md +54 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//350/207/252/345/212/250/351/207/207/351/233/206.md +61 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227//351/242/204/347/275/256/345/261/236/346/200/247.md +406 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair//350/277/233/351/230/266/346/214/207/345/215/227.md +597 -0
- package/wiki/te-docs/raw//345/256/242/346/210/267/347/253/257-sdk//346/270/270/346/210/217/345/274/225/346/223/216/layaair.md +179 -0
- package/wiki/te-docs/schema.md +16 -0
- package/wiki/te-docs/synthesis/batch-ingest-comparison.md +324 -0
- package/wiki/te-docs/synthesis/js-sdk-cheatsheet.md +538 -0
- package/wiki/te-docs/synthesis/restful-api-reference.md +363 -0
- package/wiki/te-docs/synthesis/sdk-selection.md +372 -0
- package/wiki/te-docs/synthesis/server-sdk-overview.md +449 -0
- package/dist/chunk-KAEZTSXN.js +0 -99
- package/dist/chunk-OJDNO5QY.js +0 -63
|
@@ -0,0 +1,1083 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ae-generate-tracking-plan
|
|
3
|
+
description: Interactive generation of an AE tracking plan and upload. Trigger words: 埋点方案、埋点模板、tracking plan、AE 方案生成、create tracking plan、トラッキングプラン、트래킹 플랜. Follows anchor → draft → refine → token → upload five-phase workflow. Deliverable is a real tracking plan created in the AE platform.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ae-generate-tracking-plan
|
|
7
|
+
|
|
8
|
+
> **Conversation language**: This skill document is in English, but **all output to the user MUST be in the user's input language**.
|
|
9
|
+
> English input → English reply; Chinese input → Chinese reply; Japanese input → Japanese reply.
|
|
10
|
+
> If uncertain, default to English.
|
|
11
|
+
> This applies to all output: section titles, phase names, template prompts, example text, option lists, etc.
|
|
12
|
+
> **⚠️ CRITICAL: Templates and some reference documents are in Chinese. When working with Chinese templates/material for an English/Japanese user, you MUST translate all user-facing content (display_name, event_desc, event_tag, descriptions, etc.) to the user's language. The source material's language is NOT the user's language. Use the Terminology Glossary above to map terms accurately.**
|
|
13
|
+
> Do NOT copy Chinese text verbatim from this document into English/Japanese replies.
|
|
14
|
+
|
|
15
|
+
## Terminology Glossary
|
|
16
|
+
|
|
17
|
+
| 中文 | English | Notes |
|
|
18
|
+
|------|---------|-------|
|
|
19
|
+
| 埋点方案 | Tracking Plan | AE project-level event & property definitions |
|
|
20
|
+
| 埋点模板 | Tracking Plan Template | Pre-built industry/genre xlsx templates |
|
|
21
|
+
| 方案名称 | Plan Name | User-facing plan identifier |
|
|
22
|
+
| 应用场景 | Application Scenario | One-sentence description of what the app does |
|
|
23
|
+
| 素材来源 | Source Material Type | prd / chat / codebase / template |
|
|
24
|
+
| 业务维度 | Business Dimension | Revenue model, core loop, functional entries, currency system |
|
|
25
|
+
| 收入模型 | Revenue Model | IAA / IAP / mixed / subscription / commission |
|
|
26
|
+
| 核心循环 | Core Loop | Core gameplay loop (e.g. "grind stages → earn coins → gacha for heroes") |
|
|
27
|
+
| 功能入口 | Functional Entry | Stage, shop, guild, leaderboard, task, achievement, etc. |
|
|
28
|
+
| 货币体系 | Currency System | Hard currency (diamonds), soft currency (gold), etc. |
|
|
29
|
+
| 事件 | Event | Named user action or system occurrence (`event_name`) |
|
|
30
|
+
| 事件属性 | Event Property | Data attached to an event (`prop_names`) |
|
|
31
|
+
| 公共事件属性 | Common/Super Property | Property attached to every event automatically |
|
|
32
|
+
| 用户属性 | User Property | Property on the user profile (persistent state) |
|
|
33
|
+
| 预置属性 | Preset Property | System property prefixed with `#` (`#device_id`, `#time`, etc.) |
|
|
34
|
+
| 自动采集事件 | Auto-track Event | SDK auto-collected events (`ta_app_start`, `ta_page_show`, etc.) |
|
|
35
|
+
| 系统事件 | System Event | Auto-track event tag category |
|
|
36
|
+
| 业务事件 | Business Event | Custom business event tag category |
|
|
37
|
+
| SDK 集成模式 | SDK Integration Mode | `client_only` / `server_only` / `both` / `none` |
|
|
38
|
+
| 客户端平台 | Client Platform | Android, iOS, Web, Unity, Mini-program, etc. |
|
|
39
|
+
| 服务端语言 | Server Language | Java, Python, Go, Node.js, PHP, etc. |
|
|
40
|
+
| 用户体系 | User Identity System | distinct_id strategy + account_id source |
|
|
41
|
+
| 访客 ID | Visitor ID / Distinct ID | Anonymous identity before login |
|
|
42
|
+
| 账号 ID | Account ID | Identified user after login |
|
|
43
|
+
| 插入 | Insert | Direct code injection into project |
|
|
44
|
+
| 片段 | Snippet | Code delivered as standalone files |
|
|
45
|
+
| 对象组 | Object Array (`array_row`) | `[{...}]` — variable-length list of related entities |
|
|
46
|
+
| 对象 | Object (`object`) | `{...}` — fixed-structure single entity |
|
|
47
|
+
| 校验 | Validation | Draft rule checking before xlsx generation |
|
|
48
|
+
| 上传 | Upload | Pushing the xlsx tracking plan to AE |
|
|
49
|
+
| 追加 | Append | Adding new events/properties to an existing plan |
|
|
50
|
+
| 替换 | Replace | Deleting existing plan and uploading a new one |
|
|
51
|
+
| 冲突检测 | Conflict Detection | Detecting type mismatches and duplicate events before upload |
|
|
52
|
+
| 归档 | Archive | Copying final draft.xlsx to `plans/` directory |
|
|
53
|
+
| xlsx 格式契约 | xlsx Format Contract | Column rules for AE-compatible Excel generation |
|
|
54
|
+
| draft.json | draft.json | Internal intermediate representation (JSON) of the tracking plan |
|
|
55
|
+
| display_name | Display Name | Human-readable name in the user's language |
|
|
56
|
+
| event_tag | Event Tag | Category label for grouping events |
|
|
57
|
+
| snake_case | snake_case | Canonical naming format: `lowercase_with_underscores` |
|
|
58
|
+
|
|
59
|
+
## When to Trigger
|
|
60
|
+
|
|
61
|
+
Trigger when user mentions: "tracking plan / tracking template / AE plan / help me create tracking" etc.
|
|
62
|
+
App types covered: H5 / Web / iOS / Android / Mini-program / Unity. Follow strictly
|
|
63
|
+
Phase 0 → 1 → 2 → 3 → 4, do not skip steps.
|
|
64
|
+
|
|
65
|
+
> Phase 1 / 3 / 4 are executed via `ae-cli tracking` CLI (`ae-cli tracking plan draft`
|
|
66
|
+
> / `ae-cli auth login` / `ae-cli tracking plan upload` / `ae-cli tracking plan delete`).
|
|
67
|
+
> **All CLI commands must be prefixed with `AE_LANG=<user_lang>`** (e.g. `AE_LANG=en ae-cli tracking plan draft ...`),
|
|
68
|
+
> ensuring CLI output messages and generated xlsx headers match the user's language.
|
|
69
|
+
>
|
|
70
|
+
> **Language rules**: All user-facing fields in draft.json (`display_name`, `event_desc`, `event_tag`,
|
|
71
|
+
> property `display_name`, property `desc`, etc.) must be generated in the **user's input language**.
|
|
72
|
+
> Content extracted from Chinese templates/PRDs must be translated to the user's language when written to draft.json.
|
|
73
|
+
> Only identifier fields like `event_name`, `prop_name` remain in English snake_case (canonical format).
|
|
74
|
+
> This skill only cares about command behavior, not internal implementation.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Phase 0 — Anchor (one question per message)
|
|
79
|
+
|
|
80
|
+
> **Step 1: Language initialization**
|
|
81
|
+
>
|
|
82
|
+
> Determine `<user_lang>` from user's input language: Chinese→`zh`, English→`en`, Japanese→`ja`, Korean→`ko`. Other languages default to `en`.
|
|
83
|
+
> All subsequent CLI commands must be prefixed with `AE_LANG=<user_lang>` to ensure CLI output and generated xlsx headers match the user's language.
|
|
84
|
+
|
|
85
|
+
Collect the following **5 items** sequentially, **do NOT ask all at once**:
|
|
86
|
+
|
|
87
|
+
### Item 1 — Application Scenario
|
|
88
|
+
|
|
89
|
+
Ask: **"What is your application's business scenario? One sentence summary, e.g.: An e-commerce website where users browse products and place orders"**
|
|
90
|
+
|
|
91
|
+
After user responds, record to `meta.scenario` and generate `meta.plan_name`.
|
|
92
|
+
|
|
93
|
+
### Item 2 — Source Material + Business Dimension (combined)
|
|
94
|
+
|
|
95
|
+
Ask: **"Choose your source material (up to 2):"**
|
|
96
|
+
|
|
97
|
+
User can multi-select (max 2):
|
|
98
|
+
|
|
99
|
+
1. **Product document** (local path, image file, or folder) — Extract events and properties from product docs; supports md/pdf/docx/URL/images (png/jpg/jpeg/webp)
|
|
100
|
+
2. **Detailed description** (conversational) — Describe app business flow, core features, user behaviors, monetization model, etc.
|
|
101
|
+
3. **Codebase** (local project path) — Analyze source code to extract events and properties
|
|
102
|
+
4. **Pre-built template** (built-in industry and game genre templates) — Select a built-in template (run `AE_LANG=<user_lang> ae-cli tracking plan list-templates` to see available templates)
|
|
103
|
+
|
|
104
|
+
Based on user selection, determine source material type and record to `meta.source_type`:
|
|
105
|
+
|
|
106
|
+
| Selection | source_type | Handling |
|
|
107
|
+
|---|---|---|
|
|
108
|
+
| Product doc only | `prd` | Read product docs (text/images), extract events and properties |
|
|
109
|
+
| Description only | `chat` | Construct events in Draft phase based on description |
|
|
110
|
+
| Codebase only | `codebase` | Scan source code, extract events/properties from business logic |
|
|
111
|
+
| Template only | `template` | Provide built-in template selection |
|
|
112
|
+
| Any two-item combo | Join two types with `_` | First as baseline, second as supplement (priority: template → codebase → prd → chat) |
|
|
113
|
+
|
|
114
|
+
**Follow-up questions** (ask in selection order):
|
|
115
|
+
- Product doc → ask **"What is the product document path? You can provide one or more paths, separated by commas or newlines (local paths, URLs, image files, or folders)"**
|
|
116
|
+
- Detailed description → If too vague, follow up on core features, user behaviors, business flows, monetization
|
|
117
|
+
- Codebase → ask **"What is the project directory path?"**, then scan source to extract business logic
|
|
118
|
+
- Pre-built template → display matching templates for user confirmation
|
|
119
|
+
|
|
120
|
+
**Codebase analysis flow** (when source_type includes `codebase`):
|
|
121
|
+
|
|
122
|
+
1. User provides project directory path
|
|
123
|
+
2. Scan directory structure, identify tech stack (engine/framework/language)
|
|
124
|
+
3. Read core business modules (game logic, scene management, UI interaction, state/data models, networking/payment, etc.)
|
|
125
|
+
4. Extract from code:
|
|
126
|
+
- **Events**: Player interaction actions (click/swipe/trigger), scene transitions, game state changes (start/pause/end), business flow nodes (purchase/upgrade/unlock)
|
|
127
|
+
- **Event Properties**: Action parameters (bullet type/enemy level/item ID), state values (score/HP/coins), context (level ID/difficulty/mode)
|
|
128
|
+
- **User Properties**: Persistent state (level/experience/VIP/cumulative spend)
|
|
129
|
+
5. Map extracted results to AE naming conventions (`snake_case` event names + `display_name` in user's language)
|
|
130
|
+
6. Confirm extracted results with user, supplement missing items
|
|
131
|
+
|
|
132
|
+
**Business Dimension Confirmation**:
|
|
133
|
+
|
|
134
|
+
After source material is confirmed, **must** process business dimension info based on source_type. User must explicitly confirm before proceeding.
|
|
135
|
+
|
|
136
|
+
| source_type | Handling |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `template` | Directly display template's inherited business dimensions; skip detailed inference |
|
|
139
|
+
| `prd` / `codebase` / `chat` | Infer business dimensions → follow up on missing items → event injection preview |
|
|
140
|
+
|
|
141
|
+
**If source_type = template**:
|
|
142
|
+
|
|
143
|
+
Display template's preset business dimensions:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Business Dimension (inherited from template: <template name>)
|
|
147
|
+
|
|
148
|
+
Revenue Model: <revenue_model>
|
|
149
|
+
Core Loop: <core_loop>
|
|
150
|
+
Functional Entries: <functional_entries>
|
|
151
|
+
Currency System: <currency_system>
|
|
152
|
+
|
|
153
|
+
Confirm using these business dimensions? ok / modify
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
- User `ok` → proceed to next step
|
|
157
|
+
- User says "modify" → switch to prd/chat flow for user to supplement
|
|
158
|
+
|
|
159
|
+
**If source_type is prd / codebase / chat**:
|
|
160
|
+
|
|
161
|
+
1. **Inference display**: Format inference results as a summary, using `business-dimension-mapping.md` as the mapping baseline
|
|
162
|
+
2. **Follow up missing**: Only ask about missing items or items inferred as "simple"
|
|
163
|
+
3. **Event injection preview**: Show suggested injected event modules; user `ok` to proceed
|
|
164
|
+
|
|
165
|
+
Platform validation: Use `business-dimension-mapping.md` Chapter 5 decision rules to check if injected events' platform assignments are reasonable.
|
|
166
|
+
|
|
167
|
+
**Template matching** (prd / codebase / chat scenarios, optional):
|
|
168
|
+
|
|
169
|
+
After business dimension confirmation, auto-detect matching templates based on app type:
|
|
170
|
+
```bash
|
|
171
|
+
AE_LANG=<user_lang> ae-cli tracking plan list-templates
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Show matching templates to user for confirmation. Confirmed templates serve as baseline and participate in Phase 1 event merging.
|
|
175
|
+
|
|
176
|
+
**Record business dimension info to `meta.business_dimension`**:
|
|
177
|
+
```json
|
|
178
|
+
"business_dimension": {
|
|
179
|
+
"revenue_model": "<model>",
|
|
180
|
+
"core_loop": "<description>",
|
|
181
|
+
"functional_entries": ["<entry list>"],
|
|
182
|
+
"currency_system": { ... },
|
|
183
|
+
"ad_scenes": [],
|
|
184
|
+
"iap_items": []
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Item 3 — SDK Integration Config (client + server combined)
|
|
189
|
+
|
|
190
|
+
Ask: **"What is your client platform? (multi-select OK, e.g. Android + iOS) Will you integrate a server-side SDK?"**
|
|
191
|
+
|
|
192
|
+
> **Language filter**: The following SDKs have Chinese-only documentation and are **visible to Chinese users only**: `Mini-program`, `Mini-game`, `OpenHarmony`, `LayaAir`, `Egret`, `Cocos2d-Lua`. Do not show these to non-Chinese users.
|
|
193
|
+
|
|
194
|
+
**Client integration** (multi-select OK):
|
|
195
|
+
|
|
196
|
+
| Option | Client SDK Type |
|
|
197
|
+
|---|---|
|
|
198
|
+
| H5/Web App | JavaScript SDK |
|
|
199
|
+
| Mobile Game - Android Native | Android SDK |
|
|
200
|
+
| Mobile Game - iOS Native | iOS SDK |
|
|
201
|
+
| Mobile Game - Unity | Unity SDK |
|
|
202
|
+
| Mobile Game - CocosCreator | CocosCreator SDK |
|
|
203
|
+
| Mobile Game - Cocos2d-x | Cocos2d-x SDK |
|
|
204
|
+
| Mobile Game - Cocos2d-Lua | Cocos2d-Lua SDK |
|
|
205
|
+
| Mobile Game - LayaAir | LayaAir SDK |
|
|
206
|
+
| Mobile Game - Egret | Egret SDK |
|
|
207
|
+
| Mobile Game - Unreal | Unreal SDK |
|
|
208
|
+
| Mobile App - Android Native | Android SDK |
|
|
209
|
+
| Mobile App - iOS Native | iOS SDK |
|
|
210
|
+
| Mobile App - React Native | React Native SDK |
|
|
211
|
+
| Mobile App - Flutter | Flutter SDK |
|
|
212
|
+
| Mobile App - uni-app | uni-app SDK |
|
|
213
|
+
| Mobile App - OpenHarmony | OpenHarmony SDK |
|
|
214
|
+
| Mini-game | Mini-game SDK (unified, supports WeChat/QQ/TikTok/Baidu, etc.) |
|
|
215
|
+
| Mini-program | Mini-program SDK (unified, supports WeChat/TikTok/Alipay/Baidu, etc.) |
|
|
216
|
+
| PC Game - Unreal | Unreal SDK |
|
|
217
|
+
| PC Game - Unity | Unity SDK |
|
|
218
|
+
| PC App - C++ | C++ SDK |
|
|
219
|
+
| PC App - C# | C# SDK |
|
|
220
|
+
| PC App - macOS Native | macOS SDK |
|
|
221
|
+
| PC App - OpenHarmony | OpenHarmony SDK |
|
|
222
|
+
| No client SDK | None (`sdk_integration_mode: "server_only"`) |
|
|
223
|
+
|
|
224
|
+
**Programming language** (Android / iOS SDK only):
|
|
225
|
+
|
|
226
|
+
| SDK Type | Supported Languages |
|
|
227
|
+
|---|---|
|
|
228
|
+
| Android SDK | Java / Kotlin (can multi-select) |
|
|
229
|
+
| iOS SDK | Objective-C / Swift (can multi-select) |
|
|
230
|
+
| Other SDKs | Fixed language, no selection needed |
|
|
231
|
+
|
|
232
|
+
Follow-up: chose Android SDK → ask **"Which programming language? Java / Kotlin / both"**
|
|
233
|
+
Follow-up: chose iOS SDK → ask **"Which programming language? Objective-C / Swift / both"**
|
|
234
|
+
|
|
235
|
+
Record to `client_platform_languages`:
|
|
236
|
+
```json
|
|
237
|
+
"client_platform_languages": {
|
|
238
|
+
"android": ["java", "kotlin"],
|
|
239
|
+
"openharmony": ["typescript"]
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
> ⚠️ **Multi-platform meta field rules**: When ≥2 client platforms are selected, Draft meta **must** use `client_platforms` (array) + `client_platform_languages` (dictionary). Do NOT use only `client_sdk_type` (single value) + `client_language` (single value), which would only record one platform. Single-platform scenarios use `client_sdk_type` + `client_language`.
|
|
244
|
+
|
|
245
|
+
**Server integration**:
|
|
246
|
+
|
|
247
|
+
| Option | Server SDK Type | sdk_integration_mode |
|
|
248
|
+
|---|---|---|
|
|
249
|
+
| Java | Java SDK | `both` |
|
|
250
|
+
| Python | Python SDK | `both` |
|
|
251
|
+
| Go | Go SDK | `both` |
|
|
252
|
+
| Node.js | Node SDK | `both` |
|
|
253
|
+
| PHP | PHP SDK | `both` |
|
|
254
|
+
| C# / .NET | C# SDK | `both` |
|
|
255
|
+
| C++ | C++ SDK | `both` |
|
|
256
|
+
| Erlang | Erlang SDK | `both` |
|
|
257
|
+
| Lua | Lua SDK | `both` |
|
|
258
|
+
| Ruby | Ruby SDK | `both` |
|
|
259
|
+
| Other | Follow up on specific language; check wiki for SDK availability | `both` |
|
|
260
|
+
| No server SDK | None | `client_only` or `none` |
|
|
261
|
+
|
|
262
|
+
**SDK integration mode auto-detection**:
|
|
263
|
+
|
|
264
|
+
| Client Integration | Server Integration | sdk_integration_mode |
|
|
265
|
+
|---|---|---|
|
|
266
|
+
| Yes | Yes | `both` |
|
|
267
|
+
| Yes | No | `client_only` |
|
|
268
|
+
| No | Yes | `server_only` |
|
|
269
|
+
| No | No | `none` (RESTful / LogBus / DataX data ingestion) |
|
|
270
|
+
|
|
271
|
+
`none` mode: Suitable for historical data import, batch data sync, third-party system integration, etc. Refine phase does not inject SDK auto-track events.
|
|
272
|
+
|
|
273
|
+
### Item 4 — User Identity System (visitor ID + account ID combined)
|
|
274
|
+
|
|
275
|
+
Ask: **"What is the visitor ID generation strategy?"**
|
|
276
|
+
|
|
277
|
+
Options:
|
|
278
|
+
- `auto` — SDK auto-generates (default, suitable for most scenarios)
|
|
279
|
+
- `device_id` — Use device ID (iOS IDFV / Android AndroidID)
|
|
280
|
+
- `custom` — Custom visitor ID (must call `identify()` immediately after SDK init)
|
|
281
|
+
|
|
282
|
+
Follow-up: chose `custom` → ask **"What value should the visitor ID use? e.g.: device ID / UUID / guest temp ID"**
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
Ask: **"What is the account ID source?"**
|
|
287
|
+
|
|
288
|
+
Options:
|
|
289
|
+
- `user_account` — User account ID (unique identifier after login)
|
|
290
|
+
- `role_id` — Role ID (game-specific; one account may have multiple roles)
|
|
291
|
+
- `none` — No account system (pure guest mode)
|
|
292
|
+
|
|
293
|
+
Follow-up:
|
|
294
|
+
- chose `user_account` → ask **"What specific value for account ID? e.g.: user_id (user ID), phone (phone number), email (email address)"**
|
|
295
|
+
- chose `role_id` → explain **"Role ID is suitable for games — one account can create multiple roles, enabling finer-grained per-role behavior analysis"**
|
|
296
|
+
|
|
297
|
+
Record to `meta.user_identity`:
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Phase 1 — Draft
|
|
302
|
+
|
|
303
|
+
### 1.1 Construct Canonical Draft
|
|
304
|
+
|
|
305
|
+
Draft conceptual structure (**internal JSON; users do not view directly**):
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
Draft
|
|
309
|
+
├── meta:
|
|
310
|
+
│ ├── app_type: App type
|
|
311
|
+
│ ├── sdk_integration_mode: SDK integration mode: client_only / server_only / both
|
|
312
|
+
│ ├── client_platforms?: Client SDK type list (required when multi-platform, e.g. ["android","ios"])
|
|
313
|
+
│ ├── client_sdk_type?: Primary client SDK type (single platform, backward compatible)
|
|
314
|
+
│ ├── client_platform_languages?: Per-platform languages (required when multi-platform, e.g. {"android":["kotlin"],"ios":["swift"]})
|
|
315
|
+
│ ├── client_language?: Client dev language (single platform, backward compatible)
|
|
316
|
+
│ ├── server_language?: Server dev language (only when server_only or both)
|
|
317
|
+
│ ├── project_id?: AE project ID (filled in Phase 3)
|
|
318
|
+
│ ├── host?: AE web address (filled in Phase 3)
|
|
319
|
+
│ ├── plan_name: Plan name
|
|
320
|
+
│ ├── lang: xlsx output language (zh/en/ja/ko), based on user's current language; controls generated xlsx headers/sheet names
|
|
321
|
+
│ ├── scenario: Business scenario description
|
|
322
|
+
│ ├── source_type: Source material type
|
|
323
|
+
│ ├── user_identity: User identity config
|
|
324
|
+
│ │ ├── account_id_source: Account ID source: user_account / role_id / none
|
|
325
|
+
│ │ ├── account_id_field?: Account ID field name (only when user_account, e.g. user_id / phone / email)
|
|
326
|
+
│ │ ├── distinct_id_strategy: Visitor ID strategy: auto / device_id / custom
|
|
327
|
+
│ │ └── distinct_id_custom_value?: Custom visitor ID value
|
|
328
|
+
│ └── business_dimension: Business dimension config (injected in Phase 1.3)
|
|
329
|
+
│ ├── revenue_model: Revenue model: IAA / IAP / mixed / subscription / commission
|
|
330
|
+
│ ├── core_loop: Core gameplay loop description
|
|
331
|
+
│ ├── functional_entries: Functional entry list
|
|
332
|
+
│ ├── currency_system: Currency system
|
|
333
|
+
│ ├── ad_scenes: Ad scenes (IAA / mixed only)
|
|
334
|
+
│ └── iap_items: IAP items (IAP / mixed only)
|
|
335
|
+
├── events: Event array, each with platform field
|
|
336
|
+
├── event_properties: Global event property pool (deduplicated)
|
|
337
|
+
├── common_event_properties: Common/super properties (attached to every event)
|
|
338
|
+
└── user_properties: User properties
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**SDK integration mode fields**:
|
|
342
|
+
|
|
343
|
+
```json
|
|
344
|
+
// Multi-platform example (Android + iOS)
|
|
345
|
+
{
|
|
346
|
+
"sdk_integration_mode": "both", // client_only / server_only / both
|
|
347
|
+
"client_platforms": ["android", "ios"], // Required for multi-platform
|
|
348
|
+
"client_platform_languages": { // Required for multi-platform; per-platform languages
|
|
349
|
+
"android": ["kotlin"],
|
|
350
|
+
"ios": ["swift"]
|
|
351
|
+
},
|
|
352
|
+
"server_language": "java" // Only when server_only or both
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Single platform example (backward compatible)
|
|
356
|
+
{
|
|
357
|
+
"sdk_integration_mode": "client_only",
|
|
358
|
+
"client_sdk_type": "android", // Single platform
|
|
359
|
+
"client_language": "kotlin" // Single platform
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**Event platform tag (`events[].platform`)**:
|
|
364
|
+
|
|
365
|
+
```json
|
|
366
|
+
{
|
|
367
|
+
"event_name": "order_create",
|
|
368
|
+
"display_name": "Order Create",
|
|
369
|
+
"platform": "server", // client / server / both
|
|
370
|
+
"prop_names": ["order_id", "order_amount", "payment_method"],
|
|
371
|
+
"source": "prd"
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
- `platform: "client"` — Client-side upload (user behavior events)
|
|
376
|
+
- `platform: "server"` — Server-side upload (business data events)
|
|
377
|
+
- `platform: "both"` — Both sides upload (timestamps must be synced)
|
|
378
|
+
|
|
379
|
+
**Property object format (`event_properties` / `common_event_properties` pool entries)**:
|
|
380
|
+
|
|
381
|
+
```json
|
|
382
|
+
{
|
|
383
|
+
"name": "order_amount",
|
|
384
|
+
"display_name": "Order Amount",
|
|
385
|
+
"type": "number",
|
|
386
|
+
"desc": "Order total in cents",
|
|
387
|
+
"source": "prd"
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
> ⚠️ Field names: use `name` (NOT `prop_name`), `display_name`, `type`, `desc`, `source`. Events reference properties by `prop_names: ["order_amount", ...]` — this is an array of property `name` references (string array), NOT property objects.
|
|
392
|
+
|
|
393
|
+
**User property format (`user_properties` pool entries)**:
|
|
394
|
+
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"name": "vip_level",
|
|
398
|
+
"display_name": "VIP Level",
|
|
399
|
+
"type": "number",
|
|
400
|
+
"desc": "Current VIP level of the user",
|
|
401
|
+
"source": "chat",
|
|
402
|
+
"update_type": "user_set"
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
> `update_type` is one of: `user_set` (overwrite), `user_setOnce` (first-set-only), `user_add` (numeric accumulate).
|
|
407
|
+
|
|
408
|
+
**User identity fields (`meta.user_identity`)**:
|
|
409
|
+
|
|
410
|
+
```json
|
|
411
|
+
{
|
|
412
|
+
"account_id_source": "user_account", // Account ID source: user_account / role_id / none
|
|
413
|
+
"account_id_field": "user_id", // Account ID field name (only when user_account)
|
|
414
|
+
"distinct_id_strategy": "auto", // Visitor ID strategy: auto / device_id / custom
|
|
415
|
+
"distinct_id_custom_value": null // Custom visitor ID value description (only when strategy=custom)
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Property types** (enum): `string` / `number` / `bool` / `datetime` /
|
|
420
|
+
`object` (single object, with sub-properties) / `array_row` (object array, supports `parent.child` nesting) / `array_string` (string array)
|
|
421
|
+
|
|
422
|
+
**Naming rules**: Event names / property names must be `snake_case`; use `display_name` field for human-readable names.
|
|
423
|
+
|
|
424
|
+
### 1.2 Merge Source Materials
|
|
425
|
+
|
|
426
|
+
Priority from low to high: **template → codebase → prd → chat → autotrack**
|
|
427
|
+
|
|
428
|
+
- **template**: User-selected industry template (see "Template Lookup Convention" below) as baseline; each item marked `source: "template"`
|
|
429
|
+
- Templates prefer `.md` distilled files (`tracking-plan-template/*.md`), fall back to `.xlsx`
|
|
430
|
+
- Import command: `AE_LANG=<user_lang> ae-cli tracking code import-template --template <path> --out .ae-cli/draft.json`
|
|
431
|
+
- ⚠️ **Must validate immediately after template import** (see Phase 1.6); template content may not be fully correct
|
|
432
|
+
- ⚠️ **Template content is in Chinese; must translate after import**: Read draft.json, translate `display_name`, `event_desc`, `event_tag`, and property `display_name`/`desc` to user's language, then write back. Only `event_name`, property `name`, `type` identifiers remain as-is.
|
|
433
|
+
- ⚠️ **event_tag also needs translation**: `业务事件`→user's language (e.g. EN: `Business Event`), `系统事件`→user's language (e.g. EN: `System Event`; autotrack events are handled automatically by CLI, no need to re-translate)
|
|
434
|
+
- **codebase**: Scan project source directory, extract events/properties from business logic; **same-name events merge prop_names without overwriting existing fields**; new items `source: "codebase"`
|
|
435
|
+
- **prd**: Read all user-provided product documents (md / pdf / docx / URL / images), extract events and properties from each file; **same-name events merge prop_names without overwriting existing fields**; image files analyzed via multimodal interpretation of UI elements and interaction flows; all new items `source: "prd"`
|
|
436
|
+
- **prd path is a folder**: Recursively scan all files in the directory:
|
|
437
|
+
- md/pdf/docx → read text content, extract events/properties
|
|
438
|
+
- png/jpg/jpeg/webp → multimodal interpretation, analyze UI elements and interaction flows
|
|
439
|
+
- subdirectories → recurse
|
|
440
|
+
- other files → skip
|
|
441
|
+
- **prd path is a URL**: Fetch URL content directly, process by the same rules above
|
|
442
|
+
- **chat**: Anchor phase business scenario + refine phase edit instructions, `source: "chat"`
|
|
443
|
+
- **autotrack**: Auto-inject SDK auto-track events based on `meta.client_sdk_type` (only for `client_only` or `both` mode), `source: "autotrack"`
|
|
444
|
+
|
|
445
|
+
### 1.3 Inject Business Dimension Events
|
|
446
|
+
|
|
447
|
+
Based on `meta.business_dimension` collected in Phase 0, inject corresponding events by the following rules.
|
|
448
|
+
|
|
449
|
+
**Revenue model → Required events**:
|
|
450
|
+
|
|
451
|
+
| Revenue Model | Injected Events | Description |
|
|
452
|
+
|---|---|---|
|
|
453
|
+
| `IAA` | `ad_show`, `ad_click`, `ad_reward_get` | Ad impression / click / reward claim |
|
|
454
|
+
| `IAP` | `payment`, `payment_fail` | Payment success / failure |
|
|
455
|
+
| `mixed` | All IAA + IAP events | |
|
|
456
|
+
| `subscription` | `subscription_start`, `subscription_renew`, `subscription_cancel` | Subscription start / renew / cancel |
|
|
457
|
+
| `commission` | `order_create`, `order_paid`, `commission_settled` | Order create / payment / commission settlement |
|
|
458
|
+
|
|
459
|
+
**Core loop → Event sequence**:
|
|
460
|
+
|
|
461
|
+
Parse node actions from user's `core_loop` description, map to events:
|
|
462
|
+
|
|
463
|
+
Example: "Players repeatedly clear stages to earn coins, use coins to gacha for heroes"
|
|
464
|
+
→ Stage module: `stage_start` (stage begin), `stage_complete` (stage clear), `stage_fail` (stage fail)
|
|
465
|
+
→ Resource gain: `token_get` (coin gain, props: `token_type=diamond`, `token_amount`)
|
|
466
|
+
→ Gacha module: `gacha_draw` (gacha pull), `pool_type` (pool type), `draw_count` (draw count)
|
|
467
|
+
→ Hero gain: `hero_get` (hero acquired), `hero_id`
|
|
468
|
+
|
|
469
|
+
**Functional entries → Module event groups**:
|
|
470
|
+
|
|
471
|
+
| Functional Entry | Event Examples | Description |
|
|
472
|
+
|---|---|---|
|
|
473
|
+
| Stage | `stage_start`, `stage_complete`, `stage_fail`, `stage_id` | Stage start / complete / fail |
|
|
474
|
+
| Gacha | `gacha_draw`, `pool_type`, `draw_count`, `hero_get` | Gacha pull / pool / count / acquire |
|
|
475
|
+
| Shop | `shop_open`, `shop_buy`, `token_balance` | Shop open / buy / balance |
|
|
476
|
+
| Guild | `guild_join`, `guild_donate`, `guild_boss_start` | Guild join / donate / boss fight |
|
|
477
|
+
| Leaderboard | `rank_view`, `rank_refresh`, `rank_click` | Ranking view / refresh / click |
|
|
478
|
+
| Tasks | `task_accept`, `task_complete`, `task_reward_claim` | Task accept / complete / reward claim |
|
|
479
|
+
| Achievements | `achieve_unlock`, `achieve_reward_claim` | Achievement unlock / reward claim |
|
|
480
|
+
| Daily Check-in | `daily_sign`, `sign_reward_claim` | Daily sign-in / reward claim |
|
|
481
|
+
|
|
482
|
+
**Currency system → Property design**:
|
|
483
|
+
|
|
484
|
+
| Currency Type | Event | Properties |
|
|
485
|
+
|---|---|---|
|
|
486
|
+
| Hard currency (diamonds) gain | `token_get` | `token_type=diamond`, `token_amount`, `token_balance`, `source` |
|
|
487
|
+
| Soft currency (gold) gain | `token_get` | `token_type=gold`, `token_amount`, `token_balance`, `source` |
|
|
488
|
+
| Hard currency spend | `token_consume` | `token_type`, `token_amount`, `token_balance`, `consume_type` |
|
|
489
|
+
| Soft currency spend | `token_consume` | `token_type`, `token_amount`, `token_balance`, `consume_type` |
|
|
490
|
+
|
|
491
|
+
**Injection rules**:
|
|
492
|
+
1. Business dimension events marked `source: "business_dimension"`
|
|
493
|
+
2. When merging with source material events, **same-name events keep the source material version, do not overwrite**
|
|
494
|
+
3. When revenue model is `none` (no monetization), skip revenue-related event injection
|
|
495
|
+
|
|
496
|
+
### 1.4 Auto-inject SDK Auto-track Events
|
|
497
|
+
|
|
498
|
+
Based on SDK integration mode collected in Phase 0, decide whether to inject auto-track events:
|
|
499
|
+
|
|
500
|
+
**Injection conditions**:
|
|
501
|
+
- `sdk_integration_mode === "client_only"` → inject auto-track events
|
|
502
|
+
- `sdk_integration_mode === "both"` → inject auto-track events (client side only)
|
|
503
|
+
- `sdk_integration_mode === "server_only"` → **do NOT inject** (server SDKs have no auto-track)
|
|
504
|
+
- `sdk_integration_mode === "none"` → **do NOT inject** (no SDK; data ingestion via other methods)
|
|
505
|
+
|
|
506
|
+
**Injection rules**:
|
|
507
|
+
1. **Only inject recommended events**; optional events are not auto-injected (prompted in Refine phase for optional enablement)
|
|
508
|
+
2. Auto-track events placed at the end of `events` array, marked `source: "autotrack"`
|
|
509
|
+
3. Auto-track event `event_tag` set to `"System Event"`
|
|
510
|
+
4. Auto-track events only carry preset properties (`prop_names` is empty or contains only preset property names)
|
|
511
|
+
5. Preset properties prefixed with `#` are not added to `event_properties` pool (auto-collected by SDK)
|
|
512
|
+
6. **Deduplication**: Templates may already contain same-name auto-track events (e.g. `ta_app_start` marked `source: "template"`); CLI deduplicates by event name globally and will not inject duplicates
|
|
513
|
+
|
|
514
|
+
**SDK type → Recommended events** (see `references/autotrack-events.md` for details):
|
|
515
|
+
|
|
516
|
+
| SDK Type | Recommended (auto-inject) | Optional (Refine prompt) |
|
|
517
|
+
|---|---|---|
|
|
518
|
+
| Android / iOS | `ta_app_install`, `ta_app_start`, `ta_app_end` | `ta_app_view`, `ta_app_click`, `ta_app_crash` |
|
|
519
|
+
| JavaScript | `ta_page_show`, `ta_page_hide` | `ta_pageview` |
|
|
520
|
+
| WeChat Mini-program | `ta_mp_launch`, `ta_mp_show`, `ta_mp_hide`, `ta_mp_view`, `ta_mp_share` | `ta_page_leave`, `ta_add_favorite`, `ta_mp_click` |
|
|
521
|
+
| WeChat Mini-game | `ta_mp_launch`, `ta_mp_show`, `ta_mp_hide` | — |
|
|
522
|
+
| Unity | `ta_app_install`, `ta_app_start`, `ta_app_end` | `ta_scene_loaded`, `ta_scene_unloaded` |
|
|
523
|
+
| Unity WeChat Mini-game | `ta_mg_launch`, `ta_mg_show`, `ta_mg_hide` | `ta_scene_loaded`, `ta_scene_unloaded` |
|
|
524
|
+
| Other game engines | `ta_app_install`, `ta_app_start`, `ta_app_end` | — |
|
|
525
|
+
|
|
526
|
+
**Auto-track event purpose notes**:
|
|
527
|
+
- Auto-track events are the SDK's built-in auto-reporting mechanism; **you do not need to manually define same-name events**
|
|
528
|
+
- Example: JavaScript SDK's `ta_page_show` auto-collects page views; no need to define `home_page_show`, `about_page_show` etc.
|
|
529
|
+
- If templates already contain auto-track events (e.g. `ta_app_install` in industry templates), CLI will not inject duplicates
|
|
530
|
+
- These events require **enabling corresponding switches** during SDK initialization in the `ae-generate-tracking-code` phase
|
|
531
|
+
|
|
532
|
+
**Draft JSON example**:
|
|
533
|
+
|
|
534
|
+
```json
|
|
535
|
+
{
|
|
536
|
+
"event_name": "ta_app_install",
|
|
537
|
+
"display_name": "App Install",
|
|
538
|
+
"event_desc": "Triggered on first app install; upgrades do not trigger; reinstall after deletion triggers",
|
|
539
|
+
"event_tag": "System Event",
|
|
540
|
+
"platform": "client",
|
|
541
|
+
"prop_names": [],
|
|
542
|
+
"source": "autotrack"
|
|
543
|
+
}
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**Note**: Auto-track event `platform` is always `"client"`, because only client SDKs have auto-track capability.
|
|
547
|
+
|
|
548
|
+
### 1.5 Persist + Generate xlsx
|
|
549
|
+
|
|
550
|
+
**Must write draft.json first, then run draft command. Do not skip this step and run ae-cli tracking plan draft directly.**
|
|
551
|
+
|
|
552
|
+
- Save draft to `.ae-cli/draft.json`
|
|
553
|
+
- ⚠️ **Write `meta.lang`**: Set `draft.meta.lang` based on user's current language (`zh`/`en`/`ja`/`ko`), ensuring generated xlsx headers / sheet names / type values match the AE platform language
|
|
554
|
+
- **Must verify file was updated after writing** (check file modification time or content); only generate xlsx after confirming new content
|
|
555
|
+
- Generate upload-ready xlsx:
|
|
556
|
+
|
|
557
|
+
```bash
|
|
558
|
+
AE_LANG=<user_lang> ae-cli tracking plan draft --in .ae-cli/draft.json --out .ae-cli/draft.xlsx
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### 1.6 Rule Validation (must execute)
|
|
562
|
+
|
|
563
|
+
Auto-validate during xlsx generation to ensure compliance with AE tracking plan rules:
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
AE_LANG=<user_lang> ae-cli tracking plan draft --in .ae-cli/draft.json --out .ae-cli/draft.xlsx --fix
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
**Validation rules**:
|
|
570
|
+
|
|
571
|
+
| Rule | Description | Auto-fix |
|
|
572
|
+
|---|---|---|
|
|
573
|
+
| Display name uniqueness | Within same property pool, `display_name` must not repeat | ✅ Add distinguishing prefix |
|
|
574
|
+
| Object array consistency | Same `array_row` across different events must have identical sub-properties | ✅ Fill missing sub-properties |
|
|
575
|
+
| snake_case | Event/property names must match `^[a-z][a-z0-9_]*$` | ❌ Manual fix needed |
|
|
576
|
+
| Property name uniqueness | Property names must not repeat | ❌ Manual fix needed |
|
|
577
|
+
| Event name uniqueness | Event names must not repeat | ✅ Remove later duplicates |
|
|
578
|
+
|
|
579
|
+
**Validation flow**:
|
|
580
|
+
|
|
581
|
+
1. CLI auto-validates draft.json
|
|
582
|
+
2. Fixable issues found → auto-fix → update draft.json → generate xlsx
|
|
583
|
+
3. Non-fixable issues found → error; manual fix of draft.json needed
|
|
584
|
+
4. No issues → proceed to Phase 1.7
|
|
585
|
+
|
|
586
|
+
**Note**: Display names can be the same across different property pools (e.g. `vip_level` can be both an event property and a user property).
|
|
587
|
+
|
|
588
|
+
### 1.7 Show Summary
|
|
589
|
+
|
|
590
|
+
Display to user via markdown table: event count / event property pool size / super property count / user property count; show deliverable paths.
|
|
591
|
+
|
|
592
|
+
After displaying, tell user:
|
|
593
|
+
|
|
594
|
+
```
|
|
595
|
+
Phase 1 complete.
|
|
596
|
+
Next: Phase 2 — Refine to confirm the plan.
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
### 📁 Template Lookup Convention
|
|
600
|
+
|
|
601
|
+
Run the following command to dynamically discover available templates:
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
AE_LANG=<user_lang> ae-cli tracking plan list-templates
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
**Language rules**: Template file names are in Chinese. When displaying to users, **must translate to user's current language**; **do NOT** include the original Chinese name (e.g. show only "Card Game v1", not "Card Game (卡牌游戏) v1").
|
|
608
|
+
|
|
609
|
+
Search directories in order:
|
|
610
|
+
|
|
611
|
+
1. `./tracking-plan-template/` — Project root (development)
|
|
612
|
+
2. `~/.ae-cli/templates/` — `ae-cli tracking` CLI user directory after installation (future default)
|
|
613
|
+
|
|
614
|
+
Each template prefers `.md` distilled file (if same-name `.md` exists, return md path; otherwise return xlsx path).
|
|
615
|
+
Auto-detect format on import:
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
AE_LANG=<user_lang> ae-cli tracking code import-template --template <path> --out .ae-cli/draft.json
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
---
|
|
622
|
+
|
|
623
|
+
## Phase 2 — Refine (5-segment loop)
|
|
624
|
+
|
|
625
|
+
In order, one conversation round per segment:
|
|
626
|
+
|
|
627
|
+
1. **sdk_config (SDK config + User identity, combined)** — Show SDK integration mode, platform/language, visitor ID strategy, account ID source, corresponding SDK calls
|
|
628
|
+
2. **business (Business dimension + Business events, combined)** — Show revenue model, core loop, functional entries, injected event modules (grouped by platform)
|
|
629
|
+
3. **autotrack (Auto-track events)** — Show SDK auto-track events in a separate table, note enablement method
|
|
630
|
+
4. **common_props (Super properties)** — Show all super properties, note usage scenarios and considerations
|
|
631
|
+
5. **props (Event properties + User properties)** — Show event property pool grouped by event + user properties table
|
|
632
|
+
|
|
633
|
+
Per-segment flow:
|
|
634
|
+
|
|
635
|
+
1. Display corresponding section of current draft
|
|
636
|
+
2. Ask **"Does this look correct? `ok` to proceed to next segment, or describe what to change"**
|
|
637
|
+
3. User gives natural language instructions → update `.ae-cli/draft.json` → re-run:
|
|
638
|
+
```bash
|
|
639
|
+
AE_LANG=<user_lang> ae-cli tracking plan draft --in .ae-cli/draft.json --out .ae-cli/draft.xlsx
|
|
640
|
+
```
|
|
641
|
+
4. User `ok` → proceed to next segment
|
|
642
|
+
|
|
643
|
+
User may say **"Go back to segment N"** at any time to jump to any segment (N = 1-5).
|
|
644
|
+
|
|
645
|
+
---
|
|
646
|
+
|
|
647
|
+
### sdk_config (Phase 2 Segment 1)
|
|
648
|
+
|
|
649
|
+
Show SDK integration config + user identity system:
|
|
650
|
+
|
|
651
|
+
```
|
|
652
|
+
SDK Integration Config:
|
|
653
|
+
- Integration mode: <client_only / server_only / both / none>
|
|
654
|
+
- Client: <platform> (<language>)
|
|
655
|
+
- Server: <language>
|
|
656
|
+
|
|
657
|
+
User Identity Config:
|
|
658
|
+
- Account ID source: <user_account / role_id / none>
|
|
659
|
+
- Account ID field: <specific field>
|
|
660
|
+
- Visitor ID strategy: <auto / device_id / custom>
|
|
661
|
+
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
User ok / modify.
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
### business (Phase 2 Segment 2)
|
|
669
|
+
|
|
670
|
+
Show business dimensions + business events:
|
|
671
|
+
|
|
672
|
+
```
|
|
673
|
+
Business Dimensions:
|
|
674
|
+
- Revenue model: <IAA / IAP / mixed / subscription / commission>
|
|
675
|
+
- Core loop: <description>
|
|
676
|
+
- Functional entries: <list>
|
|
677
|
+
- Currency system: <hard currency / soft currency>
|
|
678
|
+
|
|
679
|
+
Injected Event Modules (grouped by platform):
|
|
680
|
+
|
|
681
|
+
Client events (platform=client):
|
|
682
|
+
- <event>: <display_name> — <event_desc>
|
|
683
|
+
- ...
|
|
684
|
+
|
|
685
|
+
Server events (platform=server):
|
|
686
|
+
- <event>: <display_name> — <event_desc>
|
|
687
|
+
- ...
|
|
688
|
+
|
|
689
|
+
Both-platform events (platform=both):
|
|
690
|
+
- <event>: <display_name> — <event_desc>
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
**Conflict detection**: If business dimensions contradict source materials, prominently flag for user confirmation.
|
|
694
|
+
|
|
695
|
+
User ok / modify.
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
### autotrack (Phase 2 Segment 3)
|
|
700
|
+
|
|
701
|
+
Only shown for `client_only` or `both` mode.
|
|
702
|
+
|
|
703
|
+
Display SDK auto-track event list, with notes:
|
|
704
|
+
- These events are auto-collected by the SDK; **no manual track() calls needed** during code generation — just enable corresponding switches during SDK init
|
|
705
|
+
- `display_name` or `event_desc` can be adjusted; event names cannot be changed
|
|
706
|
+
|
|
707
|
+
User ok / modify.
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
### common_props (Phase 2 Segment 4)
|
|
712
|
+
|
|
713
|
+
Show all super properties (`name` / `display_name` / `type` / `desc`).
|
|
714
|
+
|
|
715
|
+
Notes:
|
|
716
|
+
- Super properties are attached to every event; ideal for **business-wide global dimensions**
|
|
717
|
+
- Common super properties (by app type):
|
|
718
|
+
- H5/Web: `channel` (source channel), `referrer_domain` (referring domain)
|
|
719
|
+
- Mobile App: `channel`, `app_version`, `platform`
|
|
720
|
+
- Game: `channel`, `vip_level`, `server_id`
|
|
721
|
+
- Mini-program: `channel`, `scene`
|
|
722
|
+
- **Prohibited**: Do NOT set SDK preset properties (`#` prefix) as super properties
|
|
723
|
+
|
|
724
|
+
User ok / modify.
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
### props (Phase 2 Segment 5)
|
|
729
|
+
|
|
730
|
+
Show event property pool (grouped by event) + user properties table:
|
|
731
|
+
|
|
732
|
+
- Event properties: `name` / `display_name` / `type` / `desc`, grouped by `event_tag`
|
|
733
|
+
- User properties: `name` / `display_name` / `type` / `update_type` / `desc`
|
|
734
|
+
|
|
735
|
+
**User property update methods**:
|
|
736
|
+
| Update Method | Description | Use Case |
|
|
737
|
+
|---|---|---|
|
|
738
|
+
| `user_setOnce` | Only set on first occurrence; subsequent updates ignored | First registration time, first payment time, first channel |
|
|
739
|
+
| `user_set` | Overwrite update; always takes latest value | Current level, current balance, nickname, VIP status |
|
|
740
|
+
| `user_add` | Numeric accumulation; suitable for cumulative values | Total recharge amount, total login days, total ads watched |
|
|
741
|
+
|
|
742
|
+
User ok → **immediately execute archive command**, then proceed to Phase 3.
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
### Refine Phase Heuristic Suggestions
|
|
747
|
+
|
|
748
|
+
- **Super properties vs Event properties**: Property appears on 3+ events → promote to super property; super properties are suitable for business-wide global dimensions (`channel`, `vip_level`, `ab_test_group`)
|
|
749
|
+
- **Prohibited**: Do NOT set SDK preset properties (`#` prefix) as super properties
|
|
750
|
+
- **Events must have properties**: Every event must have at least one semantically meaningful, describable property
|
|
751
|
+
- **Nested properties**: `array_row` parent properties have `parent.child` sub-properties describing a group of objects
|
|
752
|
+
|
|
753
|
+
---
|
|
754
|
+
|
|
755
|
+
## Post-Phase 2 — Pre-delivery Self-check
|
|
756
|
+
|
|
757
|
+
**⚠️ Before uploading to AE, must complete the following self-check. Fix any issues before uploading.**
|
|
758
|
+
|
|
759
|
+
### Naming Convention Check
|
|
760
|
+
|
|
761
|
+
- [ ] Do event/property names start with a letter?
|
|
762
|
+
- [ ] Do event/property names contain only letters, digits, and underscores (no Chinese, no spaces)?
|
|
763
|
+
- [ ] Are there duplicate event names or synonymous events coexisting (e.g. `order_create` and `create_order`)?
|
|
764
|
+
- [ ] Does the same property name map to multiple display names or types?
|
|
765
|
+
|
|
766
|
+
### Revenue Model Required Events Check
|
|
767
|
+
|
|
768
|
+
| Revenue Model | Must Include Events | Check |
|
|
769
|
+
|---|---|---|
|
|
770
|
+
| IAA | `ad_show`, `ad_click`, `ad_reward_get` | [ ] |
|
|
771
|
+
| IAP | `payment`, `payment_fail` | [ ] |
|
|
772
|
+
| `mixed` | All IAA + IAP events | [ ] |
|
|
773
|
+
| `subscription` | `subscription_start`, `subscription_renew`, `subscription_cancel` | [ ] |
|
|
774
|
+
| commission | `order_create`, `order_paid`, `commission_settled` | [ ] |
|
|
775
|
+
|
|
776
|
+
### Paired Event Consistency Check
|
|
777
|
+
|
|
778
|
+
**Start/end paired events** (e.g. `battle_start`/`battle_end`) must carry **same-name, same-structure** object arrays:
|
|
779
|
+
- Object array sub-properties reported by start event must be same name and same type in end event
|
|
780
|
+
- Check: stage pairs (`stage_start`/`stage_complete`), battle pairs (`battle_start`/`battle_end`), gacha pairs (`gacha_draw`/`hero_get`), etc.
|
|
781
|
+
|
|
782
|
+
### Unit Description Check
|
|
783
|
+
|
|
784
|
+
- [ ] Are monetary fields annotated with unit (cents/USD)?
|
|
785
|
+
- [ ] Are duration fields annotated with unit (seconds/milliseconds)?
|
|
786
|
+
- [ ] Are balance fields annotated as post-recharge balance or pre-operation balance?
|
|
787
|
+
|
|
788
|
+
### Enum Value Check
|
|
789
|
+
|
|
790
|
+
- [ ] Are enum values listed in event description (≤ 10 values)?
|
|
791
|
+
- [ ] For > 10 values, is there a note to use a dimension table?
|
|
792
|
+
- [ ] Is the null-value fallback strategy documented (e.g. "unknown channel → use `unknown`")?
|
|
793
|
+
|
|
794
|
+
### Object Array Usage Check
|
|
795
|
+
|
|
796
|
+
Only use object arrays (`array_row`) when ALL THREE conditions are met; otherwise use object or plain properties:
|
|
797
|
+
|
|
798
|
+
1. An event property has multiple same-type entities to record
|
|
799
|
+
2. Each entity needs ≥ 2 properties recorded
|
|
800
|
+
3. Entity count is variable
|
|
801
|
+
|
|
802
|
+
### Object Usage Check
|
|
803
|
+
|
|
804
|
+
Use object (`object`) when the following condition is met; distinguish from object arrays:
|
|
805
|
+
|
|
806
|
+
- **One-to-one** relationship → use `object`: e.g. user's current "equipment" details, player's "current deployed hero" (only one)
|
|
807
|
+
- **One-to-many** relationship → use `array_row`: e.g. "backpack items" list, "lineup heroes" list (multiple)
|
|
808
|
+
|
|
809
|
+
Quick rule: **data shaped like `{...}` → use `object`; data shaped like `[{...}]` → use `array_row`**.
|
|
810
|
+
|
|
811
|
+
---
|
|
812
|
+
|
|
813
|
+
## Post-Phase 2 — Archive
|
|
814
|
+
|
|
815
|
+
After all 5 Refine segments are confirmed (user `ok` on Segment 5), **archive immediately; do not skip or delay**:
|
|
816
|
+
|
|
817
|
+
```bash
|
|
818
|
+
AE_LANG=<user_lang> ae-cli tracking plan archive --draft .ae-cli/draft.json --xlsx .ae-cli/draft.xlsx --name "<plan_name>"
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
| Parameter | Description | Example |
|
|
822
|
+
|---|---|---|
|
|
823
|
+
| `--draft` | draft.json path (required) | `.ae-cli/draft.json` |
|
|
824
|
+
| `--xlsx` | draft.xlsx path (required) | `.ae-cli/draft.xlsx` |
|
|
825
|
+
| `--name` | Plan name used as output filename prefix (required) | `"AI SaaS Website Tracking Plan"` |
|
|
826
|
+
|
|
827
|
+
Output lands at `plans/<date>-<plan_name>.xlsx`; `draft.json` is updated with `meta.archived_at`.
|
|
828
|
+
|
|
829
|
+
After archiving, tell user:
|
|
830
|
+
|
|
831
|
+
```
|
|
832
|
+
✅ Archive complete
|
|
833
|
+
File path: plans/<date>-<plan_name>.xlsx
|
|
834
|
+
|
|
835
|
+
Next: Phase 3 — Upload to AE:
|
|
836
|
+
1. Login to AE to get token
|
|
837
|
+
2. Get AE project ID
|
|
838
|
+
3. Upload plan to AE
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
**⚠️ Hard rule**: Archive must complete before entering Phase 3. Before Phase 3.1's first question, must confirm `meta.archived_at` exists.
|
|
842
|
+
|
|
843
|
+
---
|
|
844
|
+
|
|
845
|
+
## Phase 3 — Token & projectId
|
|
846
|
+
|
|
847
|
+
At the start of Phase 3, tell user:
|
|
848
|
+
|
|
849
|
+
```
|
|
850
|
+
## Phase 3 — Upload Preparation
|
|
851
|
+
Next steps:
|
|
852
|
+
1. AE web address
|
|
853
|
+
2. Login to AE to get token
|
|
854
|
+
3. AE project ID
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
### 3.1 Get AE Web Address
|
|
858
|
+
|
|
859
|
+
❌ **Do NOT provide unconfirmed example URLs here.** Simply ask the user directly.
|
|
860
|
+
|
|
861
|
+
Ask user: **"What is the AE web address?"**
|
|
862
|
+
|
|
863
|
+
After user responds, save to `.ae-cli/draft.json` `meta.host` field.
|
|
864
|
+
|
|
865
|
+
Guide getting and saving token based on AE web address:
|
|
866
|
+
|
|
867
|
+
```bash
|
|
868
|
+
ae-cli auth login --host <host>
|
|
869
|
+
ae-cli auth status
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
Common error tips and self-recovery:
|
|
873
|
+
|
|
874
|
+
| Error | Cause | What to Tell the User |
|
|
875
|
+
|---|---|---|
|
|
876
|
+
| `Chrome JS-from-AppleEvents disabled` | Chrome disabled AppleScript JS execution | Chrome menu View → Developer → Allow JavaScript from Apple Events, then retry |
|
|
877
|
+
| `not_mac` | Not macOS | Manually set `export AE_TOKEN=<uuid>` (get from DevTools → Application → Local Storage → `ACCESS_TOKEN`, strip quotes) |
|
|
878
|
+
| `NO_TAB_FOUND` | Not logged into AE in Chrome | Open and login to TE in Chrome first, then retry |
|
|
879
|
+
|
|
880
|
+
Token cached for 20 hours; same host avoids re-auth.
|
|
881
|
+
|
|
882
|
+
### 3.2 Get AE Project ID and Update Draft
|
|
883
|
+
|
|
884
|
+
Ask user: **"What is the AE project ID? Go to AE Admin → 'Project Settings' → 'Integration Config' → copy 'Project ID', or check the AE system URL parameter currentProjectId=<id>"**
|
|
885
|
+
|
|
886
|
+
After user provides projectId, update `.ae-cli/draft.json` `meta.project_id`.
|
|
887
|
+
|
|
888
|
+
---
|
|
889
|
+
|
|
890
|
+
## Phase 4 — Upload
|
|
891
|
+
|
|
892
|
+
At the start of Phase 4, tell user:
|
|
893
|
+
|
|
894
|
+
```
|
|
895
|
+
## Phase 4 — Upload to AE
|
|
896
|
+
Checking project's existing plan...
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
### 4.1 Check Project's Existing Plan
|
|
900
|
+
|
|
901
|
+
Before uploading, check if the project already has a tracking plan:
|
|
902
|
+
|
|
903
|
+
```bash
|
|
904
|
+
AE_LANG=<user_lang> ae-cli tracking plan fetch --project <projectId> --host <host> > .ae-cli/existing-plan.json
|
|
905
|
+
```
|
|
906
|
+
|
|
907
|
+
**Result assessment**:
|
|
908
|
+
- File empty or command error `404` → project has no plan; upload directly
|
|
909
|
+
- File has content → project has an existing plan; show summary + **conflict detection**
|
|
910
|
+
|
|
911
|
+
**When existing plan exists, display**:
|
|
912
|
+
```
|
|
913
|
+
Project already has a tracking plan:
|
|
914
|
+
- Events: XX
|
|
915
|
+
- Event properties: YY
|
|
916
|
+
- Super properties: ZZ
|
|
917
|
+
- User properties: WW
|
|
918
|
+
|
|
919
|
+
Choose upload mode:
|
|
920
|
+
1. Append (keep existing plan, add new events/properties)
|
|
921
|
+
2. Replace (delete existing plan, upload new plan)
|
|
922
|
+
|
|
923
|
+
Append / Replace?
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
---
|
|
927
|
+
|
|
928
|
+
### 4.2 Append Mode Conflict Detection
|
|
929
|
+
|
|
930
|
+
When user chooses "Append", **must detect conflicts** (AE merge-by-name has silent discard risk):
|
|
931
|
+
|
|
932
|
+
**Read two files**:
|
|
933
|
+
- Existing plan: `.ae-cli/existing-plan.json`
|
|
934
|
+
- New plan: `.ae-cli/draft.json`
|
|
935
|
+
|
|
936
|
+
**Detect two types of conflicts**:
|
|
937
|
+
|
|
938
|
+
#### Conflict Type A: Same-name property type mismatch (severe)
|
|
939
|
+
|
|
940
|
+
AE rule: Same-name properties must have the same type, otherwise reported data will be discarded.
|
|
941
|
+
|
|
942
|
+
**Detection logic**:
|
|
943
|
+
|
|
944
|
+
Compare `event_properties` / `common_event_properties` / `user_properties` three property pools:
|
|
945
|
+
- For each property in the new plan, find same-name property in existing plan
|
|
946
|
+
- If same name but different type → record as `property_type_conflict` (severe error)
|
|
947
|
+
|
|
948
|
+
**Conflict display**:
|
|
949
|
+
```
|
|
950
|
+
⚠️ Severe conflict: Same-name property type mismatch
|
|
951
|
+
|
|
952
|
+
The following properties have different types in the existing plan vs. new plan.
|
|
953
|
+
Appending will cause reported data to be discarded:
|
|
954
|
+
|
|
955
|
+
| Property Name | Existing Type | New Plan Type |
|
|
956
|
+
|---|---|---|
|
|
957
|
+
| order_amount | number | string |
|
|
958
|
+
| vip_level | string | number |
|
|
959
|
+
|
|
960
|
+
Suggestions:
|
|
961
|
+
1. Modify the new plan's property types to match the existing plan
|
|
962
|
+
2. Or choose "Replace" mode to redefine types
|
|
963
|
+
|
|
964
|
+
Continue append (without fixing) / Modify draft / Switch to replace?
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
#### Conflict Type B: Same-name events (advisory)
|
|
968
|
+
|
|
969
|
+
AE merge-by-name: Same-name events are not overwritten; new-name events are added.
|
|
970
|
+
|
|
971
|
+
**Detection logic**:
|
|
972
|
+
|
|
973
|
+
For each event in the new plan, find same-name event in existing plan:
|
|
974
|
+
- If same-name event exists → record as `event_exists` (advisory, not an error)
|
|
975
|
+
|
|
976
|
+
**Conflict display** (advisory only):
|
|
977
|
+
```
|
|
978
|
+
⚠️ Advisory: The following events already exist in the project (append mode will not overwrite)
|
|
979
|
+
|
|
980
|
+
- user_login (existing: 2 properties, new plan: 3 properties)
|
|
981
|
+
- order_create (existing: 5 properties, new plan: 5 properties)
|
|
982
|
+
|
|
983
|
+
After append:
|
|
984
|
+
- Existing event property associations will not change
|
|
985
|
+
- New properties for existing events will not be added
|
|
986
|
+
- New events will be added normally
|
|
987
|
+
|
|
988
|
+
Continue append? yes / no
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
---
|
|
992
|
+
|
|
993
|
+
### 4.3 Upload Flow
|
|
994
|
+
|
|
995
|
+
Decide based on conflict detection results:
|
|
996
|
+
|
|
997
|
+
| Detection Result | Action |
|
|
998
|
+
|---|---|
|
|
999
|
+
| No conflicts | Upload directly |
|
|
1000
|
+
| Advisory only (Type B) | Upload after user confirmation |
|
|
1001
|
+
| Severe conflict (Type A) | User fixes or switches to replace |
|
|
1002
|
+
|
|
1003
|
+
Upload command:
|
|
1004
|
+
```bash
|
|
1005
|
+
AE_LANG=<user_lang> ae-cli tracking plan upload --project <projectId> --xlsx .ae-cli/draft.xlsx --draft .ae-cli/draft.json [--replace]
|
|
1006
|
+
```
|
|
1007
|
+
|
|
1008
|
+
- **With `--replace`**: Delete existing project plan first then upload (when user chooses "Replace", or severe conflict switches to replace)
|
|
1009
|
+
- **Without `--replace`**: AE merge-by-name merge (no conflicts, or advisory only with user confirmation to append)
|
|
1010
|
+
|
|
1011
|
+
If CLI returns exit code 13 (language mismatch), the AE project language differs from xlsx language. Do NOT silently retry; must prompt user:
|
|
1012
|
+
> "AE project language is {aeLang}, but current xlsx is {xlsxLang}. Switch AE language?"
|
|
1013
|
+
|
|
1014
|
+
After user confirms, re-upload with `--switch-lang`:
|
|
1015
|
+
```bash
|
|
1016
|
+
AE_LANG=<user_lang> ae-cli tracking plan upload --project <projectId> --xlsx .ae-cli/draft.xlsx --draft .ae-cli/draft.json --switch-lang [--replace]
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
On successful upload, prompt user to verify in AE Admin. **Provide the full URL** (tracking plan page URL format: `https://<host>/#/data/plan`).
|
|
1020
|
+
|
|
1021
|
+
---
|
|
1022
|
+
|
|
1023
|
+
### 4.4 Upload Failure Handling and Auto-fix
|
|
1024
|
+
|
|
1025
|
+
Use `--auto-fix` option on upload (enabled by default); CLI auto-detects and fixes errors:
|
|
1026
|
+
|
|
1027
|
+
```bash
|
|
1028
|
+
AE_LANG=<user_lang> ae-cli tracking plan upload --project <projectId> --xlsx .ae-cli/draft.xlsx --draft .ae-cli/draft.json [--replace]
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
#### AE API Error Types
|
|
1032
|
+
|
|
1033
|
+
| Error Type | Description | Auto-fix |
|
|
1034
|
+
|---|---|---|
|
|
1035
|
+
| `event_prop_display_duplicate` | Event property display name duplicate | ✅ Add distinguishing prefix |
|
|
1036
|
+
| `complex_event_property_should_has_same_child_property` | Object array sub-property inconsistency | ✅ Fill missing sub-properties |
|
|
1037
|
+
| `event_name_duplicate` | Event name duplicate | ✅ Remove later duplicates |
|
|
1038
|
+
| `property_type_conflict` | Property type mismatch (append mode) | ❌ Switch to replace mode |
|
|
1039
|
+
|
|
1040
|
+
#### Auto-fix Flow
|
|
1041
|
+
|
|
1042
|
+
CLI auto-executes:
|
|
1043
|
+
1. Upload xlsx to TE
|
|
1044
|
+
2. Check if `eventErrorMap` has errors
|
|
1045
|
+
3. Fixable errors → auto-fix draft.json → regenerate xlsx → re-upload
|
|
1046
|
+
4. Loop up to 3 times; prompt user for manual intervention if exceeded
|
|
1047
|
+
|
|
1048
|
+
**Example output**:
|
|
1049
|
+
```
|
|
1050
|
+
🔧 Auto-fixing upload errors (attempt 1/3)...
|
|
1051
|
+
Fixed: Fixed object array sub-property inconsistency, Fixed display name duplicate
|
|
1052
|
+
[plan-upload] regenerated: .ae-cli/draft.xlsx
|
|
1053
|
+
```
|
|
1054
|
+
|
|
1055
|
+
---
|
|
1056
|
+
|
|
1057
|
+
### 4.5 Post-success Actions
|
|
1058
|
+
|
|
1059
|
+
After successful upload, prompt user to verify in AE Admin. **Provide the full URL** (tracking plan page URL format: `https://<host>/#/data/plan`)
|
|
1060
|
+
|
|
1061
|
+
**Ask about generating tracking code**:
|
|
1062
|
+
|
|
1063
|
+
The tracking plan has been uploaded successfully. Would you like to generate tracking code next?
|
|
1064
|
+
|
|
1065
|
+
- **Yes** → guide user to use the `ae-generate-tracking-code` skill
|
|
1066
|
+
- **No** → inform user of plan archive location: `plans/<date>-<plan_name>.xlsx`; can continue anytime
|
|
1067
|
+
|
|
1068
|
+
## Prohibitions
|
|
1069
|
+
|
|
1070
|
+
- Asking all anchor questions at once
|
|
1071
|
+
- Skipping Phase 3 and uploading directly
|
|
1072
|
+
- Manually assembling xlsx bypassing `.ae-cli/draft.json`
|
|
1073
|
+
- Calling `fetch` AE API directly within the skill — all AE communication must go through project scripts / CLI
|
|
1074
|
+
|
|
1075
|
+
---
|
|
1076
|
+
|
|
1077
|
+
## Internal Reference (contributor use; not skill usage paths)
|
|
1078
|
+
|
|
1079
|
+
- `skills/ae-generate-tracking-plan/references/te-api.md` — AE backend endpoint capture documentation
|
|
1080
|
+
- `skills/ae-generate-tracking-plan/references/xlsx-schema.md` — xlsx format contract (writer rules + reader compatibility)
|
|
1081
|
+
- `skills/ae-generate-tracking-plan/references/autotrack-events.md` — SDK auto-track event definitions (per-platform event lists + SDK type mapping)
|
|
1082
|
+
- `skills/ae-generate-tracking-plan/references/business-dimension-mapping.md` — Business dimension → event/property mapping table (revenue model / functional entries / currency system → injected events)
|
|
1083
|
+
- `src/plan/types.ts` — Draft TypeScript type definitions
|