@thinkingai/ae-cli 6.1.17 → 6.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +2 -0
  2. package/README.zh.md +6 -0
  3. package/dist/{auth-77BUFLGC.js → auth-QPEVVBKT.js} +20 -15
  4. package/dist/auth-UMJAA72O.js +15 -0
  5. package/dist/{capability-72DTW5M2.js → capability-ASI62I4A.js} +53 -15
  6. package/dist/{chunk-UW5UN47B.js → chunk-533JK3YX.js} +2 -0
  7. package/dist/{chunk-UOUS37JQ.js → chunk-6QK7SYYY.js} +5 -4
  8. package/dist/{chunk-TUKQZTMI.js → chunk-7K24F7T2.js} +2 -0
  9. package/dist/{chunk-OO6XR6LK.js → chunk-AMBFK2K3.js} +2 -0
  10. package/dist/{sync-DAVKYVMW.js → chunk-B5HMQAOM.js} +31 -540
  11. package/dist/{chunk-VR3LCBHW.js → chunk-DKEXH6Q5.js} +6 -5
  12. package/dist/{chunk-VTWMIC5L.js → chunk-E2JKXMVO.js} +2 -0
  13. package/dist/{chunk-LYVNONC4.js → chunk-FR2EDAQM.js} +36 -0
  14. package/dist/{chunk-ILIU36SU.js → chunk-GJXRF7Y6.js} +6 -5
  15. package/dist/{chunk-DWO43OIB.js → chunk-JQ3ENZZH.js} +2 -0
  16. package/dist/chunk-JYMGHGCE.js +191 -0
  17. package/dist/{chunk-GT46FPXN.js → chunk-KEWVSO64.js} +18 -8
  18. package/dist/chunk-KZ6ZHF5J.js +294 -0
  19. package/dist/chunk-O6K2ODUE.js +318 -0
  20. package/dist/chunk-QL6R6TSK.js +25215 -0
  21. package/dist/{chunk-4SGZG4XY.js → chunk-RWXIXOZG.js} +28 -13
  22. package/dist/{chunk-YA6SMTXG.js → chunk-S5PONFBM.js} +5 -4
  23. package/dist/{chunk-4NN5IWVN.js → chunk-T6OSFQZD.js} +2 -0
  24. package/dist/{chunk-PTE56QPL.js → chunk-TKHSULJT.js} +6 -0
  25. package/dist/{chunk-6EIJSNBD.js → chunk-Y74WTIKJ.js} +2 -0
  26. package/dist/{client-TKG4WBHN.js → client-N7NGZUNI.js} +6 -4
  27. package/dist/{community-report-client-FI4LNVYS.js → community-report-client-6OL6GBQW.js} +3 -3
  28. package/dist/{config-RE6CMGPK.js → config-XNMACCKX.js} +10 -8
  29. package/dist/{data-integration-XQYB4X4F.js → data-integration-4NZGZ45E.js} +2502 -272
  30. package/dist/index.js +137 -1245
  31. package/dist/{local-data-upload-client-BWHSUQQK.js → local-data-upload-client-EFHDLXFG.js} +3 -3
  32. package/dist/{memory-YK33G4T7.js → memory-HBJQ2GC5.js} +8 -7
  33. package/dist/{metadata-UILXHBWF.js → metadata-62EWBEIG.js} +12 -11
  34. package/dist/{model-NR3JHFSJ.js → model-BHLJ2QMT.js} +10 -9
  35. package/dist/personal-semantic-preference-JBVMAI7L.js +240 -0
  36. package/dist/project-semantic-BQ4MPUS5.js +1115 -0
  37. package/dist/sync-MUWPRM5I.js +522 -0
  38. package/dist/{te-agent-4BKBODMF.js → te-agent-WQZTMEK4.js} +12 -10
  39. package/dist/{te-analysis-O6DCO6BS.js → te-analysis-MNCG65LU.js} +534 -48
  40. package/dist/{te-community-HLC43QKH.js → te-community-BNE6KREL.js} +8 -7
  41. package/dist/{te-dataops-EJP56W3K.js → te-dataops-TXLKM2W6.js} +469 -68
  42. package/dist/{te-engage-FGBGQ4IY.js → te-engage-TPKLRVTL.js} +84 -10
  43. package/dist/{te-experiment-SO5MPDMJ.js → te-experiment-6BYKTCY7.js} +303 -12
  44. package/dist/{te-kb-SQCLHG6X.js → te-kb-BUD6N3NI.js} +312 -25
  45. package/dist/{te-system-YARIK4S5.js → te-system-44LZJDTQ.js} +573 -37
  46. package/dist/{te-team-EFKWYKMK.js → te-team-XMP47YXE.js} +10 -7
  47. package/dist/{update-OGPSZM5A.js → update-UODFOZ4P.js} +9 -7
  48. package/package.json +18 -9
  49. package/skills/ae-agent/SKILL.md +3 -4
  50. package/skills/ae-agent/references/edit-skill.md +3 -0
  51. package/skills/ae-agent/references/get-skill-content.md +1 -1
  52. package/skills/ae-agent/references/rescan-skills.md +15 -13
  53. package/skills/ae-agent/references/upload-skill.md +7 -4
  54. package/skills/ae-analysis/SKILL.md +45 -4
  55. package/skills/ae-analysis/metadata_resolution.md +38 -4
  56. package/skills/ae-analysis/references/analysis_data_retrieval.md +29 -0
  57. package/skills/ae-analysis/references/analysis_gateway_assets.md +1 -1
  58. package/skills/ae-analysis/references/asset_authentication_export.md +22 -0
  59. package/skills/ae-analysis/references/asset_authentication_list.md +18 -14
  60. package/skills/ae-analysis/references/asset_authentication_update.md +29 -14
  61. package/skills/ae-analysis/references/audience_models.md +18 -0
  62. package/skills/ae-analysis/references/command_index.md +19 -11
  63. package/skills/ae-analysis/references/dashboard_get.md +18 -1
  64. package/skills/ae-analysis/references/dashboard_update.md +3 -0
  65. package/skills/ae-analysis/references/personal_semantic_preference_add.md +23 -0
  66. package/skills/ae-analysis/references/personal_semantic_preference_delete.md +17 -0
  67. package/skills/ae-analysis/references/personal_semantic_preference_get.md +19 -0
  68. package/skills/ae-analysis/references/personal_semantic_preference_list.md +21 -0
  69. package/skills/ae-analysis/references/personal_semantic_preference_update.md +19 -0
  70. package/skills/ae-analysis/references/project_timezone_update.md +13 -4
  71. package/skills/ae-analysis/references/property_create.md +2 -0
  72. package/skills/ae-analysis/references/super_metadata_batch_create.md +2 -0
  73. package/skills/ae-analysis/references/user_cluster_models.md +2 -0
  74. package/skills/ae-analysis/references/user_cluster_update.md +8 -4
  75. package/skills/ae-analysis/references/user_tag_create.md +7 -1
  76. package/skills/ae-analysis/references/user_tag_models.md +8 -2
  77. package/skills/ae-data-integration/SKILL.md +24 -4
  78. package/skills/ae-data-integration/references/custom-layer.md +93 -0
  79. package/skills/ae-data-integration/references/error-handling.md +145 -0
  80. package/skills/ae-data-integration/references/handoff.md +77 -18
  81. package/skills/ae-data-integration/references/local-analysis.md +1 -1
  82. package/skills/ae-data-integration/references/reuse.md +9 -5
  83. package/skills/ae-data-integration/references/sink-upload.md +1 -1
  84. package/skills/ae-data-integration/references/source-inspect.md +35 -13
  85. package/skills/ae-data-integration/references/tracking-plan.md +7 -5
  86. package/skills/ae-data-integration/references/transform.md +12 -10
  87. package/skills/ae-data-integration/references/ue-mapping.md +33 -11
  88. package/skills/ae-data-integration/references/ue-routing.md +23 -0
  89. package/skills/ae-dataops/SKILL.md +11 -1
  90. package/skills/ae-dataops/references/dataops-backfill.md +135 -0
  91. package/skills/ae-engage/SKILL.md +5 -0
  92. package/skills/ae-engage/references/build-task-save-guide.md +14 -1
  93. package/skills/ae-engage/references/save-flow.md +37 -1
  94. package/skills/ae-engage/references/save-task.md +88 -0
  95. package/skills/ae-experiment/SKILL.md +14 -4
  96. package/skills/ae-experiment/references/manage_feature_whitelist.md +66 -0
  97. package/skills/ae-experiment/references/manage_guardrail_metrics.md +26 -0
  98. package/skills/ae-experiment/references/save_experiment.md +1 -1
  99. package/skills/ae-experiment/references/save_metric.md +20 -8
  100. package/skills/ae-kb/SKILL.md +121 -10
  101. package/skills/ae-project-semantic/SKILL.md +193 -0
  102. package/skills/ae-project-semantic/references/query-routing-v5.md +165 -0
  103. package/skills/ae-project-semantic/references/recommendation-quality.md +68 -0
  104. package/skills/ae-system/SKILL.md +28 -30
  105. package/skills/ae-system/references/channel-management.md +303 -0
  106. package/dist/auth-2WTQOP77.js +0 -14
  107. package/dist/capability-PJHNI4GJ.js +0 -315
  108. package/dist/chunk-4KVPKXFX.js +0 -98
  109. package/dist/chunk-C4MGVGJW.js +0 -13
  110. package/dist/chunk-P3FGXJTU.js +0 -349
  111. package/dist/chunk-QGM4M3NI.js +0 -37
  112. package/dist/chunk-RGKJGKT7.js +0 -71
  113. package/dist/chunk-SAU3QFIQ.js +0 -556
  114. package/dist/chunk-VPKZ7I72.js +0 -509
  115. package/dist/chunk-ZZUOD757.js +0 -598
  116. package/dist/memory-CHRU2F7W.js +0 -893
  117. package/dist/metadata-XXR34N5P.js +0 -339
  118. package/dist/model-K3KLWIW6.js +0 -139
  119. package/dist/sync-FCKOVWWS.js +0 -10261
  120. package/dist/te-agent-HLW4VTQK.js +0 -3893
  121. package/dist/te-analysis-ZMNGOVNW.js +0 -8958
  122. package/dist/te-community-6HPBWJUZ.js +0 -1859
  123. package/dist/te-dataops-HDRUXY4K.js +0 -2208
  124. package/dist/te-engage-RAK5PESW.js +0 -4898
  125. package/dist/te-experiment-VZF7BT6G.js +0 -770
  126. package/dist/te-system-Z77IKZFN.js +0 -2213
@@ -1,16 +1,19 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
1
2
  import {
2
3
  getAuthHeaders,
3
4
  kbApi
4
- } from "./chunk-4KVPKXFX.js";
5
+ } from "./chunk-JYMGHGCE.js";
5
6
  import {
6
7
  printError,
7
8
  printOutput
8
- } from "./chunk-GT46FPXN.js";
9
- import "./chunk-4SGZG4XY.js";
10
- import "./chunk-ZZUOD757.js";
11
- import "./chunk-UW5UN47B.js";
12
- import "./chunk-LYVNONC4.js";
13
- import "./chunk-QGM4M3NI.js";
9
+ } from "./chunk-KEWVSO64.js";
10
+ import "./chunk-GJXRF7Y6.js";
11
+ import "./chunk-Y74WTIKJ.js";
12
+ import "./chunk-RWXIXOZG.js";
13
+ import "./chunk-O6K2ODUE.js";
14
+ import "./chunk-KZ6ZHF5J.js";
15
+ import "./chunk-533JK3YX.js";
16
+ import "./chunk-FR2EDAQM.js";
14
17
 
15
18
  // src/commands/te-team/shared.ts
16
19
  var API_PREFIX = process.env.AE_API_PREFIX ?? "/agent";
@@ -1,3 +1,4 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
1
2
  import {
2
3
  buildVersionInstallPlan,
3
4
  fetchCliConfig,
@@ -7,18 +8,19 @@ import {
7
8
  printError,
8
9
  printOutput,
9
10
  recordVersionSyncResult
10
- } from "./chunk-GT46FPXN.js";
11
+ } from "./chunk-KEWVSO64.js";
11
12
  import {
12
13
  peekCliToken
13
- } from "./chunk-4SGZG4XY.js";
14
+ } from "./chunk-RWXIXOZG.js";
15
+ import {
16
+ missingAeHostHint
17
+ } from "./chunk-O6K2ODUE.js";
14
18
  import {
15
19
  getActiveHost,
16
- missingAeHostHint,
17
20
  normalizeUrl
18
- } from "./chunk-ZZUOD757.js";
19
- import "./chunk-UW5UN47B.js";
20
- import "./chunk-LYVNONC4.js";
21
- import "./chunk-QGM4M3NI.js";
21
+ } from "./chunk-KZ6ZHF5J.js";
22
+ import "./chunk-533JK3YX.js";
23
+ import "./chunk-FR2EDAQM.js";
22
24
 
23
25
  // src/commands/update.ts
24
26
  var HOST_OPTION_DESC = "Override active AE host URL (e.g., https://ta.thinkingdata.cn)";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkingai/ae-cli",
3
- "version": "6.1.17",
3
+ "version": "6.1.19",
4
4
  "description": "CLI tool for ThinkingAI (AE) analytics platform",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "scripts": {
19
19
  "dev": "tsx src/index.ts",
20
- "build": "tsup src/index.ts --format esm --outDir dist && node scripts/copy-tracking-assets.mjs",
20
+ "build": "tsup src/index.ts --format esm --outDir dist --clean --config tsup.config.ts && node scripts/copy-tracking-assets.mjs",
21
21
  "generate:analysis-skill": "tsx scripts/generate-analysis-skill-index.mts",
22
22
  "verify:config": "node test/config-commands.test.mjs",
23
23
  "verify:json-utils": "npx tsx tests/json-utils.test.ts",
@@ -42,15 +42,17 @@
42
42
  "verify:agent-tools": "node --test test/agent-command-registry.test.mjs && tsx tests/te-agent-credentials.test.ts && tsx tests/te-agent-unified-auth.test.ts && tsx tests/te-agent-conversations.test.ts && tsx scripts/verify-agent-tools.mjs && npm run verify:approval && npm run verify:sandbox-tools",
43
43
  "verify:approval": "tsx tests/approval-command.test.ts && tsx tests/approval-cli-client.test.ts && tsx tests/approval-skill.test.ts",
44
44
  "verify:memory": "tsx tests/memory-command.test.ts && tsx tests/memory-cli-client.test.ts && tsx tests/memory-skill.test.ts",
45
- "verify:system-tools": "node scripts/verify-system-tools.mjs && npx tsx tests/system-domain.test.ts && npx tsx tests/te-agent-download.test.ts && npx tsx tests/sandbox-tool-package.test.ts",
45
+ "verify:system-tools": "node scripts/verify-system-tools.mjs && npx tsx tests/system-domain.test.ts && npx tsx tests/channel-cli-http.test.ts && npx tsx tests/te-agent-download.test.ts && npx tsx tests/sandbox-tool-package.test.ts",
46
46
  "verify:kb-skill": "node test/kb-skill-query-workflow.test.mjs",
47
+ "verify:kb-sources": "tsx test/kb-list-sources-command.test.mjs",
47
48
  "verify:sandbox-tools": "tsx test/sandbox-tools.test.ts",
48
49
  "verify:skill-version-management": "tsx tests/skill-version-management.test.ts",
49
50
  "verify:skill-reference-files": "tsx tests/skill-reference-files.test.ts",
50
- "verify:tracking-tools": "tsx test/tracking-client.test.mjs && tsx test/tracking-skill-flow.test.mjs && node test/tracking-commands.test.mjs && tsx tests/tracking-display-name-sync.test.ts && tsx tests/local-data-inspect-convert.test.ts && tsx tests/local-data-upload-client.test.ts && tsx tests/local-data-upload-command.test.ts && tsx tests/local-data-encoding-sniff.test.ts && tsx tests/local-data-time-formats.test.ts && tsx tests/local-data-eight-types.test.ts && tsx tests/local-data-mapping-extras.test.ts && tsx tests/local-data-plan.test.ts && tsx tests/local-data-handoff.test.ts && tsx tests/local-data-reuse.test.ts && tsx tests/local-data-conflicts-resolutions.test.ts && tsx tests/runner-variadic-flags.test.ts && node test/local-data-skill.test.mjs",
51
+ "verify:tracking-tools": "tsx test/tracking-client.test.mjs && tsx test/tracking-skill-flow.test.mjs && node test/tracking-commands.test.mjs && tsx tests/tracking-display-name-sync.test.ts && tsx tests/local-data-inspect-convert.test.ts && tsx tests/local-data-upload-client.test.ts && tsx tests/local-data-upload-command.test.ts && tsx tests/local-data-encoding-sniff.test.ts && tsx tests/local-data-time-formats.test.ts && tsx tests/local-data-xlsx-dates.test.ts && tsx tests/local-data-xlsx-hidden-sheets.test.ts && tsx tests/local-data-xlsx-formulas.test.ts && tsx tests/local-data-title-rows.test.ts && tsx tests/local-data-xlsx-merged-cells.test.ts && tsx tests/local-data-xlsx-shared-strings.test.ts && tsx tests/local-data-xlsx-namespace-prefix.test.ts && tsx tests/local-data-value-distribution.test.ts && tsx tests/local-data-summary-rows.test.ts && tsx tests/local-data-duplicate-keys.test.ts && tsx tests/local-data-row-balance.test.ts && tsx tests/local-data-eight-types.test.ts && tsx tests/local-data-mapping-extras.test.ts && tsx tests/local-data-plan.test.ts && tsx tests/local-data-handoff.test.ts && tsx tests/local-data-reuse.test.ts && tsx tests/local-data-conflicts-resolutions.test.ts && tsx tests/runner-variadic-flags.test.ts && node test/local-data-skill.test.mjs",
51
52
  "verify:self-check-overlay": "node test/self-check-overlay.test.mjs",
52
53
  "verify:update-check": "npx tsx test/update-check.test.mjs",
53
54
  "verify:version-sync": "npx tsx tests/version-sync.test.ts",
55
+ "verify:dependency-hygiene": "node --test test/dependency-hygiene.test.mjs",
54
56
  "qa-changed": "node scripts/qa-changed.mjs",
55
57
  "self-check": "node self-check/scan.mjs",
56
58
  "check:release": "node self-check/release-gate.mjs",
@@ -59,7 +61,7 @@
59
61
  "check:agents-docs": "node scripts/check-agents-docs-sync.mjs",
60
62
  "prepublishOnly": "npm run check:release && npm run build",
61
63
  "start": "node dist/index.js",
62
- "test": "npx tsx src/index.ts --help && npm run verify:retired-api-command && npm run verify:sandbox-tools"
64
+ "test": "npx tsx src/index.ts --help && npm run verify:retired-api-command && npm run verify:sandbox-tools && npm run verify:dependency-hygiene"
63
65
  },
64
66
  "repository": {
65
67
  "type": "git",
@@ -77,11 +79,10 @@
77
79
  },
78
80
  "dependencies": {
79
81
  "@types/json-bigint": "^1.0.4",
80
- "archiver": "^5.3.2",
82
+ "archiver": "^8.0.0",
81
83
  "cli-table3": "^0.6.5",
82
84
  "commander": "^12.1.0",
83
85
  "csv-parse": "^7.0.2",
84
- "exceljs": "^4.4.0",
85
86
  "iconv-lite": "^0.7.3",
86
87
  "jq-wasm": "^3.0.0-jq-1.8.2",
87
88
  "jschardet": "^3.1.4",
@@ -95,16 +96,24 @@
95
96
  "xlsx": "^0.18.5"
96
97
  },
97
98
  "devDependencies": {
98
- "@types/archiver": "^5.3.4",
99
- "@types/iconv-lite": "^0.0.1",
99
+ "@types/archiver": "^8.0.0",
100
100
  "@types/node": "^22.0.0",
101
101
  "@types/stream-json": "^1.7.8",
102
102
  "@types/turndown": "^5.0.6",
103
103
  "@types/unzipper": "^0.10.11",
104
104
  "@types/ws": "^8.5.0",
105
+ "exceljs": "^4.4.0",
105
106
  "jszip": "^3.10.1",
106
107
  "tsup": "^8.0.0",
107
108
  "tsx": "^4.0.0",
108
109
  "typescript": "^5.5.0"
110
+ },
111
+ "overrides": {
112
+ "exceljs": {
113
+ "archiver": "8.0.0",
114
+ "fast-csv": "5.0.7",
115
+ "unzipper": "0.12.5",
116
+ "uuid": "11.1.1"
117
+ }
109
118
  }
110
119
  }
@@ -74,7 +74,7 @@ Use `ae-agent` for all Agent platform resource work:
74
74
 
75
75
  If the user's intent is data analysis, audience management, metadata governance, TeamRuns, or knowledge bases, switch to `ae-analysis` / `ae-engage` / `ae-dataops` / `ae-team` / `ae-kb`.
76
76
 
77
- ## Tool Groups (82 commands)
77
+ ## Tool Groups (81 commands)
78
78
 
79
79
  ### Agents (5)
80
80
 
@@ -128,7 +128,7 @@ If the user's intent is data analysis, audience management, metadata governance,
128
128
  - `+del-skill` ([doc](references/del-skill.md)) — delete a personal Skill (physical delete)
129
129
  - `+toggle-skill` ([doc](references/toggle-skill.md)) — enable or disable a Skill
130
130
 
131
- ### Skill content & assets (16)
131
+ ### Skill content & assets (15)
132
132
 
133
133
  - `+edit-skill` ([doc](references/edit-skill.md)) — edit a Skill's content (name/description/instructions/category/icon)
134
134
  - `+get-skill-content` ([doc](references/get-skill-content.md)) — read a Skill's SKILL.md source
@@ -145,7 +145,6 @@ If the user's intent is data analysis, audience management, metadata governance,
145
145
  - `+read-skill-script` ([doc](references/read-skill-script.md)) — read a script file (binary-safe with `--output`)
146
146
  - `+del-skill-script` ([doc](references/del-skill-script.md)) — delete a script file
147
147
  - `+upload-skill` ([doc](references/upload-skill.md)) — create/replace a Skill from a ZIP package (parses SKILL.md; 5MB)
148
- - `+rescan-skills` ([doc](references/rescan-skills.md)) — rescan local filesystem and sync Skills to DB (root only)
149
148
 
150
149
  ### Market (browse) (2)
151
150
 
@@ -261,7 +260,7 @@ For a local Agent, a successful `+mark-used` response means only that the dedupl
261
260
  - **MCP connectivity**: `+add-mcp` does NOT validate server connectivity — an unreachable URL is accepted at create time and only fails when the agent calls the MCP at runtime. Double-check the URL.
262
261
  - **Attachments**: upload supports files up to 50MB each, with a 1GB user quota. Batch uploads support partial success — individual file failures don't affect others.
263
262
  - **Skill `--instructions @-`**: reads from stdin, useful for piping long instruction text.
264
- - **Skill content versions**: `+add-skill` accepts optional `--version`; `+edit-skill` content changes and `+upload-skill --replace-skill-id` require a higher `major.minor` version.
263
+ - **Skill content versions**: `+add-skill` accepts optional `--version`; `+edit-skill` content changes and `+upload-skill --replace-skill-id` require a higher `major.minor` version. On `SKILL_VERSION_CONFLICT`, read `meta.currentVersion` and retry with a strictly higher version. On `SKILL_HISTORY_CONFLICT`, stop retrying and tell the user that the Skill cannot be safely updated right now and that they should contact their administrator. Never recommend internal maintenance commands or expose diagnostic payloads in a customer-facing response.
265
264
  - **Skill sync push**: each selected Skill is uploaded as a ZIP to the versioned server endpoint. The server commits the canonical package before success; the CLI no longer copies it after the response.
266
265
  - **Market category keys**: `ae_preset | dev_tool | search_tool | data_query | content_gen | enterprise | life | automation | other`. Sort options: `newest | calls | likes` (`calls` sorts MCP by call count, Skill by download count). Market scope: `all | system | company | custom` (`custom` = personal).
267
266
  - **Meta on create/copy**: `+add-mcp` / `+add-skill` / `+copy-skill` accept optional `--category / --icon-emoji / --icon-color`; these are applied via a follow-up meta PATCH after creation. MCP creation still does NOT validate server connectivity.
@@ -68,6 +68,9 @@ ae-cli agent +edit-skill --dry-run --id <skill-cuid> --name new-name --version 2
68
68
 
69
69
  - `404` / not found: re-run `+list-skills` to verify the Skill ID and scope.
70
70
  - `409` / name conflict: use `--name` with a different name, or consider `+upload-skill` with `--auto-rename`.
71
+ - `SKILL_VERSION_CONFLICT`: read `meta.currentVersion`, choose a strictly higher `major.minor` value, and retry the same command with `--version`.
72
+ - `SKILL_HISTORY_CONFLICT`: stop retrying and tell the user, "The Skill cannot be safely updated right now. Please contact your administrator."
73
+ - Do not recommend internal maintenance commands or expose diagnostic payloads in a customer-facing response.
71
74
 
72
75
  ## Recommended Chaining
73
76
 
@@ -30,7 +30,7 @@ ae-cli agent +get-skill-content --dry-run --id <skill-cuid>
30
30
 
31
31
  ## Next Steps on Failure
32
32
  - `404` / not found: re-run `+list-skills` to verify the Skill ID.
33
- - `file_not_found`: the Skill record exists but the SKILL.md file is missing on disk use `+rescan-skills` (root) to sync.
33
+ - `file_not_found`: the Skill content is unavailable. Ask the user to contact their administrator; do not recommend internal maintenance commands.
34
34
 
35
35
  ## Recommended Chaining
36
36
  - `+list-skills` → confirm `id` → `+get-skill-content` → `+edit-skill` (if changes needed)
@@ -1,24 +1,26 @@
1
- # agent +rescan-skills (Rescan Skills)
1
+ # agent +rescan-skills (Internal Compatibility Reference)
2
2
 
3
3
  > **Prerequisite:** Follow the Global AE CLI Rules in [`../SKILL.md`](../SKILL.md).
4
4
 
5
- Domain: **Skills / write**
5
+ Domain: **Skills / internal write**
6
6
 
7
7
  ## Use Cases
8
- - Rescan Skill files on the server filesystem and sync them to the database.
8
+ - Preserve compatibility for privileged administrators who already use the legacy command.
9
9
  - Endpoint: `POST /api/sandbox/agent/skills/rescan`.
10
- - **Root-only**: requires root privileges; non-root users get a 403.
11
- - No flags the scan covers all Skill directories on the server.
10
+ - The endpoint synchronizes system-scope Skills only.
11
+ - The command is hidden from normal `agent --help` output and public Skill routing.
12
12
 
13
13
  ## Mandatory Rules (MUST)
14
14
  - This command takes no flags.
15
- - **Root-only operation**: non-root users will receive a 403 error.
15
+ - It requires `root` or `agent_admin` privileges; other users receive a 403 response.
16
+ - Never use it to recover a personal or company Skill.
17
+ - Never expose this command or its maintenance terminology in a customer-facing response.
16
18
  - This is an ordinary `write` operation and does not require CLI confirmation.
17
19
  - Prefer `--dry-run` before executing — rescan has filesystem side effects.
18
20
 
19
21
  ## Command
20
22
  ```bash
21
- # Rescan and sync
23
+ # Internal administrator use only
22
24
  ae-cli agent +rescan-skills
23
25
 
24
26
  # Dry-run to inspect the request before executing
@@ -31,14 +33,14 @@ ae-cli agent +rescan-skills --dry-run
31
33
  | _(none)_ | — | This command takes no flags |
32
34
 
33
35
  ## Decision Rules
34
- - Use this command when Skill files on disk are out of sync with the database (e.g. after manual filesystem changes or migration).
35
- - This is a root-only operation — confirm the user has root privileges before running.
36
- - The scan covers all Skill directories (system, company, personal) on the server.
36
+ - Use this command only for an explicitly authorized system-Skill maintenance task.
37
+ - Confirm the operator has `root` or `agent_admin` privileges before running it.
38
+ - Do not route ordinary Skill update failures to this command.
37
39
  - Use `--dry-run` first to verify the request shape before executing.
38
40
 
39
41
  ## Next Steps on Failure
40
- - `403` / 无权限: the current user is not root rescan requires root privileges.
41
- - `扫描同步失败`: the scan encountered filesystem errors check server logs and Skill directory permissions.
42
+ - `403`: the current operator lacks the required administrator role.
43
+ - Other failures: stop and inspect administrator-only service logs; do not relay diagnostic details to customers.
42
44
 
43
45
  ## Recommended Chaining
44
- - `+rescan-skills` → `+list-skills` (verify the synced state)
46
+ - `+rescan-skills` → `+list-skills` (verify system Skills only)
@@ -87,11 +87,14 @@ ae-cli agent +upload-skill --dry-run --file ./my-skill.zip
87
87
 
88
88
  - `File not found`: verify the local file path.
89
89
  - `--file must be a .zip file`: only ZIP format is supported.
90
- - `ZIP 中缺少 SKILL.md`: ensure the ZIP contains a `SKILL.md` file.
91
- - `缺少名称或内容`: the SKILL.md is missing the `name` field or content fix the ZIP.
92
- - `缺少描述`: the SKILL.md is missing the description fix the ZIP or use `--description`.
93
- - `数据库写入失败`: DB write failed retry or check server logs.
90
+ - Missing `SKILL.md`: ensure the ZIP contains a `SKILL.md` file.
91
+ - Missing name or content: add the `name` field and Skill content to `SKILL.md`.
92
+ - Missing description: add a description to `SKILL.md` or use `--description`.
93
+ - The upload could not be saved: retry once, then contact the administrator if it still fails.
94
94
  - `409` / name conflict: use `--auto-rename` or choose a different `--name`.
95
+ - `SKILL_VERSION_CONFLICT`: read `meta.currentVersion`, choose a strictly higher `major.minor` value, and retry the same replacement with `--version`.
96
+ - `SKILL_HISTORY_CONFLICT`: stop retrying and tell the user, "The Skill cannot be safely updated right now. Please contact your administrator."
97
+ - Do not recommend internal maintenance commands or expose diagnostic payloads in a customer-facing response.
95
98
 
96
99
  ## Recommended Chaining
97
100
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ae-analysis
3
- version: 4.2.2
3
+ version: 4.2.3
4
4
  description: "Use ae-cli for AE/TE analysis-side data questions, asset operations, and asset governance: reports, analysis boards, BI dashboards, ad-hoc models, drilldown, detail data, alerts, clusters, tags, metrics, metadata, project configuration, tracking plans, governance asset lists/rules/lineage/impact/dependency, batch asset operations, projects, and resource links. Use when the user asks to query data, explain a change, export evidence, or inspect/create/update/govern analysis assets."
5
5
  ---
6
6
 
@@ -16,6 +16,7 @@ This is the single entry skill for analysis intent and command execution.
16
16
  2. Read the selected command's dedicated reference before composing it:
17
17
  - `event list` -> `references/event_list.md`
18
18
  - `analysis dashboard list` -> `references/dashboard_list.md`
19
+ - `personal-semantic-preference list` -> `references/personal_semantic_preference_list.md`
19
20
  - replace hyphens with underscores in gateway filenames.
20
21
  3. For an AI-facing ad-hoc definition, also read [`references/ai_models.md`](references/ai_models.md).
21
22
  4. For cluster/tag `--definition-request`, also read the matching [`references/user_cluster_models.md`](references/user_cluster_models.md) or [`references/user_tag_models.md`](references/user_tag_models.md). Shared primitives live in [`references/audience_models.md`](references/audience_models.md).
@@ -32,6 +33,7 @@ Use this skill for these CLI services:
32
33
  - `analysis-meta`: gateway metadata assets, events, properties, virtual metadata, metrics, data tables, exchange rules, and super metadata.
33
34
  - `analysis-governance`: gateway asset governance operations, including governed asset lists/exports, lineage, dependency, impact, query history, rule schema/list/create/update/delete, batch asset actions, and operation records. Use this service for asset governance workflows, not for metadata event/property/metric CRUD.
34
35
  - `tracking`: gateway tracking plan, checking, ingest, live-data, and event blacklist operations.
36
+ - `personal-semantic-preference`: current user's project-scoped personal semantic preferences. Use it as agent context before resolving ambiguous business wording, asset choices, or recurring user preferences.
35
37
 
36
38
  For metadata gateway detail outside the commands in the generated index, use the metadata skill. For Engage, DataOps, or Community work, use the corresponding skill.
37
39
 
@@ -97,15 +99,54 @@ Before a project-scoped command:
97
99
  3. If there are multiple plausible projects, the host is unclear, or no project matches, show the candidates and ask; never guess.
98
100
  4. Re-verify after the user changes project, host, or environment.
99
101
 
102
+ ### Project Semantics
103
+
104
+ Before answering project-scoped analysis or asset-governance requests, call `ae-cli project-semantic list --project-id <project_id>` once after the project is resolved. This is the governed project semantic catalog. The list is already filtered to active, fresh project semantics and sorted by heat, so do not page or search the database yourself.
105
+
106
+ If one project semantic is actually adopted to interpret the user's wording, asset selection, metric definition, calculation convention, or project-wide business rule, fetch it with `ae-cli project-semantic get --project-id <project_id> --id <semantic_id> --mark-used`. Do not pass `--mark-used` for project semantics that were only inspected or rejected.
107
+
108
+ For project semantic recommendation, switch to the `ae-project-semantic` skill. This skill only consumes published project semantics during analysis tasks.
109
+
110
+ Published project semantics are the formal project-wide authority. A current-turn user instruction may request a different analysis, but the result must be labeled as an explicit non-formal deviation rather than silently replacing the published definition.
111
+
112
+ ### Personal Semantic Preferences
113
+
114
+ Before answering project-scoped analysis or asset-governance requests, call `ae-cli personal-semantic-preference list --project-id <project_id>` once per host, authenticated user, project, and conversation after the project is resolved. Keep that lightweight directory in conversation context; do not page it, search the database, or call list again for each question. The backend returns at most 200 entries using `HOT_160_PLUS_RECENT_40` and may return fewer to keep the payload within its size limit.
115
+
116
+ Use the returned compact catalog only as context. If one item is actually adopted to interpret the user's wording, asset selection, metric preference, or output style, fetch it with `ae-cli personal-semantic-preference get --project-id <project_id> --id <preference_id> --mark-used`. This also applies when the matched item is being used as the target for an `update`. Do not pass `--mark-used` for items that were only inspected or rejected.
117
+
118
+ Apply the two catalogs by authority and purpose, not as one flat ranking. Published project semantics define the formal business meaning. Personal semantics supply the current user's defaults, interpretation corrections, asset choices, and output preferences where they do not conflict. If a personal semantic conflicts with a published project semantic, use the project semantic for the formal result and explicitly disclose the difference; never silently overwrite the personal record. If the user explicitly requests the personal alternative for the current task, execute it as a labeled non-formal variation.
119
+
120
+ The Agent owns the personal preference capture trigger. Choose `context_type` by meaning:
121
+
122
+ - `preference`: durable interpretation or output preference without an exact asset binding.
123
+ - `asset_context`: durable user wording or intent bound to one or more exact project assets. Send the complete ordered `resource_refs` array; each item has `resource_type`, string `resource_key`, and `display_name`. This identity is generic across reports, dashboards, events, properties, metrics, tags, clusters, data tables, and future asset types.
124
+ - `experience`: a confirmed reusable work method without an exact asset binding.
125
+ - `background`: stable personal context without an exact asset binding.
126
+
127
+ Any stable choice of a concrete asset, including an event-selection scenario, must use `asset_context`; do not encode asset IDs only in prose. During a project task, collect durable current-user preferences, stable interpretation corrections, reusable asset-selection choices, recurring output preferences, and current-user working definitions that have not become approved project semantics. A working definition remains eligible for personal storage even when it would also benefit other project users. Store it only as the current user's preference; never describe it as approved project authority or copy a bound asset definition into its content. Keep future governance or lifecycle instructions out of the stored content. Do not save transient task details, one-off analysis results, company knowledge, standalone metadata facts, reports, or dashboards as personal preferences.
128
+
129
+ An explicit stable statement, correction, or confirmation that passes that evidence gate authorizes `personal-semantic-preference add` or `update` without a second "save" confirmation. Compare against the already loaded catalog first; when one existing preference matches, fetch it with `--mark-used`, update that existing preference, and avoid creating a duplicate. Otherwise add a new one. An explicit instruction not to retain it always wins. Delete remains high risk and requires explicit user confirmation.
130
+
131
+ Personal capture and project recommendation are independent. Save or update the personal semantic first when its evidence gate is met. If the same content looks reusable as a formal project-wide definition, finish the current task and then ask whether the user wants to recommend it as a project semantic candidate. Do not make project recommendation a prerequisite for personal capture, do not submit a candidate without that user choice, and never approve or publish on behalf of an ordinary user.
132
+
133
+ After a successful add, update, or delete, merge that response into the conversation's cached directory locally. Do not call list again merely to observe the write.
134
+
135
+ When a later published project semantic matches a personal semantic, treat the project semantic as formal and allow the personal record to become redundant, expire, or merge through the supported lifecycle. When they conflict, keep the project semantic formal, disclose the conflict, and preserve the personal record unless the user explicitly changes or deletes it. These are consumption and lifecycle rules; do not append them to the stored personal semantic content.
136
+
137
+ Stale or expired preferences are automatically hidden by list filtering and backend maintenance. Do not look for or invent a separate command for that behavior.
138
+
100
139
  ### C. FUZZY_SEARCH_FALLBACK
101
140
 
102
- For saved-asset operations on reports, dashboards, metrics, clusters, tags, and alerts, use the relevant list/search command first unless an exact ID or canonical asset name was already verified. For event, property, metric, cluster, and tag catalogs, put the user's phrase and its useful synonyms in one `--queries` JSON array; matching is OR across at most 20 keywords. For ordinary asset discovery, broaden the keyword batch up to two times, then list all candidates. If no resource exists, stop instead of fabricating one.
141
+ For saved-asset operations on reports, dashboards, metrics, clusters, tags, and alerts, use the relevant list/search command first unless an exact ID or canonical asset name was already verified. For saved assets outside the analysis metadata catalog, broaden the keyword batch up to two times, then list all candidates. If no resource exists, stop instead of fabricating one.
142
+
143
+ For ordinary event, property, metric, cluster, and tag metadata discovery, keep one discovery budget per host, project, authenticated principal, and Agent conversation. Put the user's phrase and its useful synonyms in one `--queries` JSON array; matching is OR across at most 20 keywords. A successful remote search round with no confirmable candidate consumes one miss. A candidate stops discovery and requires user confirmation; it is not a miss. Validation, permission, network, and server errors are failures: they do not consume the budget and must not trigger a full export. After at most two ordinary miss rounds, the third remote discovery round must be one aggregate `analysis-meta catalog list` using the accumulated deduplicated queries and the union of applicable resource types. If that aggregate search is still unresolved, export the complete unified catalog exactly once and reuse it locally as defined in `metadata_resolution.md`. Once a valid complete catalog exists, do not call online resource-specific metadata list/search commands or `analysis-meta catalog list|export` again in that scope.
103
144
 
104
145
  Only when explicitly complete event, property, metric, cluster, or tag metadata is needed, use that resource's `export --output <temporary_path>/<resource>` command. Event/property/metric exports use `.json`; cluster/tag exports use `.jsonl` and an integrity sidecar. Search the temporary file locally and keep the full rows out of model context. Do not page repeatedly to synthesize a complete catalog.
105
146
 
106
147
  Do not pre-list events or properties before constructing an AI-facing intent model. Pass the user's wording directly in `definition`; the backend resolves it and returns `resolved` evidence. Call event/property metadata commands only when the user explicitly asks to inspect metadata, a structured compiler error instructs `next_action=search_candidates`, or the compiler reports an explicit metadata-resolution capability gap. When compiler candidates already exist, ask the user to confirm without another metadata call. If the user explicitly rejects every candidate for that path, treat the rejected set as exhausted and continue through the one aggregate-search workflow in `metadata_resolution.md`; do not terminate the original task or repeat the rejected candidates.
107
148
 
108
- The generic saved-asset search rule above does not control structured AI-QP metadata failures. For those failures, `allowed_resource_types` is authoritative: collect the whole compiler error array and follow the one aggregate online search, optional full-catalog, conversation-reuse workflow in `metadata_resolution.md`. Never use a candidate from either path without user confirmation.
149
+ The ordinary discovery budget does not replace the entry path for structured AI-QP metadata failures. For those failures, `allowed_resource_types` is authoritative: collect the whole compiler error array and follow the one aggregate online search, optional full-catalog, conversation-reuse workflow in `metadata_resolution.md`. Never use a candidate from either path without user confirmation.
109
150
 
110
151
  ### Existing business asset before ad-hoc
111
152
 
@@ -113,7 +154,7 @@ When the request can map to a saved business definition:
113
154
 
114
155
  1. Extract metric, dimensions, filters, time window, and comparison semantics.
115
156
  2. Search reports; use dashboard search only to discover candidate embedded reports.
116
- 3. Before querying a selected dashboard's report data, call `analysis dashboard get` exactly once with the verified project and dashboard IDs. Preserve non-empty `location.folder_name`, `dashboard_name`, `remark`, and `notes[].note_title/description` as authored dashboard context for all results from that dashboard. Do not repeat the detail call per report.
157
+ 3. Before querying a selected dashboard's report data, call `analysis dashboard get` exactly once with the verified project and dashboard IDs. Inspect `effective_settings` and `filter_config`; dashboard default, dashboard business, and space business filters are already applied and call-time filters add AND conditions. Honor the saved fixed time unless the user explicitly supplies a supported time override. Preserve non-empty `location.folder_name`, `dashboard_name`, `remark`, and `notes[].note_title/description` as authored dashboard context for all results from that dashboard. Do not repeat the detail call per report.
117
158
  4. Read the candidate definition and verify semantic equality, not merely a similar name.
118
159
  5. Use report/dashboard data when the definition matches.
119
160
  6. Use `analysis adhoc run|export` when no definition matches, the user explicitly requests ad-hoc exploration, or custom grouping/filtering is required.
@@ -1,6 +1,11 @@
1
- # Structured AI-QP metadata resolution
1
+ # Analysis metadata resolution
2
2
 
3
- Use this workflow only when `analysis adhoc run|export`, report create, or report update fails with `AI_QP_COMPILE_FAILED` and metadata errors contain:
3
+ Enter this workflow through either path:
4
+
5
+ 1. `analysis adhoc run|export`, report create, or report update fails with `AI_QP_COMPILE_FAILED` and its metadata errors contain the structured fields below.
6
+ 2. Ordinary event, property, metric, cluster, or tag metadata discovery has completed two successful remote miss rounds in the same host, project, authenticated principal, and Agent conversation, and a third remote discovery round would otherwise be needed.
7
+
8
+ For the structured compiler path, the metadata errors contain:
4
9
 
5
10
  - `path`
6
11
  - `slot_kind`
@@ -10,7 +15,7 @@ Use this workflow only when `analysis adhoc run|export`, report create, or repor
10
15
  - `candidates`
11
16
  - `next_action`
12
17
 
13
- The Common compiler returns every unresolved slot from the same compile attempt. Treat that complete error array as one resolution plan. Do not run this workflow independently for each `path`.
18
+ The Common compiler returns every unresolved slot from the same compile attempt. Treat that complete error array as one resolution plan. Do not run the structured path independently for each `path`.
14
19
 
15
20
  `allowed_resource_types` and `search_targets` are authoritative for their exact paths. Do not add, remove, prioritize, or reinterpret resource types. `search_targets[].constraints` must be applied when filtering local rows.
16
21
 
@@ -65,6 +70,35 @@ Before reuse, require both files and verify:
65
70
 
66
71
  If any check fails, discard the cached pair for this workflow and fetch it again. A `.part` file or JSONL without the completed metadata sidecar is never valid.
67
72
 
73
+ ## Ordinary discovery workflow
74
+
75
+ 1. Keep one miss budget for the current host, project, authenticated principal, and Agent conversation.
76
+ 2. One ordinary discovery round is one successful remote event, property, metric, cluster, or tag list/search request. Put the current phrase and its useful synonyms in one `--queries` array instead of issuing one request per synonym.
77
+ 3. A round consumes one miss only when it returns no confirmable candidate. A plausible candidate stops discovery and requires explicit user confirmation; it is not a miss.
78
+ 4. Project lookup, exact `get`, filter-value lookup, and data queries do not consume this metadata-discovery budget. Validation, permission, network, and server errors are failures, do not consume a miss, and must not trigger the full-catalog fallback.
79
+ 5. After at most two ordinary miss rounds, do not issue a third resource-specific list/search. The third remote metadata-discovery round must be exactly one aggregate search using every accumulated deduplicated query and the union of applicable resource types:
80
+
81
+ ```bash
82
+ ae-cli analysis-meta catalog list \
83
+ --project-id <project_id> \
84
+ --queries '["<all accumulated deduplicated queries>"]' \
85
+ --resource-types '["<union of applicable resource types>"]' \
86
+ --limit-per-type 20
87
+ ```
88
+
89
+ 6. If the aggregate response contains a confirmable candidate, stop and ask for confirmation. If it remains unresolved or returns `has_more=true` without a candidate, download the complete catalog exactly once:
90
+
91
+ ```bash
92
+ ae-cli analysis-meta catalog export \
93
+ --project-id <project_id> \
94
+ --output "<catalog_dir>/catalog.jsonl"
95
+ ```
96
+
97
+ 7. Search the complete JSONL locally, return only a small candidate subset to model context, and require confirmation before binding. A local no-match is a complete negative result for that snapshot.
98
+ 8. Once the valid complete catalog exists, use it for every later metadata discovery in the same scope. Do not call online resource-specific metadata list/search commands or `analysis-meta catalog list|export` again. An exact `get` for details not present in the catalog remains outside the discovery budget.
99
+
100
+ This caps ordinary online metadata discovery at three successful remote rounds before the full-catalog fallback becomes eligible: at most two resource-specific misses followed by one aggregate catalog search. Errors never advance that counter.
101
+
68
102
  ## Compile-wide workflow
69
103
 
70
104
  1. Read the complete compiler error array.
@@ -112,7 +146,7 @@ ae-cli analysis-meta catalog export \
112
146
 
113
147
  A reject-all response is a state transition, not task cancellation. Run the aggregate online search at most once for the rejected path set, then use the same complete-catalog fallback above if needed. Never repeat candidates the user already rejected. If the complete catalog has no different candidate, ask for an exact canonical name or a changed business definition.
114
148
 
115
- Do not call event, property, metric, cluster, or tag list commands in this structured workflow. Do not run `--queries` synonym rounds: the aggregate online search is one call for the whole compile error array, never one call per path or resource type. The unified catalog capability replaces both repeated online searches and per-resource full exports.
149
+ Do not call event, property, metric, cluster, or tag list commands after entering the structured workflow. Do not run `--queries` synonym rounds: the aggregate online search is one call for the whole compile error array, never one call per path or resource type. The unified catalog capability replaces both repeated online searches and per-resource full exports.
116
150
 
117
151
  Once a valid complete catalog exists for the current host, project, principal, and conversation, never call `analysis-meta catalog list` again in that scope, and never call `analysis-meta catalog export` again either. Search the complete local snapshot instead; a local no-match is a complete negative result for this snapshot.
118
152
 
@@ -26,6 +26,35 @@ This policy does not apply to:
26
26
  - `analysis-meta`, metadata, DataOps, Community, Engage, or other business modules.
27
27
  - Report/dashboard/BI asset list commands, catalog exports, definition import/export, or management commands.
28
28
 
29
+ ## Cache policy for report and ad-hoc data
30
+
31
+ Apply this cache policy to `analysis adhoc run|export` and
32
+ `analysis report-data run|export`:
33
+
34
+ - For an ordinary query, omit `--use-cache`; its effective default is `true`.
35
+ This allows a cache read but does not prove that the query actually hit a
36
+ cache.
37
+ - Pass `--use-cache false` only when the user explicitly asks for fresh data,
38
+ a refresh or recomputation, to bypass/disable cache, or says the underlying
39
+ data was just updated. Words such as "latest" or "current" trigger this only
40
+ when they refer to data freshness, not merely to a selected time window.
41
+ - When the user explicitly compares with a freshly refreshed analysis UI,
42
+ pass `--use-cache false`. A request that merely mentions a report or UI does
43
+ not imply this freshness requirement.
44
+ - If the user reports that CLI/Agent data differs from the analysis UI, repeat
45
+ the same semantic query exactly once with `--use-cache false`. Preserve the
46
+ project, asset or model definition, filters, time range, timezone, cluster
47
+ route, and other query inputs. Explain that any difference may come from
48
+ cache policy or refresh timing; do not enter a retry loop.
49
+
50
+ The Agent cannot observe whether another browser session is open, whether a UI
51
+ query used cache, or whether the user is demonstrating the product. Never infer
52
+ a demo scenario and never change cache policy based only on the audience or
53
+ interface. `--use-cache` controls whether cache reads are allowed for this CLI
54
+ query; it neither changes the saved asset/UI configuration nor exposes an
55
+ actual cache-hit result. Do not claim cache hit or miss unless the response
56
+ contains explicit backend evidence.
57
+
29
58
  ## Decision rule
30
59
 
31
60
  Synchronous data commands use `--preview-rows` for the maximum business rows
@@ -145,7 +145,7 @@ Prefer the run/artifact commands over hand-written HTTP, Python, or curl. Analys
145
145
  | `user-cluster-member list` | `analysis.user_cluster_member.list` | Bounded inline cluster members | `--cluster-name`, optional properties/fields/query/limit/offset | Member rows |
146
146
  | `user-cluster-member export` | `analysis.user_cluster_member.export` | Stream native full cluster members as csv.gz | `--cluster-name`, optional properties | Async artifact descriptor |
147
147
  | `user-cluster create` | `analysis.user_cluster.create` | Create condition/sql cluster directly from semantic intent | `--cluster-name`, `--display-name`, `--definition-request` | Create result and canonical request |
148
- | `user-cluster update` | `analysis.user_cluster.update` | Update condition/sql cluster | `--cluster-name`, fields to change, optional `--definition-request` | Update result |
148
+ | `user-cluster update` | `analysis.user_cluster.update` | Update condition/sql cluster after confirmation without changing its type or analysis entity | `--cluster-name`, fields to change, optional `--definition-request` with the existing type, then `--yes` after dry-run and explicit confirmation | Update result |
149
149
  | `user-cluster create-id` | `analysis.user_cluster.create_id` | Map imported values to an entity and create a cluster | `--display-name`, `--entity-id`, exactly one input source, conditional `--association-property` | Processing state; poll get for final match summary |
150
150
  | `user-cluster update-id` | `analysis.user_cluster.update_id` | Remap imported values for an ID cluster | `--cluster-name`, exactly one input source, conditional `--association-property` | Processing state; poll get for final match summary |
151
151
  | `user-cluster refresh` | `analysis.user_cluster.refresh` | Trigger cluster recompute | `--cluster-name` | Refresh result |
@@ -0,0 +1,22 @@
1
+ # analysis-governance asset-authentication export
2
+
3
+ Use for complete offline processing of project asset-authentication rows.
4
+
5
+ Do not use it for interactive preview or let the CLI loop over `list`; this command invokes the complete export capability once.
6
+
7
+ Command:
8
+
9
+ ```bash
10
+ ae-cli analysis-governance asset-authentication export --project-id <project_id> --asset-types '["dashboard","report"]' --output /tmp/assets.jsonl
11
+ ```
12
+
13
+ Capability id: `governance.asset_authentication.export`.
14
+
15
+ The command does not accept `limit` or `offset` and performs exactly one complete server export call. It validates `complete`, `total`, `stat_as_of`, and `snapshot_hash`, then atomically publishes both:
16
+
17
+ - `<output>`: private-mode JSONL rows.
18
+ - `<output>.meta.json`: `complete`, `project_id`, `total`, `stat_as_of`, `snapshot_hash`, and the local file SHA-256 `checksum`.
19
+
20
+ Export projection always retains `resource_type`, `resource_key`, `display_name`, `authentication_status`, `heat_count90d`, `user_count90d`, and `impact_degree`; `--fields` can add or remove only optional descriptive and owner fields.
21
+
22
+ Use the sidecar `snapshot_hash` with `update --expected-snapshot-hash` when the selected asset set was derived from this export.
@@ -1,25 +1,29 @@
1
- # analysis-meta asset-authentication list
1
+ # analysis-governance asset-authentication list
2
2
 
3
- Use when the user needs to list authenticatable project assets and authentication status.
3
+ Use for bounded online preview, search, and filtering of project asset-authentication rows.
4
4
 
5
- Do not use it as a complete asset search or to change status; use `asset search` or `asset authentication-update` respectively.
5
+ This command filters on the server before sorting and pagination. Use `export` for a complete offline dataset and `update` for an explicit typed asset set.
6
+
7
+ Do not use it to synthesize a complete catalog by paging or to change authentication state.
6
8
 
7
9
  Command:
8
10
 
9
11
  ```bash
10
- ae-cli analysis-meta asset-authentication list --project-id <project_id> --limit 50 --offset 0
11
- ae-cli analysis-meta asset-authentication list --dry-run
12
+ ae-cli analysis-governance asset-authentication list --project-id <project_id> --asset-types '["dashboard","report"]' --authentication-status 0 --heat-count-gt 50 --user-count-gt 5 --match any --limit 100
12
13
  ```
13
14
 
14
- Capability id: `metadata.asset_authentication.list`.
15
+ Capability id: `governance.asset_authentication.list`.
16
+
17
+ `match=any|all` combines only the supplied numeric thresholds. Asset types, authentication status, and keyword queries are always AND filters. `queries` matches any supplied keyword.
18
+
19
+ Output uses `data.items[]`, `total`, `limit`, `offset`, `has_more`, and `next_offset`. Row identity is always `resource_type + resource_key`; dashboard and report keys are numeric IDs encoded as strings, while metadata assets use business names.
15
20
 
16
- Input sends `project_id`, `limit`, and `offset`.
21
+ ## analysis-meta asset-authentication list
17
22
 
18
- Output always uses the directory envelope: `data.items[]`, `total`, `limit`, `offset`, `has_more`, and `next_offset`.
23
+ The legacy command remains available for one release cycle and returns the old row shape.
24
+
25
+ ```bash
26
+ ae-cli analysis-meta asset-authentication list --project-id <project_id> --limit 50 --offset 0
27
+ ```
19
28
 
20
- ## Parameters
21
- | Parameter | Required | Description |
22
- |---|---|---|
23
- | `--project-id` | Yes | Numeric project ID. |
24
- | `--limit` / `-l` | No | Page size. Default: 50, maximum: 200. |
25
- | `--offset` / `-o` | No | Zero-based page offset. Default: 0. |
29
+ Legacy Input is `project_id`, `limit`, and `offset`. Legacy Output uses the same directory envelope with the old asset field names.