alpic 0.0.0-dev.gf21ae43 → 0.0.0-dev.gf22191e

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 (222) hide show
  1. package/README.md +18 -0
  2. package/bin/run.js +15 -1
  3. package/dist/__tests__/alpic-command.test.js +8 -4
  4. package/dist/__tests__/alpic-command.test.js.map +1 -1
  5. package/dist/__tests__/audit.e2e.test.js +17 -30
  6. package/dist/__tests__/audit.e2e.test.js.map +1 -1
  7. package/dist/__tests__/auth.e2e.test.js +9 -23
  8. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  9. package/dist/__tests__/deploy-flags.e2e.test.js +6 -21
  10. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  11. package/dist/__tests__/deploy.e2e.test.js +5 -21
  12. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  13. package/dist/__tests__/deployment-inspect.e2e.test.js +18 -31
  14. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -1
  15. package/dist/__tests__/deployment-list.e2e.test.js +18 -31
  16. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -1
  17. package/dist/__tests__/deployment-logs.e2e.test.js +15 -29
  18. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -1
  19. package/dist/__tests__/environment-delete.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-delete.e2e.test.js +95 -0
  21. package/dist/__tests__/environment-delete.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-list.e2e.test.js +6 -22
  23. package/dist/__tests__/environment-list.e2e.test.js.map +1 -1
  24. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +19 -31
  25. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -1
  26. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +19 -31
  27. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -1
  28. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +18 -31
  29. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -1
  30. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +18 -31
  31. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -1
  32. package/dist/__tests__/git-flags.e2e.test.js +6 -22
  33. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  34. package/dist/__tests__/git.e2e.test.js +7 -22
  35. package/dist/__tests__/git.e2e.test.js.map +1 -1
  36. package/dist/__tests__/insights-category.e2e.test.d.ts +1 -0
  37. package/dist/__tests__/insights-category.e2e.test.js +247 -0
  38. package/dist/__tests__/insights-category.e2e.test.js.map +1 -0
  39. package/dist/__tests__/insights.e2e.test.d.ts +1 -0
  40. package/dist/__tests__/insights.e2e.test.js +194 -0
  41. package/dist/__tests__/insights.e2e.test.js.map +1 -0
  42. package/dist/__tests__/logs.e2e.test.js +21 -35
  43. package/dist/__tests__/logs.e2e.test.js.map +1 -1
  44. package/dist/__tests__/mock-api.d.ts +26 -1
  45. package/dist/__tests__/mock-api.js +290 -41
  46. package/dist/__tests__/mock-api.js.map +1 -1
  47. package/dist/__tests__/playground/playground-configure.e2e.test.js +18 -26
  48. package/dist/__tests__/playground/playground-configure.e2e.test.js.map +1 -1
  49. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js +18 -26
  50. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js.map +1 -1
  51. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js +18 -26
  52. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js.map +1 -1
  53. package/dist/__tests__/playground/playground-headers.e2e.test.js +18 -26
  54. package/dist/__tests__/playground/playground-headers.e2e.test.js.map +1 -1
  55. package/dist/__tests__/playground/playground-status.e2e.test.js +18 -26
  56. package/dist/__tests__/playground/playground-status.e2e.test.js.map +1 -1
  57. package/dist/__tests__/project-list.e2e.test.js +5 -21
  58. package/dist/__tests__/project-list.e2e.test.js.map +1 -1
  59. package/dist/__tests__/publish.e2e.test.js +6 -24
  60. package/dist/__tests__/publish.e2e.test.js.map +1 -1
  61. package/dist/__tests__/submission.e2e.test.d.ts +1 -0
  62. package/dist/__tests__/submission.e2e.test.js +146 -0
  63. package/dist/__tests__/submission.e2e.test.js.map +1 -0
  64. package/dist/__tests__/team-inspect.e2e.test.js +26 -1
  65. package/dist/__tests__/team-inspect.e2e.test.js.map +1 -1
  66. package/dist/__tests__/team-list.e2e.test.js +5 -21
  67. package/dist/__tests__/team-list.e2e.test.js.map +1 -1
  68. package/dist/__tests__/tunnel.e2e.test.js +61 -23
  69. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  70. package/dist/__tests__/utils.d.ts +17 -6
  71. package/dist/__tests__/utils.js +49 -20
  72. package/dist/__tests__/utils.js.map +1 -1
  73. package/dist/api.d.ts +1 -1
  74. package/dist/api.js +2 -21
  75. package/dist/api.js.map +1 -1
  76. package/dist/commands/audit.js +3 -1
  77. package/dist/commands/audit.js.map +1 -1
  78. package/dist/commands/deploy.js +69 -52
  79. package/dist/commands/deploy.js.map +1 -1
  80. package/dist/commands/environment/delete.d.ts +13 -0
  81. package/dist/commands/environment/delete.js +45 -0
  82. package/dist/commands/environment/delete.js.map +1 -0
  83. package/dist/commands/git/connect.js +2 -2
  84. package/dist/commands/git/connect.js.map +1 -1
  85. package/dist/commands/git/disconnect.js +2 -2
  86. package/dist/commands/git/disconnect.js.map +1 -1
  87. package/dist/commands/insights/category/create.d.ts +17 -0
  88. package/dist/commands/insights/category/create.js +63 -0
  89. package/dist/commands/insights/category/create.js.map +1 -0
  90. package/dist/commands/insights/category/delete.d.ts +13 -0
  91. package/dist/commands/insights/category/delete.js +40 -0
  92. package/dist/commands/insights/category/delete.js.map +1 -0
  93. package/dist/commands/insights/category/link.d.ts +14 -0
  94. package/dist/commands/insights/category/link.js +36 -0
  95. package/dist/commands/insights/category/link.js.map +1 -0
  96. package/dist/commands/insights/category/list.d.ts +13 -0
  97. package/dist/commands/insights/category/list.js +45 -0
  98. package/dist/commands/insights/category/list.js.map +1 -0
  99. package/dist/commands/insights/category/unlink.d.ts +14 -0
  100. package/dist/commands/insights/category/unlink.js +36 -0
  101. package/dist/commands/insights/category/unlink.js.map +1 -0
  102. package/dist/commands/insights/category/update.d.ts +16 -0
  103. package/dist/commands/insights/category/update.js +44 -0
  104. package/dist/commands/insights/category/update.js.map +1 -0
  105. package/dist/commands/insights/feedback/list.d.ts +19 -0
  106. package/dist/commands/insights/feedback/list.js +72 -0
  107. package/dist/commands/insights/feedback/list.js.map +1 -0
  108. package/dist/commands/insights/intent/list.d.ts +22 -0
  109. package/dist/commands/insights/intent/list.js +88 -0
  110. package/dist/commands/insights/intent/list.js.map +1 -0
  111. package/dist/commands/link.js +1 -0
  112. package/dist/commands/link.js.map +1 -1
  113. package/dist/commands/login.js +7 -5
  114. package/dist/commands/login.js.map +1 -1
  115. package/dist/commands/logout.js +1 -1
  116. package/dist/commands/logout.js.map +1 -1
  117. package/dist/commands/logs.js +1 -9
  118. package/dist/commands/logs.js.map +1 -1
  119. package/dist/commands/submission/create.d.ts +15 -0
  120. package/dist/commands/submission/create.js +59 -0
  121. package/dist/commands/submission/create.js.map +1 -0
  122. package/dist/commands/submission/inspect.d.ts +10 -0
  123. package/dist/commands/submission/inspect.js +55 -0
  124. package/dist/commands/submission/inspect.js.map +1 -0
  125. package/dist/commands/submission/update.d.ts +12 -0
  126. package/dist/commands/submission/update.js +37 -0
  127. package/dist/commands/submission/update.js.map +1 -0
  128. package/dist/commands/team/inspect.js +17 -2
  129. package/dist/commands/team/inspect.js.map +1 -1
  130. package/dist/commands/tunnel.js +25 -61
  131. package/dist/commands/tunnel.js.map +1 -1
  132. package/dist/commands/whoami.js +1 -1
  133. package/dist/commands/whoami.js.map +1 -1
  134. package/dist/lib/agent-mode.d.ts +3 -1
  135. package/dist/lib/agent-mode.js +24 -1
  136. package/dist/lib/agent-mode.js.map +1 -1
  137. package/dist/lib/alpic-command.d.ts +3 -1
  138. package/dist/lib/alpic-command.js +19 -7
  139. package/dist/lib/alpic-command.js.map +1 -1
  140. package/dist/lib/alpic-sdk.d.ts +2 -0
  141. package/dist/lib/alpic-sdk.js +8 -0
  142. package/dist/lib/alpic-sdk.js.map +1 -0
  143. package/dist/lib/audit.d.ts +2 -0
  144. package/dist/lib/audit.js +18 -9
  145. package/dist/lib/audit.js.map +1 -1
  146. package/dist/lib/base-workflow.d.ts +3 -1
  147. package/dist/lib/base-workflow.js +2 -2
  148. package/dist/lib/base-workflow.js.map +1 -1
  149. package/dist/lib/deployment.d.ts +0 -21
  150. package/dist/lib/deployment.js +9 -58
  151. package/dist/lib/deployment.js.map +1 -1
  152. package/dist/lib/environment-variable.js +1 -0
  153. package/dist/lib/environment-variable.js.map +1 -1
  154. package/dist/lib/insights.d.ts +19 -0
  155. package/dist/lib/insights.js +54 -0
  156. package/dist/lib/insights.js.map +1 -0
  157. package/dist/lib/link.d.ts +1 -2
  158. package/dist/lib/link.js +16 -71
  159. package/dist/lib/link.js.map +1 -1
  160. package/dist/lib/logs.js +4 -5
  161. package/dist/lib/logs.js.map +1 -1
  162. package/dist/lib/project-settings.d.ts +7 -0
  163. package/dist/lib/project-settings.js +140 -0
  164. package/dist/lib/project-settings.js.map +1 -0
  165. package/dist/lib/project-settings.test.d.ts +1 -0
  166. package/dist/lib/project-settings.test.js +56 -0
  167. package/dist/lib/project-settings.test.js.map +1 -0
  168. package/dist/lib/resolve.d.ts +7 -6
  169. package/dist/lib/resolve.js +19 -14
  170. package/dist/lib/resolve.js.map +1 -1
  171. package/dist/lib/submission.d.ts +13 -0
  172. package/dist/lib/submission.js +44 -0
  173. package/dist/lib/submission.js.map +1 -0
  174. package/dist/lib/telemetry.js +24 -17
  175. package/dist/lib/telemetry.js.map +1 -1
  176. package/dist/lib/utils.d.ts +9 -1
  177. package/dist/lib/utils.js +28 -2
  178. package/dist/lib/utils.js.map +1 -1
  179. package/dist/lib/utils.test.js +43 -5
  180. package/dist/lib/utils.test.js.map +1 -1
  181. package/dist/lib/whoami.js +17 -0
  182. package/dist/lib/whoami.js.map +1 -0
  183. package/dist/sentry.js +3 -6
  184. package/dist/sentry.js.map +1 -1
  185. package/package.json +28 -32
  186. package/dist/lib/archive.d.ts +0 -7
  187. package/dist/lib/archive.js +0 -57
  188. package/dist/lib/archive.js.map +0 -1
  189. package/dist/lib/auth/auth.d.ts +0 -5
  190. package/dist/lib/auth/auth.js +0 -50
  191. package/dist/lib/auth/auth.js.map +0 -1
  192. package/dist/lib/auth/oauth/client.d.ts +0 -28
  193. package/dist/lib/auth/oauth/client.js +0 -116
  194. package/dist/lib/auth/oauth/client.js.map +0 -1
  195. package/dist/lib/auth/oauth/constants.d.ts +0 -2
  196. package/dist/lib/auth/oauth/constants.js +0 -3
  197. package/dist/lib/auth/oauth/constants.js.map +0 -1
  198. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  199. package/dist/lib/auth/oauth/server/assets/authorize.html +0 -234
  200. package/dist/lib/auth/oauth/server/assets/callback.html +0 -88
  201. package/dist/lib/auth/oauth/server/index.d.ts +0 -9
  202. package/dist/lib/auth/oauth/server/index.js +0 -128
  203. package/dist/lib/auth/oauth/server/index.js.map +0 -1
  204. package/dist/lib/auth/whoami.js +0 -47
  205. package/dist/lib/auth/whoami.js.map +0 -1
  206. package/dist/lib/config.d.ts +0 -12
  207. package/dist/lib/config.js +0 -32
  208. package/dist/lib/config.js.map +0 -1
  209. package/dist/lib/global-store.d.ts +0 -28
  210. package/dist/lib/global-store.js +0 -76
  211. package/dist/lib/global-store.js.map +0 -1
  212. package/dist/lib/upload.d.ts +0 -1
  213. package/dist/lib/upload.js +0 -13
  214. package/dist/lib/upload.js.map +0 -1
  215. package/dist/lib/vendor/pipenet.d.ts +0 -1
  216. package/dist/lib/vendor/pipenet.js +0 -16877
  217. package/dist/lib/vendor/pipenet.js.LEGAL.txt +0 -17
  218. package/dist/lib/vendor/pipenet.js.map +0 -7
  219. package/dist/types.d.ts +0 -8
  220. package/dist/types.js +0 -2
  221. package/dist/types.js.map +0 -1
  222. /package/dist/lib/{auth/whoami.d.ts → whoami.d.ts} +0 -0
@@ -0,0 +1,59 @@
1
+ import { AI_PLATFORMS, PLATFORM_LABELS } 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 { environmentFlags, projectFlags, resolveEnvironmentId } from "../../lib/resolve.js";
9
+ export class SubmissionCreate extends AlpicCommand {
10
+ static description = "Create a submission package for an environment. Alpic reads the deployed MCP server and prefills every field it can infer.";
11
+ static examples = [
12
+ "<%= config.bin %> submission create --platform chatgpt",
13
+ "<%= config.bin %> submission create --platform claudeai --environment-id <environmentId>",
14
+ "<%= config.bin %> submission create --platform chatgpt --environment-name production --project-name <projectName>",
15
+ "<%= config.bin %> submission create --platform chatgpt --json",
16
+ ];
17
+ static flags = {
18
+ ...projectFlags,
19
+ ...environmentFlags,
20
+ platform: Flags.string({
21
+ description: "The directory the package targets",
22
+ options: [...AI_PLATFORMS],
23
+ }),
24
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
25
+ };
26
+ async run() {
27
+ const { flags } = await this.parse(SubmissionCreate);
28
+ await this.ensureAuthenticated(flags);
29
+ const environmentId = await resolveEnvironmentId(flags, { silent: flags.json });
30
+ const platform = await this.resolvePlatform(flags);
31
+ const spinner = this.spinner({ silent: flags.json });
32
+ spinner.start(`Building the ${PLATFORM_LABELS[platform]} submission package...`);
33
+ const submission = await api.submissions.create.v1({ environmentId, platform });
34
+ spinner.stop(`Created ${chalk.cyan(submission.id)} for ${PLATFORM_LABELS[platform]}. ✅`);
35
+ if (flags.json) {
36
+ this.log(JSON.stringify(submission));
37
+ return;
38
+ }
39
+ p.log.info(`Review and complete it with ${chalk.bold(`alpic submission inspect --submission-id ${submission.id}`)}`);
40
+ }
41
+ async resolvePlatform(flags) {
42
+ if (flags.platform !== undefined) {
43
+ // biome-ignore lint/plugin/no-type-assertion: oclif validates the flag against AI_PLATFORMS.
44
+ return flags.platform;
45
+ }
46
+ if (flags["non-interactive"] || isAgentMode()) {
47
+ throw new Error("--platform is required in non-interactive mode.");
48
+ }
49
+ const choice = await p.select({
50
+ message: chalk.bold("Choose a directory to submit to"),
51
+ options: AI_PLATFORMS.map((platform) => ({ value: platform, label: PLATFORM_LABELS[platform] })),
52
+ });
53
+ if (p.isCancel(choice)) {
54
+ throw new Error("Cancelled.");
55
+ }
56
+ return choice;
57
+ }
58
+ }
59
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/submission/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AlpicCommand } from "../../lib/alpic-command.js";
2
+ export declare class SubmissionInspect extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ "submission-id": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
@@ -0,0 +1,55 @@
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 { AlpicCommand } from "../../lib/alpic-command.js";
6
+ import { formatFormDataValue, submissionFlags } from "../../lib/submission.js";
7
+ import { formatTable } from "../../lib/table.js";
8
+ import { formatAgo } from "../../lib/utils.js";
9
+ export class SubmissionInspect extends AlpicCommand {
10
+ static description = "Show a submission package and the fields it carries";
11
+ static examples = [
12
+ "<%= config.bin %> submission inspect --submission-id <submissionId>",
13
+ "<%= config.bin %> submission inspect --submission-id <submissionId> --json",
14
+ ];
15
+ static flags = {
16
+ ...submissionFlags,
17
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
18
+ };
19
+ async run() {
20
+ const { flags } = await this.parse(SubmissionInspect);
21
+ await this.ensureAuthenticated(flags);
22
+ const spinner = this.spinner({ silent: flags.json });
23
+ spinner.start("Fetching submission...");
24
+ const submission = await api.submissions.get.v1({ submissionId: flags["submission-id"] });
25
+ spinner.stop("Submission found");
26
+ if (flags.json) {
27
+ this.log(JSON.stringify(submission));
28
+ return;
29
+ }
30
+ const detailRows = [
31
+ { label: "ID", value: chalk.cyan(submission.id) },
32
+ { label: "Platform", value: PLATFORM_LABELS[submission.platform] },
33
+ { label: "Environment", value: submission.environmentId },
34
+ { label: "Beacon audit", value: submission.auditId ?? chalk.gray("-") },
35
+ { label: "Created", value: formatAgo(submission.createdAt) },
36
+ { label: "Updated", value: formatAgo(submission.updatedAt) },
37
+ ];
38
+ console.log(formatTable(detailRows, [
39
+ { key: "label", header: "", format: (value) => chalk.bold(value) },
40
+ { key: "value", header: "" },
41
+ ]));
42
+ const fieldRows = Object.entries(submission.formData).map(([field, value]) => ({
43
+ field,
44
+ value: formatFormDataValue(value),
45
+ }));
46
+ if (fieldRows.length === 0) {
47
+ return;
48
+ }
49
+ console.log(formatTable(fieldRows, [
50
+ { key: "field", header: "field", format: (value) => chalk.bold(value) },
51
+ { key: "value", header: "value" },
52
+ ]));
53
+ }
54
+ }
55
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/submission/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,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,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACjD,MAAM,CAAU,WAAW,GAAG,qDAAqD,CAAC;IAEpF,MAAM,CAAU,QAAQ,GAAG;QACzB,qEAAqE;QACrE,4EAA4E;KAC7E,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,eAAe;QAClB,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,iBAAiB,CAAC,CAAC;QAEtD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1F,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YACjD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAClE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,aAAa,EAAE;YACzD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACvE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;SAC7D,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,UAAU,EAAE;YACtB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;SAC7B,CAAC,CACH,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7E,KAAK;YACL,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,SAAS,EAAE;YACrB,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,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;SAClC,CAAC,CACH,CAAC;IACJ,CAAC"}
@@ -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 { AlpicCommand } from "../../lib/alpic-command.js";
5
+ import { formDataFlags, readFormData, submissionFlags } from "../../lib/submission.js";
6
+ export class SubmissionUpdate extends AlpicCommand {
7
+ static description = "Update the fields of a submission package. Only the fields you pass are changed; the rest are left as they are.";
8
+ static examples = [
9
+ "<%= config.bin %> submission update --submission-id <submissionId> --form-data-file ./submission.json",
10
+ '<%= config.bin %> submission update --submission-id <submissionId> --form-data \'{"appName":"Chess"}\'',
11
+ "<%= config.bin %> submission inspect --submission-id <submissionId> --json | jq .formData | alpic submission update --submission-id <submissionId> --form-data-file -",
12
+ ];
13
+ static flags = {
14
+ ...submissionFlags,
15
+ ...formDataFlags,
16
+ json: Flags.boolean({ description: "Print the unmodified API response as JSON", default: false }),
17
+ };
18
+ async run() {
19
+ const { flags } = await this.parse(SubmissionUpdate);
20
+ const formData = readFormData(flags);
21
+ await this.ensureAuthenticated(flags);
22
+ const submissionId = flags["submission-id"];
23
+ const spinner = this.spinner({ silent: flags.json });
24
+ spinner.start("Fetching submission...");
25
+ const submission = await api.submissions.get.v1({ submissionId });
26
+ spinner.message("Updating submission...");
27
+ // The platform is read from the package rather than asked for: it is fixed at creation and the API rejects a mismatch.
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
+ spinner.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,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,uKAAuK;KACxK,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,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAElE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE1C,uHAAuH;QACvH,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,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAErD,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"];
@@ -57,8 +70,9 @@ export class TeamInspect extends AlpicCommand {
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
78
  spinner.stop();
@@ -69,6 +83,7 @@ export class TeamInspect extends AlpicCommand {
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":"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,WAAY,SAAQ,YAAY;IAC3C,MAAM,CAAU,WAAW,GAAG,yCAAyC,CAAC;IAExE,MAAM,CAAU,QAAQ,GAAG,CAAC,mDAAmD,EAAE,gCAAgC,CAAC,CAAC;IAEnH,MAAM,CAAU,KAAK,GAAG;QACtB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,oBAAoB;SAClC,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,kDAAkD;YAC/D,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEhD,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEnC,IAAI,KAAoD,CAAC;QACzD,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEjB,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,4CAA4C,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC5B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;gBACpC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACnE,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,CAAC,CAAC,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YAED,MAAM,GAAG,MAAM,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,QAA0D,CAAC;QAC/D,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAG;YACjB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;YACnC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;SACvD,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,UAAU,EAAE;YACtB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;SAC7B,CAAC,CACH,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QAErD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7C,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;SACjF,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,WAAW,EAAE;YACvB,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;YAC3E,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":"inspect.js","sourceRoot":"","sources":["../../../src/commands/team/inspect.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,8 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { Flags } from "@oclif/core";
3
3
  import chalk from "chalk";
4
- import { api } from "../api.js";
5
4
  import { AlpicCommand } from "../lib/alpic-command.js";
6
- import { oauthLogin } from "../lib/auth/auth.js";
7
- import { getOAuthClient } from "../lib/auth/oauth/client.js";
8
- import { pipenet } from "../lib/vendor/pipenet.js";
5
+ import { alpic } from "../lib/alpic-sdk.js";
9
6
  export class Tunnel extends AlpicCommand {
10
7
  static description = "Expose a local server to the internet through an Alpic tunnel";
11
8
  static examples = ["<%= config.bin %> tunnel --port 3000"];
@@ -23,20 +20,16 @@ export class Tunnel extends AlpicCommand {
23
20
  async run() {
24
21
  const { flags } = await this.parse(Tunnel);
25
22
  const isPlain = flags.plain;
26
- let token = await getOAuthClient().getValidAccessToken();
27
- if (!token) {
28
- const msg = "You need to be logged in to use the Alpic tunnel";
29
- if (isPlain) {
30
- console.log(msg);
31
- }
32
- else {
33
- p.log.step(msg);
34
- }
35
- await oauthLogin({ isPlain });
36
- token = await getOAuthClient().getValidAccessToken();
37
- }
38
- if (!token) {
39
- throw new Error("Cannot get valid access token");
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.
24
+ if (!(await alpic.auth.getValidAccessToken())) {
25
+ const loginMsg = "You need to be logged in to use the Alpic tunnel";
26
+ isPlain ? console.log(loginMsg) : p.log.step(loginMsg);
27
+ await alpic.auth.login({
28
+ onLoginUrl: (url) => {
29
+ const msg = `Opening browser to log in: ${url}`;
30
+ isPlain ? console.log(msg) : p.log.step(msg);
31
+ },
32
+ });
40
33
  }
41
34
  let spinner;
42
35
  const intro = "Opening tunnel...";
@@ -47,49 +40,18 @@ export class Tunnel extends AlpicCommand {
47
40
  spinner = this.spinner();
48
41
  spinner.start(intro);
49
42
  }
50
- let tunnel;
51
- let tunnelHost;
52
- let subdomain;
53
- let proto;
43
+ let handle;
54
44
  try {
55
- const ticketInfo = await api.tunnels.getTicket.v1(undefined, {
56
- context: {
57
- request: {
58
- headers: {
59
- Authorization: `Bearer ${token?.access_token}`,
60
- },
61
- },
62
- },
45
+ handle = await alpic.tunnel.open({
46
+ port: flags.port,
63
47
  });
64
- tunnelHost = ticketInfo.tunnelHost;
65
- subdomain = ticketInfo.subdomain;
66
- proto = tunnelHost.startsWith("localhost") ? "http" : "https";
67
- tunnel = await Promise.race([
68
- pipenet({
69
- port: flags.port,
70
- host: `${proto}://${tunnelHost}`,
71
- subdomain: subdomain,
72
- headers: { Authorization: `Bearer ${ticketInfo.ticket}` },
73
- // Idle before TCP keepalive probes start. Paired with offlineTimeoutMs below.
74
- keepAliveDelayMs: 30_000,
75
- // Give-up window once all tunnel sockets are dead — pipenet emits 'close'
76
- // and our `tunnel.on('close', ...)` exits the CLI.
77
- offlineTimeoutMs: 30_000,
78
- }),
79
- new Promise((_, reject) => {
80
- const id = setTimeout(() => reject(new Error("Failed to connect to tunnel server")), 10_000);
81
- id.unref?.(); // don't keep the event loop alive just for this timer
82
- }),
83
- ]);
84
48
  }
85
49
  catch (err) {
86
- // Stop the spinner before the error propagates so the base class's p.cancel()
87
- // can render cleanly instead of colliding with the spinner's render loop.
88
50
  spinner?.stop(intro);
89
51
  throw err;
90
52
  }
91
- const url = `${proto}://${subdomain}.${tunnelHost}`;
92
- const message = `Forwarding: ${proto}://${subdomain}.${tunnelHost} -> http://localhost:${flags.port}`;
53
+ const url = handle.url;
54
+ const message = `Forwarding: ${url} -> http://localhost:${flags.port}`;
93
55
  if (isPlain) {
94
56
  console.log(message);
95
57
  }
@@ -127,24 +89,26 @@ export class Tunnel extends AlpicCommand {
127
89
  process.exit(0);
128
90
  }
129
91
  closing = true;
130
- tunnel.close();
92
+ handle.close();
131
93
  resolve();
132
94
  };
133
95
  process.on("SIGINT", shutdown);
134
96
  process.on("SIGTERM", shutdown);
135
- tunnel.on("request", (req) => {
97
+ handle.on("request", (req) => {
136
98
  const message = `${req.method} ${req.path}`;
137
99
  isPlain ? console.log(message) : pushActivity(message);
138
100
  });
139
- tunnel.on("error", (err) => {
101
+ handle.on("error", (err) => {
140
102
  lastError = err;
141
103
  const message = err.message;
142
104
  isPlain ? console.error(message) : pushActivity(chalk.red(message));
143
105
  });
144
- // If the tunnel dies without a user-initiated shutdown, surface the
145
- // captured error so it reaches `catch` (and telemetry) instead of
146
- // silently exiting 0.
147
- tunnel.on("close", () => {
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.
107
+ handle.on("close", (info) => {
108
+ if (info?.displaced) {
109
+ const message = "Tunnel closed: a new tunnel was opened for this account";
110
+ isPlain ? console.log(message) : pushActivity(message);
111
+ }
148
112
  if (!closing && lastError) {
149
113
  reject(lastError);
150
114
  }
@@ -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,6 +1,6 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { AlpicCommand } from "../lib/alpic-command.js";
3
- import { getWhoamiInfoMessage } from "../lib/auth/whoami.js";
3
+ import { getWhoamiInfoMessage } from "../lib/whoami.js";
4
4
  export class Whoami extends AlpicCommand {
5
5
  static description = "Show the current Alpic identity (API key or logged-in user)";
6
6
  static examples = ["<%= config.bin %> whoami"];
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE1C,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE1C,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import * as p from "@clack/prompts";
2
2
  export declare function isAgentMode(): boolean;
3
- export declare function createSpinner(): p.SpinnerResult;
3
+ export declare function createSpinner({ silent }?: {
4
+ silent?: boolean | undefined;
5
+ }): p.SpinnerResult;
@@ -4,7 +4,30 @@ const agentResult = await determineAgent();
4
4
  export function isAgentMode() {
5
5
  return agentResult.isAgent;
6
6
  }
7
- export function createSpinner() {
7
+ /** Keeps every status line off stdout, for commands whose stdout is a machine-readable payload. */
8
+ function createSilentSpinner() {
9
+ return {
10
+ start: (_message) => { },
11
+ stop: (_message) => { },
12
+ message: () => { },
13
+ cancel: (message) => {
14
+ if (message) {
15
+ console.error(message);
16
+ }
17
+ },
18
+ error: (message) => {
19
+ if (message) {
20
+ console.error(message);
21
+ }
22
+ },
23
+ clear: () => { },
24
+ isCancelled: false,
25
+ };
26
+ }
27
+ export function createSpinner({ silent = false } = {}) {
28
+ if (silent) {
29
+ return createSilentSpinner();
30
+ }
8
31
  if (process.env.VITEST || isAgentMode()) {
9
32
  return {
10
33
  start: (message) => {
@@ -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,mGAAmG;AACnG,SAAS,mBAAmB;IAC1B,OAAO;QACL,KAAK,EAAE,CAAC,QAAiB,EAAE,EAAE,GAAE,CAAC;QAChC,IAAI,EAAE,CAAC,QAAiB,EAAE,EAAE,GAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC1B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,WAAW,EAAE,KAAc;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE;IACnD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IACD,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"}
@@ -8,6 +8,8 @@ export declare abstract class AlpicCommand extends Command {
8
8
  ensureAuthenticated(flags: {
9
9
  "non-interactive"?: boolean;
10
10
  }): Promise<void>;
11
- protected spinner(): p.SpinnerResult;
11
+ protected spinner(options?: {
12
+ silent?: boolean;
13
+ }): p.SpinnerResult;
12
14
  protected exitWithErrorMessage(message: string, cause?: unknown): never;
13
15
  }
@@ -2,8 +2,8 @@ import * as p from "@clack/prompts";
2
2
  import { Command, Errors, Flags } from "@oclif/core";
3
3
  import { ORPCError } from "@orpc/client";
4
4
  import { createSpinner } from "./agent-mode.js";
5
- import { isAuthenticated, oauthLogin } from "./auth/auth.js";
6
- import { config } from "./config.js";
5
+ import { alpic } from "./alpic-sdk.js";
6
+ import { getResponseErrorStatus } from "./utils.js";
7
7
  export class AlpicCommand extends Command {
8
8
  static baseFlags = {
9
9
  "non-interactive": Flags.boolean({
@@ -13,28 +13,40 @@ export class AlpicCommand extends Command {
13
13
  };
14
14
  async catch(error) {
15
15
  if (error instanceof ORPCError) {
16
+ if (error.status === 401 || error.status === 403) {
17
+ const authMessage = process.env.ALPIC_API_KEY !== undefined
18
+ ? "Your ALPIC_API_KEY is invalid or not authorized. Check the key and try again."
19
+ : "Your session has expired. Run `alpic login` to sign in again.";
20
+ this.exitWithErrorMessage(authMessage, error);
21
+ }
16
22
  let message = `An error occurred while connecting to Alpic: ${error.message}`;
17
- if (error.code === "NOT_FOUND" && config.load()) {
23
+ if (error.code === "NOT_FOUND" && alpic.projects.loadConfig()) {
18
24
  message += "\nYour .alpic config may reference a deleted resource. Run `alpic link` to re-link.";
19
25
  }
20
26
  this.exitWithErrorMessage(message, error);
21
27
  }
28
+ const status = getResponseErrorStatus(error);
29
+ if (status === 401 || status === 403) {
30
+ this.exitWithErrorMessage("Your session has expired. Run `alpic login` to sign in again.", error);
31
+ }
22
32
  if (error instanceof Error) {
23
33
  this.exitWithErrorMessage(error.message, error);
24
34
  }
25
35
  this.exitWithErrorMessage(String(error), error);
26
36
  }
27
37
  async ensureAuthenticated(flags) {
28
- if (!(await isAuthenticated())) {
38
+ if (!(await alpic.auth.isAuthenticated())) {
29
39
  if (flags["non-interactive"]) {
30
40
  this.exitWithErrorMessage("Not authenticated. Set ALPIC_API_KEY or run `alpic login` interactively.");
31
41
  }
32
42
  p.log.warn("Not authenticated. Starting login…");
33
- await oauthLogin();
43
+ await alpic.auth.login({
44
+ onLoginUrl: (url) => p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${url}`),
45
+ });
34
46
  }
35
47
  }
36
- spinner() {
37
- return createSpinner();
48
+ spinner(options) {
49
+ return createSpinner(options);
38
50
  }
39
51
  exitWithErrorMessage(message, cause) {
40
52
  p.cancel(message);
@@ -1 +1 @@
1
- {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAgB,YAAa,SAAQ,OAAO;IAChD,MAAM,CAAU,SAAS,GAAG;QAC1B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;KACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAc;QACjC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,IAAI,qFAAqF,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAsC;QAC9D,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,0EAA0E,CAAC,CAAC;YACxG,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAES,OAAO;QACf,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB,CAAC,OAAe,EAAE,KAAe;QAC7D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,CAAC;IAClB,CAAC"}
1
+ {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Alpic } from "@alpic-ai/sdk";
2
+ export declare const alpic: Alpic;
@@ -0,0 +1,8 @@
1
+ import { Alpic } from "@alpic-ai/sdk";
2
+ import { aliasMachineToUser } from "./telemetry.js";
3
+ export const alpic = new Alpic();
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.
5
+ alpic.auth.on("authenticated", ({ sub }) => {
6
+ void aliasMachineToUser(sub);
7
+ });
8
+ //# sourceMappingURL=alpic-sdk.js.map
@@ -0,0 +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,+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,8 @@ export type AuditFlags = {
8
8
  "non-interactive"?: boolean;
9
9
  };
10
10
  export declare class AuditWorkflow extends BaseWorkflow<AuditFlags> {
11
+ /** Under `--json` the report is the only thing on stdout, so it can be piped. */
12
+ private info;
11
13
  runAudit(): Promise<number>;
12
14
  private validateFlags;
13
15
  private resolveStandalone;