@theholocron/astromech 4.19.0 → 5.0.0-alpha.11

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/dist/index.d.mts CHANGED
@@ -1,32 +1,33 @@
1
- import { r as TasksConfig } from "./schema-BegK4MsY.mjs";
1
+ import { r as TasksConfig } from "./schema-D01VYg43.mjs";
2
2
  //#region src/run.d.ts
3
3
  /**
4
4
  * `holocron run <task> [job] [-- <passthrough>]` — run a registry task (or one
5
5
  * of its sub-jobs) locally.
6
6
  *
7
- * A `job` argument only applies to tasks that declare `jobs` (today: `audit`);
8
- * for any other task it is folded back into the passthrough (`holocron run
9
- * build src/`). `holocron run audit performance` runs one job; `holocron run
10
- * audit` runs every job in declared order.
7
+ * A `job` argument only applies to tasks that declare `jobs`; for any other
8
+ * task it is folded back into the passthrough (`holocron run delivery.build
9
+ * src/`).
11
10
  *
12
11
  * Resolution:
13
12
  *
14
- * 0. task === "lint" (no job) → the linter aggregate (see below)
15
13
  * J. job given → TASKS[task].jobs[job].local (unknown job → exit 1)
16
14
  * 1. turbo.json defines the task → `turbo run <task>`
17
15
  * 2. package.json has a `<task>` script → `<pm> run <task>`
18
16
  * (unless it's the `holocron run …` thin caller — that recurses)
19
17
  * 3. TASKS[task].local resolves → `<tool> <args> <org-flags> <passthrough>`
18
+ * 3b. TASKS[task].linterGroup → run each resolved linter natively (see below)
20
19
  * 4. TASKS[task].jobs has entries → run each job in declared order
21
20
  * 5. TASKS[task].local === null → "enforced in CI" (skip, even with --required)
22
21
  * 5b. known task, nothing resolved → "no <task> task" (exit 0, or 1 with --required)
23
22
  * 6. unknown task → "unknown task" (exit 1)
24
23
  *
25
- * `lint` runs the resolved linter set (`config.tasks` `linters`, else
26
- * auto-detected): the eslint slot goes through the standard turbo / script /
27
- * `eslint .` resolution (so turbo caching is kept); every other linter runs
28
- * its `localBin` when found on PATH. Missing tools are flagged; the exit code
29
- * is the worst of the lot.
24
+ * A `linterGroup` task (`sourceQuality.staticAnalysis`, etc.) runs its fixed
25
+ * set of `linters.ts` entries, each still gated by that linter's own
26
+ * `detect`/`always` rule — every entry runs its `localBin` natively when
27
+ * found on PATH. Missing tools are flagged; the exit code is the worst of
28
+ * the lot. Unlike the old single `lint` task, this check runs *after*
29
+ * turbo/`package.json` resolution (step 3b, not step 0) — a `linterGroup`
30
+ * task is a normal turbo-delegatable task like any other.
30
31
  */
31
32
  /** Minimal structural logger — `@theholocron/observability`'s `Logger` satisfies it. */
32
33
  interface RunLogger {
@@ -70,8 +71,6 @@ interface RunTaskInput extends RunDeps {
70
71
  dryRun?: boolean;
71
72
  /** Turn "no such task for this repo" (normally exit 0) into a failure. */
72
73
  required?: boolean;
73
- /** The `lint` task's explicit linter list from `config.tasks`, if any. */
74
- linters?: string[];
75
74
  /** `turbo --filter=<pkg>` passthrough (monorepo). Ignored when the repo has no `turbo.json`. */
76
75
  filter?: string;
77
76
  }
@@ -107,68 +106,9 @@ interface CiReport {
107
106
  interface CiInput extends RunDeps, CiOptions {
108
107
  cwd: string;
109
108
  config: TasksConfig;
110
- /** Explicit linter list for the `lint` task (the config's lint entry `linters`). */
111
- linters?: string[];
112
109
  }
113
110
  declare function runCi(input: CiInput): CiReport;
114
111
  //#endregion
115
- //#region src/super-linter.d.ts
116
- /**
117
- * `superLinterConfig()` — turn the resolved linter set into the exact
118
- * super-linter `VALIDATE_*` / `FIX_*` env the CI `lint` job needs. The CLI
119
- * serializes {@link SuperLinterConfig.env} as the `super-linter-env` input
120
- * on each repo's generated `lint` thin caller; the reusable workflow
121
- * expands it verbatim. This is the CI half of "lint parity" — the local
122
- * half is the `holocron run lint` aggregate, driven by the same
123
- * {@link resolveLinters}.
124
- */
125
- interface SuperLinterConfig {
126
- /**
127
- * Enabled `VALIDATE_*` / `FIX_*` keys → `"true"`. Only enabled keys are
128
- * present (super-linter allow-list mode). Ready for `JSON.stringify`.
129
- */
130
- env: Record<string, string>;
131
- /** Resolved linter names in execution order — for the human-readable comment. */
132
- linters: string[];
133
- /** Config-file inputs the resolved set honors (`eslint-config`, …). */
134
- configInputs: Partial<Record<"eslint-config" | "prettier-config" | "yaml-config", true>>;
135
- }
136
- /**
137
- * Resolve the super-linter env for a repo's `lint` task.
138
- *
139
- * @param opts.explicit the task's `linters` list, if any (else auto-detect)
140
- * @param opts.rootFiles repo-root filenames (from `listDir(cwd)`)
141
- * @param opts.includeFix emit `FIX_*` keys too (default `true`)
142
- */
143
- declare function superLinterConfig(opts: {
144
- explicit?: string[];
145
- rootFiles: string[];
146
- includeFix?: boolean;
147
- }): SuperLinterConfig;
148
- /**
149
- * The always-on baseline env — every `always` linter, no detection. This is
150
- * what the reusable `lint.yml`'s `super-linter-env` input defaults to, so a
151
- * repo whose thin caller has not been re-synced yet behaves exactly as before.
152
- */
153
- declare function baselineSuperLinterEnv(): Record<string, string>;
154
- /**
155
- * The `lint` thin caller's `with:` overrides + the `# linters: …` comment,
156
- * from the resolved linter set. Shared by `createAstromech().thinCallers()`
157
- * and the CLI's `sync` / `setup` workflow writers so the three stay in step.
158
- *
159
- * @param opts.explicit the `lint` task's `linters` list, if any
160
- * @param opts.rootFiles repo-root filenames (auto-detect fallback)
161
- * @param opts.extra per-repo `with:` overrides that win over the defaults
162
- */
163
- declare function lintThinCallerWith(opts: {
164
- explicit?: string[];
165
- rootFiles: string[];
166
- extra?: Record<string, unknown>;
167
- }): {
168
- withOverrides: Record<string, unknown>;
169
- comments: Record<string, string>;
170
- };
171
- //#endregion
172
112
  //#region src/thin-callers.d.ts
173
113
  /**
174
114
  * Workflow templates + thin-caller generation.
@@ -183,10 +123,17 @@ declare const KNOWN_WORKFLOWS: Set<string>;
183
123
  * The GitHub status-check context a `required` task contributes to branch
184
124
  * protection. Format: `"{workflow name} / {job name}"`.
185
125
  *
186
- * These name the **aggregate `Conclusion` job** (fan-in, `if: always()`), not
187
- * an individual inner job — `test` has several conditionally-run sub-jobs, so
188
- * `"Test / Conclusion"` is the only stable gate. Only merge-gating workflows
189
- * are listed. `astromech.requiredChecks()` reads this for every `required` task.
126
+ * Most of these are single-job workflows now (D3's decomposition split what
127
+ * used to be multi-job `lint`/`audit` into one task per concern) — the
128
+ * context names that job directly, no `Conclusion` aggregator needed; a
129
+ * single job's own conclusion already *is* the workflow's conclusion.
130
+ * `Conclusion` fan-in jobs are kept only where a task genuinely has several
131
+ * conditionally-run jobs feeding one required check:
132
+ * `verification.unitTests` (unit / Storybook / Chromatic / interaction /
133
+ * user-flow, each gated by its own `run-*` input) and
134
+ * `platform.repoValidation` (its three script jobs all must pass). Only
135
+ * merge-gating workflows are listed. `astromech.requiredChecks()` reads this
136
+ * for every `required` task.
190
137
  */
191
138
  declare const WORKFLOW_CHECK_CONTEXTS: Partial<Record<string, string>>;
192
139
  /**
@@ -274,6 +221,12 @@ declare function normalizeWorkflowWith(raw: Record<string, unknown>): Record<str
274
221
  */
275
222
  declare function deriveDeployPaths(raw: Record<string, unknown>): string[];
276
223
  //#endregion
224
+ //#region src/turbo.d.ts
225
+ interface EnsureRootWorkspaceMemberResult {
226
+ content: string;
227
+ changed: boolean;
228
+ }
229
+ //#endregion
277
230
  //#region src/astromech.d.ts
278
231
  interface AstromechOptions {
279
232
  /** Repo root. */
@@ -348,14 +301,6 @@ interface Astromech {
348
301
  * when there is no config or `syncScripts: false`.
349
302
  */
350
303
  packageScripts(): Record<string, string>;
351
- /**
352
- * The resolved super-linter env for this repo's `lint` task — the CI half
353
- * of lint parity. `thinCallers()` already bakes `env` into the `lint` thin
354
- * caller's `super-linter-env` input; this method exposes the full result
355
- * for `holocron doctor` / diagnostics. Driven by the `lint` entry's
356
- * `linters` list, else auto-detection from the repo's config files.
357
- */
358
- superLinterConfig(): SuperLinterConfig;
359
304
  /**
360
305
  * The branch-protection required-status-check contexts for this repo —
361
306
  * every `required: true` task's check context plus `extraRequiredChecks`,
@@ -370,6 +315,23 @@ interface Astromech {
370
315
  * as {@link requiredChecks} — `holocron setup` owns writing the result.
371
316
  */
372
317
  codecovConfig(existing: string | null): string;
318
+ /**
319
+ * The generated `turbo.json` for this repo's manifest, pretty-printed —
320
+ * write directly, no merge. `null` when no manifest task has turbo fan-out
321
+ * config (nothing to write). See {@link TurboTaskConfig} in `registry.ts`.
322
+ */
323
+ turboConfig(): string | null;
324
+ /**
325
+ * Fixes #692: whenever {@link turboConfig} isn't `null`, this repo's root
326
+ * package needs to actually be a workspace member for the tasks it fans
327
+ * out — otherwise a root that's genuinely a directly-buildable package
328
+ * (not just an orchestrator) silently vanishes from `turbo run <task>`.
329
+ * Pass `pnpm-workspace.yaml`'s current content (or `""` if none exists —
330
+ * a no-op either way, since no `packages:` key means single-package mode
331
+ * already) and root `package.json`'s own `scripts` keys. `changed: false`
332
+ * means don't write anything — the file is already correct.
333
+ */
334
+ ensureRootWorkspaceMember(workspaceYaml: string, rootScripts: readonly string[]): EnsureRootWorkspaceMemberResult;
373
335
  }
374
336
  declare function createAstromech(options: AstromechOptions): Astromech;
375
337
  //#endregion
@@ -495,7 +457,19 @@ declare function resolveLinters(opts: {
495
457
  * Actions. `holocron run <task>` and `holocron ci` resolve against this;
496
458
  * adding a task here gives every repo that task.
497
459
  *
498
- * Keyed identically to the workflow templates — a task IS a workflow.
460
+ * Keyed identically to the workflow templates — a task IS a workflow. This
461
+ * is the canonical vocabulary table (epic #672, D11): every other artifact
462
+ * (`KNOWN_TASKS`, `thin-callers.ts`'s `KNOWN_WORKFLOWS`/`WORKFLOW_CHECK_CONTEXTS`,
463
+ * `CI_ORDER`) derives from these keys rather than hand-duplicating them —
464
+ * including the future GitHub App (#679), which imports this same table for
465
+ * config-schema validation instead of reimplementing its own copy.
466
+ *
467
+ * Task names are an intent-facing vocabulary (`verification.*`,
468
+ * `sourceQuality.*`, `security.*`, `delivery.*`, `platform.*`,
469
+ * `knowledge.*`), not tool names — `eslint`/`vitest`/`tsdown`/… stay
470
+ * internal to this file and `theholocron/configs`. See
471
+ * `.notes/tech-vocabulary-rename.spec.md` (#675) for the full mapping and
472
+ * the reasoning behind each namespace and decomposition.
499
473
  *
500
474
  * Spec: `docs/wiki/specifications/tech-astromech-task-runner.spec.md` (epic #581).
501
475
  */
@@ -514,40 +488,65 @@ interface LocalRunner {
514
488
  /** The task is already a holocron subcommand (`sync`, `sync-wiki`). */
515
489
  command?: string;
516
490
  }
491
+ /**
492
+ * How a task fans out across every workspace via Turborepo — content-hash
493
+ * caching + `^`-prefixed cross-package ordering, epic #672 D9 (#681).
494
+ * Present only on tasks that genuinely run *per workspace* (a real build/
495
+ * compile/test step); whole-repo single-run tools (prettier, gitleaks,
496
+ * commitlint, yamllint, …) have no entry here — they stay off turbo.json
497
+ * entirely and run once, un-fanned-out, the way they already do.
498
+ */
499
+ interface TurboTaskConfig {
500
+ /** Glob patterns turbo hashes to decide whether a cached run is still valid. */
501
+ inputs: string[];
502
+ /** Glob patterns turbo caches/restores after a run. Empty array for a task with no build artifact (lint, typecheck). */
503
+ outputs: string[];
504
+ /** Task names this depends on — a bare name runs in this package first; `^name` waits on every upstream workspace's task. */
505
+ dependsOn: string[];
506
+ }
517
507
  /** One sub-job of a task — `performance` in `holocron run audit performance`. */
518
508
  interface JobDef {
519
509
  /** How the job runs locally; `null` → no local equivalent (enforced in CI). */
520
510
  local: LocalRunner | null;
521
511
  /**
522
- * The CI status-check context this job reports as (`audit / Knip`) — every
523
- * sub-job is a CI job. `holocron run audit` and `holocron ci` label each job
524
- * line with it; the task-level `… / Conclusion` context lives in
525
- * `WORKFLOW_CHECK_CONTEXTS`.
512
+ * The CI status-check context this job reports as (e.g.
513
+ * `platform.repoValidation / Validate registry consistency`) — every sub-job is a CI job.
514
+ * `holocron run <task>` and `holocron ci` label each job line with it;
515
+ * the task-level `… / Conclusion` context (only for tasks with several
516
+ * jobs) lives in `WORKFLOW_CHECK_CONTEXTS`.
526
517
  */
527
518
  checkContext: string;
528
519
  }
529
520
  interface TaskDef {
530
521
  /**
531
- * `null` — the registry has no built-in runner (CodeQL, deploys, audit's
532
- * server / baseline jobs). An explicit turbo task or `package.json` script
533
- * still runs (resolution steps 1–2); with neither, `holocron run` does
534
- * nothing and `holocron ci` skips it — never a failure, even when the task
535
- * is `required` (a CI-only check isn't a local one).
522
+ * `null` — the registry has no built-in runner (CodeQL, deploys, the
523
+ * bundle-size job). An explicit turbo task or `package.json` script still
524
+ * runs (resolution steps 1–2); with neither, `holocron run` does nothing
525
+ * and `holocron ci` skips it — never a failure, even when the task is
526
+ * `required` (a CI-only check isn't a local one).
536
527
  */
537
528
  local: LocalRunner | null;
538
529
  /**
539
- * Sub-jobs, keyed by slug — `holocron run audit performance`. Declared order
540
- * is run order: `holocron run audit` (no job) runs each in turn.
530
+ * Sub-jobs, keyed by slug. Declared order is run order: `holocron run
531
+ * <task>` (no job) runs each in turn.
541
532
  */
542
533
  jobs?: Record<string, JobDef>;
543
534
  /** Org-default flags injected by tool name. Removed by a repo override. */
544
535
  flags?: Record<string, string[]>;
545
536
  /**
546
- * This task is the linter aggregate: `holocron run lint` resolves the
547
- * linter set (`config.tasks` `linters` or auto-detect) and runs each
548
- * natively instead of using `local`. See `linters.ts` / `super-linter.ts`.
537
+ * This task is a linter-group aggregate: `holocron run <task>` resolves
538
+ * this fixed set of `linters.ts` entries (still gated by each linter's
539
+ * own `detect`/`always` rule) and runs each natively, instead of using
540
+ * `local`. Replaces the old single `lint` task's auto-detected linter
541
+ * list (`config.tasks[].linters`) — a repo's choice of which of these
542
+ * run is now just whether it includes this task in `tasks: [...]`, same
543
+ * as any other task. See `linters.ts` / `run.ts`.
549
544
  */
550
- linters?: boolean;
545
+ linterGroup?: string[];
546
+ /** Carries a `preview` mode (Cloudflare/Vercel deploy, npm dist-tag, Fern preview docs, …). Cross-cutting, not its own task. */
547
+ preview?: boolean;
548
+ /** Turborepo fan-out config for this task — see {@link TurboTaskConfig}. Omitted for whole-repo, non-fan-out tasks. */
549
+ turbo?: TurboTaskConfig;
551
550
  }
552
551
  declare const TASKS: Record<string, TaskDef>;
553
552
  /** Every task name the registry knows. */
@@ -564,6 +563,46 @@ declare const CI_ORDER: string[];
564
563
  /** Ordered (task contexts in {@link CI_ORDER}, then extras), de-duplicated. */
565
564
  declare function requiredChecks(config: TasksConfig): string[];
566
565
  //#endregion
566
+ //#region src/resolver.d.ts
567
+ /**
568
+ * Resolves the absolute path to a Bucket A tool's shared `@theholocron/*-config`
569
+ * entry point, installed in the consuming repo's own `node_modules` — and the
570
+ * CLI flag(s) to hand it via (`--config`, `--extends`, …). `run.ts` splices the
571
+ * result into the command it builds for a tool/detect runner or a linter-group
572
+ * entry, right after the tool's own args.
573
+ *
574
+ * Every mapped package's resolved entry point already carries a ready-to-use
575
+ * default export (a plain re-export for `prettier`/`commitlint`; an invoked,
576
+ * zero-arg preset for `eslint`/`vitest`/`tsdown` — verified end-to-end against
577
+ * each tool's real `--config`/`--extends` loader, not just the file's shape).
578
+ * A repo doesn't need this package installed at all — every lookup degrades to
579
+ * `[]` (no flag added, the tool falls back to its own auto-discovery of a
580
+ * local file, unchanged from today) rather than throwing, so this is additive
581
+ * and safe to run unconditionally.
582
+ *
583
+ * `semantic-release`, `devmoji`, `editorconfig-checker`, and `knip` are
584
+ * deliberately absent — `semantic-release-config`'s `defineConfig()` needs
585
+ * real per-repo data (branches, npm options) a static `--extends <path>` can't
586
+ * carry; `devmoji` runs through a git hook template, not `holocron run
587
+ * <task>`; `editorconfig-checker` has no shared-config package yet; `knip` is
588
+ * repo-specific by nature, never a shared-config candidate. See
589
+ * `.notes/tech-config-resolution.spec.md` (#676).
590
+ */
591
+ interface ResolverDeps {
592
+ readFile: (path: string) => string;
593
+ fileExists: (path: string) => boolean;
594
+ }
595
+ /** Every tool name the resolver knows how to point at a shared config. */
596
+ declare const RESOLVABLE_TOOLS: ReadonlySet<string>;
597
+ /**
598
+ * `<flag> <absolute path>` for `tool`, resolved against `cwd`'s
599
+ * `node_modules` — or `[]` when the tool isn't mapped, the package isn't
600
+ * installed, its `package.json` doesn't declare the export subpath this
601
+ * needs, or the resolved file doesn't actually exist on disk (a stale
602
+ * install, or a package version that predates the export existing).
603
+ */
604
+ declare function resolveToolConfig(tool: string, cwd: string, deps: ResolverDeps): string[];
605
+ //#endregion
567
606
  //#region src/reusable.d.ts
568
607
  /**
569
608
  * The **reusable** GitHub Actions surface pushed to `theholocron/.github` by
@@ -591,4 +630,73 @@ declare const WORKFLOW_TEMPLATE_PROPERTIES: Record<string, string>;
591
630
  */
592
631
  declare function reusableTemplates(): Map<string, string>;
593
632
  //#endregion
594
- export { type Astromech, type AstromechOptions, CI_ORDER, type CiJobReport, type CiOptions, type CiReport, type ExecFn, type JobDef, KNOWN_TASKS, KNOWN_WORKFLOWS, LINTERS, LINTER_NAMES, type LinterDef, type LocalRunner, type OrgContext, type PreviewConfig, REUSABLE_ACTIONS, REUSABLE_WORKFLOWS, type RunLogger, type RunOptions, type RunTaskInput, type RunTaskReport, type SuperLinterConfig, TASKS, type TaskDef, WORKFLOW_CHECK_CONTEXTS, WORKFLOW_TEMPLATES, WORKFLOW_TEMPLATE_PROPERTIES, type WorkspacePackage, baselineSuperLinterEnv, codecovComponentBlock, codecovConfig, createAstromech, createCodecovConfig, deriveDeployPaths, ensureIfNotFound, extractPreviewConfig, generateCombinedDeployContent, generateThinCallerContent, lintThinCallerWith, mergeCodecovComponents, normalizeWorkflowWith, readWorkspacePackages, requiredChecks, resolveLinters, reusableTemplates, runCi, runTask, superLinterConfig };
633
+ //#region src/tsconfig.d.ts
634
+ /**
635
+ * `tsconfig.json` generation — Bucket B (config-resolution workstream, #676):
636
+ * the file must stay committed (the TypeScript language server discovers it
637
+ * directly from disk, no `--config` override mechanism to hand it a path
638
+ * instead), but its content is fully derivable, so it's generated rather
639
+ * than hand-authored — the same category as `.editorconfig`
640
+ * ({@link "./templates/configs/editorconfig/create-config.js" createConfig})
641
+ * and {@link codecovConfig}.
642
+ *
643
+ * Surveyed every package-level `tsconfig.json` across the org (`holocron`,
644
+ * `clients`, `utils` — 20+ packages). `extends: "@theholocron/tsconfig/
645
+ * node-lts"`, `compilerOptions.baseUrl: "./"`, `compilerOptions.outDir:
646
+ * "./dist"`, `include: ["src/**\/*.ts"]`, and `exclude: ["node_modules",
647
+ * "dist"]` are uniform in every one — safe defaults here. `paths` (a `@/*`
648
+ * → `./src/*` import alias) is a real per-package choice, present in
649
+ * roughly 40% of packages checked — an opt-in parameter, not a default.
650
+ *
651
+ * Two fields checked and deliberately *not* absorbed as defaults, unlike
652
+ * `eslint-config`'s `tsconfigRootDir`/`settings.node` (which turned out
653
+ * redundant with the shared package's own behavior, `configs`#461):
654
+ * `compilerOptions.module`/`moduleResolution` (only `@theholocron/cli`
655
+ * overrides these, to `esnext`/`bundler` — a genuine deviation from the
656
+ * shared `node-lts` preset's `nodenext`/`nodenext`, needed for its bundler
657
+ * tooling, not something every package should inherit) and
658
+ * `compilerOptions.rootDir` (present in exactly two packages, always the
659
+ * same value `./src` that `include` already implies — an unnecessary
660
+ * override wherever it appears, not a pattern worth generalizing).
661
+ *
662
+ * Monorepo *root* `tsconfig.json` (a TS project-references "solution
663
+ * file" — `holocron`'s own root is `{ files: [], references: [...] }`,
664
+ * listing which packages to build) is a structurally different, genuinely
665
+ * per-repo document — out of scope here, same as Bucket C content.
666
+ *
667
+ * Not yet wired into `holocron setup`'s per-package write loop (every
668
+ * other Bucket B file there is a single repo-root file, safely
669
+ * overwritten every run — `tsconfig.json` is per-package, and most
670
+ * packages' files still carry real hand-authored content today, not yet
671
+ * migrated to a fully-generated state). That per-package iteration +
672
+ * safe-migration design is `#680`'s job, not duplicated here — this is
673
+ * the generator itself, ready for it to call.
674
+ */
675
+ interface TsconfigOptions {
676
+ /** Human-readable name for the `display` field — the package's own name is the usual choice. */
677
+ display: string;
678
+ /**
679
+ * `@theholocron/tsconfig` variant. Defaults to `"node-lts"` — every
680
+ * checked package uses it; the other three (`astro`, `nextjs`, `react`)
681
+ * exist for a template repo's app-shaped packages, not the plain
682
+ * Node.js library packages this org's currently-migrated repos ship.
683
+ */
684
+ variant?: "astro" | "nextjs" | "node-lts" | "react";
685
+ /**
686
+ * Add a `@/*` → `./src/*` path alias. A real per-package choice, not a
687
+ * default — roughly 40% of packages checked use one, the rest don't.
688
+ */
689
+ paths?: boolean;
690
+ }
691
+ /**
692
+ * A package-level `tsconfig.json` — the uniform shape confirmed across
693
+ * every package checked, parameterized only by the two fields that
694
+ * genuinely vary (`display`, `paths`). No scaffold/workflow header (matches
695
+ * `.alexrc.json`'s existing precedent for a strict-JSON Bucket B file —
696
+ * JSON has no comment syntax to carry one, and TypeScript's own tolerance
697
+ * for JSONC comments in `tsconfig.json` isn't worth relying on for a file
698
+ * this thin).
699
+ */
700
+ declare function createTsconfig(options: TsconfigOptions): string;
701
+ //#endregion
702
+ export { type Astromech, type AstromechOptions, CI_ORDER, type CiJobReport, type CiOptions, type CiReport, type ExecFn, type JobDef, KNOWN_TASKS, KNOWN_WORKFLOWS, LINTERS, LINTER_NAMES, type LinterDef, type LocalRunner, type OrgContext, type PreviewConfig, RESOLVABLE_TOOLS, REUSABLE_ACTIONS, REUSABLE_WORKFLOWS, type ResolverDeps, type RunLogger, type RunOptions, type RunTaskInput, type RunTaskReport, TASKS, type TaskDef, type TsconfigOptions, WORKFLOW_CHECK_CONTEXTS, WORKFLOW_TEMPLATES, WORKFLOW_TEMPLATE_PROPERTIES, type WorkspacePackage, codecovComponentBlock, codecovConfig, createAstromech, createCodecovConfig, createTsconfig, deriveDeployPaths, ensureIfNotFound, extractPreviewConfig, generateCombinedDeployContent, generateThinCallerContent, mergeCodecovComponents, normalizeWorkflowWith, readWorkspacePackages, requiredChecks, resolveLinters, resolveToolConfig, reusableTemplates, runCi, runTask };