alpic 0.0.0-dev.gef1a773 → 0.0.0-dev.gef36c2a

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 (140) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/audit.e2e.test.js +1 -1
  3. package/dist/__tests__/audit.e2e.test.js.map +1 -1
  4. package/dist/__tests__/deployment-logs.e2e.test.js +0 -1
  5. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -1
  6. package/dist/__tests__/environment-delete.e2e.test.d.ts +1 -0
  7. package/dist/__tests__/environment-delete.e2e.test.js +95 -0
  8. package/dist/__tests__/environment-delete.e2e.test.js.map +1 -0
  9. package/dist/__tests__/git.e2e.test.js +1 -1
  10. package/dist/__tests__/git.e2e.test.js.map +1 -1
  11. package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
  12. package/dist/__tests__/insights-category.e2e.test.js +247 -0
  13. package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
  14. package/dist/__tests__/insights.e2e.test.d.ts +1 -0
  15. package/dist/__tests__/insights.e2e.test.js +193 -0
  16. package/dist/__tests__/insights.e2e.test.js.map +1 -0
  17. package/dist/__tests__/logs.e2e.test.js +0 -1
  18. package/dist/__tests__/logs.e2e.test.js.map +1 -1
  19. package/dist/__tests__/mock-api.d.ts +19 -0
  20. package/dist/__tests__/mock-api.js +280 -32
  21. package/dist/__tests__/mock-api.js.map +1 -1
  22. package/dist/__tests__/publish.e2e.test.js +1 -3
  23. package/dist/__tests__/publish.e2e.test.js.map +1 -1
  24. package/dist/__tests__/submission.e2e.test.d.ts +1 -0
  25. package/dist/__tests__/submission.e2e.test.js +146 -0
  26. package/dist/__tests__/submission.e2e.test.js.map +1 -0
  27. package/dist/__tests__/team-inspect.e2e.test.js +26 -1
  28. package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
  29. package/dist/__tests__/tunnel.e2e.test.js +3 -9
  30. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  31. package/dist/__tests__/utils.d.ts +5 -11
  32. package/dist/__tests__/utils.js +20 -23
  33. package/dist/__tests__/utils.js.map +1 -1
  34. package/dist/commands/audit.js +3 -1
  35. package/dist/commands/audit.js.map +1 -1
  36. package/dist/commands/deploy.js +12 -11
  37. package/dist/commands/deploy.js.map +1 -1
  38. package/dist/commands/deployment/list.js +3 -3
  39. package/dist/commands/deployment/list.js.map +1 -1
  40. package/dist/commands/environment/delete.d.ts +13 -0
  41. package/dist/commands/environment/delete.js +45 -0
  42. package/dist/commands/environment/delete.js.map +1 -0
  43. package/dist/commands/environment/inspect.js +3 -3
  44. package/dist/commands/environment/inspect.js.map +1 -1
  45. package/dist/commands/environment/list.js +3 -3
  46. package/dist/commands/environment/list.js.map +1 -1
  47. package/dist/commands/insights/category/create.d.ts +17 -0
  48. package/dist/commands/insights/category/create.js +63 -0
  49. package/dist/commands/insights/category/create.js.map +1 -0
  50. package/dist/commands/insights/category/delete.d.ts +13 -0
  51. package/dist/commands/insights/category/delete.js +40 -0
  52. package/dist/commands/insights/category/delete.js.map +1 -0
  53. package/dist/commands/insights/category/link.d.ts +14 -0
  54. package/dist/commands/insights/category/link.js +36 -0
  55. package/dist/commands/insights/category/link.js.map +1 -0
  56. package/dist/commands/insights/category/list.d.ts +13 -0
  57. package/dist/commands/insights/category/list.js +46 -0
  58. package/dist/commands/insights/category/list.js.map +1 -0
  59. package/dist/commands/insights/category/unlink.d.ts +14 -0
  60. package/dist/commands/insights/category/unlink.js +36 -0
  61. package/dist/commands/insights/category/unlink.js.map +1 -0
  62. package/dist/commands/insights/category/update.d.ts +16 -0
  63. package/dist/commands/insights/category/update.js +45 -0
  64. package/dist/commands/insights/category/update.js.map +1 -0
  65. package/dist/commands/insights/feedback/list.d.ts +19 -0
  66. package/dist/commands/insights/feedback/list.js +73 -0
  67. package/dist/commands/insights/feedback/list.js.map +1 -0
  68. package/dist/commands/insights/intent/list.d.ts +22 -0
  69. package/dist/commands/insights/intent/list.js +89 -0
  70. package/dist/commands/insights/intent/list.js.map +1 -0
  71. package/dist/commands/link.js +4 -3
  72. package/dist/commands/link.js.map +1 -1
  73. package/dist/commands/logs.js +1 -9
  74. package/dist/commands/logs.js.map +1 -1
  75. package/dist/commands/project/inspect.js +3 -3
  76. package/dist/commands/project/inspect.js.map +1 -1
  77. package/dist/commands/project/list.js +3 -3
  78. package/dist/commands/project/list.js.map +1 -1
  79. package/dist/commands/submission/create.d.ts +15 -0
  80. package/dist/commands/submission/create.js +59 -0
  81. package/dist/commands/submission/create.js.map +1 -0
  82. package/dist/commands/submission/inspect.d.ts +10 -0
  83. package/dist/commands/submission/inspect.js +56 -0
  84. package/dist/commands/submission/inspect.js.map +1 -0
  85. package/dist/commands/submission/update.d.ts +12 -0
  86. package/dist/commands/submission/update.js +37 -0
  87. package/dist/commands/submission/update.js.map +1 -0
  88. package/dist/commands/team/inspect.js +25 -10
  89. package/dist/commands/team/inspect.js.map +1 -1
  90. package/dist/commands/team/list.js +3 -3
  91. package/dist/commands/team/list.js.map +1 -1
  92. package/dist/commands/tunnel.js +7 -11
  93. package/dist/commands/tunnel.js.map +1 -1
  94. package/dist/lib/agent-mode.d.ts +8 -1
  95. package/dist/lib/agent-mode.js +25 -26
  96. package/dist/lib/agent-mode.js.map +1 -1
  97. package/dist/lib/alpic-command.d.ts +2 -1
  98. package/dist/lib/alpic-command.js +3 -3
  99. package/dist/lib/alpic-command.js.map +1 -1
  100. package/dist/lib/alpic-sdk.js +1 -2
  101. package/dist/lib/alpic-sdk.js.map +1 -1
  102. package/dist/lib/audit.d.ts +1 -0
  103. package/dist/lib/audit.js +22 -13
  104. package/dist/lib/audit.js.map +1 -1
  105. package/dist/lib/base-workflow.d.ts +2 -1
  106. package/dist/lib/base-workflow.js +3 -3
  107. package/dist/lib/base-workflow.js.map +1 -1
  108. package/dist/lib/deployment.js +12 -12
  109. package/dist/lib/deployment.js.map +1 -1
  110. package/dist/lib/environment-variable.js +14 -13
  111. package/dist/lib/environment-variable.js.map +1 -1
  112. package/dist/lib/insights.d.ts +19 -0
  113. package/dist/lib/insights.js +54 -0
  114. package/dist/lib/insights.js.map +1 -0
  115. package/dist/lib/link.js +5 -4
  116. package/dist/lib/link.js.map +1 -1
  117. package/dist/lib/logs.js +1 -0
  118. package/dist/lib/logs.js.map +1 -1
  119. package/dist/lib/playground.js +25 -25
  120. package/dist/lib/playground.js.map +1 -1
  121. package/dist/lib/project-settings.js +1 -9
  122. package/dist/lib/project-settings.js.map +1 -1
  123. package/dist/lib/publish.js +3 -3
  124. package/dist/lib/publish.js.map +1 -1
  125. package/dist/lib/resolve.d.ts +7 -6
  126. package/dist/lib/resolve.js +23 -19
  127. package/dist/lib/resolve.js.map +1 -1
  128. package/dist/lib/submission.d.ts +13 -0
  129. package/dist/lib/submission.js +52 -0
  130. package/dist/lib/submission.js.map +1 -0
  131. package/dist/lib/telemetry.js +12 -19
  132. package/dist/lib/telemetry.js.map +1 -1
  133. package/dist/lib/utils.d.ts +8 -1
  134. package/dist/lib/utils.js +14 -1
  135. package/dist/lib/utils.js.map +1 -1
  136. package/dist/lib/utils.test.js +28 -5
  137. package/dist/lib/utils.test.js.map +1 -1
  138. package/dist/sentry.js +3 -6
  139. package/dist/sentry.js.map +1 -1
  140. package/package.json +20 -20
@@ -0,0 +1,56 @@
1
+ import { PLATFORM_LABELS } 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 { formatFormDataValue, submissionFlags } from "../../lib/submission.js";
8
+ import { formatTable } from "../../lib/table.js";
9
+ import { formatAgo } from "../../lib/utils.js";
10
+ export class SubmissionInspect extends AlpicCommand {
11
+ static description = "Show a submission package and the fields it carries";
12
+ static examples = [
13
+ "<%= config.bin %> submission inspect --submission-id <submissionId>",
14
+ "<%= config.bin %> submission inspect --submission-id <submissionId> --json",
15
+ ];
16
+ static flags = {
17
+ ...submissionFlags,
18
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(SubmissionInspect);
22
+ await this.ensureAuthenticated(flags);
23
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
24
+ logger.start("Fetching submission...");
25
+ const submission = await api.submissions.get.v1({ submissionId: flags["submission-id"] });
26
+ logger.stop("Submission found");
27
+ if (flags.json) {
28
+ this.log(JSON.stringify(submission));
29
+ return;
30
+ }
31
+ const detailRows = [
32
+ { label: "ID", value: chalk.cyan(submission.id) },
33
+ { label: "Platform", value: PLATFORM_LABELS[submission.platform] },
34
+ { label: "Environment", value: submission.environmentId },
35
+ { label: "Beacon audit", value: submission.auditId ?? chalk.gray("-") },
36
+ { label: "Created", value: formatAgo(submission.createdAt) },
37
+ { label: "Updated", value: formatAgo(submission.updatedAt) },
38
+ ];
39
+ console.log(formatTable(detailRows, [
40
+ { key: "label", header: "", format: (value) => chalk.bold(value) },
41
+ { key: "value", header: "" },
42
+ ]));
43
+ const fieldRows = Object.entries(submission.formData).map(([field, value]) => ({
44
+ field,
45
+ value: formatFormDataValue(value),
46
+ }));
47
+ if (fieldRows.length === 0) {
48
+ return;
49
+ }
50
+ console.log(formatTable(fieldRows, [
51
+ { key: "field", header: "field", format: (value) => chalk.bold(value) },
52
+ { key: "value", header: "value" },
53
+ ]));
54
+ }
55
+ }
56
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/submission/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AlpicCommand } from "../../lib/alpic-command.js";
2
+ export declare class SubmissionUpdate extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ "form-data": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "form-data-file": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "submission-id": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,37 @@
1
+ import { Flags } from "@oclif/core";
2
+ import chalk from "chalk";
3
+ import { api } from "../../api.js";
4
+ import { ERRORS_ONLY } from "../../lib/agent-mode.js";
5
+ import { AlpicCommand } from "../../lib/alpic-command.js";
6
+ import { formDataFlags, readFormData, submissionFlags } from "../../lib/submission.js";
7
+ export class SubmissionUpdate extends AlpicCommand {
8
+ static description = "Update the fields of a submission package. Only the fields you pass are changed; the rest are left as they are.";
9
+ static examples = [
10
+ "<%= config.bin %> submission update --submission-id <submissionId> --form-data-file ./submission.json",
11
+ '<%= config.bin %> submission update --submission-id <submissionId> --form-data \'{"appName":"Chess"}\'',
12
+ "jq -n '{tagline: \"Play chess in the conversation\"}' | <%= config.bin %> submission update --submission-id <submissionId> --form-data-file -",
13
+ ];
14
+ static flags = {
15
+ ...submissionFlags,
16
+ ...formDataFlags,
17
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
18
+ };
19
+ async run() {
20
+ const { flags } = await this.parse(SubmissionUpdate);
21
+ const formData = readFormData(flags);
22
+ await this.ensureAuthenticated(flags);
23
+ const submissionId = flags["submission-id"];
24
+ const logger = this.logger(flags.json ? ERRORS_ONLY : "all");
25
+ logger.start("Fetching submission...");
26
+ const submission = await api.submissions.get.v1({ submissionId });
27
+ logger.message("Updating submission...");
28
+ const updated = submission.platform === "chatgpt"
29
+ ? await api.submissions.update.v1({ submissionId, platform: "chatgpt", formData })
30
+ : await api.submissions.update.v1({ submissionId, platform: "claudeai", formData });
31
+ logger.stop(`Updated ${chalk.cyan(updated.id)}. ✅`);
32
+ if (flags.json) {
33
+ this.log(JSON.stringify(updated));
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/submission/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAChD,MAAM,CAAU,WAAW,GACzB,iHAAiH,CAAC;IAEpH,MAAM,CAAU,QAAQ,GAAG;QACzB,uGAAuG;QACvG,wGAAwG;QACxG,+IAA+I;KAChJ,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,eAAe;QAClB,GAAG,aAAa;QAChB,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,gBAAgB,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QAC5C,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,wBAAwB,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAElE,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEzC,MAAM,OAAO,GACX,UAAU,CAAC,QAAQ,KAAK,SAAS;YAC/B,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YAClF,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC"}
@@ -4,7 +4,20 @@ import chalk from "chalk";
4
4
  import { api } from "../../api.js";
5
5
  import { AlpicCommand } from "../../lib/alpic-command.js";
6
6
  import { formatTable } from "../../lib/table.js";
7
- import { formatAgo, plural } from "../../lib/utils.js";
7
+ import { formatAgo, formatUsage, getResponseErrorStatus, plural } from "../../lib/utils.js";
8
+ const NOT_FOUND_STATUS = 404;
9
+ /** A published CLI outlives the server it talks to, so a server without the usage route drops the row rather than the command. */
10
+ const fetchTeamUsage = async (teamId) => {
11
+ try {
12
+ return await api.teams.getUsage.v1({ teamId });
13
+ }
14
+ catch (error) {
15
+ if (getResponseErrorStatus(error) === NOT_FOUND_STATUS) {
16
+ return null;
17
+ }
18
+ throw error;
19
+ }
20
+ };
8
21
  export class TeamInspect extends AlpicCommand {
9
22
  static description = "Show details of a team and its projects";
10
23
  static examples = ["<%= config.bin %> team inspect --team-id <teamId>", "<%= config.bin %> team inspect"];
@@ -21,18 +34,18 @@ export class TeamInspect extends AlpicCommand {
21
34
  const { flags } = await this.parse(TeamInspect);
22
35
  await this.ensureAuthenticated(flags);
23
36
  let teamId = flags["team-id"];
24
- const spinner = this.spinner();
25
- spinner.start("Fetching teams...");
37
+ const logger = this.logger();
38
+ logger.start("Fetching teams...");
26
39
  let teams;
27
40
  try {
28
41
  teams = await api.teams.list.v1();
29
42
  }
30
43
  catch (error) {
31
- spinner.stop();
44
+ logger.stop();
32
45
  throw error;
33
46
  }
34
47
  if (!teamId) {
35
- spinner.stop("");
48
+ logger.stop("");
36
49
  if (flags["non-interactive"]) {
37
50
  this.exitWithErrorMessage("No team specified. Use --team-id <teamId>.");
38
51
  }
@@ -49,26 +62,28 @@ export class TeamInspect extends AlpicCommand {
49
62
  this.exit(1);
50
63
  }
51
64
  teamId = choice;
52
- spinner.start("Fetching team...");
65
+ logger.start("Fetching team...");
53
66
  }
54
67
  const team = teams.find(({ id }) => id === teamId);
55
68
  if (!team) {
56
- spinner.stop("Team not found");
69
+ logger.stop("Team not found");
57
70
  this.exitWithErrorMessage(`Team not found: ${teamId}`);
58
71
  }
59
72
  let projects;
73
+ let usage;
60
74
  try {
61
- projects = await api.projects.list.v1({ teamId });
75
+ [projects, usage] = await Promise.all([api.projects.list.v1({ teamId }), fetchTeamUsage(teamId)]);
62
76
  }
63
77
  catch (error) {
64
- spinner.stop();
78
+ logger.stop();
65
79
  throw error;
66
80
  }
67
- spinner.stop("Team found");
81
+ logger.stop("Team found");
68
82
  const detailRows = [
69
83
  { label: "ID", value: chalk.cyan(team.id) },
70
84
  { label: "Name", value: team.name },
71
85
  { label: "Stripe Account", value: team.hasStripeAccount ? "yes" : chalk.gray("no") },
86
+ ...(usage === null ? [] : [{ label: "Usage", value: formatUsage(usage) }]),
72
87
  { label: "Created", value: formatAgo(team.createdAt) },
73
88
  ];
74
89
  console.log(formatTable(detailRows, [
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/team/inspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/team/inspect.ts"],"names":[],"mappings":"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"}
@@ -17,10 +17,10 @@ export class TeamList extends AlpicCommand {
17
17
  async run() {
18
18
  const { flags } = await this.parse(TeamList);
19
19
  await this.ensureAuthenticated(flags);
20
- const spinner = this.spinner();
21
- spinner.start("Fetching teams...");
20
+ const logger = this.logger();
21
+ logger.start("Fetching teams...");
22
22
  const teams = await api.teams.list.v1();
23
- spinner.stop(`Found ${plural(teams.length, "team")}`);
23
+ logger.stop(`Found ${plural(teams.length, "team")}`);
24
24
  if (teams.length === 0) {
25
25
  p.log.info("No teams found.");
26
26
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/team/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;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,OAAO,QAAS,SAAQ,YAAY;IACxC,MAAM,CAAU,WAAW,GAAG,iCAAiC,CAAC;IAEhE,MAAM,CAAU,QAAQ,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3D,MAAM,CAAU,KAAK,GAAG;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,6BAA6B;YAC1C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAExC,OAAO,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;SAC3E,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,IAAI,EAAE;YAChB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjE,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,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAC5E,CAAC,CACH,CAAC;IACJ,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/team/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;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,OAAO,QAAS,SAAQ,YAAY;IACxC,MAAM,CAAU,WAAW,GAAG,iCAAiC,CAAC;IAEhE,MAAM,CAAU,QAAQ,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3D,MAAM,CAAU,KAAK,GAAG;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,6BAA6B;YAC1C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;SAC3E,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,IAAI,EAAE;YAChB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjE,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,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAC5E,CAAC,CACH,CAAC;IACJ,CAAC"}
@@ -20,9 +20,7 @@ export class Tunnel extends AlpicCommand {
20
20
  async run() {
21
21
  const { flags } = await this.parse(Tunnel);
22
22
  const isPlain = flags.plain;
23
- // Authenticate before opening (tunnel.open requires a token) so we control the
24
- // login messaging. Check the OAuth token specifically (not isAuthenticated):
25
- // tunnels require user OAuth, and an ALPIC_API_KEY alone cannot open one.
23
+ // Checks the OAuth token specifically (not isAuthenticated) because tunnels require user OAuth — an ALPIC_API_KEY alone cannot open one — and authenticating up front lets us control the login messaging.
26
24
  if (!(await alpic.auth.getValidAccessToken())) {
27
25
  const loginMsg = "You need to be logged in to use the Alpic tunnel";
28
26
  isPlain ? console.log(loginMsg) : p.log.step(loginMsg);
@@ -33,14 +31,14 @@ export class Tunnel extends AlpicCommand {
33
31
  },
34
32
  });
35
33
  }
36
- let spinner;
34
+ let logger;
37
35
  const intro = "Opening tunnel...";
38
36
  if (isPlain) {
39
37
  console.log(intro);
40
38
  }
41
39
  else {
42
- spinner = this.spinner();
43
- spinner.start(intro);
40
+ logger = this.logger();
41
+ logger.start(intro);
44
42
  }
45
43
  let handle;
46
44
  try {
@@ -49,7 +47,7 @@ export class Tunnel extends AlpicCommand {
49
47
  });
50
48
  }
51
49
  catch (err) {
52
- spinner?.stop(intro);
50
+ logger?.stop(intro);
53
51
  throw err;
54
52
  }
55
53
  const url = handle.url;
@@ -58,7 +56,7 @@ export class Tunnel extends AlpicCommand {
58
56
  console.log(message);
59
57
  }
60
58
  else {
61
- spinner?.stop(message);
59
+ logger?.stop(message);
62
60
  p.log.step(`Test it live at ${url}/try`);
63
61
  p.log.info("Press Ctrl+C to close the tunnel");
64
62
  }
@@ -105,9 +103,7 @@ export class Tunnel extends AlpicCommand {
105
103
  const message = err.message;
106
104
  isPlain ? console.error(message) : pushActivity(chalk.red(message));
107
105
  });
108
- // If the tunnel dies without a user-initiated shutdown, surface the
109
- // captured error so it reaches `catch` (and telemetry) instead of
110
- // silently exiting 0. The SDK reports `displaced` when a newer tunnel takes over.
106
+ // If the tunnel dies without a user-initiated shutdown, surface the captured error so it reaches `catch` (and telemetry) instead of silently exiting 0.
111
107
  handle.on("close", (info) => {
112
108
  if (info?.displaced) {
113
109
  const message = "Tunnel closed: a new tunnel was opened for this account";
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
1
  import * as p from "@clack/prompts";
2
2
  export declare function isAgentMode(): boolean;
3
- export declare function createSpinner(): p.SpinnerResult;
3
+ declare const LOG_LEVELS: readonly ["start", "stop", "cancel", "error"];
4
+ export type LogLevel = (typeof LOG_LEVELS)[number];
5
+ export type LogLevels = "all" | readonly LogLevel[];
6
+ /** All a `--json` command can afford: progress on stdout would corrupt the payload, while failures still reach stderr. */
7
+ export declare const ERRORS_ONLY: readonly LogLevel[];
8
+ /** A clack spinner on a TTY, plain logging everywhere else; any restricted level set rules the spinner out, since it cannot be silenced per level. */
9
+ export declare function createLogger(levels?: LogLevels): p.SpinnerResult;
10
+ export {};
@@ -4,33 +4,32 @@ const agentResult = await determineAgent();
4
4
  export function isAgentMode() {
5
5
  return agentResult.isAgent;
6
6
  }
7
- export function createSpinner() {
7
+ const LOG_LEVELS = ["start", "stop", "cancel", "error"];
8
+ /** All a `--json` command can afford: progress on stdout would corrupt the payload, while failures still reach stderr. */
9
+ export const ERRORS_ONLY = ["cancel", "error"];
10
+ function createLevelledLogger(levels) {
11
+ const write = (level, stream) => (message) => {
12
+ if (message && levels.includes(level)) {
13
+ stream(message);
14
+ }
15
+ };
16
+ return {
17
+ start: write("start", console.log),
18
+ stop: write("stop", console.log),
19
+ message: () => { },
20
+ cancel: write("cancel", console.error),
21
+ error: write("error", console.error),
22
+ clear: () => { },
23
+ isCancelled: false,
24
+ };
25
+ }
26
+ /** A clack spinner on a TTY, plain logging everywhere else; any restricted level set rules the spinner out, since it cannot be silenced per level. */
27
+ export function createLogger(levels = "all") {
28
+ if (levels !== "all") {
29
+ return createLevelledLogger(levels);
30
+ }
8
31
  if (process.env.VITEST || isAgentMode()) {
9
- return {
10
- start: (message) => {
11
- if (message) {
12
- console.log(message);
13
- }
14
- },
15
- stop: (message) => {
16
- if (message) {
17
- console.log(message);
18
- }
19
- },
20
- message: () => { },
21
- cancel: (message) => {
22
- if (message) {
23
- console.error(message);
24
- }
25
- },
26
- error: (message) => {
27
- if (message) {
28
- console.error(message);
29
- }
30
- },
31
- clear: () => { },
32
- isCancelled: false,
33
- };
32
+ return createLevelledLogger(LOG_LEVELS);
34
33
  }
35
34
  return p.spinner();
36
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-mode.js","sourceRoot":"","sources":["../../src/lib/agent-mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;AAE3C,MAAM,UAAU,WAAW;IACzB,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;gBAC1B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACzB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;YACjB,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE;gBAC3B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;gBAC1B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,WAAW,EAAE,KAAc;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"agent-mode.js","sourceRoot":"","sources":["../../src/lib/agent-mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;AAE3C,MAAM,UAAU,WAAW;IACzB,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAKjE,0HAA0H;AAC1H,MAAM,CAAC,MAAM,WAAW,GAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEpE,SAAS,oBAAoB,CAAC,MAA2B;IACvD,MAAM,KAAK,GAAG,CAAC,KAAe,EAAE,MAAiC,EAAE,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE;QACzF,IAAI,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QACtC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;QACpC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,WAAW,EAAE,KAAc;KAC5B,CAAC;AACJ,CAAC;AAED,sJAAsJ;AACtJ,MAAM,UAAU,YAAY,CAAC,SAAoB,KAAK;IACpD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { Command } from "@oclif/core";
3
+ import { type LogLevels } from "./agent-mode.js";
3
4
  export declare abstract class AlpicCommand extends Command {
4
5
  static baseFlags: {
5
6
  "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
@@ -8,6 +9,6 @@ export declare abstract class AlpicCommand extends Command {
8
9
  ensureAuthenticated(flags: {
9
10
  "non-interactive"?: boolean;
10
11
  }): Promise<void>;
11
- protected spinner(): p.SpinnerResult;
12
+ protected logger(levels?: LogLevels): p.SpinnerResult;
12
13
  protected exitWithErrorMessage(message: string, cause?: unknown): never;
13
14
  }
@@ -1,7 +1,7 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { Command, Errors, Flags } from "@oclif/core";
3
3
  import { ORPCError } from "@orpc/client";
4
- import { createSpinner } from "./agent-mode.js";
4
+ import { createLogger } from "./agent-mode.js";
5
5
  import { alpic } from "./alpic-sdk.js";
6
6
  import { getResponseErrorStatus } from "./utils.js";
7
7
  export class AlpicCommand extends Command {
@@ -45,8 +45,8 @@ export class AlpicCommand extends Command {
45
45
  });
46
46
  }
47
47
  }
48
- spinner() {
49
- return createSpinner();
48
+ logger(levels) {
49
+ return createLogger(levels);
50
50
  }
51
51
  exitWithErrorMessage(message, cause) {
52
52
  p.cancel(message);
@@ -1 +1 @@
1
- {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { Alpic } from "@alpic-ai/sdk";
2
2
  import { aliasMachineToUser } from "./telemetry.js";
3
3
  export const alpic = new Alpic();
4
- // The SDK is telemetry-free; the CLI owns transport. Alias the machine to the
5
- // user on every authentication (explicit login + auto-login from any command).
4
+ // The SDK is telemetry-free (the CLI owns transport), so the machine is aliased to the user here on every authentication, explicit login and auto-login alike.
6
5
  alpic.auth.on("authenticated", ({ sub }) => {
7
6
  void aliasMachineToUser(sub);
8
7
  });
@@ -1 +1 @@
1
- {"version":3,"file":"alpic-sdk.js","sourceRoot":"","sources":["../../src/lib/alpic-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAEjC,8EAA8E;AAC9E,+EAA+E;AAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACzC,KAAK,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"alpic-sdk.js","sourceRoot":"","sources":["../../src/lib/alpic-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAEjC,+JAA+J;AAC/J,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACzC,KAAK,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
@@ -8,6 +8,7 @@ export type AuditFlags = {
8
8
  "non-interactive"?: boolean;
9
9
  };
10
10
  export declare class AuditWorkflow extends BaseWorkflow<AuditFlags> {
11
+ private info;
11
12
  runAudit(): Promise<number>;
12
13
  private validateFlags;
13
14
  private resolveStandalone;
package/dist/lib/audit.js CHANGED
@@ -2,12 +2,19 @@ import { PLATFORM_LABELS } from "@alpic-ai/api";
2
2
  import * as p from "@clack/prompts";
3
3
  import chalk from "chalk";
4
4
  import { api } from "../api.js";
5
+ import { ERRORS_ONLY } from "./agent-mode.js";
5
6
  import { alpic } from "./alpic-sdk.js";
6
7
  import { BaseWorkflow } from "./base-workflow.js";
7
8
  import { pollIntervalMs } from "./utils.js";
8
- const DEFAULT_POLL_INTERVAL_MS = pollIntervalMs(2_000);
9
+ // Keeps a full-length audit under the 30 requests/minute WAF budget on /v1/beacon (infrastructure/lib/constructs/Firewall.ts).
10
+ const DEFAULT_POLL_INTERVAL_MS = pollIntervalMs(5_000);
9
11
  const MAX_POLL_MS = 120_000;
10
12
  export class AuditWorkflow extends BaseWorkflow {
13
+ info(message) {
14
+ if (!this.flags.json) {
15
+ p.log.info(message);
16
+ }
17
+ }
11
18
  async runAudit() {
12
19
  this.validateFlags();
13
20
  const target = this.flags.url
@@ -18,32 +25,32 @@ export class AuditWorkflow extends BaseWorkflow {
18
25
  return 0;
19
26
  }
20
27
  const { targetUrl, teamId, projectId } = target;
21
- const spinner = this.spinner();
22
- p.log.info(`Target URL ${chalk.dim(targetUrl)}`);
23
- spinner.start("Starting audit...");
28
+ const logger = this.logger(this.flags.json ? ERRORS_ONLY : "all");
29
+ this.info(`Target URL ${chalk.dim(targetUrl)}`);
30
+ logger.start("Starting audit...");
24
31
  const { id } = await api.beacon.create.v1({
25
32
  targetUrl,
26
33
  teamId,
27
34
  projectId,
28
35
  excludeCategories: ["e2e"],
29
36
  });
30
- spinner.stop(`Audit created ${chalk.dim(id)}`);
31
- spinner.start("Running checks...");
37
+ logger.stop(`Audit created ${chalk.dim(id)}`);
38
+ logger.start("Running checks...");
32
39
  const startedAt = Date.now();
33
40
  let audit = await api.beacon.get.v1({ auditId: id });
34
41
  while (audit.status === "pending" || audit.status === "partial") {
35
42
  if (Date.now() - startedAt > MAX_POLL_MS) {
36
- spinner.stop("Timed out");
43
+ logger.stop("Timed out");
37
44
  throw new Error("Audit timed out after 2 minutes");
38
45
  }
39
46
  await new Promise((resolve) => setTimeout(resolve, DEFAULT_POLL_INTERVAL_MS));
40
47
  audit = await api.beacon.get.v1({ auditId: id });
41
48
  }
42
49
  if (audit.status === "failed") {
43
- spinner.stop("Audit failed");
50
+ logger.stop("Audit failed");
44
51
  throw new Error("The audit failed. The MCP server may be unreachable.");
45
52
  }
46
- spinner.stop(`Audit completed in ${chalk.bold(`${audit.durationMs ?? 0}ms`)}`);
53
+ logger.stop(`Audit completed in ${chalk.bold(`${audit.durationMs ?? 0}ms`)}`);
47
54
  const report = audit.report;
48
55
  if (!report) {
49
56
  throw new Error("Report not available");
@@ -86,7 +93,7 @@ export class AuditWorkflow extends BaseWorkflow {
86
93
  }
87
94
  const projectConfig = alpic.projects.loadConfig();
88
95
  if (projectConfig) {
89
- p.log.info(`Using project config from .alpic: project "${projectConfig.projectName}" (team: "${projectConfig.teamName}")`);
96
+ this.info(`Using project config from .alpic: project "${projectConfig.projectName}" (team: "${projectConfig.teamName}")`);
90
97
  const confirmed = await this.confirm({
91
98
  message: `Run audit for project "${projectConfig.projectName}"?`,
92
99
  initialValue: true,
@@ -110,7 +117,7 @@ export class AuditWorkflow extends BaseWorkflow {
110
117
  throw new Error("No teams found.");
111
118
  }
112
119
  selectedTeamId = singleTeam.id;
113
- p.log.info(`Using team ${chalk.bold(singleTeam.name)}`);
120
+ this.info(`Using team ${chalk.bold(singleTeam.name)}`);
114
121
  }
115
122
  else {
116
123
  const choice = await p.select({
@@ -137,6 +144,7 @@ export class AuditWorkflow extends BaseWorkflow {
137
144
  if (p.isCancel(selectedProjectId)) {
138
145
  return null;
139
146
  }
147
+ // biome-ignore lint/plugin/no-type-assertion: The cancellation branch above narrows the selected prompt value to a project ID.
140
148
  return this.resolveProjectEnvironmentUrl(selectedProjectId, environmentId, this.isNonInteractive());
141
149
  }
142
150
  async resolveProjectEnvironmentUrl(projectId, environmentId, nonInteractive) {
@@ -160,7 +168,7 @@ export class AuditWorkflow extends BaseWorkflow {
160
168
  if (!environment) {
161
169
  throw new Error("No environments found for this project.");
162
170
  }
163
- p.log.info(`Using environment "${environment.name}"`);
171
+ this.info(`Using environment "${environment.name}"`);
164
172
  return { targetUrl: environment.mcpServerUrl, teamId: project.teamId, projectId };
165
173
  }
166
174
  if (nonInteractive) {
@@ -169,7 +177,7 @@ export class AuditWorkflow extends BaseWorkflow {
169
177
  if (!targetUrl) {
170
178
  throw new Error("Multiple environments found. Use --environment-id to specify which one to audit.");
171
179
  }
172
- p.log.info("Using production environment");
180
+ this.info("Using production environment");
173
181
  return { targetUrl, teamId: project.teamId, projectId };
174
182
  }
175
183
  const selectedEnvironmentId = await p.select({
@@ -203,6 +211,7 @@ function renderReport(report) {
203
211
  const warnings = report.results.filter((result) => result.status === "fail" && result.severity === "warning");
204
212
  const skipped = report.results.filter((result) => result.status === "skip");
205
213
  const platformEntries = Object.entries(report.isReadyForPlatform).map(([platform, ready]) => ({
214
+ // biome-ignore lint/plugin/no-type-assertion: isReadyForPlatform is keyed by the supported Platform union.
206
215
  label: PLATFORM_LABELS[platform] ?? platform,
207
216
  ready,
208
217
  }));