@thinkingai/ae-cli 6.0.53 → 6.0.55

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-RQBO6MTY.js} +9 -11
  6. package/dist/automation-VAAQBM7Y.js +459 -0
  7. package/dist/{capability-F2RIR5DS.js → capability-JRIFC4AJ.js} +6 -6
  8. package/dist/{chunk-647BRKZK.js → chunk-374V5R6N.js} +3 -3
  9. package/dist/{chunk-KJDOTPYU.js → chunk-3YVEAZUN.js} +59 -26
  10. package/dist/{chunk-KS4DE3MX.js → chunk-5XJYLEVC.js} +4 -4
  11. package/dist/{chunk-BW7JUDEI.js → chunk-6VNIR4AP.js} +514 -213
  12. package/dist/{chunk-5XRQ3CZR.js → chunk-7KU2WNQE.js} +43 -8
  13. package/dist/{chunk-7WZACOAI.js → chunk-AP7YP2NX.js} +2 -2
  14. package/dist/chunk-CI24BDR2.js +43 -0
  15. package/dist/{chunk-SO5LKIWP.js → chunk-CT7QDJS6.js} +2 -2
  16. package/dist/{chunk-DU72X2IO.js → chunk-GHXZK54S.js} +22 -10
  17. package/dist/{chunk-N4BLPJC7.js → chunk-OP44TT4H.js} +1 -1
  18. package/dist/chunk-Q5US7JC5.js +133 -0
  19. package/dist/{chunk-PGCIKZRE.js → chunk-RGYPSEYD.js} +3 -3
  20. package/dist/chunk-RK6GLDGI.js +27 -0
  21. package/dist/chunk-RPBOAQQQ.js +56 -0
  22. package/dist/{chunk-GK7WDY7E.js → chunk-S6M42KND.js} +1 -1
  23. package/dist/{chunk-QYXDJOLA.js → chunk-VZZNLV3I.js} +19 -11
  24. package/dist/{chunk-YVGXGTD6.js → chunk-WNGFSIOB.js} +7 -1
  25. package/dist/{chunk-IG3DYEIR.js → chunk-ZL7SGNIA.js} +5 -3
  26. package/dist/{community-report-client-6VJDDMJJ.js → community-report-client-PEERQCX2.js} +1 -1
  27. package/dist/{config-XQWOPDHN.js → config-SICKWZ2A.js} +8 -8
  28. package/dist/context-NGVFPCBK.js +136 -0
  29. package/dist/{data-integration-XBTCGXQT.js → data-integration-BCLQFTGU.js} +6 -6
  30. package/dist/index.js +125 -48
  31. package/dist/{local-data-upload-client-3P7NIVQ4.js → local-data-upload-client-TWMHFLUA.js} +1 -1
  32. package/dist/memory-CQKH2JAV.js +580 -0
  33. package/dist/{metadata-V5ZDTKWZ.js → metadata-EMFGUI2W.js} +7 -7
  34. package/dist/{model-ZS7HVGKN.js → model-VX5M2CJ6.js} +9 -5
  35. package/dist/{personal-semantic-preference-2XANU3F6.js → personal-semantic-preference-SLWVVYZ4.js} +117 -11
  36. package/dist/{project-semantic-LP3LY7QP.js → project-semantic-DPSZBKQD.js} +6 -6
  37. package/dist/{sync-EQLSTUS7.js → sync-RZIAV37C.js} +12 -8
  38. package/dist/{te-agent-Z3HCTKR7.js → te-agent-AORRE2FM.js} +90 -454
  39. package/dist/{te-analysis-3EVYQ3IO.js → te-analysis-ISXKJKRT.js} +297 -20
  40. package/dist/{te-community-Z7JACGF3.js → te-community-42M7ICDO.js} +3 -3
  41. package/dist/{te-dataops-F7GQOIS6.js → te-dataops-BNKNZ4F2.js} +5 -5
  42. package/dist/{te-engage-LFBU6WWH.js → te-engage-BZE3MBKT.js} +6 -6
  43. package/dist/{te-kb-QJLJEX5K.js → te-kb-ULATOTQ3.js} +494 -214
  44. package/dist/{te-system-IXC43QHZ.js → te-system-UGHVKBVV.js} +10 -9
  45. package/dist/{te-team-BIZIKIHZ.js → te-team-YA6SNOJ3.js} +6 -6
  46. package/dist/things-DTCOQIQB.js +1091 -0
  47. package/dist/{update-W2SGQNKT.js → update-ESNYKUVR.js} +59 -51
  48. package/dist/workspace-JEOHKFPX.js +554 -0
  49. package/package.json +21 -9
  50. package/skills/ae-agent/SKILL.md +91 -139
  51. package/skills/ae-agent/references/add-model.md +1 -1
  52. package/skills/ae-agent/references/create-agent.md +1 -1
  53. package/skills/ae-agent/references/find-archived-conversations.md +12 -5
  54. package/skills/ae-agent/references/get-agent.md +1 -1
  55. package/skills/ae-agent/references/list-agents.md +2 -2
  56. package/skills/ae-agent/references/list-models.md +2 -2
  57. package/skills/ae-agent/references/restore-conversation.md +3 -1
  58. package/skills/ae-analysis/SKILL.md +15 -6
  59. package/skills/ae-analysis/references/ai_models/funnel.md +5 -3
  60. package/skills/ae-analysis/references/ai_models.md +27 -0
  61. package/skills/ae-analysis/references/command_index.md +12 -4
  62. package/skills/ae-analysis/references/dashboard_move.md +21 -0
  63. package/skills/ae-analysis/references/dashboard_report_add.md +2 -0
  64. package/skills/ae-analysis/references/dashboard_report_get.md +19 -0
  65. package/skills/ae-analysis/references/dashboard_report_update.md +27 -0
  66. package/skills/ae-analysis/references/dashboard_update.md +1 -1
  67. package/skills/ae-analysis/references/event_report_presentation.md +76 -0
  68. package/skills/ae-analysis/references/feedback_submit.md +37 -0
  69. package/skills/ae-analysis/references/metadata_resolution.md +15 -0
  70. package/skills/ae-analysis/references/personal_semantic_preference_review.md +9 -0
  71. package/skills/ae-analysis/references/personal_semantic_preference_review_list.md +7 -0
  72. package/skills/ae-analysis/references/personal_semantic_preference_submit.md +7 -0
  73. package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +90 -31
  74. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +99 -1
  75. package/skills/ae-analysis/references/report_create.md +13 -3
  76. package/skills/ae-analysis/references/report_get.md +5 -1
  77. package/skills/ae-analysis/references/report_update.md +15 -4
  78. package/skills/ae-analysis/references/system_query_monitor_overview.md +2 -0
  79. package/skills/ae-analysis/references/system_query_task_cancel.md +2 -0
  80. package/skills/ae-analysis/references/system_query_task_export.md +6 -2
  81. package/skills/ae-analysis/references/system_query_task_get.md +2 -0
  82. package/skills/ae-analysis/references/system_query_task_list.md +7 -3
  83. package/skills/ae-analysis/references/system_query_task_options.md +2 -2
  84. package/skills/ae-analysis/references/system_query_task_realtime_list.md +15 -0
  85. package/skills/ae-analysis/references/user_tag_models.md +2 -0
  86. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-empty-skeleton.mjs +105 -0
  87. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +669 -29
  88. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/company-kb.mjs +21 -8
  89. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-rules.md +28 -10
  90. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +66 -0
  91. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +285 -24
  92. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/package-wiki-source-zip.mjs +262 -30
  93. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/plan-kb-source-sync.mjs +1 -1
  94. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/precompiled-source.mjs +46 -2
  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,12 +7,12 @@ import {
7
7
  waitForAnalysisRun,
8
8
  withAsyncArtifactLifecycle,
9
9
  withInterruptSignal
10
- } from "./chunk-PGCIKZRE.js";
10
+ } from "./chunk-RGYPSEYD.js";
11
11
  import {
12
12
  createCapabilityCommand,
13
13
  definitionIntentSnapshotFlag,
14
14
  modelDefinitionIntentSnapshotFlag
15
- } from "./chunk-647BRKZK.js";
15
+ } from "./chunk-374V5R6N.js";
16
16
  import {
17
17
  registerCapabilityGatewayRoute,
18
18
  resolveGatewayDomain
@@ -23,23 +23,25 @@ import {
23
23
  dryRunCapability,
24
24
  executeCapability,
25
25
  executeCapabilityWithEnvelope,
26
+ readCliAgentContext,
26
27
  requestCapabilityGateway,
27
28
  requestCapabilityGatewayWithEnvelope,
29
+ runWithCliAgentContext,
28
30
  uploadInputFile,
29
31
  validateCapability,
30
32
  validateCapabilityWithEnvelope
31
- } from "./chunk-QYXDJOLA.js";
33
+ } from "./chunk-VZZNLV3I.js";
32
34
  import {
33
35
  withOutputMetadata
34
- } from "./chunk-BW7JUDEI.js";
36
+ } from "./chunk-6VNIR4AP.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-GHXZK54S.js";
41
+ import "./chunk-ZL7SGNIA.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) => ({
@@ -4172,7 +4181,7 @@ var REPORT_WRITE_MODEL_TYPE_VALUES = [
4172
4181
  ];
4173
4182
  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.`;
4174
4183
  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. 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.';
4175
- 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.`;
4184
+ 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.`;
4176
4185
  function aiModelTypeFlag(required) {
4177
4186
  return {
4178
4187
  name: "model-type",
@@ -4263,6 +4272,61 @@ function validateReportMetadataResolutions(ctx) {
4263
4272
  }
4264
4273
  }
4265
4274
 
4275
+ // src/commands/te-analysis/report/presentation.ts
4276
+ var reportPresentationFlag = {
4277
+ name: "presentation",
4278
+ type: "json",
4279
+ required: false,
4280
+ 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.'
4281
+ };
4282
+ function validateReportPresentation(ctx) {
4283
+ if (!(ctx.has?.("presentation") ?? ctx.str("presentation") !== "")) return;
4284
+ const value = ctx.json("presentation");
4285
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
4286
+ throw new Error("--presentation must be a non-empty event-report display object.");
4287
+ }
4288
+ const presentation = value;
4289
+ const keys = Object.keys(presentation);
4290
+ if (keys.length === 0 || keys.some((key) => !["chart_type", "table_layout", "series"].includes(key))) {
4291
+ throw new Error("--presentation accepts only chart_type, table_layout, and series; use semantic names, not raw QP fields.");
4292
+ }
4293
+ if (presentation.chart_type === "table") {
4294
+ throw new Error("A table is a dashboard card display; use analysis dashboard-report update --chart-type table.");
4295
+ }
4296
+ if (Object.hasOwn(presentation, "chart_type") && (typeof presentation.chart_type !== "string" || !["line", "combo", "bar", "stacked", "cumulative", "pie"].includes(presentation.chart_type))) {
4297
+ throw new Error("--presentation.chart_type must be line, combo, bar, stacked, cumulative, or pie.");
4298
+ }
4299
+ if (Object.hasOwn(presentation, "table_layout") && (typeof presentation.table_layout !== "string" || !["date", "event", "group"].includes(presentation.table_layout))) {
4300
+ throw new Error("--presentation.table_layout must be date, event, or group.");
4301
+ }
4302
+ if (ctx.str("model-type") !== "" && ctx.str("model-type") !== "event") {
4303
+ throw new Error("--presentation is supported only for event reports.");
4304
+ }
4305
+ if (Object.hasOwn(presentation, "series")) validateSeries(presentation.series);
4306
+ }
4307
+ function validateSeries(value) {
4308
+ if (!Array.isArray(value)) throw new Error("--presentation.series must be an array; [] resets all series.");
4309
+ const indexes = /* @__PURE__ */ new Set();
4310
+ for (const [position, item] of value.entries()) {
4311
+ const path = `--presentation.series[${position}]`;
4312
+ if (!item || typeof item !== "object" || Array.isArray(item) || Object.keys(item).length !== 3 || Object.keys(item).some((key) => !["metric_index", "type", "axis"].includes(key))) {
4313
+ throw new Error(`${path} requires only metric_index, type, and axis, all three required.`);
4314
+ }
4315
+ const series = item;
4316
+ if (typeof series.metric_index !== "number" || !Number.isInteger(series.metric_index) || series.metric_index < 1) {
4317
+ throw new Error(`${path}.metric_index must be a positive 1-based integer position in definition.metrics.`);
4318
+ }
4319
+ if (indexes.has(series.metric_index)) throw new Error(`${path}.metric_index must not repeat another series binding.`);
4320
+ indexes.add(series.metric_index);
4321
+ if (typeof series.type !== "string" || !["bar", "line"].includes(series.type)) {
4322
+ throw new Error(`${path}.type must be bar or line.`);
4323
+ }
4324
+ if (typeof series.axis !== "string" || !["primary", "secondary"].includes(series.axis)) {
4325
+ throw new Error(`${path}.axis must be primary or secondary.`);
4326
+ }
4327
+ }
4328
+ }
4329
+
4266
4330
  // src/commands/te-analysis/report/create.ts
4267
4331
  var reportCreate = createAnalysisCapabilityCommand({
4268
4332
  resource: "report",
@@ -4274,6 +4338,7 @@ var reportCreate = createAnalysisCapabilityCommand({
4274
4338
  { name: "report-name", type: "string", required: true, desc: "Report display name." },
4275
4339
  reportWriteModelTypeFlag(true),
4276
4340
  reportWriteDefinitionFlag(true),
4341
+ reportPresentationFlag,
4277
4342
  modelDefinitionIntentSnapshotFlag,
4278
4343
  reportMetadataResolutionsFlag,
4279
4344
  { name: "report-desc", type: "string", required: false, desc: "Optional report description." },
@@ -4282,15 +4347,19 @@ var reportCreate = createAnalysisCapabilityCommand({
4282
4347
  { name: "dashboard-ids", type: "json", required: false, desc: "Optional dashboard ID array to associate after creation." }
4283
4348
  ],
4284
4349
  risk: "write",
4285
- validate: validateReportMetadataResolutions,
4350
+ validate: (ctx) => {
4351
+ validateReportMetadataResolutions(ctx);
4352
+ validateReportPresentation(ctx);
4353
+ },
4286
4354
  intentConsistency: { definitionFlag: "definition", modelTypeFlag: "model-type" },
4287
4355
  buildInput: (ctx) => compactInput({
4288
4356
  ...projectInput(ctx),
4289
4357
  report_name: ctx.str("report-name"),
4290
4358
  model_type: ctx.str("model-type"),
4291
4359
  definition: ctx.json("definition"),
4360
+ presentation: optionalJson(ctx, "presentation"),
4292
4361
  resolutions: optionalJson(ctx, "resolutions"),
4293
- report_desc: optionalString(ctx, "report-desc"),
4362
+ report_desc: optionalString(ctx, "report-desc") ?? "",
4294
4363
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
4295
4364
  query_duration_ms: optionalNumber(ctx, "query-duration-ms"),
4296
4365
  dashboard_ids: optionalJsonArray(ctx, "dashboard-ids")
@@ -4301,9 +4370,10 @@ var reportCreate = createAnalysisCapabilityCommand({
4301
4370
  function validateReportUpdate(ctx) {
4302
4371
  const hasDefinition = ctx.str("definition") !== "";
4303
4372
  const hasResolutions = ctx.json("resolutions") !== void 0;
4373
+ const hasPresentation = ctx.has?.("presentation") ?? ctx.str("presentation") !== "";
4304
4374
  const hasMetadataUpdate = ctx.str("report-name") !== "" || optionalStringPreserveEmpty(ctx, "report-desc") !== void 0;
4305
- if (!hasDefinition && !hasMetadataUpdate) {
4306
- throw new Error("At least one of --report-name, --report-desc, or --definition is required.");
4375
+ if (!hasDefinition && !hasMetadataUpdate && !hasPresentation) {
4376
+ throw new Error("At least one of --report-name, --report-desc, --definition, or --presentation is required.");
4307
4377
  }
4308
4378
  if (hasDefinition && ctx.str("model-type") === "") {
4309
4379
  throw new Error("--model-type is required when --definition is provided.");
@@ -4312,12 +4382,13 @@ function validateReportUpdate(ctx) {
4312
4382
  throw new Error("--resolutions requires --definition.");
4313
4383
  }
4314
4384
  validateReportMetadataResolutions(ctx);
4385
+ validateReportPresentation(ctx);
4315
4386
  }
4316
4387
  var reportUpdate = createAnalysisCapabilityCommand({
4317
4388
  resource: "report",
4318
4389
  command: "update",
4319
4390
  capabilityId: "analysis.report.update",
4320
- description: "Update report metadata or AI QP definition through the capability gateway.",
4391
+ description: "Update report metadata, AI QP definition, or event-report presentation through the capability gateway.",
4321
4392
  flags: [
4322
4393
  projectIdFlag,
4323
4394
  { name: "report-id", type: "number", required: true, desc: "Report ID to update." },
@@ -4326,6 +4397,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
4326
4397
  { name: "report-desc", type: "string", required: false, desc: "New report description. Pass an empty string to clear it; omit to preserve it." },
4327
4398
  reportWriteModelTypeFlag(false),
4328
4399
  reportWriteDefinitionFlag(false),
4400
+ reportPresentationFlag,
4329
4401
  modelDefinitionIntentSnapshotFlag,
4330
4402
  reportMetadataResolutionsFlag,
4331
4403
  { name: "cache-seconds", type: "number", required: false, desc: "Optional cache duration in seconds." },
@@ -4342,6 +4414,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
4342
4414
  report_desc: optionalStringPreserveEmpty(ctx, "report-desc"),
4343
4415
  model_type: optionalString(ctx, "model-type"),
4344
4416
  definition: optionalJson(ctx, "definition"),
4417
+ presentation: optionalJson(ctx, "presentation"),
4345
4418
  resolutions: optionalJson(ctx, "resolutions"),
4346
4419
  cache_seconds: optionalNumber(ctx, "cache-seconds"),
4347
4420
  query_duration_ms: optionalNumber(ctx, "query-duration-ms")
@@ -4791,6 +4864,42 @@ var dashboardCopy = createAnalysisCapabilityCommand({
4791
4864
  })
4792
4865
  });
4793
4866
 
4867
+ // src/commands/te-analysis/dashboard/move.ts
4868
+ var dashboardMove = createAnalysisCapabilityCommand({
4869
+ resource: "dashboard",
4870
+ command: "move",
4871
+ capabilityId: "analysis.dashboard.move",
4872
+ description: "Move one or more dashboards to the same project-space root or folder.",
4873
+ flags: [
4874
+ projectIdFlag,
4875
+ {
4876
+ name: "dashboard-ids",
4877
+ type: "json",
4878
+ required: true,
4879
+ desc: "Dashboard ID array. Pass a one-item array to move a single dashboard."
4880
+ },
4881
+ {
4882
+ name: "to-space-id",
4883
+ type: "number",
4884
+ required: true,
4885
+ desc: "Target project space ID."
4886
+ },
4887
+ {
4888
+ name: "to-folder-id",
4889
+ type: "number",
4890
+ required: false,
4891
+ desc: "Target folder ID within the target project space. Omit to move to the space root."
4892
+ }
4893
+ ],
4894
+ risk: "write",
4895
+ buildInput: (ctx) => compactInput({
4896
+ ...projectInput(ctx),
4897
+ dashboard_ids: jsonArray(ctx, "dashboard-ids"),
4898
+ to_space_id: ctx.num("to-space-id"),
4899
+ to_folder_id: optionalNumber(ctx, "to-folder-id")
4900
+ })
4901
+ });
4902
+
4794
4903
  // src/commands/te-analysis/dashboard/freeze.ts
4795
4904
  var dashboardFreeze = createAnalysisCapabilityCommand({
4796
4905
  resource: "dashboard",
@@ -4849,6 +4958,7 @@ var commands19 = [
4849
4958
  dashboardDelete,
4850
4959
  dashboardHandover,
4851
4960
  dashboardCopy,
4961
+ dashboardMove,
4852
4962
  dashboardFreeze,
4853
4963
  dashboardAbnormalGet,
4854
4964
  dashboardTaskStatus
@@ -4874,9 +4984,71 @@ var dashboardReportAdd = createAnalysisCapabilityCommand({
4874
4984
  })
4875
4985
  });
4876
4986
 
4987
+ // src/commands/te-analysis/dashboard-report/get.ts
4988
+ var dashboardReportGet = createAnalysisCapabilityCommand({
4989
+ resource: "dashboard-report",
4990
+ command: "get",
4991
+ capabilityId: "analysis.dashboard_report.get",
4992
+ description: "Get an event report card presentation on one analysis dashboard, not the source report definition.",
4993
+ flags: [
4994
+ projectIdFlag,
4995
+ { name: "dashboard-id", type: "number", required: true, desc: "Dashboard containing the report card." },
4996
+ { name: "report-id", type: "number", required: true, desc: "Existing event report ID on that dashboard." }
4997
+ ],
4998
+ risk: "read",
4999
+ buildInput: (ctx) => ({
5000
+ ...projectInput(ctx),
5001
+ dashboard_id: ctx.num("dashboard-id"),
5002
+ report_id: ctx.num("report-id")
5003
+ })
5004
+ });
5005
+
5006
+ // src/commands/te-analysis/dashboard-report/update.ts
5007
+ var dashboardReportUpdate = createAnalysisCapabilityCommand({
5008
+ resource: "dashboard-report",
5009
+ command: "update",
5010
+ capabilityId: "analysis.dashboard_report.update",
5011
+ description: "Update one event report card presentation without changing the source report definition or other dashboards.",
5012
+ flags: [
5013
+ projectIdFlag,
5014
+ { name: "dashboard-id", type: "number", required: true, desc: "Dashboard containing the report card." },
5015
+ { name: "report-id", type: "number", required: true, desc: "Existing event report ID on that dashboard." },
5016
+ { 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." },
5017
+ { name: "table-layout", type: "string", required: false, desc: "Table layout: date, event, or group. Omit to preserve it." },
5018
+ { 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." }
5019
+ ],
5020
+ risk: "write",
5021
+ validate: (ctx) => {
5022
+ const chartType = optionalString(ctx, "chart-type");
5023
+ const tableLayout = optionalString(ctx, "table-layout");
5024
+ const dateOutside = optionalBoolean(ctx, "date-outside");
5025
+ if (chartType === void 0 && tableLayout === void 0 && dateOutside === void 0) {
5026
+ throw new Error("At least one of --chart-type, --table-layout, or --date-outside is required.");
5027
+ }
5028
+ if (chartType !== void 0 && !["line", "combo", "bar", "stacked", "cumulative", "pie", "table"].includes(chartType)) {
5029
+ throw new Error("--chart-type must be line, combo, bar, stacked, cumulative, pie, or table.");
5030
+ }
5031
+ if (tableLayout !== void 0 && !["date", "event", "group"].includes(tableLayout)) {
5032
+ throw new Error("--table-layout must be date, event, or group.");
5033
+ }
5034
+ },
5035
+ buildInput: (ctx) => ({
5036
+ ...projectInput(ctx),
5037
+ dashboard_id: ctx.num("dashboard-id"),
5038
+ report_id: ctx.num("report-id"),
5039
+ presentation: compactInput({
5040
+ chart_type: optionalString(ctx, "chart-type"),
5041
+ table_layout: optionalString(ctx, "table-layout"),
5042
+ date_outside: optionalBoolean(ctx, "date-outside")
5043
+ })
5044
+ })
5045
+ });
5046
+
4877
5047
  // src/commands/te-analysis/dashboard-report/index.ts
4878
5048
  var commands20 = [
4879
- dashboardReportAdd
5049
+ dashboardReportAdd,
5050
+ dashboardReportGet,
5051
+ dashboardReportUpdate
4880
5052
  ];
4881
5053
  var dashboard_report_default = commands20;
4882
5054
 
@@ -10519,14 +10691,14 @@ var monitorTimeFields = [
10519
10691
  type: "string",
10520
10692
  required: true,
10521
10693
  pattern: "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
10522
- desc: "Inclusive query range start, yyyy-MM-dd HH:mm:ss."
10694
+ desc: "Inclusive completion-time range start, yyyy-MM-dd HH:mm:ss."
10523
10695
  },
10524
10696
  {
10525
10697
  flag: "end-time",
10526
10698
  type: "string",
10527
10699
  required: true,
10528
10700
  pattern: "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
10529
- desc: "Inclusive query range end, yyyy-MM-dd HH:mm:ss."
10701
+ desc: "Inclusive completion-time range end, including the entire second, yyyy-MM-dd HH:mm:ss."
10530
10702
  }
10531
10703
  ];
10532
10704
  function validateTaskQueryInput(input) {
@@ -10590,6 +10762,27 @@ var systemMonitoringCommands = [
10590
10762
  ],
10591
10763
  validate: (_ctx, input) => validateTaskQueryInput(input)
10592
10764
  }),
10765
+ defineSystemCommand({
10766
+ resource: "query-task",
10767
+ command: "realtime-list",
10768
+ capabilityId: "system.query_task.realtime_list",
10769
+ description: "List a bounded realtime query-monitor snapshot; use query-task list for historical logs.",
10770
+ risk: "read",
10771
+ fields: [
10772
+ { flag: "duration-minutes", type: "number", min: 1, max: 30, desc: "Realtime window in minutes. Default: 30." },
10773
+ ...monitorScopeFields,
10774
+ { flag: "cluster-names", type: "json", required: true, array: true, desc: "Query cluster-name JSON array." },
10775
+ { flag: "status-codes", type: "json", array: true, desc: "Optional task status-code JSON array." },
10776
+ { flag: "limit", type: "number", min: 1, max: 200, desc: "Maximum returned tasks. Default: 100, max: 200." }
10777
+ ],
10778
+ validate: (_ctx, input) => {
10779
+ validateMonitorScope(input);
10780
+ requireAtLeastOne(input, ["cluster_names"], "--cluster-names must be a non-empty JSON array.");
10781
+ if (input.status_codes !== void 0) {
10782
+ requireAtLeastOne(input, ["status_codes"], "--status-codes must be a non-empty JSON array.");
10783
+ }
10784
+ }
10785
+ }),
10593
10786
  defineSystemCommand({
10594
10787
  resource: "query-task",
10595
10788
  command: "get",
@@ -10932,6 +11125,89 @@ var commands81 = [
10932
11125
  ];
10933
11126
  var system_default = commands81;
10934
11127
 
11128
+ // src/commands/te-analysis/feedback/submit.ts
11129
+ import { createHash as createHash4, randomUUID as randomUUID2 } from "crypto";
11130
+ var analysisQueryCapabilities = /* @__PURE__ */ new Set([
11131
+ "analysis.adhoc.run",
11132
+ "analysis.adhoc.export",
11133
+ "analysis.report_data.run",
11134
+ "analysis.report_data.export",
11135
+ "analysis.dashboard_report_data.run",
11136
+ "analysis.dashboard_report_data.export",
11137
+ "analysis.bi_panel_page_data.run",
11138
+ "analysis.bi_panel_page_data.export",
11139
+ "analysis.event_detail.run",
11140
+ "analysis.event_detail.export",
11141
+ "analysis.entity_detail.run",
11142
+ "analysis.entity_detail.export",
11143
+ "analysis.query.drilldown_events",
11144
+ "analysis.query.drilldown_events_export",
11145
+ "analysis.query.drilldown_entities",
11146
+ "analysis.query.drilldown_entities_export",
11147
+ "analysis.query.drilldown_user_events",
11148
+ "analysis.query.drilldown_user_events_export",
11149
+ "analysis.query.drilldown_session_details"
11150
+ ]);
11151
+ function analysisFeedbackInput(ctx) {
11152
+ if (!ctx.bool("query-completed")) throw new CliValidationError("Feedback requires a completed data query and final analysis answer.");
11153
+ const queryCapabilityId = ctx.str("query-capability-id");
11154
+ if (!analysisQueryCapabilities.has(queryCapabilityId)) throw new CliValidationError("query-capability-id must identify an executed analysis data query.");
11155
+ const ratings = ["satisfied", "partially_satisfied", "dissatisfied", "unable_to_judge"];
11156
+ const satisfaction = ctx.str("satisfaction");
11157
+ if (!ratings.includes(satisfaction)) throw new CliValidationError("satisfaction must be an explicit user feedback category.");
11158
+ const feedbackText = ctx.str("feedback-text");
11159
+ if (!feedbackText.trim() || feedbackText.length > 2048) throw new CliValidationError("feedback-text must contain original user feedback up to 2048 characters.");
11160
+ const context = readCliAgentContext();
11161
+ if (!context.agent_session_id) throw new CliValidationError("The Agent context file must contain the evaluated agent_session_id.");
11162
+ const turns = ctx.json("target-turn-ids") ?? [];
11163
+ if (!Array.isArray(turns) || turns.length > 32 || turns.some((id) => typeof id !== "string" || !id.trim() || id.length > 191)) {
11164
+ throw new CliValidationError("target-turn-ids must be an array of at most 32 nonblank existing turn IDs.");
11165
+ }
11166
+ if (turns.includes(context.agent_turn_id)) throw new CliValidationError("target-turn-ids must reference analysis turns, not the feedback turn.");
11167
+ const targetTurns = [...new Set(turns)];
11168
+ const suppliedId = ctx.str("feedback-id");
11169
+ 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());
11170
+ if (!feedbackId.trim() || feedbackId.length > 128) throw new CliValidationError("feedback-id must be a nonblank string up to 128 characters.");
11171
+ const routeSummary = ctx.str("route-summary");
11172
+ if (routeSummary.length > 2048) throw new CliValidationError("route-summary must be at most 2048 characters.");
11173
+ const projectId = ctx.optionalNum("project-id");
11174
+ if (projectId !== void 0 && (!Number.isInteger(projectId) || projectId <= 0)) {
11175
+ throw new CliValidationError("project-id must be a positive integer.");
11176
+ }
11177
+ return {
11178
+ feedback_id: feedbackId,
11179
+ agent_session_id: context.agent_session_id,
11180
+ target_turn_ids: targetTurns,
11181
+ query_completed: true,
11182
+ query_capability_id: queryCapabilityId,
11183
+ satisfaction,
11184
+ feedback_text: feedbackText,
11185
+ ...projectId !== void 0 ? { project_id: projectId } : {},
11186
+ ...routeSummary.trim() ? { route_summary: routeSummary } : {}
11187
+ };
11188
+ }
11189
+ var analysisFeedbackSubmit = createAnalysisCapabilityCommand({
11190
+ resource: "feedback",
11191
+ command: "submit",
11192
+ capabilityId: "analysis.feedback.submit",
11193
+ risk: "write",
11194
+ 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.",
11195
+ flags: [
11196
+ { name: "query-completed", type: "boolean", desc: "Confirm that query results and the final analysis answer have been delivered." },
11197
+ { name: "query-capability-id", type: "string", required: true, desc: "Executed analysis data-query capability ID in the evaluated turns." },
11198
+ { name: "satisfaction", type: "string", required: true, desc: "Explicit rating: satisfied, partially_satisfied, dissatisfied, or unable_to_judge." },
11199
+ { name: "feedback-text", type: "string", required: true, sensitive: true, desc: "Original user feedback, up to 2048 characters. No answer content." },
11200
+ { name: "target-turn-ids", type: "json", desc: "JSON array of evaluated analysis turn IDs; omit only when unknown." },
11201
+ { name: "route-summary", type: "string", sensitive: true, desc: "Optional brief verifiable route and asset-selection rationale. No answer content." },
11202
+ { name: "feedback-id", type: "string", desc: "Stable feedback ID for retries; defaults to current session/feedback-turn fingerprint when available." },
11203
+ { name: "project-id", type: "number", desc: "Evaluated analysis project ID when available." }
11204
+ ],
11205
+ buildInput: analysisFeedbackInput
11206
+ });
11207
+
11208
+ // src/commands/te-analysis/feedback/index.ts
11209
+ var feedback_default = [analysisFeedbackSubmit];
11210
+
10935
11211
  // src/commands/te-analysis/index.ts
10936
11212
  registerCapabilityGatewayRoute("analysis", { gatewayDomain: "analysis" });
10937
11213
  registerCapabilityGatewayRoute("project", { gatewayDomain: "analysis" });
@@ -10978,7 +11254,8 @@ var baseCommands = [
10978
11254
  ...alert_detail_default,
10979
11255
  ...alert_job_default,
10980
11256
  ...alert_notice_config_default,
10981
- ...system_default
11257
+ ...system_default,
11258
+ ...feedback_default
10982
11259
  ];
10983
11260
  var commands82 = [...baseCommands];
10984
11261
  var te_analysis_default = commands82;
@@ -8,16 +8,16 @@ import {
8
8
  import {
9
9
  SecureStoreAuthError,
10
10
  getCliToken
11
- } from "./chunk-DU72X2IO.js";
11
+ } from "./chunk-GHXZK54S.js";
12
12
  import {
13
13
  getActiveHost,
14
14
  safeJsonParse
15
- } from "./chunk-IG3DYEIR.js";
15
+ } from "./chunk-ZL7SGNIA.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-OP44TT4H.js";
5
5
  import {
6
6
  printError
7
- } from "./chunk-BW7JUDEI.js";
7
+ } from "./chunk-6VNIR4AP.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-GHXZK54S.js";
15
15
  import {
16
16
  safeJsonParse
17
- } from "./chunk-IG3DYEIR.js";
17
+ } from "./chunk-ZL7SGNIA.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,7 +1,7 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  createCapabilityCommand
4
- } from "./chunk-647BRKZK.js";
4
+ } from "./chunk-374V5R6N.js";
5
5
  import {
6
6
  registerCapabilityGatewayRoute,
7
7
  resolveGatewayDomain
@@ -12,17 +12,17 @@ import {
12
12
  fetchCapabilityGateway,
13
13
  requestCapabilityGateway,
14
14
  requestCapabilityGatewayWithEnvelope
15
- } from "./chunk-QYXDJOLA.js";
15
+ } from "./chunk-VZZNLV3I.js";
16
16
  import {
17
17
  printError,
18
18
  withOutputMetadata
19
- } from "./chunk-BW7JUDEI.js";
19
+ } from "./chunk-6VNIR4AP.js";
20
20
  import "./chunk-Y74WTIKJ.js";
21
- import "./chunk-DU72X2IO.js";
22
- import "./chunk-IG3DYEIR.js";
21
+ import "./chunk-GHXZK54S.js";
22
+ import "./chunk-ZL7SGNIA.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) {