alpic 0.0.0-dev.f74887d → 0.0.0-dev.f782aa6

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 (162) 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.js +18 -3
  7. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  8. package/dist/__tests__/deploy-flags.e2e.test.js +92 -5
  9. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  10. package/dist/__tests__/deploy.e2e.test.js +22 -10
  11. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  12. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  13. package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
  14. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  15. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  16. package/dist/__tests__/deployment-list.e2e.test.js +116 -0
  17. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  18. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  19. package/dist/__tests__/deployment-logs.e2e.test.js +255 -0
  20. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  21. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +259 -0
  23. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  24. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +139 -0
  26. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  27. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +150 -0
  29. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  30. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  31. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +342 -0
  32. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  33. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  34. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  35. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  36. package/dist/__tests__/git-flags.e2e.test.js +6 -6
  37. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  38. package/dist/__tests__/git.e2e.test.js +2 -2
  39. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  40. package/dist/__tests__/link.e2e.test.js +279 -0
  41. package/dist/__tests__/link.e2e.test.js.map +1 -0
  42. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  43. package/dist/__tests__/logs.e2e.test.js +227 -0
  44. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  45. package/dist/__tests__/mock-server.d.ts +22 -0
  46. package/dist/__tests__/mock-server.js +311 -20
  47. package/dist/__tests__/mock-server.js.map +1 -1
  48. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  49. package/dist/__tests__/publish.e2e.test.js +505 -0
  50. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  51. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  52. package/dist/__tests__/tunnel.e2e.test.js +61 -0
  53. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  54. package/dist/__tests__/utils.d.ts +8 -2
  55. package/dist/__tests__/utils.js +55 -20
  56. package/dist/__tests__/utils.js.map +1 -1
  57. package/dist/api.d.ts +1 -1
  58. package/dist/api.js +10 -3
  59. package/dist/api.js.map +1 -1
  60. package/dist/commands/audit.d.ts +14 -0
  61. package/dist/commands/audit.js +49 -0
  62. package/dist/commands/audit.js.map +1 -0
  63. package/dist/commands/deploy.d.ts +4 -1
  64. package/dist/commands/deploy.js +37 -18
  65. package/dist/commands/deploy.js.map +1 -1
  66. package/dist/commands/deployment/inspect.d.ts +11 -0
  67. package/dist/commands/deployment/inspect.js +91 -0
  68. package/dist/commands/deployment/inspect.js.map +1 -0
  69. package/dist/commands/deployment/list.d.ts +11 -0
  70. package/dist/commands/deployment/list.js +97 -0
  71. package/dist/commands/deployment/list.js.map +1 -0
  72. package/dist/commands/deployment/logs.d.ts +12 -0
  73. package/dist/commands/deployment/logs.js +50 -0
  74. package/dist/commands/deployment/logs.js.map +1 -0
  75. package/dist/commands/environment-variable/add.d.ts +14 -0
  76. package/dist/commands/environment-variable/add.js +47 -0
  77. package/dist/commands/environment-variable/add.js.map +1 -0
  78. package/dist/commands/environment-variable/list.d.ts +9 -0
  79. package/dist/commands/environment-variable/list.js +45 -0
  80. package/dist/commands/environment-variable/list.js.map +1 -0
  81. package/dist/commands/environment-variable/remove.d.ts +11 -0
  82. package/dist/commands/environment-variable/remove.js +33 -0
  83. package/dist/commands/environment-variable/remove.js.map +1 -0
  84. package/dist/commands/environment-variable/update.d.ts +13 -0
  85. package/dist/commands/environment-variable/update.js +41 -0
  86. package/dist/commands/environment-variable/update.js.map +1 -0
  87. package/dist/commands/git/connect.d.ts +1 -1
  88. package/dist/commands/git/connect.js +11 -12
  89. package/dist/commands/git/connect.js.map +1 -1
  90. package/dist/commands/git/disconnect.d.ts +1 -1
  91. package/dist/commands/git/disconnect.js +11 -11
  92. package/dist/commands/git/disconnect.js.map +1 -1
  93. package/dist/commands/link.d.ts +17 -0
  94. package/dist/commands/link.js +101 -0
  95. package/dist/commands/link.js.map +1 -0
  96. package/dist/commands/login.js +2 -13
  97. package/dist/commands/login.js.map +1 -1
  98. package/dist/commands/logs.d.ts +16 -0
  99. package/dist/commands/logs.js +96 -0
  100. package/dist/commands/logs.js.map +1 -0
  101. package/dist/commands/publish.d.ts +15 -0
  102. package/dist/commands/publish.js +51 -0
  103. package/dist/commands/publish.js.map +1 -0
  104. package/dist/commands/tunnel.d.ts +9 -0
  105. package/dist/commands/tunnel.js +96 -0
  106. package/dist/commands/tunnel.js.map +1 -0
  107. package/dist/lib/alpic-command.d.ts +1 -1
  108. package/dist/lib/alpic-command.js +0 -2
  109. package/dist/lib/alpic-command.js.map +1 -1
  110. package/dist/lib/audit.d.ts +16 -0
  111. package/dist/lib/audit.js +244 -0
  112. package/dist/lib/audit.js.map +1 -0
  113. package/dist/lib/auth/auth.d.ts +1 -0
  114. package/dist/lib/auth/auth.js +18 -0
  115. package/dist/lib/auth/auth.js.map +1 -1
  116. package/dist/lib/auth/oauth/server/index.js +5 -2
  117. package/dist/lib/auth/oauth/server/index.js.map +1 -1
  118. package/dist/lib/auth/whoami.js +6 -2
  119. package/dist/lib/auth/whoami.js.map +1 -1
  120. package/dist/lib/base-workflow.d.ts +1 -1
  121. package/dist/lib/base-workflow.js +1 -1
  122. package/dist/lib/base-workflow.js.map +1 -1
  123. package/dist/lib/config.d.ts +1 -0
  124. package/dist/lib/config.js +1 -0
  125. package/dist/lib/config.js.map +1 -1
  126. package/dist/lib/deployment.d.ts +69 -1
  127. package/dist/lib/deployment.js +111 -3
  128. package/dist/lib/deployment.js.map +1 -1
  129. package/dist/lib/environment-variable.d.ts +37 -0
  130. package/dist/lib/environment-variable.js +299 -0
  131. package/dist/lib/environment-variable.js.map +1 -0
  132. package/dist/lib/git.d.ts +3 -3
  133. package/dist/lib/git.js +5 -7
  134. package/dist/lib/git.js.map +1 -1
  135. package/dist/lib/global-store.js +2 -2
  136. package/dist/lib/global-store.js.map +1 -1
  137. package/dist/lib/{project.d.ts → link.d.ts} +26 -14
  138. package/dist/lib/{project.js → link.js} +173 -83
  139. package/dist/lib/link.js.map +1 -0
  140. package/dist/lib/logs.d.ts +20 -0
  141. package/dist/lib/logs.js +86 -0
  142. package/dist/lib/logs.js.map +1 -0
  143. package/dist/lib/publish.d.ts +22 -0
  144. package/dist/lib/publish.js +185 -0
  145. package/dist/lib/publish.js.map +1 -0
  146. package/dist/lib/resolve.d.ts +6 -0
  147. package/dist/lib/resolve.js +26 -0
  148. package/dist/lib/resolve.js.map +1 -0
  149. package/dist/lib/table.d.ts +8 -0
  150. package/dist/lib/table.js +27 -0
  151. package/dist/lib/table.js.map +1 -0
  152. package/dist/lib/telemetry.js +1 -1
  153. package/dist/lib/telemetry.js.map +1 -1
  154. package/dist/lib/utils.d.ts +4 -0
  155. package/dist/lib/utils.js +45 -0
  156. package/dist/lib/utils.js.map +1 -0
  157. package/dist/lib/utils.test.d.ts +1 -0
  158. package/dist/lib/utils.test.js +27 -0
  159. package/dist/lib/utils.test.js.map +1 -0
  160. package/dist/types.d.ts +1 -0
  161. package/package.json +25 -19
  162. package/dist/lib/project.js.map +0 -1
@@ -1,14 +1,20 @@
1
1
  import type { RouterOutput, Runtime } from "@alpic-ai/api";
2
2
  import type { ProjectConfig } from "../types.js";
3
3
  import { BaseWorkflow } from "./base-workflow.js";
4
- export type ProjectFlags = {
5
- yes?: boolean;
4
+ export declare const RUNTIMES: ("python3.13" | "python3.14" | "node22" | "node24")[];
5
+ export type LinkFlags = {
6
+ "non-interactive"?: boolean;
7
+ teamId?: string;
8
+ projectId?: string;
9
+ environmentId?: string;
6
10
  projectName?: string;
7
11
  runtime?: Runtime;
8
12
  rootDir?: string;
9
13
  };
10
- export declare class ProjectWorkflow extends BaseWorkflow<ProjectFlags> {
11
- selectEnvironmentFromList(environments: RouterOutput["projects"]["get"]["v1"]["environments"]): Promise<(typeof environments)[number] | null>;
14
+ export declare class LinkWorkflow extends BaseWorkflow<LinkFlags> {
15
+ confirmWorkingDirectory(): Promise<boolean | null>;
16
+ confirmLinkExisting(): Promise<boolean | null>;
17
+ confirmLinkToAnotherProject(): Promise<boolean | null>;
12
18
  selectProjectFromList(projects: RouterOutput["projects"]["list"]["v1"]): Promise<{
13
19
  id: string;
14
20
  name: string;
@@ -28,12 +34,12 @@ export declare class ProjectWorkflow extends BaseWorkflow<ProjectFlags> {
28
34
  mcpServerUrl: string;
29
35
  domains: {
30
36
  domain: string;
31
- status: "ongoing" | "deployed" | "failed";
37
+ status: "failed" | "ongoing" | "deployed";
32
38
  createdAt: Date;
33
39
  }[];
34
40
  latestDeployment: {
35
41
  id: string;
36
- status: "ongoing" | "deployed" | "failed" | "canceled";
42
+ status: "failed" | "ongoing" | "deployed" | "canceled";
37
43
  sourceCommitId: string | null;
38
44
  sourceCommitMessage: string | null;
39
45
  completedAt: Date | null;
@@ -48,24 +54,30 @@ export declare class ProjectWorkflow extends BaseWorkflow<ProjectFlags> {
48
54
  projectId: string;
49
55
  latestDeployment: {
50
56
  id: string;
51
- status: "ongoing" | "deployed" | "failed" | "canceled";
57
+ status: "failed" | "ongoing" | "deployed" | "canceled";
52
58
  sourceCommitId: string | null;
53
59
  sourceCommitMessage: string | null;
54
60
  completedAt: Date | null;
55
61
  } | null;
56
62
  }[];
57
63
  } | null>;
64
+ selectEnvironmentFromList(environments: RouterOutput["projects"]["get"]["v1"]["environments"]): Promise<(typeof environments)[number] | null>;
65
+ resolveTeam(): Promise<{
66
+ id: string;
67
+ name: string;
68
+ } | null>;
58
69
  promptRootDirectory(): Promise<string | null>;
59
- private directoryExists;
60
- private detectRuntime;
61
70
  confirmDeployWithExistingConfig(existingConfig: ProjectConfig): Promise<boolean | null>;
62
- confirmDeployDirectory(): Promise<boolean>;
63
- confirmLinkExisting(): Promise<boolean>;
64
- confirmLinkToAnotherProject(): Promise<boolean>;
65
- resolveProjectForDeploy(): Promise<(ProjectConfig & {
71
+ runLinkFlow(): Promise<(ProjectConfig & {
66
72
  environmentId: string;
67
73
  }) | null>;
68
- private resolveEnvironmentForProject;
74
+ resolveEnvironmentForProject(projectId: string): Promise<{
75
+ environmentId: string;
76
+ environmentName: string;
77
+ } | null>;
78
+ private getConfigFromFlags;
79
+ private directoryExists;
80
+ private detectRuntime;
69
81
  private runCreateProjectFlow;
70
82
  private runLinkingFlow;
71
83
  }
@@ -1,11 +1,59 @@
1
- import * as p from "@clack/prompts";
2
- import chalk from "chalk";
3
1
  import { existsSync, readFileSync, statSync } from "node:fs";
4
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";
5
6
  import { api } from "../api.js";
6
7
  import { BaseWorkflow } from "./base-workflow.js";
7
8
  import { config } from "./config.js";
8
- export class ProjectWorkflow extends BaseWorkflow {
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
+ }
9
57
  async selectEnvironmentFromList(environments) {
10
58
  if (environments.length === 0) {
11
59
  return null;
@@ -22,18 +70,37 @@ export class ProjectWorkflow extends BaseWorkflow {
22
70
  const environment = environments.find((e) => e.id === choice);
23
71
  return environment ?? null;
24
72
  }
25
- async selectProjectFromList(projects) {
26
- if (projects.length === 0) {
27
- return null;
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.");
28
95
  }
29
96
  const choice = await p.select({
30
- message: chalk.bold("Choose a project"),
31
- options: projects.map((proj) => ({ value: proj.id, label: proj.name })),
97
+ message: chalk.bold("Choose a team"),
98
+ options: teams.map((t) => ({ value: t.id, label: t.name })),
32
99
  });
33
100
  if (p.isCancel(choice))
34
101
  return null;
35
- const project = projects.find((proj) => proj.id === choice);
36
- return project ?? null;
102
+ const selected = teams.find((t) => t.id === choice);
103
+ return selected ?? null;
37
104
  }
38
105
  async promptRootDirectory() {
39
106
  if (this.isNonInteractive()) {
@@ -71,71 +138,23 @@ export class ProjectWorkflow extends BaseWorkflow {
71
138
  return trimmed;
72
139
  }
73
140
  }
74
- directoryExists(dir) {
75
- return existsSync(dir) && statSync(dir).isDirectory();
76
- }
77
- detectRuntime() {
78
- const has = (file) => existsSync(file);
79
- const read = (file) => {
80
- try {
81
- return readFileSync(file, "utf8");
82
- }
83
- catch {
84
- return "";
85
- }
86
- };
87
- if (has("pyproject.toml") || has("requirements.txt") || has("setup.py") || has(".python-version")) {
88
- return "python3.13";
89
- }
90
- if (has("package.json")) {
91
- const nvmrc = has(".nvmrc") ? (read(".nvmrc").trim().split(/\s/)[0] ?? "") : "";
92
- const major = nvmrc.replace(/^v/i, "").match(/^(\d+)/)?.[1];
93
- if (major === "22")
94
- return "node22";
95
- return "node24";
96
- }
97
- return null;
98
- }
99
141
  async confirmDeployWithExistingConfig(existingConfig) {
100
142
  const envLabel = existingConfig.environmentName ? ` to environment "${existingConfig.environmentName}"` : "";
143
+ const teamLabel = existingConfig.teamName ? chalk.dim(` [team: ${existingConfig.teamName}]`) : "";
101
144
  const confirmed = await this.confirm({
102
- message: chalk.bold(`Deploy project "${existingConfig.projectName}"${envLabel}?`),
145
+ message: chalk.bold(`Use project "${existingConfig.projectName}"${envLabel}?`) + teamLabel,
103
146
  initialValue: true,
104
147
  });
105
148
  if (p.isCancel(confirmed))
106
149
  return null;
107
150
  return confirmed === true;
108
151
  }
109
- async confirmDeployDirectory() {
110
- const confirmed = await this.confirm({
111
- message: chalk.bold(`Deploy the directory? `) + chalk.cyan(process.cwd()),
112
- initialValue: true,
113
- });
114
- if (p.isCancel(confirmed))
115
- return false;
116
- return confirmed === true;
117
- }
118
- async confirmLinkExisting() {
119
- const link = await this.confirm({
120
- message: chalk.bold("Link to existing project?"),
121
- initialValue: true,
122
- }, false);
123
- if (p.isCancel(link))
124
- return false;
125
- return link === true;
126
- }
127
- async confirmLinkToAnotherProject() {
128
- const link = await this.confirm({
129
- message: chalk.bold("Link to another project?"),
130
- initialValue: true,
131
- }, false);
132
- if (p.isCancel(link))
133
- return false;
134
- return link === true;
135
- }
136
- async resolveProjectForDeploy() {
137
- const ok = await this.confirmDeployDirectory();
138
- if (!ok)
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)
139
158
  return null;
140
159
  const existingConfig = config.load();
141
160
  if (existingConfig) {
@@ -147,10 +166,12 @@ export class ProjectWorkflow extends BaseWorkflow {
147
166
  if (confirmed)
148
167
  break;
149
168
  const linkAnother = await this.confirmLinkToAnotherProject();
150
- if (p.isCancel(linkAnother))
169
+ if (linkAnother === null)
151
170
  return null;
152
171
  if (linkAnother) {
153
172
  const linkExisting = await this.confirmLinkExisting();
173
+ if (linkExisting === null)
174
+ return null;
154
175
  if (!linkExisting) {
155
176
  return this.runCreateProjectFlow();
156
177
  }
@@ -161,6 +182,7 @@ export class ProjectWorkflow extends BaseWorkflow {
161
182
  return {
162
183
  projectId: existingConfig.projectId,
163
184
  teamId: existingConfig.teamId,
185
+ teamName: existingConfig.teamName,
164
186
  projectName: existingConfig.projectName,
165
187
  environmentId: existingConfig.environmentId,
166
188
  environmentName: existingConfig.environmentName,
@@ -180,11 +202,16 @@ export class ProjectWorkflow extends BaseWorkflow {
180
202
  });
181
203
  return updatedConfig;
182
204
  }
205
+ const team = await this.resolveTeam();
206
+ if (!team)
207
+ return null;
183
208
  const linkExisting = await this.confirmLinkExisting();
184
- if (!linkExisting) {
185
- return this.runCreateProjectFlow();
209
+ if (linkExisting === null)
210
+ return null;
211
+ if (linkExisting) {
212
+ return this.runLinkingFlow(team);
186
213
  }
187
- return this.runLinkingFlow();
214
+ return this.runCreateProjectFlow(team);
188
215
  }
189
216
  async resolveEnvironmentForProject(projectId) {
190
217
  const project = await api.projects.get.v1({ projectId });
@@ -197,9 +224,68 @@ export class ProjectWorkflow extends BaseWorkflow {
197
224
  return null;
198
225
  return { environmentId: environment.id, environmentName: environment.name };
199
226
  }
200
- async runCreateProjectFlow() {
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
+ }
201
287
  if (this.isNonInteractive() && !this.flags.projectName) {
202
- throw new Error("--project-name is required when using --yes");
288
+ throw new Error("--project-name is required when using --non-interactive");
203
289
  }
204
290
  const name = this.flags.projectName ??
205
291
  (await p.text({
@@ -214,7 +300,6 @@ export class ProjectWorkflow extends BaseWorkflow {
214
300
  },
215
301
  }));
216
302
  if (p.isCancel(name)) {
217
- p.cancel("Project name is required.");
218
303
  return null;
219
304
  }
220
305
  const detectedRuntime = this.detectRuntime();
@@ -223,16 +308,13 @@ export class ProjectWorkflow extends BaseWorkflow {
223
308
  ? (this.flags.runtime ?? defaultRuntime)
224
309
  : await p.select({
225
310
  message: chalk.bold("Runtime"),
226
- options: [
227
- { value: "node24", label: "Node.js 24" },
228
- { value: "node22", label: "Node.js 22" },
229
- { value: "python3.14", label: "Python 3.14" },
230
- { value: "python3.13", label: "Python 3.13" },
231
- ],
311
+ options: RUNTIMES.map((value) => ({
312
+ value,
313
+ label: value === detectedRuntime ? `${RUNTIME_LABELS[value]} (detected)` : RUNTIME_LABELS[value],
314
+ })),
232
315
  initialValue: defaultRuntime,
233
316
  });
234
317
  if (p.isCancel(runtime)) {
235
- p.cancel("Runtime is required.");
236
318
  return null;
237
319
  }
238
320
  const rootDirectory = await this.promptRootDirectory();
@@ -242,6 +324,7 @@ export class ProjectWorkflow extends BaseWorkflow {
242
324
  const projectInput = {
243
325
  name,
244
326
  runtime,
327
+ teamId: team.id,
245
328
  };
246
329
  projectInput.rootDirectory = rootDirectory ?? undefined;
247
330
  const created = await api.projects.create.v1(projectInput);
@@ -253,6 +336,7 @@ export class ProjectWorkflow extends BaseWorkflow {
253
336
  const newConfig = {
254
337
  projectId: created.id,
255
338
  teamId: created.teamId,
339
+ teamName: team.name,
256
340
  projectName: created.name,
257
341
  environmentId: productionEnv.id,
258
342
  environmentName: productionEnv.name,
@@ -265,8 +349,13 @@ export class ProjectWorkflow extends BaseWorkflow {
265
349
  throw error;
266
350
  }
267
351
  }
268
- async runLinkingFlow() {
269
- const projects = await api.projects.list.v1();
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 });
270
359
  if (projects.length === 0) {
271
360
  throw new Error("No projects found. Create a project in the Alpic dashboard first.");
272
361
  }
@@ -283,6 +372,7 @@ export class ProjectWorkflow extends BaseWorkflow {
283
372
  const newConfig = {
284
373
  projectId: project.id,
285
374
  teamId: project.teamId,
375
+ teamName: team.name,
286
376
  projectName: project.name,
287
377
  environmentId: environment.id,
288
378
  environmentName: environment.name,
@@ -294,4 +384,4 @@ export class ProjectWorkflow extends BaseWorkflow {
294
384
  return newConfig;
295
385
  }
296
386
  }
297
- //# sourceMappingURL=project.js.map
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":"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"}
@@ -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 {};