@credibledata/cred-cli 0.0.100 → 0.0.103

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 (225) hide show
  1. package/README-DEV.md +2 -2
  2. package/README.md +1 -1
  3. package/coverage/coverage-summary.json +40 -0
  4. package/coverage/tmp/coverage-2152-1789496974457-0.json +1 -0
  5. package/coverage/tmp/coverage-2153-1789496954404-0.json +1 -0
  6. package/dist/client/api.js +6151 -2254
  7. package/dist/client/api.js.map +1 -1
  8. package/dist/client/base.js +1 -1
  9. package/dist/client/common.js +1 -1
  10. package/dist/client/configuration.js +1 -1
  11. package/dist/client/index.js +1 -1
  12. package/dist/clientconfiguration.js +114 -26
  13. package/dist/clientconfiguration.js.map +1 -1
  14. package/dist/clientconfiguration.spec.js +159 -37
  15. package/dist/clientconfiguration.spec.js.map +1 -1
  16. package/dist/commands/add.js +36 -5
  17. package/dist/commands/add.js.map +1 -1
  18. package/dist/commands/connection/createconnections.js +4 -4
  19. package/dist/commands/connection/createconnections.js.map +1 -1
  20. package/dist/commands/connection/createconnections.spec.js +11 -1
  21. package/dist/commands/connection/createconnections.spec.js.map +1 -1
  22. package/dist/commands/connection/deleteconnection.js +4 -4
  23. package/dist/commands/connection/deleteconnection.js.map +1 -1
  24. package/dist/commands/connection/deleteconnection.spec.js +1 -1
  25. package/dist/commands/connection/deleteconnection.spec.js.map +1 -1
  26. package/dist/commands/connection/listconnections.js +4 -4
  27. package/dist/commands/connection/listconnections.js.map +1 -1
  28. package/dist/commands/connection/listconnections.spec.js +1 -1
  29. package/dist/commands/connection/listconnections.spec.js.map +1 -1
  30. package/dist/commands/{project/createproject.js → environment/createenvironment.js} +17 -14
  31. package/dist/commands/environment/createenvironment.js.map +1 -0
  32. package/dist/commands/{project/createproject.spec.js → environment/createenvironment.spec.js} +46 -46
  33. package/dist/commands/environment/createenvironment.spec.js.map +1 -0
  34. package/dist/commands/{project/deleteproject.js → environment/deleteenvironment.js} +9 -9
  35. package/dist/commands/environment/deleteenvironment.js.map +1 -0
  36. package/dist/commands/{project/deleteproject.spec.js → environment/deleteenvironment.spec.js} +29 -29
  37. package/dist/commands/environment/deleteenvironment.spec.js.map +1 -0
  38. package/dist/commands/{project/getproject.js → environment/getenvironment.js} +8 -8
  39. package/dist/commands/environment/getenvironment.js.map +1 -0
  40. package/dist/commands/{project/getproject.spec.js → environment/getenvironment.spec.js} +32 -33
  41. package/dist/commands/environment/getenvironment.spec.js.map +1 -0
  42. package/dist/commands/{project/listprojects.js → environment/listenvironments.js} +10 -10
  43. package/dist/commands/environment/listenvironments.js.map +1 -0
  44. package/dist/commands/{project/listprojects.spec.js → environment/listenvironments.spec.js} +35 -35
  45. package/dist/commands/environment/listenvironments.spec.js.map +1 -0
  46. package/dist/commands/{project/setproject.js → environment/setenvironment.js} +6 -5
  47. package/dist/commands/environment/setenvironment.js.map +1 -0
  48. package/dist/commands/{project/setproject.spec.js → environment/setenvironment.spec.js} +9 -9
  49. package/dist/commands/environment/setenvironment.spec.js.map +1 -0
  50. package/dist/commands/environment/updateenvironment.js +130 -0
  51. package/dist/commands/environment/updateenvironment.js.map +1 -0
  52. package/dist/commands/environment/updateenvironment.spec.js +213 -0
  53. package/dist/commands/environment/updateenvironment.spec.js.map +1 -0
  54. package/dist/commands/get.js +66 -5
  55. package/dist/commands/get.js.map +1 -1
  56. package/dist/commands/legacy.js +9 -0
  57. package/dist/commands/legacy.js.map +1 -0
  58. package/dist/commands/list.js +95 -4
  59. package/dist/commands/list.js.map +1 -1
  60. package/dist/commands/materialization/cancelrun.js +62 -0
  61. package/dist/commands/materialization/cancelrun.js.map +1 -0
  62. package/dist/commands/materialization/getindex.js +52 -0
  63. package/dist/commands/materialization/getindex.js.map +1 -0
  64. package/dist/commands/materialization/getmaterialization.js +54 -0
  65. package/dist/commands/materialization/getmaterialization.js.map +1 -0
  66. package/dist/commands/materialization/getpreaggregate.js +55 -0
  67. package/dist/commands/materialization/getpreaggregate.js.map +1 -0
  68. package/dist/commands/materialization/getrun.js +54 -0
  69. package/dist/commands/materialization/getrun.js.map +1 -0
  70. package/dist/commands/materialization/listindexes.js +58 -0
  71. package/dist/commands/materialization/listindexes.js.map +1 -0
  72. package/dist/commands/materialization/listmaterializations.js +52 -0
  73. package/dist/commands/materialization/listmaterializations.js.map +1 -0
  74. package/dist/commands/materialization/listpreaggregates.js +61 -0
  75. package/dist/commands/materialization/listpreaggregates.js.map +1 -0
  76. package/dist/commands/materialization/listruns.js +60 -0
  77. package/dist/commands/materialization/listruns.js.map +1 -0
  78. package/dist/commands/materialization/rerun.js +111 -0
  79. package/dist/commands/materialization/rerun.js.map +1 -0
  80. package/dist/commands/misc/login.js +16 -2
  81. package/dist/commands/misc/login.js.map +1 -1
  82. package/dist/commands/misc/login.spec.js +133 -5
  83. package/dist/commands/misc/login.spec.js.map +1 -1
  84. package/dist/commands/package/deletepackage.js +4 -4
  85. package/dist/commands/package/deletepackage.js.map +1 -1
  86. package/dist/commands/package/deletepackage.spec.js +1 -1
  87. package/dist/commands/package/deletepackage.spec.js.map +1 -1
  88. package/dist/commands/package/listpackages.js +11 -4
  89. package/dist/commands/package/listpackages.js.map +1 -1
  90. package/dist/commands/package/listpackages.spec.js +13 -1
  91. package/dist/commands/package/listpackages.spec.js.map +1 -1
  92. package/dist/commands/package/publish.js +36 -13
  93. package/dist/commands/package/publish.js.map +1 -1
  94. package/dist/commands/package/publish.spec.js +27 -1
  95. package/dist/commands/package/publish.spec.js.map +1 -1
  96. package/dist/commands/package/updatepackage.js +4 -4
  97. package/dist/commands/package/updatepackage.js.map +1 -1
  98. package/dist/commands/package/updatepackage.spec.js +1 -1
  99. package/dist/commands/package/updatepackage.spec.js.map +1 -1
  100. package/dist/commands/permission/createpermission.js +123 -0
  101. package/dist/commands/permission/createpermission.js.map +1 -0
  102. package/dist/commands/permission/createpermission.spec.js +360 -0
  103. package/dist/commands/permission/createpermission.spec.js.map +1 -0
  104. package/dist/commands/permission/deletepermission.js +86 -0
  105. package/dist/commands/permission/deletepermission.js.map +1 -0
  106. package/dist/commands/permission/getpermission.js +85 -0
  107. package/dist/commands/permission/getpermission.js.map +1 -0
  108. package/dist/commands/permission/listpermissions.js +75 -0
  109. package/dist/commands/permission/listpermissions.js.map +1 -0
  110. package/dist/commands/permission/scope.js +140 -0
  111. package/dist/commands/permission/scope.js.map +1 -0
  112. package/dist/commands/rm.js +26 -4
  113. package/dist/commands/rm.js.map +1 -1
  114. package/dist/commands/set.js +12 -4
  115. package/dist/commands/set.js.map +1 -1
  116. package/dist/commands/update.js +29 -10
  117. package/dist/commands/update.js.map +1 -1
  118. package/dist/commands/version/archive-unarchive-version.js +4 -5
  119. package/dist/commands/version/archive-unarchive-version.js.map +1 -1
  120. package/dist/commands/version/archive-unarchive-version.spec.js +4 -4
  121. package/dist/commands/version/archive-unarchive-version.spec.js.map +1 -1
  122. package/dist/commands/version/listversions.js +4 -4
  123. package/dist/commands/version/listversions.js.map +1 -1
  124. package/dist/commands/version/listversions.spec.js +1 -1
  125. package/dist/commands/version/listversions.spec.js.map +1 -1
  126. package/dist/common/UserGroupId.js +1 -1
  127. package/dist/common/UserGroupId.js.map +1 -1
  128. package/dist/common/UserGroupId.spec.js +2 -4
  129. package/dist/common/UserGroupId.spec.js.map +1 -1
  130. package/dist/constants.js +95 -19
  131. package/dist/constants.js.map +1 -1
  132. package/dist/constants.spec.js +90 -0
  133. package/dist/constants.spec.js.map +1 -0
  134. package/dist/index.js +128 -15
  135. package/dist/index.js.map +1 -1
  136. package/dist/logger.js +5 -1
  137. package/dist/logger.js.map +1 -1
  138. package/openapitools.json +4 -1
  139. package/package.json +10 -9
  140. package/src/client/api.ts +9363 -3093
  141. package/src/client/base.ts +1 -1
  142. package/src/client/common.ts +1 -1
  143. package/src/client/configuration.ts +1 -1
  144. package/src/client/index.ts +1 -1
  145. package/src/clientconfiguration.spec.ts +238 -113
  146. package/src/clientconfiguration.ts +131 -30
  147. package/src/commands/add.ts +78 -12
  148. package/src/commands/connection/createconnections.spec.ts +11 -1
  149. package/src/commands/connection/createconnections.ts +4 -4
  150. package/src/commands/connection/deleteconnection.spec.ts +1 -1
  151. package/src/commands/connection/deleteconnection.ts +4 -4
  152. package/src/commands/connection/listconnections.spec.ts +1 -1
  153. package/src/commands/connection/listconnections.ts +4 -4
  154. package/src/commands/{project/createproject.spec.ts → environment/createenvironment.spec.ts} +56 -54
  155. package/src/commands/{project/createproject.ts → environment/createenvironment.ts} +17 -14
  156. package/src/commands/{project/deleteproject.spec.ts → environment/deleteenvironment.spec.ts} +59 -30
  157. package/src/commands/{project/deleteproject.ts → environment/deleteenvironment.ts} +10 -10
  158. package/src/commands/environment/getenvironment.spec.ts +110 -0
  159. package/src/commands/{project/getproject.ts → environment/getenvironment.ts} +9 -9
  160. package/src/commands/{project/listprojects.spec.ts → environment/listenvironments.spec.ts} +37 -35
  161. package/src/commands/{project/listprojects.ts → environment/listenvironments.ts} +13 -8
  162. package/src/commands/{project/setproject.spec.ts → environment/setenvironment.spec.ts} +8 -8
  163. package/src/commands/{project/setproject.ts → environment/setenvironment.ts} +4 -4
  164. package/src/commands/environment/updateenvironment.spec.ts +386 -0
  165. package/src/commands/environment/updateenvironment.ts +168 -0
  166. package/src/commands/get.ts +131 -9
  167. package/src/commands/legacy.ts +5 -0
  168. package/src/commands/list.ts +204 -9
  169. package/src/commands/materialization/cancelrun.ts +70 -0
  170. package/src/commands/materialization/getindex.ts +55 -0
  171. package/src/commands/materialization/getmaterialization.ts +57 -0
  172. package/src/commands/materialization/getpreaggregate.ts +58 -0
  173. package/src/commands/materialization/getrun.ts +55 -0
  174. package/src/commands/materialization/listindexes.ts +69 -0
  175. package/src/commands/materialization/listmaterializations.ts +53 -0
  176. package/src/commands/materialization/listpreaggregates.ts +74 -0
  177. package/src/commands/materialization/listruns.ts +77 -0
  178. package/src/commands/materialization/rerun.ts +123 -0
  179. package/src/commands/misc/login.spec.ts +165 -7
  180. package/src/commands/misc/login.ts +20 -2
  181. package/src/commands/package/deletepackage.spec.ts +1 -1
  182. package/src/commands/package/deletepackage.ts +4 -4
  183. package/src/commands/package/listpackages.spec.ts +17 -1
  184. package/src/commands/package/listpackages.ts +11 -4
  185. package/src/commands/package/publish.spec.ts +46 -1
  186. package/src/commands/package/publish.ts +38 -13
  187. package/src/commands/package/updatepackage.spec.ts +1 -1
  188. package/src/commands/package/updatepackage.ts +4 -4
  189. package/src/commands/permission/createpermission.spec.ts +507 -0
  190. package/src/commands/permission/createpermission.ts +181 -0
  191. package/src/commands/permission/deletepermission.ts +117 -0
  192. package/src/commands/permission/getpermission.ts +115 -0
  193. package/src/commands/permission/listpermissions.ts +101 -0
  194. package/src/commands/permission/scope.ts +180 -0
  195. package/src/commands/rm.ts +54 -9
  196. package/src/commands/set.ts +13 -4
  197. package/src/commands/update.ts +66 -23
  198. package/src/commands/version/archive-unarchive-version.spec.ts +4 -4
  199. package/src/commands/version/archive-unarchive-version.ts +4 -7
  200. package/src/commands/version/listversions.spec.ts +1 -1
  201. package/src/commands/version/listversions.ts +4 -4
  202. package/src/common/UserGroupId.spec.ts +2 -4
  203. package/src/common/UserGroupId.ts +1 -1
  204. package/src/constants.spec.ts +111 -0
  205. package/src/constants.ts +131 -19
  206. package/src/index.ts +187 -18
  207. package/src/logger.ts +5 -1
  208. package/bun.lock +0 -1158
  209. package/dist/commands/project/createproject.js.map +0 -1
  210. package/dist/commands/project/createproject.spec.js.map +0 -1
  211. package/dist/commands/project/deleteproject.js.map +0 -1
  212. package/dist/commands/project/deleteproject.spec.js.map +0 -1
  213. package/dist/commands/project/getproject.js.map +0 -1
  214. package/dist/commands/project/getproject.spec.js.map +0 -1
  215. package/dist/commands/project/listprojects.js.map +0 -1
  216. package/dist/commands/project/listprojects.spec.js.map +0 -1
  217. package/dist/commands/project/setproject.js.map +0 -1
  218. package/dist/commands/project/setproject.spec.js.map +0 -1
  219. package/dist/commands/project/updateproject.js +0 -68
  220. package/dist/commands/project/updateproject.js.map +0 -1
  221. package/dist/commands/project/updateproject.spec.js +0 -129
  222. package/dist/commands/project/updateproject.spec.js.map +0 -1
  223. package/src/commands/project/getproject.spec.ts +0 -109
  224. package/src/commands/project/updateproject.spec.ts +0 -217
  225. package/src/commands/project/updateproject.ts +0 -82
package/src/index.ts CHANGED
@@ -8,12 +8,12 @@ import { ClientConfiguration } from "./clientconfiguration";
8
8
  import { registerAddCommands } from "./commands/add";
9
9
  import { registerGetCommands } from "./commands/get";
10
10
  import { registerListCommands } from "./commands/list";
11
- import { login } from "./commands/misc/login";
11
+ import { isLoginInvocation, login } from "./commands/misc/login";
12
12
  import { logout } from "./commands/misc/logout";
13
13
  import { setAccessToken } from "./commands/misc/set-access-token";
14
14
  import { listPackages } from "./commands/package/listpackages";
15
15
  import { publish } from "./commands/package/publish";
16
- import { listProjects } from "./commands/project/listprojects";
16
+ import { listEnvironments } from "./commands/environment/listenvironments";
17
17
  import { registerRmCommands } from "./commands/rm";
18
18
  import { registerSetCommands } from "./commands/set";
19
19
  import { registerUpdateCommands } from "./commands/update";
@@ -21,10 +21,31 @@ import {
21
21
  archiveVersion,
22
22
  unarchiveVersion,
23
23
  } from "./commands/version/archive-unarchive-version";
24
- import { ASCII_TITLE, controlPlanesByEnv } from "./constants";
24
+ import { rerun } from "./commands/materialization/rerun";
25
+ import { cancelRun } from "./commands/materialization/cancelrun";
26
+ import {
27
+ ASCII_TITLE,
28
+ Cluster,
29
+ CLUSTER_BY_ENVIRONMENT,
30
+ controlPlanesByEnv,
31
+ DEFAULT_ENVIRONMENT_BY_CLUSTER,
32
+ getCliOrgConfig,
33
+ } from "./constants";
25
34
 
26
35
  const clientConfig = new ClientConfiguration();
27
36
 
37
+ // `cred login` is the documented recovery path for a corrupt `~/.cred`, and the
38
+ // one command whose job is to (re)establish config. The startup reads below —
39
+ // the axios baseURL and every getActiveEnvironment() call during command
40
+ // registration — invoke loadConfig() eagerly at module load, so a corrupt
41
+ // config throws here, before the login action ever runs, dead-ending the very
42
+ // command meant to fix it. Recover up front, but ONLY for login: every other
43
+ // command stays fail-loud (the thrown error still names `cred login` as the
44
+ // fix) so a stray read never silently resets a user's tokens.
45
+ if (isLoginInvocation(process.argv)) {
46
+ clientConfig.recoverIfCorrupt();
47
+ }
48
+
28
49
  const getActiveEnvironment = () => {
29
50
  return clientConfig.getEnvironment();
30
51
  };
@@ -110,15 +131,126 @@ cli.command("unarchive")
110
131
  );
111
132
  });
112
133
 
134
+ cli.command("rerun")
135
+ .description(
136
+ "Trigger an on-demand run (rebuild/refresh) for a package version. Defaults to a full run (all sources, indexes and pre-aggregations); use --source/--dimension/--measure/--model-file to scope it to a single unit.",
137
+ )
138
+ .argument("<packageName>", "The name of the package to run.")
139
+ .argument("<versionId>", "The version to (re)build (e.g. 0.1.21).")
140
+ .option("--debug")
141
+ .option("-y, --yes", "Skip confirmation.")
142
+ .option("--source <sourceName>", "Scope the run to a single persist source.")
143
+ .option(
144
+ "--dimension <dimension>",
145
+ "Scope the run to a single indexed dimension.",
146
+ )
147
+ .option(
148
+ "--measure <measure>",
149
+ "Scope the run to a single pre-aggregated measure. Rebuilds the rollup serving it; add --source when the measure is declared at more than one grain.",
150
+ )
151
+ .option(
152
+ "--model-file <modelFilePath>",
153
+ "Disambiguate a dimension/source defined in more than one model file.",
154
+ )
155
+ .option(
156
+ "--include-upstream",
157
+ "Also force-rebuild the target's upstream persisted closure (only meaningful with --source/--dimension/--measure).",
158
+ false,
159
+ )
160
+ .action((packageName, versionId, options) => {
161
+ rerun(
162
+ controlPlanesByEnv[getActiveEnvironment()],
163
+ packageName,
164
+ versionId,
165
+ {
166
+ source: options.source,
167
+ dimension: options.dimension,
168
+ measure: options.measure,
169
+ modelFile: options.modelFile,
170
+ includeUpstream: options.includeUpstream,
171
+ },
172
+ options.debug,
173
+ options.yes,
174
+ );
175
+ });
176
+
177
+ cli.command("cancel-run")
178
+ .description("Cancel an in-flight (non-terminal) run.")
179
+ .argument("<packageName>", "The name of the package that owns the run.")
180
+ .argument("<runId>", "The id of the run to cancel.")
181
+ .option("--debug")
182
+ .option("-y, --yes", "Skip confirmation.")
183
+ .action((packageName, runId, options) => {
184
+ cancelRun(
185
+ controlPlanesByEnv[getActiveEnvironment()],
186
+ packageName,
187
+ runId,
188
+ options.debug,
189
+ options.yes,
190
+ );
191
+ });
192
+
113
193
  cli.command("login")
114
194
  .description("Login into Credible service.")
115
195
  .argument("<organizationName>", "The organization to login to.")
116
- .action((organizationName) => {
117
- // TODO: Uncomment this when aws videoamp cluster is ready
118
- // if (organizationName === "videoamp") {
119
- // clientConfig.setEnvironment("videoamp" as Environment);
120
- // }
121
- login(organizationName, controlPlanesByEnv[getActiveEnvironment()]);
196
+ .option(
197
+ "-c, --cluster <cluster>",
198
+ "Target cluster: 'gcp' or 'aws'. Defaults to the org's default cluster (gcp for most orgs).",
199
+ )
200
+ .action((organizationName, options) => {
201
+ const orgConfig = getCliOrgConfig(organizationName);
202
+ const currentEnv = clientConfig.getEnvironment();
203
+
204
+ // Determine the target cluster. Precedence:
205
+ // 1. Explicit -c/--cluster flag.
206
+ // 2. The org's defaultCluster (from CliOrgConfig), if registered.
207
+ // 3. The cluster of the current activeEnvironment — i.e. don't touch
208
+ // anything. Unregistered orgs with no flag stay wherever the user
209
+ // already set themselves via ms2ad set-env.
210
+ let cluster: Cluster;
211
+ if (options.cluster !== undefined) {
212
+ const requested = String(options.cluster).toLowerCase();
213
+ if (requested !== "gcp" && requested !== "aws") {
214
+ console.error(
215
+ `Invalid --cluster value '${options.cluster}'. Must be 'gcp' or 'aws'.`,
216
+ );
217
+ process.exit(1);
218
+ }
219
+ cluster = requested;
220
+ } else if (orgConfig) {
221
+ cluster = orgConfig.defaultCluster;
222
+ } else {
223
+ cluster = CLUSTER_BY_ENVIRONMENT[currentEnv];
224
+ }
225
+
226
+ // Unregistered orgs implicitly support only gcp; registered orgs declare
227
+ // their cluster list. Reject anything else.
228
+ const supportedClusters: Cluster[] = orgConfig?.supportedClusters ?? [
229
+ "gcp",
230
+ ];
231
+ if (!supportedClusters.includes(cluster)) {
232
+ console.error(
233
+ `Organization '${organizationName}' is not available on the ${cluster} cluster.`,
234
+ );
235
+ process.exit(1);
236
+ }
237
+
238
+ // Respect a previously-set activeEnvironment if it's already on the chosen
239
+ // cluster (e.g. `ms2ad set-env staging && cred login demo` stays on staging).
240
+ // Only flip envs when the current one is on a different cluster.
241
+ const targetEnv =
242
+ CLUSTER_BY_ENVIRONMENT[currentEnv] === cluster
243
+ ? currentEnv
244
+ : DEFAULT_ENVIRONMENT_BY_CLUSTER[cluster];
245
+ if (targetEnv !== currentEnv) {
246
+ clientConfig.setEnvironment(targetEnv);
247
+ }
248
+ login(
249
+ organizationName,
250
+ controlPlanesByEnv[targetEnv],
251
+ undefined,
252
+ cluster,
253
+ );
122
254
  });
123
255
 
124
256
  cli.command("logout")
@@ -134,7 +266,9 @@ cli.command("set-access-token")
134
266
  });
135
267
 
136
268
  cli.command("status")
137
- .description("Shows the currently active organization and project.")
269
+ .description(
270
+ "Shows the cell this CLI targets, and the active organization and environment.",
271
+ )
138
272
  .action(() => {
139
273
  const config = new ClientConfiguration();
140
274
  config.printStatus();
@@ -142,27 +276,50 @@ cli.command("status")
142
276
 
143
277
  const complete = omelette("credible").tree({
144
278
  // CRUD commands
145
- get: ["project", "group"],
279
+ get: [
280
+ "environment",
281
+ "project",
282
+ "group",
283
+ "permission",
284
+ "materialization",
285
+ "index",
286
+ "run",
287
+ ],
146
288
  ls: [
289
+ "environment",
147
290
  "project",
148
291
  "connection",
149
292
  "package",
150
293
  "version",
294
+ "materialization",
295
+ "index",
296
+ "run",
151
297
  "group",
152
298
  "group-access-token",
299
+ "permission",
153
300
  ],
154
- update: ["project", "package"],
301
+ update: ["environment", "project", "package"],
155
302
  rm: [
303
+ "environment",
156
304
  "project",
157
305
  "connection",
158
306
  "package",
159
307
  "group",
160
308
  "member",
161
309
  "group-access-token",
310
+ "permission",
311
+ ],
312
+ add: [
313
+ "environment",
314
+ "project",
315
+ "connection",
316
+ "group",
317
+ "member",
318
+ "group-access-token",
319
+ "permission",
162
320
  ],
163
- add: ["project", "connection", "group", "member", "group-access-token"],
164
321
  // Misc commands
165
- set: ["project"],
322
+ set: ["environment", "project"],
166
323
  login: [],
167
324
  logout: [],
168
325
  "set-access-token": [],
@@ -170,14 +327,26 @@ const complete = omelette("credible").tree({
170
327
  publish: [],
171
328
  archive: [],
172
329
  unarchive: [],
330
+ rerun: [],
331
+ "cancel-run": [],
173
332
  });
174
333
 
175
334
  complete.onAsync("$3", async ({ reply, line }) => {
176
- const projectRelatedCommands = ["set project", "get project", "rm project"];
177
- if (projectRelatedCommands.some((cmd) => line.includes(cmd))) {
335
+ const environmentRelatedCommands = [
336
+ "set environment",
337
+ "get environment",
338
+ "rm environment",
339
+ "set project",
340
+ "get project",
341
+ "rm project",
342
+ ];
343
+ if (environmentRelatedCommands.some((cmd) => line.includes(cmd))) {
178
344
  reply(
179
- listProjects(controlPlanesByEnv[getActiveEnvironment()], false).then(
180
- (result) => result.projects.map((project) => project.name),
345
+ listEnvironments(
346
+ controlPlanesByEnv[getActiveEnvironment()],
347
+ false,
348
+ ).then((result) =>
349
+ result.projects.map((environment) => environment.name),
181
350
  ),
182
351
  );
183
352
  }
package/src/logger.ts CHANGED
@@ -25,9 +25,13 @@ export const logger = winston.createLogger({
25
25
  winston.format.splat(),
26
26
  ),
27
27
  transports: [
28
- // Console transport with colored logs
28
+ // Console transport with colored logs. Error/warn go to stderr so they
29
+ // never pollute stdout — commands like `cred ls packages` print JSON to
30
+ // stdout, and a log line landing there makes downstream `JSON.parse`
31
+ // (e.g. the e2e harness) fail cryptically.
29
32
  new winston.transports.Console({
30
33
  format: consoleFormat,
34
+ stderrLevels: ["error", "warn"],
31
35
  }),
32
36
 
33
37
  // NOTE disabled app.log logging