@epilot/cli 0.1.85 → 0.1.87

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.
package/README.md CHANGED
@@ -29,7 +29,7 @@ npm install -g @epilot/cli
29
29
 
30
30
  <!-- usage-help -->
31
31
  ```
32
- epilot v0.1.85 — CLI for epilot APIs
32
+ epilot v0.1.87 — CLI for epilot APIs
33
33
 
34
34
  USAGE
35
35
  epilot <api> <operationId> [params...] [flags]
@@ -2256,7 +2256,8 @@
2256
2256
  "type": "string",
2257
2257
  "enum": [
2258
2258
  "tab",
2259
- "group"
2259
+ "group",
2260
+ "widget"
2260
2261
  ]
2261
2262
  },
2262
2263
  "allowed_schemas": {
@@ -3711,7 +3712,7 @@
3711
3712
  },
3712
3713
  "require_password_confirmation": {
3713
3714
  "type": "boolean",
3714
- "description": "Whether the portal user must confirm their current password before the change email request is handed over to the third-party system. When true, the portal collects and verifies the current password before calling the hook. Treated as true when `change_mode` is `synchronous`, since the portal re-creates the login with the confirmed password. Skipped either way for portal users whose identity is managed by an identity provider: an SSO login has no password to confirm.\n",
3715
+ "description": "Whether the portal user must confirm their current password before the change email request is handed over to the third-party system. When true, the portal collects and verifies the current password before calling the hook. Skipped for portal users whose identity is managed by an identity provider: an SSO login has no password to confirm. When no password is confirmed and `change_mode` is `synchronous`, the re-created login gets a random password and the portal user signs in through their identity provider, or sets a new password via the email code flow.\n",
3715
3716
  "default": true
3716
3717
  },
3717
3718
  "explanation": {
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "Pricing API",
5
5
  "description": "The `pricing-api` hub sets the foundations for the following Pricing APIs:\n\n### Order API\nThis api enables the management of orders in epilot 360, providing features such as:\n - Automatic calculation of totals and price breakdowns for taxes on the Order entity\n - Product and pricing data validation\n\n### Shopping Cart API\nUsed to interact with a cart during a customer's checkout session, providing:\n - An unified data model to model a Shopping Cart\n - Product and pricing data validation\n - Checkout a cart into an order or quote\n\n### Catalog API\nProvides a way to query the entire catalog of products and prices.\n\n### Availability API\nProvides endpoints for querying products availability by a set of predefined dimensions.\n\n### Spot Market API\nProvides endpoints to fetch (historic) spot market price data.\n\n### External Integrations API\nProvides endpoints for external integrations. E.g. GetAG.\n\n### External Catalog API\nProvides endpoints for external catalog.\n\n### Product Recommendations API\nProvides endpoints for product recommendations.\n",
6
- "version": "1.2.0",
6
+ "version": "1.2.1",
7
7
  "termsOfService": "https://epilot.cloud/agb",
8
8
  "contact": {
9
9
  "name": "Support",
@@ -7749,6 +7749,9 @@
7749
7749
  "oneOf": [
7750
7750
  {
7751
7751
  "$ref": "#/components/schemas/Tax"
7752
+ },
7753
+ {
7754
+ "$ref": "#/components/schemas/TaxItem"
7752
7755
  }
7753
7756
  ]
7754
7757
  }
@@ -42,7 +42,7 @@ var TEMPLATE_REGISTRY = {
42
42
  configOnly: false,
43
43
  manifestType: "CUSTOM_CAPABILITY",
44
44
  templateDir: "custom-capability",
45
- description: "Custom entity tab or group",
45
+ description: "Custom entity tab, group or widget",
46
46
  configuration: () => ({ type: "tab", allowed_schemas: [] }),
47
47
  surfaces: (id) => ({ capability_config: { app_url: `./components/${id}/dist/index.html` } }),
48
48
  assets: (id) => ({ zip: `./components/${id}/dist/` })
@@ -168,6 +168,10 @@ var add_component_default = defineCommand({
168
168
  args: {
169
169
  name: { type: "positional", description: "Component name", required: false },
170
170
  type: { type: "string", alias: "t", description: "Component type" },
171
+ "capability-type": {
172
+ type: "string",
173
+ description: "CUSTOM_CAPABILITY only: where it renders on the entity page (tab | group | widget, default: tab)"
174
+ },
171
175
  path: { type: "string", description: "Path to manifest.json (default: manifest.json)" }
172
176
  },
173
177
  run: async ({ args }) => {
@@ -191,6 +195,28 @@ var add_component_default = defineCommand({
191
195
  }
192
196
  process.exit(1);
193
197
  }
198
+ const CAPABILITY_TYPES = ["tab", "group", "widget"];
199
+ let capabilityType = args["capability-type"];
200
+ if (componentType === "CUSTOM_CAPABILITY") {
201
+ if (capabilityType && !CAPABILITY_TYPES.includes(capabilityType)) {
202
+ log.error(`Invalid capability type: ${capabilityType}. Must be one of: ${CAPABILITY_TYPES.join(", ")}`);
203
+ process.exit(1);
204
+ }
205
+ if (!capabilityType && !args.type) {
206
+ const { select } = await import("@inquirer/prompts");
207
+ capabilityType = await select({
208
+ message: "Where should it render on the entity page?",
209
+ choices: [
210
+ { value: "tab", name: "tab \u2014 its own tab" },
211
+ { value: "group", name: "group \u2014 a section on the main tab" },
212
+ { value: "widget", name: "widget \u2014 a card in the widget grid" }
213
+ ]
214
+ });
215
+ }
216
+ } else if (capabilityType) {
217
+ log.warn("--capability-type only applies to CUSTOM_CAPABILITY components \u2014 ignoring.");
218
+ capabilityType = void 0;
219
+ }
194
220
  let componentName = args.name;
195
221
  if (!componentName) {
196
222
  const { input } = await import("@inquirer/prompts");
@@ -262,6 +288,7 @@ var add_component_default = defineCommand({
262
288
  }
263
289
  const componentId = randomUUID();
264
290
  const configuration = proxyConfig ? { name: proxyConfig.name, target: proxyConfig.target, auth_type: proxyConfig.auth_type } : tmpl.configuration(componentName);
291
+ if (capabilityType) configuration.type = capabilityType;
265
292
  const component = {
266
293
  id: componentId,
267
294
  component_type: tmpl.manifestType,
@@ -8,8 +8,8 @@ var app_default = defineCommand({
8
8
  description: "Manage epilot Apps \u2014 create, deploy, and manage app manifests"
9
9
  },
10
10
  subCommands: {
11
- init: () => import("./init-345HGB5B.js").then((m) => m.default),
12
- "add-component": () => import("./add-component-CJIQYDO5.js").then((m) => m.default),
11
+ init: () => import("./init-BXAGJAPS.js").then((m) => m.default),
12
+ "add-component": () => import("./add-component-UPHG3VNG.js").then((m) => m.default),
13
13
  "remove-component": () => import("./remove-component-LPTHVN4P.js").then((m) => m.default),
14
14
  validate: () => import("./validate-TLSOTJAY.js").then((m) => m.default),
15
15
  deploy: () => import("./deploy-NRQHZ635.js").then((m) => m.default),
@@ -11,7 +11,7 @@ import { defineCommand } from "citty";
11
11
  var main = defineCommand({
12
12
  meta: {
13
13
  name: "epilot",
14
- version: "0.1.85",
14
+ version: "0.1.87",
15
15
  description: "CLI for epilot APIs"
16
16
  },
17
17
  args: {
@@ -31,12 +31,12 @@ var main = defineCommand({
31
31
  profile: () => import("../profile-OZJL5ZPT.js").then((m) => m.default),
32
32
  config: () => import("../config-DGZIMLZK.js").then((m) => m.default),
33
33
  completion: () => import("../completion-N6A4VCAE.js").then((m) => m.default),
34
- upgrade: () => import("../upgrade-272WYSJ4.js").then((m) => m.default),
34
+ upgrade: () => import("../upgrade-SDB2PYUL.js").then((m) => m.default),
35
35
  "access-token": () => import("../access-token-WWE6BDJH.js").then((m) => m.default),
36
36
  address: () => import("../address-EH3C4CVB.js").then((m) => m.default),
37
37
  "address-suggestions": () => import("../address-suggestions-RRSLOBFW.js").then((m) => m.default),
38
38
  "ai-agents": () => import("../ai-agents-53M2KHPI.js").then((m) => m.default),
39
- app: () => import("../app-TIWZ2LQC.js").then((m) => m.default),
39
+ app: () => import("../app-RULTIGMJ.js").then((m) => m.default),
40
40
  "audit-logs": () => import("../audit-logs-YFRK3EFU.js").then((m) => m.default),
41
41
  automation: () => import("../automation-4DEE3TUI.js").then((m) => m.default),
42
42
  billing: () => import("../billing-XX4VVOPI.js").then((m) => m.default),
@@ -134,7 +134,7 @@ process.stderr.on("error", (err) => {
134
134
  if (err.code === "EPIPE") process.exit(0);
135
135
  throw err;
136
136
  });
137
- var VERSION = true ? "0.1.85" : (await null).default.version;
137
+ var VERSION = true ? "0.1.87" : (await null).default.version;
138
138
  var reorderedArgv = hoistFlagsAfterSubcommand(process.argv.slice(2));
139
139
  process.argv = [process.argv[0], process.argv[1], ...reorderedArgv];
140
140
  var args = process.argv.slice(2);
@@ -99,7 +99,7 @@ var init_default = defineCommand({
99
99
  "",
100
100
  "Code-based (have src/ and build step):",
101
101
  "- `CUSTOM_FLOW_ACTION_SANDBOX` \u2014 Sandboxed flow action (JS runs in epilot)",
102
- "- `CUSTOM_CAPABILITY` \u2014 Custom entity tab or group",
102
+ "- `CUSTOM_CAPABILITY` \u2014 Custom entity tab, group or widget",
103
103
  "- `CUSTOM_JOURNEY_BLOCK` \u2014 Custom journey builder block",
104
104
  "- `CUSTOM_PAGE` \u2014 Custom navigation page",
105
105
  "- `CUSTOM_PORTAL_BLOCK` \u2014 Custom portal widget",
@@ -307,7 +307,7 @@ type AppProps<T> = {
307
307
  \`\`\`
308
308
 
309
309
  #### CUSTOM_CAPABILITY
310
- A tab or group on entity detail pages. Uses App Bridge for communication with epilot.
310
+ A tab, group or widget on entity detail pages. Uses App Bridge for communication with epilot.
311
311
 
312
312
  **Stack:** React + Vite + Tailwind + \`@epilot/volt-ui\` + \`@epilot/app-bridge\`
313
313
  **Build output:** \`dist/\` directory (zipped and uploaded on deploy)
@@ -322,7 +322,7 @@ A tab or group on entity detail pages. Uses App Bridge for communication with ep
322
322
  \`\`\`
323
323
 
324
324
  \`allowed_schemas\` controls which entity types show the tab. Empty array = all schemas.
325
- \`type\` can be \`"tab"\` or \`"group"\`.
325
+ \`type\` can be \`"tab"\` (its own tab), \`"group"\` (a section on the main tab) or \`"widget"\` (a card in the widget grid at the top of the entity page). Widgets render in a compact card (~260px tall) alongside epilot's own widgets \u2014 design for a small, glanceable surface, not a full page.
326
326
 
327
327
  **Key files:**
328
328
  - \`src/main.tsx\` \u2014 Renders React app inside \`AppBridgeProvider\`
@@ -72,7 +72,7 @@ ${GREEN}${BOLD}Upgraded to @epilot/cli@${latest}${RESET}
72
72
  }
73
73
  });
74
74
  var getCurrentVersion = () => {
75
- if (true) return "0.1.85";
75
+ if (true) return "0.1.87";
76
76
  try {
77
77
  const output = execSync("npm ls -g @epilot/cli --depth=0 --json 2>/dev/null", {
78
78
  encoding: "utf-8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/cli",
3
- "version": "0.1.85",
3
+ "version": "0.1.87",
4
4
  "description": "CLI for epilot APIs",
5
5
  "type": "module",
6
6
  "bin": {