@thinkingai/ae-cli 6.0.18 → 6.0.20

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 (64) hide show
  1. package/README.md +7 -6
  2. package/README.zh.md +8 -7
  3. package/dist/index.js +11 -6
  4. package/dist/{te-agent-KZRIEN4N.js → te-agent-CYZUC4US.js} +543 -19
  5. package/dist/{te-analysis-VAR4KUOK.js → te-analysis-HJ22TUAA.js} +318 -40
  6. package/dist/te-audience-MYDE5WEH.js +590 -0
  7. package/dist/te-dataops-ZTS7XMXM.js +1842 -0
  8. package/dist/{te-kb-B62KFP2A.js → te-kb-OWM3RQRH.js} +46 -21
  9. package/dist/{te-meta-EPZGQN56.js → te-meta-JVO4QJBH.js} +28 -11
  10. package/package.json +1 -1
  11. package/skills/ae-agent/SKILL.md +103 -4
  12. package/skills/ae-analysis/SKILL.md +66 -19
  13. package/skills/ae-analysis/references/build_attribution_analysis_qp.md +60 -0
  14. package/skills/ae-analysis/references/build_cluster_definition.md +60 -0
  15. package/skills/ae-analysis/references/build_distribution_analysis_qp.md +65 -0
  16. package/skills/ae-analysis/references/build_heat_map_analysis_qp.md +52 -0
  17. package/skills/ae-analysis/references/build_interval_analysis_qp.md +58 -0
  18. package/skills/ae-analysis/references/build_path_analysis_qp.md +51 -0
  19. package/skills/ae-analysis/references/build_rank_list_analysis_qp.md +61 -0
  20. package/skills/ae-analysis/references/build_tag_definition.md +63 -0
  21. package/skills/ae-analysis/references/cancel_query.md +2 -3
  22. package/skills/ae-analysis/references/copy_dashboard.md +33 -0
  23. package/skills/ae-analysis/references/create_id_cluster.md +40 -0
  24. package/skills/ae-analysis/references/create_id_tag.md +39 -0
  25. package/skills/ae-analysis/references/delete_alert.md +27 -0
  26. package/skills/ae-analysis/references/delete_cluster.md +27 -0
  27. package/skills/ae-analysis/references/delete_dashboard.md +30 -0
  28. package/skills/ae-analysis/references/delete_metric.md +27 -0
  29. package/skills/ae-analysis/references/delete_report.md +27 -0
  30. package/skills/ae-analysis/references/delete_tag.md +27 -0
  31. package/skills/ae-analysis/references/drilldown_user_events.md +4 -4
  32. package/skills/ae-analysis/references/drilldown_users.md +3 -3
  33. package/skills/ae-analysis/references/freeze_dashboards.md +29 -0
  34. package/skills/ae-analysis/references/get_table_columns.md +11 -12
  35. package/skills/ae-analysis/references/list_cluster_members.md +4 -4
  36. package/skills/ae-analysis/references/list_clusters.md +3 -3
  37. package/skills/ae-analysis/references/list_dashboards.md +3 -3
  38. package/skills/ae-analysis/references/list_entities.md +1 -1
  39. package/skills/ae-analysis/references/list_events.md +3 -3
  40. package/skills/ae-analysis/references/list_metrics.md +2 -2
  41. package/skills/ae-analysis/references/list_properties.md +3 -3
  42. package/skills/ae-analysis/references/list_reports.md +3 -3
  43. package/skills/ae-analysis/references/list_spaces.md +27 -0
  44. package/skills/ae-analysis/references/list_tag_members.md +4 -4
  45. package/skills/ae-analysis/references/list_tags.md +2 -2
  46. package/skills/ae-analysis/references/move_dashboard.md +33 -0
  47. package/skills/ae-analysis/references/query_adhoc.md +2 -2
  48. package/skills/ae-analysis/references/query_bi_panel_data.md +2 -2
  49. package/skills/ae-analysis/references/query_dashboard_report_data.md +4 -4
  50. package/skills/ae-analysis/references/query_entity_details.md +4 -4
  51. package/skills/ae-analysis/references/query_event_details.md +3 -3
  52. package/skills/ae-analysis/references/query_report_data.md +37 -3
  53. package/skills/ae-analysis/references/update_id_cluster.md +36 -0
  54. package/skills/ae-analysis/references/update_id_tag.md +37 -0
  55. package/skills/ae-analysis/references/update_report.md +35 -0
  56. package/skills/ae-analysis-intent/SKILL.md +1 -1
  57. package/skills/ae-dataops/SKILL.md +54 -522
  58. package/skills/ae-dataops/references/dataops-flow-create.md +78 -75
  59. package/skills/ae-dataops/references/dataops-flow-monitor.md +58 -51
  60. package/skills/ae-dataops/references/dataops-integration.md +80 -41
  61. package/skills/ae-dataops/references/dataops-query.md +54 -53
  62. package/skills/ae-dataops/references/dataops-table.md +28 -59
  63. package/dist/te-audience-KMKYI2YJ.js +0 -400
  64. package/dist/te-dataops-GD3XBYCS.js +0 -1830
@@ -447,9 +447,32 @@ var schema = {
447
447
  execute: async (ctx) => kbApi(ctx, "POST", API_PATH7, {}, buildBody6(ctx))
448
448
  };
449
449
 
450
- // src/commands/te-kb/kb-index.ts
451
- var API_PATH8 = "/agent/api/external/knowledge-bases/index";
450
+ // src/commands/te-kb/status.ts
451
+ var API_PATH8 = "/agent/api/external/knowledge-bases/status";
452
452
  function buildBody7(ctx) {
453
+ return {
454
+ name: ctx.str("name")
455
+ };
456
+ }
457
+ var status = {
458
+ service: "kb",
459
+ command: "+status",
460
+ description: "Query knowledge base status.",
461
+ flags: [
462
+ { name: "name", type: "string", required: true, desc: "Knowledge base name" }
463
+ ],
464
+ risk: "read",
465
+ dryRun: (ctx) => ({
466
+ method: "POST",
467
+ url: `${ctx.host().replace(/\/$/, "")}${API_PATH8}`,
468
+ body: buildBody7(ctx)
469
+ }),
470
+ execute: async (ctx) => kbApi(ctx, "POST", API_PATH8, {}, buildBody7(ctx))
471
+ };
472
+
473
+ // src/commands/te-kb/kb-index.ts
474
+ var API_PATH9 = "/agent/api/external/knowledge-bases/index";
475
+ function buildBody8(ctx) {
453
476
  const body = {};
454
477
  const sources = ctx.json("sources");
455
478
  if (sources) body.sources = sources;
@@ -473,15 +496,15 @@ var kbIndex = {
473
496
  risk: "read",
474
497
  dryRun: (ctx) => ({
475
498
  method: "POST",
476
- url: `${ctx.host().replace(/\/$/, "")}${API_PATH8}`,
477
- body: buildBody7(ctx)
499
+ url: `${ctx.host().replace(/\/$/, "")}${API_PATH9}`,
500
+ body: buildBody8(ctx)
478
501
  }),
479
- execute: async (ctx) => kbApi(ctx, "POST", API_PATH8, {}, buildBody7(ctx))
502
+ execute: async (ctx) => kbApi(ctx, "POST", API_PATH9, {}, buildBody8(ctx))
480
503
  };
481
504
 
482
505
  // src/commands/te-kb/kb-grep.ts
483
- var API_PATH9 = "/agent/api/external/knowledge-bases/grep";
484
- function buildBody8(ctx) {
506
+ var API_PATH10 = "/agent/api/external/knowledge-bases/grep";
507
+ function buildBody9(ctx) {
485
508
  const body = {
486
509
  query: ctx.str("query")
487
510
  };
@@ -517,15 +540,15 @@ var kbGrep = {
517
540
  risk: "read",
518
541
  dryRun: (ctx) => ({
519
542
  method: "POST",
520
- url: `${ctx.host().replace(/\/$/, "")}${API_PATH9}`,
521
- body: buildBody8(ctx)
543
+ url: `${ctx.host().replace(/\/$/, "")}${API_PATH10}`,
544
+ body: buildBody9(ctx)
522
545
  }),
523
- execute: async (ctx) => kbApi(ctx, "POST", API_PATH9, {}, buildBody8(ctx))
546
+ execute: async (ctx) => kbApi(ctx, "POST", API_PATH10, {}, buildBody9(ctx))
524
547
  };
525
548
 
526
549
  // src/commands/te-kb/kb-read.ts
527
- var API_PATH10 = "/agent/api/external/knowledge-bases/read";
528
- function buildBody9(ctx) {
550
+ var API_PATH11 = "/agent/api/external/knowledge-bases/read";
551
+ function buildBody10(ctx) {
529
552
  const body = {
530
553
  source: ctx.json("source"),
531
554
  path: ctx.str("path")
@@ -562,14 +585,14 @@ var kbRead = {
562
585
  risk: "read",
563
586
  dryRun: (ctx) => ({
564
587
  method: "POST",
565
- url: `${ctx.host().replace(/\/$/, "")}${API_PATH10}`,
566
- body: buildBody9(ctx)
588
+ url: `${ctx.host().replace(/\/$/, "")}${API_PATH11}`,
589
+ body: buildBody10(ctx)
567
590
  }),
568
- execute: async (ctx) => kbApi(ctx, "POST", API_PATH10, {}, buildBody9(ctx))
591
+ execute: async (ctx) => kbApi(ctx, "POST", API_PATH11, {}, buildBody10(ctx))
569
592
  };
570
593
 
571
594
  // src/commands/te-kb/ask.ts
572
- var API_PATH11 = "/agent/api/external/knowledge-bases/ask";
595
+ var API_PATH12 = "/agent/api/external/knowledge-bases/ask";
573
596
  var VALID_LOCALES = /* @__PURE__ */ new Set(["zh", "en", "ja", "ko"]);
574
597
  var MIN_QUESTION_LEN = 1;
575
598
  var MAX_QUESTION_LEN = 2e3;
@@ -595,7 +618,7 @@ function validateMaxTurns(maxTurns) {
595
618
  );
596
619
  }
597
620
  }
598
- function buildBody10(ctx) {
621
+ function buildBody11(ctx) {
599
622
  const body = {
600
623
  question: ctx.str("question")
601
624
  };
@@ -649,10 +672,10 @@ var ask = {
649
672
  },
650
673
  dryRun: (ctx) => ({
651
674
  method: "POST",
652
- url: `${ctx.host().replace(/\/$/, "")}${API_PATH11}`,
653
- body: buildBody10(ctx)
675
+ url: `${ctx.host().replace(/\/$/, "")}${API_PATH12}`,
676
+ body: buildBody11(ctx)
654
677
  }),
655
- execute: async (ctx) => kbApi(ctx, "POST", API_PATH11, {}, buildBody10(ctx))
678
+ execute: async (ctx) => kbApi(ctx, "POST", API_PATH12, {}, buildBody11(ctx))
656
679
  };
657
680
 
658
681
  // src/commands/te-kb/index.ts
@@ -665,6 +688,7 @@ var commands = [
665
688
  create,
666
689
  rmSource,
667
690
  schema,
691
+ status,
668
692
  kbIndex,
669
693
  kbGrep,
670
694
  kbRead
@@ -682,5 +706,6 @@ export {
682
706
  query,
683
707
  remove,
684
708
  rmSource,
685
- schema
709
+ schema,
710
+ status
686
711
  };
@@ -60,11 +60,11 @@ function requiredJsonString(ctx, name) {
60
60
  // src/commands/te-meta/meta/list-events.ts
61
61
  var listEvents = createMcpCommand({
62
62
  command: "+list_events",
63
- description: "List events in the project. Use for explicit metadata inspection, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders; the builders resolve event names internally. Query performs fuzzy matching on eventName, eventDesc and aiRemark. Supports fields/limit/offset payload governance.",
63
+ description: "List events in the project. Use for explicit metadata inspection, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders; the builders resolve event names internally. Query performs fuzzy matching on eventName, eventDesc, and remark. Supports fields/limit/offset payload governance. Default returned fields: eventId, eventName, eventDesc, remark.",
64
64
  flags: [
65
65
  { name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
66
- { name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to eventName, eventDesc, and aiRemark; if omitted, all events are returned.", alias: "q" },
67
- { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: eventName, eventDesc, aiRemark, eventTag, remark.", alias: "f" },
66
+ { name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to eventName, eventDesc, and remark; if omitted, all events are returned.", alias: "q" },
67
+ { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: eventId, eventName, eventDesc, remark, eventTag. Default fields when omitted: eventId, eventName, eventDesc, remark.", alias: "f" },
68
68
  { name: "limit", type: "number", required: false, desc: "Optional page size. Default: 20, maximum: 10000.", alias: "l" },
69
69
  { name: "offset", type: "number", required: false, desc: "Optional page offset. Default: 0.", alias: "o" }
70
70
  ],
@@ -81,13 +81,13 @@ var listEvents = createMcpCommand({
81
81
  // src/commands/te-meta/meta/list-properties.ts
82
82
  var listProperties = createMcpCommand({
83
83
  command: "+list_properties",
84
- description: "List properties in the project. Use for explicit metadata inspection, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders; the builders resolve property names internally. Query performs fuzzy matching on propName, propDesc and aiRemark. Supports fields/limit/offset payload governance.",
84
+ description: "List properties in the project. Use for explicit metadata inspection, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders; the builders resolve property names internally. Query performs fuzzy matching on propName, propDesc, and remark. Supports fields/limit/offset payload governance. Default returned fields: propId, propName, propDesc, remark, selectType, tableType.",
85
85
  flags: [
86
86
  { name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
87
87
  { name: "scope", type: "string", required: false, desc: "Property scope: event or user" },
88
88
  { name: "event_name", type: "string", required: false, desc: "Optional event name filter" },
89
- { name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to propName, propDesc, and aiRemark; if omitted, all accessible properties are returned.", alias: "q" },
90
- { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: propName, propDesc, aiRemark, selectType, tableType, subTableType.", alias: "f" },
89
+ { name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to propName, propDesc, and remark; if omitted, all accessible properties are returned.", alias: "q" },
90
+ { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: propId, propName, propDesc, remark, selectType, tableType, subTableType. Default fields when omitted: propId, propName, propDesc, remark, selectType, tableType.", alias: "f" },
91
91
  { name: "limit", type: "number", required: false, desc: "Optional page size. Default: 20, maximum: 10000.", alias: "l" },
92
92
  { name: "offset", type: "number", required: false, desc: "Optional page offset. Default: 0.", alias: "o" }
93
93
  ],
@@ -200,11 +200,11 @@ var createVirtualProperty = createMcpCommand({
200
200
  // src/commands/te-meta/meta/list-metrics.ts
201
201
  var listMetrics = createMcpCommand({
202
202
  command: "+list_metrics",
203
- description: "List metric metadata in the project. Use for metric metadata inspection/management, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders. For event saved metric queries, pass the metric name directly to +build_event_analysis_qp in metrics[].event. Query performs fuzzy matching on metricName, metricDesc, and metricRemark. Supports fields/limit/offset pagination.",
203
+ description: "List metric metadata in the project. Use for metric metadata inspection/management, not as a pre-step for event/retention/funnel/prop_analysis ad-hoc builders. For event saved metric queries, pass the metric name directly to +build_event_analysis_qp in metrics[].event. Query performs fuzzy matching on metricName, metricDesc, and metricRemark. Supports fields/limit/offset pagination. Default returned fields: metricId, metricName, metricDesc, metricRemark, metricMode.",
204
204
  flags: [
205
205
  { name: "project_id", type: "number", required: true, alias: "p", desc: "Project ID" },
206
206
  { name: "query", type: "string", required: false, alias: "q", desc: "Optional keyword filter. Fuzzy match on metricName, metricDesc, metricRemark." },
207
- { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported: metricId, metricName, metricDesc, metricRemark, metricMode, openId, creator, creatorLoginName, updateOpenId, updateCreator, updateLoginName, createTime, updateTime." },
207
+ { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported: metricId, metricName, metricDesc, metricRemark, metricMode, openId, creator, creatorLoginName, updateOpenId, updateCreator, updateLoginName, createTime, updateTime. Default fields when omitted: metricId, metricName, metricDesc, metricRemark, metricMode." },
208
208
  { name: "limit", type: "number", required: false, desc: "Optional limit. Default: 20, maximum: 10000." },
209
209
  { name: "offset", type: "number", required: false, desc: "Optional offset. Default: 0." }
210
210
  ],
@@ -289,6 +289,22 @@ var updateMetric = createMcpCommand({
289
289
  })
290
290
  });
291
291
 
292
+ // src/commands/te-meta/meta/delete-metric.ts
293
+ var deleteMetric = createMcpCommand({
294
+ command: "+delete_metric",
295
+ description: "Delete a metric by metricId",
296
+ flags: [
297
+ { name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
298
+ { name: "metric_id", type: "number", required: true, desc: "Metric ID to delete" }
299
+ ],
300
+ risk: "write",
301
+ mcpService: "te_analysis_extend",
302
+ buildArgs: (ctx) => ({
303
+ projectId: ctx.num("project_id"),
304
+ metricId: ctx.num("metric_id")
305
+ })
306
+ });
307
+
292
308
  // src/commands/te-meta/meta/index.ts
293
309
  var commands = [
294
310
  listEvents,
@@ -300,7 +316,8 @@ var commands = [
300
316
  listMetrics,
301
317
  getMetric,
302
318
  createMetric,
303
- updateMetric
319
+ updateMetric,
320
+ deleteMetric
304
321
  ];
305
322
  var meta_default = commands;
306
323
 
@@ -515,12 +532,12 @@ var project_default = commands2;
515
532
  // src/commands/te-meta/entity/list-entities.ts
516
533
  var listEntities = createMcpCommand({
517
534
  command: "+list_entities",
518
- description: "List entities in the project. Query performs fuzzy matching on entityName, columnName and columnDesc. Supports fields/limit/offset payload governance.",
535
+ description: "List entities in the project. Query performs fuzzy matching on entityName, columnName and columnDesc. Supports fields/limit/offset payload governance. Default returned fields: entityId, entityName, columnName, columnDesc, selectType. Entity metadata exposes columnDesc as the description field; no remark field is available in this list response.",
519
536
  flags: [
520
537
  { name: "project_id", type: "number", required: true, desc: "Project ID", alias: "p" },
521
538
  { name: "event_name", type: "string", required: false, desc: "Optional event name filter" },
522
539
  { name: "query", type: "string", required: false, desc: "Optional keyword filter. Fuzzy match is applied to entityName, columnName, and columnDesc; if omitted, all entities are returned.", alias: "q" },
523
- { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: entityId, entityName, columnName, columnDesc, selectType, tableType, entityType.", alias: "f" },
540
+ { name: "fields", type: "json", required: false, desc: "Optional fields to return. Supported fields: entityId, entityName, columnName, columnDesc, selectType, tableType, entityType. Default fields when omitted: entityId, entityName, columnName, columnDesc, selectType.", alias: "f" },
524
541
  { name: "limit", type: "number", required: false, desc: "Optional page size. Default: 20, maximum: 10000.", alias: "l" },
525
542
  { name: "offset", type: "number", required: false, desc: "Optional page offset. Default: 0.", alias: "o" }
526
543
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkingai/ae-cli",
3
- "version": "6.0.18",
3
+ "version": "6.0.20",
4
4
  "description": "CLI tool for ThinkingAI (AE) analytics platform",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ae-agent
3
- version: 1.0.0
4
- description: "AE Agent platform resource management CLI for listing Agents, creating and updating automations, adding/removing/listing/toggling custom models, MCP servers, Skills, and uploading sandbox files to the attachment library. Use when the user asks to manage Agent platform resources or create scheduled Agent automations. Must use ae-cli agent commands."
3
+ version: 1.1.0
4
+ description: "AE Agent platform resource management CLI for listing Agents, creating and updating automations, adding/removing/listing/toggling custom models, MCP servers, Skills, uploading sandbox files to the attachment library, browsing the MCP/Skill market, setting market category/icon, copying system/company Skills to personal, and submitting/approving/sharing Skills. Use when the user asks to manage Agent platform resources, browse the market, or create scheduled Agent automations. Must use ae-cli agent commands."
5
5
  ---
6
6
 
7
7
  # ae-agent
@@ -14,10 +14,10 @@ ae-cli agent +<command> [options]
14
14
 
15
15
  ## Global Rules
16
16
 
17
- - Use this skill for Agent platform resource management: Agents, automations, models, MCP servers, Skills, and attachments.
17
+ - Use this skill for Agent platform resource management: Agents, automations, models, MCP servers, Skills, attachments, the MCP/Skill market, and Skill copy/approval/share flows.
18
18
  - Read operations can run directly. Write operations require explicit user intent and normally keep the confirmation prompt unless `--yes` is passed.
19
19
  - Prefer `--dry-run` before destructive writes.
20
- - Only personal scope resources can be created or deleted; company/system resources are read-only in the CLI.
20
+ - Only personal scope resources can be created or deleted; company/system resources are read-only in the CLI (exception: root users can approve/reject submissions and set company-scope meta).
21
21
  - Toggle operations on company/system resources only affect the current user's preference, not the global state.
22
22
  - JSON flags must be valid JSON strings, usually wrapped in single quotes in shell.
23
23
  - Successful commands return JSON by default. Use `--format table` when a table is easier to scan.
@@ -64,6 +64,45 @@ ae-cli agent +<command> [options]
64
64
  | `+del-skill` | write | Delete a personal Skill (physical delete). |
65
65
  | `+toggle-skill` | write | Enable or disable a Skill. |
66
66
 
67
+ ### Market (browse)
68
+
69
+ | Command | Risk | Purpose |
70
+ | -------------------- | ----: | ------------------------------------------------------------------------ |
71
+ | `+list-mcp-market` | read | List MCP servers from the market (filter by scope/category/search/sort). |
72
+ | `+list-skill-market` | read | List Skills from the market (only approved; same filters). |
73
+
74
+ ### Category & Icon (meta)
75
+
76
+ | Command | Risk | Purpose |
77
+ | ----------------- | ----: | ----------------------------------------------------------------------------- |
78
+ | `+set-mcp-meta` | write | Update an MCP server market category/icon. Company requires root; system RO. |
79
+ | `+set-skill-meta` | write | Update a Skill market category/icon. Company requires root; system RO. |
80
+
81
+ ### Copy to personal
82
+
83
+ | Command | Risk | Purpose |
84
+ | ------------- | ----: | ---------------------------------------------------------------------- |
85
+ | `+copy-skill` | write | Copy a system/company Skill to a personal copy (independent duplicate). |
86
+
87
+ ### Skill Approval (company-scope publish)
88
+
89
+ | Command | Risk | Purpose |
90
+ | -------------------------- | ----: | ------------------------------------------------------------------ |
91
+ | `+submit-skill` | write | Submit a personal Skill for company-scope review. |
92
+ | `+list-skill-submissions` | read | List submissions (root sees all; others see only their own). |
93
+ | `+cancel-skill-submission` | write | Cancel a pending submission (submitter or root). |
94
+ | `+approve-skill` | write | Approve a submission (root only). Creates a company-scope copy. |
95
+ | `+reject-skill` | write | Reject a submission with a reason (root only). |
96
+
97
+ ### Skill Share (peer-to-peer)
98
+
99
+ | Command | Risk | Purpose |
100
+ | --------------------- | ----: | ----------------------------------------------------------------- |
101
+ | `+share-skill` | write | Share a personal Skill to a same-company user. |
102
+ | `+list-skill-shares` | read | List Skill shares (received by default; `--direction sent`). |
103
+ | `+accept-skill-share` | write | Accept a received share (creates a personal copy for recipient). |
104
+ | `+reject-skill-share` | write | Reject a received share. |
105
+
67
106
  ### Attachments
68
107
 
69
108
  | Command | Risk | Purpose |
@@ -129,6 +168,18 @@ ae-cli agent +add-mcp \
129
168
  --headers '{"Authorization":"Bearer token"}'
130
169
  ```
131
170
 
171
+ ### Add an MCP with a market category and icon
172
+
173
+ ```bash
174
+ ae-cli agent +add-mcp \
175
+ --name my-mcp \
176
+ --url "https://mcp.example.com/mcp" \
177
+ --transport http \
178
+ --headers '{"Authorization":"Bearer token"}' \
179
+ --category dev_tool \
180
+ --icon-emoji robot
181
+ ```
182
+
132
183
  ### Create a Skill with inline instructions
133
184
 
134
185
  ```bash
@@ -145,6 +196,49 @@ echo "You are a helpful assistant that..." | \
145
196
  ae-cli agent +add-skill --name helper --description "Helper skill" --instructions @-
146
197
  ```
147
198
 
199
+ ### Browse the market
200
+
201
+ ```bash
202
+ ae-cli agent +list-mcp-market --scope company --category dev_tool --sort calls
203
+ ae-cli agent +list-skill-market --search "code review" --sort newest --format table
204
+ ```
205
+
206
+ ### Set market category / icon
207
+
208
+ ```bash
209
+ ae-cli agent +set-mcp-meta --id <mcp-cuid> --category dev_tool --icon-emoji robot
210
+ ae-cli agent +set-skill-meta --id <skill-cuid> --category data_query
211
+ ```
212
+
213
+ ### Copy a system/company Skill to personal
214
+
215
+ ```bash
216
+ ae-cli agent +copy-skill --id <skill-cuid>
217
+ ae-cli agent +copy-skill --id <skill-cuid> --category dev_tool --icon-emoji robot
218
+ ```
219
+
220
+ ### Submit a Skill for company approval
221
+
222
+ ```bash
223
+ ae-cli agent +submit-skill --id <skill-cuid> --description "Code reviewer for the team"
224
+ ```
225
+
226
+ ### Review approvals (root)
227
+
228
+ ```bash
229
+ ae-cli agent +list-skill-submissions --status pending
230
+ ae-cli agent +approve-skill --id <submission-cuid>
231
+ ae-cli agent +reject-skill --id <submission-cuid> --reason "Needs more detail"
232
+ ```
233
+
234
+ ### Share a Skill peer-to-peer
235
+
236
+ ```bash
237
+ ae-cli agent +share-skill --id <skill-cuid> --to-user-id <user-id>
238
+ ae-cli agent +list-skill-shares --direction received --status pending
239
+ ae-cli agent +accept-skill-share --id <share-cuid>
240
+ ```
241
+
148
242
  ### Upload a single file to attachment library
149
243
 
150
244
  ```bash
@@ -172,3 +266,8 @@ ae-cli agent +toggle-model --id <model-cuid> --enabled false
172
266
  - Attachment upload supports files up to 50MB each, with a 1GB user quota.
173
267
  - Batch attachment uploads support partial success — individual file failures don't affect others.
174
268
  - Skill `--instructions @-` reads from stdin, useful for piping long instruction text.
269
+ - Market category keys: `ae_preset | dev_tool | search_tool | data_query | content_gen | enterprise | life | automation | other`. Sort options: `newest | calls | likes` (`calls` sorts MCP by call count, Skill by download count). Market scope: `all | system | company | custom` (`custom` = personal).
270
+ - `+add-mcp` / `+add-skill` accept optional `--category / --icon-emoji / --icon-color`; these are applied via a follow-up meta PATCH after creation. MCP creation still does NOT validate server connectivity.
271
+ - `+copy-skill` copies a system/company Skill to an independent personal copy. Optional `--category / --icon-emoji / --icon-color` override the copy's market meta; omit them to inherit the source's. MCP has no copy (use `+toggle-mcp` to enable a system/company MCP per-user).
272
+ - Approval and share flows are Skill-only; MCP has no approval or share. `+approve-skill` / `+reject-skill` require root.
273
+ - `--id` semantics differ by command: `+submit-skill` / `+share-skill` / `+copy-skill` take a Skill ID; `+cancel-skill-submission` / `+approve-skill` / `+reject-skill` take a submission ID; `+accept-skill-share` / `+reject-skill-share` take a share ID.