@forge/cli-shared 8.22.1-next.1 → 8.23.0-experimental-4a332af

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.
@@ -41,10 +41,10 @@ export declare class MinimalGraphQLRunner implements GraphQLRunner {
41
41
  requestId: string | undefined;
42
42
  response: TResponse;
43
43
  }>;
44
- protected getAuthenticatedClient(endpoint: string, authorizationHeader: AuthorizationHeader): GraphQLClient;
45
- getHeaders(authorizationHeader: AuthorizationHeader): {
44
+ protected getAuthenticatedClient(endpoint: string, authorizationHeader: AuthorizationHeader): Promise<GraphQLClient>;
45
+ getHeaders(authorizationHeader: AuthorizationHeader): Promise<{
46
46
  [key: string]: string;
47
- };
47
+ }>;
48
48
  private getAttribution;
49
49
  private getClientName;
50
50
  private getClientVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"minimal-graphql-runner.d.ts","sourceRoot":"","sources":["../../src/graphql/minimal-graphql-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAqD,MAAM,UAAU,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5D,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,eAAO,MAAM,cAAc,EAAE,kBAM5B,CAAC;AAOF,qBAAa,0BAA2B,SAAQ,SAAS;CAAG;AAM5D,qBAAa,0BAA2B,SAAQ,SAAS;;CAIxD;AAED,qBAAa,uBAAwB,SAAQ,SAAS;;CAIrD;AAED,qBAAa,2BAA4B,SAAQ,SAAS;IAMtD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGpB,SAAS,EAAE,OAAO,EACnC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,YAAY,EAAE;IASxB,OAAO,QAAO,MAAM,GAAG,SAAS,CAE9B;IAEF,aAAa,QAAO,MAAM,GAAG,SAAS,CAEpC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAEnC;IAEK,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM;CAG1C;AAED,oBAAY,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAEpD,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GAAG,SAAS;IAGxC,GAAG,CAAC,UAAU,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;;;;IAS9F,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB;IAMpF,UAAU,CAAC,mBAAmB,EAAE,mBAAmB,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAYtF,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;YAIV,4BAA4B;IA0C1C,OAAO,CAAC,YAAY;CAUrB"}
1
+ {"version":3,"file":"minimal-graphql-runner.d.ts","sourceRoot":"","sources":["../../src/graphql/minimal-graphql-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAqD,MAAM,UAAU,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAuB,SAAS,EAAE,MAAM,WAAW,CAAC;AAItE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5D,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,eAAO,MAAM,cAAc,EAAE,kBAM5B,CAAC;AAOF,qBAAa,0BAA2B,SAAQ,SAAS;CAAG;AAM5D,qBAAa,0BAA2B,SAAQ,SAAS;;CAIxD;AAED,qBAAa,uBAAwB,SAAQ,SAAS;;CAIrD;AAED,qBAAa,2BAA4B,SAAQ,SAAS;IAMtD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGpB,SAAS,EAAE,OAAO,EACnC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,YAAY,EAAE;IASxB,OAAO,QAAO,MAAM,GAAG,SAAS,CAE9B;IAEF,aAAa,QAAO,MAAM,GAAG,SAAS,CAEpC;IAEF,YAAY,QAAO,MAAM,GAAG,SAAS,CAEnC;IAEK,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM;CAG1C;AAED,oBAAY,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAEpD,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GAAG,SAAS;IAGxC,GAAG,CAAC,UAAU,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;;;;cAS9E,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB;IAMpF,UAAU,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;YAYvF,cAAc;IAQ5B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;YAIV,4BAA4B;IA0C1C,OAAO,CAAC,YAAY;CAUrB"}
@@ -83,28 +83,27 @@ class MinimalGraphQLRunner {
83
83
  response: data
84
84
  };
85
85
  }
86
- getAuthenticatedClient(endpoint, authorizationHeader) {
86
+ async getAuthenticatedClient(endpoint, authorizationHeader) {
87
87
  return new graphql_request_1.GraphQLClient(endpoint, {
88
- headers: this.getHeaders(authorizationHeader)
88
+ headers: await this.getHeaders(authorizationHeader)
89
89
  });
90
90
  }
91
- getHeaders(authorizationHeader) {
91
+ async getHeaders(authorizationHeader) {
92
92
  return {
93
93
  ...authorizationHeader,
94
94
  ...(this.cliDetails ? { 'user-agent': `${this.getClientName()}/${this.getClientVersion()}` } : {}),
95
95
  ...{
96
96
  'atl-client-name': `${this.getClientName()}`,
97
97
  'atl-client-version': `${this.getClientVersion()}`,
98
- 'atl-attribution': this.getAttribution()
98
+ 'atl-attribution': await this.getAttribution()
99
99
  }
100
100
  };
101
101
  }
102
- getAttribution() {
102
+ async getAttribution() {
103
103
  return JSON.stringify({
104
104
  businessUnit: (0, index_1.getEnvironmentConfig)(exports.BUSINESS_UNITS),
105
105
  service: exports.SERVICE_NAME,
106
- isAgent: !process.stdin.isTTY && !process.stdout.isTTY,
107
- isCI: process.env.CI === 'true'
106
+ ...(await shared_1.ForgeCliAttribution.build())
108
107
  });
109
108
  }
110
109
  getClientName() {
@@ -115,7 +114,7 @@ class MinimalGraphQLRunner {
115
114
  }
116
115
  async rawRequestWithoutClientError(query, variables) {
117
116
  const authorizationHeader = await this.authenticator.getAuthorizationHeader();
118
- const client = this.getAuthenticatedClient(this.endpoint, authorizationHeader);
117
+ const client = await this.getAuthenticatedClient(this.endpoint, authorizationHeader);
119
118
  try {
120
119
  return await client.rawRequest(query, variables);
121
120
  }
@@ -0,0 +1,16 @@
1
+ export declare class ForgeCliAttribution {
2
+ static isAgent(): boolean;
3
+ static isCI(): boolean;
4
+ static skillName(): string;
5
+ static agentHint(): Promise<string>;
6
+ static isStudio(): boolean;
7
+ static build(): Promise<Record<string, unknown>>;
8
+ private static getWildcardAttribution;
9
+ private static getValidAttributionEnvValue;
10
+ private static isValidAttributionValue;
11
+ private static isValidWildcardKey;
12
+ private static hasEnvKeySet;
13
+ private static camelCaseEnvKey;
14
+ private static capitalize;
15
+ }
16
+ //# sourceMappingURL=forge-cli-attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-cli-attribution.d.ts","sourceRoot":"","sources":["../../src/shared/forge-cli-attribution.ts"],"names":[],"mappings":"AA0CA,qBAAa,mBAAmB;WAOhB,OAAO,IAAI,OAAO;WAQlB,IAAI,IAAI,OAAO;WAIf,SAAS,IAAI,MAAM;WAIb,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;WAuBlC,QAAQ,IAAI,OAAO;WAWb,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAW7D,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgDrC,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAK1C,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAStC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B,OAAO,CAAC,MAAM,CAAC,UAAU;CAG1B"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForgeCliAttribution = void 0;
4
+ const detect_agent_1 = require("@vercel/detect-agent");
5
+ const ATL_FORGE_ATTRIBUTION_ENV_PREFIX = 'ATL_FORGE_ATTRIBUTION_';
6
+ const UNKNOWN = 'unknown';
7
+ const MAX_ATTRIBUTION_VALUE_LENGTH = 512;
8
+ const MAX_WILDCARD_PAYLOAD_BYTES = 4096;
9
+ const MAX_WILDCARD_FIELDS = 32;
10
+ const ATTRIBUTION_VALUE_PATTERN = /^[A-Za-z0-9._\-/:+]+$/;
11
+ const WILDCARD_KEY_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/;
12
+ const WELL_KNOWN_ATTRIBUTION_ENV_KEYS = new Set(['AGENT_HINT', 'IS_STUDIO', 'SKILL_NAME']);
13
+ const RESERVED_ATTRIBUTION_FIELDS = new Set([
14
+ 'agentHint',
15
+ 'businessUnit',
16
+ 'isAgent',
17
+ 'isCI',
18
+ 'isStudio',
19
+ 'service',
20
+ 'skillName'
21
+ ]);
22
+ class ForgeCliAttribution {
23
+ static isAgent() {
24
+ return !process.stdin.isTTY && !process.stdout.isTTY;
25
+ }
26
+ static isCI() {
27
+ return process.env.CI === 'true';
28
+ }
29
+ static skillName() {
30
+ return this.getValidAttributionEnvValue('SKILL_NAME') || UNKNOWN;
31
+ }
32
+ static async agentHint() {
33
+ const explicitAgentHint = this.getValidAttributionEnvValue('AGENT_HINT');
34
+ if (explicitAgentHint) {
35
+ return explicitAgentHint;
36
+ }
37
+ if (this.hasEnvKeySet('ROVODEV_CLI')) {
38
+ return 'rovo-dev';
39
+ }
40
+ if (this.hasEnvKeySet('WINDSURF_CASCADE_TERMINAL_KIND')) {
41
+ return 'windsurf';
42
+ }
43
+ try {
44
+ const result = await (0, detect_agent_1.determineAgent)();
45
+ if (result?.isAgent && typeof result.agent?.name === 'string' && result.agent.name) {
46
+ return result.agent.name;
47
+ }
48
+ }
49
+ catch {
50
+ }
51
+ return UNKNOWN;
52
+ }
53
+ static isStudio() {
54
+ return this.getValidAttributionEnvValue('IS_STUDIO') === 'true';
55
+ }
56
+ static async build() {
57
+ return {
58
+ isAgent: this.isAgent(),
59
+ isCI: this.isCI(),
60
+ skillName: this.skillName(),
61
+ agentHint: await this.agentHint(),
62
+ isStudio: this.isStudio(),
63
+ ...this.getWildcardAttribution()
64
+ };
65
+ }
66
+ static getWildcardAttribution() {
67
+ const wildcardAttribution = {};
68
+ let totalBytes = 0;
69
+ const sortedEntries = Object.entries(process.env).sort(([a], [b]) => a.localeCompare(b));
70
+ for (const [envKey, envValue] of sortedEntries) {
71
+ if (!envKey.startsWith(ATL_FORGE_ATTRIBUTION_ENV_PREFIX)) {
72
+ continue;
73
+ }
74
+ const attributionEnvKey = envKey.slice(ATL_FORGE_ATTRIBUTION_ENV_PREFIX.length);
75
+ if (WELL_KNOWN_ATTRIBUTION_ENV_KEYS.has(attributionEnvKey)) {
76
+ continue;
77
+ }
78
+ if (!this.isValidWildcardKey(attributionEnvKey) || !this.isValidAttributionValue(envValue)) {
79
+ continue;
80
+ }
81
+ const attributionKey = this.camelCaseEnvKey(attributionEnvKey);
82
+ if (!attributionKey || RESERVED_ATTRIBUTION_FIELDS.has(attributionKey)) {
83
+ continue;
84
+ }
85
+ if (attributionKey in wildcardAttribution) {
86
+ continue;
87
+ }
88
+ if (Object.keys(wildcardAttribution).length >= MAX_WILDCARD_FIELDS) {
89
+ break;
90
+ }
91
+ const fieldBytes = attributionKey.length + envValue.length + 4;
92
+ if (totalBytes + fieldBytes > MAX_WILDCARD_PAYLOAD_BYTES) {
93
+ continue;
94
+ }
95
+ wildcardAttribution[attributionKey] = envValue;
96
+ totalBytes += fieldBytes;
97
+ }
98
+ return wildcardAttribution;
99
+ }
100
+ static getValidAttributionEnvValue(key) {
101
+ const value = process.env[`${ATL_FORGE_ATTRIBUTION_ENV_PREFIX}${key}`];
102
+ return this.isValidAttributionValue(value) ? value : undefined;
103
+ }
104
+ static isValidAttributionValue(value) {
105
+ return (typeof value === 'string' &&
106
+ value.length > 0 &&
107
+ value.length <= MAX_ATTRIBUTION_VALUE_LENGTH &&
108
+ ATTRIBUTION_VALUE_PATTERN.test(value));
109
+ }
110
+ static isValidWildcardKey(key) {
111
+ return WILDCARD_KEY_PATTERN.test(key);
112
+ }
113
+ static hasEnvKeySet(key) {
114
+ const value = process.env[key];
115
+ return value !== undefined && value !== '';
116
+ }
117
+ static camelCaseEnvKey(key) {
118
+ return key
119
+ .toLowerCase()
120
+ .split('_')
121
+ .filter(Boolean)
122
+ .map((part, index) => (index === 0 ? part : this.capitalize(part)))
123
+ .join('');
124
+ }
125
+ static capitalize(value) {
126
+ return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
127
+ }
128
+ }
129
+ exports.ForgeCliAttribution = ForgeCliAttribution;
@@ -3,6 +3,7 @@ export * from './assistant-cli';
3
3
  export * from './cli-details';
4
4
  export * from './directories';
5
5
  export * from './environment';
6
+ export * from './forge-cli-attribution';
6
7
  export * from './error-handling';
7
8
  export * from './pause';
8
9
  export * from './product';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAEhC,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,QAAA,MAAM,IAAI,0BAAqD,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAEhC,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,QAAA,MAAM,IAAI,0BAAqD,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -7,6 +7,7 @@ tslib_1.__exportStar(require("./assistant-cli"), exports);
7
7
  tslib_1.__exportStar(require("./cli-details"), exports);
8
8
  tslib_1.__exportStar(require("./directories"), exports);
9
9
  tslib_1.__exportStar(require("./environment"), exports);
10
+ tslib_1.__exportStar(require("./forge-cli-attribution"), exports);
10
11
  tslib_1.__exportStar(require("./error-handling"), exports);
11
12
  tslib_1.__exportStar(require("./pause"), exports);
12
13
  tslib_1.__exportStar(require("./product"), exports);
package/out/ui/text.d.ts CHANGED
@@ -562,11 +562,12 @@ export declare const Text: {
562
562
  outFile: string;
563
563
  version1: string;
564
564
  version2: string;
565
+ limit: string;
565
566
  };
566
567
  desc: string;
567
568
  overViewVersionTable: (versions: number, environment: string) => string;
568
569
  promptVersionTable: string;
569
- selectTargetVersionToUpgrade: (installations?: number) => string;
570
+ selectTargetVersionToUpgrade: (sourceVersion?: string) => string;
570
571
  error: {
571
572
  missingVersionUpgradeParameters: string;
572
573
  appVersionRolloutRunning: string;
@@ -579,8 +580,15 @@ export declare const Text: {
579
580
  tooManyRequestsGlobally: string;
580
581
  };
581
582
  appVersionRolloutSuccess(appRolloutVersionId: string | undefined): string;
582
- warningMessage: (sourceVersionId: string, targetVersionId: string, installations?: number) => string;
583
+ limitWarningUserLimit: (expectedRemaining: number, totalEligible: number, userLimit: number) => string;
584
+ limitWarningAdjustedLimit: (expectedRemaining: number, totalEligible: number, userLimit: number, appliedLimit: number) => string;
585
+ limitWarningSystemLimit: (expectedRemaining: number, totalEligible: number, systemLimit: number) => string;
586
+ limitWarningFollowUp: string;
587
+ warningMessage: (sourceVersionId: string, targetVersionId: string, installations?: number, limit?: number, enforcedSystemLimit?: number, userProvidedLimit?: number) => string;
583
588
  promptConfirmation: string;
589
+ promptLimit: (installations?: number) => string;
590
+ promptLimitWithTargetInfo: (installations?: number, upgradeLimit?: number) => string;
591
+ limitValidationError: (max?: number) => string;
584
592
  };
585
593
  list: {
586
594
  cmdName: string;
@@ -677,6 +685,9 @@ export declare const Text: {
677
685
  buildTag: {
678
686
  description: string;
679
687
  };
688
+ skipRollout: {
689
+ description: string;
690
+ };
680
691
  connectKeyChange: {
681
692
  continueChange: string;
682
693
  continueDelete: string;
@@ -831,6 +842,7 @@ export declare const Text: {
831
842
  noResourceId: string;
832
843
  noCloudId: string;
833
844
  noResourceIdInWorkspace: string;
845
+ noResourceIdInInstallation: string;
834
846
  noInstallations: string;
835
847
  status: {
836
848
  outdatedPermissions: string;
@@ -914,6 +926,7 @@ export declare const Text: {
914
926
  };
915
927
  };
916
928
  installationId: {
929
+ option: string;
917
930
  prompt: string;
918
931
  errors: {
919
932
  invalid: string;
@@ -1251,6 +1264,15 @@ export declare const Text: {
1251
1264
  };
1252
1265
  };
1253
1266
  };
1267
+ commandHelp: {
1268
+ groups: {
1269
+ quickStart: string;
1270
+ develop: string;
1271
+ manage: string;
1272
+ account: string;
1273
+ cliExperience: string;
1274
+ };
1275
+ };
1254
1276
  dynamicTable: {
1255
1277
  exiting: string;
1256
1278
  };
@@ -1266,14 +1288,63 @@ export declare const Text: {
1266
1288
  optionDryRun: string;
1267
1289
  optionForce: string;
1268
1290
  optionNoInstall: string;
1269
- optionUpgradeDeps: string;
1270
1291
  promptSelectProduct: string;
1271
1292
  promptSelectModule: string;
1272
1293
  promptSelectUIFramework: string;
1294
+ dryRunLabel: string;
1295
+ filesToBeCreatedHeader: string;
1296
+ fileChangeHeader: (fileName: string) => string;
1297
+ depAdditionsHeader: string;
1298
+ frontendDepHeader: string;
1299
+ depConflictsHeader: string;
1300
+ depConflictsScopedHeader: (scope: 'backend' | 'frontend') => string;
1301
+ depConflictsBlockedHeader: (scope: 'backend' | 'frontend') => string;
1302
+ depConflictsColumnPackage: string;
1303
+ depConflictsColumnCurrent: string;
1304
+ depConflictsColumnTemplate: string;
1305
+ depConflictsColumnStatus: string;
1306
+ depConflictsStatusConflict: string;
1307
+ depConflictsStatusUpgraded: string;
1308
+ depConflictsStatusDowngraded: string;
1309
+ depConflictsStatusOk: string;
1310
+ depConflictsSummary: (count: number) => string;
1311
+ depConflictsUpgradedSummary: (count: number) => string;
1312
+ depConflictsOptionsHeader: string;
1313
+ depConflictsOptionForce: string;
1314
+ depConflictsOptionNoInstall: string;
1315
+ depConflictsOptionForceNoInstall: string;
1316
+ depConflictsFooter: string;
1317
+ errorDepConflicts: (count: number) => string;
1318
+ errorPackageJsonNotFound: (pkgPath: string) => string;
1319
+ errorPackageJsonParseFailed: (pkgPath: string, message: string) => string;
1320
+ errorMissingDepVersion: (name: string) => string;
1321
+ warnNoManifest: (manifestPath: string) => string;
1322
+ warnNoFragment: string;
1323
+ warnNoManifestDelta: string;
1324
+ warnAddedAppCompatibility: (existingProduct: string, newProduct: string) => string;
1325
+ warnUnsupportedFileOperations: (ops: string[]) => string;
1326
+ warnViteConfigExists: (configPath: string) => string;
1327
+ errorViteConfigNestedInput: () => string;
1328
+ errorApplyNotImplemented: string;
1273
1329
  errorInvalidProduct: (product: string) => string;
1274
1330
  errorInvalidUIFramework: (uiFramework: string | undefined, moduleKey: string) => string;
1275
1331
  errorFailedToResolveChoice: (choice: string) => string;
1276
1332
  errorFailedToDownloadTemplate: (moduleKey: string) => string;
1333
+ errorMissingTemplateSource: (sourcePath: string) => string;
1334
+ errorTargetConflict: (targets: string[]) => string;
1335
+ errorZipExtractionFailed: (moduleKey: string, message: string) => string;
1336
+ errorZipCleanupFailed: (moduleKey: string) => string;
1337
+ errorCacheDirMissing: (moduleKey: string) => string;
1338
+ errorFailedToDownloadBundle: (moduleKey: string, message: string) => string;
1339
+ errorCacheCleanupFailed: (cacheDir: string) => string;
1340
+ errorNoBundle: (moduleKey: string, searched: string[]) => string;
1341
+ errorNoFileOperations: (moduleKey: string, uiFramework: string | undefined) => string;
1342
+ warnDownloadFailed: (moduleKey: string, message: string) => string;
1343
+ warnNoBundle: string;
1344
+ warnInstallSkipped: string;
1345
+ infoReusingResource: (resourceKey: string) => string;
1346
+ errorResourceEntryConflict: (resourceKey: string, entryName: string, existing: string, incoming: string) => string;
1347
+ errorResourcePathConflict: (resourceKey: string, existing: string, incoming: string) => string;
1277
1348
  };
1278
1349
  list: {
1279
1350
  description: string;
@@ -1290,9 +1361,11 @@ export declare const Text: {
1290
1361
  bifrostIndexInvalid: string;
1291
1362
  bifrostIndexFetchFailed: (status: number, statusText: string) => string;
1292
1363
  bifrostManifestFragmentFetchFailed: (status: number, statusText: string) => string;
1293
- duplicateModuleKey: (value: string, moduleKey: string) => string;
1364
+ bifrostZipFetchFailed: (moduleKey: string, status: number, statusText: string) => string;
1365
+ duplicateModuleKey: (value: string) => string;
1294
1366
  duplicateFunctionKey: (value: string) => string;
1295
1367
  duplicateResourceKey: (value: string) => string;
1368
+ duplicateKey: (value: string) => string;
1296
1369
  };
1297
1370
  };
1298
1371
  };
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
package/out/ui/text.js CHANGED
@@ -699,12 +699,16 @@ What do you like or don't like about Forge? Share your feedback below or press C
699
699
  json: 'output results in JSON format',
700
700
  outFile: 'specify a file to output the results',
701
701
  version1: 'source version to upgrade in a non-interactive mode',
702
- version2: 'target version to upgrade to in a non-interactive mode'
702
+ version2: 'target version to upgrade to in a non-interactive mode',
703
+ limit: 'limit the number of installations to upgrade (optional)'
703
704
  },
704
705
  desc: `upgrades installations using one major version to another version. The version selection list displays:\n${itemList(['major version number', 'deployment date', 'number of installations'])}`,
705
706
  overViewVersionTable: (versions, environment) => `\nDetails for a total of [${versions} major versions] in [${environment}] can be seen below.\nWhere there are no upgrade paths available, use \`forge version compare\` to compare versions and see more information:\n`,
706
707
  promptVersionTable: 'Getting app version list...',
707
- selectTargetVersionToUpgrade: (installations) => `Please select version to upgrade existing ${installations} installations to:`,
708
+ selectTargetVersionToUpgrade: (sourceVersion) => {
709
+ const sourceVersionText = sourceVersion ? ` from version ${sourceVersion}` : '';
710
+ return `Please select a version to upgrade installations${sourceVersionText} to:`;
711
+ },
708
712
  error: {
709
713
  missingVersionUpgradeParameters: `Missing parameters:\nError: [version bulk-upgrade start --non-interactive] requires --from-version and --to-version`,
710
714
  appVersionRolloutRunning: `App version rollout for this app environment is already running. Use \`forge version bulk-upgrade list\` to identify the running upgrade and \`forge version bulk-upgrade cancel\` to cancel.`,
@@ -719,8 +723,29 @@ What do you like or don't like about Forge? Share your feedback below or press C
719
723
  appVersionRolloutSuccess(appRolloutVersionId) {
720
724
  return `Your upgrade has been queued with upgrade ID ${appRolloutVersionId}. To view that status of your update please use the \`forge version bulk-upgrade list\` command.`;
721
725
  },
722
- warningMessage: (sourceVersionId, targetVersionId, installations) => `${chalk_1.default.bold('Warning:')} You are planning to move ${installations} installations from version ${sourceVersionId} to version ${targetVersionId}.`,
723
- promptConfirmation: 'Do you want to continue?'
726
+ limitWarningUserLimit: (expectedRemaining, totalEligible, userLimit) => `${chalk_1.default.yellow('Warning:')} Due to the limit you specified (${userLimit}), ${expectedRemaining} out of the eligible ${totalEligible} upgrades will remain unprocessed.`,
727
+ limitWarningAdjustedLimit: (expectedRemaining, totalEligible, userLimit, appliedLimit) => `${chalk_1.default.yellow('Warning:')} The limit you supplied (${userLimit}) could not be honored and a limit of ${appliedLimit} has been applied. Due to this limit ${expectedRemaining} out of the eligible ${totalEligible} upgrades will remain unprocessed.`,
728
+ limitWarningSystemLimit: (expectedRemaining, totalEligible, systemLimit) => `${chalk_1.default.yellow('Warning:')} The number of eligible installations exceeded the per-workflow maximum (${systemLimit}). Due to this maximum ${expectedRemaining} out of the eligible ${totalEligible} upgrades will remain unprocessed.`,
729
+ limitWarningFollowUp: 'These unprocessed installations can be processed by starting a new workflow after the completion of this one.',
730
+ warningMessage: (sourceVersionId, targetVersionId, installations, limit, enforcedSystemLimit, userProvidedLimit) => {
731
+ const effectiveInstallations = limit !== undefined && limit < (installations || 0) ? limit : installations;
732
+ const installationText = effectiveInstallations === 1 ? 'installation' : 'installations';
733
+ let limitNote = '';
734
+ if (enforcedSystemLimit !== undefined && userProvidedLimit !== undefined) {
735
+ limitNote = `. Provided limit (${userProvidedLimit}) not honored due to system limit`;
736
+ }
737
+ return `${chalk_1.default.bold('Warning:')} You are planning to move ${effectiveInstallations} ${installationText} from version ${sourceVersionId} to version ${targetVersionId}${limitNote}.`;
738
+ },
739
+ promptConfirmation: 'Do you want to continue?',
740
+ promptLimit: (installations) => `How many installations to upgrade? (${installations} eligible):`,
741
+ promptLimitWithTargetInfo: (installations, upgradeLimit) => {
742
+ const eligibleText = `${installations} eligible`;
743
+ const limitText = upgradeLimit && (installations ?? 0) > upgradeLimit ? `, system limit: ${upgradeLimit}` : ``;
744
+ return `How many installations to upgrade? (${eligibleText}${limitText}):`;
745
+ },
746
+ limitValidationError: (max) => max !== undefined
747
+ ? `Please enter a valid number between 1 and ${max}, or leave empty for no limit.`
748
+ : `Please enter a valid number greater than 0, or leave empty for no limit.`
724
749
  },
725
750
  list: {
726
751
  cmdName: 'list',
@@ -856,6 +881,9 @@ What do you like or don't like about Forge? Share your feedback below or press C
856
881
  buildTag: {
857
882
  description: 'specify a build tag to deploy (from forge build)'
858
883
  },
884
+ skipRollout: {
885
+ description: 'Skip rolling release rollout after deployment'
886
+ },
859
887
  connectKeyChange: {
860
888
  continueChange: `Do you wish to continue with changing the Connect key?`,
861
889
  continueDelete: `Do you wish to continue with deleting the Connect key?`,
@@ -1049,6 +1077,7 @@ ${buildTerminalLink(link)}\n`,
1049
1077
  noResourceId: 'Unknown site with no resource ID',
1050
1078
  noCloudId: 'Unknown workspace with no cloud ID',
1051
1079
  noResourceIdInWorkspace: 'Unknown workspace with no resource ID',
1080
+ noResourceIdInInstallation: 'Unknown installation with no resource ID',
1052
1081
  noInstallations: `The app is not installed anywhere.\nRun ${forge('install')} to install your app on an Atlassian site.\n`,
1053
1082
  status: {
1054
1083
  outdatedPermissions: 'Outdated permissions',
@@ -1138,6 +1167,7 @@ ${buildTerminalLink(link)}\n`,
1138
1167
  }
1139
1168
  },
1140
1169
  installationId: {
1170
+ option: 'specify the installation ID',
1141
1171
  prompt: "Enter the app's installation ID:",
1142
1172
  errors: {
1143
1173
  invalid: `Invalid installation ID. Run ${forge('install', 'list')} to see the installation IDs for the app.`,
@@ -1158,8 +1188,12 @@ ${buildTerminalLink(link)}\n`,
1158
1188
  confirmAllInstallations: 'This will uninstall the app from the listed contexts. Are you sure you want to continue?'
1159
1189
  },
1160
1190
  info: 'Uninstalling...',
1161
- done: (product, domain, environment, isMulti) => `${isMulti ? log_symbols_1.default.info : log_symbols_1.default.success} Uninstalled from the ${(0, environment_1.environmentToOption)(environment)} environment in ${product} on ${buildTerminalLink(domain)}.`,
1162
- failed: (product, domain, environment) => `Failed to uninstall the app from the ${(0, environment_1.environmentToOption)(environment)} environment in ${product} on ${buildTerminalLink(domain)}. Try rerunning the command, or ask for help if you continue to see this error.`,
1191
+ done: (product, domain, environment, isMulti) => product === 'Ecosystem'
1192
+ ? `${isMulti ? log_symbols_1.default.info : log_symbols_1.default.success} Uninstalled.`
1193
+ : `${isMulti ? log_symbols_1.default.info : log_symbols_1.default.success} Uninstalled from the ${(0, environment_1.environmentToOption)(environment)} environment in ${product} on ${buildTerminalLink(domain)}.`,
1194
+ failed: (product, domain, environment) => product === 'Ecosystem'
1195
+ ? `Failed to uninstall the app. Try rerunning the command, or ask for help if you continue to see this error.`
1196
+ : `Failed to uninstall the app from the ${(0, environment_1.environmentToOption)(environment)} environment in ${product} on ${buildTerminalLink(domain)}. Try rerunning the command, or ask for help if you continue to see this error.`,
1163
1197
  missingUninstallTask: `Cannot uninstall the app: something went wrong with starting the uninstall task.`,
1164
1198
  uninstallBatchBanner: (remainingInstallations) => log_color_1.LogColor.warn(`${log_symbols_1.default.info} ${chalk_1.default.bold(`Batch uninstallations are limited to ${installations_1.MAX_BATCH_UNINSTALLS} per request and there ${remainingInstallations > 1 ? `are ${remainingInstallations} installations` : 'is 1 installation'} remaining. Run the command multiple times to perform more uninstallations`)}`),
1165
1199
  uninstallBatchProductionError: `${log_symbols_1.default.error} ${chalk_1.default.bold('Batch uninstallations are not supported in production environments.')}`
@@ -1488,6 +1522,15 @@ When errors occur during Forge command execution, error details will be sent to
1488
1522
  }
1489
1523
  }
1490
1524
  },
1525
+ commandHelp: {
1526
+ groups: {
1527
+ quickStart: 'Quick Start',
1528
+ develop: 'Develop',
1529
+ manage: 'Manage',
1530
+ account: 'Account',
1531
+ cliExperience: 'CLI Experience'
1532
+ }
1533
+ },
1491
1534
  dynamicTable: {
1492
1535
  exiting: 'Exiting...'
1493
1536
  },
@@ -1501,16 +1544,65 @@ When errors occur during Forge command execution, error details will be sent to
1501
1544
  optionUiType: 'UI framework (ui-kit, custom-ui)',
1502
1545
  optionProduct: 'target product (Jira, Confluence, etc.)',
1503
1546
  optionDryRun: 'show what would be generated',
1504
- optionForce: 'overwrite existing files',
1547
+ optionForce: 'overwrite existing files and upgrade conflicting dependencies to template versions',
1505
1548
  optionNoInstall: 'skip installing dependencies',
1506
- optionUpgradeDeps: 'upgrade existing dependencies to template versions',
1507
1549
  promptSelectProduct: 'select a product',
1508
1550
  promptSelectModule: 'select a module',
1509
1551
  promptSelectUIFramework: 'select a UI framework',
1552
+ dryRunLabel: 'Dry run: ',
1553
+ filesToBeCreatedHeader: 'Files to be created:',
1554
+ fileChangeHeader: (fileName) => `${fileName} changes:`,
1555
+ depAdditionsHeader: 'Adding:',
1556
+ frontendDepHeader: 'Frontend dependencies:',
1557
+ depConflictsHeader: '⚠️ Dependency conflicts detected',
1558
+ depConflictsScopedHeader: (scope) => `⚠️ ${scope === 'frontend' ? 'Frontend' : 'Backend'} dependency conflicts detected`,
1559
+ depConflictsBlockedHeader: (scope) => `⚠️ ${scope === 'frontend' ? 'Frontend' : 'Backend'} dependency conflicts detected`,
1560
+ depConflictsColumnPackage: 'Package',
1561
+ depConflictsColumnCurrent: 'Your version',
1562
+ depConflictsColumnTemplate: 'Template version',
1563
+ depConflictsColumnStatus: 'Status',
1564
+ depConflictsStatusConflict: '⛔ CONFLICT',
1565
+ depConflictsStatusUpgraded: '⬆️ UPGRADED',
1566
+ depConflictsStatusDowngraded: '⬇️ DOWNGRADED',
1567
+ depConflictsStatusOk: '✅ OK',
1568
+ depConflictsSummary: (count) => `${count} conflict(s) found. Cannot proceed without resolution.`,
1569
+ depConflictsUpgradedSummary: (count) => `${count} conflicting package(s) upgraded to template versions.`,
1570
+ depConflictsOptionsHeader: 'Options:',
1571
+ depConflictsOptionForce: '--force Upgrade conflicting packages to template versions (still runs npm install)',
1572
+ depConflictsOptionNoInstall: '--no-install Add to package.json only, skip npm install',
1573
+ depConflictsOptionForceNoInstall: '--force --no-install Upgrade conflicting packages but skip npm install',
1574
+ depConflictsFooter: 'Resolve conflicts manually or re-run with --force to upgrade.',
1575
+ errorDepConflicts: (count) => `${count} dependency conflict(s) detected. Re-run with --force to upgrade, or --no-install to skip the install step.`,
1576
+ errorPackageJsonNotFound: (pkgPath) => `package.json not found at ${pkgPath}. Cannot determine existing dependencies.`,
1577
+ errorPackageJsonParseFailed: (pkgPath, message) => `Failed to parse package.json at ${pkgPath}: ${message}`,
1578
+ errorMissingDepVersion: (name) => `Template dependency "${name}" is missing an explicit version. Templates must declare a version for every dependency.`,
1579
+ warnNoManifest: (manifestPath) => `No manifest.yml found at ${manifestPath}. Manifest changes were not planned.`,
1580
+ warnNoFragment: 'Template did not provide a manifest fragment; manifest changes were not planned.',
1581
+ warnNoManifestDelta: 'Manifest fragment did not introduce any changes after merge.',
1582
+ warnAddedAppCompatibility: (existingProduct, newProduct) => `Adding a "${newProduct}" module to an app that already targets "${existingProduct}"; updated app.compatibility so the app must be installed to "${newProduct}" to see changes.`,
1583
+ warnUnsupportedFileOperations: (ops) => `Skipping ${ops.length} unsupported file operation(s): ${ops.join(', ')}. Only "create" operations are supported.`,
1584
+ warnViteConfigExists: (configPath) => `An existing vite.config.js at ${configPath} could not be merged automatically. Skipping vite config changes; re-run with --force to overwrite.`,
1585
+ errorViteConfigNestedInput: () => `Cannot safely merge vite.config.js: the existing "input" block contains a nested object. Merging would corrupt the file. Re-run with --force to regenerate the config from scratch, or edit the input map manually.`,
1586
+ errorApplyNotImplemented: 'module add apply mode is not implemented yet; re-run with --dry-run to preview changes.',
1510
1587
  errorInvalidProduct: (product) => `Invalid product "${product}"`,
1511
1588
  errorInvalidUIFramework: (uiFramework, moduleKey) => `Invalid UI framework "${uiFramework ?? 'unknown'}" for module "${moduleKey}"`,
1512
1589
  errorFailedToResolveChoice: (choice) => `Failed to resolve selected module from choice "${choice}"`,
1513
- errorFailedToDownloadTemplate: (moduleKey) => `Failed to download template for module "${moduleKey}"`
1590
+ errorFailedToDownloadTemplate: (moduleKey) => `Failed to download template for module "${moduleKey}"`,
1591
+ errorMissingTemplateSource: (sourcePath) => `Template source file not found in extracted bundle: ${sourcePath}`,
1592
+ errorTargetConflict: (targets) => `File(s) already exist and would be overwritten:\n- ${targets.join('\n- ')}\n\nRe-run with --force to overwrite, or choose different values to generate unique filenames.`,
1593
+ errorZipExtractionFailed: (moduleKey, message) => `Failed to extract template bundle for "${moduleKey}": ${message}`,
1594
+ errorZipCleanupFailed: (moduleKey) => `Failed to clean up downloaded zip for "${moduleKey}".`,
1595
+ errorCacheDirMissing: (moduleKey) => `Cache directory is not set for module "${moduleKey}". Call prepareModuleMetadata before downloading the bundle.`,
1596
+ errorFailedToDownloadBundle: (moduleKey, message) => `Failed to download bundle for "${moduleKey}": ${message}`,
1597
+ errorCacheCleanupFailed: (cacheDir) => `Failed to clean up cache directory: ${cacheDir}`,
1598
+ errorNoBundle: (moduleKey, searched) => `No template bundle was found for "${moduleKey}". Searched the following paths:\n- ${searched.join('\n- ')}\n\nThe template archive may have failed to download, or its layout may not match expectations.`,
1599
+ errorNoFileOperations: (moduleKey, uiFramework) => `Template "${moduleKey}"${uiFramework ? ` (variant "${uiFramework}")` : ''} declares no "create" file operations; nothing to copy.`,
1600
+ warnDownloadFailed: (moduleKey, message) => `Failed to download template archive for "${moduleKey}": ${message}. File copy will be skipped.`,
1601
+ warnNoBundle: 'Template bundle was not downloaded; file copy was skipped.',
1602
+ warnInstallSkipped: '⚠️ Skipping install: Run npm install to install new dependencies.',
1603
+ infoReusingResource: (resourceKey) => `Reusing existing resource '${resourceKey}'`,
1604
+ errorResourceEntryConflict: (resourceKey, entryName, existing, incoming) => `Resource '${resourceKey}' already declares entry '${entryName}' as '${existing}', but the new module wants '${incoming}'. Choose a different moduleKey or remove the existing entry.`,
1605
+ errorResourcePathConflict: (resourceKey, existing, incoming) => `Resource '${resourceKey}' already declares path '${existing}', but the new module wants '${incoming}'. Resources sharing a key must share a path.`
1514
1606
  },
1515
1607
  list: {
1516
1608
  description: 'list available module templates',
@@ -1527,9 +1619,11 @@ When errors occur during Forge command execution, error details will be sent to
1527
1619
  bifrostIndexInvalid: 'Error: expected array of templates',
1528
1620
  bifrostIndexFetchFailed: (status, statusText) => `Error: template fetch failed: ${status} ${statusText}`,
1529
1621
  bifrostManifestFragmentFetchFailed: (status, statusText) => `Error: failed to fetch manifest fragment: ${status} ${statusText}`,
1530
- duplicateModuleKey: (value, moduleKey) => `Module key "${value}" already exists for ${moduleKey}. Please enter a different value.`,
1622
+ bifrostZipFetchFailed: (moduleKey, status, statusText) => `Error: failed to fetch template bundle for "${moduleKey}": ${status} ${statusText}`,
1623
+ duplicateModuleKey: (value) => `Module key "${value}" already exists in the manifest. Please enter a different value.`,
1531
1624
  duplicateFunctionKey: (value) => `Function key "${value}" already exists. Please enter a different value.`,
1532
- duplicateResourceKey: (value) => `Resource key "${value}" already exists. Please enter a different value.`
1625
+ duplicateResourceKey: (value) => `Resource key "${value}" already exists. Please enter a different value.`,
1626
+ duplicateKey: (value) => `"${value}" must be unique. Please enter a different value.`
1533
1627
  }
1534
1628
  }
1535
1629
  };