@savvy-web/silk-effects 1.0.1 → 1.2.0

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.
@@ -25,8 +25,8 @@ import { MergeSectionsPlugin } from "./remark/plugins/merge-sections.js";
25
25
  import { NormalizeFormatPlugin } from "./remark/plugins/normalize-format.js";
26
26
  import { ReorderSectionsPlugin } from "./remark/plugins/reorder-sections.js";
27
27
  import { ChangelogTransformer } from "./api/transformer.js";
28
- import { ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, makeConfigInspectorTest } from "./services/config-inspector.js";
29
- import { BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, makeBranchAnalyzerTest } from "./services/branch-analyzer.js";
28
+ import { ClassificationReasonSchema, ClassificationSchema, ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, InspectedConfigSchema, ResolvedPackageScopeSchema, ResolvedVersionFileSchema, makeConfigInspectorTest } from "./services/config-inspector.js";
29
+ import { BranchAnalysisSchema, BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, BranchFileEntrySchema, FileStatusSchema, makeBranchAnalyzerTest } from "./services/branch-analyzer.js";
30
30
  import { ChangelogService, ChangelogServiceBase } from "./services/changelog.js";
31
31
  import { WorkspaceSnapshotReader, WorkspaceSnapshotReaderBase, WorkspaceSnapshotReaderLive } from "./services/workspace-snapshot.js";
32
32
  import { SectionCategorySchema } from "./categories/types.js";
@@ -49,9 +49,11 @@ import { SilkChangesetPreset, SilkChangesetTransformPreset } from "./remark/pres
49
49
  //#region src/changesets/index.ts
50
50
  var changesets_exports = /* @__PURE__ */ __exportAll({
51
51
  AggregateDependencyTablesPlugin: () => AggregateDependencyTablesPlugin,
52
+ BranchAnalysisSchema: () => BranchAnalysisSchema,
52
53
  BranchAnalyzer: () => BranchAnalyzer,
53
54
  BranchAnalyzerBase: () => BranchAnalyzerBase,
54
55
  BranchAnalyzerLive: () => BranchAnalyzerLive,
56
+ BranchFileEntrySchema: () => BranchFileEntrySchema,
55
57
  Categories: () => Categories,
56
58
  Changelog: () => Changelog,
57
59
  ChangelogService: () => ChangelogService,
@@ -63,6 +65,8 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
63
65
  ChangesetSummarySchema: () => ChangesetSummarySchema,
64
66
  ChangesetValidationError: () => ChangesetValidationError,
65
67
  ChangesetValidationErrorBase: () => ChangesetValidationErrorBase,
68
+ ClassificationReasonSchema: () => ClassificationReasonSchema,
69
+ ClassificationSchema: () => ClassificationSchema,
66
70
  CommitHashSchema: () => CommitHashSchema,
67
71
  ConfigInspector: () => ConfigInspector,
68
72
  ConfigInspectorBase: () => ConfigInspectorBase,
@@ -80,6 +84,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
80
84
  DependencyTableTypeSchema: () => DependencyTableTypeSchema,
81
85
  DependencyTypeSchema: () => DependencyTypeSchema,
82
86
  DependencyUpdateSchema: () => DependencyUpdateSchema,
87
+ FileStatusSchema: () => FileStatusSchema,
83
88
  GitError: () => GitError,
84
89
  GitErrorBase: () => GitErrorBase,
85
90
  GitHubApiError: () => GitHubApiError,
@@ -90,6 +95,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
90
95
  GitHubServiceBase: () => GitHubServiceBase,
91
96
  GlobSchema: () => GlobSchema,
92
97
  HeadingHierarchyRule: () => HeadingHierarchyRule,
98
+ InspectedConfigSchema: () => InspectedConfigSchema,
93
99
  IssueLinkRefsPlugin: () => IssueLinkRefsPlugin,
94
100
  IssueNumberSchema: () => IssueNumberSchema,
95
101
  JsonPathSchema: () => JsonPathSchema,
@@ -114,6 +120,8 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
114
120
  ReorderSectionsPlugin: () => ReorderSectionsPlugin,
115
121
  RepoSchema: () => RepoSchema,
116
122
  RequiredSectionsRule: () => RequiredSectionsRule,
123
+ ResolvedPackageScopeSchema: () => ResolvedPackageScopeSchema,
124
+ ResolvedVersionFileSchema: () => ResolvedVersionFileSchema,
117
125
  SectionCategorySchema: () => SectionCategorySchema,
118
126
  SilkChangesetPreset: () => SilkChangesetPreset,
119
127
  SilkChangesetTransformPreset: () => SilkChangesetTransformPreset,
@@ -1,6 +1,6 @@
1
1
  import { GitError } from "../errors.js";
2
- import { ConfigInspector } from "./config-inspector.js";
3
- import { Context, Effect, Layer } from "effect";
2
+ import { ClassificationReasonSchema, ConfigInspector } from "./config-inspector.js";
3
+ import { Context, Effect, Layer, Schema } from "effect";
4
4
  import { execFileSync } from "node:child_process";
5
5
 
6
6
  //#region src/changesets/services/branch-analyzer.ts
@@ -45,6 +45,23 @@ import { execFileSync } from "node:child_process";
45
45
  *
46
46
  * @packageDocumentation
47
47
  */
48
+ /** Git diff status as reported by `--name-status`. @public */
49
+ const FileStatusSchema = Schema.Literal("added", "modified", "deleted", "renamed", "copied", "typechange", "unmerged", "unknown").annotations({ identifier: "FileStatus" });
50
+ /** One file entry in the branch analysis output. @public */
51
+ const BranchFileEntrySchema = Schema.Struct({
52
+ path: Schema.String.annotations({ description: "Repo-relative path (the new path in the case of renames)." }),
53
+ status: FileStatusSchema,
54
+ package: Schema.NullOr(Schema.String).annotations({ description: "Owning package, or null if outside every known release surface." }),
55
+ reason: ClassificationReasonSchema
56
+ }).annotations({ identifier: "BranchFileEntry" });
57
+ /** Structured result of analyzing the current branch against its base. @public */
58
+ const BranchAnalysisSchema = Schema.Struct({
59
+ baseBranch: Schema.String,
60
+ mergeBaseSha: Schema.String,
61
+ files: Schema.Array(BranchFileEntrySchema),
62
+ packagesAffected: Schema.Array(Schema.String),
63
+ unmappedFiles: Schema.Array(Schema.String).annotations({ description: "Repo-relative paths whose package is null — candidates for an AskUserQuestion." })
64
+ }).annotations({ identifier: "BranchAnalysis" });
48
65
  const _tag = Context.Tag("BranchAnalyzer");
49
66
  /**
50
67
  * Base class for {@link BranchAnalyzer}.
@@ -275,4 +292,4 @@ function makeBranchAnalyzerTest(fixed) {
275
292
  }
276
293
 
277
294
  //#endregion
278
- export { BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, makeBranchAnalyzerTest };
295
+ export { BranchAnalysisSchema, BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, BranchFileEntrySchema, FileStatusSchema, makeBranchAnalyzerTest };
@@ -1,8 +1,10 @@
1
1
  import { ConfigurationError } from "../errors.js";
2
2
  import { ChangesetOptionsSchema } from "../schemas/options.js";
3
3
  import { ChangesetConfigReader } from "../../services/ChangesetConfigReader.js";
4
+ import { SilkPublishability, readTargetsBinding } from "../../services/SilkPublishability.js";
4
5
  import { Context, Effect, Layer, Schema } from "effect";
5
6
  import { isAbsolute, join, relative, resolve } from "node:path";
7
+ import { FileSystem } from "@effect/platform";
6
8
  import { globSync } from "tinyglobby";
7
9
  import { WorkspaceDiscovery } from "workspaces-effect";
8
10
 
@@ -41,6 +43,46 @@ import { WorkspaceDiscovery } from "workspaces-effect";
41
43
  *
42
44
  * @packageDocumentation
43
45
  */
46
+ /** A `versionFiles` entry expanded to its absolute target paths. @public */
47
+ const ResolvedVersionFileSchema = Schema.Struct({
48
+ glob: Schema.String,
49
+ paths: Schema.Array(Schema.String).annotations({ description: "JSONPath expressions to update (defaults to [\"$.version\"])." }),
50
+ matchedFiles: Schema.Array(Schema.String)
51
+ }).annotations({ identifier: "ResolvedVersionFile" });
52
+ /** A package's resolved release surface. @public */
53
+ const ResolvedPackageScopeSchema = Schema.Struct({
54
+ name: Schema.String,
55
+ workspaceDir: Schema.String,
56
+ version: Schema.String,
57
+ additionalScopes: Schema.Array(Schema.String),
58
+ additionalScopeFiles: Schema.Array(Schema.String),
59
+ versionFiles: Schema.Array(ResolvedVersionFileSchema)
60
+ }).annotations({ identifier: "ResolvedPackageScope" });
61
+ /** Structured representation of a resolved `.changeset/config.json`. @public */
62
+ const InspectedConfigSchema = Schema.Struct({
63
+ configPath: Schema.String,
64
+ projectDir: Schema.String.annotations({ description: "Absolute project root (the directory containing .changeset/)." }),
65
+ changelog: Schema.NullOr(Schema.String),
66
+ baseBranch: Schema.String,
67
+ access: Schema.Literal("public", "restricted"),
68
+ ignore: Schema.Array(Schema.String),
69
+ packages: Schema.Array(ResolvedPackageScopeSchema),
70
+ legacyVersionFilesUsed: Schema.Boolean
71
+ }).annotations({ identifier: "InspectedConfig" });
72
+ /** Reason a path was attributed to a package (or left unmapped). @public */
73
+ const ClassificationReasonSchema = Schema.Union(Schema.Literal("workspace"), Schema.Struct({
74
+ kind: Schema.Literal("additionalScope"),
75
+ glob: Schema.String
76
+ }), Schema.Struct({
77
+ kind: Schema.Literal("versionFile"),
78
+ glob: Schema.String
79
+ }), Schema.Null).annotations({ identifier: "ClassificationReason" });
80
+ /** The result of classifying a single path against a resolved config. @public */
81
+ const ClassificationSchema = Schema.Struct({
82
+ path: Schema.String,
83
+ package: Schema.NullOr(Schema.String),
84
+ reason: ClassificationReasonSchema
85
+ }).annotations({ identifier: "Classification" });
44
86
  const _tag = Context.Tag("ConfigInspector");
45
87
  /**
46
88
  * Base class for {@link ConfigInspector}.
@@ -187,6 +229,50 @@ function buildResolvedScopes(params) {
187
229
  return scopes;
188
230
  }
189
231
  /**
232
+ * Read a workspace package's raw package.json. A genuinely missing manifest
233
+ * resolves to `null` so the caller can skip that package — a workspace
234
+ * directory without a `package.json` is not a release surface. Any OTHER
235
+ * failure (unreadable file, malformed JSON) is surfaced as a
236
+ * {@link ConfigurationError} carrying the package path, rather than silently
237
+ * dropping the package, which would cascade into wrong attribution.
238
+ */
239
+ function readRawPackageJson(fs, pkgDir) {
240
+ const pkgJsonPath = join(pkgDir, "package.json");
241
+ return fs.readFileString(pkgJsonPath).pipe(Effect.flatMap((content) => Effect.try(() => JSON.parse(content))), Effect.catchAll((err) => {
242
+ if (err.reason === "NotFound") return Effect.succeed(null);
243
+ return Effect.fail(new ConfigurationError({
244
+ field: "workspace",
245
+ reason: `Failed to read or parse ${pkgJsonPath}: ${err instanceof Error ? err.message : String(err)}`
246
+ }));
247
+ }));
248
+ }
249
+ /**
250
+ * Build resolved scopes from the discovered workspace packages, keeping only
251
+ * those that are a release surface (declare publishConfig that yields at least
252
+ * one publish target). Used both when `.changeset/config.json` declares no
253
+ * explicit `packages` record AND to augment an explicit record with the
254
+ * remaining workspace packages it does not list (so the record annotates the
255
+ * listed packages without shrinking the release surface). The changeset
256
+ * `ignore` list is intentionally NOT consulted here — an ignored package still
257
+ * declares publishConfig and remains a valid changeset target.
258
+ */
259
+ function buildFallbackScopes(fs, workspaces) {
260
+ return Effect.forEach(workspaces, (ws) => Effect.gen(function* () {
261
+ const raw = yield* readRawPackageJson(fs, ws.path);
262
+ if (raw === null) return [];
263
+ const binding = yield* readTargetsBinding(fs, ws.path);
264
+ if (SilkPublishability.detect(ws.name, raw, binding).length === 0) return [];
265
+ return [{
266
+ name: ws.name,
267
+ workspaceDir: ws.path,
268
+ version: ws.version,
269
+ additionalScopes: [],
270
+ additionalScopeFiles: [],
271
+ versionFiles: []
272
+ }];
273
+ })).pipe(Effect.map((nested) => nested.flat()));
274
+ }
275
+ /**
190
276
  * Cross-package validation: no overlap in `additionalScopes`, no shadowing
191
277
  * of another workspace package's directory (regardless of whether that
192
278
  * package is itself declared in `config.packages`), and no duplicate
@@ -244,7 +330,7 @@ function configErrorFromParseError(parseError, configPath) {
244
330
  * Each shape carries a private cache keyed by absolute project dir so
245
331
  * repeat `inspect`/`classify` calls reuse the materialized state.
246
332
  */
247
- function makeShape(reader, discovery) {
333
+ function makeShape(reader, discovery, fs) {
248
334
  const cache = /* @__PURE__ */ new Map();
249
335
  const inspect = (cwd) => Effect.gen(function* () {
250
336
  const projectDir = resolve(cwd);
@@ -280,19 +366,26 @@ function makeShape(reader, discovery) {
280
366
  path: w.path,
281
367
  version: w.version
282
368
  }));
369
+ const hasExplicitPackages = Object.keys(decodedOptions.packages ?? {}).length > 0;
283
370
  let scopes;
284
- try {
285
- scopes = buildResolvedScopes({
286
- options: decodedOptions,
287
- workspaces,
288
- projectDir,
289
- configPath
290
- });
291
- checkConflicts(scopes, workspaces, projectDir, configPath);
292
- } catch (e) {
293
- if (e instanceof ConfigurationError) return yield* Effect.fail(e);
294
- throw e;
295
- }
371
+ if (hasExplicitPackages) {
372
+ let explicitScopes;
373
+ try {
374
+ explicitScopes = buildResolvedScopes({
375
+ options: decodedOptions,
376
+ workspaces,
377
+ projectDir,
378
+ configPath
379
+ });
380
+ checkConflicts(explicitScopes, workspaces, projectDir, configPath);
381
+ } catch (e) {
382
+ if (e instanceof ConfigurationError) return yield* Effect.fail(e);
383
+ throw e;
384
+ }
385
+ const explicitNames = new Set(explicitScopes.map((s) => s.name));
386
+ const discoveredScopes = yield* buildFallbackScopes(fs, workspaces.filter((w) => !explicitNames.has(w.name)));
387
+ scopes = [...explicitScopes, ...discoveredScopes];
388
+ } else scopes = yield* buildFallbackScopes(fs, workspaces);
296
389
  const inspected = {
297
390
  configPath,
298
391
  projectDir,
@@ -367,7 +460,7 @@ function classifyOne(inspected, path) {
367
460
  * @public
368
461
  */
369
462
  const ConfigInspectorLive = Layer.effect(ConfigInspector, Effect.gen(function* () {
370
- return makeShape(yield* ChangesetConfigReader, yield* WorkspaceDiscovery);
463
+ return makeShape(yield* ChangesetConfigReader, yield* WorkspaceDiscovery, yield* FileSystem.FileSystem);
371
464
  }));
372
465
  /**
373
466
  * Test factory — build a {@link ConfigInspector} that returns a fixed
@@ -387,4 +480,4 @@ function makeConfigInspectorTest(fixed) {
387
480
  }
388
481
 
389
482
  //#endregion
390
- export { ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, makeConfigInspectorTest };
483
+ export { ClassificationReasonSchema, ClassificationSchema, ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, InspectedConfigSchema, ResolvedPackageScopeSchema, ResolvedVersionFileSchema, makeConfigInspectorTest };
@@ -26,8 +26,11 @@ const MARKDOWN_PATTERNS = {
26
26
  codeFences: /```/,
27
27
  /** Markdown inline code (`code`) - only flag if excessive */
28
28
  inlineCode: /`[^`]+`/g,
29
- /** Markdown bold (**text** or __text__) */
30
- bold: /(\*\*|__)[^*_]+(\*\*|__)/,
29
+ /** Markdown bold — asterisk form only (**text**). Underscore runs are NOT
30
+ * treated as bold, because __SNAKE_CASE__ identifiers (e.g.
31
+ * __PACKAGE_VERSION__) are legitimate commit-body prose. Agents emit
32
+ * **bold**, not __bold__, so coverage is unchanged. */
33
+ bold: /\*\*[^*]+\*\*/,
31
34
  /** Markdown italic (*text* or _text_) - be careful not to match normal underscores */
32
35
  italic: /(?<!\w)\*[^*]+\*(?!\w)/,
33
36
  /** Markdown links [text](url) */
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Context, Data, Effect, Equal, Hash, Layer, Option, Schema, Stream } from "effect";
2
- import { PackageManagerDetector, PublishConfig, PublishTarget, PublishabilityDetector, TopologicalSorter, WorkspaceDiscovery, WorkspaceDiscoveryError, WorkspacePackage, WorkspaceRoot } from "workspaces-effect";
3
2
  import { Command, CommandExecutor, FileSystem } from "@effect/platform";
3
+ import { PackageManagerDetector, PublishConfig, PublishTarget, PublishabilityDetector, TopologicalSorter, WorkspaceDiscovery, WorkspaceDiscoveryError, WorkspacePackage, WorkspaceRoot } from "workspaces-effect";
4
4
  import { Plugin } from "unified";
5
5
  import { PlatformError } from "@effect/platform/Error";
6
6
 
@@ -2652,88 +2652,77 @@ declare class ChangesetConfigReader extends ChangesetConfigReader_base {}
2652
2652
  declare const ChangesetConfigReaderLive: Layer.Layer<ChangesetConfigReader, never, FileSystem.FileSystem>;
2653
2653
  //#endregion
2654
2654
  //#region src/changesets/services/config-inspector.d.ts
2655
- /**
2656
- * A `versionFiles` entry expanded to its absolute target paths.
2657
- *
2658
- * @public
2659
- */
2660
- interface ResolvedVersionFile {
2661
- /** The original glob from the config. */
2662
- readonly glob: string;
2663
- /** JSONPath expressions to update (defaults to `["$.version"]`). */
2664
- readonly paths: ReadonlyArray<string>;
2665
- /** Absolute file paths the glob matched at inspection time. */
2666
- readonly matchedFiles: ReadonlyArray<string>;
2667
- }
2668
- /**
2669
- * A package's release surface after the config has been resolved against the
2670
- * workspace and the globs have been materialized.
2671
- *
2672
- * @public
2673
- */
2674
- interface ResolvedPackageScope {
2675
- /** Package name (matches the workspace package's `package.json#name`). */
2676
- readonly name: string;
2677
- /** Absolute path to the package's workspace directory. */
2678
- readonly workspaceDir: string;
2679
- /** Current version from the workspace package's `package.json`. */
2680
- readonly version: string;
2681
- /** Globs declared in the config's `additionalScopes`. */
2682
- readonly additionalScopes: ReadonlyArray<string>;
2683
- /** Files matched by `additionalScopes` (absolute paths). */
2684
- readonly additionalScopeFiles: ReadonlyArray<string>;
2685
- /** Version-file entries, each with their globs materialized. */
2686
- readonly versionFiles: ReadonlyArray<ResolvedVersionFile>;
2687
- }
2688
- /**
2689
- * Structured representation of a resolved `.changeset/config.json` for
2690
- * consumers (CLI commands, agents, tests).
2691
- *
2692
- * @public
2693
- */
2694
- interface InspectedConfig {
2695
- /** Absolute path of the resolved `.changeset/config.json`. */
2696
- readonly configPath: string;
2697
- /** Absolute path of the project root (the directory containing `.changeset/`). */
2698
- readonly projectDir: string;
2699
- /** The changelog formatter ID (e.g., `"@savvy-web/changesets/changelog"`). */
2700
- readonly changelog: string | null;
2701
- /** The base branch the workflow diffs against. */
2702
- readonly baseBranch: string;
2703
- /** Whether configured packages publish as public or restricted. */
2704
- readonly access: "public" | "restricted";
2705
- /** Package names ignored by the changeset workflow. */
2706
- readonly ignore: ReadonlyArray<string>;
2707
- /** Per-package release surfaces. */
2708
- readonly packages: ReadonlyArray<ResolvedPackageScope>;
2709
- /** True when the inspected config still used the deprecated top-level `versionFiles[]`. */
2710
- readonly legacyVersionFilesUsed: boolean;
2711
- }
2712
- /**
2713
- * Reason a path was attributed to a particular package (or left unmapped).
2714
- *
2715
- * @public
2716
- */
2717
- type ClassificationReason = "workspace" | {
2718
- readonly kind: "additionalScope";
2719
- readonly glob: string;
2720
- } | {
2721
- readonly kind: "versionFile";
2722
- readonly glob: string;
2723
- } | null;
2724
- /**
2725
- * The result of classifying a single path against a resolved config.
2726
- *
2727
- * @public
2728
- */
2729
- interface Classification {
2730
- /** Repo-relative path. */
2731
- readonly path: string;
2732
- /** Owning package name, or `null` if the path is outside every known release surface. */
2733
- readonly package: string | null;
2734
- /** Why this attribution was made. `null` mirrors `package: null`. */
2735
- readonly reason: ClassificationReason;
2736
- }
2655
+ /** A `versionFiles` entry expanded to its absolute target paths. @public */
2656
+ declare const ResolvedVersionFileSchema: Schema.Struct<{
2657
+ glob: typeof Schema.String;
2658
+ paths: Schema.Array$<typeof Schema.String>;
2659
+ matchedFiles: Schema.Array$<typeof Schema.String>;
2660
+ }>;
2661
+ /** A `versionFiles` entry expanded to its absolute target paths. @public */
2662
+ type ResolvedVersionFile = Schema.Schema.Type<typeof ResolvedVersionFileSchema>;
2663
+ /** A package's resolved release surface. @public */
2664
+ declare const ResolvedPackageScopeSchema: Schema.Struct<{
2665
+ name: typeof Schema.String;
2666
+ workspaceDir: typeof Schema.String;
2667
+ version: typeof Schema.String;
2668
+ additionalScopes: Schema.Array$<typeof Schema.String>;
2669
+ additionalScopeFiles: Schema.Array$<typeof Schema.String>;
2670
+ versionFiles: Schema.Array$<Schema.Struct<{
2671
+ glob: typeof Schema.String;
2672
+ paths: Schema.Array$<typeof Schema.String>;
2673
+ matchedFiles: Schema.Array$<typeof Schema.String>;
2674
+ }>>;
2675
+ }>;
2676
+ /** A package's resolved release surface. @public */
2677
+ type ResolvedPackageScope = Schema.Schema.Type<typeof ResolvedPackageScopeSchema>;
2678
+ /** Structured representation of a resolved `.changeset/config.json`. @public */
2679
+ declare const InspectedConfigSchema: Schema.Struct<{
2680
+ configPath: typeof Schema.String;
2681
+ projectDir: Schema.SchemaClass<string, string, never>;
2682
+ changelog: Schema.NullOr<typeof Schema.String>;
2683
+ baseBranch: typeof Schema.String;
2684
+ access: Schema.Literal<["public", "restricted"]>;
2685
+ ignore: Schema.Array$<typeof Schema.String>;
2686
+ packages: Schema.Array$<Schema.Struct<{
2687
+ name: typeof Schema.String;
2688
+ workspaceDir: typeof Schema.String;
2689
+ version: typeof Schema.String;
2690
+ additionalScopes: Schema.Array$<typeof Schema.String>;
2691
+ additionalScopeFiles: Schema.Array$<typeof Schema.String>;
2692
+ versionFiles: Schema.Array$<Schema.Struct<{
2693
+ glob: typeof Schema.String;
2694
+ paths: Schema.Array$<typeof Schema.String>;
2695
+ matchedFiles: Schema.Array$<typeof Schema.String>;
2696
+ }>>;
2697
+ }>>;
2698
+ legacyVersionFilesUsed: typeof Schema.Boolean;
2699
+ }>;
2700
+ /** Structured representation of a resolved `.changeset/config.json`. @public */
2701
+ type InspectedConfig = Schema.Schema.Type<typeof InspectedConfigSchema>;
2702
+ /** Reason a path was attributed to a package (or left unmapped). @public */
2703
+ declare const ClassificationReasonSchema: Schema.Union<[Schema.Literal<["workspace"]>, Schema.Struct<{
2704
+ kind: Schema.Literal<["additionalScope"]>;
2705
+ glob: typeof Schema.String;
2706
+ }>, Schema.Struct<{
2707
+ kind: Schema.Literal<["versionFile"]>;
2708
+ glob: typeof Schema.String;
2709
+ }>, typeof Schema.Null]>;
2710
+ /** Reason a path was attributed to a package (or left unmapped). @public */
2711
+ type ClassificationReason = Schema.Schema.Type<typeof ClassificationReasonSchema>;
2712
+ /** The result of classifying a single path against a resolved config. @public */
2713
+ declare const ClassificationSchema: Schema.Struct<{
2714
+ path: typeof Schema.String;
2715
+ package: Schema.NullOr<typeof Schema.String>;
2716
+ reason: Schema.Union<[Schema.Literal<["workspace"]>, Schema.Struct<{
2717
+ kind: Schema.Literal<["additionalScope"]>;
2718
+ glob: typeof Schema.String;
2719
+ }>, Schema.Struct<{
2720
+ kind: Schema.Literal<["versionFile"]>;
2721
+ glob: typeof Schema.String;
2722
+ }>, typeof Schema.Null]>;
2723
+ }>;
2724
+ /** The result of classifying a single path against a resolved config. @public */
2725
+ type Classification = Schema.Schema.Type<typeof ClassificationSchema>;
2737
2726
  /**
2738
2727
  * Effect service interface for inspecting a project's changeset config.
2739
2728
  *
@@ -2797,7 +2786,7 @@ declare class ConfigInspector extends ConfigInspectorBase {}
2797
2786
  *
2798
2787
  * @public
2799
2788
  */
2800
- declare const ConfigInspectorLive: Layer.Layer<ConfigInspector, never, ChangesetConfigReader | WorkspaceDiscovery>;
2789
+ declare const ConfigInspectorLive: Layer.Layer<ConfigInspector, never, ChangesetConfigReader | WorkspaceDiscovery | FileSystem.FileSystem>;
2801
2790
  /**
2802
2791
  * Test factory — build a {@link ConfigInspector} that returns a fixed
2803
2792
  * {@link InspectedConfig} without touching the filesystem.
@@ -2811,44 +2800,46 @@ declare const ConfigInspectorLive: Layer.Layer<ConfigInspector, never, Changeset
2811
2800
  declare function makeConfigInspectorTest(fixed: InspectedConfig): Layer.Layer<ConfigInspector>;
2812
2801
  //#endregion
2813
2802
  //#region src/changesets/services/branch-analyzer.d.ts
2814
- /**
2815
- * Git diff status as reported by `--name-status`.
2816
- *
2817
- * @public
2818
- */
2819
- type FileStatus = "added" | "modified" | "deleted" | "renamed" | "copied" | "typechange" | "unmerged" | "unknown";
2820
- /**
2821
- * One file entry in the branch analysis output.
2822
- *
2823
- * @public
2824
- */
2825
- interface BranchFileEntry {
2826
- /** Repo-relative path (the new path in the case of renames). */
2827
- readonly path: string;
2828
- /** Git diff status. */
2829
- readonly status: FileStatus;
2830
- /** Owning package, or `null` if the path is outside any known release surface. */
2831
- readonly package: string | null;
2832
- /** Reason for the package attribution; mirrors {@link Classification.reason}. */
2833
- readonly reason: ClassificationReason;
2834
- }
2835
- /**
2836
- * Structured result of analyzing the current branch against its base.
2837
- *
2838
- * @public
2839
- */
2840
- interface BranchAnalysis {
2841
- /** The branch the diff was computed against. */
2842
- readonly baseBranch: string;
2843
- /** The merge-base SHA between `HEAD` and `baseBranch`. */
2844
- readonly mergeBaseSha: string;
2845
- /** Files changed since the merge base, with classification. */
2846
- readonly files: ReadonlyArray<BranchFileEntry>;
2847
- /** Unique package names that own at least one changed file. */
2848
- readonly packagesAffected: ReadonlyArray<string>;
2849
- /** Repo-relative paths whose `package` is `null` — candidates for an `AskUserQuestion`. */
2850
- readonly unmappedFiles: ReadonlyArray<string>;
2851
- }
2803
+ /** Git diff status as reported by `--name-status`. @public */
2804
+ declare const FileStatusSchema: Schema.Literal<["added", "modified", "deleted", "renamed", "copied", "typechange", "unmerged", "unknown"]>;
2805
+ /** Git diff status as reported by `--name-status`. @public */
2806
+ type FileStatus = Schema.Schema.Type<typeof FileStatusSchema>;
2807
+ /** One file entry in the branch analysis output. @public */
2808
+ declare const BranchFileEntrySchema: Schema.Struct<{
2809
+ path: Schema.SchemaClass<string, string, never>;
2810
+ status: Schema.Literal<["added", "modified", "deleted", "renamed", "copied", "typechange", "unmerged", "unknown"]>;
2811
+ package: Schema.NullOr<typeof Schema.String>;
2812
+ reason: Schema.Union<[Schema.Literal<["workspace"]>, Schema.Struct<{
2813
+ kind: Schema.Literal<["additionalScope"]>;
2814
+ glob: typeof Schema.String;
2815
+ }>, Schema.Struct<{
2816
+ kind: Schema.Literal<["versionFile"]>;
2817
+ glob: typeof Schema.String;
2818
+ }>, typeof Schema.Null]>;
2819
+ }>;
2820
+ /** One file entry in the branch analysis output. @public */
2821
+ type BranchFileEntry = Schema.Schema.Type<typeof BranchFileEntrySchema>;
2822
+ /** Structured result of analyzing the current branch against its base. @public */
2823
+ declare const BranchAnalysisSchema: Schema.Struct<{
2824
+ baseBranch: typeof Schema.String;
2825
+ mergeBaseSha: typeof Schema.String;
2826
+ files: Schema.Array$<Schema.Struct<{
2827
+ path: Schema.SchemaClass<string, string, never>;
2828
+ status: Schema.Literal<["added", "modified", "deleted", "renamed", "copied", "typechange", "unmerged", "unknown"]>;
2829
+ package: Schema.NullOr<typeof Schema.String>;
2830
+ reason: Schema.Union<[Schema.Literal<["workspace"]>, Schema.Struct<{
2831
+ kind: Schema.Literal<["additionalScope"]>;
2832
+ glob: typeof Schema.String;
2833
+ }>, Schema.Struct<{
2834
+ kind: Schema.Literal<["versionFile"]>;
2835
+ glob: typeof Schema.String;
2836
+ }>, typeof Schema.Null]>;
2837
+ }>>;
2838
+ packagesAffected: Schema.Array$<typeof Schema.String>;
2839
+ unmappedFiles: Schema.Array$<typeof Schema.String>;
2840
+ }>;
2841
+ /** Structured result of analyzing the current branch against its base. @public */
2842
+ type BranchAnalysis = Schema.Schema.Type<typeof BranchAnalysisSchema>;
2852
2843
  /**
2853
2844
  * Effect service interface for branch analysis.
2854
2845
  *
@@ -4544,7 +4535,7 @@ interface TokenTypeMap {
4544
4535
  chunkString: 'chunkString';
4545
4536
  }
4546
4537
  //#endregion
4547
- //#region ../../node_modules/.pnpm/markdownlint@0.40.0/node_modules/markdownlint/lib/markdownlint.d.mts
4538
+ //#region ../../node_modules/.pnpm/markdownlint@0.41.0/node_modules/markdownlint/lib/markdownlint.d.mts
4548
4539
  /**
4549
4540
  * Function to implement rule logic.
4550
4541
  */
@@ -4610,13 +4601,13 @@ type ParserMicromark = {
4610
4601
  tokens: MicromarkToken[];
4611
4602
  };
4612
4603
  /**
4613
- * markdown-it token.
4604
+ * markdown-it base token.
4614
4605
  */
4615
- type MarkdownItToken = {
4606
+ type MarkdownItBaseToken = {
4616
4607
  /**
4617
4608
  * HTML attributes.
4618
4609
  */
4619
- attrs: string[][];
4610
+ attrs: string[][] | null;
4620
4611
  /**
4621
4612
  * Block-level token.
4622
4613
  */
@@ -4624,7 +4615,7 @@ type MarkdownItToken = {
4624
4615
  /**
4625
4616
  * Child nodes.
4626
4617
  */
4627
- children: MarkdownItToken[];
4618
+ children: MarkdownItBaseToken[] | null;
4628
4619
  /**
4629
4620
  * Tag contents.
4630
4621
  */
@@ -4644,7 +4635,7 @@ type MarkdownItToken = {
4644
4635
  /**
4645
4636
  * Beginning/ending line numbers.
4646
4637
  */
4647
- map: number[];
4638
+ map: number[] | null;
4648
4639
  /**
4649
4640
  * Markup text.
4650
4641
  */
@@ -4652,7 +4643,7 @@ type MarkdownItToken = {
4652
4643
  /**
4653
4644
  * Arbitrary data.
4654
4645
  */
4655
- meta: any;
4646
+ meta: Object;
4656
4647
  /**
4657
4648
  * Level change.
4658
4649
  */
@@ -4665,6 +4656,15 @@ type MarkdownItToken = {
4665
4656
  * Token type.
4666
4657
  */
4667
4658
  type: string;
4659
+ };
4660
+ /**
4661
+ * markdown-it extended token.
4662
+ */
4663
+ type MarkdownItExtendedToken = {
4664
+ /**
4665
+ * Child nodes.
4666
+ */
4667
+ children: MarkdownItExtendedToken[] | null;
4668
4668
  /**
4669
4669
  * Line number (1-based).
4670
4670
  */
@@ -4674,6 +4674,10 @@ type MarkdownItToken = {
4674
4674
  */
4675
4675
  line: string;
4676
4676
  };
4677
+ /**
4678
+ * markdown-it token.
4679
+ */
4680
+ type MarkdownItToken = MarkdownItBaseToken & MarkdownItExtendedToken;
4677
4681
  type MicromarkTokenType = TokenType;
4678
4682
  /**
4679
4683
  * micromark token.
@@ -4727,23 +4731,23 @@ type RuleOnErrorInfo = {
4727
4731
  /**
4728
4732
  * Detail about the error.
4729
4733
  */
4730
- detail?: string;
4734
+ detail?: string | undefined;
4731
4735
  /**
4732
4736
  * Context for the error.
4733
4737
  */
4734
- context?: string;
4738
+ context?: string | undefined;
4735
4739
  /**
4736
4740
  * Link to more information.
4737
4741
  */
4738
- information?: URL;
4742
+ information?: URL | undefined;
4739
4743
  /**
4740
4744
  * Column number (1-based) and length.
4741
4745
  */
4742
- range?: number[];
4746
+ range?: number[] | undefined;
4743
4747
  /**
4744
4748
  * Fix information.
4745
4749
  */
4746
- fixInfo?: RuleOnErrorFixInfo;
4750
+ fixInfo?: RuleOnErrorFixInfo | undefined;
4747
4751
  };
4748
4752
  /**
4749
4753
  * Fix information for RuleOnErrorInfo.
@@ -4752,19 +4756,19 @@ type RuleOnErrorFixInfo = {
4752
4756
  /**
4753
4757
  * Line number (1-based).
4754
4758
  */
4755
- lineNumber?: number;
4759
+ lineNumber?: number | undefined;
4756
4760
  /**
4757
4761
  * Column of the fix (1-based).
4758
4762
  */
4759
- editColumn?: number;
4763
+ editColumn?: number | undefined;
4760
4764
  /**
4761
4765
  * Count of characters to delete.
4762
4766
  */
4763
- deleteCount?: number;
4767
+ deleteCount?: number | undefined;
4764
4768
  /**
4765
4769
  * Text to insert (after deleting).
4766
4770
  */
4767
- insertText?: string;
4771
+ insertText?: string | undefined;
4768
4772
  };
4769
4773
  /**
4770
4774
  * Rule definition.
@@ -4781,7 +4785,7 @@ type Rule$2 = {
4781
4785
  /**
4782
4786
  * Link to more information.
4783
4787
  */
4784
- information?: URL;
4788
+ information?: URL | undefined;
4785
4789
  /**
4786
4790
  * Rule tag(s).
4787
4791
  */
@@ -4793,7 +4797,7 @@ type Rule$2 = {
4793
4797
  /**
4794
4798
  * True if asynchronous.
4795
4799
  */
4796
- asynchronous?: boolean;
4800
+ asynchronous?: boolean | undefined;
4797
4801
  /**
4798
4802
  * Rule implementation.
4799
4803
  */
@@ -4804,7 +4808,7 @@ type Rule$2 = {
4804
4808
  */
4805
4809
  type RuleConfiguration = boolean | any;
4806
4810
  //#endregion
4807
- //#region ../../node_modules/.pnpm/markdownlint@0.40.0/node_modules/markdownlint/lib/exports.d.mts
4811
+ //#region ../../node_modules/.pnpm/markdownlint@0.41.0/node_modules/markdownlint/lib/exports.d.mts
4808
4812
  type Rule$1 = Rule$2;
4809
4813
  //#endregion
4810
4814
  //#region src/changesets/markdownlint/rules/content-structure.d.ts
@@ -5086,7 +5090,7 @@ declare const RequiredSectionsRule: import("unified-lint-rule").Plugin<Root, unk
5086
5090
  //#region src/changesets/remark/rules/uncategorized-content.d.ts
5087
5091
  declare const UncategorizedContentRule: import("unified-lint-rule").Plugin<Root, unknown>;
5088
5092
  declare namespace index_d_exports {
5089
- export { AggregateDependencyTablesPlugin, BranchAnalysis, BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, BranchAnalyzerShape, BranchFileEntry, Categories, Changelog, ChangelogService, ChangelogServiceBase, ChangelogServiceShape, ChangelogTransformer, Changeset, ChangesetLinter, ChangesetOptions, ChangesetOptionsSchema, ChangesetSchema, ChangesetSummarySchema, ChangesetValidationError, ChangesetValidationErrorBase, Classification, ClassificationReason, CommitHashSchema, ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, ConfigInspectorShape, ConfigurationError, ConfigurationErrorBase, ContentStructureRule, ContributorFootnotesPlugin, DeduplicateItemsPlugin, DependencyAction, DependencyActionSchema, DependencyTable, DependencyTableFormatRule, DependencyTableRow, DependencyTableRowSchema, DependencyTableSchema, DependencyTableType, DependencyTableTypeSchema, DependencyType, DependencyTypeSchema, DependencyUpdate, DependencyUpdateSchema, FileStatus, GitError, GitErrorBase, GitHubApiError, GitHubApiErrorBase, GitHubCommitInfo, GitHubInfo, GitHubInfoSchema, GitHubLive, GitHubService, GitHubServiceBase, GitHubServiceShape, GlobSchema, HeadingHierarchyRule, InspectedConfig, IssueLinkRefsPlugin, IssueNumberSchema, JsonPathSchema, LegacyVersionFileConfig, LegacyVersionFileConfigSchema, LegacyVersionFilesSchema, LintMessage, MarkdownLive, MarkdownParseError, MarkdownParseErrorBase, MarkdownService, MarkdownServiceBase, MarkdownServiceShape, ContentStructureRule$1 as MarkdownlintContentStructureRule, DependencyTableFormatRule$1 as MarkdownlintDependencyTableFormatRule, HeadingHierarchyRule$1 as MarkdownlintHeadingHierarchyRule, RequiredSectionsRule$1 as MarkdownlintRequiredSectionsRule, UncategorizedContentRule$1 as MarkdownlintUncategorizedContentRule, MergeSectionsPlugin, NonEmptyString, NormalizeFormatPlugin, PackageScope, PackageScopeSchema, PackagesRecordSchema, PositiveInteger, ReorderSectionsPlugin, RepoSchema, RequiredSectionsRule, ResolvedPackageScope, ResolvedVersionFile, SectionCategory, SectionCategorySchema, SilkChangesetPreset, SilkChangesetTransformPreset, SilkChangesetsRules, UncategorizedContentRule, UrlOrMarkdownLinkSchema, UsernameSchema, VersionFileConfig, VersionFileConfigSchema, VersionFileError, VersionFileErrorBase, VersionFileUpdate, VersionFiles, VersionFilesSchema, VersionOrEmptySchema, VersionType, VersionTypeSchema, WorkspaceDependencyDiff, WorkspaceSnapshot, WorkspaceSnapshotReader, WorkspaceSnapshotReaderBase, WorkspaceSnapshotReaderLive, WorkspaceSnapshotReaderShape, WorkspaceVersion, changelogFunctions, computeWorkspaceDependencyDiffs, gitMergeBase, listPublishablePackageNames, makeBranchAnalyzerTest, makeConfigInspectorTest, makeGitHubTest, serializeDependencyTableToMarkdown, snapshotFromWorktree };
5093
+ export { AggregateDependencyTablesPlugin, BranchAnalysis, BranchAnalysisSchema, BranchAnalyzer, BranchAnalyzerBase, BranchAnalyzerLive, BranchAnalyzerShape, BranchFileEntry, BranchFileEntrySchema, Categories, Changelog, ChangelogService, ChangelogServiceBase, ChangelogServiceShape, ChangelogTransformer, Changeset, ChangesetLinter, ChangesetOptions, ChangesetOptionsSchema, ChangesetSchema, ChangesetSummarySchema, ChangesetValidationError, ChangesetValidationErrorBase, Classification, ClassificationReason, ClassificationReasonSchema, ClassificationSchema, CommitHashSchema, ConfigInspector, ConfigInspectorBase, ConfigInspectorLive, ConfigInspectorShape, ConfigurationError, ConfigurationErrorBase, ContentStructureRule, ContributorFootnotesPlugin, DeduplicateItemsPlugin, DependencyAction, DependencyActionSchema, DependencyTable, DependencyTableFormatRule, DependencyTableRow, DependencyTableRowSchema, DependencyTableSchema, DependencyTableType, DependencyTableTypeSchema, DependencyType, DependencyTypeSchema, DependencyUpdate, DependencyUpdateSchema, FileStatus, FileStatusSchema, GitError, GitErrorBase, GitHubApiError, GitHubApiErrorBase, GitHubCommitInfo, GitHubInfo, GitHubInfoSchema, GitHubLive, GitHubService, GitHubServiceBase, GitHubServiceShape, GlobSchema, HeadingHierarchyRule, InspectedConfig, InspectedConfigSchema, IssueLinkRefsPlugin, IssueNumberSchema, JsonPathSchema, LegacyVersionFileConfig, LegacyVersionFileConfigSchema, LegacyVersionFilesSchema, LintMessage, MarkdownLive, MarkdownParseError, MarkdownParseErrorBase, MarkdownService, MarkdownServiceBase, MarkdownServiceShape, ContentStructureRule$1 as MarkdownlintContentStructureRule, DependencyTableFormatRule$1 as MarkdownlintDependencyTableFormatRule, HeadingHierarchyRule$1 as MarkdownlintHeadingHierarchyRule, RequiredSectionsRule$1 as MarkdownlintRequiredSectionsRule, UncategorizedContentRule$1 as MarkdownlintUncategorizedContentRule, MergeSectionsPlugin, NonEmptyString, NormalizeFormatPlugin, PackageScope, PackageScopeSchema, PackagesRecordSchema, PositiveInteger, ReorderSectionsPlugin, RepoSchema, RequiredSectionsRule, ResolvedPackageScope, ResolvedPackageScopeSchema, ResolvedVersionFile, ResolvedVersionFileSchema, SectionCategory, SectionCategorySchema, SilkChangesetPreset, SilkChangesetTransformPreset, SilkChangesetsRules, UncategorizedContentRule, UrlOrMarkdownLinkSchema, UsernameSchema, VersionFileConfig, VersionFileConfigSchema, VersionFileError, VersionFileErrorBase, VersionFileUpdate, VersionFiles, VersionFilesSchema, VersionOrEmptySchema, VersionType, VersionTypeSchema, WorkspaceDependencyDiff, WorkspaceSnapshot, WorkspaceSnapshotReader, WorkspaceSnapshotReaderBase, WorkspaceSnapshotReaderLive, WorkspaceSnapshotReaderShape, WorkspaceVersion, changelogFunctions, computeWorkspaceDependencyDiffs, gitMergeBase, listPublishablePackageNames, makeBranchAnalyzerTest, makeConfigInspectorTest, makeGitHubTest, serializeDependencyTableToMarkdown, snapshotFromWorktree };
5090
5094
  }
5091
5095
  //#endregion
5092
5096
  //#region src/commitlint/config/schema.d.ts
@@ -6434,7 +6438,7 @@ declare abstract class Handler {
6434
6438
  *
6435
6439
  * @example
6436
6440
  * ```typescript
6437
- * import { Biome } from '@savvy-web/lint-staged';
6441
+ * import { Biome } from '@savvy-web/silk/lint';
6438
6442
  *
6439
6443
  * export default {
6440
6444
  * // Auto-discovers biome command and config file
@@ -6539,7 +6543,7 @@ declare class Biome {
6539
6543
  *
6540
6544
  * @example
6541
6545
  * ```typescript
6542
- * import { Markdown } from '@savvy-web/lint-staged';
6546
+ * import { Markdown } from '@savvy-web/silk/lint';
6543
6547
  *
6544
6548
  * export default {
6545
6549
  * // Auto-discovers command and config file
@@ -6616,7 +6620,7 @@ declare class Markdown {
6616
6620
  *
6617
6621
  * @example
6618
6622
  * ```typescript
6619
- * import { PackageJson } from '@savvy-web/lint-staged';
6623
+ * import { PackageJson } from '@savvy-web/silk/lint';
6620
6624
  *
6621
6625
  * export default {
6622
6626
  * // Use defaults
@@ -6723,7 +6727,7 @@ interface PnpmWorkspaceContent {
6723
6727
  *
6724
6728
  * @example
6725
6729
  * ```typescript
6726
- * import { PnpmWorkspace } from '\@savvy-web/lint-staged';
6730
+ * import { PnpmWorkspace } from '\@savvy-web/silk/lint';
6727
6731
  *
6728
6732
  * export default {
6729
6733
  * [PnpmWorkspace.glob]: PnpmWorkspace.create({
@@ -6797,7 +6801,7 @@ declare class PnpmWorkspace {
6797
6801
  *
6798
6802
  * @example
6799
6803
  * ```typescript
6800
- * import { ShellScripts } from '@savvy-web/lint-staged';
6804
+ * import { ShellScripts } from '@savvy-web/silk/lint';
6801
6805
  *
6802
6806
  * export default {
6803
6807
  * [ShellScripts.glob]: ShellScripts.create({
@@ -6848,7 +6852,7 @@ type TypeScriptCompiler = "tsgo" | "tsc";
6848
6852
  *
6849
6853
  * @example
6850
6854
  * ```typescript
6851
- * import { TypeScript } from '\@savvy-web/lint-staged';
6855
+ * import { TypeScript } from '\@savvy-web/silk/lint';
6852
6856
  *
6853
6857
  * export default {
6854
6858
  * // Auto-detects compiler and runs type checking
@@ -6940,7 +6944,7 @@ declare class TypeScript {
6940
6944
  *
6941
6945
  * @example
6942
6946
  * ```typescript
6943
- * import { Yaml } from '\@savvy-web/lint-staged';
6947
+ * import { Yaml } from '\@savvy-web/silk/lint';
6944
6948
  *
6945
6949
  * export default {
6946
6950
  * [Yaml.glob]: Yaml.create({
@@ -7035,7 +7039,7 @@ declare class Yaml {
7035
7039
  *
7036
7040
  * @example
7037
7041
  * ```typescript
7038
- * import { createConfig } from '@savvy-web/lint-staged';
7042
+ * import { createConfig } from '@savvy-web/silk/lint';
7039
7043
  *
7040
7044
  * // Use all defaults
7041
7045
  * export default createConfig();
@@ -7063,7 +7067,7 @@ type PresetExtendOptions = CreateConfigOptions;
7063
7067
  *
7064
7068
  * @example
7065
7069
  * ```typescript
7066
- * import { Preset } from '@savvy-web/lint-staged';
7070
+ * import { Preset } from '@savvy-web/silk/lint';
7067
7071
  *
7068
7072
  * // Use a preset directly
7069
7073
  * export default Preset.standard();
@@ -7090,7 +7094,7 @@ declare class Preset {
7090
7094
  *
7091
7095
  * @example
7092
7096
  * ```typescript
7093
- * import { Preset } from '@savvy-web/lint-staged';
7097
+ * import { Preset } from '@savvy-web/silk/lint';
7094
7098
  *
7095
7099
  * export default Preset.minimal();
7096
7100
  * ```
@@ -7112,7 +7116,7 @@ declare class Preset {
7112
7116
  *
7113
7117
  * @example
7114
7118
  * ```typescript
7115
- * import { Preset } from '@savvy-web/lint-staged';
7119
+ * import { Preset } from '@savvy-web/silk/lint';
7116
7120
  *
7117
7121
  * export default Preset.standard({
7118
7122
  * biome: { exclude: ['legacy/'] },
@@ -7137,7 +7141,7 @@ declare class Preset {
7137
7141
  *
7138
7142
  * @example
7139
7143
  * ```typescript
7140
- * import { Preset } from '@savvy-web/lint-staged';
7144
+ * import { Preset } from '@savvy-web/silk/lint';
7141
7145
  *
7142
7146
  * export default Preset.silk({
7143
7147
  * typescript: { skipTypecheck: true },
@@ -7154,7 +7158,7 @@ declare class Preset {
7154
7158
  *
7155
7159
  * @example
7156
7160
  * ```typescript
7157
- * import { Preset } from '@savvy-web/lint-staged';
7161
+ * import { Preset } from '@savvy-web/silk/lint';
7158
7162
  *
7159
7163
  * const presetName = process.env.LINT_PRESET || 'standard';
7160
7164
  * export default Preset.get(presetName);
@@ -7169,7 +7173,7 @@ declare class Preset {
7169
7173
  *
7170
7174
  * @example
7171
7175
  * ```typescript
7172
- * import { Command } from '@savvy-web/lint-staged';
7176
+ * import { Command } from '@savvy-web/silk/lint';
7173
7177
  *
7174
7178
  * if (Command.isAvailable('yq')) {
7175
7179
  * // yq is installed globally
@@ -7356,7 +7360,7 @@ declare class Command$1 {
7356
7360
  *
7357
7361
  * @example
7358
7362
  * ```typescript
7359
- * import { Filter } from '@savvy-web/lint-staged';
7363
+ * import { Filter } from '@savvy-web/silk/lint';
7360
7364
  *
7361
7365
  * const handler = (filenames: readonly string[]) => {
7362
7366
  * const filtered = Filter.exclude(filenames, ['dist/', '__fixtures__']);
@@ -7847,6 +7851,8 @@ declare const HUSKY_HOOK_PATH = ".husky/pre-commit";
7847
7851
  declare const POST_CHECKOUT_HOOK_PATH = ".husky/post-checkout";
7848
7852
  /** Path for the husky post-merge hook. */
7849
7853
  declare const POST_MERGE_HOOK_PATH = ".husky/post-merge";
7854
+ /** Path for the husky post-commit hook. */
7855
+ declare const POST_COMMIT_HOOK_PATH = ".husky/post-commit";
7850
7856
  /** Default path for the lint-staged config file. */
7851
7857
  declare const DEFAULT_CONFIG_PATH = "lib/configs/lint-staged.config.ts";
7852
7858
  /** Path for the markdownlint-cli2 config file. */
@@ -7885,9 +7891,11 @@ declare function generateManagedContent(configPath: string): string;
7885
7891
  //#endregion
7886
7892
  //#region src/lint/cli/templates/markdownlint.gen.d.ts
7887
7893
  /**
7888
- * Auto-generated markdownlint template data.
7894
+ * Markdownlint template data.
7889
7895
  *
7890
- * DO NOT EDIT regenerate with: pnpm generate:templates
7896
+ * Originally generated in the now-deprecated `@savvy-web/lint-staged` package;
7897
+ * the generator does not live in this repo, so this file is maintained by hand.
7898
+ * Edit the `MARKDOWNLINT_TEMPLATE` / `MARKDOWNLINT_CONFIG` objects directly.
7891
7899
  *
7892
7900
  * @internal
7893
7901
  */
@@ -7898,7 +7906,7 @@ declare const MARKDOWNLINT_TEMPLATE: {
7898
7906
  readonly fix: true;
7899
7907
  readonly gitignore: true;
7900
7908
  readonly noBanner: true;
7901
- readonly ignores: readonly ["**/node_modules", "**/.cache", "**/coverage", "**/.coverage", "**/dist", "**/CHANGELOG.md", "**/.claude/plans", "**/docs/superpowers"];
7909
+ readonly ignores: readonly ["**/node_modules", "**/.cache", "**/coverage", "**/.coverage", "**/dist", "**/CHANGELOG.md", "**/.claude/plans", "**/docs/superpowers", "**/__test__/**/fixtures/**", "**/__fixtures__/**"];
7902
7910
  readonly customRules: readonly ["@savvy-web/silk/changesets/markdownlint"];
7903
7911
  readonly config: {
7904
7912
  readonly default: true;
@@ -7928,7 +7936,9 @@ declare const MARKDOWNLINT_TEMPLATE: {
7928
7936
  readonly MD024: {
7929
7937
  readonly siblings_only: true;
7930
7938
  };
7931
- readonly MD025: true;
7939
+ readonly MD025: {
7940
+ readonly front_matter_title: "";
7941
+ };
7932
7942
  readonly MD026: true;
7933
7943
  readonly MD027: true;
7934
7944
  readonly MD028: true;
@@ -8006,7 +8016,9 @@ declare const MARKDOWNLINT_CONFIG: {
8006
8016
  readonly MD024: {
8007
8017
  readonly siblings_only: true;
8008
8018
  };
8009
- readonly MD025: true;
8019
+ readonly MD025: {
8020
+ readonly front_matter_title: "";
8021
+ };
8010
8022
  readonly MD026: true;
8011
8023
  readonly MD027: true;
8012
8024
  readonly MD028: true;
@@ -8053,7 +8065,7 @@ declare const MARKDOWNLINT_CONFIG: {
8053
8065
  readonly "changeset-dependency-table-format": false;
8054
8066
  };
8055
8067
  declare namespace index_d_exports$2 {
8056
- export { BaseHandlerOptions, Biome, BiomeOptions, Command$1 as Command, CreateConfigOptions, DEFAULT_CONFIG_PATH, Filter, HUSKY_HOOK_PATH, Handler, LegacySavvyLintHygieneDef, LintStagedConfig, LintStagedEntry, LintStagedHandler, MARKDOWNLINT_CONFIG, MARKDOWNLINT_CONFIG_PATH, MARKDOWNLINT_SCHEMA, MARKDOWNLINT_TEMPLATE, Markdown, MarkdownOptions, POST_CHECKOUT_HOOK_PATH, POST_MERGE_HOOK_PATH, PackageJson, PackageJsonOptions, PackageManager, PnpmWorkspace, PnpmWorkspaceContent, PnpmWorkspaceOptions, Preset, PresetExtendOptions, PresetType, SavvyLintSectionDef, ShellScripts, ShellScriptsOptions, ToolSearchResult, TypeScript, TypeScriptCompiler, TypeScriptOptions, WorkspacePackageInfo, Yaml, YamlOptions, createConfig, generateManagedContent, getWorkspacePackagePaths, getWorkspacePackages, getWorkspaceRoot, isWorkspacePackagePath, resetWorkspaceCache, savvyLintBlock };
8068
+ export { BaseHandlerOptions, Biome, BiomeOptions, Command$1 as Command, CreateConfigOptions, DEFAULT_CONFIG_PATH, Filter, HUSKY_HOOK_PATH, Handler, LegacySavvyLintHygieneDef, LintStagedConfig, LintStagedEntry, LintStagedHandler, MARKDOWNLINT_CONFIG, MARKDOWNLINT_CONFIG_PATH, MARKDOWNLINT_SCHEMA, MARKDOWNLINT_TEMPLATE, Markdown, MarkdownOptions, POST_CHECKOUT_HOOK_PATH, POST_COMMIT_HOOK_PATH, POST_MERGE_HOOK_PATH, PackageJson, PackageJsonOptions, PackageManager, PnpmWorkspace, PnpmWorkspaceContent, PnpmWorkspaceOptions, Preset, PresetExtendOptions, PresetType, SavvyLintSectionDef, ShellScripts, ShellScriptsOptions, ToolSearchResult, TypeScript, TypeScriptCompiler, TypeScriptOptions, WorkspacePackageInfo, Yaml, YamlOptions, createConfig, generateManagedContent, getWorkspacePackagePaths, getWorkspacePackages, getWorkspaceRoot, isWorkspacePackagePath, resetWorkspaceCache, savvyLintBlock };
8057
8069
  }
8058
8070
  //#endregion
8059
8071
  //#region src/schemas/BiomeConfig.d.ts
package/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { ChangesetConfigError } from "./errors/ChangesetConfigError.js";
2
2
  import { ChangesetConfigReader, ChangesetConfigReaderLive } from "./services/ChangesetConfigReader.js";
3
+ import { ChangesetConfig, ChangesetConfigLive } from "./services/ChangesetConfig.js";
4
+ import { PublishabilityDetectorAdaptiveLive, SilkPublishability, SilkPublishabilityDetectorLive, readTargetsBinding } from "./services/SilkPublishability.js";
3
5
  import { changesets_exports } from "./changesets/index.js";
4
6
  import { commitlint_exports } from "./commitlint/index.js";
5
7
  import { BiomeSyncError } from "./errors/BiomeSyncError.js";
@@ -24,10 +26,8 @@ import { ResolvedTool } from "./schemas/ResolvedTool.js";
24
26
  import { ToolDefinition } from "./schemas/ToolDefinition.js";
25
27
  import { AnalyzedWorkspace, SilkPublishConfig, WorkspaceAnalysis } from "./schemas/WorkspaceAnalysisSchemas.js";
26
28
  import { BiomeSchemaSync, BiomeSchemaSyncLive, buildSchemaUrl, extractSemver } from "./services/BiomeSchemaSync.js";
27
- import { ChangesetConfig, ChangesetConfigLive } from "./services/ChangesetConfig.js";
28
29
  import { ConfigDiscovery, ConfigDiscoveryLive } from "./services/ConfigDiscovery.js";
29
30
  import { ManagedSection, ManagedSectionLive } from "./services/ManagedSection.js";
30
- import { PublishabilityDetectorAdaptiveLive, SilkPublishability, SilkPublishabilityDetectorLive, readTargetsBinding } from "./services/SilkPublishability.js";
31
31
  import { TagStrategy, TagStrategyLive } from "./services/TagStrategy.js";
32
32
  import { VersioningStrategy, VersioningStrategyLive } from "./services/VersioningStrategy.js";
33
33
  import { SilkWorkspaceAnalyzer, SilkWorkspaceAnalyzerLive } from "./services/SilkWorkspaceAnalyzer.js";
@@ -13,6 +13,8 @@ const HUSKY_HOOK_PATH = ".husky/pre-commit";
13
13
  const POST_CHECKOUT_HOOK_PATH = ".husky/post-checkout";
14
14
  /** Path for the husky post-merge hook. */
15
15
  const POST_MERGE_HOOK_PATH = ".husky/post-merge";
16
+ /** Path for the husky post-commit hook. */
17
+ const POST_COMMIT_HOOK_PATH = ".husky/post-commit";
16
18
  /** Default path for the lint-staged config file. */
17
19
  const DEFAULT_CONFIG_PATH = "lib/configs/lint-staged.config.ts";
18
20
  /** Path for the markdownlint-cli2 config file. */
@@ -62,4 +64,4 @@ function generateManagedContent(configPath) {
62
64
  }
63
65
 
64
66
  //#endregion
65
- export { DEFAULT_CONFIG_PATH, HUSKY_HOOK_PATH, LegacySavvyLintHygieneDef, MARKDOWNLINT_CONFIG_PATH, POST_CHECKOUT_HOOK_PATH, POST_MERGE_HOOK_PATH, SavvyLintSectionDef, generateManagedContent, savvyLintBlock };
67
+ export { DEFAULT_CONFIG_PATH, HUSKY_HOOK_PATH, LegacySavvyLintHygieneDef, MARKDOWNLINT_CONFIG_PATH, POST_CHECKOUT_HOOK_PATH, POST_COMMIT_HOOK_PATH, POST_MERGE_HOOK_PATH, SavvyLintSectionDef, generateManagedContent, savvyLintBlock };
@@ -1,8 +1,10 @@
1
1
  //#region src/lint/cli/templates/markdownlint.gen.ts
2
2
  /**
3
- * Auto-generated markdownlint template data.
3
+ * Markdownlint template data.
4
4
  *
5
- * DO NOT EDIT regenerate with: pnpm generate:templates
5
+ * Originally generated in the now-deprecated `@savvy-web/lint-staged` package;
6
+ * the generator does not live in this repo, so this file is maintained by hand.
7
+ * Edit the `MARKDOWNLINT_TEMPLATE` / `MARKDOWNLINT_CONFIG` objects directly.
6
8
  *
7
9
  * @internal
8
10
  */
@@ -21,7 +23,9 @@ const MARKDOWNLINT_TEMPLATE = {
21
23
  "**/dist",
22
24
  "**/CHANGELOG.md",
23
25
  "**/.claude/plans",
24
- "**/docs/superpowers"
26
+ "**/docs/superpowers",
27
+ "**/__test__/**/fixtures/**",
28
+ "**/__fixtures__/**"
25
29
  ],
26
30
  customRules: ["@savvy-web/silk/changesets/markdownlint"],
27
31
  config: {
@@ -50,7 +54,7 @@ const MARKDOWNLINT_TEMPLATE = {
50
54
  MD022: true,
51
55
  MD023: true,
52
56
  MD024: { siblings_only: true },
53
- MD025: true,
57
+ MD025: { front_matter_title: "" },
54
58
  MD026: true,
55
59
  MD027: true,
56
60
  MD028: true,
@@ -129,7 +133,7 @@ const MARKDOWNLINT_CONFIG = {
129
133
  MD022: true,
130
134
  MD023: true,
131
135
  MD024: { siblings_only: true },
132
- MD025: true,
136
+ MD025: { front_matter_title: "" },
133
137
  MD026: true,
134
138
  MD027: true,
135
139
  MD028: true,
@@ -6,7 +6,7 @@ import { createConfig } from "./createConfig.js";
6
6
  *
7
7
  * @example
8
8
  * ```typescript
9
- * import { Preset } from '@savvy-web/lint-staged';
9
+ * import { Preset } from '@savvy-web/silk/lint';
10
10
  *
11
11
  * // Use a preset directly
12
12
  * export default Preset.standard();
@@ -33,7 +33,7 @@ var Preset = class Preset {
33
33
  *
34
34
  * @example
35
35
  * ```typescript
36
- * import { Preset } from '@savvy-web/lint-staged';
36
+ * import { Preset } from '@savvy-web/silk/lint';
37
37
  *
38
38
  * export default Preset.minimal();
39
39
  * ```
@@ -67,7 +67,7 @@ var Preset = class Preset {
67
67
  *
68
68
  * @example
69
69
  * ```typescript
70
- * import { Preset } from '@savvy-web/lint-staged';
70
+ * import { Preset } from '@savvy-web/silk/lint';
71
71
  *
72
72
  * export default Preset.standard({
73
73
  * biome: { exclude: ['legacy/'] },
@@ -104,7 +104,7 @@ var Preset = class Preset {
104
104
  *
105
105
  * @example
106
106
  * ```typescript
107
- * import { Preset } from '@savvy-web/lint-staged';
107
+ * import { Preset } from '@savvy-web/silk/lint';
108
108
  *
109
109
  * export default Preset.silk({
110
110
  * typescript: { skipTypecheck: true },
@@ -133,7 +133,7 @@ var Preset = class Preset {
133
133
  *
134
134
  * @example
135
135
  * ```typescript
136
- * import { Preset } from '@savvy-web/lint-staged';
136
+ * import { Preset } from '@savvy-web/silk/lint';
137
137
  *
138
138
  * const presetName = process.env.LINT_PRESET || 'standard';
139
139
  * export default Preset.get(presetName);
@@ -18,7 +18,7 @@ import { Yaml } from "../handlers/Yaml.js";
18
18
  *
19
19
  * @example
20
20
  * ```typescript
21
- * import { createConfig } from '@savvy-web/lint-staged';
21
+ * import { createConfig } from '@savvy-web/silk/lint';
22
22
  *
23
23
  * // Use all defaults
24
24
  * export default createConfig();
@@ -29,7 +29,7 @@ import { join } from "node:path";
29
29
  *
30
30
  * @example
31
31
  * ```typescript
32
- * import { Biome } from '@savvy-web/lint-staged';
32
+ * import { Biome } from '@savvy-web/silk/lint';
33
33
  *
34
34
  * export default {
35
35
  * // Auto-discovers biome command and config file
@@ -29,7 +29,7 @@ import { join } from "node:path";
29
29
  *
30
30
  * @example
31
31
  * ```typescript
32
- * import { Markdown } from '@savvy-web/lint-staged';
32
+ * import { Markdown } from '@savvy-web/silk/lint';
33
33
  *
34
34
  * export default {
35
35
  * // Auto-discovers command and config file
@@ -17,7 +17,7 @@ import sortPackageJson from "sort-package-json";
17
17
  *
18
18
  * @example
19
19
  * ```typescript
20
- * import { PackageJson } from '@savvy-web/lint-staged';
20
+ * import { PackageJson } from '@savvy-web/silk/lint';
21
21
  *
22
22
  * export default {
23
23
  * // Use defaults
@@ -31,7 +31,7 @@ const DEFAULT_STRINGIFY_OPTIONS = {
31
31
  *
32
32
  * @example
33
33
  * ```typescript
34
- * import { PnpmWorkspace } from '\@savvy-web/lint-staged';
34
+ * import { PnpmWorkspace } from '\@savvy-web/silk/lint';
35
35
  *
36
36
  * export default {
37
37
  * [PnpmWorkspace.glob]: PnpmWorkspace.create({
@@ -12,7 +12,7 @@ import { Filter } from "../utils/Filter.js";
12
12
  *
13
13
  * @example
14
14
  * ```typescript
15
- * import { ShellScripts } from '@savvy-web/lint-staged';
15
+ * import { ShellScripts } from '@savvy-web/silk/lint';
16
16
  *
17
17
  * export default {
18
18
  * [ShellScripts.glob]: ShellScripts.create({
@@ -15,7 +15,7 @@ import { Filter } from "../utils/Filter.js";
15
15
  *
16
16
  * @example
17
17
  * ```typescript
18
- * import { TypeScript } from '\@savvy-web/lint-staged';
18
+ * import { TypeScript } from '\@savvy-web/silk/lint';
19
19
  *
20
20
  * export default {
21
21
  * // Auto-detects compiler and runs type checking
@@ -26,7 +26,7 @@ import { lint } from "yaml-lint";
26
26
  *
27
27
  * @example
28
28
  * ```typescript
29
- * import { Yaml } from '\@savvy-web/lint-staged';
29
+ * import { Yaml } from '\@savvy-web/silk/lint';
30
30
  *
31
31
  * export default {
32
32
  * [Yaml.glob]: Yaml.create({
package/lint/index.js CHANGED
@@ -12,7 +12,7 @@ import { TypeScript } from "./handlers/TypeScript.js";
12
12
  import { Yaml } from "./handlers/Yaml.js";
13
13
  import { createConfig } from "./config/createConfig.js";
14
14
  import { Preset } from "./config/Preset.js";
15
- import { DEFAULT_CONFIG_PATH, HUSKY_HOOK_PATH, LegacySavvyLintHygieneDef, MARKDOWNLINT_CONFIG_PATH, POST_CHECKOUT_HOOK_PATH, POST_MERGE_HOOK_PATH, SavvyLintSectionDef, generateManagedContent, savvyLintBlock } from "./cli/sections.js";
15
+ import { DEFAULT_CONFIG_PATH, HUSKY_HOOK_PATH, LegacySavvyLintHygieneDef, MARKDOWNLINT_CONFIG_PATH, POST_CHECKOUT_HOOK_PATH, POST_COMMIT_HOOK_PATH, POST_MERGE_HOOK_PATH, SavvyLintSectionDef, generateManagedContent, savvyLintBlock } from "./cli/sections.js";
16
16
  import { MARKDOWNLINT_CONFIG, MARKDOWNLINT_SCHEMA, MARKDOWNLINT_TEMPLATE } from "./cli/templates/markdownlint.gen.js";
17
17
 
18
18
  //#region src/lint/index.ts
@@ -30,6 +30,7 @@ var lint_exports = /* @__PURE__ */ __exportAll({
30
30
  MARKDOWNLINT_TEMPLATE: () => MARKDOWNLINT_TEMPLATE,
31
31
  Markdown: () => Markdown,
32
32
  POST_CHECKOUT_HOOK_PATH: () => POST_CHECKOUT_HOOK_PATH,
33
+ POST_COMMIT_HOOK_PATH: () => POST_COMMIT_HOOK_PATH,
33
34
  POST_MERGE_HOOK_PATH: () => POST_MERGE_HOOK_PATH,
34
35
  PackageJson: () => PackageJson,
35
36
  PnpmWorkspace: () => PnpmWorkspace,
@@ -8,7 +8,7 @@ import { execSync } from "node:child_process";
8
8
  *
9
9
  * @example
10
10
  * ```typescript
11
- * import { Command } from '@savvy-web/lint-staged';
11
+ * import { Command } from '@savvy-web/silk/lint';
12
12
  *
13
13
  * if (Command.isAvailable('yq')) {
14
14
  * // yq is installed globally
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @example
6
6
  * ```typescript
7
- * import { Filter } from '@savvy-web/lint-staged';
7
+ * import { Filter } from '@savvy-web/silk/lint';
8
8
  *
9
9
  * const handler = (filenames: readonly string[]) => {
10
10
  * const filtered = Filter.exclude(filenames, ['dist/', '__fixtures__']);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savvy-web/silk-effects",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "private": false,
5
5
  "description": "Shared Effect library for Silk Suite conventions",
6
6
  "homepage": "https://github.com/savvy-web/systems/tree/main/packages/silk-effects",
@@ -24,21 +24,22 @@
24
24
  ".": {
25
25
  "types": "./index.d.ts",
26
26
  "import": "./index.js"
27
- }
27
+ },
28
+ "./package.json": "./package.json"
28
29
  },
29
30
  "dependencies": {
30
31
  "@changesets/get-github-info": "^0.8.0",
31
32
  "jsonc-effect": "^0.2.1",
32
33
  "mdast-util-heading-range": "^4.0.0",
33
34
  "mdast-util-to-string": "^4.0.0",
34
- "prettier": "^3.8.3",
35
+ "prettier": "^3.8.4",
35
36
  "remark-gfm": "^4.0.1",
36
37
  "remark-parse": "^11.0.0",
37
38
  "remark-stringify": "^11.0.0",
38
39
  "semver-effect": "^0.2.1",
39
40
  "shell-quote": "^1.8.4",
40
41
  "sort-package-json": "^4.0.0",
41
- "tinyglobby": "^0.2.16",
42
+ "tinyglobby": "^0.2.17",
42
43
  "unified": "^11.0.5",
43
44
  "unified-lint-rule": "^3.0.1",
44
45
  "unist-util-visit": "^5.1.0",
@@ -1,8 +1,8 @@
1
1
  import { ChangesetConfig } from "./ChangesetConfig.js";
2
2
  import { Effect, Layer } from "effect";
3
3
  import { isAbsolute, join } from "node:path";
4
- import { PublishTarget, PublishabilityDetector, PublishabilityDetectorLive, WorkspaceDiscovery } from "workspaces-effect";
5
4
  import { FileSystem } from "@effect/platform";
5
+ import { PublishTarget, PublishabilityDetector, PublishabilityDetectorLive, WorkspaceDiscovery } from "workspaces-effect";
6
6
 
7
7
  //#region src/services/SilkPublishability.ts
8
8
  const NPM_DEFAULT = "https://registry.npmjs.org/";
@@ -1,13 +1,13 @@
1
1
  import { ChangesetConfigReader } from "./ChangesetConfigReader.js";
2
- import { WorkspaceAnalysisError } from "../errors/WorkspaceAnalysisError.js";
3
- import { AnalyzedWorkspace, WorkspaceAnalysis } from "../schemas/WorkspaceAnalysisSchemas.js";
4
2
  import { ChangesetConfig } from "./ChangesetConfig.js";
5
3
  import { SilkPublishability, readTargetsBinding } from "./SilkPublishability.js";
4
+ import { WorkspaceAnalysisError } from "../errors/WorkspaceAnalysisError.js";
5
+ import { AnalyzedWorkspace, WorkspaceAnalysis } from "../schemas/WorkspaceAnalysisSchemas.js";
6
6
  import { TagStrategy } from "./TagStrategy.js";
7
7
  import { VersioningStrategy } from "./VersioningStrategy.js";
8
8
  import { Context, Effect, Layer, Option } from "effect";
9
- import { PackageManagerDetector, TopologicalSorter, WorkspaceDiscovery } from "workspaces-effect";
10
9
  import { FileSystem } from "@effect/platform";
10
+ import { PackageManagerDetector, TopologicalSorter, WorkspaceDiscovery } from "workspaces-effect";
11
11
 
12
12
  //#region src/services/SilkWorkspaceAnalyzer.ts
13
13
  /**
@@ -2,8 +2,8 @@ import { ToolNotFoundError } from "../errors/ToolNotFoundError.js";
2
2
  import { ToolResolutionError } from "../errors/ToolResolutionError.js";
3
3
  import { ResolvedTool } from "../schemas/ResolvedTool.js";
4
4
  import { Context, Effect, Layer, Option, Ref } from "effect";
5
- import { PackageManagerDetector, WorkspaceRoot } from "workspaces-effect";
6
5
  import { Command, CommandExecutor } from "@effect/platform";
6
+ import { PackageManagerDetector, WorkspaceRoot } from "workspaces-effect";
7
7
 
8
8
  //#region src/services/ToolDiscovery.ts
9
9
  /**
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.58.7"
8
+ "packageVersion": "7.58.9"
9
9
  }
10
10
  ]
11
11
  }