@thinkingai/ae-cli 6.0.48 → 6.1.0-project-role-upsert.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.
Files changed (82) hide show
  1. package/README.md +4 -1
  2. package/README.zh.md +4 -1
  3. package/dist/{capability-J4FU4JZW.js → capability-AXFQW5WM.js} +13 -10
  4. package/dist/{chunk-6KBBAPPP.js → chunk-JDPEVVHR.js} +4 -3
  5. package/dist/index.js +23 -13
  6. package/dist/{metadata-3J5ZAVMF.js → metadata-SOALPEA7.js} +3 -3
  7. package/dist/{personal-semantic-preference-32AAJ37M.js → personal-semantic-preference-LOF33N5X.js} +2 -2
  8. package/dist/project-semantic-RV6NA5LN.js +1113 -0
  9. package/dist/{te-analysis-WHYXHRJD.js → te-analysis-TV2YZ4IC.js} +23 -7
  10. package/dist/{te-engage-DHKNJ5BO.js → te-engage-EUVMTUDJ.js} +63 -5
  11. package/dist/te-experiment-ESEYE2SK.js +1059 -0
  12. package/package.json +2 -1
  13. package/skills/ae-analysis/SKILL.md +17 -1
  14. package/skills/ae-analysis/references/command_index.md +1 -1
  15. package/skills/ae-analysis/references/personal_semantic_preference_add.md +1 -1
  16. package/skills/ae-analysis/references/personal_semantic_preference_get.md +3 -1
  17. package/skills/ae-analysis/references/personal_semantic_preference_list.md +3 -1
  18. package/skills/ae-analysis/references/personal_semantic_preference_update.md +1 -1
  19. package/skills/ae-analysis/references/project_role_upsert.md +32 -2
  20. package/skills/ae-engage/SKILL.md +2 -0
  21. package/skills/ae-engage/references/save-flow.md +37 -1
  22. package/skills/ae-experiment/SKILL.md +117 -0
  23. package/skills/ae-experiment/references/batch_delete_experiment.md +11 -0
  24. package/skills/ae-experiment/references/batch_delete_feature.md +11 -0
  25. package/skills/ae-experiment/references/batch_delete_traffic_layer.md +11 -0
  26. package/skills/ae-experiment/references/cancel_experiment_query_by_request_id.md +11 -0
  27. package/skills/ae-experiment/references/check_experiment_ready.md +17 -0
  28. package/skills/ae-experiment/references/check_experiment_traffic_layer_conflict.md +37 -0
  29. package/skills/ae-experiment/references/delete_metric.md +13 -0
  30. package/skills/ae-experiment/references/manage_experiment.md +17 -0
  31. package/skills/ae-experiment/references/manage_feature_status.md +11 -0
  32. package/skills/ae-experiment/references/manage_feature_whitelist.md +66 -0
  33. package/skills/ae-experiment/references/manage_guardrail_metrics.md +26 -0
  34. package/skills/ae-experiment/references/query_bucket_list.md +12 -0
  35. package/skills/ae-experiment/references/query_experiment_detail.md +19 -0
  36. package/skills/ae-experiment/references/query_experiment_list.md +22 -0
  37. package/skills/ae-experiment/references/query_experiment_list_archived.md +18 -0
  38. package/skills/ae-experiment/references/query_experiment_metric_trend.md +12 -0
  39. package/skills/ae-experiment/references/query_experiment_operation_log.md +17 -0
  40. package/skills/ae-experiment/references/query_experiment_report_summary.md +12 -0
  41. package/skills/ae-experiment/references/query_experiment_sample_size_report.md +13 -0
  42. package/skills/ae-experiment/references/query_feature_detail.md +14 -0
  43. package/skills/ae-experiment/references/query_feature_list.md +12 -0
  44. package/skills/ae-experiment/references/query_feature_operation_log.md +19 -0
  45. package/skills/ae-experiment/references/query_feature_version_list.md +20 -0
  46. package/skills/ae-experiment/references/query_metric_detail.md +18 -0
  47. package/skills/ae-experiment/references/query_metric_list.md +15 -0
  48. package/skills/ae-experiment/references/query_traffic_layer_detail.md +13 -0
  49. package/skills/ae-experiment/references/query_traffic_layer_list.md +12 -0
  50. package/skills/ae-experiment/references/save_build_guide.md +39 -0
  51. package/skills/ae-experiment/references/save_experiment.md +210 -0
  52. package/skills/ae-experiment/references/save_feature.md +13 -0
  53. package/skills/ae-experiment/references/save_metric.md +91 -0
  54. package/skills/ae-experiment/references/save_submit_experiment.md +16 -0
  55. package/skills/ae-experiment/references/save_traffic_layer.md +13 -0
  56. package/skills/ae-experiment/references/save_validate.md +33 -0
  57. package/skills/ae-experiment/references/update_experiment_group.md +20 -0
  58. package/skills/ae-experiment-design/SKILL.md +149 -0
  59. package/skills/ae-experiment-design/agents/openai.yaml +4 -0
  60. package/skills/ae-experiment-design/references/client-experiment-sdk.md +147 -0
  61. package/skills/ae-experiment-design/references/experiment-creation.md +108 -0
  62. package/skills/ae-experiment-design/references/experiment-sdk-contract.md +100 -0
  63. package/skills/ae-experiment-design/references/exposure-contract.md +91 -0
  64. package/skills/ae-experiment-design/references/hybrid-experiment-sdk.md +74 -0
  65. package/skills/ae-experiment-design/references/metric-readiness.md +143 -0
  66. package/skills/ae-experiment-design/references/platform-operations.md +105 -0
  67. package/skills/ae-experiment-design/references/sdk-index.md +76 -0
  68. package/skills/ae-experiment-design/references/sdk-integration.md +114 -0
  69. package/skills/ae-experiment-design/references/sdk-troubleshooting.md +139 -0
  70. package/skills/ae-experiment-design/references/server-experiment-sdk.md +78 -0
  71. package/skills/ae-experiment-design/scripts/calculate_experiment_plan.py +450 -0
  72. package/skills/ae-experiment-insight/SKILL.md +149 -0
  73. package/skills/ae-experiment-insight/agents/openai.yaml +4 -0
  74. package/skills/ae-experiment-insight/references/decision-framework.md +69 -0
  75. package/skills/ae-experiment-insight/references/diagnostic-playbook.md +225 -0
  76. package/skills/ae-experiment-insight/references/platform-operations.md +82 -0
  77. package/skills/ae-experiment-insight/scripts/analyze_experiment.py +478 -0
  78. package/skills/ae-project-semantic/SKILL.md +193 -0
  79. package/skills/ae-project-semantic/references/query-routing-v5.md +165 -0
  80. package/skills/ae-project-semantic/references/recommendation-quality.md +68 -0
  81. package/dist/{chunk-HPLNYQPM.js → chunk-RSG4ONOI.js} +3 -3
  82. package/dist/{sync-2GTAKZYX.js → sync-YV3E66IF.js} +3 -3
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ae-cli
4
4
 
5
- `ae-cli` is the command-line client for the ThinkingAI AgenticEngine (AE) platform. It provides stable, structured interfaces for both AI Agents and human operators across analytics and project configuration, metadata, tracking, local-data ingestion, Engage, DataOps, knowledge bases, Agent resources, user memory, and system administration.
5
+ `ae-cli` is the command-line client for the ThinkingAI AgenticEngine (AE) platform. It provides stable, structured interfaces for both AI Agents and human operators across analytics, experimentation, project configuration, metadata, tracking, local-data ingestion, Engage, DataOps, knowledge bases, Agent resources, user memory, and system administration.
6
6
 
7
7
  The CLI is designed around:
8
8
 
@@ -109,11 +109,13 @@ The table covers every current root command individually. Use `ae-cli --help` fo
109
109
  | Category | Root command | Purpose |
110
110
  |---|---|---|
111
111
  | Analysis and projects | `analysis` | Reports, dashboards, ad-hoc analysis, drilldowns, details, alerts, tags, and cohorts |
112
+ | Analysis and projects | `experiment` | Atlas experiments, reports, traffic layers, buckets, Features, metrics, and operation logs |
112
113
  | Analysis and projects | `analysis-meta` | Event/property catalogs, metrics, virtual metadata, tracking governance, and project analysis settings |
113
114
  | Analysis and projects | `analysis-governance` | Data-asset search, lineage, impact analysis, certification, and governance |
114
115
  | Analysis and projects | `project` | Project information, members, roles, permissions, entities, time zones, and handover settings |
115
116
  | Analysis and projects | `metadata` | Capability-backed data-table, property, and dimension-table binding operations |
116
117
  | Analysis and projects | `personal-semantic-preference` | Project-scoped lightweight semantic preferences for the current user |
118
+ | Analysis and projects | `project-semantic` | Governed project semantics, asset packages, candidate validation, review, and publishing |
117
119
  | Data and tracking | `tracking` | Tracking plans, SDK samples, checks, ingestion diagnostics, code generation, and bundled wiki |
118
120
  | Data and tracking | `data-integration` | Inspect, plan, convert, upload, hand off, and reuse local CSV/JSON/Excel data |
119
121
  | Community insights | `community` | Community posts, comments, topics, sentiment, livestream, and report workflows |
@@ -355,6 +357,7 @@ npm test
355
357
  npm run qa-changed
356
358
  npm run self-check
357
359
  npm run check:release
360
+ npm run verify:experiment-tools
358
361
  npm run verify:readme
359
362
  npm run verify:auth-credentials
360
363
  npm run verify:update-check
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ae-cli
4
4
 
5
- `ae-cli` 是 ThinkingAI AgenticEngine(AE)平台的命令行客户端,为 AI Agent 和人工操作提供稳定、结构化的接口,覆盖分析与项目配置、元数据、埋点、本地数据接入、运营、DataOps、知识库、Agent 资源、用户记忆及系统管理。
5
+ `ae-cli` 是 ThinkingAI AgenticEngine(AE)平台的命令行客户端,为 AI Agent 和人工操作提供稳定、结构化的接口,覆盖分析、实验、项目配置、元数据、埋点、本地数据接入、运营、DataOps、知识库、Agent 资源、用户记忆及系统管理。
6
6
 
7
7
  CLI 的核心设计包括:
8
8
 
@@ -113,11 +113,13 @@ ae-cli capability list --domain analysis --jq '.data.capabilities[] | .id'
113
113
  | 类别 | 根命令 | 用途 |
114
114
  |---|---|---|
115
115
  | 分析与项目 | `analysis` | 报告、看板、即席分析、下钻、详情、告警、标签和分群 |
116
+ | 分析与项目 | `experiment` | Atlas 实验、报表、流量层、分桶、Feature、指标和操作日志 |
116
117
  | 分析与项目 | `analysis-meta` | 事件/属性目录、指标、虚拟元数据、埋点治理和项目分析配置 |
117
118
  | 分析与项目 | `analysis-governance` | 数据资产搜索、血缘、影响分析、认证和治理 |
118
119
  | 分析与项目 | `project` | 项目信息、成员、角色、权限、实体、时区和交接配置 |
119
120
  | 分析与项目 | `metadata` | 基于 Capability Gateway 的数据表、属性及维度表绑定 |
120
121
  | 分析与项目 | `personal-semantic-preference` | 当前用户按项目维护轻量个人语义偏好 |
122
+ | 分析与项目 | `project-semantic` | 项目语义治理、资产包、候选校验、审核和发布 |
121
123
  | 数据与埋点 | `tracking` | 埋点方案、SDK 示例、检查、采集诊断、代码生成和内置 Wiki |
122
124
  | 数据与埋点 | `data-integration` | 检查、规划、转换、上传、交接和复用本地 CSV/JSON/Excel 数据 |
123
125
  | 社区洞察 | `community` | 社区帖子、评论、话题、情感、直播和报告工作流 |
@@ -359,6 +361,7 @@ npm test
359
361
  npm run qa-changed
360
362
  npm run self-check
361
363
  npm run check:release
364
+ npm run verify:experiment-tools
362
365
  npm run verify:readme
363
366
  npm run verify:auth-credentials
364
367
  npm run verify:update-check
@@ -3,14 +3,6 @@ import {
3
3
  normalizeRiskLevel,
4
4
  requiresConfirmation
5
5
  } from "./chunk-AMBFK2K3.js";
6
- import {
7
- findGatewayDomain,
8
- listRegisteredCapabilityDomains,
9
- resolveGatewayDomain
10
- } from "./chunk-TKHSULJT.js";
11
- import {
12
- resolveHost
13
- } from "./chunk-ECBLHAZO.js";
14
6
  import {
15
7
  CapabilityGatewayError,
16
8
  dryRunCapabilityWithEnvelope,
@@ -20,6 +12,14 @@ import {
20
12
  listCapabilitiesWithEnvelope,
21
13
  validateCapabilityWithEnvelope
22
14
  } from "./chunk-QJQZH5GQ.js";
15
+ import {
16
+ findGatewayDomain,
17
+ listRegisteredCapabilityDomains,
18
+ resolveGatewayDomain
19
+ } from "./chunk-TKHSULJT.js";
20
+ import {
21
+ resolveHost
22
+ } from "./chunk-ECBLHAZO.js";
23
23
  import {
24
24
  printError,
25
25
  printOutput,
@@ -195,7 +195,10 @@ function registerCapability(program) {
195
195
  "after",
196
196
  "\nExamples:\n ae-cli capability list --domain analysis\n ae-cli capability list --domain analysis --project-id 1"
197
197
  );
198
- capability.command("search").description("Search capability IDs and descriptions in a domain").argument("<query>", "Case-insensitive search terms").requiredOption("--domain <domain>", "Capability namespace, such as analysis or metadata").option("--project-id <project-id>", "Filter by project membership, permissions, and enabled features").action(async (query, opts) => {
198
+ capability.command("search").description("Search capability IDs and descriptions in a domain").argument("<query>", "Case-insensitive search terms").requiredOption(
199
+ "--domain <domain>",
200
+ "Capability namespace. One of: analysis, project, system, tracking, metadata, experiment, engage-flow, engage-task, engage-setting, engage-scene, engage-activity, engage-workbench, community"
201
+ ).option("--project-id <project-id>", "Filter by project membership, permissions, and enabled features").action(async (query, opts) => {
199
202
  await executeAndPrint(program, async (host) => {
200
203
  const gatewayDomain = resolveCapabilityListDomain(opts.domain);
201
204
  const projectId = parseOptionalProjectId(opts.projectId);
@@ -213,7 +216,7 @@ function registerCapability(program) {
213
216
  });
214
217
  }).addHelpText(
215
218
  "after",
216
- '\nExamples:\n ae-cli capability search "dashboard list" --domain analysis\n ae-cli capability search "dashboard list" --domain analysis --project-id 1'
219
+ '\nDomains (--domain):\n analysis, project, system, tracking, metadata,\n experiment, engage-flow, engage-task, engage-setting,\n engage-scene, engage-activity, engage-workbench, community\n\nExamples:\n ae-cli capability search "dashboard list" --domain analysis\n ae-cli capability search "dashboard list" --domain analysis --project-id 1\n ae-cli capability search "info list" --domain project\n ae-cli capability search "usage" --domain system\n ae-cli capability search "plan" --domain tracking\n ae-cli capability search "data_table" --domain metadata\n ae-cli capability search "report" --domain experiment\n ae-cli capability search "flow" --domain engage-flow\n ae-cli capability search "task" --domain engage-task\n ae-cli capability search "channel" --domain engage-setting\n ae-cli capability search "strategy" --domain engage-scene\n ae-cli capability search "topic" --domain engage-activity\n ae-cli capability search "workbench" --domain engage-workbench\n ae-cli capability search "post" --domain community'
217
220
  );
218
221
  capability.command("inspect").description("Inspect one capability schema, risk, auth, and output metadata").argument("<capability-id>", "Capability ID, such as analysis.report.list").option("--domain <domain>", "Override the capability namespace used for gateway routing").option("--project-id <project-id>", "Check availability in a project before returning metadata").action(async (capabilityId, opts) => {
219
222
  await executeAndPrint(program, async (host) => {
@@ -1,12 +1,12 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import {
3
- resolveGatewayDomain
4
- } from "./chunk-TKHSULJT.js";
5
2
  import {
6
3
  dryRunCapability,
7
4
  executeCapabilityWithEnvelope,
8
5
  validateCapability
9
6
  } from "./chunk-QJQZH5GQ.js";
7
+ import {
8
+ resolveGatewayDomain
9
+ } from "./chunk-TKHSULJT.js";
10
10
  import {
11
11
  withOutputMetadata
12
12
  } from "./chunk-CZU3V3DQ.js";
@@ -20,6 +20,7 @@ function createCapabilityCommand(config) {
20
20
  command: config.command,
21
21
  capabilityId: config.capabilityId,
22
22
  description: config.description,
23
+ helpText: config.helpText,
23
24
  flags: config.flags,
24
25
  risk: config.risk,
25
26
  validate: config.validate,
package/dist/index.js CHANGED
@@ -1,7 +1,4 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import {
3
- requiresConfirmation
4
- } from "./chunk-AMBFK2K3.js";
5
2
  import {
6
3
  allHeaderNames,
7
4
  allSheetNames,
@@ -15,13 +12,13 @@ import {
15
12
  validateDraft,
16
13
  writeDraftXlsx
17
14
  } from "./chunk-LNZBEQXW.js";
18
- import "./chunk-I4WQAEYB.js";
19
15
  import {
20
16
  getLocalCliPackageInfo
21
17
  } from "./chunk-E2JKXMVO.js";
22
18
  import {
23
- resolveHost
24
- } from "./chunk-ECBLHAZO.js";
19
+ requiresConfirmation
20
+ } from "./chunk-AMBFK2K3.js";
21
+ import "./chunk-I4WQAEYB.js";
25
22
  import {
26
23
  TeAgentApiError,
27
24
  TeAgentCredentialsError
@@ -31,6 +28,9 @@ import {
31
28
  executeCapability,
32
29
  uploadInputFileBytes
33
30
  } from "./chunk-QJQZH5GQ.js";
31
+ import {
32
+ resolveHost
33
+ } from "./chunk-ECBLHAZO.js";
34
34
  import {
35
35
  formatCapabilityMissCompatHint,
36
36
  printError,
@@ -282,7 +282,7 @@ function capabilityGatewayHint(err) {
282
282
  ${compatExtra}` : base;
283
283
  }
284
284
  if (err.httpStatus === 404 && !err.code) {
285
- const base = "The current host returned 404 for this capability route. Do not keep retrying the same command; verify the backend route/capability deployment.";
285
+ const base = "The current host returned 404 for this capability route. Do not keep retrying the same command; verify the backend route/capability deployment. If --host points directly to a local Common service instead of the deployed gateway, scope AE_CLI_CAPABILITY_GATEWAY_DOMAIN= to this command so it uses /api/cli/v1.";
286
286
  return compatExtra ? `${base}
287
287
  ${compatExtra}` : base;
288
288
  }
@@ -2326,15 +2326,20 @@ program.name("ae-cli").version(version).description("CLI tool for ThinkingAI (AE
2326
2326
  async function loadCommands() {
2327
2327
  const commands = [];
2328
2328
  try {
2329
- const teAnalysis = await import("./te-analysis-WHYXHRJD.js");
2329
+ const teAnalysis = await import("./te-analysis-TV2YZ4IC.js");
2330
2330
  commands.push(...teAnalysis.default);
2331
2331
  } catch {
2332
2332
  }
2333
2333
  try {
2334
- const engage = await import("./te-engage-DHKNJ5BO.js");
2334
+ const engage = await import("./te-engage-EUVMTUDJ.js");
2335
2335
  commands.push(...engage.default);
2336
2336
  } catch {
2337
2337
  }
2338
+ try {
2339
+ const experiment = await import("./te-experiment-ESEYE2SK.js");
2340
+ commands.push(...experiment.default);
2341
+ } catch {
2342
+ }
2338
2343
  try {
2339
2344
  const community = await import("./te-community-UDBI672N.js");
2340
2345
  commands.push(...community.default);
@@ -2371,12 +2376,17 @@ async function loadCommands() {
2371
2376
  } catch {
2372
2377
  }
2373
2378
  try {
2374
- const metadata = await import("./metadata-3J5ZAVMF.js");
2379
+ const metadata = await import("./metadata-SOALPEA7.js");
2375
2380
  commands.push(...metadata.default);
2376
2381
  } catch {
2377
2382
  }
2378
2383
  try {
2379
- const personalSemanticPreference = await import("./personal-semantic-preference-32AAJ37M.js");
2384
+ const projectSemantic = await import("./project-semantic-RV6NA5LN.js");
2385
+ commands.push(...projectSemantic.default);
2386
+ } catch {
2387
+ }
2388
+ try {
2389
+ const personalSemanticPreference = await import("./personal-semantic-preference-LOF33N5X.js");
2380
2390
  commands.push(...personalSemanticPreference.default);
2381
2391
  } catch {
2382
2392
  }
@@ -2403,14 +2413,14 @@ async function registerConfigCommands() {
2403
2413
  }
2404
2414
  async function registerCapabilityCommands() {
2405
2415
  try {
2406
- const { registerCapability } = await import("./capability-J4FU4JZW.js");
2416
+ const { registerCapability } = await import("./capability-AXFQW5WM.js");
2407
2417
  registerCapability(program);
2408
2418
  } catch {
2409
2419
  }
2410
2420
  }
2411
2421
  async function registerSyncCommand() {
2412
2422
  try {
2413
- const { registerSync } = await import("./sync-2GTAKZYX.js");
2423
+ const { registerSync } = await import("./sync-YV3E66IF.js");
2414
2424
  registerSync(program);
2415
2425
  } catch {
2416
2426
  }
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  withAsyncArtifactLifecycle
4
- } from "./chunk-HPLNYQPM.js";
4
+ } from "./chunk-RSG4ONOI.js";
5
5
  import {
6
6
  createCapabilityCommand
7
- } from "./chunk-6KBBAPPP.js";
7
+ } from "./chunk-JDPEVVHR.js";
8
+ import "./chunk-QJQZH5GQ.js";
8
9
  import {
9
10
  registerCapabilityGatewayRoute
10
11
  } from "./chunk-TKHSULJT.js";
11
- import "./chunk-QJQZH5GQ.js";
12
12
  import "./chunk-CZU3V3DQ.js";
13
13
  import "./chunk-Y74WTIKJ.js";
14
14
  import "./chunk-ATSM5XAW.js";
@@ -1,11 +1,11 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  createCapabilityCommand
4
- } from "./chunk-6KBBAPPP.js";
4
+ } from "./chunk-JDPEVVHR.js";
5
+ import "./chunk-QJQZH5GQ.js";
5
6
  import {
6
7
  registerCapabilityGatewayRoute
7
8
  } from "./chunk-TKHSULJT.js";
8
- import "./chunk-QJQZH5GQ.js";
9
9
  import "./chunk-CZU3V3DQ.js";
10
10
  import "./chunk-Y74WTIKJ.js";
11
11
  import "./chunk-ATSM5XAW.js";