@codedrifters/configulator 0.0.296 → 0.0.298

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.
package/lib/index.d.mts CHANGED
@@ -367,6 +367,40 @@ interface AgentSubAgent {
367
367
  /** Optional per-platform overrides for this sub-agent. */
368
368
  readonly platforms?: AgentSubAgentPlatformOverrides;
369
369
  }
370
+ /**
371
+ * A user-invokable slash command. Rendered to `.claude/commands/<name>.md`.
372
+ *
373
+ * Slash commands appear in the Claude Code command picker (typed as
374
+ * `/<name>`) and execute the body as the user prompt. The body may
375
+ * reference any rule, skill, sub-agent, or procedure registered via
376
+ * `AgentConfigOptions` — bundle-shipped commands typically delegate to
377
+ * an existing sub-agent or procedure rather than restating its content.
378
+ *
379
+ * @see https://docs.claude.com/en/docs/claude-code/slash-commands
380
+ */
381
+ interface AgentCommand {
382
+ /**
383
+ * Slash-command name (no leading slash). Lowercase, kebab-case.
384
+ * Becomes the filename stem under `.claude/commands/`.
385
+ * @example 'orchestrate'
386
+ */
387
+ readonly name: string;
388
+ /**
389
+ * One-sentence summary shown in the slash-command picker.
390
+ */
391
+ readonly description: string;
392
+ /**
393
+ * Body content (markdown). Rendered as the command file body verbatim,
394
+ * after the generated YAML frontmatter.
395
+ */
396
+ readonly content: string;
397
+ /**
398
+ * Optional model override for the command's invocation. Maps to a
399
+ * Claude Code model alias (e.g. `opus`, `sonnet`, `haiku`) via
400
+ * {@link resolveModelAlias}.
401
+ */
402
+ readonly model?: AgentModel;
403
+ }
370
404
  /**
371
405
  * An executable procedure (shell script) that ships with a bundle.
372
406
  * Rendered to .claude/procedures/{name} as an executable file.
@@ -521,6 +555,14 @@ interface AgentRuleBundle {
521
555
  readonly subAgents?: ReadonlyArray<AgentSubAgent>;
522
556
  /** Executable procedures (shell scripts) included in this bundle. */
523
557
  readonly procedures?: ReadonlyArray<AgentProcedure>;
558
+ /**
559
+ * Slash commands included in this bundle. Rendered to
560
+ * `.claude/commands/<name>.md`. Bundle commands are merged with
561
+ * consumer-supplied commands; consumers can opt out of any default
562
+ * via `AgentConfigOptions.excludeCommands` or by excluding the
563
+ * whole bundle.
564
+ */
565
+ readonly commands?: ReadonlyArray<AgentCommand>;
524
566
  /**
525
567
  * Claude Code permission entries contributed by this bundle.
526
568
  * Allow and deny entries are merged with the default and user-supplied
@@ -849,6 +891,49 @@ interface ClaudeSettingsConfig {
849
891
  */
850
892
  readonly respectGitignore?: boolean;
851
893
  }
894
+ /*******************************************************************************
895
+ *
896
+ * CLAUDE.md Tuning
897
+ *
898
+ ******************************************************************************/
899
+ /**
900
+ * Tuning knobs for the rendered `CLAUDE.md` file.
901
+ *
902
+ * Today this surface only carries one switch (`injectBundleHooks`),
903
+ * but it exists as its own interface so future CLAUDE.md-shaping
904
+ * options (size caps, section pruning, alternative table-of-contents
905
+ * formats) have an obvious home.
906
+ */
907
+ interface ClaudeMdConfig {
908
+ /**
909
+ * Whether the CLAUDE.md renderer should append the four "see also"
910
+ * subsections to each phased-agent bundle's `<bundle>-workflow`
911
+ * rule.
912
+ *
913
+ * When `true` (the default), each affected `<bundle>-workflow`
914
+ * rule receives up to four short subsections — `## Progress File`,
915
+ * `## Shared Index Editing`, `## Issue Templates`, and
916
+ * `## Skill Evals` — that point readers at the matching
917
+ * convention rule (`progress-file-convention`, `shared-editing-safety`,
918
+ * `issue-templates-convention`, `skill-evals`). The convention
919
+ * rules themselves render unconditionally as standalone top-level
920
+ * CLAUDE.md sections regardless of this setting; these per-bundle
921
+ * subsections are an extra "see also" pointer for readers who land
922
+ * on a workflow rule directly.
923
+ *
924
+ * Set to `false` to drop the per-bundle pointers. The convention
925
+ * rules at the top of CLAUDE.md still convey the policy. This
926
+ * recovers roughly 600 lines (~6,500 tokens per turn) on a typical
927
+ * phased-agent-heavy consumer where the same handful of "see the
928
+ * X rule" stubs are duplicated across every workflow rule.
929
+ *
930
+ * The default is `true` to preserve back-compat for existing
931
+ * consumers that expect the per-agent stubs.
932
+ *
933
+ * @default true
934
+ */
935
+ readonly injectBundleHooks?: boolean;
936
+ }
852
937
  /*******************************************************************************
853
938
  *
854
939
  * Agent Paths Config
@@ -2615,6 +2700,17 @@ interface AgentConfigOptions {
2615
2700
  * @default [AGENT_PLATFORM.CURSOR, AGENT_PLATFORM.CLAUDE]
2616
2701
  */
2617
2702
  readonly platforms?: ReadonlyArray<AgentPlatform>;
2703
+ /**
2704
+ * Default model tier for analyst / writer / profile / research / regulatory /
2705
+ * standards / business-models / customer / industry / meeting / maintenance
2706
+ * sub-agents that don't pin a model explicitly. Defaults to 'balanced' (sonnet).
2707
+ * Override to 'powerful' (opus) to restore pre-2026-05-08 behaviour during a
2708
+ * migration window. The four reviewer/orchestrator agents (orchestrator,
2709
+ * issue-worker, pr-reviewer, requirements-reviewer) ignore this knob and
2710
+ * stay on POWERFUL because their workload requires it.
2711
+ * @default 'balanced'
2712
+ */
2713
+ readonly defaultAgentTier?: "powerful" | "balanced" | "fast";
2618
2714
  /**
2619
2715
  * Additional agent rules to generate alongside auto-detected and bundled rules.
2620
2716
  * Custom rules override bundled rules of the same name.
@@ -2632,6 +2728,23 @@ interface AgentConfigOptions {
2632
2728
  * Custom procedure definitions (executable shell scripts).
2633
2729
  */
2634
2730
  readonly procedures?: ReadonlyArray<AgentProcedure>;
2731
+ /**
2732
+ * Slash commands rendered to `.claude/commands/<name>.md`. Includes any
2733
+ * default commands shipped by an active bundle (e.g. the orchestrator
2734
+ * bundle's `/orchestrate`, `/check-blocked`, `/scan`) plus
2735
+ * consumer-supplied commands. A consumer command whose name collides
2736
+ * with a default wins (override semantics, mirroring `subAgents` /
2737
+ * `skills` / `rules`). Use `excludeCommands` to drop a specific
2738
+ * default by name.
2739
+ */
2740
+ readonly commands?: ReadonlyArray<AgentCommand>;
2741
+ /**
2742
+ * Names of default commands to exclude from rendering. Each entry is
2743
+ * the bare command name (no leading slash). Use this to drop a single
2744
+ * bundle-shipped default without disabling the whole bundle.
2745
+ * @example ['scan']
2746
+ */
2747
+ readonly excludeCommands?: ReadonlyArray<string>;
2635
2748
  /**
2636
2749
  * MCP server configurations. Cross-platform — rendered to the appropriate
2637
2750
  * config file for each platform.
@@ -2720,6 +2833,19 @@ interface AgentConfigOptions {
2720
2833
  * Generated to .claude/settings.json (committed, team-shared).
2721
2834
  */
2722
2835
  readonly claudeSettings?: ClaudeSettingsConfig;
2836
+ /**
2837
+ * CLAUDE.md rendering tuning knobs.
2838
+ *
2839
+ * Currently exposes a single switch (`injectBundleHooks`) that
2840
+ * suppresses the four "see also" subsections each phased-agent
2841
+ * `<bundle>-workflow` rule otherwise receives. The convention
2842
+ * rules themselves still render — this only drops the duplicated
2843
+ * per-bundle pointers. Default behaviour is unchanged for
2844
+ * back-compat.
2845
+ *
2846
+ * @see ClaudeMdConfig
2847
+ */
2848
+ readonly claudeMd?: ClaudeMdConfig;
2723
2849
  /**
2724
2850
  * Cursor-specific configuration. Generates .cursor/hooks.json for
2725
2851
  * lifecycle hooks and .cursorignore / .cursorindexingignore for
@@ -3164,12 +3290,51 @@ declare class AgentConfig extends Component {
3164
3290
  */
3165
3291
  private static hasActiveTierExamples;
3166
3292
  /**
3167
- * Merges default Claude permissions with bundle and user-supplied settings.
3168
- *
3169
- * Merge order: defaults → bundle permissions → user-supplied entries.
3170
- * `defaultMode` defaults to `"dontAsk"` unless overridden.
3293
+ * Merges default Claude permissions and hooks with bundle and
3294
+ * user-supplied settings.
3295
+ *
3296
+ * Permission merge order: defaults bundle permissions → user-supplied
3297
+ * entries. Both `allow` and `deny` are deduped via
3298
+ * `Array.from(new Set(...))`; V8 `Set` iteration preserves insertion
3299
+ * order, so the final ordering is defaults first, then bundle, then
3300
+ * user, with duplicates removed (first-occurrence wins). `defaultMode`
3301
+ * defaults to `"dontAsk"` unless overridden — see the inline comment
3302
+ * on the literal below for the autonomous-worker rationale.
3303
+ *
3304
+ * Hooks merge: consumer-supplied entries first, then default entries
3305
+ * (Stop, PostToolUse), deduped by `(matcher, JSON-serialized hooks)`.
3306
+ * Defaults are skipped entirely when `disableAllHooks: true` is set —
3307
+ * the `disableAllHooks` flag passes through to the rendered file so
3308
+ * Claude Code suppresses every project-level hook at runtime, and the
3309
+ * defaults are dropped at synth time so the rendered file does not
3310
+ * carry orphan entries that would re-fire if the operator later flipped
3311
+ * the flag back off.
3312
+ *
3313
+ * Env merge: defaults from `DEFAULT_CLAUDE_ENV` (e.g.
3314
+ * `ENABLE_TOOL_SEARCH=1`) layer first, then consumer-supplied
3315
+ * `claudeSettings.env` entries override on key collision. Sibling keys
3316
+ * from both sources land in the rendered file.
3171
3317
  */
3172
3318
  private static mergeClaudeDefaults;
3319
+ /**
3320
+ * Merge default lifecycle hooks (Stop, PostToolUse) with consumer-
3321
+ * supplied entries on `claudeSettings.hooks`. Consumer entries appear
3322
+ * first so a downstream override that wires a faster lint/format hook
3323
+ * runs ahead of the defaults; defaults are appended after.
3324
+ *
3325
+ * Returns `undefined` when neither defaults nor consumer entries
3326
+ * remain — the renderer skips the `hooks` key entirely in that case
3327
+ * so opt-out repos do not ship an empty `"hooks": {}` object.
3328
+ *
3329
+ * Defaults are gated on `disableAllHooks !== true`. When the flag is
3330
+ * set we still pass through any consumer-supplied entries (the
3331
+ * runtime-level `disableAllHooks: true` is what suppresses execution),
3332
+ * but we never inject the bundle defaults. That keeps the disable-all
3333
+ * escape hatch idempotent: flipping the flag drops the bundle's
3334
+ * default surface area instead of leaving the entries on disk for a
3335
+ * future re-enable.
3336
+ */
3337
+ private static mergeClaudeHooks;
3173
3338
  private readonly options;
3174
3339
  private cachedBundles?;
3175
3340
  private cachedPaths?;
@@ -3215,6 +3380,16 @@ declare class AgentConfig extends Component {
3215
3380
  private resolveSkills;
3216
3381
  private resolveSubAgents;
3217
3382
  private resolveProcedures;
3383
+ /**
3384
+ * Resolves the final list of slash commands by merging bundle-shipped
3385
+ * defaults with consumer-supplied entries. Mirrors {@link resolveSkills}
3386
+ * and {@link resolveSubAgents}: auto-detected bundles contribute first,
3387
+ * force-included bundles overlay, and consumer commands override on
3388
+ * name collision. Names listed in `excludeCommands` are dropped after
3389
+ * the merge so consumers can opt out of a single default without
3390
+ * disabling the whole bundle.
3391
+ */
3392
+ private resolveCommands;
3218
3393
  /**
3219
3394
  * Resolves template variables in rule content using project metadata.
3220
3395
  * Emits synthesis warnings for rules with unresolved variables.
@@ -3388,6 +3563,96 @@ declare const DEFAULT_AGENT_PATHS: ResolvedAgentPaths;
3388
3563
  */
3389
3564
  declare function resolveAgentPaths(paths?: AgentPathsConfig): ResolvedAgentPaths;
3390
3565
 
3566
+ /**
3567
+ * One row in the rendered agent registry table. Each phased-agent
3568
+ * bundle that previously shipped its own `<bundle>-workflow` rule
3569
+ * contributes exactly one entry here so the registry can answer
3570
+ * "which agent handles X" without rendering 18 prose summaries
3571
+ * into CLAUDE.md.
3572
+ */
3573
+ interface AgentRegistryEntry {
3574
+ /** Bundle name as it appears in `buildBuiltInBundles`, e.g. `bcm-writer`. */
3575
+ readonly bundle: string;
3576
+ /** Primary user-invocable skill, with leading slash, e.g. `/write-bcm`. */
3577
+ readonly skill: string;
3578
+ /** Sub-agent name in `.claude/agents/`, e.g. `bcm-writer`. */
3579
+ readonly agent: string;
3580
+ /**
3581
+ * Function that resolves the canonical output path for this
3582
+ * bundle from the project's resolved agent-path roots. Returning
3583
+ * an empty string signals "no filesystem output path" (used by
3584
+ * pr-review). Path-aware so consumer overrides on
3585
+ * `AgentConfigOptions.paths` propagate into the rendered table.
3586
+ */
3587
+ readonly resolveOutputPath: (paths: ResolvedAgentPaths) => string;
3588
+ /**
3589
+ * One-line purpose description. Lifted from the first prose
3590
+ * sentence of the original `<bundle>-workflow` rule so consumers
3591
+ * keep the same routing signal.
3592
+ */
3593
+ readonly purpose: string;
3594
+ /**
3595
+ * Name of the original `<bundle>-workflow` rule. Used by the
3596
+ * registry helper to filter the resolved bundle list and assert
3597
+ * (via the test suite) that no bundle still ships its workflow
3598
+ * rule into the Claude platform output.
3599
+ */
3600
+ readonly workflowRuleName: string;
3601
+ }
3602
+ /**
3603
+ * Static registry of every phased-agent bundle that contributes a
3604
+ * routing row. Order is alphabetical by bundle name so the
3605
+ * rendered table is stable across runs and consumer-side diffs are
3606
+ * minimal. Adding a new phased-agent bundle requires appending one
3607
+ * row here and suppressing its `<bundle>-workflow` rule via
3608
+ * `platforms: { claude: { exclude: true } }`.
3609
+ */
3610
+ declare const AGENT_REGISTRY_ENTRIES: ReadonlyArray<AgentRegistryEntry>;
3611
+ /**
3612
+ * The set of `<bundle>-workflow` rule names that the registry
3613
+ * subsumes. Used both to suppress those rules from the Claude
3614
+ * platform output and to assert in tests that no bundle still
3615
+ * ships its prose summary into CLAUDE.md.
3616
+ */
3617
+ declare const SUPPRESSED_WORKFLOW_RULE_NAMES: ReadonlyArray<string>;
3618
+ /**
3619
+ * Returns `true` when the supplied rule name belongs to a
3620
+ * phased-agent `<bundle>-workflow` rule whose routing summary now
3621
+ * lives in the shared `agent-registry` rule.
3622
+ */
3623
+ declare function isSuppressedWorkflowRule(name: string): boolean;
3624
+ /**
3625
+ * Reverse map from a `<bundle>-workflow` rule name to its owning
3626
+ * bundle name. Used by the registry consolidation loop to detect
3627
+ * when a consumer has targeted a bundle with a
3628
+ * `features.customDocSections` entry — those bundles keep
3629
+ * rendering their workflow rule into CLAUDE.md so the consumer-
3630
+ * supplied prose has somewhere to live. Returns `undefined` for
3631
+ * any rule name that is not in the registry's suppression list.
3632
+ */
3633
+ declare function bundleNameForWorkflowRule(ruleName: string): string | undefined;
3634
+ /**
3635
+ * Build the consolidated agent-registry rule for the supplied
3636
+ * resolved bundle list. The helper:
3637
+ *
3638
+ * 1. Filters `AGENT_REGISTRY_ENTRIES` to bundles that are actually
3639
+ * active in the consumer's resolved bundle set (so a consumer
3640
+ * that excludes `bcm-writer` doesn't see a row for it).
3641
+ * 2. Renders one alphabetically-sorted markdown table row per
3642
+ * surviving entry, with skill / agent / bundle / output-path /
3643
+ * purpose columns.
3644
+ * 3. Returns a single ALWAYS-scoped `agent-registry` rule whose
3645
+ * body opens with a 2-3 sentence preamble explaining the
3646
+ * routing model and pointing at `.claude/agents/<name>.md` for
3647
+ * full prompts and the cross-cutting convention rules at the
3648
+ * top of CLAUDE.md.
3649
+ *
3650
+ * Consumers with no phased-agent bundle active receive `undefined`
3651
+ * and the rule is dropped from the resolved set — there is no
3652
+ * routing to summarise.
3653
+ */
3654
+ declare function buildAgentRegistryRule(bundles: ReadonlyArray<AgentRuleBundle>, paths: ResolvedAgentPaths): AgentRule | undefined;
3655
+
3391
3656
  /**
3392
3657
  * Agenda bundle — enabled by default.
3393
3658
  *
@@ -3601,7 +3866,7 @@ declare const businessModelsBundle: AgentRuleBundle;
3601
3866
  * `/analyze-segment`), and `type:company-profile` plus `company:*`
3602
3867
  * phase labels for the six phases.
3603
3868
  */
3604
- declare function buildCompanyProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): AgentRuleBundle;
3869
+ declare function buildCompanyProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, tier?: AgentModel): AgentRuleBundle;
3605
3870
  /**
3606
3871
  * Default-paths instance of the company-profile bundle, preserved for
3607
3872
  * backward compatibility with consumers that import the const
@@ -3638,7 +3903,7 @@ declare const companyProfileBundle: AgentRuleBundle;
3638
3903
  * unmet need to `req:scan` seed via the shared software-profile
3639
3904
  * feature matrix.
3640
3905
  */
3641
- declare function buildCustomerProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): AgentRuleBundle;
3906
+ declare function buildCustomerProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, tier?: AgentModel): AgentRuleBundle;
3642
3907
  /**
3643
3908
  * Default-paths instance of the customer-profile bundle, preserved
3644
3909
  * for backward compatibility with consumers that import the const
@@ -3805,7 +4070,7 @@ declare const jestBundle: AgentRuleBundle;
3805
4070
  * automatically pick up the label taxonomy through the sync-labels
3806
4071
  * workflow.
3807
4072
  */
3808
- declare function buildMaintenanceAuditBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): AgentRuleBundle;
4073
+ declare function buildMaintenanceAuditBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, tier?: AgentModel): AgentRuleBundle;
3809
4074
  /**
3810
4075
  * Default-paths instance of the maintenance-audit bundle, preserved
3811
4076
  * for backward compatibility with consumers that import the const
@@ -3815,8 +4080,17 @@ declare function buildMaintenanceAuditBundle(paths?: ResolvedAgentPaths, issueDe
3815
4080
  declare const maintenanceAuditBundle: AgentRuleBundle;
3816
4081
 
3817
4082
  /**
3818
- * Meeting analysis bundle included by default.
3819
- * Provides a 4-phase meeting transcript processing workflow.
4083
+ * Build the meeting-analysis bundle with the supplied default sub-agent
4084
+ * model tier. The tier knob lets consumers globally demote the
4085
+ * `meeting-analyst` sub-agent to BALANCED (sonnet) — which is the
4086
+ * post-2026-05-08 default — without forking the bundle.
4087
+ */
4088
+ declare function buildMeetingAnalysisBundle(tier?: AgentModel): AgentRuleBundle;
4089
+ /**
4090
+ * Default-tier instance of the meeting-analysis bundle, preserved for
4091
+ * backward compatibility with consumers that import the const directly.
4092
+ * The factory above is the canonical entry point when a consumer
4093
+ * supplies `AgentConfigOptions.defaultAgentTier`.
3820
4094
  */
3821
4095
  declare const meetingAnalysisBundle: AgentRuleBundle;
3822
4096
 
@@ -4656,7 +4930,7 @@ declare const orchestratorBundle: AgentRuleBundle;
4656
4930
  * skills (`/profile-person`, `/refresh-person`), and `type:people-profile`
4657
4931
  * plus `people:*` phase labels for the four phases.
4658
4932
  */
4659
- declare function buildPeopleProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): AgentRuleBundle;
4933
+ declare function buildPeopleProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, tier?: AgentModel): AgentRuleBundle;
4660
4934
  /**
4661
4935
  * Default-paths instance of the people-profile bundle, preserved for
4662
4936
  * backward compatibility with consumers that import the const
@@ -5601,7 +5875,7 @@ declare const slackBundle: AgentRuleBundle;
5601
5875
  * skills (`/profile-software` and `/map-software`), and
5602
5876
  * `type:software-profile` plus `software:*` phase labels.
5603
5877
  */
5604
- declare function buildSoftwareProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): AgentRuleBundle;
5878
+ declare function buildSoftwareProfileBundle(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, tier?: AgentModel): AgentRuleBundle;
5605
5879
  /**
5606
5880
  * Default-paths instance of the software-profile bundle, preserved
5607
5881
  * for backward compatibility with consumers that import the const
@@ -5713,7 +5987,7 @@ declare const vitestBundle: AgentRuleBundle;
5713
5987
  * Bundles that do not read any agent path (typescript, jest,
5714
5988
  * pnpm, etc.) stay as const exports and are referenced unchanged.
5715
5989
  */
5716
- declare function buildBuiltInBundles(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults): ReadonlyArray<AgentRuleBundle>;
5990
+ declare function buildBuiltInBundles(paths?: ResolvedAgentPaths, issueDefaults?: ResolvedIssueDefaults, defaultAgentTier?: AgentModel): ReadonlyArray<AgentRuleBundle>;
5717
5991
  /**
5718
5992
  * Built-in rule bundles assembled with the default agent paths.
5719
5993
  * Preserved for backward compatibility with tests and consumers
@@ -7834,11 +8108,11 @@ declare const VERSION: {
7834
8108
  * Version of `pnpm/action-setup` to use in GitHub workflows.
7835
8109
  * Tracks the version projen currently emits (see node_modules/projen/lib/javascript/node-project.js).
7836
8110
  */
7837
- readonly PNPM_ACTION_SETUP_VERSION: "v5";
8111
+ readonly PNPM_ACTION_SETUP_VERSION: "v6.0.5";
7838
8112
  /**
7839
8113
  * Version of PNPM to use in workflows at github actions.
7840
8114
  */
7841
- readonly PNPM_VERSION: "10.33.3";
8115
+ readonly PNPM_VERSION: "11.0.8";
7842
8116
  /**
7843
8117
  * Version of Projen to use.
7844
8118
  */
@@ -7993,6 +8267,33 @@ interface PnpmWorkspaceOptions {
7993
8267
  * See: https://pnpm.io/settings#minimumreleaseageexclude
7994
8268
  */
7995
8269
  readonly minimumReleaseAgeExclude?: Array<string>;
8270
+ /**
8271
+ * A map of package names to booleans controlling whether each package may
8272
+ * execute "preinstall", "install", and/or "postinstall" scripts during
8273
+ * installation. Set a package's value to `true` to allow lifecycle scripts;
8274
+ * set it to `false` to silently block them without a warning.
8275
+ *
8276
+ * pnpm 11 replaced the legacy `onlyBuiltDependencies` (allow-list) and
8277
+ * `ignoredBuiltDependencies` (deny-list) settings with this single
8278
+ * `allowBuilds` map. Configulator translates the deprecated input fields
8279
+ * automatically: entries from `onlyBuiltDependencies` map to `true` and
8280
+ * entries from `ignoredBuiltDependencies` map to `false`. When a key
8281
+ * appears in both `allowBuilds` and one of the deprecated fields, the
8282
+ * explicit `allowBuilds` value wins.
8283
+ *
8284
+ * For cross-version compatibility, configulator emits BOTH the new
8285
+ * `allowBuilds` map AND the legacy `onlyBuiltDependencies` /
8286
+ * `ignoredBuiltDependencies` arrays in the generated YAML so consumers
8287
+ * on either pnpm 10 or pnpm 11 see correct lifecycle-script behavior
8288
+ * without changing their input.
8289
+ *
8290
+ * See: https://pnpm.io/settings#allowbuilds
8291
+ *
8292
+ * @default none (empty object)
8293
+ */
8294
+ readonly allowBuilds?: {
8295
+ [packageName: string]: boolean;
8296
+ };
7996
8297
  /**
7997
8298
  * A list of package names that are allowed to execute "preinstall",
7998
8299
  * "install", and/or "postinstall" scripts during installation. Only the
@@ -8006,6 +8307,12 @@ interface PnpmWorkspaceOptions {
8006
8307
  *
8007
8308
  * See: https://pnpm.io/settings#onlybuiltdependencies
8008
8309
  *
8310
+ * @deprecated Deprecated in pnpm 11; configulator emits both legacy and
8311
+ * new keys for cross-version compatibility — pnpm 10 honors
8312
+ * the legacy keys, pnpm 11 honors `allowBuilds`. Prefer
8313
+ * `allowBuilds` as the input field going forward; entries
8314
+ * supplied here translate to `allowBuilds[<package>] = true`.
8315
+ *
8009
8316
  * @default none (empty array)
8010
8317
  */
8011
8318
  readonly onlyBuiltDependencies?: Array<string>;
@@ -8019,6 +8326,12 @@ interface PnpmWorkspaceOptions {
8019
8326
  *
8020
8327
  * https://pnpm.io/settings#ignoredbuiltdependencies
8021
8328
  *
8329
+ * @deprecated Deprecated in pnpm 11; configulator emits both legacy and
8330
+ * new keys for cross-version compatibility — pnpm 10 honors
8331
+ * the legacy keys, pnpm 11 honors `allowBuilds`. Prefer
8332
+ * `allowBuilds` as the input field going forward; entries
8333
+ * supplied here translate to `allowBuilds[<package>] = false`.
8334
+ *
8022
8335
  * @default none (empty array)
8023
8336
  */
8024
8337
  readonly ignoredBuiltDependencies?: Array<string>;
@@ -8129,6 +8442,21 @@ declare class PnpmWorkspace extends Component {
8129
8442
  * See: https://pnpm.io/settings#minimumreleaseageexclude
8130
8443
  */
8131
8444
  minimumReleaseAgeExclude: Array<string>;
8445
+ /**
8446
+ * A map of package names to booleans controlling whether each package may
8447
+ * execute lifecycle scripts during install. `true` allows the scripts;
8448
+ * `false` silently blocks them.
8449
+ *
8450
+ * pnpm 11+ replaced `onlyBuiltDependencies` and `ignoredBuiltDependencies`
8451
+ * with this single map. Configulator translates the deprecated input
8452
+ * fields into `allowBuilds` automatically and emits both legacy and new
8453
+ * keys in the generated YAML for pnpm 10/11 cross-version compatibility.
8454
+ *
8455
+ * See: https://pnpm.io/settings#allowbuilds
8456
+ */
8457
+ allowBuilds: {
8458
+ [packageName: string]: boolean;
8459
+ };
8132
8460
  /**
8133
8461
  * A list of package names that are allowed to execute "preinstall",
8134
8462
  * "install", and/or "postinstall" scripts during installation. Only the
@@ -8141,6 +8469,12 @@ declare class PnpmWorkspace extends Component {
8141
8469
  * versions of the package may run lifecycle scripts:
8142
8470
  *
8143
8471
  * See: https://pnpm.io/settings#onlybuiltdependencies
8472
+ *
8473
+ * @deprecated Deprecated in pnpm 11; configulator emits both legacy and
8474
+ * new keys for cross-version compatibility — pnpm 10 honors
8475
+ * the legacy keys, pnpm 11 honors `allowBuilds`. Prefer
8476
+ * `allowBuilds` as the input field going forward; entries
8477
+ * supplied here translate to `allowBuilds[<package>] = true`.
8144
8478
  */
8145
8479
  onlyBuiltDependencies: Array<string>;
8146
8480
  /**
@@ -8152,6 +8486,12 @@ declare class PnpmWorkspace extends Component {
8152
8486
  * lifecycle scripts are not needed.
8153
8487
  *
8154
8488
  * https://pnpm.io/settings#ignoredbuiltdependencies
8489
+ *
8490
+ * @deprecated Deprecated in pnpm 11; configulator emits both legacy and
8491
+ * new keys for cross-version compatibility — pnpm 10 honors
8492
+ * the legacy keys, pnpm 11 honors `allowBuilds`. Prefer
8493
+ * `allowBuilds` as the input field going forward; entries
8494
+ * supplied here translate to `allowBuilds[<package>] = false`.
8155
8495
  */
8156
8496
  ignoredBuiltDependencies: Array<string>;
8157
8497
  /**
@@ -9418,6 +9758,25 @@ declare class AwsCdkProject extends awscdk.AwsCdkTypeScriptApp {
9418
9758
  addDeploymentTarget(options: AwsDeploymentTargetOptions): AwsDeploymentTarget;
9419
9759
  }
9420
9760
 
9761
+ /**
9762
+ * Emits a `.nvmrc` file at the project root containing the Node.js
9763
+ * version pinned in {@link VERSION.NODE_WORKFLOWS}.
9764
+ *
9765
+ * The file gives `nvm`, `fnm`, `volta`, and IDE plugins a single
9766
+ * source of truth for the Node version local development should use,
9767
+ * matching the version every CI workflow installs via
9768
+ * `actions/setup-node`. Without it, devs on hosts whose default Node
9769
+ * is older than the floor required by tooling (Astro 6, Starlight,
9770
+ * pnpm 11) silently break after a regen.
9771
+ *
9772
+ * Projen has no built-in `.nvmrc` knob — the closest input is
9773
+ * `workflowNodeVersion`, which only drives CI. This component closes
9774
+ * the local-dev gap.
9775
+ */
9776
+ declare class Nvmrc extends Component {
9777
+ constructor(project: Project$1);
9778
+ }
9779
+
9421
9780
  /**
9422
9781
  * Provides structured project metadata consumed by AgentConfig, skills,
9423
9782
  * and other configulator features at synthesis time.
@@ -9679,4 +10038,80 @@ declare const COMPLETE_JOB_ID = "complete";
9679
10038
  */
9680
10039
  declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
9681
10040
 
9682
- export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AGENT_TIER_ROLES, AGENT_TIER_VALUES, AUDIT_CATEGORY_ORDER, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentFeaturesConfig, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type AgentTier, type AgentTierConfig, type AgentTierEntry, type AnalyzeTsDocCoverageOptions, type ApiDiffCheckOptions, type ApiDiffFinding, type ApiDiffResult, ApiExtractor, type ApiExtractorOptions, type ApiExtractorReportOptions, type ApiSurfaceEntry, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, AuditCategory, type AuditCheckRunner, type AuditCheckRunnerContext, type AuditFinding, type AuditFindingBase, type AuditLocation, AuditMode, type AuditReport, AuditSeverity, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, BUNDLE_OWNERSHIP, type BundleOwnership, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CompileFencedSamplesOptions, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, type CustomDocSection, DEFAULT_AC_THRESHOLDS, DEFAULT_AGENT_PATHS, DEFAULT_AGENT_TIERS, DEFAULT_API_EXTRACTOR_CONFIG_FILE, DEFAULT_API_EXTRACTOR_ENTRY_POINT, DEFAULT_API_EXTRACTOR_REPORT_FILENAME, DEFAULT_API_EXTRACTOR_REPORT_FOLDER, DEFAULT_AUDIT_REPORT_DIR, DEFAULT_BUNDLE_OVERRIDES, DEFAULT_DECOMPOSITION_TEMPLATE, DEFAULT_DISPATCH_MODEL, DEFAULT_DISPATCH_TO_HOUSEKEEPING_RATIO, DEFAULT_HOUSEKEEPING_MODEL, DEFAULT_ISSUE_PRIORITY, DEFAULT_ISSUE_STATUS, DEFAULT_ISSUE_TEMPLATES_BUNDLE_PATH_PATTERNS, DEFAULT_ISSUE_TEMPLATES_EMIT_CHECKER, DEFAULT_ISSUE_TEMPLATES_EMIT_STARTER, DEFAULT_ISSUE_TEMPLATES_ENABLED, DEFAULT_ISSUE_TEMPLATES_PATH, DEFAULT_ISSUE_TEMPLATES_REQUIRE_REFERENCE, DEFAULT_OFF_PEAK_CRON_EXAMPLE, DEFAULT_PARTIAL_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_PRIORITY_LABELS, DEFAULT_PRODUCT_CONTEXT_PATH, DEFAULT_PROGRESS_FILES_ENABLED, DEFAULT_PROGRESS_FILES_FILENAME_PATTERN, DEFAULT_PROGRESS_FILES_FORMAT, DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS, DEFAULT_PROGRESS_FILES_STATE_DIR, DEFAULT_REQUIRE_PRODUCT_CONTEXT, DEFAULT_RESOLVED_ISSUE_DEFAULTS, DEFAULT_SAMPLE_COMPILER_OPTIONS, DEFAULT_SCHEDULED_TASKS_ROOT, DEFAULT_SCHEDULED_TASK_ENTRIES, DEFAULT_SHARED_EDITING_CONFLICT_STRATEGY, DEFAULT_SHARED_EDITING_EMIT_HELPER, DEFAULT_SHARED_EDITING_ENABLED, DEFAULT_SHARED_EDITING_VERIFY_COMMIT, DEFAULT_SHARED_INDEX_PATHS, DEFAULT_SKILL_EVALS_EMIT_RUNNER, DEFAULT_SKILL_EVALS_ENABLED, DEFAULT_SKILL_EVALS_SKILLS_ROOT, DEFAULT_SOURCES_THRESHOLDS, DEFAULT_STATE_FILE_PATH, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, DEFAULT_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_UNBLOCK_DEPENDENTS_ENABLED, DEFAULT_UPSTREAM_CONFIGULATOR_ENABLED, DOCS_SYNC_AUDIT_SCHEMA_VERSION, type DeployWorkflowOptions, type DeploymentMetadata, type DocReferenceRecord, type EffectiveScopeThresholds, type ExtractDocReferencesOptions, type ExtractFencedSamplesOptions, type FencedSampleRecord, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, type IssueDefaultsConfig, type IssueDefaultsOverride, type IssueDefaultsPriority, type IssueDefaultsStatus, type IssueTemplatesConfig, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, type LinkFailureFinding, MAX_LABEL_DESCRIPTION_LENGTH, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MeetingArea, type MeetingScope, type MeetingType, type MeetingTypeKind, type MeetingsConfig, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PROGRESS_FILES_FORMAT_VALUES, PnpmWorkspace, type PnpmWorkspaceOptions, type PriorityRule, type ProgressFilesConfig, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type ReferenceMismatchCheckOptions, type ReferenceMismatchFinding, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedAgentTier, type ResolvedIssueDefaults, type ResolvedIssueDefaultsEntry, type ResolvedIssueTemplates, type ResolvedProgressFiles, type ResolvedProjectMetadata, type ResolvedRunRatio, type ResolvedScheduledTask, type ResolvedScheduledTasks, type ResolvedScopeGate, type ResolvedScopeGateBundleOverride, type ResolvedSharedEditing, type ResolvedSkillEvals, type ResolvedUnblockDependents, type RunRatioConfig, type RunScanOptions, type RunScanResult, SCHEDULED_TASK_MODEL_VALUES, SCOPE_CLASS_VALUES, SHARED_EDITING_CONFLICT_STRATEGY_VALUES, STARLIGHT_ROLE, type SampleCompilationFailure, type SampleFailureFinding, SampleLang, type ScheduledTaskEntry, type ScheduledTaskModel, type ScheduledTaskOverride, type ScheduledTasksConfig, type ScopeClass, type ScopeGateBundleOverride, type ScopeGateConfig, type ScopeGateThresholds, type SharedEditingConfig, type SkillEvalsConfig, type SlackMetadata, type SourceTierExamples, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TsDocCoverageKind, type TsDocCoverageRecord, type TsdocCoverageCheckOptions, type TsdocCoverageFinding, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, UNKNOWN_TYPE_FALLBACK_TIER, type UnblockDependentsConfig, type UpstreamConfigulatorConfig, VALID_PRIORITY_VALUES, VALID_STATUS_VALUES, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, agendaBundle, analyzeTsDocCoverage, auditReportJsonSchema, awsCdkBundle, baseBundle, bcmWriterBundle, buildBaseBundle, buildBcmWriterBundle, buildBuiltInBundles, buildBusinessModelsBundle, buildCheckBlockedProcedure, buildCompanyProfileBundle, buildCustomerProfileBundle, buildDocsSyncBundle, buildIndustryDiscoveryBundle, buildMaintenanceAuditBundle, buildOrchestratorConventionsContent, buildPeopleProfileBundle, buildRegulatoryResearchBundle, buildReport, buildRequirementsAnalystBundle, buildRequirementsReviewerBundle, buildRequirementsWriterBundle, buildResearchPipelineBundle, buildSoftwareProfileBundle, buildStandardsResearchBundle, buildUnblockDependentsProcedure, businessModelsBundle, checkDocSamplesProcedure, checkLinksProcedure, classifyIssueScope, classifyRun, companyProfileBundle, compileFencedSamples, createApiDiffCheck, createReferenceMismatchCheck, createTsdocCoverageCheck, customerProfileBundle, diffApiRollups, docsSyncBundle, emptyCategoryBuckets, extractApiProcedure, extractDocReferences, extractFencedSamples, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, hasAnyDocsEmittingBundle, hasAnyDownstreamIssueKindBundle, industryDiscoveryBundle, isPhaseLabelOwnedByExcluded, isScheduledTaskOwnedByExcluded, isTypeLabelOwnedByExcluded, jestBundle, labelsForPhase, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, parseApiRollup, peopleProfileBundle, persistAuditReport, pnpmBundle, prReviewBundle, projenBundle, referenceRecordToFinding, regulatoryResearchBundle, renderAgentTierCaseStatement, renderAgentTierSection, renderCheckDocSamplesProcedure, renderCheckLinksProcedure, renderCustomDocSectionBlock, renderCustomDocSections, renderExtractApiProcedure, renderFocusSection, renderIssueTemplatesBundleHook, renderIssueTemplatesCheckerScript, renderIssueTemplatesRuleContent, renderIssueTemplatesStarterPage, renderMeetingTypesSection, renderPriorityRulesSection, renderProgressFileName, renderProgressFilePath, renderProgressFilesBundleHook, renderProgressFilesRuleContent, renderRunRatioSection, renderRunRatioShellHelpers, renderScheduledTaskSkillFile, renderScheduledTasksSection, renderScopeGateSection, renderScopeGateShellHelpers, renderSharedEditingBundleHook, renderSharedEditingHelperScript, renderSharedEditingRuleContent, renderSkillEvalsBundleHook, renderSkillEvalsRuleContent, renderSkillEvalsRunnerScript, renderSourceTierExamples, renderStubIndexConventionRuleContent, renderUnblockDependentsScript, renderUnblockDependentsSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAgentTiers, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveIssueDefaults, resolveIssueTemplates, resolveModelAlias, resolveOrchestratorAssets, resolveOutdirFromPackageName, resolveOverrideForLabels, resolveProgressFiles, resolveRunRatio, resolveScheduledTasks, resolveScopeGate, resolveSharedEditing, resolveSkillEvals, resolveTemplateVariables, resolveTypeScriptProjectOutdir, resolveUnblockDependents, runScan, slackBundle, softwareProfileBundle, standardsResearchBundle, tsdocRecordToFindings, turborepoBundle, typescriptBundle, upstreamConfigulatorDocsBundle, validateAgentTierConfig, validateIssueDefaultsConfig, validateIssueTemplatesConfig, validateMonorepoLayout, validateProgressFilesConfig, validateRunRatioConfig, validateScheduledTasksConfig, validateScopeGateConfig, validateSharedEditingConfig, validateSkillEvalsConfig, validateStarlightSingleton, validateUnblockDependentsConfig, vitestBundle };
10041
+ /**
10042
+ * Rewrites every `pnpm/action-setup@vX` step `uses` field reachable from
10043
+ * a project's GitHub component (and its sub-projects) to the version
10044
+ * pinned in {@link VERSION.PNPM_ACTION_SETUP_VERSION}.
10045
+ *
10046
+ * Projen's NodeProject and JsiiProject both hardcode a `pnpm/action-setup`
10047
+ * pin in their generated build / release / upgrade workflows. When that
10048
+ * pin lags behind the version required by the pnpm release we run in CI
10049
+ * (e.g. v5 cannot install pnpm 11), the action installs the wrong pnpm
10050
+ * version and CI breaks. This helper post-patches every workflow owned
10051
+ * by `project.github` so the pin tracks our centralised constant.
10052
+ *
10053
+ * Two passes run in sequence:
10054
+ *
10055
+ * 1. **Eager step arrays.** Walks every {@link Component} on the
10056
+ * project (and on its sub-projects) for the well-known fields
10057
+ * enumerated in {@link STEP_ARRAY_FIELDS}. Projen's BuildWorkflow
10058
+ * and Release components hold their pnpm-setup steps in these
10059
+ * arrays before the workflow's lazy step closures resolve them.
10060
+ * 2. **Direct workflow jobs.** Walks every job step on every
10061
+ * `GithubWorkflow` for jobs whose steps are eagerly populated
10062
+ * (e.g. the upgrade workflow). Steps held inside lazy closures
10063
+ * are skipped — those are reached via pass 1.
10064
+ *
10065
+ * @param project The project whose GitHub workflows should be patched.
10066
+ */
10067
+ declare function pinPnpmActionSetup(project: Project$1): void;
10068
+
10069
+ /**
10070
+ * Rewrites every Node-version source reachable from a project's
10071
+ * GitHub component (and its sub-projects) to the version pinned in
10072
+ * {@link VERSION.NODE_WORKFLOWS}.
10073
+ *
10074
+ * Projen hardcodes `node-version: "lts/*"` in its release workflow
10075
+ * generator (via {@code Publisher.workflowNodeVersion}); configulator-
10076
+ * owned workflows already pass through {@link VERSION.NODE_WORKFLOWS}.
10077
+ * Without this patch, the two sources disagree (release workflows
10078
+ * install whatever Node lts/* resolves to; build / upgrade workflows
10079
+ * install Node 24). This helper post-patches every Node-version
10080
+ * source so a single source of truth — the centralised
10081
+ * {@link VERSION.NODE_WORKFLOWS} constant — drives every workflow
10082
+ * this repo and its consumers generate.
10083
+ *
10084
+ * Three passes run in sequence:
10085
+ *
10086
+ * 1. **Component Node-version fields.** Walks every {@link Component}
10087
+ * on the project (and on its sub-projects) and rewrites the
10088
+ * well-known fields enumerated in {@link NODE_VERSION_FIELDS} —
10089
+ * notably {@code Publisher.workflowNodeVersion}, which projen
10090
+ * renders into {@code tools.node.version} on the publish job
10091
+ * (and ultimately into the synthesized
10092
+ * `actions/setup-node` step).
10093
+ * 2. **Component step arrays.** Walks every {@link Component} on the
10094
+ * project (and on its sub-projects) for the well-known step-array
10095
+ * fields enumerated in {@link STEP_ARRAY_FIELDS}. Projen's
10096
+ * BuildWorkflow and Release components hold their pre/post-build
10097
+ * steps in these arrays before the workflow's lazy step closures
10098
+ * resolve them.
10099
+ * 3. **Direct workflow jobs.** Walks every job on every
10100
+ * `GithubWorkflow`. For each job:
10101
+ * - If `tools.node.version` is set (the lazy `setupTools` path
10102
+ * that synthesises the setup-node step at render time),
10103
+ * rewrite it.
10104
+ * - If `steps` is already an array (i.e. not a lazy closure),
10105
+ * patch any `actions/setup-node` step in place.
10106
+ *
10107
+ * The step-level patch only mutates `with["node-version"]`. Other
10108
+ * fields on `with` (`cache`, `cache-dependency-path`,
10109
+ * `registry-url`, `package-manager-cache`, etc.) are preserved
10110
+ * untouched. The step's `uses` field is also left alone — this
10111
+ * helper pins the input, not the action version pin.
10112
+ *
10113
+ * @param project The project whose GitHub workflows should be patched.
10114
+ */
10115
+ declare function pinSetupNodeVersion(project: Project$1): void;
10116
+
10117
+ export { AGENT_MODEL, AGENT_PLATFORM, AGENT_REGISTRY_ENTRIES, AGENT_RULE_SCOPE, AGENT_TIER_ROLES, AGENT_TIER_VALUES, AUDIT_CATEGORY_ORDER, type AgentCommand, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentFeaturesConfig, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRegistryEntry, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type AgentTier, type AgentTierConfig, type AgentTierEntry, type AnalyzeTsDocCoverageOptions, type ApiDiffCheckOptions, type ApiDiffFinding, type ApiDiffResult, ApiExtractor, type ApiExtractorOptions, type ApiExtractorReportOptions, type ApiSurfaceEntry, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, AuditCategory, type AuditCheckRunner, type AuditCheckRunnerContext, type AuditFinding, type AuditFindingBase, type AuditLocation, AuditMode, type AuditReport, AuditSeverity, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, BUNDLE_OWNERSHIP, type BundleOwnership, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudeMdConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CompileFencedSamplesOptions, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, type CustomDocSection, DEFAULT_AC_THRESHOLDS, DEFAULT_AGENT_PATHS, DEFAULT_AGENT_TIERS, DEFAULT_API_EXTRACTOR_CONFIG_FILE, DEFAULT_API_EXTRACTOR_ENTRY_POINT, DEFAULT_API_EXTRACTOR_REPORT_FILENAME, DEFAULT_API_EXTRACTOR_REPORT_FOLDER, DEFAULT_AUDIT_REPORT_DIR, DEFAULT_BUNDLE_OVERRIDES, DEFAULT_DECOMPOSITION_TEMPLATE, DEFAULT_DISPATCH_MODEL, DEFAULT_DISPATCH_TO_HOUSEKEEPING_RATIO, DEFAULT_HOUSEKEEPING_MODEL, DEFAULT_ISSUE_PRIORITY, DEFAULT_ISSUE_STATUS, DEFAULT_ISSUE_TEMPLATES_BUNDLE_PATH_PATTERNS, DEFAULT_ISSUE_TEMPLATES_EMIT_CHECKER, DEFAULT_ISSUE_TEMPLATES_EMIT_STARTER, DEFAULT_ISSUE_TEMPLATES_ENABLED, DEFAULT_ISSUE_TEMPLATES_PATH, DEFAULT_ISSUE_TEMPLATES_REQUIRE_REFERENCE, DEFAULT_OFF_PEAK_CRON_EXAMPLE, DEFAULT_PARTIAL_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_PRIORITY_LABELS, DEFAULT_PRODUCT_CONTEXT_PATH, DEFAULT_PROGRESS_FILES_ENABLED, DEFAULT_PROGRESS_FILES_FILENAME_PATTERN, DEFAULT_PROGRESS_FILES_FORMAT, DEFAULT_PROGRESS_FILES_STALE_AFTER_HOURS, DEFAULT_PROGRESS_FILES_STATE_DIR, DEFAULT_REQUIRE_PRODUCT_CONTEXT, DEFAULT_RESOLVED_ISSUE_DEFAULTS, DEFAULT_SAMPLE_COMPILER_OPTIONS, DEFAULT_SCHEDULED_TASKS_ROOT, DEFAULT_SCHEDULED_TASK_ENTRIES, DEFAULT_SHARED_EDITING_CONFLICT_STRATEGY, DEFAULT_SHARED_EDITING_EMIT_HELPER, DEFAULT_SHARED_EDITING_ENABLED, DEFAULT_SHARED_EDITING_VERIFY_COMMIT, DEFAULT_SHARED_INDEX_PATHS, DEFAULT_SKILL_EVALS_EMIT_RUNNER, DEFAULT_SKILL_EVALS_ENABLED, DEFAULT_SKILL_EVALS_SKILLS_ROOT, DEFAULT_SOURCES_THRESHOLDS, DEFAULT_STATE_FILE_PATH, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, DEFAULT_UNBLOCK_COMMENT_TEMPLATE, DEFAULT_UNBLOCK_DEPENDENTS_ENABLED, DEFAULT_UPSTREAM_CONFIGULATOR_ENABLED, DOCS_SYNC_AUDIT_SCHEMA_VERSION, type DeployWorkflowOptions, type DeploymentMetadata, type DocReferenceRecord, type EffectiveScopeThresholds, type ExtractDocReferencesOptions, type ExtractFencedSamplesOptions, type FencedSampleRecord, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, type IssueDefaultsConfig, type IssueDefaultsOverride, type IssueDefaultsPriority, type IssueDefaultsStatus, type IssueTemplatesConfig, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, type LinkFailureFinding, MAX_LABEL_DESCRIPTION_LENGTH, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MeetingArea, type MeetingScope, type MeetingType, type MeetingTypeKind, type MeetingsConfig, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, Nvmrc, type OrganizationMetadata, PROD_DEPLOY_NAME, PROGRESS_FILES_FORMAT_VALUES, PnpmWorkspace, type PnpmWorkspaceOptions, type PriorityRule, type ProgressFilesConfig, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type ReferenceMismatchCheckOptions, type ReferenceMismatchFinding, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedAgentTier, type ResolvedIssueDefaults, type ResolvedIssueDefaultsEntry, type ResolvedIssueTemplates, type ResolvedProgressFiles, type ResolvedProjectMetadata, type ResolvedRunRatio, type ResolvedScheduledTask, type ResolvedScheduledTasks, type ResolvedScopeGate, type ResolvedScopeGateBundleOverride, type ResolvedSharedEditing, type ResolvedSkillEvals, type ResolvedUnblockDependents, type RunRatioConfig, type RunScanOptions, type RunScanResult, SCHEDULED_TASK_MODEL_VALUES, SCOPE_CLASS_VALUES, SHARED_EDITING_CONFLICT_STRATEGY_VALUES, STARLIGHT_ROLE, SUPPRESSED_WORKFLOW_RULE_NAMES, type SampleCompilationFailure, type SampleFailureFinding, SampleLang, type ScheduledTaskEntry, type ScheduledTaskModel, type ScheduledTaskOverride, type ScheduledTasksConfig, type ScopeClass, type ScopeGateBundleOverride, type ScopeGateConfig, type ScopeGateThresholds, type SharedEditingConfig, type SkillEvalsConfig, type SlackMetadata, type SourceTierExamples, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TsDocCoverageKind, type TsDocCoverageRecord, type TsdocCoverageCheckOptions, type TsdocCoverageFinding, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, UNKNOWN_TYPE_FALLBACK_TIER, type UnblockDependentsConfig, type UpstreamConfigulatorConfig, VALID_PRIORITY_VALUES, VALID_STATUS_VALUES, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, agendaBundle, analyzeTsDocCoverage, auditReportJsonSchema, awsCdkBundle, baseBundle, bcmWriterBundle, buildAgentRegistryRule, buildBaseBundle, buildBcmWriterBundle, buildBuiltInBundles, buildBusinessModelsBundle, buildCheckBlockedProcedure, buildCompanyProfileBundle, buildCustomerProfileBundle, buildDocsSyncBundle, buildIndustryDiscoveryBundle, buildMaintenanceAuditBundle, buildMeetingAnalysisBundle, buildOrchestratorConventionsContent, buildPeopleProfileBundle, buildRegulatoryResearchBundle, buildReport, buildRequirementsAnalystBundle, buildRequirementsReviewerBundle, buildRequirementsWriterBundle, buildResearchPipelineBundle, buildSoftwareProfileBundle, buildStandardsResearchBundle, buildUnblockDependentsProcedure, bundleNameForWorkflowRule, businessModelsBundle, checkDocSamplesProcedure, checkLinksProcedure, classifyIssueScope, classifyRun, companyProfileBundle, compileFencedSamples, createApiDiffCheck, createReferenceMismatchCheck, createTsdocCoverageCheck, customerProfileBundle, diffApiRollups, docsSyncBundle, emptyCategoryBuckets, extractApiProcedure, extractDocReferences, extractFencedSamples, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, hasAnyDocsEmittingBundle, hasAnyDownstreamIssueKindBundle, industryDiscoveryBundle, isPhaseLabelOwnedByExcluded, isScheduledTaskOwnedByExcluded, isSuppressedWorkflowRule, isTypeLabelOwnedByExcluded, jestBundle, labelsForPhase, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, parseApiRollup, peopleProfileBundle, persistAuditReport, pinPnpmActionSetup, pinSetupNodeVersion, pnpmBundle, prReviewBundle, projenBundle, referenceRecordToFinding, regulatoryResearchBundle, renderAgentTierCaseStatement, renderAgentTierSection, renderCheckDocSamplesProcedure, renderCheckLinksProcedure, renderCustomDocSectionBlock, renderCustomDocSections, renderExtractApiProcedure, renderFocusSection, renderIssueTemplatesBundleHook, renderIssueTemplatesCheckerScript, renderIssueTemplatesRuleContent, renderIssueTemplatesStarterPage, renderMeetingTypesSection, renderPriorityRulesSection, renderProgressFileName, renderProgressFilePath, renderProgressFilesBundleHook, renderProgressFilesRuleContent, renderRunRatioSection, renderRunRatioShellHelpers, renderScheduledTaskSkillFile, renderScheduledTasksSection, renderScopeGateSection, renderScopeGateShellHelpers, renderSharedEditingBundleHook, renderSharedEditingHelperScript, renderSharedEditingRuleContent, renderSkillEvalsBundleHook, renderSkillEvalsRuleContent, renderSkillEvalsRunnerScript, renderSourceTierExamples, renderStubIndexConventionRuleContent, renderUnblockDependentsScript, renderUnblockDependentsSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAgentTiers, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveIssueDefaults, resolveIssueTemplates, resolveModelAlias, resolveOrchestratorAssets, resolveOutdirFromPackageName, resolveOverrideForLabels, resolveProgressFiles, resolveRunRatio, resolveScheduledTasks, resolveScopeGate, resolveSharedEditing, resolveSkillEvals, resolveTemplateVariables, resolveTypeScriptProjectOutdir, resolveUnblockDependents, runScan, slackBundle, softwareProfileBundle, standardsResearchBundle, tsdocRecordToFindings, turborepoBundle, typescriptBundle, upstreamConfigulatorDocsBundle, validateAgentTierConfig, validateIssueDefaultsConfig, validateIssueTemplatesConfig, validateMonorepoLayout, validateProgressFilesConfig, validateRunRatioConfig, validateScheduledTasksConfig, validateScopeGateConfig, validateSharedEditingConfig, validateSkillEvalsConfig, validateStarlightSingleton, validateUnblockDependentsConfig, vitestBundle };