alpic 0.0.0-dev.gd8b7aed → 0.0.0-dev.gd8deef5

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 (238) hide show
  1. package/README.md +18 -0
  2. package/bin/run.js +15 -1
  3. package/dist/__tests__/alpic-command.test.js +8 -4
  4. package/dist/__tests__/alpic-command.test.js.map +1 -1
  5. package/dist/__tests__/audit.e2e.test.js +17 -30
  6. package/dist/__tests__/audit.e2e.test.js.map +1 -1
  7. package/dist/__tests__/auth.e2e.test.js +9 -23
  8. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  9. package/dist/__tests__/deploy-flags.e2e.test.js +6 -21
  10. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  11. package/dist/__tests__/deploy.e2e.test.js +5 -21
  12. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  13. package/dist/__tests__/deployment-inspect.e2e.test.js +18 -31
  14. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -1
  15. package/dist/__tests__/deployment-list.e2e.test.js +18 -31
  16. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -1
  17. package/dist/__tests__/deployment-logs.e2e.test.js +15 -29
  18. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -1
  19. package/dist/__tests__/environment-delete.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-delete.e2e.test.js +95 -0
  21. package/dist/__tests__/environment-delete.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-list.e2e.test.js +6 -22
  23. package/dist/__tests__/environment-list.e2e.test.js.map +1 -1
  24. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +19 -31
  25. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -1
  26. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +19 -31
  27. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -1
  28. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +18 -31
  29. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -1
  30. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +18 -31
  31. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -1
  32. package/dist/__tests__/git-flags.e2e.test.js +6 -22
  33. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  34. package/dist/__tests__/git.e2e.test.js +7 -22
  35. package/dist/__tests__/git.e2e.test.js.map +1 -1
  36. package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
  37. package/dist/__tests__/insights-category.e2e.test.js +247 -0
  38. package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
  39. package/dist/__tests__/insights.e2e.test.d.ts +1 -0
  40. package/dist/__tests__/insights.e2e.test.js +193 -0
  41. package/dist/__tests__/insights.e2e.test.js.map +1 -0
  42. package/dist/__tests__/logs.e2e.test.js +21 -35
  43. package/dist/__tests__/logs.e2e.test.js.map +1 -1
  44. package/dist/__tests__/mock-api.d.ts +26 -1
  45. package/dist/__tests__/mock-api.js +290 -41
  46. package/dist/__tests__/mock-api.js.map +1 -1
  47. package/dist/__tests__/playground/playground-configure.e2e.test.js +18 -26
  48. package/dist/__tests__/playground/playground-configure.e2e.test.js.map +1 -1
  49. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js +18 -26
  50. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js.map +1 -1
  51. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js +18 -26
  52. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js.map +1 -1
  53. package/dist/__tests__/playground/playground-headers.e2e.test.js +18 -26
  54. package/dist/__tests__/playground/playground-headers.e2e.test.js.map +1 -1
  55. package/dist/__tests__/playground/playground-status.e2e.test.js +18 -26
  56. package/dist/__tests__/playground/playground-status.e2e.test.js.map +1 -1
  57. package/dist/__tests__/project-list.e2e.test.js +5 -21
  58. package/dist/__tests__/project-list.e2e.test.js.map +1 -1
  59. package/dist/__tests__/publish.e2e.test.js +6 -24
  60. package/dist/__tests__/publish.e2e.test.js.map +1 -1
  61. package/dist/__tests__/submission.e2e.test.d.ts +1 -0
  62. package/dist/__tests__/submission.e2e.test.js +146 -0
  63. package/dist/__tests__/submission.e2e.test.js.map +1 -0
  64. package/dist/__tests__/team-inspect.e2e.test.js +26 -1
  65. package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
  66. package/dist/__tests__/team-list.e2e.test.js +5 -21
  67. package/dist/__tests__/team-list.e2e.test.js.map +1 -1
  68. package/dist/__tests__/tunnel.e2e.test.js +61 -23
  69. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  70. package/dist/__tests__/utils.d.ts +17 -6
  71. package/dist/__tests__/utils.js +49 -20
  72. package/dist/__tests__/utils.js.map +1 -1
  73. package/dist/api.d.ts +1 -1
  74. package/dist/api.js +2 -21
  75. package/dist/api.js.map +1 -1
  76. package/dist/commands/audit.js +3 -1
  77. package/dist/commands/audit.js.map +1 -1
  78. package/dist/commands/deploy.js +71 -54
  79. package/dist/commands/deploy.js.map +1 -1
  80. package/dist/commands/deployment/list.js +3 -3
  81. package/dist/commands/deployment/list.js.map +1 -1
  82. package/dist/commands/environment/delete.d.ts +13 -0
  83. package/dist/commands/environment/delete.js +45 -0
  84. package/dist/commands/environment/delete.js.map +1 -0
  85. package/dist/commands/environment/inspect.js +3 -3
  86. package/dist/commands/environment/inspect.js.map +1 -1
  87. package/dist/commands/environment/list.js +3 -3
  88. package/dist/commands/environment/list.js.map +1 -1
  89. package/dist/commands/git/connect.js +2 -2
  90. package/dist/commands/git/connect.js.map +1 -1
  91. package/dist/commands/git/disconnect.js +2 -2
  92. package/dist/commands/git/disconnect.js.map +1 -1
  93. package/dist/commands/insights/category/create.d.ts +17 -0
  94. package/dist/commands/insights/category/create.js +63 -0
  95. package/dist/commands/insights/category/create.js.map +1 -0
  96. package/dist/commands/insights/category/delete.d.ts +13 -0
  97. package/dist/commands/insights/category/delete.js +40 -0
  98. package/dist/commands/insights/category/delete.js.map +1 -0
  99. package/dist/commands/insights/category/link.d.ts +14 -0
  100. package/dist/commands/insights/category/link.js +36 -0
  101. package/dist/commands/insights/category/link.js.map +1 -0
  102. package/dist/commands/insights/category/list.d.ts +13 -0
  103. package/dist/commands/insights/category/list.js +46 -0
  104. package/dist/commands/insights/category/list.js.map +1 -0
  105. package/dist/commands/insights/category/unlink.d.ts +14 -0
  106. package/dist/commands/insights/category/unlink.js +36 -0
  107. package/dist/commands/insights/category/unlink.js.map +1 -0
  108. package/dist/commands/insights/category/update.d.ts +16 -0
  109. package/dist/commands/insights/category/update.js +45 -0
  110. package/dist/commands/insights/category/update.js.map +1 -0
  111. package/dist/commands/insights/feedback/list.d.ts +19 -0
  112. package/dist/commands/insights/feedback/list.js +73 -0
  113. package/dist/commands/insights/feedback/list.js.map +1 -0
  114. package/dist/commands/insights/intent/list.d.ts +22 -0
  115. package/dist/commands/insights/intent/list.js +89 -0
  116. package/dist/commands/insights/intent/list.js.map +1 -0
  117. package/dist/commands/link.js +4 -3
  118. package/dist/commands/link.js.map +1 -1
  119. package/dist/commands/login.js +7 -5
  120. package/dist/commands/login.js.map +1 -1
  121. package/dist/commands/logout.js +1 -1
  122. package/dist/commands/logout.js.map +1 -1
  123. package/dist/commands/logs.js +1 -9
  124. package/dist/commands/logs.js.map +1 -1
  125. package/dist/commands/project/inspect.js +3 -3
  126. package/dist/commands/project/inspect.js.map +1 -1
  127. package/dist/commands/project/list.js +3 -3
  128. package/dist/commands/project/list.js.map +1 -1
  129. package/dist/commands/submission/create.d.ts +15 -0
  130. package/dist/commands/submission/create.js +59 -0
  131. package/dist/commands/submission/create.js.map +1 -0
  132. package/dist/commands/submission/inspect.d.ts +10 -0
  133. package/dist/commands/submission/inspect.js +56 -0
  134. package/dist/commands/submission/inspect.js.map +1 -0
  135. package/dist/commands/submission/update.d.ts +12 -0
  136. package/dist/commands/submission/update.js +37 -0
  137. package/dist/commands/submission/update.js.map +1 -0
  138. package/dist/commands/team/inspect.js +25 -10
  139. package/dist/commands/team/inspect.js.map +1 -1
  140. package/dist/commands/team/list.js +3 -3
  141. package/dist/commands/team/list.js.map +1 -1
  142. package/dist/commands/tunnel.js +30 -66
  143. package/dist/commands/tunnel.js.map +1 -1
  144. package/dist/commands/whoami.js +1 -1
  145. package/dist/commands/whoami.js.map +1 -1
  146. package/dist/lib/agent-mode.d.ts +8 -1
  147. package/dist/lib/agent-mode.js +25 -26
  148. package/dist/lib/agent-mode.js.map +1 -1
  149. package/dist/lib/alpic-command.d.ts +2 -1
  150. package/dist/lib/alpic-command.js +20 -8
  151. package/dist/lib/alpic-command.js.map +1 -1
  152. package/dist/lib/alpic-sdk.d.ts +2 -0
  153. package/dist/lib/alpic-sdk.js +8 -0
  154. package/dist/lib/alpic-sdk.js.map +1 -0
  155. package/dist/lib/audit.d.ts +1 -0
  156. package/dist/lib/audit.js +24 -15
  157. package/dist/lib/audit.js.map +1 -1
  158. package/dist/lib/base-workflow.d.ts +2 -1
  159. package/dist/lib/base-workflow.js +3 -3
  160. package/dist/lib/base-workflow.js.map +1 -1
  161. package/dist/lib/deployment.d.ts +0 -21
  162. package/dist/lib/deployment.js +20 -69
  163. package/dist/lib/deployment.js.map +1 -1
  164. package/dist/lib/environment-variable.js +14 -13
  165. package/dist/lib/environment-variable.js.map +1 -1
  166. package/dist/lib/insights.d.ts +19 -0
  167. package/dist/lib/insights.js +54 -0
  168. package/dist/lib/insights.js.map +1 -0
  169. package/dist/lib/link.d.ts +1 -2
  170. package/dist/lib/link.js +20 -75
  171. package/dist/lib/link.js.map +1 -1
  172. package/dist/lib/logs.js +4 -5
  173. package/dist/lib/logs.js.map +1 -1
  174. package/dist/lib/playground.js +25 -25
  175. package/dist/lib/playground.js.map +1 -1
  176. package/dist/lib/project-settings.d.ts +7 -0
  177. package/dist/lib/project-settings.js +140 -0
  178. package/dist/lib/project-settings.js.map +1 -0
  179. package/dist/lib/project-settings.test.d.ts +1 -0
  180. package/dist/lib/project-settings.test.js +56 -0
  181. package/dist/lib/project-settings.test.js.map +1 -0
  182. package/dist/lib/publish.js +3 -3
  183. package/dist/lib/publish.js.map +1 -1
  184. package/dist/lib/resolve.d.ts +7 -6
  185. package/dist/lib/resolve.js +27 -23
  186. package/dist/lib/resolve.js.map +1 -1
  187. package/dist/lib/submission.d.ts +13 -0
  188. package/dist/lib/submission.js +52 -0
  189. package/dist/lib/submission.js.map +1 -0
  190. package/dist/lib/telemetry.js +24 -17
  191. package/dist/lib/telemetry.js.map +1 -1
  192. package/dist/lib/utils.d.ts +9 -1
  193. package/dist/lib/utils.js +28 -2
  194. package/dist/lib/utils.js.map +1 -1
  195. package/dist/lib/utils.test.js +43 -5
  196. package/dist/lib/utils.test.js.map +1 -1
  197. package/dist/lib/whoami.js +17 -0
  198. package/dist/lib/whoami.js.map +1 -0
  199. package/dist/sentry.js +3 -6
  200. package/dist/sentry.js.map +1 -1
  201. package/package.json +28 -32
  202. package/dist/lib/archive.d.ts +0 -7
  203. package/dist/lib/archive.js +0 -57
  204. package/dist/lib/archive.js.map +0 -1
  205. package/dist/lib/auth/auth.d.ts +0 -5
  206. package/dist/lib/auth/auth.js +0 -50
  207. package/dist/lib/auth/auth.js.map +0 -1
  208. package/dist/lib/auth/oauth/client.d.ts +0 -28
  209. package/dist/lib/auth/oauth/client.js +0 -116
  210. package/dist/lib/auth/oauth/client.js.map +0 -1
  211. package/dist/lib/auth/oauth/constants.d.ts +0 -2
  212. package/dist/lib/auth/oauth/constants.js +0 -3
  213. package/dist/lib/auth/oauth/constants.js.map +0 -1
  214. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  215. package/dist/lib/auth/oauth/server/assets/authorize.html +0 -234
  216. package/dist/lib/auth/oauth/server/assets/callback.html +0 -88
  217. package/dist/lib/auth/oauth/server/index.d.ts +0 -9
  218. package/dist/lib/auth/oauth/server/index.js +0 -128
  219. package/dist/lib/auth/oauth/server/index.js.map +0 -1
  220. package/dist/lib/auth/whoami.js +0 -47
  221. package/dist/lib/auth/whoami.js.map +0 -1
  222. package/dist/lib/config.d.ts +0 -12
  223. package/dist/lib/config.js +0 -32
  224. package/dist/lib/config.js.map +0 -1
  225. package/dist/lib/global-store.d.ts +0 -28
  226. package/dist/lib/global-store.js +0 -76
  227. package/dist/lib/global-store.js.map +0 -1
  228. package/dist/lib/upload.d.ts +0 -1
  229. package/dist/lib/upload.js +0 -13
  230. package/dist/lib/upload.js.map +0 -1
  231. package/dist/lib/vendor/pipenet.d.ts +0 -1
  232. package/dist/lib/vendor/pipenet.js +0 -16877
  233. package/dist/lib/vendor/pipenet.js.LEGAL.txt +0 -17
  234. package/dist/lib/vendor/pipenet.js.map +0 -7
  235. package/dist/types.d.ts +0 -8
  236. package/dist/types.js +0 -2
  237. package/dist/types.js.map +0 -1
  238. /package/dist/lib/{auth/whoami.d.ts → whoami.d.ts} +0 -0
@@ -0,0 +1,63 @@
1
+ import { INTENT_CATEGORY_COLORS } from "@alpic-ai/api";
2
+ import * as p from "@clack/prompts";
3
+ import { Flags } from "@oclif/core";
4
+ import chalk from "chalk";
5
+ import { api } from "../../../api.js";
6
+ import { ERRORS_ONLY, isAgentMode } from "../../../lib/agent-mode.js";
7
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
8
+ import { parseIntentCategoryColor } from "../../../lib/insights.js";
9
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
10
+ export class InsightsCategoryCreate extends AlpicCommand {
11
+ static description = "Create an intent category";
12
+ static examples = [
13
+ "<%= config.bin %> insights category create",
14
+ "<%= config.bin %> insights category create --name Scheduling --color blue",
15
+ "<%= config.bin %> insights category create --name Scheduling --intent-id <intentId>",
16
+ ];
17
+ static flags = {
18
+ ...environmentFlags,
19
+ ...projectFlags,
20
+ name: Flags.string({ description: "The category name" }),
21
+ color: Flags.string({
22
+ description: "The category color; derived from the name when omitted",
23
+ options: [...INTENT_CATEGORY_COLORS],
24
+ }),
25
+ "intent-id": Flags.string({ description: "Link the new category to this intent ID", multiple: true }),
26
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(InsightsCategoryCreate);
30
+ await this.ensureAuthenticated(flags);
31
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
32
+ const name = await this.resolveName(flags);
33
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
34
+ logger.start("Creating category...");
35
+ const category = await api.intentCategories.create.v1({
36
+ environmentId,
37
+ name,
38
+ color: parseIntentCategoryColor(flags.color),
39
+ intentIds: flags["intent-id"],
40
+ });
41
+ logger.stop(`Created ${chalk.cyan(category.name)} (${category.color}). ✅`);
42
+ if (flags.json) {
43
+ this.log(JSON.stringify(category));
44
+ }
45
+ }
46
+ async resolveName(flags) {
47
+ if (flags.name !== undefined) {
48
+ return flags.name;
49
+ }
50
+ if (flags["non-interactive"] || isAgentMode()) {
51
+ throw new Error("--name is required in non-interactive mode.");
52
+ }
53
+ const name = await p.text({
54
+ message: "Category name",
55
+ validate: (value) => (value === undefined || value.trim().length === 0 ? "Name cannot be empty." : undefined),
56
+ });
57
+ if (p.isCancel(name)) {
58
+ throw new Error("Cancelled.");
59
+ }
60
+ return name;
61
+ }
62
+ }
63
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryDelete extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,40 @@
1
+ import * as p from "@clack/prompts";
2
+ import chalk from "chalk";
3
+ import { api } from "../../../api.js";
4
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
5
+ import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
6
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
7
+ import { plural } from "../../../lib/utils.js";
8
+ export class InsightsCategoryDelete extends AlpicCommand {
9
+ static description = "Delete an intent category; its intents are unlinked but not deleted";
10
+ static examples = [
11
+ "<%= config.bin %> insights category delete",
12
+ "<%= config.bin %> insights category delete --category-id <categoryId>",
13
+ "<%= config.bin %> insights category delete --category-id <categoryId> --non-interactive",
14
+ ];
15
+ static flags = {
16
+ ...environmentFlags,
17
+ ...projectFlags,
18
+ ...categoryFlags,
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(InsightsCategoryDelete);
22
+ await this.ensureAuthenticated(flags);
23
+ const environmentId = await resolveEnvironmentId(flags);
24
+ const category = await resolveIntentCategory(environmentId, flags, "delete");
25
+ if (!flags["non-interactive"]) {
26
+ const confirmed = await p.confirm({
27
+ message: `Delete ${chalk.cyan(category.name)}? It will be unlinked from ${plural(category.intentCount, "intent")}.`,
28
+ initialValue: false,
29
+ });
30
+ if (p.isCancel(confirmed) || !confirmed) {
31
+ throw new Error("Cancelled.");
32
+ }
33
+ }
34
+ const logger = this.logger();
35
+ logger.start("Deleting category...");
36
+ await api.intentCategories.delete.v1({ environmentId, categoryId: category.id });
37
+ logger.stop(`Deleted ${chalk.cyan(category.name)}. ✅`);
38
+ }
39
+ }
40
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,qEAAqE,CAAC;IAEpG,MAAM,CAAU,QAAQ,GAAG;QACzB,4CAA4C;QAC5C,uEAAuE;QACvE,yFAAyF;KAC1F,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;KACjB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE7E,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;gBACnH,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjF,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryLink extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "intent-id": import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
7
+ "category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,36 @@
1
+ import { Flags } from "@oclif/core";
2
+ import chalk from "chalk";
3
+ import { api } from "../../../api.js";
4
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
5
+ import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
6
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
7
+ import { plural } from "../../../lib/utils.js";
8
+ export class InsightsCategoryLink extends AlpicCommand {
9
+ static description = "Link an intent category to intents";
10
+ static examples = [
11
+ "<%= config.bin %> insights category link --intent-id <intentId>",
12
+ "<%= config.bin %> insights category link --category-id <categoryId> --intent-id <intentId> --intent-id <intentId>",
13
+ ];
14
+ static flags = {
15
+ ...environmentFlags,
16
+ ...projectFlags,
17
+ ...categoryFlags,
18
+ "intent-id": Flags.string({ description: "The ID of an intent to link", multiple: true, required: true }),
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(InsightsCategoryLink);
22
+ await this.ensureAuthenticated(flags);
23
+ const environmentId = await resolveEnvironmentId(flags);
24
+ const category = await resolveIntentCategory(environmentId, flags, "link");
25
+ const intentIds = [...new Set(flags["intent-id"])];
26
+ const logger = this.logger();
27
+ logger.start("Linking intents...");
28
+ await api.intentCategories.link.v1({
29
+ environmentId,
30
+ categoryId: category.id,
31
+ intentIds,
32
+ });
33
+ logger.stop(`Linked ${plural(intentIds.length, "intent")} to ${chalk.cyan(category.name)}. ✅`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAC;IAEnE,MAAM,CAAU,QAAQ,GAAG;QACzB,iEAAiE;QACjE,mHAAmH;KACpH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC1G,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEnC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryList extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,46 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import chalk from "chalk";
4
+ import { api } from "../../../api.js";
5
+ import { ERRORS_ONLY } from "../../../lib/agent-mode.js";
6
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
7
+ import { pluralCategories } from "../../../lib/insights.js";
8
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
9
+ import { formatTable } from "../../../lib/table.js";
10
+ export class InsightsCategoryList extends AlpicCommand {
11
+ static description = "List intent categories for an environment";
12
+ static examples = [
13
+ "<%= config.bin %> insights category list",
14
+ "<%= config.bin %> insights category list --environment-id <environmentId>",
15
+ "<%= config.bin %> insights category list --json --non-interactive",
16
+ ];
17
+ static flags = {
18
+ ...environmentFlags,
19
+ ...projectFlags,
20
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
21
+ };
22
+ async run() {
23
+ const { flags } = await this.parse(InsightsCategoryList);
24
+ await this.ensureAuthenticated(flags);
25
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
26
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
27
+ logger.start("Fetching categories...");
28
+ const categories = await api.intentCategories.list.v1({ environmentId });
29
+ logger.stop(`Found ${pluralCategories(categories.length)}`);
30
+ if (flags.json) {
31
+ this.log(JSON.stringify(categories));
32
+ return;
33
+ }
34
+ if (categories.length === 0) {
35
+ p.log.info("No intent categories found in this environment.");
36
+ return;
37
+ }
38
+ console.log(formatTable(categories, [
39
+ { key: "name", header: "name", format: (value) => chalk.bold(value) },
40
+ { key: "color", header: "color", format: (value) => chalk.gray(value) },
41
+ { key: "intentCount", header: "intents", format: (value) => chalk.gray(value) },
42
+ { key: "id", header: "id", format: (value) => chalk.gray(value) },
43
+ ]));
44
+ }
45
+ }
46
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryUnlink extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "intent-id": import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
7
+ "category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,36 @@
1
+ import { Flags } from "@oclif/core";
2
+ import chalk from "chalk";
3
+ import { api } from "../../../api.js";
4
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
5
+ import { categoryFlags, resolveIntentCategory } from "../../../lib/insights.js";
6
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
7
+ import { plural } from "../../../lib/utils.js";
8
+ export class InsightsCategoryUnlink extends AlpicCommand {
9
+ static description = "Unlink an intent category from intents";
10
+ static examples = [
11
+ "<%= config.bin %> insights category unlink --intent-id <intentId>",
12
+ "<%= config.bin %> insights category unlink --category-id <categoryId> --intent-id <intentId> --intent-id <intentId>",
13
+ ];
14
+ static flags = {
15
+ ...environmentFlags,
16
+ ...projectFlags,
17
+ ...categoryFlags,
18
+ "intent-id": Flags.string({ description: "The ID of an intent to unlink", multiple: true, required: true }),
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(InsightsCategoryUnlink);
22
+ await this.ensureAuthenticated(flags);
23
+ const environmentId = await resolveEnvironmentId(flags);
24
+ const category = await resolveIntentCategory(environmentId, flags, "unlink");
25
+ const intentIds = [...new Set(flags["intent-id"])];
26
+ const logger = this.logger();
27
+ logger.start("Unlinking intents...");
28
+ await api.intentCategories.unlink.v1({
29
+ environmentId,
30
+ categoryId: category.id,
31
+ intentIds,
32
+ });
33
+ logger.stop(`Unlinked ${plural(intentIds.length, "intent")} from ${chalk.cyan(category.name)}. ✅`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=unlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/unlink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,wCAAwC,CAAC;IAEvE,MAAM,CAAU,QAAQ,GAAG;QACzB,mEAAmE;QACnE,qHAAqH;KACtH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC5G,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrG,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryUpdate extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ color: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ "category-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,45 @@
1
+ import { INTENT_CATEGORY_COLORS } from "@alpic-ai/api";
2
+ import { Flags } from "@oclif/core";
3
+ import chalk from "chalk";
4
+ import { api } from "../../../api.js";
5
+ import { ERRORS_ONLY } from "../../../lib/agent-mode.js";
6
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
7
+ import { categoryFlags, parseIntentCategoryColor, resolveIntentCategory } from "../../../lib/insights.js";
8
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
9
+ export class InsightsCategoryUpdate extends AlpicCommand {
10
+ static description = "Rename or recolor an intent category";
11
+ static examples = [
12
+ "<%= config.bin %> insights category update --name Scheduling",
13
+ "<%= config.bin %> insights category update --category-id <categoryId> --color green",
14
+ ];
15
+ static flags = {
16
+ ...environmentFlags,
17
+ ...projectFlags,
18
+ ...categoryFlags,
19
+ name: Flags.string({ description: "The new category name" }),
20
+ color: Flags.string({ description: "The new category color", options: [...INTENT_CATEGORY_COLORS] }),
21
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
22
+ };
23
+ async run() {
24
+ const { flags } = await this.parse(InsightsCategoryUpdate);
25
+ if (flags.name === undefined && flags.color === undefined) {
26
+ throw new Error("At least one of --name or --color must be provided.");
27
+ }
28
+ await this.ensureAuthenticated(flags);
29
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
30
+ const category = await resolveIntentCategory(environmentId, flags, "update", { silent: flags.json });
31
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
32
+ logger.start("Updating category...");
33
+ const updated = await api.intentCategories.update.v1({
34
+ environmentId,
35
+ categoryId: category.id,
36
+ name: flags.name,
37
+ color: parseIntentCategoryColor(flags.color),
38
+ });
39
+ logger.stop(`Updated ${chalk.cyan(updated.name)} (${updated.color}). ✅`);
40
+ if (flags.json) {
41
+ this.log(JSON.stringify(updated));
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/F,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAC;IAErE,MAAM,CAAU,QAAQ,GAAG;QACzB,8DAA8D;QAC9D,qFAAqF;KACtF,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;QAC5D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC;QACpG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClG,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAErG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC;SAC7C,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC;QAEzE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsFeedbackList extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ since: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ until: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "client-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
+ offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
@@ -0,0 +1,73 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import chalk from "chalk";
4
+ import { api } from "../../../api.js";
5
+ import { ERRORS_ONLY } from "../../../lib/agent-mode.js";
6
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
7
+ import { truncateInsightContent } from "../../../lib/insights.js";
8
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
9
+ import { formatTable } from "../../../lib/table.js";
10
+ import { plural, validateTimeFlag } from "../../../lib/utils.js";
11
+ export class InsightsFeedbackList extends AlpicCommand {
12
+ static description = "List user feedback for an environment";
13
+ static examples = [
14
+ "<%= config.bin %> insights feedback list",
15
+ "<%= config.bin %> insights feedback list --environment-name production --project-name my-project",
16
+ "<%= config.bin %> insights feedback list --search timeout --client-id claude-desktop",
17
+ "<%= config.bin %> insights feedback list --json --non-interactive",
18
+ ];
19
+ static flags = {
20
+ ...environmentFlags,
21
+ ...projectFlags,
22
+ since: Flags.string({
23
+ description: "Show feedback after this time (relative duration or ISO 8601 date)",
24
+ default: "7d",
25
+ }),
26
+ until: Flags.string({ description: "Show feedback before this time (relative duration or ISO 8601 date)" }),
27
+ search: Flags.string({ description: "Search feedback content and source" }),
28
+ "client-id": Flags.string({ description: "Filter by stable MCP client ID", multiple: true }),
29
+ limit: Flags.integer({ description: "Maximum number of feedbacks to return", min: 1, max: 200, default: 50 }),
30
+ offset: Flags.integer({ description: "Number of feedbacks to skip", min: 0, default: 0 }),
31
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
32
+ };
33
+ async run() {
34
+ const { flags } = await this.parse(InsightsFeedbackList);
35
+ await this.ensureAuthenticated(flags);
36
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
37
+ validateTimeFlag(flags.since, "since");
38
+ validateTimeFlag(flags.until, "until");
39
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
40
+ logger.start("Fetching feedback...");
41
+ const response = await api.feedbacks.list.v1({
42
+ environmentId,
43
+ since: flags.since,
44
+ until: flags.until,
45
+ search: flags.search,
46
+ clientIds: flags["client-id"],
47
+ limit: flags.limit,
48
+ offset: flags.offset,
49
+ });
50
+ logger.stop(`Found ${plural(response.totalCount, "feedback")}`);
51
+ if (flags.json) {
52
+ this.log(JSON.stringify(response));
53
+ return;
54
+ }
55
+ if (response.feedbacks.length === 0) {
56
+ p.log.info("No feedback found for this period.");
57
+ return;
58
+ }
59
+ const rows = response.feedbacks.map((feedback) => ({
60
+ date: feedback.createdAt.toISOString(),
61
+ source: feedback.source,
62
+ feedback: truncateInsightContent(feedback.content),
63
+ client: feedback.clientName ?? feedback.clientId ?? "-",
64
+ }));
65
+ console.log(formatTable(rows, [
66
+ { key: "date", header: "date", format: (value) => chalk.gray(value) },
67
+ { key: "source", header: "source", format: (value) => chalk.cyan(value) },
68
+ { key: "feedback", header: "feedback", format: (value) => chalk.bold(value) },
69
+ { key: "client", header: "client", format: (value) => chalk.gray(value) },
70
+ ]));
71
+ }
72
+ }
73
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/feedback/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsIntentList extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ since: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ until: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ tool: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "client-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "category-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
14
+ offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
15
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ "environment-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
@@ -0,0 +1,89 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import chalk from "chalk";
4
+ import { api } from "../../../api.js";
5
+ import { ERRORS_ONLY } from "../../../lib/agent-mode.js";
6
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
7
+ import { truncateInsightContent } from "../../../lib/insights.js";
8
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
9
+ import { formatTable } from "../../../lib/table.js";
10
+ import { plural, validateTimeFlag } from "../../../lib/utils.js";
11
+ const parseSortDir = (sort) => {
12
+ if (sort === "asc" || sort === "desc") {
13
+ return sort;
14
+ }
15
+ throw new Error(`Invalid sort direction: ${sort}`);
16
+ };
17
+ export class InsightsIntentList extends AlpicCommand {
18
+ static description = "List grouped user intents for an environment";
19
+ static examples = [
20
+ "<%= config.bin %> insights intent list",
21
+ "<%= config.bin %> insights intent list --environment-id <environmentId> --since 24h",
22
+ "<%= config.bin %> insights intent list --tool search --client-id claude-desktop",
23
+ "<%= config.bin %> insights intent list --json --non-interactive",
24
+ ];
25
+ static flags = {
26
+ ...environmentFlags,
27
+ ...projectFlags,
28
+ since: Flags.string({
29
+ description: "Show intents after this time (relative duration or ISO 8601 date)",
30
+ default: "7d",
31
+ }),
32
+ until: Flags.string({ description: "Show intents before this time (relative duration or ISO 8601 date)" }),
33
+ search: Flags.string({ description: "Search intent messages, tools, and categories" }),
34
+ tool: Flags.string({ description: "Filter by tool name", multiple: true }),
35
+ "client-id": Flags.string({ description: "Filter by stable MCP client ID", multiple: true }),
36
+ "category-id": Flags.string({ description: "Filter by category ID", multiple: true }),
37
+ sort: Flags.string({ description: "Sort by date", options: ["asc", "desc"], default: "desc" }),
38
+ limit: Flags.integer({ description: "Maximum number of grouped intents to return", min: 1, max: 200, default: 50 }),
39
+ offset: Flags.integer({ description: "Number of grouped intents to skip", min: 0, default: 0 }),
40
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
41
+ };
42
+ async run() {
43
+ const { flags } = await this.parse(InsightsIntentList);
44
+ await this.ensureAuthenticated(flags);
45
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
46
+ validateTimeFlag(flags.since, "since");
47
+ validateTimeFlag(flags.until, "until");
48
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
49
+ logger.start("Fetching intents...");
50
+ const response = await api.intents.list.v1({
51
+ environmentId,
52
+ since: flags.since,
53
+ until: flags.until,
54
+ search: flags.search,
55
+ tools: flags.tool,
56
+ clientIds: flags["client-id"],
57
+ categoryIds: flags["category-id"],
58
+ sortDir: parseSortDir(flags.sort),
59
+ limit: flags.limit,
60
+ offset: flags.offset,
61
+ });
62
+ logger.stop(`Found ${plural(response.totalCount, "intent")}`);
63
+ if (flags.json) {
64
+ this.log(JSON.stringify(response));
65
+ return;
66
+ }
67
+ if (response.intents.length === 0) {
68
+ p.log.info("No intents found for this period.");
69
+ return;
70
+ }
71
+ const rows = response.intents.map((intent) => ({
72
+ date: intent.createdAt.toISOString(),
73
+ intent: truncateInsightContent(intent.message),
74
+ occurrences: intent.occurrenceCount,
75
+ tool: intent.toolName,
76
+ client: intent.clientName ?? intent.clientId ?? "-",
77
+ categories: intent.categories.map(({ name }) => name).join(", ") || "-",
78
+ }));
79
+ console.log(formatTable(rows, [
80
+ { key: "date", header: "date", format: (value) => chalk.gray(value) },
81
+ { key: "intent", header: "intent", format: (value) => chalk.bold(value) },
82
+ { key: "occurrences", header: "occurrences", format: (value) => chalk.gray(value) },
83
+ { key: "tool", header: "tool", format: (value) => chalk.cyan(value) },
84
+ { key: "client", header: "client", format: (value) => chalk.gray(value) },
85
+ { key: "categories", header: "categories", format: (value) => chalk.gray(value) },
86
+ ]));
87
+ }
88
+ }
89
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/intent/list.ts"],"names":[],"mappings":"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"}