@inquir/compute-cli 0.2.2 → 0.3.0

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 (62) hide show
  1. package/README.md +133 -35
  2. package/dist/commands/apps.d.ts +42 -5
  3. package/dist/commands/apps.d.ts.map +1 -1
  4. package/dist/commands/apps.js +878 -42
  5. package/dist/commands/apps.js.map +1 -1
  6. package/dist/commands/deploy.d.ts +38 -0
  7. package/dist/commands/deploy.d.ts.map +1 -1
  8. package/dist/commands/deploy.js +165 -12
  9. package/dist/commands/deploy.js.map +1 -1
  10. package/dist/commands/doctor.js +2 -2
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +3 -0
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/login.d.ts.map +1 -1
  15. package/dist/commands/login.js +44 -13
  16. package/dist/commands/login.js.map +1 -1
  17. package/dist/commands/projects.d.ts +2 -0
  18. package/dist/commands/projects.d.ts.map +1 -0
  19. package/dist/commands/projects.js +98 -0
  20. package/dist/commands/projects.js.map +1 -0
  21. package/dist/index.js +3 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/utils/api.d.ts +45 -4
  24. package/dist/utils/api.d.ts.map +1 -1
  25. package/dist/utils/api.js +66 -5
  26. package/dist/utils/api.js.map +1 -1
  27. package/dist/utils/apps-presentation.d.ts +10 -0
  28. package/dist/utils/apps-presentation.d.ts.map +1 -1
  29. package/dist/utils/apps-presentation.js +27 -0
  30. package/dist/utils/apps-presentation.js.map +1 -1
  31. package/dist/utils/args.d.ts.map +1 -1
  32. package/dist/utils/args.js +8 -1
  33. package/dist/utils/args.js.map +1 -1
  34. package/dist/utils/assets.d.ts +48 -1
  35. package/dist/utils/assets.d.ts.map +1 -1
  36. package/dist/utils/assets.js +185 -7
  37. package/dist/utils/assets.js.map +1 -1
  38. package/dist/utils/auth.d.ts +9 -2
  39. package/dist/utils/auth.d.ts.map +1 -1
  40. package/dist/utils/auth.js +51 -11
  41. package/dist/utils/auth.js.map +1 -1
  42. package/dist/utils/context.d.ts.map +1 -1
  43. package/dist/utils/context.js +2 -0
  44. package/dist/utils/context.js.map +1 -1
  45. package/dist/utils/deploy-follow.d.ts +4 -3
  46. package/dist/utils/deploy-follow.d.ts.map +1 -1
  47. package/dist/utils/deploy-follow.js +76 -17
  48. package/dist/utils/deploy-follow.js.map +1 -1
  49. package/dist/utils/detect.d.ts +49 -1
  50. package/dist/utils/detect.d.ts.map +1 -1
  51. package/dist/utils/detect.js +153 -12
  52. package/dist/utils/detect.js.map +1 -1
  53. package/dist/utils/ensure-auth.d.ts.map +1 -1
  54. package/dist/utils/ensure-auth.js +6 -2
  55. package/dist/utils/ensure-auth.js.map +1 -1
  56. package/dist/utils/package-metadata.js +1 -1
  57. package/dist/utils/project-context.d.ts +17 -0
  58. package/dist/utils/project-context.d.ts.map +1 -0
  59. package/dist/utils/project-context.js +94 -0
  60. package/dist/utils/project-context.js.map +1 -0
  61. package/package.json +10 -7
  62. package/skill/SKILL.md +7 -0
@@ -27,6 +27,8 @@ export interface ResolvedAuthConfig {
27
27
  }
28
28
  /** Default when no config, env, or flags set — first-party prod API (see proxy/Caddyfile). */
29
29
  export declare const DEFAULT_API_URL = "https://api.inquir.org";
30
+ /** API base identity: URL canonicalization includes the scheme and base path. */
31
+ export declare function sameApiEndpoint(left: string, right: string): boolean;
30
32
  /** Absolute path to the active CLI config file (for `config path` / `doctor`). */
31
33
  export declare function getConfigFilePath(): string;
32
34
  export declare function loadAuthConfig(): Promise<AuthConfig>;
@@ -37,10 +39,15 @@ export declare function resolveEnvironmentName(override?: string): string | unde
37
39
  export declare function resolveAuthConfig(overrides?: Partial<AuthConfig> & {
38
40
  environment?: string;
39
41
  projectWorkspaceId?: string;
42
+ },
43
+ /** Only login may resolve defaults while creating a new named environment. */
44
+ behavior?: {
45
+ allowMissingEnvironment?: boolean;
40
46
  }): Promise<ResolvedAuthConfig>;
41
47
  /**
42
48
  * Mutate the config slice for the active environment (top-level when no `--env`)
43
- * and persist. Used by login/logout/use to update credentials in place.
49
+ * and persist. The same loaded config is available for coordinated profile
50
+ * updates, such as retaining API bindings when login changes the default.
44
51
  */
45
- export declare function updateEnvironmentConfig(environment: string | undefined, mutate: (slice: EnvironmentConfig) => void): Promise<void>;
52
+ export declare function updateEnvironmentConfig(environment: string | undefined, mutate: (slice: EnvironmentConfig, config: AuthConfig) => void): Promise<void>;
46
53
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACjD,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,8FAA8F;AAC9F,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAcxD,kFAAkF;AAClF,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CA2B1D;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAWD,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1F,OAAO,CAAC,kBAAkB,CAAC,CAwC7B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GACzC,OAAO,CAAC,IAAI,CAAC,CAYf"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACjD,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,8FAA8F;AAC9F,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMpE;AAcD,kFAAkF;AAClF,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CA2B1D;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAWD,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5E;AAED,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAO;AAC3F,8EAA8E;AAC9E,QAAQ,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAkE7B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,GAC7D,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -1,8 +1,18 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
+ import { CliError, ExitCode, usageError } from './errors.js';
4
5
  /** Default when no config, env, or flags set — first-party prod API (see proxy/Caddyfile). */
5
6
  export const DEFAULT_API_URL = 'https://api.inquir.org';
7
+ /** API base identity: URL canonicalization includes the scheme and base path. */
8
+ export function sameApiEndpoint(left, right) {
9
+ try {
10
+ return new URL(left).href.replace(/\/+$/, '') === new URL(right).href.replace(/\/+$/, '');
11
+ }
12
+ catch {
13
+ return left === right;
14
+ }
15
+ }
6
16
  // Paths are resolved lazily (not module-level constants) so `os.homedir()` can
7
17
  // be overridden in tests and respects HOME changes at runtime.
8
18
  function configDir() {
@@ -79,14 +89,40 @@ function envValue(value) {
79
89
  }
80
90
  /** Resolve the active environment name from overrides or environment variables. */
81
91
  export function resolveEnvironmentName(override) {
92
+ if (override !== undefined && !override.trim()) {
93
+ throw usageError('Missing credential environment name', 'inquir config show --env <name>');
94
+ }
82
95
  return override ?? envValue(process.env.INQUIR_ENV) ?? envValue(process.env.LAMBDA_ENV) ?? undefined;
83
96
  }
84
- export async function resolveAuthConfig(overrides = {}) {
97
+ export async function resolveAuthConfig(overrides = {},
98
+ /** Only login may resolve defaults while creating a new named environment. */
99
+ behavior = {}) {
85
100
  const fileConfig = await loadAuthConfig();
86
101
  const selectedEnvironment = resolveEnvironmentName(overrides.environment);
87
- const environmentConfig = selectedEnvironment
88
- ? fileConfig.environments?.[selectedEnvironment] ?? {}
89
- : {};
102
+ const hasEnvironment = selectedEnvironment !== undefined &&
103
+ Object.prototype.hasOwnProperty.call(fileConfig.environments ?? {}, selectedEnvironment);
104
+ if (selectedEnvironment !== undefined && !hasEnvironment && !behavior.allowMissingEnvironment) {
105
+ throw new CliError(`Unknown credential environment: ${selectedEnvironment}`, {
106
+ code: 'UNKNOWN_ENVIRONMENT',
107
+ exitCode: ExitCode.USAGE,
108
+ explanation: `Credential environment "${selectedEnvironment}" is not configured. Choose an existing name, or create it with \`inquir login --env <name>\` or \`inquir config set apiUrl <url> --env <name>\`.`,
109
+ });
110
+ }
111
+ const environmentConfig = hasEnvironment ? fileConfig.environments[selectedEnvironment] : {};
112
+ if (!environmentConfig || typeof environmentConfig !== 'object' || Array.isArray(environmentConfig)) {
113
+ throw new CliError(`Invalid credential environment: ${selectedEnvironment}`, {
114
+ code: 'INVALID_ENVIRONMENT',
115
+ exitCode: ExitCode.USAGE,
116
+ explanation: `Credential environment "${selectedEnvironment}" must be a configuration object. Correct it in ~/.inquir/config.json before retrying.`,
117
+ });
118
+ }
119
+ // Partial named profiles may share the default credential only while they
120
+ // target the same API. A profile pointing elsewhere must never resurrect a
121
+ // default token/key or workspace after its own login is cleared.
122
+ const inheritedConfig = environmentConfig.apiUrl &&
123
+ !sameApiEndpoint(environmentConfig.apiUrl, fileConfig.apiUrl ?? DEFAULT_API_URL)
124
+ ? {}
125
+ : fileConfig;
90
126
  const apiUrl = overrides.apiUrl
91
127
  ?? envValue(process.env.INQUIR_API_URL)
92
128
  ?? envValue(process.env.LAMBDA_API_URL)
@@ -97,25 +133,29 @@ export async function resolveAuthConfig(overrides = {}) {
97
133
  ?? envValue(process.env.INQUIR_API_KEY)
98
134
  ?? envValue(process.env.LAMBDA_API_KEY)
99
135
  ?? environmentConfig.apiKey
100
- ?? fileConfig.apiKey
136
+ ?? inheritedConfig.apiKey
101
137
  ?? undefined;
102
138
  const token = overrides.token
103
139
  ?? envValue(process.env.INQUIR_TOKEN)
104
140
  ?? environmentConfig.token
105
- ?? fileConfig.token
141
+ ?? inheritedConfig.token
106
142
  ?? undefined;
107
143
  const workspaceId = overrides.workspaceId // explicit --workspace
108
144
  ?? envValue(process.env.INQUIR_WORKSPACE) // env var
109
145
  ?? environmentConfig.workspaceId // named credential environment
110
146
  ?? overrides.projectWorkspaceId // project link (inquir.config.json)
111
- ?? fileConfig.workspaceId // stored global default
147
+ ?? inheritedConfig.workspaceId // stored default for the same API
112
148
  ?? undefined;
113
- const user = environmentConfig.user ?? fileConfig.user;
149
+ // A cached identity from another token is not this profile's identity.
150
+ const user = environmentConfig.user ?? (environmentConfig.token && environmentConfig.token !== inheritedConfig.token
151
+ ? undefined
152
+ : inheritedConfig.user);
114
153
  return { apiUrl, apiKey, token, workspaceId, user };
115
154
  }
116
155
  /**
117
156
  * Mutate the config slice for the active environment (top-level when no `--env`)
118
- * and persist. Used by login/logout/use to update credentials in place.
157
+ * and persist. The same loaded config is available for coordinated profile
158
+ * updates, such as retaining API bindings when login changes the default.
119
159
  */
120
160
  export async function updateEnvironmentConfig(environment, mutate) {
121
161
  const config = await loadAuthConfig();
@@ -123,11 +163,11 @@ export async function updateEnvironmentConfig(environment, mutate) {
123
163
  if (envName) {
124
164
  config.environments = config.environments ?? {};
125
165
  const slice = config.environments[envName] ?? {};
126
- mutate(slice);
166
+ mutate(slice, config);
127
167
  config.environments[envName] = slice;
128
168
  }
129
169
  else {
130
- mutate(config);
170
+ mutate(config, config);
131
171
  }
132
172
  await saveAuthConfig(config);
133
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CA8BxD;AAED,wBAAgB,OAAO,IAAI,YAAY,CAEtC;AAED,iBAAiB;AACjB,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAWjE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAgCxD;AAED,wBAAgB,OAAO,IAAI,YAAY,CAEtC;AAED,iBAAiB;AACjB,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAWjE"}
@@ -15,6 +15,8 @@ let current = {
15
15
  */
16
16
  export function initRuntime(argv) {
17
17
  const json = hasFlag(argv, '--json');
18
+ // Preserve the requested error format even if validation of a later flag fails.
19
+ current = { ...current, json };
18
20
  const flags = {
19
21
  json,
20
22
  debug: hasFlag(argv, '--debug') || process.env.INQUIR_DEBUG === '1',
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,13 @@ export interface FollowDeployOptions {
12
12
  json?: boolean;
13
13
  ci?: boolean;
14
14
  noLogs?: boolean;
15
- /** Max time to wait for a terminal status when polling (ms). */
15
+ /** Max time to observe a terminal status, including open log/status requests (ms). */
16
16
  timeoutMs?: number;
17
17
  }
18
18
  /**
19
- * Stream a deploy's logs to stdout, then resolve with the terminal deploy
20
- * record. Falls back to status polling if the SSE stream is unavailable.
19
+ * Observe status independently of the best-effort log connection: a proxy may
20
+ * keep SSE open after the deploy finishes, or lose the terminal frame entirely.
21
+ * A single deadline bounds both channels and aborts their in-flight requests.
21
22
  */
22
23
  export declare function followDeploy(deployId: string, apiOptions: ApiRequestOptions, opts?: FollowDeployOptions): Promise<DeployRecord>;
23
24
  //# sourceMappingURL=deploy-follow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-follow.d.ts","sourceRoot":"","sources":["../../src/utils/deploy-follow.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI7C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAShE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,iBAAiB,EAC7B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAuBvB"}
1
+ {"version":3,"file":"deploy-follow.d.ts","sourceRoot":"","sources":["../../src/utils/deploy-follow.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAShE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgCD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,iBAAiB,EAC7B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAkEvB"}
@@ -1,5 +1,6 @@
1
1
  import { isTerminalDeployStatus } from '../sdk.js';
2
2
  import { getDeployStatus, streamDeployLogs } from './api.js';
3
+ import { CliError, ExitCode } from './errors.js';
3
4
  import { dim, printLine } from './output.js';
4
5
  import { redact } from './redact.js';
5
6
  /** Best-effort git/CI context from GitHub Actions environment variables. */
@@ -13,30 +14,63 @@ export function collectGitContext() {
13
14
  };
14
15
  return git.sha || git.ref || git.repo || git.actor ? git : undefined;
15
16
  }
16
- function sleep(ms) {
17
- return new Promise((resolve) => setTimeout(resolve, ms));
17
+ function sleep(ms, signal) {
18
+ signal.throwIfAborted();
19
+ return new Promise((resolve, reject) => {
20
+ const onAbort = () => {
21
+ clearTimeout(timer);
22
+ signal.removeEventListener('abort', onAbort);
23
+ reject(signal.reason);
24
+ };
25
+ const timer = setTimeout(() => {
26
+ signal.removeEventListener('abort', onAbort);
27
+ resolve();
28
+ }, ms);
29
+ signal.addEventListener('abort', onAbort, { once: true });
30
+ });
18
31
  }
19
- async function pollUntilTerminal(deployId, apiOptions, timeoutMs) {
20
- const deadline = Date.now() + timeoutMs;
21
- let last;
32
+ async function pollUntilTerminal(deployId, apiOptions, signal) {
22
33
  for (;;) {
23
- last = await getDeployStatus(deployId, apiOptions);
24
- if (isTerminalDeployStatus(last.status))
25
- return last;
26
- if (Date.now() > deadline)
27
- return last;
28
- await sleep(1000);
34
+ signal.throwIfAborted();
35
+ const deploy = await getDeployStatus(deployId, apiOptions, signal);
36
+ signal.throwIfAborted();
37
+ if (isTerminalDeployStatus(deploy.status))
38
+ return deploy;
39
+ await sleep(1000, signal);
29
40
  }
30
41
  }
31
42
  /**
32
- * Stream a deploy's logs to stdout, then resolve with the terminal deploy
33
- * record. Falls back to status polling if the SSE stream is unavailable.
43
+ * Observe status independently of the best-effort log connection: a proxy may
44
+ * keep SSE open after the deploy finishes, or lose the terminal frame entirely.
45
+ * A single deadline bounds both channels and aborts their in-flight requests.
34
46
  */
35
47
  export async function followDeploy(deployId, apiOptions, opts = {}) {
36
48
  const timeoutMs = opts.timeoutMs ?? 10 * 60_000;
37
- if (!opts.noLogs) {
49
+ const deadline = Date.now() + timeoutMs;
50
+ const controller = new AbortController();
51
+ const timeoutError = new CliError(`Deploy ${deployId} did not finish within ${Math.round(timeoutMs / 1000)}s`, {
52
+ code: 'DEPLOY_TIMEOUT',
53
+ exitCode: ExitCode.ERROR,
54
+ explanation: `The CLI stopped waiting for deploy ${deployId}; it has not cancelled the remote deploy. Check its status before retrying.`,
55
+ fix: 'Use `inquir deploys <function>` to inspect the existing deploy.',
56
+ });
57
+ let deadlineTimer;
58
+ const expired = new Promise((_, reject) => {
59
+ deadlineTimer = setTimeout(() => {
60
+ // Reject with the structured CLI error before aborting fetch so its
61
+ // platform-specific AbortError cannot replace the timeout diagnosis.
62
+ reject(timeoutError);
63
+ controller.abort(timeoutError);
64
+ }, timeoutMs);
65
+ });
66
+ async function consumeLogs() {
67
+ if (opts.noLogs)
68
+ return;
38
69
  try {
39
- for await (const event of streamDeployLogs(deployId, apiOptions)) {
70
+ for await (const event of streamDeployLogs(deployId, apiOptions, controller.signal)) {
71
+ // Do not let an already-buffered frame print after the final JSON/result.
72
+ if (controller.signal.aborted)
73
+ break;
40
74
  if (event.type === 'log') {
41
75
  // In --json mode stdout must stay a single JSON document, so stream
42
76
  // build logs to stderr (still visible) instead of polluting stdout.
@@ -55,9 +89,34 @@ export async function followDeploy(deployId, apiOptions, opts = {}) {
55
89
  }
56
90
  }
57
91
  catch {
58
- // SSE unavailable (e.g. older server) — fall through to polling.
92
+ // Status polling remains authoritative when streaming is unavailable.
93
+ }
94
+ }
95
+ const logs = consumeLogs();
96
+ try {
97
+ const result = await Promise.race([
98
+ pollUntilTerminal(deployId, apiOptions, controller.signal),
99
+ expired,
100
+ ]);
101
+ // Give buffered final logs a brief chance to drain. This never lets a
102
+ // stalled SSE connection hold up success/failure/cancellation indefinitely.
103
+ let drainTimer;
104
+ try {
105
+ await Promise.race([
106
+ logs,
107
+ new Promise((resolve) => {
108
+ drainTimer = setTimeout(resolve, Math.max(0, Math.min(250, deadline - Date.now())));
109
+ }),
110
+ ]);
59
111
  }
112
+ finally {
113
+ clearTimeout(drainTimer);
114
+ }
115
+ return result;
116
+ }
117
+ finally {
118
+ clearTimeout(deadlineTimer);
119
+ controller.abort();
60
120
  }
61
- return pollUntilTerminal(deployId, apiOptions, timeoutMs);
62
121
  }
63
122
  //# sourceMappingURL=deploy-follow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-follow.js","sourceRoot":"","sources":["../../src/utils/deploy-follow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-follow.js","sourceRoot":"","sources":["../../src/utils/deploy-follow.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ export type DetectedRuntime = 'nodejs22' | 'python312' | 'go122';
13
13
  export type AppMode = 'handler' | 'web';
14
14
  export interface DetectedApp {
15
15
  name: string;
16
+ /** Pre-0.2.3 derived name, when it differs and no explicit --name was supplied. */
17
+ legacyName?: string;
16
18
  runtime: DetectedRuntime;
17
19
  mode: AppMode;
18
20
  /** module.export spec for handler mode (e.g. "index.handler", "src/api.handler"). */
@@ -35,7 +37,53 @@ export declare class DetectionError extends Error {
35
37
  readonly hints: string[];
36
38
  constructor(message: string, hints?: string[]);
37
39
  }
38
- /** Sanitize an arbitrary string into a deployable function name. */
40
+ /**
41
+ * Sanitize an arbitrary string into a deployable function name.
42
+ *
43
+ * The output alphabet is the server's, `[a-zA-Z0-9_-]` (createFunctionSchema in
44
+ * src/validation/schemas.ts). Case and `_` survive it because the API keeps a
45
+ * name exactly as sent — `@@unique([tenantId, name])` on LambdaFunction
46
+ * (prisma/schema.prisma) is a Postgres unique index over the raw string, so
47
+ * `my_api`, `my-api` and `MyAPI` are three functions, not one. A scoped npm
48
+ * name keeps its scope as a leading segment (`@acme/api` → `acme-api`) because
49
+ * the scope is the only thing that tells it apart from `@billing/api`.
50
+ *
51
+ * A collision here is not cosmetic: the derived name IS the deploy target.
52
+ * `inquir deploy` updates whichever remote function already carries it
53
+ * (pushAndFollow in commands/deploy.ts), so two sources landing on one string
54
+ * take turns overwriting each other's code, env vars and URL.
55
+ *
56
+ * The mapping is still not injective. One collapse is forced by the alphabet;
57
+ * the other three are choices made here, and `--name` is the way out of all
58
+ * four:
59
+ * - Forced: `.`, ` `, `/` and every other rejected character must land
60
+ * somewhere inside the alphabet, and they all become `-`, so `my.api`,
61
+ * `my api` and `my/api` all reach `my-api`.
62
+ * - Chosen: runs of `-` collapse and leading/trailing `-` are trimmed, so
63
+ * `my--api` → `my-api` and `-api` → `api` even though the API accepts
64
+ * both inputs verbatim. Readability over injectivity.
65
+ * - Chosen, and a consequence of that trim: a scoped name collides with the
66
+ * unscoped name that spells its flattened form — `@acme/api` and `acme-api`
67
+ * both derive `acme-api`. `_` and a leading `-` were free (`acme_api`,
68
+ * `-acme-api` would have stayed distinct); the readable form won.
69
+ * - Chosen: a string with no `[a-zA-Z0-9_-]` character at all derives the
70
+ * shared literal `app`, so `касса` and `биллинг` — ordinary names in a
71
+ * product with a ru locale — both derive `app`, and the second deploys over
72
+ * the first. detectApp reports that class in `reasons` (derivesFallbackName)
73
+ * instead of letting it read like a chosen name, the same treatment
74
+ * derivesFallbackApplicationName gives it in src/utils/application-name.ts.
75
+ *
76
+ * The result is not length-capped either. The API's 128-character limit is
77
+ * enforced server-side (a 400 naming the `name` field); truncating here would
78
+ * manufacture exactly the collisions above out of two long, distinct names.
79
+ *
80
+ * One server path does re-fold the wider alphabet: app-sync labels the
81
+ * application with applicationNameForWorkspace (src/utils/application-name.ts —
82
+ * lowercase, `[^a-z0-9-]` → `-`), so `my_api` and `my-api` ask for one
83
+ * application. That path verifies ownership and refuses a foreign hit
84
+ * (workspace-sync.service resolveOwnedApplication), so the cost there is a
85
+ * refused sync that names the application, not lost code.
86
+ */
39
87
  export declare function sanitizeName(raw: string): string;
40
88
  /**
41
89
  * Detect a deployable app in `dir`. Overrides always win over sniffing; every
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAe,SAAQ,KAAK;IACV,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;gBAAzC,OAAO,EAAE,MAAM,EAAW,KAAK,GAAE,MAAM,EAAO;CAI3D;AAgFD,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD;AA6ID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,eAAoB,GAAG,WAAW,CAqInF"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAe,SAAQ,KAAK;IACV,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;gBAAzC,OAAO,EAAE,MAAM,EAAW,KAAK,GAAE,MAAM,EAAO;CAI3D;AAgFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD;AA8MD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,eAAoB,GAAG,WAAW,CAyKnF"}