@thinkingai/ae-cli 6.1.25 → 6.1.26

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 (121) hide show
  1. package/README.md +28 -9
  2. package/README.zh.md +25 -9
  3. package/bin/ae-cli.js +6 -1
  4. package/cli-installation-guide.md +91 -0
  5. package/dist/{auth-LHM7NQPR.js → auth-YHMC3GDH.js} +6 -8
  6. package/dist/automation-NWWVLWG2.js +459 -0
  7. package/dist/{capability-SJI5KOCK.js → capability-3QLLIVFB.js} +6 -6
  8. package/dist/chunk-4655PUNX.js +43 -0
  9. package/dist/{chunk-KS4DE3MX.js → chunk-5XJYLEVC.js} +4 -4
  10. package/dist/{chunk-N4BLPJC7.js → chunk-7QXISROD.js} +1 -1
  11. package/dist/{chunk-7WZACOAI.js → chunk-AP7YP2NX.js} +2 -2
  12. package/dist/{chunk-SO5LKIWP.js → chunk-CT7QDJS6.js} +2 -2
  13. package/dist/chunk-D6ACFILC.js +56 -0
  14. package/dist/{chunk-QYXDJOLA.js → chunk-EOYSKMXN.js} +19 -11
  15. package/dist/{chunk-5XRQ3CZR.js → chunk-FMNNGNYO.js} +43 -8
  16. package/dist/{chunk-DU72X2IO.js → chunk-GIK6EDUG.js} +22 -10
  17. package/dist/chunk-HVHR4SCP.js +133 -0
  18. package/dist/{chunk-2FJM4HRV.js → chunk-KAEHZZH4.js} +3 -3
  19. package/dist/{chunk-BW7JUDEI.js → chunk-KFNMQTZI.js} +514 -213
  20. package/dist/{chunk-KJDOTPYU.js → chunk-PLE722AJ.js} +28 -11
  21. package/dist/chunk-RK6GLDGI.js +27 -0
  22. package/dist/{chunk-GK7WDY7E.js → chunk-S6M42KND.js} +1 -1
  23. package/dist/{chunk-IG3DYEIR.js → chunk-UQ77JXYH.js} +4 -3
  24. package/dist/{chunk-YVGXGTD6.js → chunk-WNGFSIOB.js} +7 -1
  25. package/dist/{chunk-XKIW3QMF.js → chunk-XCHAYMSF.js} +3 -3
  26. package/dist/{community-report-client-6VJDDMJJ.js → community-report-client-PEERQCX2.js} +1 -1
  27. package/dist/{config-XQWOPDHN.js → config-AHPMEW5A.js} +4 -4
  28. package/dist/context-YAE3QXP3.js +136 -0
  29. package/dist/{data-integration-XBTCGXQT.js → data-integration-HESZET7E.js} +6 -6
  30. package/dist/index.js +123 -46
  31. package/dist/{local-data-upload-client-3P7NIVQ4.js → local-data-upload-client-TWMHFLUA.js} +1 -1
  32. package/dist/memory-62BJOULV.js +580 -0
  33. package/dist/{metadata-JRYKNUS5.js → metadata-C7CEDHOJ.js} +7 -7
  34. package/dist/{model-ZS7HVGKN.js → model-SBV2JFJI.js} +9 -5
  35. package/dist/{personal-semantic-preference-IDE2GE5T.js → personal-semantic-preference-QECDPHND.js} +117 -11
  36. package/dist/{project-semantic-36KOCYN7.js → project-semantic-Z4QAMBWF.js} +6 -6
  37. package/dist/{sync-EQLSTUS7.js → sync-SU33KYX7.js} +12 -8
  38. package/dist/{te-agent-Z3HCTKR7.js → te-agent-F5QBZSQA.js} +90 -454
  39. package/dist/{te-analysis-5ZZ6YHVH.js → te-analysis-2ECAAIFK.js} +297 -20
  40. package/dist/{te-community-Z7JACGF3.js → te-community-PFLDLPP4.js} +3 -3
  41. package/dist/{te-dataops-F7GQOIS6.js → te-dataops-FOQSRIAZ.js} +5 -5
  42. package/dist/{te-engage-RNRMYDO3.js → te-engage-QKUGIWSR.js} +6 -6
  43. package/dist/{te-experiment-BTAC2UNK.js → te-experiment-26PXR2UO.js} +6 -6
  44. package/dist/{te-kb-QJLJEX5K.js → te-kb-MHDOST62.js} +494 -214
  45. package/dist/{te-system-IXC43QHZ.js → te-system-J2FQF5ER.js} +6 -6
  46. package/dist/{te-team-BIZIKIHZ.js → te-team-5UOZPTU3.js} +6 -6
  47. package/dist/things-VPPXXLHB.js +1091 -0
  48. package/dist/{update-W2SGQNKT.js → update-EEUTEI6R.js} +59 -51
  49. package/dist/workspace-O3EEIYQM.js +554 -0
  50. package/package.json +21 -9
  51. package/skills/ae-agent/SKILL.md +89 -139
  52. package/skills/ae-agent/references/add-model.md +1 -1
  53. package/skills/ae-agent/references/create-agent.md +1 -1
  54. package/skills/ae-agent/references/find-archived-conversations.md +12 -5
  55. package/skills/ae-agent/references/get-agent.md +1 -1
  56. package/skills/ae-agent/references/list-agents.md +2 -2
  57. package/skills/ae-agent/references/list-models.md +2 -2
  58. package/skills/ae-agent/references/restore-conversation.md +3 -1
  59. package/skills/ae-analysis/SKILL.md +15 -6
  60. package/skills/ae-analysis/references/ai_models/funnel.md +5 -3
  61. package/skills/ae-analysis/references/ai_models.md +27 -0
  62. package/skills/ae-analysis/references/command_index.md +12 -4
  63. package/skills/ae-analysis/references/dashboard_move.md +21 -0
  64. package/skills/ae-analysis/references/dashboard_report_add.md +2 -0
  65. package/skills/ae-analysis/references/dashboard_report_get.md +19 -0
  66. package/skills/ae-analysis/references/dashboard_report_update.md +27 -0
  67. package/skills/ae-analysis/references/dashboard_update.md +1 -1
  68. package/skills/ae-analysis/references/event_report_presentation.md +76 -0
  69. package/skills/ae-analysis/references/feedback_submit.md +37 -0
  70. package/skills/ae-analysis/references/metadata_resolution.md +15 -0
  71. package/skills/ae-analysis/references/personal_semantic_preference_review.md +9 -0
  72. package/skills/ae-analysis/references/personal_semantic_preference_review_list.md +7 -0
  73. package/skills/ae-analysis/references/personal_semantic_preference_submit.md +7 -0
  74. package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +68 -27
  75. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +40 -1
  76. package/skills/ae-analysis/references/report_create.md +13 -3
  77. package/skills/ae-analysis/references/report_get.md +5 -1
  78. package/skills/ae-analysis/references/report_update.md +15 -4
  79. package/skills/ae-analysis/references/system_query_monitor_overview.md +2 -0
  80. package/skills/ae-analysis/references/system_query_task_cancel.md +2 -0
  81. package/skills/ae-analysis/references/system_query_task_export.md +6 -2
  82. package/skills/ae-analysis/references/system_query_task_get.md +2 -0
  83. package/skills/ae-analysis/references/system_query_task_list.md +7 -3
  84. package/skills/ae-analysis/references/system_query_task_options.md +2 -2
  85. package/skills/ae-analysis/references/system_query_task_realtime_list.md +15 -0
  86. package/skills/ae-analysis/references/user_tag_models.md +2 -0
  87. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-empty-skeleton.mjs +105 -0
  88. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +337 -22
  89. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/company-kb.mjs +21 -8
  90. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-rules.md +24 -11
  91. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +66 -0
  92. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +1 -0
  93. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/package-wiki-source-zip.mjs +109 -40
  94. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/plan-kb-source-sync.mjs +1 -1
  95. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/prepare-compile-schema.mjs +64 -0
  96. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/refresh-state-parts.mjs +91 -0
  97. package/skills/ae-automation/SKILL.md +16 -0
  98. package/skills/ae-automation/references/cli.md +53 -0
  99. package/skills/ae-automation/references/command_index.md +17 -0
  100. package/skills/ae-capability/SKILL.md +15 -6
  101. package/skills/ae-current-context/SKILL.md +3 -2
  102. package/skills/ae-kb/SKILL.md +62 -12
  103. package/skills/ae-kb/references/analysis-workflow.md +73 -36
  104. package/skills/ae-kb/references/query-workflow.md +67 -33
  105. package/skills/ae-kb/references/schema-import.md +5 -3
  106. package/skills/ae-kb/references/source-mutations.md +6 -4
  107. package/skills/ae-kb/references/text-sources.md +53 -0
  108. package/skills/ae-kb-discovery/SKILL.md +1 -1
  109. package/skills/ae-team/SKILL.md +23 -17
  110. package/skills/ae-things/SKILL.md +85 -0
  111. package/skills/ae-things/references/cli.md +103 -0
  112. package/skills/ae-things-progress/SKILL.md +43 -0
  113. package/skills/ae-things-review/SKILL.md +42 -0
  114. package/skills/ae-workspace/SKILL.md +43 -0
  115. package/skills/ae-workspace/references/commands.md +51 -0
  116. package/dist/chunk-E2JKXMVO.js +0 -29
  117. package/dist/context-M3HDGEIR.js +0 -46
  118. package/dist/memory-6APEB2JB.js +0 -892
  119. package/skills/ae-agent/references/create-automation.md +0 -125
  120. package/skills/ae-agent/references/list-automations.md +0 -56
  121. package/skills/ae-agent/references/update-automation.md +0 -107
@@ -7,39 +7,41 @@ import {
7
7
  waitForAnalysisRun,
8
8
  withAsyncArtifactLifecycle,
9
9
  withInterruptSignal
10
- } from "./chunk-XKIW3QMF.js";
10
+ } from "./chunk-XCHAYMSF.js";
11
11
  import {
12
12
  createCapabilityCommand,
13
13
  definitionIntentSnapshotFlag,
14
14
  modelDefinitionIntentSnapshotFlag
15
- } from "./chunk-2FJM4HRV.js";
15
+ } from "./chunk-KAEHZZH4.js";
16
16
  import {
17
17
  CapabilityGatewayError,
18
18
  buildCapabilityGatewayUrl,
19
19
  dryRunCapability,
20
20
  executeCapability,
21
21
  executeCapabilityWithEnvelope,
22
+ readCliAgentContext,
22
23
  requestCapabilityGateway,
23
24
  requestCapabilityGatewayWithEnvelope,
25
+ runWithCliAgentContext,
24
26
  uploadInputFile,
25
27
  validateCapability,
26
28
  validateCapabilityWithEnvelope
27
- } from "./chunk-QYXDJOLA.js";
29
+ } from "./chunk-EOYSKMXN.js";
28
30
  import {
29
31
  registerCapabilityGatewayRoute,
30
32
  resolveGatewayDomain
31
33
  } from "./chunk-KPQY44JQ.js";
32
34
  import {
33
35
  withOutputMetadata
34
- } from "./chunk-BW7JUDEI.js";
36
+ } from "./chunk-KFNMQTZI.js";
35
37
  import "./chunk-Y74WTIKJ.js";
36
38
  import {
37
39
  getCliToken
38
- } from "./chunk-DU72X2IO.js";
39
- import "./chunk-IG3DYEIR.js";
40
+ } from "./chunk-GIK6EDUG.js";
41
+ import "./chunk-UQ77JXYH.js";
40
42
  import {
41
43
  CliValidationError
42
- } from "./chunk-YVGXGTD6.js";
44
+ } from "./chunk-WNGFSIOB.js";
43
45
 
44
46
  // src/commands/te-analysis/capability-shared.ts
45
47
  var ANALYSIS_GATEWAY_CLI_SERVICES = /* @__PURE__ */ new Set(["project", "system"]);
@@ -2323,7 +2325,7 @@ var metadataGovernanceRecommendationAutoReview = {
2323
2325
  AUTO_REVIEW_CAPABILITY_ID,
2324
2326
  autoReviewInput(ctx)
2325
2327
  ),
2326
- execute: async (ctx) => {
2328
+ execute: async (ctx) => withAutoReviewAgentContext(async () => {
2327
2329
  const input = autoReviewInput(ctx);
2328
2330
  if (hasExplicitLimit(ctx)) {
2329
2331
  await validateCapabilityWithEnvelope(ctx.host(), gatewayDomain(), AUTO_REVIEW_CAPABILITY_ID, input);
@@ -2346,8 +2348,15 @@ var metadataGovernanceRecommendationAutoReview = {
2346
2348
  }, result.meta);
2347
2349
  }
2348
2350
  return withOutputMetadata(result.data, result.meta);
2349
- }
2351
+ })
2350
2352
  };
2353
+ async function withAutoReviewAgentContext(run) {
2354
+ const inherited = readCliAgentContext();
2355
+ return runWithCliAgentContext({
2356
+ agent_session_id: inherited.agent_session_id || randomUUID(),
2357
+ agent_turn_id: inherited.agent_turn_id || randomUUID()
2358
+ }, run);
2359
+ }
2351
2360
  function autoReviewInput(ctx) {
2352
2361
  return compactInput({
2353
2362
  ...projectInput(ctx),
@@ -4141,7 +4150,7 @@ var reportGet = createAnalysisCapabilityCommand({
4141
4150
  resource: "report",
4142
4151
  command: "get",
4143
4152
  capabilityId: "analysis.report.get",
4144
- description: "Get one analysis report definition as AI QP without executing report data.",
4153
+ description: "Get one analysis report definition and event-report presentation without executing report data.",
4145
4154
  flags: [projectIdFlag, { name: "report-id", type: "number", required: true, desc: "Report ID." }],
4146
4155
  risk: "read",
4147
4156
  buildInput: (ctx) => ({
@@ -4173,7 +4182,7 @@ var REPORT_WRITE_MODEL_TYPE_VALUES = [
4173
4182
  ];
4174
4183
  var REPORT_WRITE_MODEL_DESCRIPTION = `${AI_MODEL_DESCRIPTION} Report create/update also supports tag for saved tag report data; use tag as the AI-facing spelling.`;
4175
4184
  var AI_DEFINITION_DESCRIPTION = 'Event metrics: omit optional display_name unless the target command schema explicitly supports it. Funnel step filters use event_property_name (not field) and string-array values, including "true"/"false" for boolean properties. For tag/cluster filters, cluster_date_policy accepts LATEST (default), AUTO (match the computed result for each analysis date), or SPECIFIED (requires specified_cluster_date in yyyy-MM-dd format). AI-facing model definition JSON. Do not pass raw QP, events, event_view, visual_view, or analysis_query. Distribution filters must be attached to the corresponding distribution_metrics[].filters; do not use top-level filters or relation. For path definitions, global filters support user_property, cluster, and tag only; event_property is not supported. session_unit accepts second (1..999), minute (1..999), or hour (1..24). Do not use day; express one day as session_interval=24 and session_unit=hour. Session analysis is a different model: it cuts sessions with session_interval plus interval_unit (second and minute 1..999, hour 1..24), required unless cut_mode=session_id, and its metrics must match view_mode. For SQL, a simple query is {"sql":"select ..."}; raw variables use ${name}, while typed params use ${Text:name}, ${Selector:name}, or ${PartDate:name}. PartDate expands to a complete predicate, so write WHERE ${PartDate:d}, not a column followed by the placeholder. A part_date parameter may set boolean use_timezone; it defaults to false and controls whether that parameter uses the query effective timezone. Selector value must match one options[].value. Trino identifiers containing #, $, @, spaces, punctuation, or a reserved word must be delimited with double quotes, for example SELECT "#user_id", "$part_event", "end" FROM ...; single quotes are string literals. For multiline SQL JSON, the decoded sql value must contain a real line break; do not submit a literal \\n sequence outside quoted SQL text. Queries against an event table must include a date-partition predicate on the quoted "$part_date" column, for example WHERE "$part_date" BETWEEN \'2026-07-01\' AND \'2026-07-07\'; the backend rejects event-table SQL without it. The CLI preserves SQL text and never auto-quotes identifiers.';
4176
- var REPORT_WRITE_DEFINITION_DESCRIPTION = `${AI_DEFINITION_DESCRIPTION} Saved-report filters may contain one compound group level only; every item inside that group must be a leaf without another items array. Historical deeper trees remain readable but cannot be written back as a definition. For model_type=tag, pass a tag report intent such as {"tag":{"tag_name":"vip_users","time_range":{"mode":"recent","unit":"day","value":7}}}. Tags are supported for report create/update and report data, not ad-hoc analysis.`;
4185
+ var REPORT_WRITE_DEFINITION_DESCRIPTION = `${AI_DEFINITION_DESCRIPTION} Saved funnel definitions may set optional funnel.steps[].display_name; report get returns it and report create/update preserves it. Saved-report filters may contain one compound group level only; every item inside that group must be a leaf without another items array. Historical deeper trees remain readable but cannot be written back as a definition. For model_type=tag, pass a tag report intent such as {"tag":{"tag_name":"vip_users","time_range":{"mode":"recent","unit":"day","value":7}}}. Tags are supported for report create/update and report data, not ad-hoc analysis.`;
4177
4186
  function aiModelTypeFlag(required) {
4178
4187
  return {
4179
4188
  name: "model-type",
@@ -4264,6 +4273,61 @@ function validateReportMetadataResolutions(ctx) {
4264
4273
  }
4265
4274
  }
4266
4275
 
4276
+ // src/commands/te-analysis/report/presentation.ts
4277
+ var reportPresentationFlag = {
4278
+ name: "presentation",
4279
+ type: "json",
4280
+ required: false,
4281
+ desc: 'Optional top-level event-report display JSON: chart_type (line|combo|bar|stacked|cumulative|pie), table_layout (date|event|group), series [{metric_index:1,type:"bar"|"line",axis:"primary"|"secondary"}]. Line/combo/cumulative require a non-total time_particle_size. Metric indexes are 1-based definition.metrics positions. Series is a subset patch; [] resets all series, and chart_type=line resets to pure primary-axis lines. Omit to preserve the saved chart/result-table layout on same-model updates. For a dashboard table card use analysis dashboard-report update --chart-type table.'
4282
+ };
4283
+ function validateReportPresentation(ctx) {
4284
+ if (!(ctx.has?.("presentation") ?? ctx.str("presentation") !== "")) return;
4285
+ const value = ctx.json("presentation");
4286
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
4287
+ throw new Error("--presentation must be a non-empty event-report display object.");
4288
+ }
4289
+ const presentation = value;
4290
+ const keys = Object.keys(presentation);
4291
+ if (keys.length === 0 || keys.some((key) => !["chart_type", "table_layout", "series"].includes(key))) {
4292
+ throw new Error("--presentation accepts only chart_type, table_layout, and series; use semantic names, not raw QP fields.");
4293
+ }
4294
+ if (presentation.chart_type === "table") {
4295
+ throw new Error("A table is a dashboard card display; use analysis dashboard-report update --chart-type table.");
4296
+ }
4297
+ if (Object.hasOwn(presentation, "chart_type") && (typeof presentation.chart_type !== "string" || !["line", "combo", "bar", "stacked", "cumulative", "pie"].includes(presentation.chart_type))) {
4298
+ throw new Error("--presentation.chart_type must be line, combo, bar, stacked, cumulative, or pie.");
4299
+ }
4300
+ if (Object.hasOwn(presentation, "table_layout") && (typeof presentation.table_layout !== "string" || !["date", "event", "group"].includes(presentation.table_layout))) {
4301
+ throw new Error("--presentation.table_layout must be date, event, or group.");
4302
+ }
4303
+ if (ctx.str("model-type") !== "" && ctx.str("model-type") !== "event") {
4304
+ throw new Error("--presentation is supported only for event reports.");
4305
+ }
4306
+ if (Object.hasOwn(presentation, "series")) validateSeries(presentation.series);
4307
+ }
4308
+ function validateSeries(value) {
4309
+ if (!Array.isArray(value)) throw new Error("--presentation.series must be an array; [] resets all series.");
4310
+ const indexes = /* @__PURE__ */ new Set();
4311
+ for (const [position, item] of value.entries()) {
4312
+ const path = `--presentation.series[${position}]`;
4313
+ if (!item || typeof item !== "object" || Array.isArray(item) || Object.keys(item).length !== 3 || Object.keys(item).some((key) => !["metric_index", "type", "axis"].includes(key))) {
4314
+ throw new Error(`${path} requires only metric_index, type, and axis, all three required.`);
4315
+ }
4316
+ const series = item;
4317
+ if (typeof series.metric_index !== "number" || !Number.isInteger(series.metric_index) || series.metric_index < 1) {
4318
+ throw new Error(`${path}.metric_index must be a positive 1-based integer position in definition.metrics.`);
4319
+ }
4320
+ if (indexes.has(series.metric_index)) throw new Error(`${path}.metric_index must not repeat another series binding.`);
4321
+ indexes.add(series.metric_index);
4322
+ if (typeof series.type !== "string" || !["bar", "line"].includes(series.type)) {
4323
+ throw new Error(`${path}.type must be bar or line.`);
4324
+ }
4325
+ if (typeof series.axis !== "string" || !["primary", "secondary"].includes(series.axis)) {
4326
+ throw new Error(`${path}.axis must be primary or secondary.`);
4327
+ }
4328
+ }
4329
+ }
4330
+
4267
4331
  // src/commands/te-analysis/report/create.ts
4268
4332
  var reportCreate = createAnalysisCapabilityCommand({
4269
4333
  resource: "report",
@@ -4275,6 +4339,7 @@ var reportCreate = createAnalysisCapabilityCommand({
4275
4339
  { name: "report-name", type: "string", required: true, desc: "Report display name." },
4276
4340
  reportWriteModelTypeFlag(true),
4277
4341
  reportWriteDefinitionFlag(true),
4342
+ reportPresentationFlag,
4278
4343
  modelDefinitionIntentSnapshotFlag,
4279
4344
  reportMetadataResolutionsFlag,
4280
4345
  { name: "report-desc", type: "string", required: false, desc: "Optional report description." },
@@ -4283,15 +4348,19 @@ var reportCreate = createAnalysisCapabilityCommand({
4283
4348
  { name: "dashboard-ids", type: "json", required: false, desc: "Optional dashboard ID array to associate after creation." }
4284
4349
  ],
4285
4350
  risk: "write",
4286
- validate: validateReportMetadataResolutions,
4351
+ validate: (ctx) => {
4352
+ validateReportMetadataResolutions(ctx);
4353
+ validateReportPresentation(ctx);
4354
+ },
4287
4355
  intentConsistency: { definitionFlag: "definition", modelTypeFlag: "model-type" },
4288
4356
  buildInput: (ctx) => compactInput({
4289
4357
  ...projectInput(ctx),
4290
4358
  report_name: ctx.str("report-name"),
4291
4359
  model_type: ctx.str("model-type"),
4292
4360
  definition: ctx.json("definition"),
4361
+ presentation: optionalJson(ctx, "presentation"),
4293
4362
  resolutions: optionalJson(ctx, "resolutions"),
4294
- report_desc: optionalString(ctx, "report-desc"),
4363
+ report_desc: optionalString(ctx, "report-desc") ?? "",
4295
4364
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
4296
4365
  query_duration_ms: optionalNumber(ctx, "query-duration-ms"),
4297
4366
  dashboard_ids: optionalJsonArray(ctx, "dashboard-ids")
@@ -4302,9 +4371,10 @@ var reportCreate = createAnalysisCapabilityCommand({
4302
4371
  function validateReportUpdate(ctx) {
4303
4372
  const hasDefinition = ctx.str("definition") !== "";
4304
4373
  const hasResolutions = ctx.json("resolutions") !== void 0;
4374
+ const hasPresentation = ctx.has?.("presentation") ?? ctx.str("presentation") !== "";
4305
4375
  const hasMetadataUpdate = ctx.str("report-name") !== "" || optionalStringPreserveEmpty(ctx, "report-desc") !== void 0;
4306
- if (!hasDefinition && !hasMetadataUpdate) {
4307
- throw new Error("At least one of --report-name, --report-desc, or --definition is required.");
4376
+ if (!hasDefinition && !hasMetadataUpdate && !hasPresentation) {
4377
+ throw new Error("At least one of --report-name, --report-desc, --definition, or --presentation is required.");
4308
4378
  }
4309
4379
  if (hasDefinition && ctx.str("model-type") === "") {
4310
4380
  throw new Error("--model-type is required when --definition is provided.");
@@ -4313,12 +4383,13 @@ function validateReportUpdate(ctx) {
4313
4383
  throw new Error("--resolutions requires --definition.");
4314
4384
  }
4315
4385
  validateReportMetadataResolutions(ctx);
4386
+ validateReportPresentation(ctx);
4316
4387
  }
4317
4388
  var reportUpdate = createAnalysisCapabilityCommand({
4318
4389
  resource: "report",
4319
4390
  command: "update",
4320
4391
  capabilityId: "analysis.report.update",
4321
- description: "Update report metadata or AI QP definition through the capability gateway.",
4392
+ description: "Update report metadata, AI QP definition, or event-report presentation through the capability gateway.",
4322
4393
  flags: [
4323
4394
  projectIdFlag,
4324
4395
  { name: "report-id", type: "number", required: true, desc: "Report ID to update." },
@@ -4327,6 +4398,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
4327
4398
  { name: "report-desc", type: "string", required: false, desc: "New report description. Pass an empty string to clear it; omit to preserve it." },
4328
4399
  reportWriteModelTypeFlag(false),
4329
4400
  reportWriteDefinitionFlag(false),
4401
+ reportPresentationFlag,
4330
4402
  modelDefinitionIntentSnapshotFlag,
4331
4403
  reportMetadataResolutionsFlag,
4332
4404
  { name: "cache-seconds", type: "number", required: false, desc: "Optional cache duration in seconds." },
@@ -4343,6 +4415,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
4343
4415
  report_desc: optionalStringPreserveEmpty(ctx, "report-desc"),
4344
4416
  model_type: optionalString(ctx, "model-type"),
4345
4417
  definition: optionalJson(ctx, "definition"),
4418
+ presentation: optionalJson(ctx, "presentation"),
4346
4419
  resolutions: optionalJson(ctx, "resolutions"),
4347
4420
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
4348
4421
  query_duration_ms: optionalNumber(ctx, "query-duration-ms")
@@ -4792,6 +4865,42 @@ var dashboardCopy = createAnalysisCapabilityCommand({
4792
4865
  })
4793
4866
  });
4794
4867
 
4868
+ // src/commands/te-analysis/dashboard/move.ts
4869
+ var dashboardMove = createAnalysisCapabilityCommand({
4870
+ resource: "dashboard",
4871
+ command: "move",
4872
+ capabilityId: "analysis.dashboard.move",
4873
+ description: "Move one or more dashboards to the same project-space root or folder.",
4874
+ flags: [
4875
+ projectIdFlag,
4876
+ {
4877
+ name: "dashboard-ids",
4878
+ type: "json",
4879
+ required: true,
4880
+ desc: "Dashboard ID array. Pass a one-item array to move a single dashboard."
4881
+ },
4882
+ {
4883
+ name: "to-space-id",
4884
+ type: "number",
4885
+ required: true,
4886
+ desc: "Target project space ID."
4887
+ },
4888
+ {
4889
+ name: "to-folder-id",
4890
+ type: "number",
4891
+ required: false,
4892
+ desc: "Target folder ID within the target project space. Omit to move to the space root."
4893
+ }
4894
+ ],
4895
+ risk: "write",
4896
+ buildInput: (ctx) => compactInput({
4897
+ ...projectInput(ctx),
4898
+ dashboard_ids: jsonArray(ctx, "dashboard-ids"),
4899
+ to_space_id: ctx.num("to-space-id"),
4900
+ to_folder_id: optionalNumber(ctx, "to-folder-id")
4901
+ })
4902
+ });
4903
+
4795
4904
  // src/commands/te-analysis/dashboard/freeze.ts
4796
4905
  var dashboardFreeze = createAnalysisCapabilityCommand({
4797
4906
  resource: "dashboard",
@@ -4850,6 +4959,7 @@ var commands19 = [
4850
4959
  dashboardDelete,
4851
4960
  dashboardHandover,
4852
4961
  dashboardCopy,
4962
+ dashboardMove,
4853
4963
  dashboardFreeze,
4854
4964
  dashboardAbnormalGet,
4855
4965
  dashboardTaskStatus
@@ -4875,9 +4985,71 @@ var dashboardReportAdd = createAnalysisCapabilityCommand({
4875
4985
  })
4876
4986
  });
4877
4987
 
4988
+ // src/commands/te-analysis/dashboard-report/get.ts
4989
+ var dashboardReportGet = createAnalysisCapabilityCommand({
4990
+ resource: "dashboard-report",
4991
+ command: "get",
4992
+ capabilityId: "analysis.dashboard_report.get",
4993
+ description: "Get an event report card presentation on one analysis dashboard, not the source report definition.",
4994
+ flags: [
4995
+ projectIdFlag,
4996
+ { name: "dashboard-id", type: "number", required: true, desc: "Dashboard containing the report card." },
4997
+ { name: "report-id", type: "number", required: true, desc: "Existing event report ID on that dashboard." }
4998
+ ],
4999
+ risk: "read",
5000
+ buildInput: (ctx) => ({
5001
+ ...projectInput(ctx),
5002
+ dashboard_id: ctx.num("dashboard-id"),
5003
+ report_id: ctx.num("report-id")
5004
+ })
5005
+ });
5006
+
5007
+ // src/commands/te-analysis/dashboard-report/update.ts
5008
+ var dashboardReportUpdate = createAnalysisCapabilityCommand({
5009
+ resource: "dashboard-report",
5010
+ command: "update",
5011
+ capabilityId: "analysis.dashboard_report.update",
5012
+ description: "Update one event report card presentation without changing the source report definition or other dashboards.",
5013
+ flags: [
5014
+ projectIdFlag,
5015
+ { name: "dashboard-id", type: "number", required: true, desc: "Dashboard containing the report card." },
5016
+ { name: "report-id", type: "number", required: true, desc: "Existing event report ID on that dashboard." },
5017
+ { name: "chart-type", type: "string", required: false, desc: "Card chart type: line, combo, bar, stacked, cumulative, pie, or table. Combo inherits existing source-report series; this command cannot edit series. A pure line card requires resetting source combo first. Gateway validates compatibility with the saved event definition." },
5018
+ { name: "table-layout", type: "string", required: false, desc: "Table layout: date, event, or group. Omit to preserve it." },
5019
+ { name: "date-outside", type: "boolean", required: false, desc: "Show dates outside the table. True requires a grouped table with a non-date layout; also choose event/group layout when inherited. Pass false to clear, omit to preserve." }
5020
+ ],
5021
+ risk: "write",
5022
+ validate: (ctx) => {
5023
+ const chartType = optionalString(ctx, "chart-type");
5024
+ const tableLayout = optionalString(ctx, "table-layout");
5025
+ const dateOutside = optionalBoolean(ctx, "date-outside");
5026
+ if (chartType === void 0 && tableLayout === void 0 && dateOutside === void 0) {
5027
+ throw new Error("At least one of --chart-type, --table-layout, or --date-outside is required.");
5028
+ }
5029
+ if (chartType !== void 0 && !["line", "combo", "bar", "stacked", "cumulative", "pie", "table"].includes(chartType)) {
5030
+ throw new Error("--chart-type must be line, combo, bar, stacked, cumulative, pie, or table.");
5031
+ }
5032
+ if (tableLayout !== void 0 && !["date", "event", "group"].includes(tableLayout)) {
5033
+ throw new Error("--table-layout must be date, event, or group.");
5034
+ }
5035
+ },
5036
+ buildInput: (ctx) => ({
5037
+ ...projectInput(ctx),
5038
+ dashboard_id: ctx.num("dashboard-id"),
5039
+ report_id: ctx.num("report-id"),
5040
+ presentation: compactInput({
5041
+ chart_type: optionalString(ctx, "chart-type"),
5042
+ table_layout: optionalString(ctx, "table-layout"),
5043
+ date_outside: optionalBoolean(ctx, "date-outside")
5044
+ })
5045
+ })
5046
+ });
5047
+
4878
5048
  // src/commands/te-analysis/dashboard-report/index.ts
4879
5049
  var commands20 = [
4880
- dashboardReportAdd
5050
+ dashboardReportAdd,
5051
+ dashboardReportGet,
5052
+ dashboardReportUpdate
4881
5053
  ];
4882
5054
  var dashboard_report_default = commands20;
4883
5055
 
@@ -10568,14 +10740,14 @@ var monitorTimeFields = [
10568
10740
  type: "string",
10569
10741
  required: true,
10570
10742
  pattern: "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
10571
- desc: "Inclusive query range start, yyyy-MM-dd HH:mm:ss."
10743
+ desc: "Inclusive completion-time range start, yyyy-MM-dd HH:mm:ss."
10572
10744
  },
10573
10745
  {
10574
10746
  flag: "end-time",
10575
10747
  type: "string",
10576
10748
  required: true,
10577
10749
  pattern: "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
10578
- desc: "Inclusive query range end, yyyy-MM-dd HH:mm:ss."
10750
+ desc: "Inclusive completion-time range end, including the entire second, yyyy-MM-dd HH:mm:ss."
10579
10751
  }
10580
10752
  ];
10581
10753
  function validateTaskQueryInput(input) {
@@ -10639,6 +10811,27 @@ var systemMonitoringCommands = [
10639
10811
  ],
10640
10812
  validate: (_ctx, input) => validateTaskQueryInput(input)
10641
10813
  }),
10814
+ defineSystemCommand({
10815
+ resource: "query-task",
10816
+ command: "realtime-list",
10817
+ capabilityId: "system.query_task.realtime_list",
10818
+ description: "List a bounded realtime query-monitor snapshot; use query-task list for historical logs.",
10819
+ risk: "read",
10820
+ fields: [
10821
+ { flag: "duration-minutes", type: "number", min: 1, max: 30, desc: "Realtime window in minutes. Default: 30." },
10822
+ ...monitorScopeFields,
10823
+ { flag: "cluster-names", type: "json", required: true, array: true, desc: "Query cluster-name JSON array." },
10824
+ { flag: "status-codes", type: "json", array: true, desc: "Optional task status-code JSON array." },
10825
+ { flag: "limit", type: "number", min: 1, max: 200, desc: "Maximum returned tasks. Default: 100, max: 200." }
10826
+ ],
10827
+ validate: (_ctx, input) => {
10828
+ validateMonitorScope(input);
10829
+ requireAtLeastOne(input, ["cluster_names"], "--cluster-names must be a non-empty JSON array.");
10830
+ if (input.status_codes !== void 0) {
10831
+ requireAtLeastOne(input, ["status_codes"], "--status-codes must be a non-empty JSON array.");
10832
+ }
10833
+ }
10834
+ }),
10642
10835
  defineSystemCommand({
10643
10836
  resource: "query-task",
10644
10837
  command: "get",
@@ -10981,6 +11174,89 @@ var commands82 = [
10981
11174
  ];
10982
11175
  var system_default = commands82;
10983
11176
 
11177
+ // src/commands/te-analysis/feedback/submit.ts
11178
+ import { createHash as createHash4, randomUUID as randomUUID2 } from "crypto";
11179
+ var analysisQueryCapabilities = /* @__PURE__ */ new Set([
11180
+ "analysis.adhoc.run",
11181
+ "analysis.adhoc.export",
11182
+ "analysis.report_data.run",
11183
+ "analysis.report_data.export",
11184
+ "analysis.dashboard_report_data.run",
11185
+ "analysis.dashboard_report_data.export",
11186
+ "analysis.bi_panel_page_data.run",
11187
+ "analysis.bi_panel_page_data.export",
11188
+ "analysis.event_detail.run",
11189
+ "analysis.event_detail.export",
11190
+ "analysis.entity_detail.run",
11191
+ "analysis.entity_detail.export",
11192
+ "analysis.query.drilldown_events",
11193
+ "analysis.query.drilldown_events_export",
11194
+ "analysis.query.drilldown_entities",
11195
+ "analysis.query.drilldown_entities_export",
11196
+ "analysis.query.drilldown_user_events",
11197
+ "analysis.query.drilldown_user_events_export",
11198
+ "analysis.query.drilldown_session_details"
11199
+ ]);
11200
+ function analysisFeedbackInput(ctx) {
11201
+ if (!ctx.bool("query-completed")) throw new CliValidationError("Feedback requires a completed data query and final analysis answer.");
11202
+ const queryCapabilityId = ctx.str("query-capability-id");
11203
+ if (!analysisQueryCapabilities.has(queryCapabilityId)) throw new CliValidationError("query-capability-id must identify an executed analysis data query.");
11204
+ const ratings = ["satisfied", "partially_satisfied", "dissatisfied", "unable_to_judge"];
11205
+ const satisfaction = ctx.str("satisfaction");
11206
+ if (!ratings.includes(satisfaction)) throw new CliValidationError("satisfaction must be an explicit user feedback category.");
11207
+ const feedbackText = ctx.str("feedback-text");
11208
+ if (!feedbackText.trim() || feedbackText.length > 2048) throw new CliValidationError("feedback-text must contain original user feedback up to 2048 characters.");
11209
+ const context = readCliAgentContext();
11210
+ if (!context.agent_session_id) throw new CliValidationError("The Agent context file must contain the evaluated agent_session_id.");
11211
+ const turns = ctx.json("target-turn-ids") ?? [];
11212
+ if (!Array.isArray(turns) || turns.length > 32 || turns.some((id) => typeof id !== "string" || !id.trim() || id.length > 191)) {
11213
+ throw new CliValidationError("target-turn-ids must be an array of at most 32 nonblank existing turn IDs.");
11214
+ }
11215
+ if (turns.includes(context.agent_turn_id)) throw new CliValidationError("target-turn-ids must reference analysis turns, not the feedback turn.");
11216
+ const targetTurns = [...new Set(turns)];
11217
+ const suppliedId = ctx.str("feedback-id");
11218
+ const feedbackId = suppliedId || (context.agent_turn_id ? createHash4("sha256").update(JSON.stringify([context.agent_session_id, context.agent_turn_id, targetTurns, queryCapabilityId, satisfaction, feedbackText])).digest("hex") : randomUUID2());
11219
+ if (!feedbackId.trim() || feedbackId.length > 128) throw new CliValidationError("feedback-id must be a nonblank string up to 128 characters.");
11220
+ const routeSummary = ctx.str("route-summary");
11221
+ if (routeSummary.length > 2048) throw new CliValidationError("route-summary must be at most 2048 characters.");
11222
+ const projectId = ctx.optionalNum("project-id");
11223
+ if (projectId !== void 0 && (!Number.isInteger(projectId) || projectId <= 0)) {
11224
+ throw new CliValidationError("project-id must be a positive integer.");
11225
+ }
11226
+ return {
11227
+ feedback_id: feedbackId,
11228
+ agent_session_id: context.agent_session_id,
11229
+ target_turn_ids: targetTurns,
11230
+ query_completed: true,
11231
+ query_capability_id: queryCapabilityId,
11232
+ satisfaction,
11233
+ feedback_text: feedbackText,
11234
+ ...projectId !== void 0 ? { project_id: projectId } : {},
11235
+ ...routeSummary.trim() ? { route_summary: routeSummary } : {}
11236
+ };
11237
+ }
11238
+ var analysisFeedbackSubmit = createAnalysisCapabilityCommand({
11239
+ resource: "feedback",
11240
+ command: "submit",
11241
+ capabilityId: "analysis.feedback.submit",
11242
+ risk: "write",
11243
+ description: "Submit explicit user feedback after a completed analysis data query and final answer. Reuses Agent session and analysis turn IDs; never submits an answer body.",
11244
+ flags: [
11245
+ { name: "query-completed", type: "boolean", desc: "Confirm that query results and the final analysis answer have been delivered." },
11246
+ { name: "query-capability-id", type: "string", required: true, desc: "Executed analysis data-query capability ID in the evaluated turns." },
11247
+ { name: "satisfaction", type: "string", required: true, desc: "Explicit rating: satisfied, partially_satisfied, dissatisfied, or unable_to_judge." },
11248
+ { name: "feedback-text", type: "string", required: true, sensitive: true, desc: "Original user feedback, up to 2048 characters. No answer content." },
11249
+ { name: "target-turn-ids", type: "json", desc: "JSON array of evaluated analysis turn IDs; omit only when unknown." },
11250
+ { name: "route-summary", type: "string", sensitive: true, desc: "Optional brief verifiable route and asset-selection rationale. No answer content." },
11251
+ { name: "feedback-id", type: "string", desc: "Stable feedback ID for retries; defaults to current session/feedback-turn fingerprint when available." },
11252
+ { name: "project-id", type: "number", desc: "Evaluated analysis project ID when available." }
11253
+ ],
11254
+ buildInput: analysisFeedbackInput
11255
+ });
11256
+
11257
+ // src/commands/te-analysis/feedback/index.ts
11258
+ var feedback_default = [analysisFeedbackSubmit];
11259
+
10984
11260
  // src/commands/te-analysis/index.ts
10985
11261
  registerCapabilityGatewayRoute("analysis", { gatewayDomain: "analysis" });
10986
11262
  registerCapabilityGatewayRoute("project", { gatewayDomain: "analysis" });
@@ -11028,7 +11304,8 @@ var baseCommands = [
11028
11304
  ...alert_detail_default,
11029
11305
  ...alert_job_default,
11030
11306
  ...alert_notice_config_default,
11031
- ...system_default
11307
+ ...system_default,
11308
+ ...feedback_default
11032
11309
  ];
11033
11310
  var commands83 = [...baseCommands];
11034
11311
  var te_analysis_default = commands83;
@@ -8,16 +8,16 @@ import {
8
8
  import {
9
9
  SecureStoreAuthError,
10
10
  getCliToken
11
- } from "./chunk-DU72X2IO.js";
11
+ } from "./chunk-GIK6EDUG.js";
12
12
  import {
13
13
  getActiveHost,
14
14
  safeJsonParse
15
- } from "./chunk-IG3DYEIR.js";
15
+ } from "./chunk-UQ77JXYH.js";
16
16
  import {
17
17
  CliValidationError,
18
18
  PermissionError,
19
19
  logger
20
- } from "./chunk-YVGXGTD6.js";
20
+ } from "./chunk-WNGFSIOB.js";
21
21
 
22
22
  // src/core/mcp.ts
23
23
  async function permissionDetails(resp) {
@@ -1,26 +1,26 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  resolveHost
4
- } from "./chunk-N4BLPJC7.js";
4
+ } from "./chunk-7QXISROD.js";
5
5
  import {
6
6
  printError
7
- } from "./chunk-BW7JUDEI.js";
7
+ } from "./chunk-KFNMQTZI.js";
8
8
  import {
9
9
  internalCallSourceHeaders
10
10
  } from "./chunk-Y74WTIKJ.js";
11
11
  import {
12
12
  SecureStoreAuthError,
13
13
  getCliToken
14
- } from "./chunk-DU72X2IO.js";
14
+ } from "./chunk-GIK6EDUG.js";
15
15
  import {
16
16
  safeJsonParse
17
- } from "./chunk-IG3DYEIR.js";
17
+ } from "./chunk-UQ77JXYH.js";
18
18
  import {
19
19
  CliApiError,
20
20
  CliValidationError,
21
21
  PermissionError,
22
22
  logger
23
- } from "./chunk-YVGXGTD6.js";
23
+ } from "./chunk-WNGFSIOB.js";
24
24
 
25
25
  // src/commands/te-dataops/shared.ts
26
26
  import { randomBytes } from "crypto";
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  createCapabilityCommand
4
- } from "./chunk-2FJM4HRV.js";
4
+ } from "./chunk-KAEHZZH4.js";
5
5
  import {
6
6
  CapabilityGatewayError,
7
7
  buildCapabilityGatewayUrl,
8
8
  fetchCapabilityGateway,
9
9
  requestCapabilityGateway,
10
10
  requestCapabilityGatewayWithEnvelope
11
- } from "./chunk-QYXDJOLA.js";
11
+ } from "./chunk-EOYSKMXN.js";
12
12
  import {
13
13
  registerCapabilityGatewayRoute,
14
14
  resolveGatewayDomain
@@ -16,13 +16,13 @@ import {
16
16
  import {
17
17
  printError,
18
18
  withOutputMetadata
19
- } from "./chunk-BW7JUDEI.js";
19
+ } from "./chunk-KFNMQTZI.js";
20
20
  import "./chunk-Y74WTIKJ.js";
21
- import "./chunk-DU72X2IO.js";
22
- import "./chunk-IG3DYEIR.js";
21
+ import "./chunk-GIK6EDUG.js";
22
+ import "./chunk-UQ77JXYH.js";
23
23
  import {
24
24
  CliValidationError
25
- } from "./chunk-YVGXGTD6.js";
25
+ } from "./chunk-WNGFSIOB.js";
26
26
 
27
27
  // src/commands/te-engage/shared.ts
28
28
  function createEngageCapabilityCommand(cliService, config) {
@@ -1,16 +1,16 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  createCapabilityCommand
4
- } from "./chunk-2FJM4HRV.js";
5
- import "./chunk-QYXDJOLA.js";
4
+ } from "./chunk-KAEHZZH4.js";
5
+ import "./chunk-EOYSKMXN.js";
6
6
  import {
7
7
  registerCapabilityGatewayRoute
8
8
  } from "./chunk-KPQY44JQ.js";
9
- import "./chunk-BW7JUDEI.js";
9
+ import "./chunk-KFNMQTZI.js";
10
10
  import "./chunk-Y74WTIKJ.js";
11
- import "./chunk-DU72X2IO.js";
12
- import "./chunk-IG3DYEIR.js";
13
- import "./chunk-YVGXGTD6.js";
11
+ import "./chunk-GIK6EDUG.js";
12
+ import "./chunk-UQ77JXYH.js";
13
+ import "./chunk-WNGFSIOB.js";
14
14
 
15
15
  // src/commands/te-experiment/capability-shared.ts
16
16
  function createExperimentCapabilityCommand(config) {