alpic 0.0.0-dev.fd65e5d → 0.0.0-dev.fd906e9

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 (161) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +158 -0
  3. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  4. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  5. package/dist/__tests__/deploy-flags.e2e.test.js +111 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  7. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deploy.e2e.test.js +168 -0
  9. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  10. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +250 -0
  12. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  13. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +122 -0
  15. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  16. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +139 -0
  18. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +319 -0
  21. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  24. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  25. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  26. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  27. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  28. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  30. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  31. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  32. package/dist/__tests__/git.e2e.test.js +221 -0
  33. package/dist/__tests__/git.e2e.test.js.map +1 -0
  34. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  35. package/dist/__tests__/logs.e2e.test.js +197 -0
  36. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  37. package/dist/__tests__/mock-server.d.ts +26 -0
  38. package/dist/__tests__/mock-server.js +616 -0
  39. package/dist/__tests__/mock-server.js.map +1 -0
  40. package/dist/__tests__/utils.d.ts +67 -0
  41. package/dist/__tests__/utils.js +255 -0
  42. package/dist/__tests__/utils.js.map +1 -0
  43. package/dist/api.d.ts +3 -9
  44. package/dist/api.js +14 -32
  45. package/dist/api.js.map +1 -1
  46. package/dist/commands/deploy.d.ts +7 -4
  47. package/dist/commands/deploy.js +73 -32
  48. package/dist/commands/deploy.js.map +1 -1
  49. package/dist/commands/environment-variable/add.d.ts +14 -0
  50. package/dist/commands/environment-variable/add.js +46 -0
  51. package/dist/commands/environment-variable/add.js.map +1 -0
  52. package/dist/commands/environment-variable/list.d.ts +9 -0
  53. package/dist/commands/environment-variable/list.js +44 -0
  54. package/dist/commands/environment-variable/list.js.map +1 -0
  55. package/dist/commands/environment-variable/remove.d.ts +11 -0
  56. package/dist/commands/environment-variable/remove.js +32 -0
  57. package/dist/commands/environment-variable/remove.js.map +1 -0
  58. package/dist/commands/environment-variable/update.d.ts +13 -0
  59. package/dist/commands/environment-variable/update.js +40 -0
  60. package/dist/commands/environment-variable/update.js.map +1 -0
  61. package/dist/commands/git/connect.d.ts +10 -0
  62. package/dist/commands/git/connect.js +58 -0
  63. package/dist/commands/git/connect.js.map +1 -0
  64. package/dist/commands/git/disconnect.d.ts +9 -0
  65. package/dist/commands/git/disconnect.js +41 -0
  66. package/dist/commands/git/disconnect.js.map +1 -0
  67. package/dist/commands/git.d.ts +6 -0
  68. package/dist/commands/git.js +17 -0
  69. package/dist/commands/git.js.map +1 -0
  70. package/dist/commands/login.d.ts +6 -0
  71. package/dist/commands/login.js +34 -0
  72. package/dist/commands/login.js.map +1 -0
  73. package/dist/commands/logout.d.ts +6 -0
  74. package/dist/commands/logout.js +20 -0
  75. package/dist/commands/logout.js.map +1 -0
  76. package/dist/commands/logs.d.ts +16 -0
  77. package/dist/commands/logs.js +96 -0
  78. package/dist/commands/logs.js.map +1 -0
  79. package/dist/commands/telemetry/disable.d.ts +5 -0
  80. package/dist/commands/telemetry/disable.js +14 -0
  81. package/dist/commands/telemetry/disable.js.map +1 -0
  82. package/dist/commands/telemetry/enable.d.ts +5 -0
  83. package/dist/commands/telemetry/enable.js +13 -0
  84. package/dist/commands/telemetry/enable.js.map +1 -0
  85. package/dist/commands/telemetry/status.d.ts +5 -0
  86. package/dist/commands/telemetry/status.js +19 -0
  87. package/dist/commands/telemetry/status.js.map +1 -0
  88. package/dist/commands/whoami.d.ts +6 -0
  89. package/dist/commands/whoami.js +13 -0
  90. package/dist/commands/whoami.js.map +1 -0
  91. package/dist/env.d.ts +4 -0
  92. package/dist/env.js +10 -0
  93. package/dist/env.js.map +1 -0
  94. package/dist/lib/alpic-command.d.ts +6 -0
  95. package/dist/lib/alpic-command.js +27 -0
  96. package/dist/lib/alpic-command.js.map +1 -0
  97. package/dist/lib/archive.d.ts +3 -3
  98. package/dist/lib/archive.js +11 -15
  99. package/dist/lib/archive.js.map +1 -1
  100. package/dist/lib/auth/auth.d.ts +2 -0
  101. package/dist/lib/auth/auth.js +21 -0
  102. package/dist/lib/auth/auth.js.map +1 -0
  103. package/dist/lib/auth/oauth/client.d.ts +28 -0
  104. package/dist/lib/auth/oauth/client.js +110 -0
  105. package/dist/lib/auth/oauth/client.js.map +1 -0
  106. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  107. package/dist/lib/auth/oauth/constants.js +3 -0
  108. package/dist/lib/auth/oauth/constants.js.map +1 -0
  109. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  110. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  111. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  112. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  113. package/dist/lib/auth/oauth/server/index.js +102 -0
  114. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  115. package/dist/lib/auth/whoami.d.ts +1 -0
  116. package/dist/lib/auth/whoami.js +41 -0
  117. package/dist/lib/auth/whoami.js.map +1 -0
  118. package/dist/lib/base-workflow.d.ts +10 -0
  119. package/dist/lib/base-workflow.js +22 -0
  120. package/dist/lib/base-workflow.js.map +1 -0
  121. package/dist/lib/config.d.ts +2 -2
  122. package/dist/lib/config.js +14 -8
  123. package/dist/lib/config.js.map +1 -1
  124. package/dist/lib/deployment.d.ts +20 -0
  125. package/dist/lib/deployment.js +42 -0
  126. package/dist/lib/deployment.js.map +1 -0
  127. package/dist/lib/environment-variable.d.ts +41 -0
  128. package/dist/lib/environment-variable.js +304 -0
  129. package/dist/lib/environment-variable.js.map +1 -0
  130. package/dist/lib/git.d.ts +22 -0
  131. package/dist/lib/git.js +131 -0
  132. package/dist/lib/git.js.map +1 -0
  133. package/dist/lib/global-store.d.ts +28 -0
  134. package/dist/lib/global-store.js +76 -0
  135. package/dist/lib/global-store.js.map +1 -0
  136. package/dist/lib/logs.d.ts +19 -0
  137. package/dist/lib/logs.js +83 -0
  138. package/dist/lib/logs.js.map +1 -0
  139. package/dist/lib/project.d.ts +71 -10
  140. package/dist/lib/project.js +274 -124
  141. package/dist/lib/project.js.map +1 -1
  142. package/dist/lib/table.d.ts +8 -0
  143. package/dist/lib/table.js +27 -0
  144. package/dist/lib/table.js.map +1 -0
  145. package/dist/lib/telemetry.d.ts +7 -0
  146. package/dist/lib/telemetry.js +66 -0
  147. package/dist/lib/telemetry.js.map +1 -0
  148. package/dist/lib/upload.d.ts +0 -1
  149. package/dist/lib/upload.js +0 -6
  150. package/dist/lib/upload.js.map +1 -1
  151. package/dist/lib/utils.d.ts +1 -0
  152. package/dist/lib/utils.js +17 -0
  153. package/dist/lib/utils.js.map +1 -0
  154. package/dist/lib/utils.test.d.ts +1 -0
  155. package/dist/lib/utils.test.js +14 -0
  156. package/dist/lib/utils.test.js.map +1 -0
  157. package/dist/posthog.d.ts +3 -0
  158. package/dist/posthog.js +10 -0
  159. package/dist/posthog.js.map +1 -0
  160. package/dist/types.d.ts +0 -34
  161. package/package.json +35 -11
@@ -0,0 +1,27 @@
1
+ import chalk from "chalk";
2
+ import { stripVTControlCharacters } from "node:util";
3
+ const visibleLength = (value) => stripVTControlCharacters(value).length;
4
+ const COLUMN_GAP = 4;
5
+ export const formatTable = (rows, columns) => {
6
+ const gap = " ".repeat(COLUMN_GAP);
7
+ const widths = columns.map((column) => {
8
+ const formattedLengths = rows.map((row) => {
9
+ const rawValue = String(row[column.key] ?? "");
10
+ const formattedValue = column.format ? column.format(rawValue, row) : rawValue;
11
+ return visibleLength(formattedValue);
12
+ });
13
+ return Math.max(column.minWidth ?? 0, column.header.length, ...formattedLengths);
14
+ });
15
+ const header = columns.map((column, index) => chalk.gray(column.header.padEnd(widths[index] ?? 0))).join(gap);
16
+ const body = rows.map((row) => columns
17
+ .map((column, index) => {
18
+ const rawValue = String(row[column.key] ?? "");
19
+ const formattedValue = column.format ? column.format(rawValue, row) : rawValue;
20
+ const padSize = Math.max(0, (widths[index] ?? 0) - visibleLength(formattedValue));
21
+ return `${formattedValue}${" ".repeat(padSize)}`;
22
+ })
23
+ .join(gap));
24
+ const content = [header, ...body].join("\n");
25
+ return `\n${content}\n`;
26
+ };
27
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/lib/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AASrD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAExF,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAsC,IAAW,EAAE,OAA2B,EAAE,EAAE;IAC3G,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/E,OAAO,aAAa,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9G,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5B,OAAO;SACJ,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QAClF,OAAO,GAAG,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,KAAK,OAAO,IAAI,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Hook } from "@oclif/core";
2
+ export declare function isEnabled(): boolean;
3
+ export declare function isDebugMode(): boolean;
4
+ export declare function setEnabled(enabled: boolean): void;
5
+ export declare function getMachineId(): string;
6
+ declare const hook: Hook<"finally">;
7
+ export default hook;
@@ -0,0 +1,66 @@
1
+ import ci from "ci-info";
2
+ import crypto from "node:crypto";
3
+ import posthog from "../posthog.js";
4
+ import { globalStore } from "./global-store.js";
5
+ const ENV_TELEMETRY_DISABLED = "ALPIC_TELEMETRY_DISABLED";
6
+ const ENV_TELEMETRY_DEBUG = "ALPIC_TELEMETRY_DEBUG";
7
+ const ENV_DO_NOT_TRACK = "DO_NOT_TRACK";
8
+ export function isEnabled() {
9
+ if (process.env[ENV_TELEMETRY_DISABLED] === "1" || process.env[ENV_TELEMETRY_DISABLED]?.toLowerCase() === "true") {
10
+ return false;
11
+ }
12
+ if (process.env[ENV_DO_NOT_TRACK] === "1" || process.env[ENV_DO_NOT_TRACK]?.toLowerCase() === "true") {
13
+ return false;
14
+ }
15
+ if (ci.isCI) {
16
+ return true;
17
+ }
18
+ const config = globalStore.getConfig();
19
+ return config.telemetry.enabled;
20
+ }
21
+ export function isDebugMode() {
22
+ return process.env[ENV_TELEMETRY_DEBUG] === "1" || process.env[ENV_TELEMETRY_DEBUG]?.toLowerCase() === "true";
23
+ }
24
+ export function setEnabled(enabled) {
25
+ const config = globalStore.getConfig();
26
+ config.telemetry.enabled = enabled;
27
+ globalStore.saveConfig(config);
28
+ }
29
+ export function getMachineId() {
30
+ if (ci.isCI) {
31
+ return ci.name ?? "unknown-ci";
32
+ }
33
+ return globalStore.getConfig().machineId;
34
+ }
35
+ const hook = async ({ id: command, config: { version }, error, }) => {
36
+ if (!isEnabled()) {
37
+ return;
38
+ }
39
+ const event = {
40
+ command,
41
+ version,
42
+ machineId: getMachineId(),
43
+ sessionId: crypto.randomUUID(),
44
+ isCI: ci.isCI,
45
+ nodeVersion: process.version,
46
+ platform: process.platform,
47
+ outcome: error ? "failure" : "success",
48
+ error: error?.message,
49
+ };
50
+ if (isDebugMode()) {
51
+ console.error("[Telemetry Debug] Would send event:", JSON.stringify(event, null, 2));
52
+ return;
53
+ }
54
+ try {
55
+ posthog.capture({
56
+ distinctId: event.machineId,
57
+ event: command,
58
+ properties: event,
59
+ });
60
+ }
61
+ catch {
62
+ // Silently ignore telemetry errors - never block CLI operation
63
+ }
64
+ };
65
+ export default hook;
66
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1 @@
1
1
  export declare function uploadToPresignedUrl(uploadUrl: string, buffer: Buffer): Promise<void>;
2
- export declare function readArchiveAndCleanup(archivePath: string, tmpDir: string): NonSharedBuffer;
@@ -1,4 +1,3 @@
1
- import { readFileSync, rmSync } from "node:fs";
2
1
  export async function uploadToPresignedUrl(uploadUrl, buffer) {
3
2
  const res = await fetch(uploadUrl, {
4
3
  method: "PUT",
@@ -12,9 +11,4 @@ export async function uploadToPresignedUrl(uploadUrl, buffer) {
12
11
  throw new Error(`Upload failed: ${res.status} ${res.statusText}`);
13
12
  }
14
13
  }
15
- export function readArchiveAndCleanup(archivePath, tmpDir) {
16
- const buffer = readFileSync(archivePath);
17
- rmSync(tmpDir, { recursive: true });
18
- return buffer;
19
- }
20
14
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB,EAAE,MAAc;IAC1E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACjC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SAC5C;QACD,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,WAAmB,EAAE,MAAc;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB,EAAE,MAAc;IAC1E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACjC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SAC5C;QACD,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const formatAgo: (date: Date, now?: Date) => string;
@@ -0,0 +1,17 @@
1
+ export const formatAgo = (date, now = new Date()) => {
2
+ const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
3
+ const diffInSeconds = Math.round((date.getTime() - now.getTime()) / 1000);
4
+ const absSeconds = Math.abs(diffInSeconds);
5
+ if (absSeconds < 60)
6
+ return rtf.format(diffInSeconds, "second");
7
+ if (absSeconds < 3600)
8
+ return rtf.format(Math.round(diffInSeconds / 60), "minute");
9
+ if (absSeconds < 86400)
10
+ return rtf.format(Math.round(diffInSeconds / 3600), "hour");
11
+ if (absSeconds < 2592000)
12
+ return rtf.format(Math.round(diffInSeconds / 86400), "day");
13
+ if (absSeconds < 31536000)
14
+ return rtf.format(Math.round(diffInSeconds / 2592000), "month");
15
+ return rtf.format(Math.round(diffInSeconds / 31536000), "year");
16
+ };
17
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE;IACxD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3C,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChE,IAAI,UAAU,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnF,IAAI,UAAU,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACpF,IAAI,UAAU,GAAG,OAAO;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACtF,IAAI,UAAU,GAAG,QAAQ;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { formatAgo } from "./utils.js";
3
+ describe("formatAgo", () => {
4
+ const now = new Date("2026-01-01T00:00:00.000Z");
5
+ it("formats past dates", () => {
6
+ expect(formatAgo(new Date(now.getTime() - 30_000), now)).toBe("30 seconds ago");
7
+ expect(formatAgo(new Date(now.getTime() - 2 * 60_000), now)).toBe("2 minutes ago");
8
+ expect(formatAgo(new Date(now.getTime() - 3 * 3_600_000), now)).toBe("3 hours ago");
9
+ expect(formatAgo(new Date(now.getTime() - 5 * 86_400_000), now)).toBe("5 days ago");
10
+ expect(formatAgo(new Date(now.getTime() - 2 * 2_592_000_000), now)).toBe("2 months ago");
11
+ expect(formatAgo(new Date(now.getTime() - 2 * 31_536_000_000), now)).toBe("2 years ago");
12
+ });
13
+ });
14
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/lib/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAEjD,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnF,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpF,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpF,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzF,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { PostHog } from "posthog-node";
2
+ declare const posthog: PostHog;
3
+ export default posthog;
@@ -0,0 +1,10 @@
1
+ import { PostHog } from "posthog-node";
2
+ const POSTHOG_API_KEY = "phc_ksTmveDgBWGdJb7tlb8Vz6eeKsOl0UkdpCqUaSU2ypg";
3
+ const POSTHOG_HOST = "https://us.i.posthog.com";
4
+ const posthog = new PostHog(POSTHOG_API_KEY, {
5
+ host: POSTHOG_HOST,
6
+ flushAt: 1,
7
+ flushInterval: 0,
8
+ });
9
+ export default posthog;
10
+ //# sourceMappingURL=posthog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../src/posthog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAC1E,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEhD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAC3C,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;CACjB,CAAC,CAAC;AAEH,eAAe,OAAO,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,26 +1,3 @@
1
- export type ApiProject = {
2
- id: string;
3
- teamId: string;
4
- name: string;
5
- productionEnvironment?: {
6
- id: string;
7
- name: string;
8
- mcpServerUrl: string;
9
- } | null;
10
- environments?: ApiEnvironment[];
11
- };
12
- export type PresignedUploadResponse = {
13
- uploadUrl: string;
14
- token: string;
15
- expiresAt: string;
16
- };
17
- export type ApiEnvironment = {
18
- id: string;
19
- name: string;
20
- sourceBranch: string;
21
- mcpServerUrl: string;
22
- projectId: string;
23
- };
24
1
  export type ProjectConfig = {
25
2
  projectId: string;
26
3
  teamId: string;
@@ -28,14 +5,3 @@ export type ProjectConfig = {
28
5
  environmentId?: string;
29
6
  environmentName?: string;
30
7
  };
31
- export type ApiDeployment = {
32
- id: string;
33
- status: string;
34
- sourceRef: string;
35
- sourceCommitId?: string;
36
- sourceCommitMessage?: string;
37
- authorUsername: string | null;
38
- authorAvatarUrl: string | null;
39
- startedAt: string | null;
40
- completedAt: string | null;
41
- };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alpic",
3
- "version": "0.0.0-dev.fd65e5d",
3
+ "version": "0.0.0-dev.fd906e9",
4
4
  "description": "The command-line interface for Alpic",
5
5
  "homepage": "https://alpic.ai",
6
6
  "preferGlobal": true,
@@ -14,7 +14,7 @@
14
14
  "dist"
15
15
  ],
16
16
  "engines": {
17
- "node": ">= 18"
17
+ "node": ">= 18.20.8"
18
18
  },
19
19
  "keywords": [
20
20
  "chatgpt",
@@ -25,16 +25,35 @@
25
25
  "author": "Alpic",
26
26
  "license": "ISC",
27
27
  "dependencies": {
28
- "@clack/prompts": "^0.8.2",
28
+ "@clack/prompts": "^1.1.0",
29
+ "@oclif/core": "^4.8.3",
30
+ "@orpc/client": "^1.13.6",
31
+ "@orpc/contract": "^1.13.6",
32
+ "@orpc/openapi-client": "^1.13.6",
33
+ "@t3-oss/env-core": "^0.13.10",
29
34
  "chalk": "^5.6.2",
30
- "tar": "^7.4.0"
35
+ "ci-info": "^4.4.0",
36
+ "envfile": "^7.1.0",
37
+ "jwt-decode": "^4.0.0",
38
+ "open": "^11.0.0",
39
+ "openid-client": "^6.8.2",
40
+ "posthog-node": "^5.28.0",
41
+ "tar": "^7.5.11",
42
+ "env-paths": "^4.0.0",
43
+ "zod": "^4.3.6",
44
+ "@alpic-ai/api": "0.0.0-dev.fd906e9"
31
45
  },
32
46
  "devDependencies": {
33
- "@oclif/core": "^4.8.0",
47
+ "@orpc/openapi": "^1.13.6",
48
+ "@orpc/server": "^1.13.6",
49
+ "@orpc/zod": "^1.13.6",
34
50
  "@total-typescript/tsconfig": "^1.0.4",
35
- "@types/node": "^25.1.0",
36
- "biome": "^0.3.3",
37
- "jsdom": "^27.4.0",
51
+ "@types/express": "^5.0.6",
52
+ "@types/node": "^25.4.0",
53
+ "express": "^5.2.1",
54
+ "jsdom": "^28.1.0",
55
+ "node-pty": "1.1.0",
56
+ "selfsigned": "^5.5.0",
38
57
  "shx": "^0.4.0",
39
58
  "ts-node": "^10.9.2",
40
59
  "typescript": "^5.9.3",
@@ -47,14 +66,19 @@
47
66
  "bin": "alpic",
48
67
  "commands": "./dist/commands",
49
68
  "dirname": "alpic",
50
- "topicSeparator": " "
69
+ "topicSeparator": " ",
70
+ "hooks": {
71
+ "finally": "./dist/lib/telemetry.js"
72
+ }
51
73
  },
52
74
  "scripts": {
53
- "build": "shx rm -rf dist && tsc",
75
+ "build": "shx rm -rf dist && tsc && pnpm run build:assets",
76
+ "build:assets": "shx cp -r src/lib/auth/oauth/server/assets dist/lib/auth/oauth/server/",
54
77
  "format": "biome check --write --error-on-warnings",
55
78
  "test": "pnpm run test:unit && pnpm run test:type && pnpm run test:format",
56
79
  "test:unit": "vitest run",
57
80
  "test:format": "prettier --check .",
58
- "test:type": "tsc --noEmit"
81
+ "test:type": "tsc --noEmit",
82
+ "update:docs": "claude --add-dir ../../docs --permission-mode acceptEdits -p \"/update-cli-docs\" 2>&1 && prettier --write \"../../docs/cli/**/*.mdx\""
59
83
  }
60
84
  }