@vypdev/copilot 3.9.1 → 3.9.2

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.
@@ -47341,6 +47341,34 @@ function verifiedReadinessLink(snapshot, number) {
47341
47341
  }
47342
47342
 
47343
47343
 
47344
+ /***/ }),
47345
+
47346
+ /***/ 59756:
47347
+ /***/ ((__unused_webpack_module, exports) => {
47348
+
47349
+ "use strict";
47350
+
47351
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
47352
+ exports.hasConventionalPullRequestTitle = hasConventionalPullRequestTitle;
47353
+ exports.generatedPullRequestTitle = generatedPullRequestTitle;
47354
+ /** Recognizes the conventional header shape; the consumer's CI owns its allowed types and subject rules. */
47355
+ function hasConventionalPullRequestTitle(title) {
47356
+ return !title.includes('\n') && !title.includes('\r')
47357
+ && /^\p{L}[\p{L}\p{N}_-]*(?:\([^()\r\n]+\))?!?: +\S[^\r\n]*$/u.test(title);
47358
+ }
47359
+ function generatedPullRequestTitle(sourceTitle, sanitizedSubject, issueNumber, labels) {
47360
+ if (hasConventionalPullRequestTitle(sourceTitle))
47361
+ return sourceTitle;
47362
+ const type = labels.isHotfix || labels.isBugfix || labels.isBug ? 'fix'
47363
+ : labels.isFeature || labels.isEnhancement ? 'feat'
47364
+ : labels.isDocs || labels.isDocumentation ? 'docs' : 'chore';
47365
+ const prefix = `${type}: `;
47366
+ const suffix = ` (#${issueNumber})`;
47367
+ const subject = (sanitizedSubject || 'Update linked issue').slice(0, 256 - prefix.length - suffix.length).trimEnd();
47368
+ return `${prefix}${subject}${suffix}`;
47369
+ }
47370
+
47371
+
47344
47372
  /***/ }),
47345
47373
 
47346
47374
  /***/ 39410:
@@ -47532,6 +47560,12 @@ Do not add the \`${profile.deployment.launcherLabel}\` label, dispatch a deploym
47532
47560
 
47533
47561
  Never expose credentials, tokens, private keys, or other secrets in issues, commits, pull requests, logs, or diagnostic comments.
47534
47562
 
47563
+ ## Repository verification prerequisites
47564
+
47565
+ The setup runner profile selects placement; it does not install the project's language runtimes. An operator must provision the project's required runtimes and dependencies in every job that runs file-changing or branch-sync verification, before the Copilot step. A separate application CI job does not prepare this job.
47566
+
47567
+ Declare reviewed version prefixes in \`.copilot/verification-prerequisites.json\` (schemaVersion 1, runtimes such as java 17, node 24, pnpm 10). Copilot checks declared versions in the credential-free verification environment before each configured verification command; a missing or incompatible runtime blocks publication. Without this optional declaration, existing verification behavior remains and no language is inferred. Java provisioning may use \`actions/setup-java\`; \`JAVA_HOME\` and \`PATH\` survive isolation, while agent credentials and tool-option injection variables do not. Do not add an unreviewed bootstrap or weaken verification to work around a missing runtime. Read [verification prerequisites and same-job setup](https://docs.page/vypdev/copilot/security-operations/operations/verification#repository-verification-prerequisites).
47568
+
47535
47569
  For the full contributor flow, read [repository collaboration](https://github.com/vypdev/copilot/blob/master/docs/agents/repository-collaboration.mdx). For drift and recovery, read [guidance troubleshooting](https://github.com/vypdev/copilot/blob/master/docs/agents/repository-guidance-troubleshooting.mdx).
47536
47570
  `;
47537
47571
  }
@@ -50738,6 +50772,87 @@ function projectCurrentNativeStatus(status, facts) {
50738
50772
  }
50739
50773
 
50740
50774
 
50775
+ /***/ }),
50776
+
50777
+ /***/ 89347:
50778
+ /***/ ((__unused_webpack_module, exports) => {
50779
+
50780
+ "use strict";
50781
+
50782
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
50783
+ exports.VerificationPrerequisiteError = exports.VERIFICATION_RUNTIME_SPECS = exports.VERIFICATION_RUNTIME_HELP = exports.VERIFICATION_RUNTIME_MANIFEST = void 0;
50784
+ exports.parseVerificationRuntimeManifest = parseVerificationRuntimeManifest;
50785
+ exports.verificationRuntimeVersion = verificationRuntimeVersion;
50786
+ exports.verificationRuntimeMatches = verificationRuntimeMatches;
50787
+ exports.VERIFICATION_RUNTIME_MANIFEST = '.copilot/verification-prerequisites.json';
50788
+ exports.VERIFICATION_RUNTIME_HELP = 'https://docs.page/vypdev/copilot/security-operations/operations/verification#repository-verification-prerequisites';
50789
+ exports.VERIFICATION_RUNTIME_SPECS = {
50790
+ java: { label: 'Java', program: 'java', args: ['-version'] },
50791
+ node: { label: 'Node.js', program: 'node', args: ['--version'] },
50792
+ pnpm: { label: 'pnpm', program: 'pnpm', args: ['--version'] },
50793
+ python: { label: 'Python', program: 'python3', args: ['--version'] },
50794
+ go: { label: 'Go', program: 'go', args: ['version'] },
50795
+ dotnet: { label: '.NET SDK', program: 'dotnet', args: ['--version'] },
50796
+ ruby: { label: 'Ruby', program: 'ruby', args: ['--version'] },
50797
+ rust: { label: 'Rust', program: 'rustc', args: ['--version'] },
50798
+ };
50799
+ const VERSION_PREFIX = /^[1-9]\d{0,2}(?:\.(?:0|[1-9]\d{0,2})){0,2}$/u;
50800
+ /** Only reviewed, closed runtime/version facts enter user-visible diagnostics. Raw tool output never does. */
50801
+ class VerificationPrerequisiteError extends Error {
50802
+ constructor(reason, requirement, observed, job) {
50803
+ const jobLabel = job && /^[A-Za-z_][A-Za-z0-9_-]{0,99}$/u.test(job) ? ` in job ${job}` : ' in this job';
50804
+ const runtime = requirement && Object.prototype.hasOwnProperty.call(exports.VERIFICATION_RUNTIME_SPECS, requirement.runtime)
50805
+ ? exports.VERIFICATION_RUNTIME_SPECS[requirement.runtime].label : 'Required runtime';
50806
+ const version = requirement && VERSION_PREFIX.test(requirement.version) ? requirement.version : 'declared version';
50807
+ const actual = observed && /^[1-9]\d{0,2}(?:\.(?:0|[1-9]\d{0,2})){0,3}$/u.test(observed) ? observed : 'unavailable';
50808
+ const cause = reason === 'manifest-invalid' ? `${exports.VERIFICATION_RUNTIME_MANIFEST} is invalid or unsafe`
50809
+ : reason === 'version-mismatch' ? `${runtime} ${version} is required; observed ${actual}`
50810
+ : reason === 'unreadable-version' ? `${runtime} ${version} could not be verified`
50811
+ : `${runtime} ${version} is unavailable`;
50812
+ const action = reason === 'manifest-invalid' ? 'Correct the reviewed runtime declaration.'
50813
+ : `Provision the declared runtime in the same job before Copilot, then retry.${requirement?.runtime === 'java' ? ' For Java, configure actions/setup-java or a managed JAVA_HOME.' : ''}`;
50814
+ super(`Repository verification is blocked${jobLabel}: ${cause}. ${action} The repository verification command was not run. Help: ${exports.VERIFICATION_RUNTIME_HELP}`);
50815
+ this.name = 'VerificationPrerequisiteError';
50816
+ }
50817
+ }
50818
+ exports.VerificationPrerequisiteError = VerificationPrerequisiteError;
50819
+ function parseVerificationRuntimeManifest(value) {
50820
+ if (!value || typeof value !== 'object' || Array.isArray(value))
50821
+ throw new VerificationPrerequisiteError('manifest-invalid');
50822
+ const object = value;
50823
+ if (object.schemaVersion !== 1 || Object.keys(object).some(key => !['schemaVersion', 'runtimes'].includes(key))
50824
+ || !object.runtimes || typeof object.runtimes !== 'object' || Array.isArray(object.runtimes)) {
50825
+ throw new VerificationPrerequisiteError('manifest-invalid');
50826
+ }
50827
+ const runtimes = object.runtimes;
50828
+ if (Object.keys(runtimes).length > 8)
50829
+ throw new VerificationPrerequisiteError('manifest-invalid');
50830
+ return Object.entries(runtimes).map(([runtime, version]) => {
50831
+ if (!Object.prototype.hasOwnProperty.call(exports.VERIFICATION_RUNTIME_SPECS, runtime) || typeof version !== 'string' || !VERSION_PREFIX.test(version)) {
50832
+ throw new VerificationPrerequisiteError('manifest-invalid');
50833
+ }
50834
+ return Object.freeze({ runtime: runtime, version });
50835
+ });
50836
+ }
50837
+ function verificationRuntimeVersion(runtime, output) {
50838
+ const patterns = {
50839
+ java: /^(?:openjdk|java) (?:version )?["']?(\d+(?:\.\d+){0,3})/imu,
50840
+ node: /^v(\d+\.\d+\.\d+)/mu,
50841
+ pnpm: /^(\d+\.\d+\.\d+)/mu,
50842
+ python: /^Python (\d+\.\d+\.\d+)/mu,
50843
+ go: /^go version go(\d+\.\d+(?:\.\d+)?)/mu,
50844
+ dotnet: /^(\d+\.\d+\.\d+)/mu,
50845
+ ruby: /^ruby (\d+\.\d+\.\d+)/mu,
50846
+ rust: /^rustc (\d+\.\d+\.\d+)/mu,
50847
+ };
50848
+ const version = patterns[runtime].exec(output)?.[1];
50849
+ return runtime === 'java' && version?.startsWith('1.') ? version.slice(2) : version;
50850
+ }
50851
+ function verificationRuntimeMatches(required, observed) {
50852
+ return observed === required || observed.startsWith(`${required}.`);
50853
+ }
50854
+
50855
+
50741
50856
  /***/ }),
50742
50857
 
50743
50858
  /***/ 43193:
@@ -54965,7 +55080,7 @@ class SyncBranchUseCase {
54965
55080
  const commands = (0, verify_command_policy_1.limitVerifyCommands)([...context.verifyCommands]);
54966
55081
  if (commands.length === verify_command_policy_1.MAX_VERIFY_COMMANDS)
54967
55082
  (0, logging_ports_1.logInfo)(`Branch sync verification is capped at ${verify_command_policy_1.MAX_VERIFY_COMMANDS} commands.`);
54968
- const verification = await (0, verify_command_runner_1.runVerifyCommands)(commands, (program, args) => this.git.execute(program, args, { untrusted: true }));
55083
+ const verification = await (0, verify_command_runner_1.runVerifyCommands)(commands, (program, args) => this.git.execute(program, args, { untrusted: true, verifyRuntimePrerequisites: true }));
54969
55084
  if (!verification.success) {
54970
55085
  return {
54971
55086
  commandCount: commands.length,
@@ -60806,7 +60921,7 @@ async function runVerification(context, gitCommitPort) {
60806
60921
  if (verifyCommands.length === 0)
60807
60922
  return undefined;
60808
60923
  (0, logging_ports_1.logInfo)(`Running ${verifyCommands.length} verify ${verifyCommands.length === 1 ? 'command' : 'commands'}...`);
60809
- const verify = await (0, verify_command_runner_1.runVerifyCommands)(verifyCommands, (program, args) => gitCommitPort.execute(program, args, { untrusted: true }));
60924
+ const verify = await (0, verify_command_runner_1.runVerifyCommands)(verifyCommands, (program, args) => gitCommitPort.execute(program, args, { untrusted: true, verifyRuntimePrerequisites: true }));
60810
60925
  return verify.success
60811
60926
  ? undefined
60812
60927
  : verify.error ?? `Verify command failed: ${verify.failedCommand ?? "unknown"}.`;
@@ -63029,6 +63144,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
63029
63144
  exports.runVerifyCommands = runVerifyCommands;
63030
63145
  const logging_ports_1 = __nccwpck_require__(6152);
63031
63146
  const verify_command_policy_1 = __nccwpck_require__(96031);
63147
+ const verification_runtime_policy_1 = __nccwpck_require__(89347);
63032
63148
  async function runVerifyCommands(commands, execute) {
63033
63149
  for (const command of commands) {
63034
63150
  const result = await executeVerifyCommand(command, execute);
@@ -63047,7 +63163,11 @@ async function executeVerifyCommand(command, execute) {
63047
63163
  ? { success: true }
63048
63164
  : { success: false, failedCommand: formatCommandForDiagnostics(parsed) };
63049
63165
  }
63050
- catch {
63166
+ catch (error) {
63167
+ if (error instanceof verification_runtime_policy_1.VerificationPrerequisiteError) {
63168
+ return { success: false, failedCommand: formatCommandForDiagnostics(parsed),
63169
+ error: `${error.message} Verification command: ${formatCommandForDiagnostics(parsed)}.` };
63170
+ }
63051
63171
  (0, logging_ports_1.logError)('Verify command failed.');
63052
63172
  return { success: false, failedCommand: formatCommandForDiagnostics(parsed) };
63053
63173
  }
@@ -65764,6 +65884,7 @@ exports.titleUpdateFailure = titleUpdateFailure;
65764
65884
  const result_1 = __nccwpck_require__(73817);
65765
65885
  const application_error_1 = __nccwpck_require__(75999);
65766
65886
  const positive_integer_policy_1 = __nccwpck_require__(19879);
65887
+ const pull_request_title_policy_1 = __nccwpck_require__(59756);
65767
65888
  function projectUpdateTitleContext(source) {
65768
65889
  if (source.isIssue) {
65769
65890
  return Object.freeze({
@@ -65814,19 +65935,27 @@ async function runPullRequestTitleUpdate(param, taskId, issueRepository) {
65814
65935
  if (!linkedIssueNumber || linkedIssueNumber === param.pullRequestNumber) {
65815
65936
  return [skippedResult(taskId)];
65816
65937
  }
65938
+ const currentTitle = await issueRepository.getTitle(param.pullRequestNumber);
65939
+ if (currentTitle === undefined) {
65940
+ return [new result_1.Result({ id: taskId, success: false, executed: true,
65941
+ steps: ['The current pull request title could not be read. No title change was attempted.'],
65942
+ errors: [new application_error_1.ApplicationError('provider.unavailable', 'Unable to read the current pull request title.')] })];
65943
+ }
65944
+ if ((0, pull_request_title_policy_1.hasConventionalPullRequestTitle)(currentTitle))
65945
+ return [skippedResult(taskId)];
65817
65946
  const issueTitle = await issueRepository.getTitle(linkedIssueNumber);
65818
65947
  if (issueTitle === undefined) {
65819
65948
  return [new result_1.Result({ id: taskId, success: false, executed: true, steps: ['Tried to update title, but there was a problem.'] })];
65820
65949
  }
65821
65950
  const title = await issueRepository.updatePullRequestTitle({
65822
- pullRequestTitle: param.pullRequestTitle,
65951
+ pullRequestTitle: currentTitle,
65823
65952
  issueTitle,
65824
65953
  issueNumber: linkedIssueNumber,
65825
65954
  pullRequestNumber: param.pullRequestNumber,
65826
65955
  labelFacts: param.labelFacts,
65827
65956
  });
65828
65957
  return title
65829
- ? [updatedResult(taskId, `The pull request's title was updated from \`${param.pullRequestTitle}\` to \`${title}\`.`)]
65958
+ ? [updatedResult(taskId, `The pull request's title was updated from \`${currentTitle}\` to \`${title}\`.`)]
65830
65959
  : [skippedResult(taskId)];
65831
65960
  }
65832
65961
  function titleUpdateFailure(taskId, error) {
@@ -75228,6 +75357,7 @@ exports.IssueProgressTrackingRepository = IssueProgressTrackingRepository;
75228
75357
  Object.defineProperty(exports, "__esModule", ({ value: true }));
75229
75358
  exports.IssueTitleRepository = void 0;
75230
75359
  const issue_emoji_policy_1 = __nccwpck_require__(81201);
75360
+ const pull_request_title_policy_1 = __nccwpck_require__(59756);
75231
75361
  const issue_title_policy_1 = __nccwpck_require__(83179);
75232
75362
  const issue_title_update_1 = __nccwpck_require__(9229);
75233
75363
  class IssueTitleRepository {
@@ -75245,10 +75375,12 @@ class IssueTitleRepository {
75245
75375
  return (0, issue_title_update_1.updateIssueTitle)(this.issueTitleClient, owner, repository, issueTitle, formattedTitle, issueNumber, token);
75246
75376
  });
75247
75377
  };
75248
- this.updateTitlePullRequestFormat = async (owner, repository, pullRequestTitle, issueTitle, issueNumber, pullRequestNumber, branchManagementEmoji, labels, token) => {
75378
+ this.updateTitlePullRequestFormat = async (owner, repository, pullRequestTitle, issueTitle, issueNumber, pullRequestNumber, _branchManagementEmoji, labels, token) => {
75249
75379
  return (0, issue_title_update_1.withTitleUpdateLogging)(() => {
75250
- const emoji = (0, issue_emoji_policy_1.resolvePullRequestTitleEmoji)(labels, branchManagementEmoji);
75251
- const formattedTitle = `[#${issueNumber}] ${emoji} - ${(0, issue_title_policy_1.sanitizePullRequestTitle)((0, issue_title_policy_1.normalizePullRequestSourceTitle)(issueTitle, issueNumber))}`;
75380
+ if ((0, pull_request_title_policy_1.hasConventionalPullRequestTitle)(pullRequestTitle))
75381
+ return Promise.resolve(undefined);
75382
+ const sourceTitle = (0, issue_title_policy_1.normalizePullRequestSourceTitle)(issueTitle, issueNumber);
75383
+ const formattedTitle = (0, pull_request_title_policy_1.generatedPullRequestTitle)(sourceTitle, (0, issue_title_policy_1.sanitizePullRequestTitle)(sourceTitle), issueNumber, labels);
75252
75384
  return (0, issue_title_update_1.updateIssueTitle)(this.issueTitleClient, owner, repository, pullRequestTitle, formattedTitle, pullRequestNumber, token);
75253
75385
  });
75254
75386
  };
@@ -86711,6 +86843,7 @@ const exec = __importStar(__nccwpck_require__(18538));
86711
86843
  const git_authentication_environment_1 = __nccwpck_require__(16535);
86712
86844
  const untrusted_command_environment_1 = __nccwpck_require__(2304);
86713
86845
  const git_hook_isolation_1 = __nccwpck_require__(39764);
86846
+ const verification_runtime_preflight_1 = __nccwpck_require__(23100);
86714
86847
  class GitCommitAdapter {
86715
86848
  constructor(executeCommand = (program, args, options) => options
86716
86849
  ? exec.exec(program, args, {
@@ -86720,16 +86853,21 @@ class GitCommitAdapter {
86720
86853
  ...(options.stdout ? { listeners: { stdout: options.stdout } } : {}),
86721
86854
  ...(options.env ? { env: options.env } : {}),
86722
86855
  })
86723
- : exec.exec(program, args)) {
86856
+ : exec.exec(program, args), checkPrerequisites = verification_runtime_preflight_1.assertVerificationRuntimePrerequisites) {
86724
86857
  this.executeCommand = executeCommand;
86858
+ this.checkPrerequisites = checkPrerequisites;
86725
86859
  }
86726
86860
  async execute(program, args, options) {
86861
+ if (options?.verifyRuntimePrerequisites && !options.untrusted)
86862
+ throw new Error('Runtime preflight requires credential-free verification.');
86727
86863
  if (!options?.untrusted)
86728
86864
  return options ? this.executeCommand(program, args, options) : this.executeCommand(program, args);
86729
86865
  if (options.env)
86730
86866
  throw new Error('Untrusted command execution does not accept a caller-supplied environment.');
86731
86867
  const runtime = (0, untrusted_command_environment_1.prepareUntrustedCommandEnvironment)();
86732
86868
  try {
86869
+ if (options.verifyRuntimePrerequisites)
86870
+ this.checkPrerequisites(runtime.environment);
86733
86871
  return await this.executeCommand(program, args, {
86734
86872
  ...(options.stdout ? { stdout: options.stdout } : {}),
86735
86873
  env: runtime.environment,
@@ -88044,6 +88182,7 @@ const node_path_1 = __nccwpck_require__(49411);
88044
88182
  const agent_private_install_root_1 = __nccwpck_require__(44640);
88045
88183
  const ALLOWED_VARIABLES = [
88046
88184
  'PATH',
88185
+ 'JAVA_HOME',
88047
88186
  'LANG',
88048
88187
  'LANGUAGE',
88049
88188
  'LC_ALL',
@@ -88103,6 +88242,132 @@ function prepareUntrustedCommandEnvironment(source = process.env, platform = pro
88103
88242
  }
88104
88243
 
88105
88244
 
88245
+ /***/ }),
88246
+
88247
+ /***/ 91053:
88248
+ /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
88249
+
88250
+ "use strict";
88251
+
88252
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
88253
+ exports.readVerificationRuntimeManifest = readVerificationRuntimeManifest;
88254
+ const node_fs_1 = __nccwpck_require__(87561);
88255
+ const node_path_1 = __nccwpck_require__(49411);
88256
+ const verification_runtime_policy_1 = __nccwpck_require__(89347);
88257
+ const MAX_MANIFEST_BYTES = 16 * 1024;
88258
+ function readVerificationRuntimeManifest(root) {
88259
+ const path = (0, node_path_1.resolve)(root, verification_runtime_policy_1.VERIFICATION_RUNTIME_MANIFEST);
88260
+ let descriptor;
88261
+ try {
88262
+ let directory;
88263
+ try {
88264
+ directory = (0, node_fs_1.lstatSync)((0, node_path_1.join)(root, '.copilot'));
88265
+ }
88266
+ catch (error) {
88267
+ if (error.code === 'ENOENT')
88268
+ return [];
88269
+ throw error;
88270
+ }
88271
+ if (!directory.isDirectory() || directory.isSymbolicLink()
88272
+ || (0, node_fs_1.realpathSync)((0, node_path_1.join)(root, '.copilot')) !== (0, node_path_1.join)((0, node_fs_1.realpathSync)(root), '.copilot'))
88273
+ throw new Error('Unsafe manifest parent');
88274
+ let entry;
88275
+ try {
88276
+ entry = (0, node_fs_1.lstatSync)(path, { bigint: true });
88277
+ }
88278
+ catch (error) {
88279
+ if (error.code === 'ENOENT')
88280
+ return [];
88281
+ throw error;
88282
+ }
88283
+ if (!entry.isFile() || entry.isSymbolicLink() || entry.nlink !== 1n || entry.size > BigInt(MAX_MANIFEST_BYTES))
88284
+ throw new Error('Unsafe manifest');
88285
+ descriptor = (0, node_fs_1.openSync)(path, node_fs_1.constants.O_RDONLY | (node_fs_1.constants.O_NOFOLLOW ?? 0));
88286
+ const opened = (0, node_fs_1.fstatSync)(descriptor, { bigint: true });
88287
+ if (!opened.isFile() || opened.nlink !== 1n || opened.dev !== entry.dev || opened.ino !== entry.ino
88288
+ || opened.size > BigInt(MAX_MANIFEST_BYTES))
88289
+ throw new Error('Manifest changed');
88290
+ const bytes = Buffer.alloc(MAX_MANIFEST_BYTES + 1);
88291
+ const size = (0, node_fs_1.readSync)(descriptor, bytes, 0, bytes.length, 0);
88292
+ if (size > MAX_MANIFEST_BYTES)
88293
+ throw new Error('Oversized manifest');
88294
+ return (0, verification_runtime_policy_1.parseVerificationRuntimeManifest)(JSON.parse(bytes.subarray(0, size).toString('utf8')));
88295
+ }
88296
+ catch {
88297
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('manifest-invalid');
88298
+ }
88299
+ finally {
88300
+ if (descriptor !== undefined)
88301
+ (0, node_fs_1.closeSync)(descriptor);
88302
+ }
88303
+ }
88304
+
88305
+
88306
+ /***/ }),
88307
+
88308
+ /***/ 23100:
88309
+ /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
88310
+
88311
+ "use strict";
88312
+
88313
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
88314
+ exports.assertVerificationRuntimePrerequisites = assertVerificationRuntimePrerequisites;
88315
+ const node_child_process_1 = __nccwpck_require__(17718);
88316
+ const node_path_1 = __nccwpck_require__(49411);
88317
+ const verification_runtime_manifest_1 = __nccwpck_require__(91053);
88318
+ const verification_runtime_policy_1 = __nccwpck_require__(89347);
88319
+ const probe = (program, args, environment) => {
88320
+ const result = (0, node_child_process_1.spawnSync)(program, [...args], { env: environment, encoding: 'utf8', shell: false,
88321
+ windowsHide: true, timeout: 5000, maxBuffer: 8192, stdio: ['ignore', 'pipe', 'pipe'] });
88322
+ return { status: result.status, output: `${result.stdout ?? ''}\n${result.stderr ?? ''}`, failed: !!result.error };
88323
+ };
88324
+ const hasControlCharacter = (value) => [...value].some(character => character.charCodeAt(0) < 32);
88325
+ /** Fixed version probes only; never installs a runtime or executes a repository-provided bootstrap. */
88326
+ function assertVerificationRuntimePrerequisites(environment, root = process.cwd(), run = probe, platform = process.platform, job = process.env.GITHUB_JOB) {
88327
+ for (const requirement of (0, verification_runtime_manifest_1.readVerificationRuntimeManifest)(root)) {
88328
+ checkRuntime(requirement, environment, run, platform, job);
88329
+ }
88330
+ }
88331
+ function checkRuntime(requirement, environment, run, platform, job) {
88332
+ const spec = verification_runtime_policy_1.VERIFICATION_RUNTIME_SPECS[requirement.runtime];
88333
+ let program = spec.program;
88334
+ let args = spec.args;
88335
+ if (requirement.runtime === 'java' && environment.JAVA_HOME) {
88336
+ const paths = platform === 'win32' ? node_path_1.win32 : node_path_1.posix;
88337
+ if (!paths.isAbsolute(environment.JAVA_HOME) || hasControlCharacter(environment.JAVA_HOME)) {
88338
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('unavailable', requirement, undefined, job);
88339
+ }
88340
+ program = paths.join(environment.JAVA_HOME, 'bin', platform === 'win32' ? 'java.exe' : 'java');
88341
+ }
88342
+ else if (requirement.runtime === 'python' && platform === 'win32')
88343
+ program = 'python';
88344
+ else if (requirement.runtime === 'pnpm' && platform === 'win32') {
88345
+ const systemRoot = environment.SystemRoot;
88346
+ if (!systemRoot || !node_path_1.win32.isAbsolute(systemRoot) || hasControlCharacter(systemRoot)) {
88347
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('unavailable', requirement, undefined, job);
88348
+ }
88349
+ program = node_path_1.win32.join(systemRoot, 'System32', 'cmd.exe');
88350
+ args = ['/d', '/s', '/c', 'pnpm --version'];
88351
+ }
88352
+ let result;
88353
+ try {
88354
+ result = run(program, args, environment);
88355
+ }
88356
+ catch {
88357
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('unavailable', requirement, undefined, job);
88358
+ }
88359
+ if (result.failed || result.status !== 0 || result.output.length > 8192) {
88360
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('unavailable', requirement, undefined, job);
88361
+ }
88362
+ const observed = (0, verification_runtime_policy_1.verificationRuntimeVersion)(requirement.runtime, result.output);
88363
+ if (!observed)
88364
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('unreadable-version', requirement, undefined, job);
88365
+ if (!(0, verification_runtime_policy_1.verificationRuntimeMatches)(requirement.version, observed)) {
88366
+ throw new verification_runtime_policy_1.VerificationPrerequisiteError('version-mismatch', requirement, observed, job);
88367
+ }
88368
+ }
88369
+
88370
+
88106
88371
  /***/ }),
88107
88372
 
88108
88373
  /***/ 92540:
@@ -0,0 +1 @@
1
+ .setup-help.svelte-1fzpnf1{margin-bottom:1.5rem}.help-links.svelte-1fzpnf1{flex-wrap:wrap;gap:.5rem 1.25rem;display:flex}a.svelte-1fzpnf1{text-underline-offset:.2em;font-size:.875rem}p.svelte-1fzpnf1{margin:.4rem 0 0;font-size:.8rem}code.svelte-1spw6vv,bdi.svelte-1spw6vv{overflow-wrap:anywhere}.runner-details.svelte-1spw6vv{margin-block:1rem}.installation-review.svelte-44ckab{min-width:0;margin-block:1.25rem}.routes.svelte-44ckab{padding-inline-start:1.25rem}.routes.svelte-44ckab li:where(.svelte-44ckab){padding-block:.5rem}code.svelte-44ckab,pre.svelte-44ckab,bdi.svelte-44ckab{white-space:pre-wrap;overflow-wrap:anywhere}pre.svelte-44ckab{max-height:28rem;padding:.75rem;font-size:.8rem;overflow:auto}details.svelte-44ckab{margin-block:.75rem}.batch-targets.svelte-17t72gm{gap:1rem;margin-block:1rem;display:grid}.batch-target.svelte-17t72gm{border:1px solid var(--line);border-radius:.8rem;min-width:0;padding:1rem}h3.svelte-17t72gm{overflow-wrap:anywhere;margin-top:0}.target-status.svelte-17t72gm{font-weight:600}pre.svelte-17t72gm{max-height:24rem;padding:.75rem;font-size:.78rem;overflow:auto}code.svelte-17t72gm{overflow-wrap:anywhere}details.svelte-17t72gm{margin-block:.75rem}.batch-buttons.svelte-17t72gm{flex-wrap:wrap;gap:.75rem;display:flex}.batch-technical.svelte-17t72gm{margin-top:1.25rem}fieldset.svelte-1qngno{border:0;min-width:0;margin:1rem 0;padding:0}legend.svelte-1qngno{margin-bottom:.5rem;font-weight:600}.repository-list.svelte-1qngno{gap:.5rem;display:grid}.repository-row.svelte-1qngno{border:1px solid var(--line);border-radius:.75rem;align-items:start;gap:.75rem;padding:.75rem;display:flex}.repository-row.svelte-1qngno input:where(.svelte-1qngno){flex:none;width:auto;margin-top:.25rem}.repository-row.svelte-1qngno span:where(.svelte-1qngno){overflow-wrap:anywhere;min-width:0}.repository-row.svelte-1qngno small:where(.svelte-1qngno){margin-top:.25rem;display:block}.batch-actions.svelte-1qngno{flex-wrap:wrap;align-items:center;gap:.5rem;margin:.75rem 0;display:flex}details.svelte-1qngno{margin:1rem 0}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--page:#f6f8f7;--side:#102423;--side-line:#31504b;--side-text:#e8f5f0;--surface:#fff;--surface-soft:#f3f7f5;--line:#d7e3df;--control-line:#748b82;--text:#18312c;--muted:#58736b;--accent:#176e5e;--accent-strong:#075743;--accent-tint:#dff4e9;--focus:#966000;--warn:#76510d;--warn-bg:#fff6df;--error:#a73434;--error-bg:#fff0ec;--shadow:0 18px 50px #1e403414;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}:root:not([data-theme=light]){--page:#0d1716;--side:#10201d;--side-line:#294a41;--side-text:#eaf7f1;--surface:#182722;--surface-soft:#20342d;--line:#355247;--control-line:#688f7f;--text:#eaf5ee;--muted:#adccbc;--accent:#7ed6ac;--accent-strong:#a4edc2;--accent-tint:#234b38;--focus:#ffca6a;--warn:#ffdd8a;--warn-bg:#463b21;--error:#ffc0b7;--error-bg:#4a2b2a;--shadow:0 18px 50px #00000024}}:root[data-theme=dark]{--page:#0d1716;--side:#10201d;--side-line:#294a41;--side-text:#eaf7f1;--surface:#182722;--surface-soft:#20342d;--line:#355247;--control-line:#688f7f;--text:#eaf5ee;--muted:#adccbc;--accent:#7ed6ac;--accent-strong:#a4edc2;--accent-tint:#234b38;--focus:#ffca6a;--warn:#ffdd8a;--warn-bg:#463b21;--error:#ffc0b7;--error-bg:#4a2b2a;--shadow:0 18px 50px #00000024}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--page);color:var(--text);margin:0}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}a{color:var(--accent-strong);text-underline-offset:3px}.card,.context-card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:15px}.primary{border:1px solid var(--accent-strong);background:var(--accent-strong);color:var(--side);border-radius:8px;min-height:43px;padding:12px 18px;font-size:12px;font-weight:800}:root[data-theme=light] .primary,:root:not([data-theme=dark]) .primary{color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .primary{color:#0d2419}}.primary span{margin-left:18px}.primary:hover:not(:disabled){filter:brightness(1.1)}.secondary{border:1px solid var(--control-line);color:var(--text);background:var(--surface-soft);border-radius:8px;padding:11px 16px;font-size:12px;font-weight:700}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}.shell{grid-template-columns:minmax(250px,288px) minmax(0,1fr);min-height:100vh;display:grid}.sidebar{background:var(--side);color:var(--side-text);flex-direction:column;min-height:100vh;padding:34px 28px;display:flex;position:sticky;top:0}.brand{letter-spacing:-.035em;align-items:center;gap:13px;display:flex}.brand-mark{color:#0c3021;background:#75d9a0;border-radius:11px;place-items:center;width:37px;height:37px;font-size:26px;line-height:1;display:grid}.brand strong{font-size:23px;line-height:1;display:block}.brand small{letter-spacing:.23em;color:#aac8bd;margin-top:5px;font-size:9px;font-weight:800;display:block}.rail-caption{color:#9dbab0;letter-spacing:.18em;margin-block:78px 22px;margin-inline-start:7px;font-size:10px;font-weight:800}.sidebar .description{color:#afcabe}.steps{margin:0;padding:0;list-style:none;position:relative}.steps:before{content:"";top:22px;bottom:22px;background:var(--side-line);width:1px;position:absolute;inset-inline-start:19px}.steps li{color:#a6c2b7;border-radius:10px;align-items:center;gap:16px;min-height:55px;padding-block:8px;padding-inline:1px 12px;font-size:13px;font-weight:600;display:flex;position:relative}.steps li.current{color:#fff;background:#25443b}.steps li.completed{color:#dbf2e4}.step-index{border:1px solid var(--side-line);background:var(--side);letter-spacing:.04em;border-radius:50%;flex:0 0 37px;place-items:center;height:37px;font-size:11px;font-weight:800;display:grid}.steps .current .step-index{color:#102b1d;background:#80dba8;border-color:#80dba8}.steps .completed .step-index{color:#b9f8c9;background:#204c37;border-color:#45966b;font-size:15px}.sidebar-note{border:1px solid var(--side-line);background:#ffffff09;border-radius:13px;gap:13px;margin-top:auto;padding:19px 16px;display:flex}.sidebar-note>span{color:#8fe1ae;font-size:20px}.sidebar-note strong{font-size:12px}.sidebar-note p{color:#afcabe;margin:6px 0 0;font-size:11px;line-height:1.6}.main{min-width:0}.topbar{border-bottom:1px solid var(--line);background:var(--surface);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;min-height:80px;padding:20px clamp(24px,4vw,70px);display:flex}.breadcrumb{flex:240px;align-items:center;gap:12px;min-width:0;font-size:12px;display:flex}.breadcrumb span:first-child{color:var(--muted);letter-spacing:.14em;font-size:10px;font-weight:800}.breadcrumb span:nth-child(2){color:var(--muted)}.breadcrumb strong{white-space:normal;overflow-wrap:anywhere;min-width:0;line-height:1.5}.top-actions{flex-shrink:0;align-items:center;gap:18px;display:flex}.local-pill{color:var(--accent-strong);background:var(--accent-tint);letter-spacing:.08em;white-space:nowrap;border-radius:6px;padding:8px 11px;font-size:10px;font-weight:800}.pulse-dot{background:currentColor;border-radius:50%;width:6px;height:6px;margin-right:5px;display:inline-block}.theme-switch{border:1px solid var(--line);background:var(--surface-soft);border-radius:8px;padding:3px;display:flex}.theme-switch button{color:var(--muted);background:0 0;border:0;border-radius:5px;min-width:31px;height:27px;font-size:11px}.theme-switch button.active{background:var(--surface);color:var(--text);font-weight:800;box-shadow:0 1px 4px #0000001f}.content{max-width:1320px;margin:0 auto;padding:52px clamp(24px,4vw,70px) 35px}.eyebrow{color:var(--accent-strong);letter-spacing:.18em;align-items:center;gap:10px;font-size:10px;font-weight:900;display:flex}.eyebrow-line{background:var(--accent);width:21px;height:2px}.eyebrow-count{color:var(--muted);letter-spacing:.09em;margin-inline-start:8px}h1{letter-spacing:-.045em;max-width:860px;margin:15px 0 13px;font-size:clamp(30px,3vw,45px);line-height:1.15}.lede{color:var(--muted);max-width:700px;margin:0 0 30px;font-size:14px;line-height:1.65}.workspace-grid{grid-template-columns:minmax(0,1.65fr) minmax(230px,.8fr);align-items:start;gap:19px;display:grid}.workspace-grid:has(.plan-review){grid-template-columns:1fr}.workspace-grid:has(.plan-review) .context-column{grid-template-columns:repeat(2,minmax(0,1fr))}.context-column{gap:17px;display:grid}.context-card{box-shadow:none;padding:25px}.context-icon{background:var(--accent-tint);width:32px;height:32px;color:var(--accent-strong);border-radius:8px;place-items:center;font-size:19px;display:grid}.context-card h2{letter-spacing:-.015em;margin:17px 0 7px;font-size:14px}.context-card p,.context-card>small{color:var(--muted);margin:0 0 12px;font-size:12px;line-height:1.65;display:block}.context-card code{background:var(--surface-soft);overflow-wrap:anywhere;border-radius:6px;padding:10px;font-size:11px;display:block}.permissions ul{margin:8px 0 13px;padding:0;list-style:none}.permissions li{border-bottom:1px solid var(--line);justify-content:space-between;gap:10px;padding:9px 0;font-size:11px;display:flex}.permissions li small{color:var(--muted);margin-top:3px;display:block}.permissions li strong{color:var(--accent-strong);text-transform:uppercase;font-size:9px}.permission-progress{padding:clamp(20px,4vw,38px)}.permission-progress h2{margin:0 0 8px}.permission-progress p{color:var(--muted);line-height:1.5}.permission-progress ol{margin:20px 0 0;padding:0;list-style:none}.permission-progress li{border-top:1px solid var(--line);align-items:center;gap:14px;padding:12px 0;display:flex}.permission-progress li>span:nth-child(2){flex:1;min-width:0}.permission-progress li small{color:var(--muted);overflow-wrap:anywhere;display:block}.permission-progress-symbol{background:var(--surface-soft);border-radius:50%;flex:none;place-items:center;width:30px;height:30px;display:grid}.permission-progress-done .permission-progress-symbol{color:var(--accent-strong)}.permission-progress-failed .permission-progress-symbol{color:var(--danger,#a33)}.permission-progress-state{text-align:right;max-width:35%;font-size:.8rem;font-weight:600}@media (width<=600px){.permission-progress li{flex-wrap:wrap;align-items:flex-start}.permission-progress-state{text-align:left;max-width:none;margin-left:44px}}footer{color:var(--muted);opacity:.85;letter-spacing:.11em;margin-top:40px;font-size:9px;font-weight:700}footer span{margin:0 8px}[dir=rtl] .context-card code,[dir=rtl] .result-links code,[dir=rtl] .producer-option strong,[dir=rtl] .producer-option small,[dir=rtl] input[type=password]{direction:ltr;unicode-bidi:isolate}.decision-card{min-height:360px;padding:clamp(25px,3vw,40px)}.card-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:29px;display:flex}.card-kicker{color:var(--accent-strong);letter-spacing:.17em;font-size:10px;font-weight:900}.revision{color:var(--muted);letter-spacing:.08em;font-size:10px}.description{white-space:pre-line;color:var(--muted);margin-top:0;font-size:13px;line-height:1.65}.question-heading{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:15px;display:flex}.question-heading h2,.decision-card>label{margin:0 0 10px;font-size:15px;font-weight:700;line-height:1.4;display:block}.phase-tag{color:var(--accent-strong);background:var(--accent-tint);letter-spacing:.07em;border-radius:5px;padding:6px 8px;font-size:9px;font-weight:900}input[type=text],input[type=password],input[type=number],select{border:1px solid var(--control-line);background:var(--surface-soft);width:100%;min-height:46px;color:var(--text);border-radius:8px;padding:10px 13px}textarea{resize:vertical;border:1px solid var(--control-line);background:var(--surface-soft);width:100%;min-height:120px;color:var(--text);font:inherit;border-radius:8px;padding:12px 13px;line-height:1.5}.language-switch{color:var(--muted);white-space:nowrap;align-items:center;gap:7px;font-size:11px;font-weight:700;display:flex}.language-switch select{width:auto;max-width:140px;min-height:32px;padding:5px 8px;font-size:11px}.question-details{border:1px solid var(--line);background:var(--surface-soft);border-radius:8px;margin-bottom:20px;padding:13px 15px;font-size:12px}.question-details summary{cursor:pointer;color:var(--accent-strong);font-weight:800}.question-details dl{grid-template-columns:minmax(90px,130px) minmax(0,1fr);gap:10px 14px;margin:14px 0 0;line-height:1.55;display:grid}.question-details dt{color:var(--text);font-weight:750}.question-details dd{color:var(--muted);margin:0}.question-help-link{margin:-12px 0 18px;font-size:12px;font-weight:700}.discovery-actions{flex-wrap:wrap;align-items:center;gap:8px 14px;margin:4px 0 16px;display:flex}.discovery-actions .field-help{margin:0}.secondary-button{border:1px solid var(--control-line);background:var(--surface-soft);color:var(--accent-strong);font:inherit;border-radius:8px;padding:9px 13px;font-size:12px;font-weight:750}.secondary-button:hover:not(:disabled),.secondary-button:focus-visible{border-color:var(--accent);background:var(--accent-tint)}.secondary-button:disabled{opacity:.55;cursor:not-allowed}.status-review-list{color:var(--muted);margin:6px 0 18px;padding-inline-start:20px;font-size:12px;line-height:1.7}.status-review-list strong{color:var(--text)}.producer-grid{margin-bottom:20px;padding:6px}.check-option.producer-option{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:16px;padding:14px 16px;display:grid}.producer-option>label{cursor:pointer;align-items:flex-start;gap:12px;min-width:0;display:flex}.producer-option>label>input{flex:0 0 17px;margin:3px 0 0}.producer-option>label>span{overflow-wrap:anywhere;gap:5px;min-width:0;display:grid}.producer-option small{color:var(--muted);font-size:10px;line-height:1.5}.producer-option a{font-size:11px;line-height:1.5}.producer-option>a{max-width:140px}.producer-links{gap:8px;max-width:140px;display:grid}.producer-manual-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.producer-manual-fields>label,.project-manual-field{gap:8px;font-size:12px;font-weight:700;line-height:1.5;display:grid}.producer-manual-fields>label:last-child{grid-column:1/-1}.producer-add{margin-top:16px}.project-manual-field{margin-top:20px}input[type=checkbox]{accent-color:var(--accent);width:17px;height:17px}.field-help{color:var(--muted);margin:14px 0 24px;font-size:12px;line-height:1.6}.segmented{gap:9px;display:flex}.segmented button{border:1px solid var(--control-line);color:var(--text);background:var(--surface-soft);border-radius:8px;flex:1;padding:13px;font-weight:700}.segmented button.selected{border-color:var(--accent);background:var(--accent-tint);color:var(--accent-strong)}.check-grid{gap:10px;display:grid}.check-option{background:var(--surface-soft);border:1px solid var(--control-line);border-radius:7px;align-items:center;gap:10px;padding:10px 13px;font-size:12px;display:flex}.choice-list{gap:9px;display:grid}.choice-card{text-align:left;background:var(--surface-soft);width:100%;min-height:52px;color:var(--text);border:1px solid var(--control-line);border-radius:8px;justify-content:space-between;align-items:center;padding:13px 15px;font-size:13px;font-weight:650;display:flex}.choice-card:hover:not(:disabled){border-color:var(--accent);background:var(--accent-tint)}.github-link{background:var(--accent-tint);border:1px solid var(--accent);border-radius:8px;margin:0 0 12px;padding:14px;font-size:13px;font-weight:800;text-decoration:none;display:block}.github-link span{float:right}.plan-review{gap:24px;font-size:12px;line-height:1.65;display:grid}.plan-review>.description,.plan-review .field-help{margin:0}.plan-sections{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;display:grid}.plan-decisions,.plan-inventory,.plan-warnings{background:var(--surface-soft);border:1px solid var(--line);border-radius:8px;min-width:0;padding:20px}.plan-decisions h3,.plan-warnings h3{margin:0 0 14px;font-size:13px;line-height:1.5}.plan-decisions p{margin:0 0 16px}.plan-decisions>:last-child{margin-bottom:0}.plan-decisions dl{gap:0;margin:0;display:grid}.plan-decisions dl>div{border-bottom:1px solid var(--line);grid-template-columns:minmax(130px,35%) minmax(0,1fr);gap:20px;padding:12px 0;display:grid}.plan-decisions dl>div:first-child{padding-top:0}.plan-decisions dl>div:last-child{border-bottom:0;padding-bottom:0}.plan-decisions dt{color:var(--muted)}.plan-decisions dd{overflow-wrap:anywhere;min-width:0;margin:0}.plan-decisions .field-help{margin-top:20px}.plan-decisions ul,.plan-inventory ul,.plan-warnings ul{overflow-wrap:anywhere;margin:0;padding-inline-start:20px;font-size:12px;line-height:1.7}.plan-decisions li+li,.plan-inventory li+li,.plan-warnings li+li{margin-top:6px}.plan-inventory summary{cursor:pointer;font-size:13px;font-weight:750}.plan-inventory summary span:last-child{float:right;color:var(--accent-strong);margin-inline-start:12px}.plan-inventory[open] summary{margin-bottom:16px}.plan-warnings{color:var(--warn);background:var(--warn-bg)}.plan-edit{border-top:1px solid var(--line);padding-top:24px}.plan-edit h3{margin:0 0 4px;font-size:14px}.plan-edit-actions{flex-wrap:wrap;gap:10px;margin-top:16px;display:flex}.button-row{flex-wrap:wrap;align-items:center;gap:12px;margin-top:24px;display:flex}.button-row>.primary{margin-left:auto}.plan-review>.button-row{border-top:1px solid var(--line);margin-top:0;padding-top:24px}.review-pass,.banner{white-space:pre-line;border-radius:8px;margin:0 0 20px;padding:14px 18px;font-size:12px;line-height:1.5}.review-pass{color:var(--accent-strong);background:var(--accent-tint);border:1px solid var(--accent)}.review-pass span{margin-inline-end:8px;font-weight:800}.banner{background:var(--surface-soft);border:1px solid var(--line)}.banner p{margin:5px 0 0}.banner.warning{color:var(--warn);background:var(--warn-bg);border-color:var(--warn)}.banner.error{color:var(--error);background:var(--error-bg);border-color:var(--error)}.banner.success{color:var(--accent-strong);background:var(--accent-tint);border-color:var(--accent)}.banner button{margin-top:12px}.cancel-link{color:var(--muted);background:0 0;border:0;margin-top:18px;padding:5px 0;font-size:12px;text-decoration:underline}.result-card,.waiting-card{max-width:750px;padding:36px}.result-icon{background:var(--accent-tint);width:43px;height:43px;color:var(--accent-strong);border-radius:50%;place-items:center;font-size:22px;display:grid}.result-card h2,.waiting-card h2{margin:18px 0 10px;font-size:21px}.result-card p,.waiting-card p{color:var(--muted);font-size:13px;line-height:1.6}.result-facts{border:1px solid var(--line);background:var(--surface-soft);border-radius:8px;margin:24px 0;padding:20px}.result-facts p{margin:8px 0}.result-facts strong{color:var(--text)}.result-effects{border:1px solid var(--line);background:var(--surface-soft);border-radius:8px;margin:20px 0;padding:14px 17px}.result-effects h3{color:var(--text);margin:0 0 10px;font-size:13px}.result-effects ul{margin:0;padding-left:20px}.result-effects li{overflow-wrap:anywhere;padding:3px 0;font-size:12px}.result-links{flex-wrap:wrap;align-items:center;gap:20px;margin:22px 0;font-size:12px;display:flex}.result-links code{background:var(--surface-soft);border-radius:5px;padding:8px}.spinner{border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:25px;height:25px;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.result-facts h3{margin:0 0 16px;font-size:15px;line-height:1.5}.result-permissions{margin:20px 0 0;padding-inline-start:20px;font-size:13px;line-height:1.65}.result-permissions li+li{margin-top:16px}.result-permissions p{margin:6px 0 0}@media (width<=1100px){.workspace-grid{grid-template-columns:1fr}.context-column{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=780px){.shell{display:block}.sidebar{min-height:0;padding:16px 20px;position:static}.rail-caption,.sidebar-note{display:none}.steps{flex-wrap:wrap;gap:4px;margin-top:18px;display:flex}.steps:before{display:none}.steps li{flex:none;gap:6px;min-height:37px;padding:4px 7px;font-size:11px}.step-index{flex-basis:26px;width:26px;height:26px}.topbar{flex-wrap:wrap;height:auto;min-height:65px;padding:12px 20px}.content{padding:28px 20px}}@media (width<=540px){.context-column,.plan-sections{grid-template-columns:1fr}.workspace-grid:has(.plan-review) .context-column{grid-template-columns:1fr}.top-actions{flex-wrap:wrap;justify-content:space-between;gap:12px;width:100%;min-width:0}.decision-card{padding:22px}.breadcrumb{max-width:100%}h1{font-size:29px}.plan-decisions dl>div{grid-template-columns:1fr;gap:2px}.question-details dl{grid-template-columns:1fr;gap:3px}.question-details dd{margin-bottom:9px}.language-switch{margin-inline-start:auto}}@media (width<=640px){.check-option.producer-option{grid-template-columns:minmax(0,1fr);gap:12px}.producer-option>a,.producer-links{max-width:none;margin-inline-start:29px}.producer-manual-fields{grid-template-columns:minmax(0,1fr)}}.management-status{color:var(--accent-strong);font-weight:750}.management-actions{flex-wrap:wrap;gap:12px;margin-block:24px 32px;display:flex}.management-section{border-top:1px solid var(--line);padding-block:26px}.management-section h2{margin-top:0}.management-section summary{cursor:pointer;color:var(--accent-strong);font-weight:700}.management-settings{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.management-setting{border:1px solid var(--line);background:var(--surface-soft);border-radius:10px;justify-content:space-between;align-items:center;gap:16px;padding:18px;display:flex}.management-setting h3{margin:0 0 8px;font-size:14px}.management-setting p{color:var(--muted);overflow-wrap:anywhere;margin:0}.management-setting .button{flex-shrink:0}.management-values{gap:8px;display:grid}.management-values dt{overflow-wrap:anywhere;margin-top:12px;font-weight:650}.management-values dd{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);margin:0;line-height:1.6}.management-workflow{padding-block:16px}:is(.workspace-grid:has(.management-settings),.workspace-grid:has(.management-status)){grid-template-columns:1fr}.workspace-grid:has(.management-status) .context-column{display:none}@media (width<=800px){.management-settings{grid-template-columns:1fr}}@media (width<=420px){.management-setting{flex-direction:column;align-items:stretch}.management-setting .button{align-self:flex-end}}