alpic 0.0.0-dev.gdbd2521 → 0.0.0-dev.gdbf1b43

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 (159) hide show
  1. package/README.md +18 -0
  2. package/bin/run.js +15 -1
  3. package/dist/__tests__/audit.e2e.test.js +16 -29
  4. package/dist/__tests__/audit.e2e.test.js.map +1 -1
  5. package/dist/__tests__/auth.e2e.test.js +6 -22
  6. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  7. package/dist/__tests__/deploy-flags.e2e.test.js +6 -21
  8. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  9. package/dist/__tests__/deploy.e2e.test.js +5 -21
  10. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  11. package/dist/__tests__/deployment-inspect.e2e.test.js +18 -31
  12. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -1
  13. package/dist/__tests__/deployment-list.e2e.test.js +18 -31
  14. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -1
  15. package/dist/__tests__/deployment-logs.e2e.test.js +15 -29
  16. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -1
  17. package/dist/__tests__/environment-delete.e2e.test.d.ts +1 -0
  18. package/dist/__tests__/environment-delete.e2e.test.js +95 -0
  19. package/dist/__tests__/environment-delete.e2e.test.js.map +1 -0
  20. package/dist/__tests__/environment-list.e2e.test.js +6 -22
  21. package/dist/__tests__/environment-list.e2e.test.js.map +1 -1
  22. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +19 -31
  23. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -1
  24. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +19 -31
  25. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -1
  26. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +18 -31
  27. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -1
  28. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +18 -31
  29. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -1
  30. package/dist/__tests__/git-flags.e2e.test.js +6 -22
  31. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  32. package/dist/__tests__/git.e2e.test.js +7 -22
  33. package/dist/__tests__/git.e2e.test.js.map +1 -1
  34. package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
  35. package/dist/__tests__/insights-category.e2e.test.js +248 -0
  36. package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
  37. package/dist/__tests__/insights.e2e.test.d.ts +1 -0
  38. package/dist/__tests__/insights.e2e.test.js +193 -0
  39. package/dist/__tests__/insights.e2e.test.js.map +1 -0
  40. package/dist/__tests__/logs.e2e.test.js +21 -35
  41. package/dist/__tests__/logs.e2e.test.js.map +1 -1
  42. package/dist/__tests__/mock-api.d.ts +17 -1
  43. package/dist/__tests__/mock-api.js +227 -41
  44. package/dist/__tests__/mock-api.js.map +1 -1
  45. package/dist/__tests__/playground/playground-configure.e2e.test.js +18 -26
  46. package/dist/__tests__/playground/playground-configure.e2e.test.js.map +1 -1
  47. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js +18 -26
  48. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js.map +1 -1
  49. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js +18 -26
  50. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js.map +1 -1
  51. package/dist/__tests__/playground/playground-headers.e2e.test.js +18 -26
  52. package/dist/__tests__/playground/playground-headers.e2e.test.js.map +1 -1
  53. package/dist/__tests__/playground/playground-status.e2e.test.js +18 -26
  54. package/dist/__tests__/playground/playground-status.e2e.test.js.map +1 -1
  55. package/dist/__tests__/project-list.e2e.test.js +5 -21
  56. package/dist/__tests__/project-list.e2e.test.js.map +1 -1
  57. package/dist/__tests__/publish.e2e.test.js +6 -24
  58. package/dist/__tests__/publish.e2e.test.js.map +1 -1
  59. package/dist/__tests__/team-inspect.e2e.test.js +26 -1
  60. package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
  61. package/dist/__tests__/team-list.e2e.test.js +5 -21
  62. package/dist/__tests__/team-list.e2e.test.js.map +1 -1
  63. package/dist/__tests__/tunnel.e2e.test.js +8 -30
  64. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  65. package/dist/__tests__/utils.d.ts +17 -6
  66. package/dist/__tests__/utils.js +49 -20
  67. package/dist/__tests__/utils.js.map +1 -1
  68. package/dist/commands/deploy.js +69 -52
  69. package/dist/commands/deploy.js.map +1 -1
  70. package/dist/commands/environment/delete.d.ts +13 -0
  71. package/dist/commands/environment/delete.js +45 -0
  72. package/dist/commands/environment/delete.js.map +1 -0
  73. package/dist/commands/git/connect.js +2 -2
  74. package/dist/commands/git/connect.js.map +1 -1
  75. package/dist/commands/git/disconnect.js +2 -2
  76. package/dist/commands/git/disconnect.js.map +1 -1
  77. package/dist/commands/insights/category/create.d.ts +17 -0
  78. package/dist/commands/insights/category/create.js +63 -0
  79. package/dist/commands/insights/category/create.js.map +1 -0
  80. package/dist/commands/insights/category/delete.d.ts +13 -0
  81. package/dist/commands/insights/category/delete.js +40 -0
  82. package/dist/commands/insights/category/delete.js.map +1 -0
  83. package/dist/commands/insights/category/link.d.ts +14 -0
  84. package/dist/commands/insights/category/link.js +36 -0
  85. package/dist/commands/insights/category/link.js.map +1 -0
  86. package/dist/commands/insights/category/list.d.ts +13 -0
  87. package/dist/commands/insights/category/list.js +45 -0
  88. package/dist/commands/insights/category/list.js.map +1 -0
  89. package/dist/commands/insights/category/unlink.d.ts +14 -0
  90. package/dist/commands/insights/category/unlink.js +36 -0
  91. package/dist/commands/insights/category/unlink.js.map +1 -0
  92. package/dist/commands/insights/category/update.d.ts +16 -0
  93. package/dist/commands/insights/category/update.js +44 -0
  94. package/dist/commands/insights/category/update.js.map +1 -0
  95. package/dist/commands/insights/feedback/list.d.ts +19 -0
  96. package/dist/commands/insights/feedback/list.js +72 -0
  97. package/dist/commands/insights/feedback/list.js.map +1 -0
  98. package/dist/commands/insights/intent/list.d.ts +22 -0
  99. package/dist/commands/insights/intent/list.js +88 -0
  100. package/dist/commands/insights/intent/list.js.map +1 -0
  101. package/dist/commands/link.js +1 -0
  102. package/dist/commands/link.js.map +1 -1
  103. package/dist/commands/logs.js +1 -9
  104. package/dist/commands/logs.js.map +1 -1
  105. package/dist/commands/team/inspect.js +17 -2
  106. package/dist/commands/team/inspect.js.map +1 -1
  107. package/dist/commands/tunnel.js +2 -6
  108. package/dist/commands/tunnel.js.map +1 -1
  109. package/dist/lib/alpic-command.js +12 -2
  110. package/dist/lib/alpic-command.js.map +1 -1
  111. package/dist/lib/alpic-sdk.js +1 -2
  112. package/dist/lib/alpic-sdk.js.map +1 -1
  113. package/dist/lib/audit.js +6 -3
  114. package/dist/lib/audit.js.map +1 -1
  115. package/dist/lib/deployment.d.ts +0 -21
  116. package/dist/lib/deployment.js +9 -58
  117. package/dist/lib/deployment.js.map +1 -1
  118. package/dist/lib/environment-variable.js +1 -0
  119. package/dist/lib/environment-variable.js.map +1 -1
  120. package/dist/lib/insights.d.ts +17 -0
  121. package/dist/lib/insights.js +54 -0
  122. package/dist/lib/insights.js.map +1 -0
  123. package/dist/lib/link.d.ts +1 -2
  124. package/dist/lib/link.js +16 -71
  125. package/dist/lib/link.js.map +1 -1
  126. package/dist/lib/logs.js +4 -5
  127. package/dist/lib/logs.js.map +1 -1
  128. package/dist/lib/project-settings.d.ts +7 -0
  129. package/dist/lib/project-settings.js +140 -0
  130. package/dist/lib/project-settings.js.map +1 -0
  131. package/dist/lib/project-settings.test.d.ts +1 -0
  132. package/dist/lib/project-settings.test.js +56 -0
  133. package/dist/lib/project-settings.test.js.map +1 -0
  134. package/dist/lib/resolve.js +4 -5
  135. package/dist/lib/resolve.js.map +1 -1
  136. package/dist/lib/telemetry.js +24 -17
  137. package/dist/lib/telemetry.js.map +1 -1
  138. package/dist/lib/utils.d.ts +9 -1
  139. package/dist/lib/utils.js +28 -2
  140. package/dist/lib/utils.js.map +1 -1
  141. package/dist/lib/utils.test.js +43 -5
  142. package/dist/lib/utils.test.js.map +1 -1
  143. package/dist/lib/whoami.js +4 -34
  144. package/dist/lib/whoami.js.map +1 -1
  145. package/dist/sentry.js +3 -6
  146. package/dist/sentry.js.map +1 -1
  147. package/package.json +26 -27
  148. package/dist/lib/archive.d.ts +0 -7
  149. package/dist/lib/archive.js +0 -57
  150. package/dist/lib/archive.js.map +0 -1
  151. package/dist/lib/config.d.ts +0 -12
  152. package/dist/lib/config.js +0 -32
  153. package/dist/lib/config.js.map +0 -1
  154. package/dist/lib/upload.d.ts +0 -1
  155. package/dist/lib/upload.js +0 -13
  156. package/dist/lib/upload.js.map +0 -1
  157. package/dist/types.d.ts +0 -8
  158. package/dist/types.js +0 -2
  159. package/dist/types.js.map +0 -1
@@ -0,0 +1,45 @@
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 { AlpicCommand } from "../../lib/alpic-command.js";
6
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../lib/resolve.js";
7
+ export class EnvironmentDelete extends AlpicCommand {
8
+ static description = "Delete an environment. Production environments cannot be deleted. This operation is not reversible: associated logs, analytics, and metrics are deleted as well.";
9
+ static examples = [
10
+ "<%= config.bin %> environment delete --environment-id <environmentId>",
11
+ "<%= config.bin %> environment delete --environment-name <environmentName> --project-name <projectName>",
12
+ "<%= config.bin %> environment delete --environment-id <environmentId> --non-interactive",
13
+ "<%= config.bin %> environment delete",
14
+ ];
15
+ static flags = {
16
+ ...projectFlags,
17
+ ...environmentFlags,
18
+ "non-interactive": Flags.boolean({
19
+ description: "Disable interactive prompts. Requires --environment-id or --environment-name. Skips confirmation.",
20
+ default: false,
21
+ }),
22
+ };
23
+ async run() {
24
+ const { flags } = await this.parse(EnvironmentDelete);
25
+ await this.ensureAuthenticated(flags);
26
+ const environmentId = await resolveEnvironmentId(flags, { skipLocalConfig: true });
27
+ const spinner = this.spinner();
28
+ spinner.start("Fetching environment...");
29
+ const environment = await api.environments.get.v1({ environmentId });
30
+ spinner.stop("");
31
+ if (!flags["non-interactive"]) {
32
+ const confirmed = await p.confirm({
33
+ message: `Delete ${chalk.cyan(environment.name)}? This cannot be undone. Associated logs, analytics, and metrics will be deleted as well.`,
34
+ initialValue: false,
35
+ });
36
+ if (p.isCancel(confirmed) || !confirmed) {
37
+ throw new Error("Cancelled.");
38
+ }
39
+ }
40
+ spinner.start("Deleting environment...");
41
+ await api.environments.delete.v1({ environmentId });
42
+ spinner.stop(`Deleted ${chalk.cyan(environment.name)}. ✅`);
43
+ }
44
+ }
45
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/environment/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACjD,MAAM,CAAU,WAAW,GACzB,kKAAkK,CAAC;IAErK,MAAM,CAAU,QAAQ,GAAG;QACzB,uEAAuE;QACvE,wGAAwG;QACxG,yFAAyF;QACzF,sCAAsC;KACvC,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,YAAY;QACf,GAAG,gBAAgB;QACnB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,mGAAmG;YAChH,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEtD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjB,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,WAAW,CAAC,IAAI,CAAC,2FAA2F;gBAC1I,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,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC"}
@@ -3,7 +3,7 @@ import { Flags } from "@oclif/core";
3
3
  import chalk from "chalk";
4
4
  import { api } from "../../api.js";
5
5
  import { AlpicCommand } from "../../lib/alpic-command.js";
6
- import { config } from "../../lib/config.js";
6
+ import { alpic } from "../../lib/alpic-sdk.js";
7
7
  import { confirmLinkAnotherIfAlreadyConnected, GitWorkflow, isGitRepository, listGithubRemotes, promptGithubAppInstallation, showGitSetupInstructions, } from "../../lib/git.js";
8
8
  export default class GitConnect extends AlpicCommand {
9
9
  static description = "Connect a linked Alpic project to a git remote source";
@@ -21,7 +21,7 @@ export default class GitConnect extends AlpicCommand {
21
21
  const { flags } = await this.parse(GitConnect);
22
22
  p.intro("Connecting git repository to Alpic");
23
23
  await this.ensureAuthenticated(flags);
24
- const linkedConfig = config.load();
24
+ const linkedConfig = alpic.projects.loadConfig();
25
25
  if (!linkedConfig) {
26
26
  throw new Error("This directory is not linked to an Alpic project. Link it first using `alpic link`.");
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/git/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IAEtF,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,iDAAiD;QACjD,oDAAoD;KACrD,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,+BAA+B;SAC7C,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;YACzD,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;YAChE,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;YAC/B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YAC3C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,wBAAwB,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAEtF,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,wBAAwB;SAC3C,CAAC,CAAC;QAEH,MAAM,2BAA2B,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,CAAC;QAErE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzG,CAAC"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/git/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EACL,oCAAoC,EACpC,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IAEtF,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,iDAAiD;QACjD,oDAAoD;KACrD,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,+BAA+B;SAC7C,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;YACzD,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;YAChE,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;YAC/B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YAC3C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,wBAAwB,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAEtF,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,wBAAwB;SAC3C,CAAC,CAAC;QAEH,MAAM,2BAA2B,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,CAAC;QAErE,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzG,CAAC"}
@@ -2,7 +2,7 @@ import * as p from "@clack/prompts";
2
2
  import chalk from "chalk";
3
3
  import { api } from "../../api.js";
4
4
  import { AlpicCommand } from "../../lib/alpic-command.js";
5
- import { config } from "../../lib/config.js";
5
+ import { alpic } from "../../lib/alpic-sdk.js";
6
6
  import { GitWorkflow } from "../../lib/git.js";
7
7
  export default class GitDisconnect extends AlpicCommand {
8
8
  static description = "Disconnect a linked Alpic project from its git remote source";
@@ -11,7 +11,7 @@ export default class GitDisconnect extends AlpicCommand {
11
11
  const { flags } = await this.parse(GitDisconnect);
12
12
  p.intro("Disconnecting git repository from Alpic");
13
13
  await this.ensureAuthenticated(flags);
14
- const linkedConfig = config.load();
14
+ const linkedConfig = alpic.projects.loadConfig();
15
15
  if (!linkedConfig) {
16
16
  throw new Error("This directory is not linked to an Alpic project. Link it first using `alpic link`.");
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/commands/git/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,MAAM,CAAU,WAAW,GAAG,8DAA8D,CAAC;IAE7F,MAAM,CAAU,QAAQ,GAAG,CAAC,kCAAkC,EAAE,oDAAoD,CAAC,CAAC;IAEtH,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC"}
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/commands/git/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,MAAM,CAAU,WAAW,GAAG,8DAA8D,CAAC;IAE7F,MAAM,CAAU,QAAQ,GAAG,CAAC,kCAAkC,EAAE,oDAAoD,CAAC,CAAC;IAEtH,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { AlpicCommand } from "../../../lib/alpic-command.js";
2
+ export declare class InsightsCategoryCreate 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
+ "intent-id": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
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
+ private resolveName;
17
+ }
@@ -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 { 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);
32
+ const name = await this.resolveName(flags);
33
+ const spinner = this.spinner();
34
+ spinner.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
+ spinner.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 spinner = this.spinner();
35
+ spinner.start("Deleting category...");
36
+ await api.intentCategories.delete.v1({ environmentId, categoryId: category.id });
37
+ spinner.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,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjF,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,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 spinner = this.spinner();
27
+ spinner.start("Linking intents...");
28
+ await api.intentCategories.link.v1({
29
+ environmentId,
30
+ categoryId: category.id,
31
+ intentIds,
32
+ });
33
+ spinner.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,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEpC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClG,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,45 @@
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 { AlpicCommand } from "../../../lib/alpic-command.js";
6
+ import { pluralCategories } from "../../../lib/insights.js";
7
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
8
+ import { formatTable } from "../../../lib/table.js";
9
+ export class InsightsCategoryList extends AlpicCommand {
10
+ static description = "List intent categories for an environment";
11
+ static examples = [
12
+ "<%= config.bin %> insights category list",
13
+ "<%= config.bin %> insights category list --environment-id <environmentId>",
14
+ "<%= config.bin %> insights category list --json --non-interactive",
15
+ ];
16
+ static flags = {
17
+ ...environmentFlags,
18
+ ...projectFlags,
19
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
20
+ };
21
+ async run() {
22
+ const { flags } = await this.parse(InsightsCategoryList);
23
+ await this.ensureAuthenticated(flags);
24
+ const environmentId = await resolveEnvironmentId(flags);
25
+ const spinner = this.spinner();
26
+ spinner.start("Fetching categories...");
27
+ const categories = await api.intentCategories.list.v1({ environmentId });
28
+ spinner.stop(`Found ${pluralCategories(categories.length)}`);
29
+ if (flags.json) {
30
+ this.log(JSON.stringify(categories));
31
+ return;
32
+ }
33
+ if (categories.length === 0) {
34
+ p.log.info("No intent categories found in this environment.");
35
+ return;
36
+ }
37
+ console.log(formatTable(categories, [
38
+ { key: "name", header: "name", format: (value) => chalk.bold(value) },
39
+ { key: "color", header: "color", format: (value) => chalk.gray(value) },
40
+ { key: "intentCount", header: "intents", format: (value) => chalk.gray(value) },
41
+ { key: "id", header: "id", format: (value) => chalk.gray(value) },
42
+ ]));
43
+ }
44
+ }
45
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/insights/category/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,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,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,MAAM,CAAU,WAAW,GAAG,2CAA2C,CAAC;IAE1E,MAAM,CAAU,QAAQ,GAAG;QACzB,0CAA0C;QAC1C,2EAA2E;QAC3E,mEAAmE;KACpE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,gBAAgB;QACnB,GAAG,YAAY;QACf,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,oBAAoB,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzE,OAAO,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,UAAU,EAAE;YACtB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACvE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/E,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAClE,CAAC,CACH,CAAC;IACJ,CAAC"}
@@ -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 spinner = this.spinner();
27
+ spinner.start("Unlinking intents...");
28
+ await api.intentCategories.unlink.v1({
29
+ environmentId,
30
+ categoryId: category.id,
31
+ intentIds,
32
+ });
33
+ spinner.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,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS;SACV,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtG,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,44 @@
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 { AlpicCommand } from "../../../lib/alpic-command.js";
6
+ import { categoryFlags, parseIntentCategoryColor, resolveIntentCategory } from "../../../lib/insights.js";
7
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
8
+ export class InsightsCategoryUpdate extends AlpicCommand {
9
+ static description = "Rename or recolor an intent category";
10
+ static examples = [
11
+ "<%= config.bin %> insights category update --name Scheduling",
12
+ "<%= config.bin %> insights category update --category-id <categoryId> --color green",
13
+ ];
14
+ static flags = {
15
+ ...environmentFlags,
16
+ ...projectFlags,
17
+ ...categoryFlags,
18
+ name: Flags.string({ description: "The new category name" }),
19
+ color: Flags.string({ description: "The new category color", options: [...INTENT_CATEGORY_COLORS] }),
20
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
21
+ };
22
+ async run() {
23
+ const { flags } = await this.parse(InsightsCategoryUpdate);
24
+ if (flags.name === undefined && flags.color === undefined) {
25
+ throw new Error("At least one of --name or --color must be provided.");
26
+ }
27
+ await this.ensureAuthenticated(flags);
28
+ const environmentId = await resolveEnvironmentId(flags);
29
+ const category = await resolveIntentCategory(environmentId, flags, "update");
30
+ const spinner = this.spinner();
31
+ spinner.start("Updating category...");
32
+ const updated = await api.intentCategories.update.v1({
33
+ environmentId,
34
+ categoryId: category.id,
35
+ name: flags.name,
36
+ color: parseIntentCategoryColor(flags.color),
37
+ });
38
+ spinner.stop(`Updated ${chalk.cyan(updated.name)} (${updated.color}). ✅`);
39
+ if (flags.json) {
40
+ this.log(JSON.stringify(updated));
41
+ }
42
+ }
43
+ }
44
+ //# 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,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,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,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,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC;QAE1E,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,72 @@
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 { AlpicCommand } from "../../../lib/alpic-command.js";
6
+ import { truncateInsightContent } from "../../../lib/insights.js";
7
+ import { environmentFlags, projectFlags, resolveEnvironmentId } from "../../../lib/resolve.js";
8
+ import { formatTable } from "../../../lib/table.js";
9
+ import { plural, validateTimeFlag } from "../../../lib/utils.js";
10
+ export class InsightsFeedbackList extends AlpicCommand {
11
+ static description = "List user feedback for an environment";
12
+ static examples = [
13
+ "<%= config.bin %> insights feedback list",
14
+ "<%= config.bin %> insights feedback list --environment-name production --project-name my-project",
15
+ "<%= config.bin %> insights feedback list --search timeout --client-id claude-desktop",
16
+ "<%= config.bin %> insights feedback list --json --non-interactive",
17
+ ];
18
+ static flags = {
19
+ ...environmentFlags,
20
+ ...projectFlags,
21
+ since: Flags.string({
22
+ description: "Show feedback after this time (relative duration or ISO 8601 date)",
23
+ default: "7d",
24
+ }),
25
+ until: Flags.string({ description: "Show feedback before this time (relative duration or ISO 8601 date)" }),
26
+ search: Flags.string({ description: "Search feedback content and source" }),
27
+ "client-id": Flags.string({ description: "Filter by stable MCP client ID", multiple: true }),
28
+ limit: Flags.integer({ description: "Maximum number of feedbacks to return", min: 1, max: 200, default: 50 }),
29
+ offset: Flags.integer({ description: "Number of feedbacks to skip", min: 0, default: 0 }),
30
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
31
+ };
32
+ async run() {
33
+ const { flags } = await this.parse(InsightsFeedbackList);
34
+ await this.ensureAuthenticated(flags);
35
+ const environmentId = await resolveEnvironmentId(flags);
36
+ validateTimeFlag(flags.since, "since");
37
+ validateTimeFlag(flags.until, "until");
38
+ const spinner = this.spinner();
39
+ spinner.start("Fetching feedback...");
40
+ const response = await api.feedbacks.list.v1({
41
+ environmentId,
42
+ since: flags.since,
43
+ until: flags.until,
44
+ search: flags.search,
45
+ clientIds: flags["client-id"],
46
+ limit: flags.limit,
47
+ offset: flags.offset,
48
+ });
49
+ spinner.stop(`Found ${plural(response.totalCount, "feedback")}`);
50
+ if (flags.json) {
51
+ this.log(JSON.stringify(response));
52
+ return;
53
+ }
54
+ if (response.feedbacks.length === 0) {
55
+ p.log.info("No feedback found for this period.");
56
+ return;
57
+ }
58
+ const rows = response.feedbacks.map((feedback) => ({
59
+ date: feedback.createdAt.toISOString(),
60
+ source: feedback.source,
61
+ feedback: truncateInsightContent(feedback.content),
62
+ client: feedback.clientName ?? feedback.clientId ?? "-",
63
+ }));
64
+ console.log(formatTable(rows, [
65
+ { key: "date", header: "date", format: (value) => chalk.gray(value) },
66
+ { key: "source", header: "source", format: (value) => chalk.cyan(value) },
67
+ { key: "feedback", header: "feedback", format: (value) => chalk.bold(value) },
68
+ { key: "client", header: "client", format: (value) => chalk.gray(value) },
69
+ ]));
70
+ }
71
+ }
72
+ //# sourceMappingURL=list.js.map