alpic 0.0.0-dev.ff7eedf → 0.0.0-dev.ffd67d5

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 (218) hide show
  1. package/README.md +40 -0
  2. package/bin/run.js +5 -0
  3. package/dist/__tests__/audit.e2e.test.d.ts +1 -0
  4. package/dist/__tests__/audit.e2e.test.js +557 -0
  5. package/dist/__tests__/audit.e2e.test.js.map +1 -0
  6. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  7. package/dist/__tests__/auth.e2e.test.js +157 -0
  8. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  9. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  10. package/dist/__tests__/deploy-flags.e2e.test.js +188 -0
  11. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  12. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  13. package/dist/__tests__/deploy.e2e.test.js +180 -0
  14. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  15. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  16. package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
  17. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  18. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  19. package/dist/__tests__/deployment-list.e2e.test.js +116 -0
  20. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  21. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  22. package/dist/__tests__/deployment-logs.e2e.test.js +255 -0
  23. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  24. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +259 -0
  26. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  27. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +139 -0
  29. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  30. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  31. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +150 -0
  32. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  33. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  34. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +342 -0
  35. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  36. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  37. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  38. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  39. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  40. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  41. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  42. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  43. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  44. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  45. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  46. package/dist/__tests__/git.e2e.test.js +221 -0
  47. package/dist/__tests__/git.e2e.test.js.map +1 -0
  48. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  49. package/dist/__tests__/link.e2e.test.js +279 -0
  50. package/dist/__tests__/link.e2e.test.js.map +1 -0
  51. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  52. package/dist/__tests__/logs.e2e.test.js +227 -0
  53. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  54. package/dist/__tests__/mock-server.d.ts +44 -0
  55. package/dist/__tests__/mock-server.js +784 -0
  56. package/dist/__tests__/mock-server.js.map +1 -0
  57. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  58. package/dist/__tests__/publish.e2e.test.js +505 -0
  59. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  60. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  61. package/dist/__tests__/tunnel.e2e.test.js +61 -0
  62. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  63. package/dist/__tests__/utils.d.ts +73 -0
  64. package/dist/__tests__/utils.js +284 -0
  65. package/dist/__tests__/utils.js.map +1 -0
  66. package/dist/api.d.ts +3 -0
  67. package/dist/api.js +22 -0
  68. package/dist/api.js.map +1 -0
  69. package/dist/commands/audit.d.ts +14 -0
  70. package/dist/commands/audit.js +49 -0
  71. package/dist/commands/audit.js.map +1 -0
  72. package/dist/commands/deploy.d.ts +15 -0
  73. package/dist/commands/deploy.js +121 -0
  74. package/dist/commands/deploy.js.map +1 -0
  75. package/dist/commands/deployment/inspect.d.ts +11 -0
  76. package/dist/commands/deployment/inspect.js +91 -0
  77. package/dist/commands/deployment/inspect.js.map +1 -0
  78. package/dist/commands/deployment/list.d.ts +11 -0
  79. package/dist/commands/deployment/list.js +97 -0
  80. package/dist/commands/deployment/list.js.map +1 -0
  81. package/dist/commands/deployment/logs.d.ts +12 -0
  82. package/dist/commands/deployment/logs.js +50 -0
  83. package/dist/commands/deployment/logs.js.map +1 -0
  84. package/dist/commands/environment-variable/add.d.ts +14 -0
  85. package/dist/commands/environment-variable/add.js +47 -0
  86. package/dist/commands/environment-variable/add.js.map +1 -0
  87. package/dist/commands/environment-variable/list.d.ts +9 -0
  88. package/dist/commands/environment-variable/list.js +45 -0
  89. package/dist/commands/environment-variable/list.js.map +1 -0
  90. package/dist/commands/environment-variable/remove.d.ts +11 -0
  91. package/dist/commands/environment-variable/remove.js +33 -0
  92. package/dist/commands/environment-variable/remove.js.map +1 -0
  93. package/dist/commands/environment-variable/update.d.ts +13 -0
  94. package/dist/commands/environment-variable/update.js +41 -0
  95. package/dist/commands/environment-variable/update.js.map +1 -0
  96. package/dist/commands/git/connect.d.ts +10 -0
  97. package/dist/commands/git/connect.js +60 -0
  98. package/dist/commands/git/connect.js.map +1 -0
  99. package/dist/commands/git/disconnect.d.ts +9 -0
  100. package/dist/commands/git/disconnect.js +45 -0
  101. package/dist/commands/git/disconnect.js.map +1 -0
  102. package/dist/commands/{hello.d.ts → git.d.ts} +1 -1
  103. package/dist/commands/git.js +17 -0
  104. package/dist/commands/git.js.map +1 -0
  105. package/dist/commands/link.d.ts +17 -0
  106. package/dist/commands/link.js +101 -0
  107. package/dist/commands/link.js.map +1 -0
  108. package/dist/commands/login.d.ts +6 -0
  109. package/dist/commands/login.js +21 -0
  110. package/dist/commands/login.js.map +1 -0
  111. package/dist/commands/logout.d.ts +6 -0
  112. package/dist/commands/logout.js +20 -0
  113. package/dist/commands/logout.js.map +1 -0
  114. package/dist/commands/logs.d.ts +16 -0
  115. package/dist/commands/logs.js +96 -0
  116. package/dist/commands/logs.js.map +1 -0
  117. package/dist/commands/publish.d.ts +15 -0
  118. package/dist/commands/publish.js +51 -0
  119. package/dist/commands/publish.js.map +1 -0
  120. package/dist/commands/telemetry/disable.d.ts +5 -0
  121. package/dist/commands/telemetry/disable.js +14 -0
  122. package/dist/commands/telemetry/disable.js.map +1 -0
  123. package/dist/commands/telemetry/enable.d.ts +5 -0
  124. package/dist/commands/telemetry/enable.js +13 -0
  125. package/dist/commands/telemetry/enable.js.map +1 -0
  126. package/dist/commands/telemetry/status.d.ts +5 -0
  127. package/dist/commands/telemetry/status.js +19 -0
  128. package/dist/commands/telemetry/status.js.map +1 -0
  129. package/dist/commands/tunnel.d.ts +9 -0
  130. package/dist/commands/tunnel.js +96 -0
  131. package/dist/commands/tunnel.js.map +1 -0
  132. package/dist/commands/whoami.d.ts +6 -0
  133. package/dist/commands/whoami.js +13 -0
  134. package/dist/commands/whoami.js.map +1 -0
  135. package/dist/env.d.ts +4 -0
  136. package/dist/env.js +10 -0
  137. package/dist/env.js.map +1 -0
  138. package/dist/lib/alpic-command.d.ts +6 -0
  139. package/dist/lib/alpic-command.js +25 -0
  140. package/dist/lib/alpic-command.js.map +1 -0
  141. package/dist/lib/archive.d.ts +7 -0
  142. package/dist/lib/archive.js +51 -0
  143. package/dist/lib/archive.js.map +1 -0
  144. package/dist/lib/audit.d.ts +16 -0
  145. package/dist/lib/audit.js +244 -0
  146. package/dist/lib/audit.js.map +1 -0
  147. package/dist/lib/auth/auth.d.ts +3 -0
  148. package/dist/lib/auth/auth.js +39 -0
  149. package/dist/lib/auth/auth.js.map +1 -0
  150. package/dist/lib/auth/oauth/client.d.ts +28 -0
  151. package/dist/lib/auth/oauth/client.js +110 -0
  152. package/dist/lib/auth/oauth/client.js.map +1 -0
  153. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  154. package/dist/lib/auth/oauth/constants.js +3 -0
  155. package/dist/lib/auth/oauth/constants.js.map +1 -0
  156. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  157. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  158. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  159. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  160. package/dist/lib/auth/oauth/server/index.js +105 -0
  161. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  162. package/dist/lib/auth/whoami.d.ts +1 -0
  163. package/dist/lib/auth/whoami.js +45 -0
  164. package/dist/lib/auth/whoami.js.map +1 -0
  165. package/dist/lib/base-workflow.d.ts +10 -0
  166. package/dist/lib/base-workflow.js +22 -0
  167. package/dist/lib/base-workflow.js.map +1 -0
  168. package/dist/lib/config.d.ts +12 -0
  169. package/dist/lib/config.js +32 -0
  170. package/dist/lib/config.js.map +1 -0
  171. package/dist/lib/deployment.d.ts +88 -0
  172. package/dist/lib/deployment.js +150 -0
  173. package/dist/lib/deployment.js.map +1 -0
  174. package/dist/lib/environment-variable.d.ts +37 -0
  175. package/dist/lib/environment-variable.js +299 -0
  176. package/dist/lib/environment-variable.js.map +1 -0
  177. package/dist/lib/git.d.ts +22 -0
  178. package/dist/lib/git.js +131 -0
  179. package/dist/lib/git.js.map +1 -0
  180. package/dist/lib/global-store.d.ts +28 -0
  181. package/dist/lib/global-store.js +76 -0
  182. package/dist/lib/global-store.js.map +1 -0
  183. package/dist/lib/link.d.ts +83 -0
  184. package/dist/lib/link.js +387 -0
  185. package/dist/lib/link.js.map +1 -0
  186. package/dist/lib/logs.d.ts +20 -0
  187. package/dist/lib/logs.js +86 -0
  188. package/dist/lib/logs.js.map +1 -0
  189. package/dist/lib/publish.d.ts +22 -0
  190. package/dist/lib/publish.js +185 -0
  191. package/dist/lib/publish.js.map +1 -0
  192. package/dist/lib/resolve.d.ts +6 -0
  193. package/dist/lib/resolve.js +26 -0
  194. package/dist/lib/resolve.js.map +1 -0
  195. package/dist/lib/table.d.ts +8 -0
  196. package/dist/lib/table.js +27 -0
  197. package/dist/lib/table.js.map +1 -0
  198. package/dist/lib/telemetry.d.ts +7 -0
  199. package/dist/lib/telemetry.js +66 -0
  200. package/dist/lib/telemetry.js.map +1 -0
  201. package/dist/lib/upload.d.ts +1 -0
  202. package/dist/lib/upload.js +14 -0
  203. package/dist/lib/upload.js.map +1 -0
  204. package/dist/lib/utils.d.ts +4 -0
  205. package/dist/lib/utils.js +45 -0
  206. package/dist/lib/utils.js.map +1 -0
  207. package/dist/lib/utils.test.d.ts +1 -0
  208. package/dist/lib/utils.test.js +27 -0
  209. package/dist/lib/utils.test.js.map +1 -0
  210. package/dist/posthog.d.ts +3 -0
  211. package/dist/posthog.js +10 -0
  212. package/dist/posthog.js.map +1 -0
  213. package/dist/types.d.ts +8 -0
  214. package/dist/types.js +2 -0
  215. package/dist/types.js.map +1 -0
  216. package/package.json +46 -12
  217. package/dist/commands/hello.js +0 -10
  218. package/dist/commands/hello.js.map +0 -1
@@ -0,0 +1,387 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { runtimeSchema } from "@alpic-ai/api";
4
+ import * as p from "@clack/prompts";
5
+ import chalk from "chalk";
6
+ import { api } from "../api.js";
7
+ import { BaseWorkflow } from "./base-workflow.js";
8
+ import { config } from "./config.js";
9
+ export const RUNTIMES = runtimeSchema.options;
10
+ const RUNTIME_LABELS = {
11
+ node24: "Node.js 24",
12
+ node22: "Node.js 22",
13
+ "python3.14": "Python 3.14",
14
+ "python3.13": "Python 3.13",
15
+ };
16
+ export class LinkWorkflow extends BaseWorkflow {
17
+ async confirmWorkingDirectory() {
18
+ const confirmed = await this.confirm({
19
+ message: chalk.bold(`Use the current directory? `) + chalk.cyan(process.cwd()),
20
+ initialValue: true,
21
+ });
22
+ if (p.isCancel(confirmed))
23
+ return null;
24
+ return confirmed === true;
25
+ }
26
+ async confirmLinkExisting() {
27
+ const link = await this.confirm({
28
+ message: chalk.bold("Link to existing project?"),
29
+ initialValue: true,
30
+ }, false);
31
+ if (p.isCancel(link))
32
+ return null;
33
+ return link === true;
34
+ }
35
+ async confirmLinkToAnotherProject() {
36
+ const link = await this.confirm({
37
+ message: chalk.bold("Link to another project?"),
38
+ initialValue: true,
39
+ }, false);
40
+ if (p.isCancel(link))
41
+ return null;
42
+ return link === true;
43
+ }
44
+ async selectProjectFromList(projects) {
45
+ if (projects.length === 0) {
46
+ return null;
47
+ }
48
+ const choice = await p.select({
49
+ message: chalk.bold("Choose a project"),
50
+ options: projects.map((proj) => ({ value: proj.id, label: proj.name })),
51
+ });
52
+ if (p.isCancel(choice))
53
+ return null;
54
+ const project = projects.find((proj) => proj.id === choice);
55
+ return project ?? null;
56
+ }
57
+ async selectEnvironmentFromList(environments) {
58
+ if (environments.length === 0) {
59
+ return null;
60
+ }
61
+ const choice = await p.select({
62
+ message: chalk.bold("Choose an environment to deploy to"),
63
+ options: environments.map((env) => ({
64
+ value: env.id,
65
+ label: env.sourceBranch ? `${env.name} (${env.sourceBranch})` : env.name,
66
+ })),
67
+ });
68
+ if (p.isCancel(choice))
69
+ return null;
70
+ const environment = environments.find((e) => e.id === choice);
71
+ return environment ?? null;
72
+ }
73
+ async resolveTeam() {
74
+ const teams = await api.teams.list.v1();
75
+ if (teams.length === 0) {
76
+ throw new Error("No teams found. Create a team in the Alpic dashboard first.");
77
+ }
78
+ if (this.flags.teamId) {
79
+ const match = teams.find((t) => t.id === this.flags.teamId);
80
+ if (!match) {
81
+ throw new Error(`Team "${this.flags.teamId}" not found.`);
82
+ }
83
+ return match;
84
+ }
85
+ if (this.isNonInteractive()) {
86
+ if (teams.length === 1) {
87
+ const singleTeam = teams[0];
88
+ if (!singleTeam) {
89
+ throw new Error("No teams found.");
90
+ }
91
+ p.log.info(`Using team ${chalk.bold(singleTeam.name)}`);
92
+ return singleTeam;
93
+ }
94
+ throw new Error("Multiple teams found. Use --team-id to select one.");
95
+ }
96
+ const choice = await p.select({
97
+ message: chalk.bold("Choose a team"),
98
+ options: teams.map((t) => ({ value: t.id, label: t.name })),
99
+ });
100
+ if (p.isCancel(choice))
101
+ return null;
102
+ const selected = teams.find((t) => t.id === choice);
103
+ return selected ?? null;
104
+ }
105
+ async promptRootDirectory() {
106
+ if (this.isNonInteractive()) {
107
+ if (this.flags.rootDir) {
108
+ const trimmed = this.flags.rootDir.trim();
109
+ if (trimmed === "" || trimmed === ".")
110
+ return null;
111
+ if (!this.directoryExists(trimmed)) {
112
+ throw new Error(`Directory does not exist: ${resolve(trimmed)}`);
113
+ }
114
+ return trimmed;
115
+ }
116
+ return null;
117
+ }
118
+ while (true) {
119
+ const rootDir = await p.text({
120
+ message: chalk.bold("Root directory"),
121
+ placeholder: ".",
122
+ initialValue: ".",
123
+ validate: (value) => {
124
+ if (value != null && value.length > 512)
125
+ return "Path must be at most 512 characters.";
126
+ return undefined;
127
+ },
128
+ });
129
+ if (p.isCancel(rootDir))
130
+ return null;
131
+ const trimmed = rootDir.trim();
132
+ if (trimmed === "" || trimmed === ".")
133
+ return null;
134
+ if (!this.directoryExists(trimmed)) {
135
+ p.log.error(`Directory does not exist: ${trimmed}`);
136
+ continue;
137
+ }
138
+ return trimmed;
139
+ }
140
+ }
141
+ async confirmDeployWithExistingConfig(existingConfig) {
142
+ const envLabel = existingConfig.environmentName ? ` to environment "${existingConfig.environmentName}"` : "";
143
+ const teamLabel = existingConfig.teamName ? chalk.dim(` [team: ${existingConfig.teamName}]`) : "";
144
+ const confirmed = await this.confirm({
145
+ message: chalk.bold(`Use project "${existingConfig.projectName}"${envLabel}?`) + teamLabel,
146
+ initialValue: true,
147
+ });
148
+ if (p.isCancel(confirmed))
149
+ return null;
150
+ return confirmed === true;
151
+ }
152
+ async runLinkFlow() {
153
+ const fromFlags = await this.getConfigFromFlags();
154
+ if (fromFlags)
155
+ return fromFlags;
156
+ const ok = await this.confirmWorkingDirectory();
157
+ if (ok === null || ok === false)
158
+ return null;
159
+ const existingConfig = config.load();
160
+ if (existingConfig) {
161
+ let confirmed;
162
+ while (true) {
163
+ confirmed = await this.confirmDeployWithExistingConfig(existingConfig);
164
+ if (confirmed === null)
165
+ return null;
166
+ if (confirmed)
167
+ break;
168
+ const linkAnother = await this.confirmLinkToAnotherProject();
169
+ if (linkAnother === null)
170
+ return null;
171
+ if (linkAnother) {
172
+ const linkExisting = await this.confirmLinkExisting();
173
+ if (linkExisting === null)
174
+ return null;
175
+ if (!linkExisting) {
176
+ return this.runCreateProjectFlow();
177
+ }
178
+ return this.runLinkingFlow();
179
+ }
180
+ }
181
+ if (existingConfig.environmentId) {
182
+ return {
183
+ projectId: existingConfig.projectId,
184
+ teamId: existingConfig.teamId,
185
+ teamName: existingConfig.teamName,
186
+ projectName: existingConfig.projectName,
187
+ environmentId: existingConfig.environmentId,
188
+ environmentName: existingConfig.environmentName,
189
+ };
190
+ }
191
+ const env = await this.resolveEnvironmentForProject(existingConfig.projectId);
192
+ if (!env)
193
+ return null;
194
+ const updatedConfig = {
195
+ ...existingConfig,
196
+ environmentId: env.environmentId,
197
+ environmentName: env.environmentName,
198
+ };
199
+ config.save(updatedConfig);
200
+ p.note(`Environment "${env.environmentName}" will be used for future deploys.`, undefined, {
201
+ format: (line) => line,
202
+ });
203
+ return updatedConfig;
204
+ }
205
+ const team = await this.resolveTeam();
206
+ if (!team)
207
+ return null;
208
+ const linkExisting = await this.confirmLinkExisting();
209
+ if (linkExisting === null)
210
+ return null;
211
+ if (linkExisting) {
212
+ return this.runLinkingFlow(team);
213
+ }
214
+ return this.runCreateProjectFlow(team);
215
+ }
216
+ async resolveEnvironmentForProject(projectId) {
217
+ const project = await api.projects.get.v1({ projectId });
218
+ const environments = project.environments ?? [];
219
+ if (environments.length === 0) {
220
+ throw new Error("No environments found for this project.");
221
+ }
222
+ const environment = await this.selectEnvironmentFromList(environments);
223
+ if (!environment)
224
+ return null;
225
+ return { environmentId: environment.id, environmentName: environment.name };
226
+ }
227
+ async getConfigFromFlags() {
228
+ const { projectId, environmentId } = this.flags;
229
+ if (projectId && !environmentId) {
230
+ throw new Error("--environment-id is required when using --project-id.");
231
+ }
232
+ if (!projectId && environmentId) {
233
+ throw new Error("--project-id is required when using --environment-id.");
234
+ }
235
+ if (projectId && environmentId) {
236
+ const project = await api.projects.get.v1({ projectId });
237
+ const environment = project.environments?.find((env) => env.id === environmentId);
238
+ if (!environment) {
239
+ throw new Error(`Environment "${environmentId}" not found in project "${project.name}".`);
240
+ }
241
+ const teams = await api.teams.list.v1();
242
+ const team = teams.find((t) => t.id === project.teamId);
243
+ const resolvedConfig = {
244
+ projectId,
245
+ teamId: project.teamId,
246
+ teamName: team?.name,
247
+ projectName: project.name,
248
+ environmentId,
249
+ environmentName: environment.name,
250
+ };
251
+ config.save(resolvedConfig);
252
+ return resolvedConfig;
253
+ }
254
+ return null;
255
+ }
256
+ directoryExists(dir) {
257
+ return existsSync(dir) && statSync(dir).isDirectory();
258
+ }
259
+ detectRuntime() {
260
+ const has = (file) => existsSync(file);
261
+ const read = (file) => {
262
+ try {
263
+ return readFileSync(file, "utf8");
264
+ }
265
+ catch {
266
+ return "";
267
+ }
268
+ };
269
+ if (has("pyproject.toml") || has("requirements.txt") || has("setup.py") || has(".python-version")) {
270
+ return "python3.13";
271
+ }
272
+ if (has("package.json")) {
273
+ const nvmrc = has(".nvmrc") ? (read(".nvmrc").trim().split(/\s/)[0] ?? "") : "";
274
+ const major = nvmrc.replace(/^v/i, "").match(/^(\d+)/)?.[1];
275
+ if (major === "22")
276
+ return "node22";
277
+ return "node24";
278
+ }
279
+ return null;
280
+ }
281
+ async runCreateProjectFlow(team) {
282
+ if (!team) {
283
+ team = (await this.resolveTeam()) ?? undefined;
284
+ if (!team)
285
+ return null;
286
+ }
287
+ if (this.isNonInteractive() && !this.flags.projectName) {
288
+ throw new Error("--project-name is required when using --non-interactive");
289
+ }
290
+ const name = this.flags.projectName ??
291
+ (await p.text({
292
+ message: chalk.bold("Project name"),
293
+ placeholder: "my-app",
294
+ validate: (value) => {
295
+ if (!value?.trim())
296
+ return "Project name is required.";
297
+ if (value.length > 100)
298
+ return "Project name must be at most 100 characters.";
299
+ return undefined;
300
+ },
301
+ }));
302
+ if (p.isCancel(name)) {
303
+ return null;
304
+ }
305
+ const detectedRuntime = this.detectRuntime();
306
+ const defaultRuntime = detectedRuntime ?? "node24";
307
+ const runtime = this.isNonInteractive()
308
+ ? (this.flags.runtime ?? defaultRuntime)
309
+ : await p.select({
310
+ message: chalk.bold("Runtime"),
311
+ options: RUNTIMES.map((value) => ({
312
+ value,
313
+ label: value === detectedRuntime ? `${RUNTIME_LABELS[value]} (detected)` : RUNTIME_LABELS[value],
314
+ })),
315
+ initialValue: defaultRuntime,
316
+ });
317
+ if (p.isCancel(runtime)) {
318
+ return null;
319
+ }
320
+ const rootDirectory = await this.promptRootDirectory();
321
+ const spin = p.spinner();
322
+ spin.start("Creating project...");
323
+ try {
324
+ const projectInput = {
325
+ name,
326
+ runtime,
327
+ teamId: team.id,
328
+ };
329
+ projectInput.rootDirectory = rootDirectory ?? undefined;
330
+ const created = await api.projects.create.v1(projectInput);
331
+ spin.stop("Project created.");
332
+ const productionEnv = created.productionEnvironment;
333
+ if (!productionEnv) {
334
+ throw new Error("Project was created but has no Production environment.");
335
+ }
336
+ const newConfig = {
337
+ projectId: created.id,
338
+ teamId: created.teamId,
339
+ teamName: team.name,
340
+ projectName: created.name,
341
+ environmentId: productionEnv.id,
342
+ environmentName: productionEnv.name,
343
+ };
344
+ config.save(newConfig);
345
+ return newConfig;
346
+ }
347
+ catch (error) {
348
+ spin.stop();
349
+ throw error;
350
+ }
351
+ }
352
+ async runLinkingFlow(team) {
353
+ if (!team) {
354
+ team = (await this.resolveTeam()) ?? undefined;
355
+ if (!team)
356
+ return null;
357
+ }
358
+ const projects = await api.projects.list.v1({ teamId: team.id });
359
+ if (projects.length === 0) {
360
+ throw new Error("No projects found. Create a project in the Alpic dashboard first.");
361
+ }
362
+ const project = await this.selectProjectFromList(projects);
363
+ if (!project)
364
+ return null;
365
+ const environments = project.environments ?? [];
366
+ if (environments.length === 0) {
367
+ throw new Error("No environments found for this project.");
368
+ }
369
+ const environment = await this.selectEnvironmentFromList(environments);
370
+ if (!environment)
371
+ return null;
372
+ const newConfig = {
373
+ projectId: project.id,
374
+ teamId: project.teamId,
375
+ teamName: team.name,
376
+ projectName: project.name,
377
+ environmentId: environment.id,
378
+ environmentName: environment.name,
379
+ };
380
+ config.save(newConfig);
381
+ p.note(`Linked to project "${project.name}", environment "${environment.name}".`, undefined, {
382
+ format: (line) => line,
383
+ });
384
+ return newConfig;
385
+ }
386
+ }
387
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/lib/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { RouterOutput } from "@alpic-ai/api";
2
+ export type RuntimeLogEntry = RouterOutput["environments"]["getLogs"]["v1"]["logs"][number];
3
+ type LogLevel = "INFO" | "ERROR" | "WARNING" | "DEBUG";
4
+ type FollowEnvironmentLogsParams = {
5
+ environmentId: string;
6
+ limit?: number;
7
+ level?: LogLevel[];
8
+ search?: string;
9
+ nextToken?: string | null;
10
+ initialLogs?: RuntimeLogEntry[];
11
+ pollIntervalMs?: number;
12
+ onLog: (log: RuntimeLogEntry) => void;
13
+ };
14
+ export declare function formatLogTimestamp(timestamp: Date | undefined, noColor: boolean): string;
15
+ export declare function printLog(log: RuntimeLogEntry, { noColor }?: {
16
+ noColor?: boolean;
17
+ }): void;
18
+ export declare function followEnvironmentLogs({ environmentId, limit, level, search, nextToken, initialLogs, pollIntervalMs, onLog, }: FollowEnvironmentLogsParams): Promise<never>;
19
+ export declare function parseLevel(values: string[]): LogLevel[];
20
+ export {};
@@ -0,0 +1,86 @@
1
+ import chalk from "chalk";
2
+ import { api } from "../api.js";
3
+ const LOG_TYPE_COLORS = {
4
+ ERROR: chalk.red,
5
+ WARNING: chalk.yellow,
6
+ DEBUG: chalk.gray,
7
+ INFO: chalk.white,
8
+ START: chalk.dim,
9
+ END: chalk.dim,
10
+ };
11
+ const LOG_TYPE_LABELS = {
12
+ START: "START",
13
+ END: "END",
14
+ INFO: "INFO",
15
+ ERROR: "ERROR",
16
+ WARNING: "WARN",
17
+ DEBUG: "DEBUG",
18
+ };
19
+ const LOG_LEVEL_WIDTH = 5;
20
+ export function formatLogTimestamp(timestamp, noColor) {
21
+ if (!timestamp)
22
+ return "";
23
+ const formatted = timestamp.toISOString().replace("T", " ").slice(0, 23);
24
+ return noColor ? formatted : chalk.gray(formatted);
25
+ }
26
+ export function printLog(log, { noColor = false } = {}) {
27
+ const colorize = noColor ? (s) => s : (LOG_TYPE_COLORS[log.type] ?? chalk.white);
28
+ const ts = formatLogTimestamp(log.timestamp, noColor);
29
+ const shortRequestId = log.requestId.split("-")[0] ?? log.requestId;
30
+ const levelPrefix = `${LOG_TYPE_LABELS[log.type].padEnd(LOG_LEVEL_WIDTH, " ")} `;
31
+ let message;
32
+ if (log.type === "START") {
33
+ const methodPrefix = log.method ? `method: ${log.method}, ` : "";
34
+ const startMessage = `--- MCP REQUEST START --- (${methodPrefix}requestId: ${shortRequestId})`;
35
+ message = noColor ? startMessage : chalk.dim(startMessage);
36
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
37
+ return;
38
+ }
39
+ else if (log.type === "END") {
40
+ const durationSuffix = log.durationInMs !== undefined ? ` (duration: ${log.durationInMs}ms)` : "";
41
+ const endMessage = `--- MCP REQUEST END -----${durationSuffix}`;
42
+ message = noColor ? endMessage : chalk.dim(endMessage);
43
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
44
+ return;
45
+ }
46
+ else {
47
+ message = colorize(log.content ?? "");
48
+ }
49
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
50
+ }
51
+ export async function followEnvironmentLogs({ environmentId, limit, level, search, nextToken, initialLogs = [], pollIntervalMs = 3_000, onLog, }) {
52
+ const lastInitialLog = initialLogs.at(-1);
53
+ let lastTimestamp = lastInitialLog === undefined
54
+ ? new Date().toISOString()
55
+ : new Date(lastInitialLog.timestamp.getTime() + 1).toISOString();
56
+ let cursor = nextToken ?? null;
57
+ while (true) {
58
+ const options = {
59
+ environmentId,
60
+ since: lastTimestamp,
61
+ limit,
62
+ level,
63
+ search,
64
+ nextToken: cursor ?? undefined,
65
+ };
66
+ const response = await api.environments.getLogs.v1(options);
67
+ for (const log of response.logs) {
68
+ onLog(log);
69
+ lastTimestamp = new Date(log.timestamp.getTime() + 1).toISOString();
70
+ }
71
+ cursor = response.nextToken;
72
+ if (cursor === null) {
73
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
74
+ }
75
+ }
76
+ }
77
+ export function parseLevel(values) {
78
+ return values.map((value) => {
79
+ const normalized = value.toUpperCase();
80
+ if (!["INFO", "ERROR", "WARNING", "DEBUG"].includes(normalized)) {
81
+ throw new Error(`Invalid log level: "${value}". Valid values: info, error, warning, debug`);
82
+ }
83
+ return normalized;
84
+ });
85
+ }
86
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/lib/logs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAiBhC,MAAM,eAAe,GAA0C;IAC7D,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC,IAAI;IACjB,IAAI,EAAE,KAAK,CAAC,KAAK;IACjB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,GAAG,EAAE,KAAK,CAAC,GAAG;CACf,CAAC;AACF,MAAM,eAAe,GAA4C;IAC/D,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,OAAO;CACf,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,kBAAkB,CAAC,SAA2B,EAAE,OAAgB;IAC9E,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAoB,EAAE,EAAE,OAAO,GAAG,KAAK,KAA4B,EAAE;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC;IACpE,MAAM,WAAW,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC;IAElF,IAAI,OAAe,CAAC;IACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,8BAA8B,YAAY,cAAc,cAAc,GAAG,CAAC;QAC/F,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;SAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,MAAM,UAAU,GAAG,4BAA4B,cAAc,EAAE,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,aAAa,EACb,KAAK,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,WAAW,GAAG,EAAE,EAChB,cAAc,GAAG,KAAK,EACtB,KAAK,GACuB;IAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,aAAa,GACf,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,IAAI,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC;IAE/B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG;YACd,aAAa;YACb,KAAK,EAAE,aAAa;YACpB,KAAK;YACL,KAAK;YACL,MAAM;YACN,SAAS,EAAE,MAAM,IAAI,SAAS;SAC/B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAE5D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE5B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,8CAA8C,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,UAAsB,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { BaseWorkflow } from "./base-workflow.js";
2
+ type PublishFlags = {
3
+ "non-interactive"?: boolean;
4
+ "project-id"?: string;
5
+ domain?: string;
6
+ title?: string;
7
+ description?: string;
8
+ "website-url"?: string;
9
+ "icon-src"?: string;
10
+ };
11
+ export declare const getMcpRegistrySearchUrl: (serverName: string) => string;
12
+ export declare class PublishWorkflow extends BaseWorkflow<PublishFlags> {
13
+ publish(projectId: string): Promise<void>;
14
+ private doPublish;
15
+ private getDeployedCustomDomains;
16
+ private sortCandidates;
17
+ private selectDomain;
18
+ private promptTitle;
19
+ private promptDescription;
20
+ private promptOptionalUrl;
21
+ }
22
+ export {};