@thinkingai/ae-cli 6.0.55 → 6.0.56

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 (118) hide show
  1. package/README.md +24 -3
  2. package/README.zh.md +24 -3
  3. package/dist/{auth-RQBO6MTY.js → auth-U7MNUUEF.js} +37 -13
  4. package/dist/{automation-VAAQBM7Y.js → automation-K32V2NKP.js} +94 -38
  5. package/dist/{capability-JRIFC4AJ.js → capability-VV7RHB3B.js} +8 -7
  6. package/dist/{chunk-CT7QDJS6.js → chunk-2IYIYSUO.js} +2 -2
  7. package/dist/{chunk-3YVEAZUN.js → chunk-2UWS5CUP.js} +32 -21
  8. package/dist/{chunk-374V5R6N.js → chunk-3TQA5RXE.js} +3 -3
  9. package/dist/{chunk-6VNIR4AP.js → chunk-ELCR235M.js} +26 -19
  10. package/dist/{chunk-7KU2WNQE.js → chunk-F6NIPIT5.js} +7 -6
  11. package/dist/{chunk-RPBOAQQQ.js → chunk-GI5BMEZO.js} +1 -1
  12. package/dist/chunk-JJJIP2XQ.js +105 -0
  13. package/dist/{chunk-5XJYLEVC.js → chunk-KHS64JZQ.js} +4 -4
  14. package/dist/{chunk-ZL7SGNIA.js → chunk-LMCYSVVA.js} +11 -13
  15. package/dist/{chunk-VZZNLV3I.js → chunk-MXV3PYC3.js} +14 -6
  16. package/dist/{chunk-OP44TT4H.js → chunk-P6VFCH3P.js} +4 -2
  17. package/dist/{chunk-GHXZK54S.js → chunk-P7KL7IOH.js} +41 -13
  18. package/dist/{chunk-AP7YP2NX.js → chunk-QSAR3GHY.js} +2 -2
  19. package/dist/{chunk-S6M42KND.js → chunk-T44M3PLZ.js} +1 -1
  20. package/dist/{chunk-Q5US7JC5.js → chunk-UUD5RB36.js} +3 -3
  21. package/dist/{chunk-RGYPSEYD.js → chunk-W2PTY5NN.js} +3 -3
  22. package/dist/chunk-X7DRLE62.js +233 -0
  23. package/dist/{chunk-WNGFSIOB.js → chunk-ZW4VMY5H.js} +103 -6
  24. package/dist/{community-report-client-PEERQCX2.js → community-report-client-S2K3A3Q6.js} +1 -1
  25. package/dist/{config-SICKWZ2A.js → config-ASSAAIOI.js} +10 -9
  26. package/dist/{context-NGVFPCBK.js → context-6RWLVOM5.js} +4 -4
  27. package/dist/{data-integration-BCLQFTGU.js → data-integration-EXSUPUDZ.js} +6 -6
  28. package/dist/evaluation-5YT4QLCL.js +3714 -0
  29. package/dist/index.js +93 -49
  30. package/dist/{local-data-upload-client-TWMHFLUA.js → local-data-upload-client-7HCPGIS3.js} +1 -1
  31. package/dist/{memory-CQKH2JAV.js → memory-VCYLVPMI.js} +6 -6
  32. package/dist/{metadata-EMFGUI2W.js → metadata-TIWIOFTU.js} +8 -8
  33. package/dist/{model-VX5M2CJ6.js → model-DPJHSD73.js} +4 -4
  34. package/dist/{personal-semantic-preference-SLWVVYZ4.js → personal-semantic-preference-SBKU2LOK.js} +6 -6
  35. package/dist/{project-semantic-DPSZBKQD.js → project-semantic-SKNWLH3I.js} +6 -6
  36. package/dist/{sync-RZIAV37C.js → sync-7PP6KQ75.js} +7 -7
  37. package/dist/{te-agent-AORRE2FM.js → te-agent-L2BYNPHM.js} +753 -94
  38. package/dist/{te-analysis-ISXKJKRT.js → te-analysis-RJB6VJC4.js} +411 -79
  39. package/dist/{te-community-42M7ICDO.js → te-community-QN3WMPNT.js} +6 -4
  40. package/dist/{te-dataops-BNKNZ4F2.js → te-dataops-UKD2XN3E.js} +8 -6
  41. package/dist/{te-engage-BZE3MBKT.js → te-engage-KPTN4N2U.js} +6 -6
  42. package/dist/{te-kb-ULATOTQ3.js → te-kb-SFZI3W5T.js} +7 -7
  43. package/dist/{te-system-UGHVKBVV.js → te-system-IE7NCKC3.js} +6 -6
  44. package/dist/{te-team-YA6SNOJ3.js → te-team-4KHCFM2I.js} +63 -41
  45. package/dist/{things-DTCOQIQB.js → things-7JJUVAWL.js} +7 -7
  46. package/dist/{update-ESNYKUVR.js → update-AX66IFMJ.js} +4 -4
  47. package/dist/{workspace-JEOHKFPX.js → workspace-Q5NMEKEN.js} +6 -6
  48. package/package.json +11 -7
  49. package/skills/ae-agent/SKILL.md +20 -3
  50. package/skills/ae-agent/references/command_index.md +8 -0
  51. package/skills/ae-agent/references/resource-package.md +53 -0
  52. package/skills/ae-analysis/SKILL.md +12 -3
  53. package/skills/ae-analysis/references/adhoc_export.md +1 -1
  54. package/skills/ae-analysis/references/agent_review_preflight.md +4 -0
  55. package/skills/ae-analysis/references/agent_review_submit_to_page.md +4 -0
  56. package/skills/ae-analysis/references/ai_models/event.md +58 -2
  57. package/skills/ae-analysis/references/ai_models/rank_list.md +1 -0
  58. package/skills/ae-analysis/references/ai_models/retention.md +2 -0
  59. package/skills/ae-analysis/references/ai_models/revenue.md +2 -0
  60. package/skills/ae-analysis/references/analysis_data_export.md +11 -1
  61. package/skills/ae-analysis/references/asset_batch_info_export.md +2 -2
  62. package/skills/ae-analysis/references/asset_batch_sql_export.md +2 -2
  63. package/skills/ae-analysis/references/asset_export.md +1 -1
  64. package/skills/ae-analysis/references/bi_panel_page_data_export.md +1 -1
  65. package/skills/ae-analysis/references/check_export.md +1 -1
  66. package/skills/ae-analysis/references/command_index.md +34 -25
  67. package/skills/ae-analysis/references/dashboard_report_data_export.md +2 -0
  68. package/skills/ae-analysis/references/dashboard_report_get.md +6 -2
  69. package/skills/ae-analysis/references/dashboard_report_update.md +24 -5
  70. package/skills/ae-analysis/references/feedback_submit.md +1 -1
  71. package/skills/ae-analysis/references/governance_recommendation_export.md +10 -2
  72. package/skills/ae-analysis/references/live_data_export.md +1 -1
  73. package/skills/ae-analysis/references/metric_create.md +29 -0
  74. package/skills/ae-analysis/references/metric_get.md +2 -0
  75. package/skills/ae-analysis/references/metric_update.md +2 -0
  76. package/skills/ae-analysis/references/operation_record_export.md +1 -1
  77. package/skills/ae-analysis/references/plan_change_log_export.md +1 -1
  78. package/skills/ae-analysis/references/plan_export.md +1 -1
  79. package/skills/ae-analysis/references/project_info_get.md +4 -0
  80. package/skills/ae-analysis/references/project_member_group_add_members.md +35 -0
  81. package/skills/ae-analysis/references/project_member_group_create.md +25 -0
  82. package/skills/ae-analysis/references/project_member_group_delete.md +34 -0
  83. package/skills/ae-analysis/references/project_member_group_list.md +29 -0
  84. package/skills/ae-analysis/references/project_member_group_members.md +28 -0
  85. package/skills/ae-analysis/references/project_member_group_remove_members.md +35 -0
  86. package/skills/ae-analysis/references/project_member_group_rename.md +26 -0
  87. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +6 -1
  88. package/skills/ae-analysis/references/report_data_export.md +1 -1
  89. package/skills/ae-analysis/references/scenario_append.md +25 -0
  90. package/skills/ae-analysis/references/scenario_collect.md +35 -0
  91. package/skills/ae-analysis/references/scenario_evaluation.md +30 -0
  92. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +73 -4
  93. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +5 -1
  94. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/execution-contract.mjs +173 -0
  95. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +109 -64
  96. package/skills/ae-automation/SKILL.md +2 -2
  97. package/skills/ae-automation/references/cli.md +18 -1
  98. package/skills/ae-capability/SKILL.md +7 -3
  99. package/skills/ae-evaluation/SKILL.md +83 -0
  100. package/skills/ae-evaluation/references/access-and-members.md +55 -0
  101. package/skills/ae-evaluation/references/connections.md +78 -0
  102. package/skills/ae-evaluation/references/datasets.md +57 -0
  103. package/skills/ae-evaluation/references/evaluators.md +81 -0
  104. package/skills/ae-evaluation/references/files.md +33 -0
  105. package/skills/ae-evaluation/references/integrations.md +39 -0
  106. package/skills/ae-evaluation/references/runs.md +160 -0
  107. package/skills/ae-evaluation/references/schedules.md +31 -0
  108. package/skills/ae-metadata/SKILL.md +2 -1
  109. package/skills/ae-metadata/references/metadata_data_table_download.md +7 -1
  110. package/skills/ae-metadata/references/metadata_data_table_get.md +2 -0
  111. package/skills/ae-team/SKILL.md +2 -2
  112. package/skills/ae-team/references/run-start.md +1 -0
  113. package/skills/ae-team/references/run-watch.md +7 -5
  114. package/skills/ae-things/SKILL.md +53 -51
  115. package/skills/ae-things/references/cli.md +56 -54
  116. package/skills/ae-things-progress/SKILL.md +20 -20
  117. package/skills/ae-things-review/SKILL.md +19 -19
  118. package/dist/chunk-CI24BDR2.js +0 -43
@@ -7,12 +7,12 @@ import {
7
7
  waitForAnalysisRun,
8
8
  withAsyncArtifactLifecycle,
9
9
  withInterruptSignal
10
- } from "./chunk-RGYPSEYD.js";
10
+ } from "./chunk-W2PTY5NN.js";
11
11
  import {
12
12
  createCapabilityCommand,
13
13
  definitionIntentSnapshotFlag,
14
14
  modelDefinitionIntentSnapshotFlag
15
- } from "./chunk-374V5R6N.js";
15
+ } from "./chunk-3TQA5RXE.js";
16
16
  import {
17
17
  registerCapabilityGatewayRoute,
18
18
  resolveGatewayDomain
@@ -30,18 +30,18 @@ import {
30
30
  uploadInputFile,
31
31
  validateCapability,
32
32
  validateCapabilityWithEnvelope
33
- } from "./chunk-VZZNLV3I.js";
33
+ } from "./chunk-MXV3PYC3.js";
34
34
  import {
35
35
  withOutputMetadata
36
- } from "./chunk-6VNIR4AP.js";
36
+ } from "./chunk-ELCR235M.js";
37
37
  import "./chunk-Y74WTIKJ.js";
38
38
  import {
39
39
  getCliToken
40
- } from "./chunk-GHXZK54S.js";
41
- import "./chunk-ZL7SGNIA.js";
40
+ } from "./chunk-P7KL7IOH.js";
41
+ import "./chunk-LMCYSVVA.js";
42
42
  import {
43
43
  CliValidationError
44
- } from "./chunk-WNGFSIOB.js";
44
+ } from "./chunk-ZW4VMY5H.js";
45
45
 
46
46
  // src/commands/te-analysis/capability-shared.ts
47
47
  var ANALYSIS_GATEWAY_CLI_SERVICES = /* @__PURE__ */ new Set(["project", "system"]);
@@ -229,7 +229,7 @@ var asyncTimeoutSecondsFlag = {
229
229
  name: "timeout-seconds",
230
230
  type: "number",
231
231
  required: false,
232
- desc: "Async runtime in seconds. Default and max: 21600 (6 hours); cancel earlier with analysis query cancel --run-id <run_id>.",
232
+ desc: "Async runtime in seconds. Omit to use the server default (usually 21600 / 6 hours). This CLI accepts explicit values up to 21600; inspect the capability for the server default/max and use capability run for larger allowed values. Cancel with analysis query cancel --run-id <run_id>.",
233
233
  min: 1,
234
234
  max: 21600
235
235
  };
@@ -1647,7 +1647,7 @@ var recordIdFlag = { name: "record-id", type: "number", required: false, desc: "
1647
1647
  var governanceExportFlags = (format) => [
1648
1648
  requestIdFlag,
1649
1649
  { ...artifactFormatFlag, desc: `Artifact format: ${format}. This capability supports only ${format}.` },
1650
- { ...asyncTimeoutSecondsFlag, max: 7200, desc: "Async export runtime in seconds. Default: 3600, max: 7200." }
1650
+ { ...asyncTimeoutSecondsFlag, max: 7200, desc: "Async export runtime in seconds. Omit to use the server-provided default. This CLI accepts explicit values up to 7200; inspect the capability for the server default/max and use capability run for larger allowed values." }
1651
1651
  ];
1652
1652
  var governanceExportFields = ["request_id", "format", "timeout_seconds"];
1653
1653
  var readers = {
@@ -3098,6 +3098,7 @@ var SUBMIT_TO_PAGE_HELP = [
3098
3098
  "- Scripts may assemble transport JSON and copy evidence, but page-visible ai_summary and analysis_explanation text must be Agent-written interpretation from verified evidence, not generated boilerplate.",
3099
3099
  "- Follow agent_review_preflight.md: independent Agent review, at most 3 corrections, then submit with unresolved-quality warnings only when already authorized. LOCAL_ONLY never submits. Business meaning and visible-text quality are Agent review responsibilities; this command enforces only transport structure and evidence references.",
3100
3100
  "- Follow agent_review_priorities_comparisons.md: item ai_summary includes recommendation.priority/priority_reason/evidence_refs, classified comparisons with both-side evidence, and comparison_review coverage. LOW is review urgency, not a defer decision; only POSSIBLE_CONFLICT merits a conflict badge. These assessments share the same 3-correction budget.",
3101
+ "- Each new topic must include semantic_basis with business_question, grouping_reason, and evidence_item_ids from that topic. These are Agent-authored business interpretations; legacy packets without this optional field remain accepted.",
3101
3102
  "- presentation_snapshot.topics is one or more business-domain topics. Each topic must use groups[].items; do not use top-level topics[].items or raw Common work_units as the page grouping.",
3102
3103
  "- relations should let the page render dashboard -> report -> metadata with contains/uses edges. Use an empty relations array only when the package truly has no known parent-child evidence.",
3103
3104
  "- Each submitted item must keep source_link or evidence_links[].url so reviewers can jump to source evidence.",
@@ -3332,6 +3333,7 @@ function validatePresentation(presentation, itemIds) {
3332
3333
  const displayed = /* @__PURE__ */ new Set();
3333
3334
  for (const topicValue of array2(presentation.topics, "presentation_snapshot.topics")) {
3334
3335
  const topic = object(topicValue, "presentation_snapshot.topics[]");
3336
+ const topicItemIds = /* @__PURE__ */ new Set();
3335
3337
  if ("items" in topic) {
3336
3338
  throw new Error("presentation_snapshot.topics[] must use groups[].items, not top-level items.");
3337
3339
  }
@@ -3349,6 +3351,19 @@ function validatePresentation(presentation, itemIds) {
3349
3351
  throw new Error("presentation_snapshot references an unknown client_item_id.");
3350
3352
  }
3351
3353
  displayed.add(item.id);
3354
+ topicItemIds.add(item.id);
3355
+ }
3356
+ }
3357
+ if (topic.semantic_basis !== void 0) {
3358
+ const basis = object(topic.semantic_basis, "presentation_snapshot.topics[].semantic_basis");
3359
+ for (const field of ["business_question", "grouping_reason"]) {
3360
+ if (typeof basis[field] !== "string" || !String(basis[field]).trim()) {
3361
+ throw new Error(`semantic_basis.${field} must explain the business meaning of this topic.`);
3362
+ }
3363
+ }
3364
+ const references = array2(basis.evidence_item_ids, "semantic_basis.evidence_item_ids");
3365
+ if (!references.length || references.some((id) => typeof id !== "string" || !topicItemIds.has(id))) {
3366
+ throw new Error("semantic_basis.evidence_item_ids must reference items displayed in the same topic.");
3352
3367
  }
3353
3368
  }
3354
3369
  }
@@ -4989,11 +5004,11 @@ var dashboardReportGet = createAnalysisCapabilityCommand({
4989
5004
  resource: "dashboard-report",
4990
5005
  command: "get",
4991
5006
  capabilityId: "analysis.dashboard_report.get",
4992
- description: "Get an event report card presentation on one analysis dashboard, not the source report definition.",
5007
+ description: "Get one analysis-board report card frame size, saved grid position, dashboard layout version, and event presentation; not the source report definition.",
4993
5008
  flags: [
4994
5009
  projectIdFlag,
4995
5010
  { 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." }
5011
+ { name: "report-id", type: "number", required: true, desc: "Existing report ID on that dashboard. Event cards also return chart and table presentation." }
4997
5012
  ],
4998
5013
  risk: "read",
4999
5014
  buildInput: (ctx) => ({
@@ -5008,11 +5023,15 @@ var dashboardReportUpdate = createAnalysisCapabilityCommand({
5008
5023
  resource: "dashboard-report",
5009
5024
  command: "update",
5010
5025
  capabilityId: "analysis.dashboard_report.update",
5011
- description: "Update one event report card presentation without changing the source report definition or other dashboards.",
5026
+ description: "Update one analysis-board report card frame size or grid position, or an event card presentation, without changing its source definition or other dashboards.",
5012
5027
  flags: [
5013
5028
  projectIdFlag,
5014
5029
  { 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." },
5030
+ { name: "report-id", type: "number", required: true, desc: "Existing report ID on that dashboard. Chart and table settings require an event report." },
5031
+ { name: "frame-size", type: "string", required: false, desc: "Card frame size: medium or large. Omit to preserve. Requires the current --reports-version from dashboard-report get." },
5032
+ { name: "position-x", type: "number", required: false, desc: "Zero-based horizontal grid coordinate, 0..19 on a 20-column board. Supply with --position-y and --reports-version. Must fit the saved card width; occupied destinations are rejected." },
5033
+ { name: "position-y", type: "number", required: false, desc: "Zero-based vertical grid coordinate, 0..10000, not pixels. Supply with --position-x and --reports-version. Requires an initialized saved board layout; the page may vertically compact gaps." },
5034
+ { name: "reports-version", type: "number", required: false, desc: "Fresh dashboard layout version from dashboard-report get. Required for frame-size or position changes; stale versions are rejected without partial writes. This is not the source report version." },
5016
5035
  { 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
5036
  { name: "table-layout", type: "string", required: false, desc: "Table layout: date, event, or group. Omit to preserve it." },
5018
5037
  { 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." }
@@ -5022,8 +5041,35 @@ var dashboardReportUpdate = createAnalysisCapabilityCommand({
5022
5041
  const chartType = optionalString(ctx, "chart-type");
5023
5042
  const tableLayout = optionalString(ctx, "table-layout");
5024
5043
  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.");
5044
+ const frameSize = optionalString(ctx, "frame-size");
5045
+ const x = optionalNumber(ctx, "position-x");
5046
+ const y = optionalNumber(ctx, "position-y");
5047
+ const version = optionalNumber(ctx, "reports-version");
5048
+ if (frameSize !== void 0 && !["medium", "large"].includes(frameSize)) {
5049
+ throw new Error("--frame-size must be medium or large.");
5050
+ }
5051
+ if (x === void 0 !== (y === void 0)) {
5052
+ throw new Error("--position-x and --position-y must be supplied together.");
5053
+ }
5054
+ for (const [name, value] of [["position-x", x], ["position-y", y], ["reports-version", version]]) {
5055
+ if (value !== void 0 && (!Number.isSafeInteger(value) || value < 0)) {
5056
+ throw new Error(`--${name} must be a non-negative safe integer.`);
5057
+ }
5058
+ }
5059
+ if (x !== void 0 && x >= 20) {
5060
+ throw new Error("--position-x must be between 0 and 19 and fit the saved card width.");
5061
+ }
5062
+ if (y !== void 0 && y > 1e4) {
5063
+ throw new Error("--position-y must be between 0 and 10000.");
5064
+ }
5065
+ if (version === Number.MAX_SAFE_INTEGER) {
5066
+ throw new Error("--reports-version must be safely incrementable; reread the dashboard version.");
5067
+ }
5068
+ if ((frameSize !== void 0 || x !== void 0) && version === void 0) {
5069
+ throw new Error("--reports-version from dashboard-report get is required for frame-size or position changes.");
5070
+ }
5071
+ if (chartType === void 0 && tableLayout === void 0 && dateOutside === void 0 && frameSize === void 0 && x === void 0) {
5072
+ throw new Error("At least one of --chart-type, --table-layout, --date-outside, --frame-size, or --position-x/--position-y is required.");
5027
5073
  }
5028
5074
  if (chartType !== void 0 && !["line", "combo", "bar", "stacked", "cumulative", "pie", "table"].includes(chartType)) {
5029
5075
  throw new Error("--chart-type must be line, combo, bar, stacked, cumulative, pie, or table.");
@@ -5032,16 +5078,23 @@ var dashboardReportUpdate = createAnalysisCapabilityCommand({
5032
5078
  throw new Error("--table-layout must be date, event, or group.");
5033
5079
  }
5034
5080
  },
5035
- buildInput: (ctx) => ({
5036
- ...projectInput(ctx),
5037
- dashboard_id: ctx.num("dashboard-id"),
5038
- report_id: ctx.num("report-id"),
5039
- presentation: compactInput({
5081
+ buildInput: (ctx) => {
5082
+ const presentation = compactInput({
5040
5083
  chart_type: optionalString(ctx, "chart-type"),
5041
5084
  table_layout: optionalString(ctx, "table-layout"),
5042
5085
  date_outside: optionalBoolean(ctx, "date-outside")
5043
- })
5044
- })
5086
+ });
5087
+ const x = optionalNumber(ctx, "position-x");
5088
+ return compactInput({
5089
+ ...projectInput(ctx),
5090
+ dashboard_id: ctx.num("dashboard-id"),
5091
+ report_id: ctx.num("report-id"),
5092
+ frame_size: optionalString(ctx, "frame-size"),
5093
+ position: x === void 0 ? void 0 : { x, y: optionalNumber(ctx, "position-y") },
5094
+ reports_version: optionalNumber(ctx, "reports-version"),
5095
+ presentation: Object.keys(presentation).length === 0 ? void 0 : presentation
5096
+ });
5097
+ }
5045
5098
  });
5046
5099
 
5047
5100
  // src/commands/te-analysis/dashboard-report/index.ts
@@ -8278,6 +8331,165 @@ var commands54 = [
8278
8331
  ];
8279
8332
  var member_candidate_default = commands54;
8280
8333
 
8334
+ // src/commands/te-analysis/project/member-group/shared.ts
8335
+ var MAX_ID = 2147483647;
8336
+ var memberGroupProjectIdFlag = { ...projectIdFlag, min: 1, max: MAX_ID };
8337
+ var memberGroupIdFlag = {
8338
+ name: "group-id",
8339
+ type: "number",
8340
+ required: true,
8341
+ min: 1,
8342
+ max: MAX_ID,
8343
+ desc: "Project member-group ID from project member-group list."
8344
+ };
8345
+ var memberGroupNameFlag = {
8346
+ name: "group-name",
8347
+ type: "string",
8348
+ required: true,
8349
+ desc: "Member-group name, from 1 to 80 characters."
8350
+ };
8351
+ var memberGroupUserIdsFlag = {
8352
+ name: "user-ids",
8353
+ type: "json",
8354
+ required: true,
8355
+ desc: "JSON array of 1 to 1000 positive user IDs. Verify IDs with project member list or member-group members. Changes only these group memberships."
8356
+ };
8357
+ var memberGroupPaginationFlags = [
8358
+ { name: "limit", type: "number", min: 1, max: 1e3, desc: "Page size, from 1 to 1000. Default: 100." },
8359
+ { name: "offset", type: "number", min: 0, desc: "Zero-based row offset. Default: 0." }
8360
+ ];
8361
+ function integer(ctx, flag, min, max = MAX_ID) {
8362
+ const value = ctx.num(flag);
8363
+ if (!Number.isSafeInteger(value) || value < min || value > max) {
8364
+ throw new CliValidationError(`--${flag} must be an integer between ${min} and ${max}.`);
8365
+ }
8366
+ return value;
8367
+ }
8368
+ function memberGroupProjectInput(ctx) {
8369
+ return { project_id: integer(ctx, "project-id", 1) };
8370
+ }
8371
+ function memberGroupInput(ctx) {
8372
+ return { ...memberGroupProjectInput(ctx), group_id: integer(ctx, "group-id", 1) };
8373
+ }
8374
+ function memberGroupPaginationInput(ctx) {
8375
+ return {
8376
+ ...ctx.str("limit") ? { limit: integer(ctx, "limit", 1, 1e3) } : {},
8377
+ ...ctx.str("offset") ? { offset: integer(ctx, "offset", 0) } : {}
8378
+ };
8379
+ }
8380
+ function memberGroupNameInput(ctx) {
8381
+ const name = ctx.str("group-name");
8382
+ if (!name.trim() || name.length > 80) {
8383
+ throw new CliValidationError("--group-name must contain 1 to 80 characters and must not be blank.");
8384
+ }
8385
+ return { group_name: name };
8386
+ }
8387
+ function memberGroupChangeInput(ctx) {
8388
+ const input = memberGroupInput(ctx);
8389
+ let userIds;
8390
+ try {
8391
+ userIds = ctx.json("user-ids");
8392
+ } catch {
8393
+ throw new CliValidationError("--user-ids must be a JSON array of positive user IDs.");
8394
+ }
8395
+ if (!Array.isArray(userIds) || userIds.length === 0 || userIds.length > 1e3 || userIds.some((id) => !Number.isSafeInteger(id) || id < 1 || id > MAX_ID)) {
8396
+ throw new CliValidationError("--user-ids must contain 1 to 1000 positive integer user IDs.");
8397
+ }
8398
+ return { ...input, user_ids: userIds, yes: true };
8399
+ }
8400
+
8401
+ // src/commands/te-analysis/project/member-group/add-members.ts
8402
+ var projectMemberGroupAddMembers = createAnalysisCapabilityCommand({
8403
+ resource: "project member-group",
8404
+ command: "add-members",
8405
+ capabilityId: "project.member_group.add_members",
8406
+ description: "Add existing project members to a member group while preserving its other members and settings.",
8407
+ helpText: "Group membership can grant access to shared assets. Discover user IDs with project member list and review --dry-run before confirming with --yes.",
8408
+ flags: [memberGroupProjectIdFlag, memberGroupIdFlag, memberGroupUserIdsFlag],
8409
+ risk: "high-risk-write",
8410
+ buildInput: memberGroupChangeInput
8411
+ });
8412
+
8413
+ // src/commands/te-analysis/project/member-group/create.ts
8414
+ var projectMemberGroupCreate = createAnalysisCapabilityCommand({
8415
+ resource: "project member-group",
8416
+ command: "create",
8417
+ capabilityId: "project.member_group.create",
8418
+ description: "Create an empty project member group without automatic enrollment of new project members.",
8419
+ flags: [memberGroupProjectIdFlag, memberGroupNameFlag],
8420
+ risk: "write",
8421
+ buildInput: (ctx) => ({ ...memberGroupProjectInput(ctx), ...memberGroupNameInput(ctx) })
8422
+ });
8423
+
8424
+ // src/commands/te-analysis/project/member-group/delete.ts
8425
+ var projectMemberGroupDelete = createAnalysisCapabilityCommand({
8426
+ resource: "project member-group",
8427
+ command: "delete",
8428
+ capabilityId: "project.member_group.delete",
8429
+ description: "Delete a project member group while retaining its company and project members.",
8430
+ helpText: "Deleting a member group can revoke access to shared assets. Review --dry-run before confirming with --yes.",
8431
+ flags: [memberGroupProjectIdFlag, memberGroupIdFlag],
8432
+ risk: "high-risk-write",
8433
+ buildInput: (ctx) => ({ ...memberGroupInput(ctx), yes: true })
8434
+ });
8435
+
8436
+ // src/commands/te-analysis/project/member-group/list.ts
8437
+ var projectMemberGroupList = createAnalysisCapabilityCommand({
8438
+ resource: "project member-group",
8439
+ command: "list",
8440
+ capabilityId: "project.member_group.list",
8441
+ description: "List project member groups, their default-join settings, and member counts.",
8442
+ flags: [memberGroupProjectIdFlag, ...memberGroupPaginationFlags],
8443
+ risk: "read",
8444
+ buildInput: (ctx) => ({ ...memberGroupProjectInput(ctx), ...memberGroupPaginationInput(ctx) })
8445
+ });
8446
+
8447
+ // src/commands/te-analysis/project/member-group/members.ts
8448
+ var projectMemberGroupMembers = createAnalysisCapabilityCommand({
8449
+ resource: "project member-group",
8450
+ command: "members",
8451
+ capabilityId: "project.member_group.members",
8452
+ description: "List members of one project member group with pagination.",
8453
+ flags: [memberGroupProjectIdFlag, memberGroupIdFlag, ...memberGroupPaginationFlags],
8454
+ risk: "read",
8455
+ buildInput: (ctx) => ({ ...memberGroupInput(ctx), ...memberGroupPaginationInput(ctx) })
8456
+ });
8457
+
8458
+ // src/commands/te-analysis/project/member-group/remove-members.ts
8459
+ var projectMemberGroupRemoveMembers = createAnalysisCapabilityCommand({
8460
+ resource: "project member-group",
8461
+ command: "remove-members",
8462
+ capabilityId: "project.member_group.remove_members",
8463
+ description: "Remove selected members from a member group while preserving its other members and settings.",
8464
+ helpText: "Group membership can grant access to shared assets. This removes group memberships only; project and company accounts are retained. Review --dry-run before confirming with --yes.",
8465
+ flags: [memberGroupProjectIdFlag, memberGroupIdFlag, memberGroupUserIdsFlag],
8466
+ risk: "high-risk-write",
8467
+ buildInput: memberGroupChangeInput
8468
+ });
8469
+
8470
+ // src/commands/te-analysis/project/member-group/rename.ts
8471
+ var projectMemberGroupRename = createAnalysisCapabilityCommand({
8472
+ resource: "project member-group",
8473
+ command: "rename",
8474
+ capabilityId: "project.member_group.rename",
8475
+ description: "Rename a project member group while preserving all members and default-join settings.",
8476
+ flags: [memberGroupProjectIdFlag, memberGroupIdFlag, memberGroupNameFlag],
8477
+ risk: "write",
8478
+ buildInput: (ctx) => ({ ...memberGroupInput(ctx), ...memberGroupNameInput(ctx) })
8479
+ });
8480
+
8481
+ // src/commands/te-analysis/project/member-group/index.ts
8482
+ var commands55 = [
8483
+ projectMemberGroupAddMembers,
8484
+ projectMemberGroupCreate,
8485
+ projectMemberGroupDelete,
8486
+ projectMemberGroupList,
8487
+ projectMemberGroupMembers,
8488
+ projectMemberGroupRemoveMembers,
8489
+ projectMemberGroupRename
8490
+ ];
8491
+ var member_group_default = commands55;
8492
+
8281
8493
  // src/commands/te-analysis/project/member-handover/export.ts
8282
8494
  var projectMemberHandoverExport = createAnalysisCapabilityCommand({
8283
8495
  resource: "project member-handover",
@@ -8317,11 +8529,11 @@ var projectMemberHandoverRun = createAnalysisCapabilityCommand({
8317
8529
  });
8318
8530
 
8319
8531
  // src/commands/te-analysis/project/member-handover/index.ts
8320
- var commands55 = [
8532
+ var commands56 = [
8321
8533
  projectMemberHandoverExport,
8322
8534
  projectMemberHandoverRun
8323
8535
  ];
8324
- var member_handover_default = commands55;
8536
+ var member_handover_default = commands56;
8325
8537
 
8326
8538
  // src/commands/te-analysis/project/member-receiver/list.ts
8327
8539
  var projectMemberReceiverList = createAnalysisCapabilityCommand({
@@ -8339,10 +8551,10 @@ var projectMemberReceiverList = createAnalysisCapabilityCommand({
8339
8551
  });
8340
8552
 
8341
8553
  // src/commands/te-analysis/project/member-receiver/index.ts
8342
- var commands56 = [
8554
+ var commands57 = [
8343
8555
  projectMemberReceiverList
8344
8556
  ];
8345
- var member_receiver_default = commands56;
8557
+ var member_receiver_default = commands57;
8346
8558
 
8347
8559
  // src/commands/te-analysis/project/owner/update.ts
8348
8560
  var projectOwnerUpdate = createAnalysisCapabilityCommand({
@@ -8368,10 +8580,10 @@ var projectOwnerUpdate = createAnalysisCapabilityCommand({
8368
8580
  });
8369
8581
 
8370
8582
  // src/commands/te-analysis/project/owner/index.ts
8371
- var commands57 = [
8583
+ var commands58 = [
8372
8584
  projectOwnerUpdate
8373
8585
  ];
8374
- var owner_default = commands57;
8586
+ var owner_default = commands58;
8375
8587
 
8376
8588
  // src/commands/te-analysis/project/permission-binding/list.ts
8377
8589
  var projectPermissionBindingList = createAnalysisCapabilityCommand({
@@ -8393,10 +8605,10 @@ var projectPermissionBindingList = createAnalysisCapabilityCommand({
8393
8605
  });
8394
8606
 
8395
8607
  // src/commands/te-analysis/project/permission-binding/index.ts
8396
- var commands58 = [
8608
+ var commands59 = [
8397
8609
  projectPermissionBindingList
8398
8610
  ];
8399
- var permission_binding_default = commands58;
8611
+ var permission_binding_default = commands59;
8400
8612
 
8401
8613
  // src/commands/te-analysis/project/receive-status/update.ts
8402
8614
  var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
@@ -8417,10 +8629,10 @@ var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
8417
8629
  });
8418
8630
 
8419
8631
  // src/commands/te-analysis/project/receive-status/index.ts
8420
- var commands59 = [
8632
+ var commands60 = [
8421
8633
  projectReceiveStatusUpdate
8422
8634
  ];
8423
- var receive_status_default = commands59;
8635
+ var receive_status_default = commands60;
8424
8636
 
8425
8637
  // src/commands/te-analysis/project/role/delete.ts
8426
8638
  var projectRoleDelete = createAnalysisCapabilityCommand({
@@ -8512,13 +8724,13 @@ var projectRoleUpsert = createAnalysisCapabilityCommand({
8512
8724
  });
8513
8725
 
8514
8726
  // src/commands/te-analysis/project/role/index.ts
8515
- var commands60 = [
8727
+ var commands61 = [
8516
8728
  projectRoleDelete,
8517
8729
  projectRoleGet,
8518
8730
  projectRoleList,
8519
8731
  projectRoleUpsert
8520
8732
  ];
8521
- var role_default = commands60;
8733
+ var role_default = commands61;
8522
8734
 
8523
8735
  // src/commands/te-analysis/project/role-function/list.ts
8524
8736
  var projectRoleFunctionList = createAnalysisCapabilityCommand({
@@ -8544,10 +8756,10 @@ var projectRoleFunctionList = createAnalysisCapabilityCommand({
8544
8756
  });
8545
8757
 
8546
8758
  // src/commands/te-analysis/project/role-function/index.ts
8547
- var commands61 = [
8759
+ var commands62 = [
8548
8760
  projectRoleFunctionList
8549
8761
  ];
8550
- var role_function_default = commands61;
8762
+ var role_function_default = commands62;
8551
8763
 
8552
8764
  // src/commands/te-analysis/project/role-user/list.ts
8553
8765
  var projectRoleUserList = createAnalysisCapabilityCommand({
@@ -8567,10 +8779,10 @@ var projectRoleUserList = createAnalysisCapabilityCommand({
8567
8779
  });
8568
8780
 
8569
8781
  // src/commands/te-analysis/project/role-user/index.ts
8570
- var commands62 = [
8782
+ var commands63 = [
8571
8783
  projectRoleUserList
8572
8784
  ];
8573
- var role_user_default = commands62;
8785
+ var role_user_default = commands63;
8574
8786
 
8575
8787
  // src/commands/te-analysis/project/timezone/get.ts
8576
8788
  var projectTimezoneGet = createAnalysisCapabilityCommand({
@@ -8708,12 +8920,12 @@ function isObject(value) {
8708
8920
  }
8709
8921
 
8710
8922
  // src/commands/te-analysis/project/timezone/index.ts
8711
- var commands63 = [
8923
+ var commands64 = [
8712
8924
  projectTimezoneGet,
8713
8925
  projectTimezoneOverview,
8714
8926
  projectTimezoneUpdate
8715
8927
  ];
8716
- var timezone_default = commands63;
8928
+ var timezone_default = commands64;
8717
8929
 
8718
8930
  // src/commands/te-analysis/project/user-id-items/update.ts
8719
8931
  var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
@@ -8733,13 +8945,13 @@ var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
8733
8945
  });
8734
8946
 
8735
8947
  // src/commands/te-analysis/project/user-id-items/index.ts
8736
- var commands64 = [
8948
+ var commands65 = [
8737
8949
  projectUserIdItemsUpdate
8738
8950
  ];
8739
- var user_id_items_default = commands64;
8951
+ var user_id_items_default = commands65;
8740
8952
 
8741
8953
  // src/commands/te-analysis/project/index.ts
8742
- var commands65 = [
8954
+ var commands66 = [
8743
8955
  ...access_detail_default,
8744
8956
  ...data_power_default,
8745
8957
  ...entity_default2,
@@ -8749,6 +8961,7 @@ var commands65 = [
8749
8961
  ...mark_time_default,
8750
8962
  ...member_default,
8751
8963
  ...member_candidate_default,
8964
+ ...member_group_default,
8752
8965
  ...member_handover_default,
8753
8966
  ...member_receiver_default,
8754
8967
  ...owner_default,
@@ -8760,7 +8973,7 @@ var commands65 = [
8760
8973
  ...timezone_default,
8761
8974
  ...user_id_items_default
8762
8975
  ];
8763
- var project_default = commands65;
8976
+ var project_default = commands66;
8764
8977
 
8765
8978
  // src/commands/te-analysis/tracking/shared.ts
8766
8979
  function createTrackingCapabilityCommand(config) {
@@ -9491,7 +9704,7 @@ function counts(plan, value) {
9491
9704
  }
9492
9705
 
9493
9706
  // src/commands/te-analysis/tracking/plan/index.ts
9494
- var commands66 = [
9707
+ var commands67 = [
9495
9708
  trackingPlanGet,
9496
9709
  trackingPlanSaveItems,
9497
9710
  trackingPlanDeleteItems,
@@ -9501,7 +9714,7 @@ var commands66 = [
9501
9714
  trackingPlanSyncFromMeta,
9502
9715
  trackingPlanSyncDisplayNames
9503
9716
  ];
9504
- var plan_default = commands66;
9717
+ var plan_default = commands67;
9505
9718
 
9506
9719
  // src/commands/te-analysis/tracking/sdk-sample/generate.ts
9507
9720
  var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
@@ -9515,10 +9728,10 @@ var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
9515
9728
  });
9516
9729
 
9517
9730
  // src/commands/te-analysis/tracking/sdk-sample/index.ts
9518
- var commands67 = [
9731
+ var commands68 = [
9519
9732
  trackingSdkSampleGenerate
9520
9733
  ];
9521
- var sdk_sample_default = commands67;
9734
+ var sdk_sample_default = commands68;
9522
9735
 
9523
9736
  // src/commands/te-analysis/tracking/plan-change-log/list.ts
9524
9737
  var trackingPlanChangeLogList = createTrackingCapabilityCommand({
@@ -9544,11 +9757,11 @@ var trackingPlanChangeLogExport = createTrackingCapabilityCommand({
9544
9757
  });
9545
9758
 
9546
9759
  // src/commands/te-analysis/tracking/plan-change-log/index.ts
9547
- var commands68 = [
9760
+ var commands69 = [
9548
9761
  trackingPlanChangeLogList,
9549
9762
  trackingPlanChangeLogExport
9550
9763
  ];
9551
- var plan_change_log_default = commands68;
9764
+ var plan_change_log_default = commands69;
9552
9765
 
9553
9766
  // src/commands/te-analysis/tracking/check/run.ts
9554
9767
  var trackingCheckRun = createTrackingCapabilityCommand({
@@ -9622,7 +9835,7 @@ var trackingCheckExport = createTrackingCapabilityCommand({
9622
9835
  });
9623
9836
 
9624
9837
  // src/commands/te-analysis/tracking/check/index.ts
9625
- var commands69 = [
9838
+ var commands70 = [
9626
9839
  trackingCheckRun,
9627
9840
  trackingCheckList,
9628
9841
  trackingCheckGet,
@@ -9630,7 +9843,7 @@ var commands69 = [
9630
9843
  trackingCheckDelete,
9631
9844
  trackingCheckExport
9632
9845
  ];
9633
- var check_default = commands69;
9846
+ var check_default = commands70;
9634
9847
 
9635
9848
  // src/commands/te-analysis/tracking/ingest/summary.ts
9636
9849
  var trackingIngestSummary = createTrackingCapabilityCommand({
@@ -9644,10 +9857,10 @@ var trackingIngestSummary = createTrackingCapabilityCommand({
9644
9857
  });
9645
9858
 
9646
9859
  // src/commands/te-analysis/tracking/ingest/index.ts
9647
- var commands70 = [
9860
+ var commands71 = [
9648
9861
  trackingIngestSummary
9649
9862
  ];
9650
- var ingest_default = commands70;
9863
+ var ingest_default = commands71;
9651
9864
 
9652
9865
  // src/commands/te-analysis/tracking/ingest-error/list.ts
9653
9866
  var trackingIngestErrorList = createTrackingCapabilityCommand({
@@ -9661,10 +9874,10 @@ var trackingIngestErrorList = createTrackingCapabilityCommand({
9661
9874
  });
9662
9875
 
9663
9876
  // src/commands/te-analysis/tracking/ingest-error/index.ts
9664
- var commands71 = [
9877
+ var commands72 = [
9665
9878
  trackingIngestErrorList
9666
9879
  ];
9667
- var ingest_error_default = commands71;
9880
+ var ingest_error_default = commands72;
9668
9881
 
9669
9882
  // src/commands/te-analysis/tracking/live-data/list.ts
9670
9883
  var trackingLiveDataList = createTrackingCapabilityCommand({
@@ -9690,11 +9903,11 @@ var trackingLiveDataExport = createTrackingCapabilityCommand({
9690
9903
  });
9691
9904
 
9692
9905
  // src/commands/te-analysis/tracking/live-data/index.ts
9693
- var commands72 = [
9906
+ var commands73 = [
9694
9907
  trackingLiveDataList,
9695
9908
  trackingLiveDataExport
9696
9909
  ];
9697
- var live_data_default = commands72;
9910
+ var live_data_default = commands73;
9698
9911
 
9699
9912
  // src/commands/te-analysis/tracking/event-blacklist/list.ts
9700
9913
  var trackingEventBlacklistList = createTrackingCapabilityCommand({
@@ -9730,12 +9943,12 @@ var trackingEventBlacklistUpdate = createTrackingCapabilityCommand({
9730
9943
  });
9731
9944
 
9732
9945
  // src/commands/te-analysis/tracking/event-blacklist/index.ts
9733
- var commands73 = [
9946
+ var commands74 = [
9734
9947
  trackingEventBlacklistList,
9735
9948
  trackingEventBlacklistAdd,
9736
9949
  trackingEventBlacklistUpdate
9737
9950
  ];
9738
- var event_blacklist_default = commands73;
9951
+ var event_blacklist_default = commands74;
9739
9952
 
9740
9953
  // src/commands/te-analysis/tracking/debug-device/add.ts
9741
9954
  var trackingDebugDeviceAdd = createTrackingCapabilityCommand({
@@ -9778,12 +9991,12 @@ var trackingDebugDeviceSelect = createTrackingCapabilityCommand({
9778
9991
  });
9779
9992
 
9780
9993
  // src/commands/te-analysis/tracking/debug-device/index.ts
9781
- var commands74 = [
9994
+ var commands75 = [
9782
9995
  trackingDebugDeviceList,
9783
9996
  trackingDebugDeviceAdd,
9784
9997
  trackingDebugDeviceSelect
9785
9998
  ];
9786
- var debug_device_default = commands74;
9999
+ var debug_device_default = commands75;
9787
10000
 
9788
10001
  // src/commands/te-analysis/tracking/debug-data/list.ts
9789
10002
  var debugStartTimeFlag = {
@@ -9842,11 +10055,11 @@ function isRecord3(value) {
9842
10055
  }
9843
10056
 
9844
10057
  // src/commands/te-analysis/tracking/debug-data/index.ts
9845
- var commands75 = [trackingDebugDataList];
9846
- var debug_data_default = commands75;
10058
+ var commands76 = [trackingDebugDataList];
10059
+ var debug_data_default = commands76;
9847
10060
 
9848
10061
  // src/commands/te-analysis/tracking/index.ts
9849
- var commands76 = [
10062
+ var commands77 = [
9850
10063
  ...plan_default,
9851
10064
  ...sdk_sample_default,
9852
10065
  ...plan_change_log_default,
@@ -9858,7 +10071,7 @@ var commands76 = [
9858
10071
  ...debug_device_default,
9859
10072
  ...debug_data_default
9860
10073
  ];
9861
- var tracking_default = commands76;
10074
+ var tracking_default = commands77;
9862
10075
 
9863
10076
  // src/commands/te-analysis/alert/shared.ts
9864
10077
  var alertIdFlag = {
@@ -9971,7 +10184,7 @@ var analysisAlertStop = createAnalysisCapabilityCommand({
9971
10184
  });
9972
10185
 
9973
10186
  // src/commands/te-analysis/alert/index.ts
9974
- var commands77 = [
10187
+ var commands78 = [
9975
10188
  analysisAlertList,
9976
10189
  analysisAlertGet,
9977
10190
  analysisAlertCreate,
@@ -9980,7 +10193,7 @@ var commands77 = [
9980
10193
  analysisAlertStart,
9981
10194
  analysisAlertStop
9982
10195
  ];
9983
- var alert_default = commands77;
10196
+ var alert_default = commands78;
9984
10197
 
9985
10198
  // src/commands/te-analysis/alert-detail/list.ts
9986
10199
  var analysisAlertDetailList = createAnalysisCapabilityCommand({
@@ -9994,10 +10207,10 @@ var analysisAlertDetailList = createAnalysisCapabilityCommand({
9994
10207
  });
9995
10208
 
9996
10209
  // src/commands/te-analysis/alert-detail/index.ts
9997
- var commands78 = [
10210
+ var commands79 = [
9998
10211
  analysisAlertDetailList
9999
10212
  ];
10000
- var alert_detail_default = commands78;
10213
+ var alert_detail_default = commands79;
10001
10214
 
10002
10215
  // src/commands/te-analysis/alert-job/list.ts
10003
10216
  var analysisAlertJobList = createAnalysisCapabilityCommand({
@@ -10011,10 +10224,10 @@ var analysisAlertJobList = createAnalysisCapabilityCommand({
10011
10224
  });
10012
10225
 
10013
10226
  // src/commands/te-analysis/alert-job/index.ts
10014
- var commands79 = [
10227
+ var commands80 = [
10015
10228
  analysisAlertJobList
10016
10229
  ];
10017
- var alert_job_default = commands79;
10230
+ var alert_job_default = commands80;
10018
10231
 
10019
10232
  // src/commands/te-analysis/alert-notice-config/list.ts
10020
10233
  var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
@@ -10028,10 +10241,10 @@ var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
10028
10241
  });
10029
10242
 
10030
10243
  // src/commands/te-analysis/alert-notice-config/index.ts
10031
- var commands80 = [
10244
+ var commands81 = [
10032
10245
  analysisAlertNoticeConfigList
10033
10246
  ];
10034
- var alert_notice_config_default = commands80;
10247
+ var alert_notice_config_default = commands81;
10035
10248
 
10036
10249
  // src/commands/te-analysis/system/shared.ts
10037
10250
  import { readFileSync as readFileSync3, statSync as statSync3 } from "fs";
@@ -11116,14 +11329,14 @@ var systemUsageCommands = [
11116
11329
  ];
11117
11330
 
11118
11331
  // src/commands/te-analysis/system/index.ts
11119
- var commands81 = [
11332
+ var commands82 = [
11120
11333
  ...systemUsageCommands,
11121
11334
  ...systemIdentityCommands,
11122
11335
  ...systemSecurityCommands,
11123
11336
  ...systemMonitoringCommands,
11124
11337
  ...systemConfigurationCommands
11125
11338
  ];
11126
- var system_default = commands81;
11339
+ var system_default = commands82;
11127
11340
 
11128
11341
  // src/commands/te-analysis/feedback/submit.ts
11129
11342
  import { createHash as createHash4, randomUUID as randomUUID2 } from "crypto";
@@ -11208,6 +11421,124 @@ var analysisFeedbackSubmit = createAnalysisCapabilityCommand({
11208
11421
  // src/commands/te-analysis/feedback/index.ts
11209
11422
  var feedback_default = [analysisFeedbackSubmit];
11210
11423
 
11424
+ // src/commands/te-analysis/scenario/index.ts
11425
+ function text2(value, field, max) {
11426
+ if (typeof value !== "string" || !value.trim() || value.length > max) throw new CliValidationError(`${field} must be nonblank and at most ${max} characters.`);
11427
+ return value;
11428
+ }
11429
+ function scenarioInput(ctx, append = false) {
11430
+ const agent = readCliAgentContext();
11431
+ const session = text2(agent.agent_session_id ?? "", "agent_session_id", 191);
11432
+ const questionId = text2(ctx.str("question-id") || (!append ? agent.agent_turn_id ?? "" : ""), "question-id", 191);
11433
+ const projectId = ctx.optionalNum("project-id");
11434
+ if (projectId !== void 0 && (!Number.isInteger(projectId) || projectId <= 0)) throw new CliValidationError("project-id must be a positive integer.");
11435
+ const input = {
11436
+ agent_session_id: session,
11437
+ question_id: questionId,
11438
+ ...projectId !== void 0 ? { project_id: projectId } : {}
11439
+ };
11440
+ const entryType = append ? text2(ctx.str("entry-type"), "entry-type", 32) : "answer";
11441
+ if (!["answer", "user_feedback", "answer_revision"].includes(entryType) || append && entryType === "answer") {
11442
+ throw new CliValidationError("entry-type must be user_feedback or answer_revision.");
11443
+ }
11444
+ if (append) {
11445
+ input.entry_type = entryType;
11446
+ input.entry_id = text2(ctx.str("entry-id") || (agent.agent_turn_id ? `${agent.agent_turn_id}:${entryType}` : ""), "entry-id", 191);
11447
+ input.target_answer_id = text2(ctx.str("target-answer-id"), "target-answer-id", 191);
11448
+ input.text = text2(ctx.str("text"), "text", entryType === "user_feedback" ? 4096 : 16384);
11449
+ } else {
11450
+ input.question = text2(ctx.str("question"), "question", 8192);
11451
+ input.answer = text2(ctx.str("answer"), "answer", 16384);
11452
+ }
11453
+ if (entryType !== "user_feedback") {
11454
+ if (append && ctx.str("user-message")) input.user_message = text2(ctx.str("user-message"), "user-message", 4096);
11455
+ input.answer_id = text2(ctx.str("answer-id") || (agent.agent_turn_id ? `answer:${agent.agent_turn_id}` : ""), "answer-id", 191);
11456
+ if (input.answer_id === input.target_answer_id) throw new CliValidationError("A revision requires a new answer-id; target-answer-id must preserve the previous answer.");
11457
+ const path = ctx.json("query-path");
11458
+ if (!Array.isArray(path) || !path.length || path.length > 64) throw new CliValidationError("query-path must contain 1..64 ordered CLI call references.");
11459
+ for (const step of path) {
11460
+ if (!step || typeof step !== "object" || Array.isArray(step) || Object.keys(step).some((key) => !["capability_id", "invocation_id", "client_request_id", "purpose"].includes(key)) || typeof step.capability_id !== "string" || !/^[a-z][a-z0-9_]*\.[a-z][a-z0-9_]*\.[a-z][a-z0-9_]*$/.test(step.capability_id) || ["analysis.scenario.collect", "analysis.scenario.append", "analysis.feedback.submit"].includes(step.capability_id) || step.invocation_id === void 0 && step.client_request_id === void 0) {
11461
+ throw new CliValidationError("Each query-path step requires a capability_id and an existing invocation_id or client_request_id; only optional purpose is accepted. Do not include query inputs or results.");
11462
+ }
11463
+ for (const key of ["invocation_id", "client_request_id"]) if (step[key] !== void 0) text2(step[key], key, 191);
11464
+ if (step.purpose !== void 0) text2(step.purpose, "purpose", 256);
11465
+ }
11466
+ if (!path.some((step) => analysisQueryCapabilities.has(step.capability_id))) throw new CliValidationError("query-path must reference at least one attempted analysis data query.");
11467
+ if (JSON.stringify(path).length > 2e4) throw new CliValidationError("query-path must be at most 20000 characters.");
11468
+ input.query_path = path;
11469
+ } else if (ctx.json("query-path") !== void 0 || ctx.str("answer-id") || ctx.str("user-message")) {
11470
+ throw new CliValidationError("user_feedback records user text and its target only; do not attach an answer or query path.");
11471
+ }
11472
+ return input;
11473
+ }
11474
+ var commonFlags2 = [
11475
+ { name: "question-id", type: "string", desc: "Stable original scenario turn ID. Collect defaults to current turn; append must reuse the original ID." },
11476
+ { name: "answer-id", type: "string", desc: "Actual answer identifier; defaults to answer:<current-turn-id>. Revisions need a new ID." },
11477
+ { name: "query-path", type: "json", desc: "1..64 ordered references: [{capability_id,invocation_id?,client_request_id?,purpose?}]. Prefer only returned meta.invocation_id; fallback to returned gateway meta.client_request_id, never business request_id. One analysis data-query step required. Inputs/status/timing come from existing call telemetry. Never include query results." },
11478
+ { name: "project-id", type: "number", desc: "Source analysis project. Collection is skipped if omitted or the project has not explicitly enabled scenario samples." }
11479
+ ];
11480
+ function withProjectCollectionPolicy(command) {
11481
+ return {
11482
+ ...command,
11483
+ execute: async (ctx) => {
11484
+ const input = scenarioInput(ctx, command.command === "append");
11485
+ const skipped = (reason) => withOutputMetadata({
11486
+ accepted: false,
11487
+ skipped: true,
11488
+ reason,
11489
+ question_id: input.question_id,
11490
+ ...input.answer_id ? { answer_id: input.answer_id } : {},
11491
+ ...input.entry_id ? { entry_id: input.entry_id } : {},
11492
+ ...input.target_answer_id ? { target_answer_id: input.target_answer_id } : {},
11493
+ event_name: command.command === "append" ? "cli_analysis_scenario_entry" : "cli_analysis_scenario",
11494
+ delivery: "best_effort"
11495
+ }, { capability_id: command.capabilityId });
11496
+ if (input.project_id === void 0) return skipped("PROJECT_REQUIRED");
11497
+ try {
11498
+ const policy = await executeCapabilityWithEnvelope(ctx.host(), "analysis", "project.info.get", {
11499
+ project_id: input.project_id
11500
+ });
11501
+ if (policy.data?.analysis_scenario_collection_enabled !== true) {
11502
+ return skipped("PROJECT_COLLECTION_DISABLED");
11503
+ }
11504
+ } catch {
11505
+ return skipped("PROJECT_COLLECTION_CONFIG_UNAVAILABLE");
11506
+ }
11507
+ return command.execute(ctx);
11508
+ }
11509
+ };
11510
+ }
11511
+ var scenarioCollect = withProjectCollectionPolicy(createAnalysisCapabilityCommand({
11512
+ resource: "scenario",
11513
+ command: "collect",
11514
+ capabilityId: "analysis.scenario.collect",
11515
+ risk: "write",
11516
+ description: "Collect one whole scenario question, exact final answer and ordered CLI call references. Multiple CLI calls belong to one question_id. No self-evaluation.",
11517
+ flags: [
11518
+ ...commonFlags2,
11519
+ { name: "question", type: "string", required: true, sensitive: true, desc: "Original user scenario question and confirmed clarifications; up to 8192 characters." },
11520
+ { name: "answer", type: "string", required: true, sensitive: true, desc: "Exact answer text to deliver, not a summary. Up to 16384 characters. Deliver the same text after collection." }
11521
+ ],
11522
+ buildInput: (ctx) => scenarioInput(ctx)
11523
+ }));
11524
+ var scenarioAppend = withProjectCollectionPolicy(createAnalysisCapabilityCommand({
11525
+ resource: "scenario",
11526
+ command: "append",
11527
+ capabilityId: "analysis.scenario.append",
11528
+ risk: "write",
11529
+ description: "Append verbatim user feedback or the exact substantive follow-up answer, including a recheck with unchanged conclusions, preserving earlier answers. This is not a new scenario.",
11530
+ flags: [
11531
+ ...commonFlags2,
11532
+ { name: "entry-type", type: "string", required: true, desc: "user_feedback or answer_revision." },
11533
+ { name: "target-answer-id", type: "string", required: true, desc: "Existing answer being questioned or revised. Never overwrite it." },
11534
+ { name: "text", type: "string", required: true, sensitive: true, desc: "Verbatim user feedback (up to 4096) or exact revised answer (up to 16384); no judgment of whether feedback is right." },
11535
+ { name: "entry-id", type: "string", desc: "Stable append ID; defaults to current-turn-id:entry-type. Preserve on retries, independent of text edits." },
11536
+ { name: "user-message", type: "string", sensitive: true, desc: "For answer_revision only: exact triggering follow-up request, up to 4096 characters, when not already captured as user_feedback. Preserve scope changes without inventing negative feedback." }
11537
+ ],
11538
+ buildInput: (ctx) => scenarioInput(ctx, true)
11539
+ }));
11540
+ var scenario_default = [scenarioCollect, scenarioAppend];
11541
+
11211
11542
  // src/commands/te-analysis/index.ts
11212
11543
  registerCapabilityGatewayRoute("analysis", { gatewayDomain: "analysis" });
11213
11544
  registerCapabilityGatewayRoute("project", { gatewayDomain: "analysis" });
@@ -11255,10 +11586,11 @@ var baseCommands = [
11255
11586
  ...alert_job_default,
11256
11587
  ...alert_notice_config_default,
11257
11588
  ...system_default,
11258
- ...feedback_default
11589
+ ...feedback_default,
11590
+ ...scenario_default
11259
11591
  ];
11260
- var commands82 = [...baseCommands];
11261
- var te_analysis_default = commands82;
11592
+ var commands83 = [...baseCommands];
11593
+ var te_analysis_default = commands83;
11262
11594
  export {
11263
11595
  baseCommands,
11264
11596
  te_analysis_default as default