@thinkingai/ae-cli 6.0.38 → 6.0.39

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 (193) hide show
  1. package/README.md +25 -3
  2. package/README.zh.md +25 -3
  3. package/dist/{auth-56Z45UVR.js → auth-GDV3H5I4.js} +18 -8
  4. package/dist/{auth-ENM3FE6L.js → auth-NN55553T.js} +3 -3
  5. package/dist/{capability-2H6PAOA3.js → capability-TPORIKRQ.js} +19 -15
  6. package/dist/{capability-YPOQX6PL.js → capability-VQNC5CF7.js} +19 -15
  7. package/dist/chunk-4NN5IWVN.js +26 -0
  8. package/dist/{chunk-DB4Q3ANU.js → chunk-6A2FUCIS.js} +3 -3
  9. package/dist/{chunk-PVBYJWC2.js → chunk-7KQWSBSL.js} +4 -4
  10. package/dist/{chunk-24BAVOX3.js → chunk-AXDXJTPC.js} +3 -1
  11. package/dist/{chunk-CPVTECJ3.js → chunk-DT6Y3TD7.js} +5 -5
  12. package/dist/{chunk-EGEIXA2Z.js → chunk-DWO43OIB.js} +0 -248
  13. package/dist/{chunk-V6FR6WTW.js → chunk-GJJA4CQZ.js} +34 -2
  14. package/dist/{chunk-RGXCNC4N.js → chunk-GS2P7LFD.js} +50 -17
  15. package/dist/{chunk-LYVNONC4.js → chunk-JHENBQ5B.js} +35 -0
  16. package/dist/{chunk-3P3562ZX.js → chunk-MVDZ7DBQ.js} +5 -5
  17. package/dist/{chunk-LCXU3AAT.js → chunk-NBPKWKRA.js} +2 -2
  18. package/dist/{chunk-HQ2A7ITL.js → chunk-RBNKI5ZW.js} +50 -17
  19. package/dist/{chunk-LHVM35J4.js → chunk-TS6BUGUY.js} +4 -4
  20. package/dist/chunk-TUKQZTMI.js +250 -0
  21. package/dist/{chunk-J7MZHDHQ.js → chunk-VKD5WQKN.js} +5 -5
  22. package/dist/{chunk-3KI3RRXX.js → chunk-VTXHDCBW.js} +3 -3
  23. package/dist/{chunk-KTYR3U6D.js → chunk-YTG6Q75E.js} +10 -6
  24. package/dist/{chunk-IR4ZLVPW.js → chunk-YV52FB5G.js} +25 -3
  25. package/dist/{chunk-E7UXXHO3.js → chunk-Z3OXWCIA.js} +3 -3
  26. package/dist/{cli-token-4SBMXAUK.js → cli-token-GL5MS5FK.js} +4 -4
  27. package/dist/{client-PP5FETMW.js → client-DAIPF7XN.js} +4 -4
  28. package/dist/{community-report-client-KK2QBANO.js → community-report-client-M2RW4MXD.js} +2 -2
  29. package/dist/config-4VZNLBKF.js +489 -0
  30. package/dist/index.js +96 -37
  31. package/dist/memory-RWJW4XFO.js +892 -0
  32. package/dist/memory-VO2ZJCRT.js +892 -0
  33. package/dist/{metadata-JIQ77HFY.js → metadata-YGTHR2XJ.js} +8 -8
  34. package/dist/{metadata-AN3YFZEV.js → metadata-ZRN2GHPN.js} +8 -8
  35. package/dist/{model-JASQVOFD.js → model-CLUIK3K5.js} +7 -5
  36. package/dist/{raw-XJCAT3HX.js → raw-52B4UKO4.js} +8 -7
  37. package/dist/sync-3REDHGY6.js +10259 -0
  38. package/dist/{te-agent-JHUG6DVV.js → te-agent-XNPELAKX.js} +580 -84
  39. package/dist/{te-analysis-ITKTO6JS.js → te-analysis-GJI5FZUL.js} +1152 -13
  40. package/dist/{te-analysis-RAC67YYD.js → te-analysis-N2BRDJZ5.js} +1152 -13
  41. package/dist/{te-community-QOYIYEJI.js → te-community-SQXKE5OO.js} +7 -7
  42. package/dist/{te-community-UFKI6ONP.js → te-community-TYSNU3NQ.js} +7 -7
  43. package/dist/{te-dataops-PZQ5NQLY.js → te-dataops-5TM7WZDI.js} +370 -189
  44. package/dist/{te-dataops-XTWVTJCA.js → te-dataops-OWIADNSM.js} +370 -189
  45. package/dist/{te-engage-NLZUPSBK.js → te-engage-F7V55KVW.js} +333 -105
  46. package/dist/{te-engage-E7F4HTXU.js → te-engage-FMYAYCNV.js} +333 -105
  47. package/dist/{te-kb-E7NSCBRB.js → te-kb-VRMEY3D4.js} +6 -6
  48. package/dist/{te-meta-GBDTMPEL.js → te-meta-53BVXPFI.js} +7 -7
  49. package/dist/{te-meta-ZTLTSHXC.js → te-meta-TOCBPBXI.js} +7 -7
  50. package/dist/{te-system-AH7DMCAQ.js → te-system-XGS5EQIQ.js} +4 -4
  51. package/dist/{te-team-BQ3SKSZV.js → te-team-BZRDV2CM.js} +7 -7
  52. package/dist/{update-DKG6UXEM.js → update-HEDXGOJH.js} +8 -6
  53. package/package.json +4 -1
  54. package/skills/ae-agent/SKILL.md +178 -16
  55. package/skills/ae-agent/references/add-skill.md +22 -10
  56. package/skills/ae-agent/references/edit-skill.md +24 -14
  57. package/skills/ae-agent/references/find-archived-conversations.md +82 -0
  58. package/skills/ae-agent/references/restore-conversation.md +54 -0
  59. package/skills/ae-agent/references/upload-skill.md +24 -14
  60. package/skills/ae-analysis/SKILL.md +1 -1
  61. package/skills/ae-analysis/references/command_index.md +104 -42
  62. package/skills/ae-analysis/references/entity_id_import_options.md +1 -1
  63. package/skills/ae-analysis/references/project_access_detail_get.md +3 -3
  64. package/skills/ae-analysis/references/project_data_power_delete.md +3 -3
  65. package/skills/ae-analysis/references/project_data_power_get.md +3 -3
  66. package/skills/ae-analysis/references/project_data_power_list.md +3 -3
  67. package/skills/ae-analysis/references/project_data_power_upsert.md +3 -3
  68. package/skills/ae-analysis/references/project_entity_create.md +3 -3
  69. package/skills/ae-analysis/references/project_entity_delete.md +3 -3
  70. package/skills/ae-analysis/references/project_entity_event_list.md +3 -3
  71. package/skills/ae-analysis/references/project_entity_get.md +3 -3
  72. package/skills/ae-analysis/references/project_entity_list.md +3 -3
  73. package/skills/ae-analysis/references/project_entity_update.md +3 -3
  74. package/skills/ae-analysis/references/project_function_list.md +3 -3
  75. package/skills/ae-analysis/references/project_info_create.md +25 -0
  76. package/skills/ae-analysis/references/project_info_delete.md +24 -0
  77. package/skills/ae-analysis/references/project_info_get.md +3 -3
  78. package/skills/ae-analysis/references/project_info_list.md +3 -3
  79. package/skills/ae-analysis/references/project_info_update.md +3 -3
  80. package/skills/ae-analysis/references/project_mark_time_create.md +3 -3
  81. package/skills/ae-analysis/references/project_mark_time_delete.md +3 -3
  82. package/skills/ae-analysis/references/project_mark_time_list.md +3 -3
  83. package/skills/ae-analysis/references/project_mark_time_update.md +3 -3
  84. package/skills/ae-analysis/references/project_member_add.md +3 -3
  85. package/skills/ae-analysis/references/project_member_batch_update.md +3 -3
  86. package/skills/ae-analysis/references/project_member_candidate_list.md +3 -3
  87. package/skills/ae-analysis/references/project_member_handover_export.md +3 -3
  88. package/skills/ae-analysis/references/project_member_handover_run.md +3 -3
  89. package/skills/ae-analysis/references/project_member_import.md +3 -3
  90. package/skills/ae-analysis/references/project_member_list.md +3 -3
  91. package/skills/ae-analysis/references/project_member_receiver_list.md +3 -3
  92. package/skills/ae-analysis/references/project_member_remove.md +3 -3
  93. package/skills/ae-analysis/references/project_member_update.md +3 -3
  94. package/skills/ae-analysis/references/project_owner_update.md +3 -3
  95. package/skills/ae-analysis/references/project_permission_binding_list.md +3 -3
  96. package/skills/ae-analysis/references/project_receive_status_update.md +3 -3
  97. package/skills/ae-analysis/references/project_role_delete.md +3 -3
  98. package/skills/ae-analysis/references/project_role_function_list.md +3 -3
  99. package/skills/ae-analysis/references/project_role_get.md +3 -3
  100. package/skills/ae-analysis/references/project_role_list.md +3 -3
  101. package/skills/ae-analysis/references/project_role_upsert.md +3 -3
  102. package/skills/ae-analysis/references/project_role_user_list.md +3 -3
  103. package/skills/ae-analysis/references/project_space_list.md +1 -1
  104. package/skills/ae-analysis/references/project_timezone_get.md +3 -3
  105. package/skills/ae-analysis/references/project_timezone_overview.md +3 -3
  106. package/skills/ae-analysis/references/project_timezone_update.md +3 -3
  107. package/skills/ae-analysis/references/project_user_id_items_update.md +3 -3
  108. package/skills/ae-analysis/references/system_admin_function_list.md +22 -0
  109. package/skills/ae-analysis/references/system_admin_function_update.md +26 -0
  110. package/skills/ae-analysis/references/system_admin_list.md +21 -0
  111. package/skills/ae-analysis/references/system_admin_remove.md +25 -0
  112. package/skills/ae-analysis/references/system_admin_upsert.md +25 -0
  113. package/skills/ae-analysis/references/system_function_list.md +21 -0
  114. package/skills/ae-analysis/references/system_member_add.md +25 -0
  115. package/skills/ae-analysis/references/system_member_candidate_list.md +22 -0
  116. package/skills/ae-analysis/references/system_member_delete.md +25 -0
  117. package/skills/ae-analysis/references/system_member_list.md +24 -0
  118. package/skills/ae-analysis/references/system_member_mfa_unbind.md +25 -0
  119. package/skills/ae-analysis/references/system_member_password_reset.md +32 -0
  120. package/skills/ae-analysis/references/system_member_project_batch_update.md +27 -0
  121. package/skills/ae-analysis/references/system_member_status_update.md +26 -0
  122. package/skills/ae-analysis/references/system_member_update.md +23 -0
  123. package/skills/ae-analysis/references/system_mfa_get.md +21 -0
  124. package/skills/ae-analysis/references/system_mfa_update.md +25 -0
  125. package/skills/ae-analysis/references/system_node_monitor_list.md +24 -0
  126. package/skills/ae-analysis/references/system_oauth2_update.md +22 -0
  127. package/skills/ae-analysis/references/system_ops_alert_contact_delete.md +25 -0
  128. package/skills/ae-analysis/references/system_ops_alert_contact_list.md +23 -0
  129. package/skills/ae-analysis/references/system_ops_alert_contact_test.md +29 -0
  130. package/skills/ae-analysis/references/system_ops_alert_contact_upsert.md +39 -0
  131. package/skills/ae-analysis/references/system_preference_get.md +21 -0
  132. package/skills/ae-analysis/references/system_preference_update.md +22 -0
  133. package/skills/ae-analysis/references/system_project_usage_list.md +28 -0
  134. package/skills/ae-analysis/references/system_query_alert_rule_list.md +21 -0
  135. package/skills/ae-analysis/references/system_query_alert_rule_update.md +26 -0
  136. package/skills/ae-analysis/references/system_query_monitor_overview.md +26 -0
  137. package/skills/ae-analysis/references/system_query_task_cancel.md +25 -0
  138. package/skills/ae-analysis/references/system_query_task_export.md +49 -0
  139. package/skills/ae-analysis/references/system_query_task_get.md +23 -0
  140. package/skills/ae-analysis/references/system_query_task_list.md +35 -0
  141. package/skills/ae-analysis/references/system_query_task_options.md +27 -0
  142. package/skills/ae-analysis/references/system_receiver_address_delete.md +26 -0
  143. package/skills/ae-analysis/references/system_receiver_address_overview.md +21 -0
  144. package/skills/ae-analysis/references/system_receiver_address_project_list.md +21 -0
  145. package/skills/ae-analysis/references/system_receiver_address_promote.md +24 -0
  146. package/skills/ae-analysis/references/system_receiver_address_upsert.md +27 -0
  147. package/skills/ae-analysis/references/system_receiver_detection_get.md +22 -0
  148. package/skills/ae-analysis/references/system_receiver_detection_run.md +22 -0
  149. package/skills/ae-analysis/references/system_receiver_detection_update.md +25 -0
  150. package/skills/ae-analysis/references/system_role_delete.md +26 -0
  151. package/skills/ae-analysis/references/system_role_function_list.md +22 -0
  152. package/skills/ae-analysis/references/system_role_get.md +22 -0
  153. package/skills/ae-analysis/references/system_role_list.md +24 -0
  154. package/skills/ae-analysis/references/system_role_upsert.md +27 -0
  155. package/skills/ae-analysis/references/system_role_user_list.md +22 -0
  156. package/skills/ae-analysis/references/system_seat_list.md +25 -0
  157. package/skills/ae-analysis/references/system_seat_update.md +26 -0
  158. package/skills/ae-analysis/references/system_smtp_delete.md +24 -0
  159. package/skills/ae-analysis/references/system_smtp_get.md +21 -0
  160. package/skills/ae-analysis/references/system_smtp_test.md +22 -0
  161. package/skills/ae-analysis/references/system_smtp_upsert.md +31 -0
  162. package/skills/ae-analysis/references/system_third_party_login_disable.md +25 -0
  163. package/skills/ae-analysis/references/system_third_party_login_list.md +21 -0
  164. package/skills/ae-analysis/references/system_third_party_login_upsert.md +33 -0
  165. package/skills/ae-analysis/references/system_usage_overview.md +21 -0
  166. package/skills/ae-analysis/references/system_usage_trend_export.md +44 -0
  167. package/skills/ae-analysis/references/system_usage_trend_query.md +28 -0
  168. package/skills/ae-dataops/SKILL.md +1 -1
  169. package/skills/ae-dataops/references/dataops-flow-create.md +51 -16
  170. package/skills/ae-engage/SKILL.md +56 -26
  171. package/skills/ae-engage/references/activity-activity.md +3 -0
  172. package/skills/ae-engage/references/activity-approval.md +12 -4
  173. package/skills/ae-engage/references/activity-task.md +21 -6
  174. package/skills/ae-engage/references/activity-topic.md +31 -13
  175. package/skills/ae-engage/references/add-channel.md +170 -41
  176. package/skills/ae-engage/references/build-task-save-guide.md +40 -27
  177. package/skills/ae-engage/references/channel-update-config.md +3 -2
  178. package/skills/ae-engage/references/common-metric.md +48 -120
  179. package/skills/ae-engage/references/flow-detail.md +13 -0
  180. package/skills/ae-engage/references/preset-event.md +12 -32
  181. package/skills/ae-engage/references/save-flow.md +127 -64
  182. package/skills/ae-engage/references/save-task.md +197 -59
  183. package/skills/ae-engage/references/scene-config-metric.md +3 -0
  184. package/skills/ae-engage/references/scene-preset-metric.md +8 -37
  185. package/skills/ae-engage/references/scene-strategy-audience.md +51 -643
  186. package/skills/ae-engage/references/scene-strategy.md +6 -6
  187. package/skills/ae-engage/references/task-detail.md +10 -0
  188. package/skills/ae-engage/references/task-submit-approval.md +45 -0
  189. package/skills/ae-engage/references/validate-flow-node-config.md +1 -1
  190. package/skills/ae-generate-tracking-code/SKILL.md +2 -2
  191. package/skills/ae-metadata/SKILL.md +1 -1
  192. package/dist/config-BSSALXEN.js +0 -128
  193. package/dist/sync-QFP4XFN3.js +0 -485
@@ -1,247 +1,3 @@
1
- // src/core/multiselect.ts
2
- var MultiselectCancelled = class extends Error {
3
- constructor() {
4
- super("Selection cancelled by user");
5
- this.name = "MultiselectCancelled";
6
- }
7
- };
8
- function buildRows(items) {
9
- const rows = [];
10
- let lastGroup;
11
- for (let i = 0; i < items.length; i++) {
12
- const it = items[i];
13
- if (it.group && it.group !== lastGroup) {
14
- rows.push({ kind: "header", groupLabel: it.group });
15
- lastGroup = it.group;
16
- }
17
- rows.push({ kind: "item", itemIndex: i, item: it });
18
- }
19
- return rows;
20
- }
21
- function promptMultiselect(opts) {
22
- const { title, items } = opts;
23
- if (items.length === 0) {
24
- return Promise.resolve([]);
25
- }
26
- const stderr = process.stderr;
27
- const stdin = process.stdin;
28
- if (!stdin.isTTY) {
29
- return Promise.reject(
30
- new Error("ae-cli sync requires a TTY for multi-select; please run in an interactive terminal")
31
- );
32
- }
33
- const rows = buildRows(items);
34
- const itemRowIndices = [];
35
- rows.forEach((r, idx) => {
36
- if (r.kind === "item") itemRowIndices.push(idx);
37
- });
38
- const selected = /* @__PURE__ */ new Set();
39
- items.forEach((it, idx) => {
40
- if (it.preselected) selected.add(idx);
41
- });
42
- let cursorRowIdx = itemRowIndices[0];
43
- let renderCount = 0;
44
- function totalLines() {
45
- return rows.length + 2;
46
- }
47
- function render() {
48
- if (renderCount > 0) {
49
- stderr.write(`\x1B[${totalLines()}A`);
50
- }
51
- stderr.write(`${title} (space: select \xB7 a: select all/none \xB7 enter: confirm \xB7 q: cancel)\x1B[K
52
- `);
53
- stderr.write(`\x1B[K
54
- `);
55
- rows.forEach((row, ridx) => {
56
- if (row.kind === "header") {
57
- stderr.write(` \x1B[90m\u2500\u2500 ${row.groupLabel} \u2500\u2500\x1B[0m\x1B[K
58
- `);
59
- return;
60
- }
61
- const isCursor = ridx === cursorRowIdx;
62
- const isSelected = selected.has(row.itemIndex);
63
- const pointer = isCursor ? "\x1B[36m\u276F\x1B[0m" : " ";
64
- const checkbox = isSelected ? "\x1B[32m[x]\x1B[0m" : "[ ]";
65
- const label = row.item.label;
66
- const hint = row.item.hint ? ` \x1B[90m${row.item.hint}\x1B[0m` : "";
67
- stderr.write(`${pointer} ${checkbox} ${label}${hint}\x1B[K
68
- `);
69
- });
70
- renderCount++;
71
- }
72
- return new Promise((resolve, reject) => {
73
- stderr.write("\x1B[?25l");
74
- stdin.setRawMode(true);
75
- stdin.resume();
76
- stdin.setEncoding("utf8");
77
- function cleanup() {
78
- stdin.setRawMode(false);
79
- stdin.pause();
80
- stdin.removeListener("data", onData);
81
- stderr.write("\x1B[?25h");
82
- }
83
- function moveCursor(direction) {
84
- const cur = itemRowIndices.indexOf(cursorRowIdx);
85
- const next = (cur + direction + itemRowIndices.length) % itemRowIndices.length;
86
- cursorRowIdx = itemRowIndices[next];
87
- render();
88
- }
89
- function toggleAll() {
90
- if (selected.size === items.length) {
91
- selected.clear();
92
- } else {
93
- items.forEach((_, idx) => selected.add(idx));
94
- }
95
- render();
96
- }
97
- function onData(key) {
98
- if (key === "\x1B[A" || key === "k") {
99
- moveCursor(-1);
100
- } else if (key === "\x1B[B" || key === "j") {
101
- moveCursor(1);
102
- } else if (key === " ") {
103
- const row = rows[cursorRowIdx];
104
- if (row.kind === "item") {
105
- const idx = row.itemIndex;
106
- if (selected.has(idx)) selected.delete(idx);
107
- else selected.add(idx);
108
- render();
109
- }
110
- } else if (key === "a" || key === "A") {
111
- toggleAll();
112
- } else if (key === "\r" || key === "\n") {
113
- if (selected.size === 0) {
114
- stderr.write("\x07");
115
- return;
116
- }
117
- cleanup();
118
- const result = Array.from(selected).map((i) => items[i].value);
119
- resolve(result);
120
- } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
121
- cleanup();
122
- reject(new MultiselectCancelled());
123
- }
124
- }
125
- stdin.on("data", onData);
126
- render();
127
- });
128
- }
129
- function promptSingleCheckboxSelect(opts) {
130
- const { title, items } = opts;
131
- if (items.length === 0) return Promise.reject(new Error("No items to select"));
132
- const stderr = process.stderr;
133
- const stdin = process.stdin;
134
- if (!stdin.isTTY) return Promise.reject(new Error("A TTY is required for single-select"));
135
- const preselectedIndex = items.findIndex((item) => item.preselected);
136
- let cursor = preselectedIndex >= 0 ? preselectedIndex : 0;
137
- let selected = preselectedIndex >= 0 ? preselectedIndex : null;
138
- let renderCount = 0;
139
- const lines = items.length + 2;
140
- function render() {
141
- if (renderCount > 0) stderr.write(`\x1B[${lines}A`);
142
- stderr.write(`${title} (space: select \xB7 enter: confirm \xB7 q: cancel)\x1B[K
143
- `);
144
- stderr.write(`\x1B[K
145
- `);
146
- items.forEach((it, idx) => {
147
- const pointer = idx === cursor ? "\x1B[36m\u276F\x1B[0m" : " ";
148
- const checkbox = selected === idx ? "\x1B[32m[x]\x1B[0m" : "[ ]";
149
- const hint = it.hint ? ` \x1B[90m${it.hint}\x1B[0m` : "";
150
- stderr.write(`${pointer} ${checkbox} ${it.label}${hint}\x1B[K
151
- `);
152
- });
153
- renderCount++;
154
- }
155
- return new Promise((resolve, reject) => {
156
- stderr.write("\x1B[?25l");
157
- stdin.setRawMode(true);
158
- stdin.resume();
159
- stdin.setEncoding("utf8");
160
- function cleanup() {
161
- stdin.setRawMode(false);
162
- stdin.pause();
163
- stdin.removeListener("data", onData);
164
- stderr.write("\x1B[?25h");
165
- }
166
- function moveCursor(direction) {
167
- cursor = (cursor + direction + items.length) % items.length;
168
- render();
169
- }
170
- function onData(key) {
171
- if (key === "\x1B[A" || key === "k") {
172
- moveCursor(-1);
173
- } else if (key === "\x1B[B" || key === "j") {
174
- moveCursor(1);
175
- } else if (key === " ") {
176
- selected = cursor;
177
- render();
178
- } else if (key === "\r" || key === "\n") {
179
- if (selected === null) {
180
- stderr.write("\x07");
181
- return;
182
- }
183
- cleanup();
184
- resolve(items[selected].value);
185
- } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
186
- cleanup();
187
- reject(new MultiselectCancelled());
188
- }
189
- }
190
- stdin.on("data", onData);
191
- render();
192
- });
193
- }
194
- function promptSingleSelect(opts) {
195
- const { title, items } = opts;
196
- if (items.length === 0) return Promise.reject(new Error("No items to select"));
197
- const stderr = process.stderr;
198
- const stdin = process.stdin;
199
- if (!stdin.isTTY) return Promise.reject(new Error("A TTY is required for single-select"));
200
- let cursor = 0;
201
- let renderCount = 0;
202
- const lines = items.length + 1;
203
- function render() {
204
- if (renderCount > 0) stderr.write(`\x1B[${lines}A`);
205
- stderr.write(`${title}\x1B[K
206
- `);
207
- items.forEach((it, idx) => {
208
- const pointer = idx === cursor ? "\x1B[36m\u276F\x1B[0m" : " ";
209
- stderr.write(`${pointer} ${it.label}\x1B[K
210
- `);
211
- });
212
- renderCount++;
213
- }
214
- return new Promise((resolve, reject) => {
215
- stderr.write("\x1B[?25l");
216
- stdin.setRawMode(true);
217
- stdin.resume();
218
- stdin.setEncoding("utf8");
219
- function cleanup() {
220
- stdin.setRawMode(false);
221
- stdin.pause();
222
- stdin.removeListener("data", onData);
223
- stderr.write("\x1B[?25h");
224
- }
225
- function onData(key) {
226
- if (key === "\x1B[A" || key === "k") {
227
- cursor = (cursor - 1 + items.length) % items.length;
228
- render();
229
- } else if (key === "\x1B[B" || key === "j") {
230
- cursor = (cursor + 1) % items.length;
231
- render();
232
- } else if (key === "\r" || key === "\n") {
233
- cleanup();
234
- resolve(items[cursor].value);
235
- } else if (key === "q" || key === "Q" || key === "\x1B" || key === "") {
236
- cleanup();
237
- reject(new MultiselectCancelled());
238
- }
239
- }
240
- stdin.on("data", onData);
241
- render();
242
- });
243
- }
244
-
245
1
  // src/commands/sync/scanners.ts
246
2
  import { createHash } from "crypto";
247
3
  import { readdirSync, readFileSync as readFileSync2, statSync, lstatSync, existsSync as existsSync2, realpathSync } from "fs";
@@ -533,10 +289,6 @@ function describeSource(_c) {
533
289
  }
534
290
 
535
291
  export {
536
- MultiselectCancelled,
537
- promptMultiselect,
538
- promptSingleCheckboxSelect,
539
- promptSingleSelect,
540
292
  SKILL_MANIFEST_FILE,
541
293
  readSkillManifestEntries,
542
294
  writeSkillManifestEntries,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-LYVNONC4.js";
3
+ } from "./chunk-JHENBQ5B.js";
4
4
 
5
5
  // src/core/json-utils.ts
6
6
  import fs from "fs";
@@ -105,7 +105,7 @@ function readSandboxCliTokenEntry() {
105
105
  const data = safeReadJsonFile(file);
106
106
  if (data && typeof data === "object" && !Array.isArray(data)) {
107
107
  const url = data.url;
108
- const token = data.token;
108
+ const token = data.token ?? data["cli-token"];
109
109
  if (url && token) {
110
110
  return { url, token };
111
111
  }
@@ -210,6 +210,7 @@ function setActiveHost(url) {
210
210
  }
211
211
  function addHost(url, label) {
212
212
  url = normalizeUrl(url);
213
+ label = normalizeLabel(label);
213
214
  const config = loadConfig();
214
215
  assertUniqueHostLabel(config, label, url);
215
216
  config.hosts[url] = { label };
@@ -218,6 +219,24 @@ function addHost(url, label) {
218
219
  }
219
220
  saveConfig(config);
220
221
  }
222
+ function updateHostLabel(url, label) {
223
+ url = normalizeUrl(url);
224
+ label = normalizeLabel(label);
225
+ const config = loadConfig();
226
+ if (!config.hosts[url]) {
227
+ throw new Error(`Host is not configured: ${url}`);
228
+ }
229
+ assertUniqueHostLabel(config, label, url);
230
+ config.hosts[url].label = label;
231
+ saveConfig(config);
232
+ }
233
+ function normalizeLabel(label) {
234
+ const normalized = label.trim();
235
+ if (!normalized) {
236
+ throw new Error("Label cannot be empty.");
237
+ }
238
+ return normalized;
239
+ }
221
240
  function assertUniqueHostLabel(config, label, excludeUrl) {
222
241
  const duplicate = Object.entries(config.hosts).find(([url, entry]) => url !== excludeUrl && entry.label === label);
223
242
  if (duplicate) {
@@ -242,6 +261,17 @@ function listHosts() {
242
261
  active: url === config.activeHost
243
262
  }));
244
263
  }
264
+ function resolveHostSelector(env) {
265
+ const raw = env.trim();
266
+ const selector = raw.startsWith("http://") || raw.startsWith("https://") ? normalizeUrl(raw) : raw;
267
+ const hosts = listHosts();
268
+ const byUrl = hosts.find((host) => host.url === selector);
269
+ if (byUrl) return { status: "found", host: byUrl };
270
+ const byLabel = hosts.filter((host) => host.label === raw);
271
+ if (byLabel.length === 1) return { status: "found", host: byLabel[0] };
272
+ if (byLabel.length > 1) return { status: "duplicate-label", matches: byLabel };
273
+ return { status: "not-found", hosts };
274
+ }
245
275
  function getConfigDir() {
246
276
  return CONFIG_DIR;
247
277
  }
@@ -259,7 +289,9 @@ export {
259
289
  getActiveHost,
260
290
  setActiveHost,
261
291
  addHost,
292
+ updateHostLabel,
262
293
  removeHost,
263
294
  listHosts,
295
+ resolveHostSelector,
264
296
  getConfigDir
265
297
  };
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  clearCliToken,
3
3
  getCliToken
4
- } from "./chunk-E7UXXHO3.js";
4
+ } from "./chunk-Z3OXWCIA.js";
5
5
  import {
6
6
  safeJsonParse
7
- } from "./chunk-V6FR6WTW.js";
7
+ } from "./chunk-GJJA4CQZ.js";
8
8
  import {
9
9
  PermissionError
10
- } from "./chunk-24BAVOX3.js";
10
+ } from "./chunk-AXDXJTPC.js";
11
11
  import {
12
12
  logger
13
- } from "./chunk-LYVNONC4.js";
13
+ } from "./chunk-JHENBQ5B.js";
14
14
 
15
15
  // src/core/capability-api.ts
16
16
  import { readFile } from "fs/promises";
@@ -52,6 +52,14 @@ async function permissionMessage(resp) {
52
52
  }
53
53
  return "Permission denied for this resource (HTTP 403)";
54
54
  }
55
+ async function permissionError(resp) {
56
+ const codeResponse = resp.clone();
57
+ const message = await permissionMessage(resp);
58
+ const body = safeJsonParse(await codeResponse.text());
59
+ const error = isRecord(body?.error) ? body.error : void 0;
60
+ const code = nonEmptyString(error?.code) ?? nonEmptyString(body?.code);
61
+ return new PermissionError(message, code);
62
+ }
55
63
  function isInvalidCliTokenMessage(message) {
56
64
  return /\byour token is invalid\b/i.test(message) || /\bcli[-_\s]?token\b.*\binvalid\b/i.test(message) || /\binvalid\b.*\bcli[-_\s]?token\b/i.test(message);
57
65
  }
@@ -149,22 +157,26 @@ async function requestMultipartOnce(url, token, form) {
149
157
  body: form
150
158
  });
151
159
  }
152
- async function callGateway(host, domain, pathAfterV1, method, body, queryParams = {}) {
153
- return (await callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams)).data;
160
+ async function callGateway(host, domain, pathAfterV1, method, body, queryParams = {}, options = {}) {
161
+ return (await callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams, options)).data;
154
162
  }
155
- async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams = {}) {
156
- const url = buildCapabilityGatewayUrl(host, domain, pathAfterV1, queryParams);
163
+ async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body, queryParams = {}, options = {}) {
164
+ const url = buildCapabilityGatewayUrl(options.apiBaseUrl ?? host, domain, pathAfterV1, queryParams);
157
165
  const token = await getCliToken(host);
158
166
  let resp = await requestOnce(url, method, token, body);
159
167
  let permissionMsg;
160
168
  if (resp.status === 403) {
161
- permissionMsg = await permissionMessage(resp);
169
+ const error = await permissionError(resp);
170
+ permissionMsg = error.message;
162
171
  if (!isInvalidCliTokenMessage(permissionMsg)) {
163
- throw new PermissionError(permissionMsg);
172
+ throw error;
164
173
  }
165
174
  }
166
- if (resp.status === 401 || resp.status === 403 && permissionMsg) {
167
- logger.warn(`Capability gateway request failed (${resp.status === 403 ? permissionMsg : "HTTP 401"}) for ${host}, refreshing CLI token`);
175
+ if (resp.status === 401) {
176
+ if (options.retryOnUnauthorized === false) {
177
+ await throwCapabilityHttpError(resp);
178
+ }
179
+ logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
168
180
  clearCliToken(host);
169
181
  const newToken = await getCliToken(host);
170
182
  process.stderr.write(`[ae-cli] CLI token refreshed for ${host}
@@ -176,6 +188,19 @@ async function callGatewayWithEnvelope(host, domain, pathAfterV1, method, body,
176
188
  if (!resp.ok) {
177
189
  await throwCapabilityHttpError(resp);
178
190
  }
191
+ } else if (resp.status === 403 && permissionMsg) {
192
+ logger.warn(`Capability gateway request failed (${permissionMsg}) for ${host}, refreshing CLI token`);
193
+ clearCliToken(host);
194
+ const newToken = await getCliToken(host);
195
+ process.stderr.write(`[ae-cli] CLI token refreshed for ${host}
196
+ `);
197
+ resp = await requestOnce(url, method, newToken, body);
198
+ if (resp.status === 403) {
199
+ throw await permissionError(resp);
200
+ }
201
+ if (!resp.ok) {
202
+ await throwCapabilityHttpError(resp);
203
+ }
179
204
  } else if (!resp.ok) {
180
205
  await throwCapabilityHttpError(resp);
181
206
  }
@@ -186,7 +211,7 @@ async function fetchCapabilityGateway(host, domain, pathAfterV1, method = "GET",
186
211
  const token = await getCliToken(host);
187
212
  let resp = await requestOnce(url, method, token, body, accept);
188
213
  if (resp.status === 403) {
189
- throw new PermissionError(await permissionMessage(resp));
214
+ throw await permissionError(resp);
190
215
  }
191
216
  if (resp.status === 401) {
192
217
  logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
@@ -196,7 +221,7 @@ async function fetchCapabilityGateway(host, domain, pathAfterV1, method = "GET",
196
221
  `);
197
222
  resp = await requestOnce(url, method, newToken, body, accept);
198
223
  if (resp.status === 403) {
199
- throw new PermissionError(await permissionMessage(resp));
224
+ throw await permissionError(resp);
200
225
  }
201
226
  if (!resp.ok) {
202
227
  await throwCapabilityHttpError(resp);
@@ -275,7 +300,7 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
275
300
  const token = await getCliToken(host);
276
301
  let resp = await requestMultipartOnce(url, token, form);
277
302
  if (resp.status === 403) {
278
- throw new PermissionError(await permissionMessage(resp));
303
+ throw await permissionError(resp);
279
304
  }
280
305
  if (resp.status === 401) {
281
306
  logger.warn(`Capability gateway request failed (HTTP 401) for ${host}, refreshing CLI token`);
@@ -285,7 +310,7 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
285
310
  `);
286
311
  resp = await requestMultipartOnce(url, newToken, form);
287
312
  if (resp.status === 403) {
288
- throw new PermissionError(await permissionMessage(resp));
313
+ throw await permissionError(resp);
289
314
  }
290
315
  if (!resp.ok) {
291
316
  await throwCapabilityHttpError(resp);
@@ -295,6 +320,13 @@ async function uploadInputFileBytes(host, domain, projectId, purpose, bytes, fil
295
320
  }
296
321
  return unwrapCapabilityEnvelope(parseCapabilityResponse(await resp.text()));
297
322
  }
323
+ async function callCapabilityApi(host, domain, action, method = "POST", params = {}, options = {}) {
324
+ const isGet = method === "GET";
325
+ if (isGet) {
326
+ return callGateway(host, domain, action.replace(/^\/+|\/+$/g, ""), "GET", void 0, {}, options);
327
+ }
328
+ return callGateway(host, domain, action.replace(/^\/+|\/+$/g, ""), method, params, {}, options);
329
+ }
298
330
 
299
331
  export {
300
332
  CapabilityGatewayError,
@@ -309,5 +341,6 @@ export {
309
341
  dryRunCapability,
310
342
  validateCapability,
311
343
  uploadInputFile,
312
- uploadInputFileBytes
344
+ uploadInputFileBytes,
345
+ callCapabilityApi
313
346
  };
@@ -1,3 +1,35 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+
1
33
  // src/core/logger.ts
2
34
  import fs from "fs";
3
35
  import path from "path";
@@ -82,5 +114,8 @@ var Logger = class {
82
114
  var logger = new Logger();
83
115
 
84
116
  export {
117
+ __require,
118
+ __commonJS,
119
+ __toESM,
85
120
  logger
86
121
  };
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  getAnalysisMappingPathForClusterMode
3
- } from "./chunk-LCXU3AAT.js";
3
+ } from "./chunk-NBPKWKRA.js";
4
4
  import {
5
5
  clearCliToken,
6
6
  getCliToken
7
- } from "./chunk-E7UXXHO3.js";
7
+ } from "./chunk-Z3OXWCIA.js";
8
8
  import {
9
9
  getActiveHost,
10
10
  safeJsonParse
11
- } from "./chunk-V6FR6WTW.js";
11
+ } from "./chunk-GJJA4CQZ.js";
12
12
  import {
13
13
  PermissionError
14
- } from "./chunk-24BAVOX3.js";
14
+ } from "./chunk-AXDXJTPC.js";
15
15
  import {
16
16
  logger
17
- } from "./chunk-LYVNONC4.js";
17
+ } from "./chunk-JHENBQ5B.js";
18
18
 
19
19
  // src/core/mcp.ts
20
20
  async function permissionMessage(resp) {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getSandboxClusterInfoFilePath,
3
3
  safeReadJsonFile
4
- } from "./chunk-V6FR6WTW.js";
4
+ } from "./chunk-GJJA4CQZ.js";
5
5
  import {
6
6
  logger
7
- } from "./chunk-LYVNONC4.js";
7
+ } from "./chunk-JHENBQ5B.js";
8
8
 
9
9
  // src/core/cluster-info.ts
10
10
  import fs from "fs";