@savvy-web/mcp 2.0.15 → 2.0.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savvy-web/mcp",
3
- "version": "2.0.15",
3
+ "version": "2.0.17",
4
4
  "private": false,
5
5
  "description": "The savvy MCP server — Silk Suite tooling and library knowledge for coding agents",
6
6
  "homepage": "https://github.com/savvy-web/systems/tree/main/packages/mcp",
@@ -32,10 +32,10 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@effect/platform-node": "4.0.0-beta.101",
35
- "@effected/commands": "^0.2.0",
36
- "@effected/workspaces": "^0.9.1",
35
+ "@effected/commands": "^0.2.1",
36
+ "@effected/workspaces": "^0.9.4",
37
37
  "@modelcontextprotocol/sdk": "^1.29.0",
38
- "@savvy-web/silk-effects": "5.1.3",
38
+ "@savvy-web/silk-effects": "5.2.1",
39
39
  "effect": "4.0.0-beta.101",
40
40
  "zod": "^4.4.3"
41
41
  }
package/runtime.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ToolDiscovery } from "@effected/commands";
2
2
  import { Workspaces } from "@effected/workspaces";
3
- import { ChangesetConfigLive, ChangesetConfigReaderLive, Changesets, PublishabilityDetectorAdaptiveLive, Repos, SilkWorkspaceAnalyzerLive, Turbo } from "@savvy-web/silk-effects";
3
+ import { ChangesetConfig, ChangesetConfigReader, Changesets, Repos, SilkPublishability, SilkWorkspaceAnalyzer, Turbo } from "@savvy-web/silk-effects";
4
4
  import { Layer } from "effect";
5
5
 
6
6
  //#region src/runtime.ts
@@ -40,13 +40,13 @@ import { Layer } from "effect";
40
40
  */
41
41
  const makeSilkRuntimeLayer = (cwd) => {
42
42
  const kitGraph = Workspaces.layerWithGit({ cwd });
43
- const analyzerDeps = ChangesetConfigReaderLive;
43
+ const analyzerDeps = ChangesetConfigReader.layer;
44
44
  /**
45
45
  * `BranchAnalyzer` + `ReleasePlanner` + the ONE shared `ConfigInspector`,
46
46
  * merged so all three land on the runtime and every internal consumer
47
47
  * memoizes onto the same inspector reference.
48
48
  */
49
- const inspectorAndAnalyzer = Changesets.BranchAnalyzerLive.pipe(Layer.provideMerge(Changesets.ReleasePlannerLive), Layer.provideMerge(Changesets.ConfigInspectorLive.pipe(Layer.provide(ChangesetConfigReaderLive))));
49
+ const inspectorAndAnalyzer = Changesets.BranchAnalyzer.layer.pipe(Layer.provideMerge(Changesets.ReleasePlanner.layer), Layer.provideMerge(Changesets.ConfigInspector.layer.pipe(Layer.provide(ChangesetConfigReader.layer))));
50
50
  /**
51
51
  * `ToolDiscovery` from `@effected/commands`, which `TurboInspector` uses to
52
52
  * locate the `turbo` binary. Its `LocalExec` contract is implemented by
@@ -56,16 +56,16 @@ const makeSilkRuntimeLayer = (cwd) => {
56
56
  * its probe cache.
57
57
  */
58
58
  const toolDiscovery = ToolDiscovery.layer.pipe(Layer.provide(Workspaces.localExecLayer({ cwd })));
59
- const changesetConfig = ChangesetConfigLive.pipe(Layer.provide(ChangesetConfigReaderLive));
60
- const depsRegen = Changesets.DepsRegenLive.pipe(Layer.provide(inspectorAndAnalyzer), Layer.provide(PublishabilityDetectorAdaptiveLive.pipe(Layer.provide(changesetConfig))), Layer.provide(changesetConfig));
59
+ const changesetConfig = ChangesetConfig.layer.pipe(Layer.provide(ChangesetConfigReader.layer));
60
+ const depsRegen = Changesets.DepsRegen.layer.pipe(Layer.provide(inspectorAndAnalyzer), Layer.provide(SilkPublishability.layerAdaptive.pipe(Layer.provide(changesetConfig))), Layer.provide(changesetConfig));
61
61
  /**
62
- * `ReposManagerLive` requires `ReposConfigStore`, so it is given its own
63
- * `ReposConfigStoreLive` reference; the store is ALSO merged in directly so
62
+ * `ReposManager.layer` requires `ReposConfigStore`, so it is given its own
63
+ * `ReposConfigStore.layer` reference; the store is ALSO merged in directly so
64
64
  * `repos_inspect`'s config mode can resolve it on its own. Same reference —
65
65
  * one store instance.
66
66
  */
67
- const repos = Layer.mergeAll(Repos.ReposConfigStoreLive, Repos.ReposManagerLive.pipe(Layer.provide(Repos.ReposConfigStoreLive)));
68
- return Layer.mergeAll(SilkWorkspaceAnalyzerLive.pipe(Layer.provide(analyzerDeps)), Turbo.TurboInspectorLive.pipe(Layer.provide(toolDiscovery)), inspectorAndAnalyzer, depsRegen, repos).pipe(Layer.provideMerge(kitGraph));
67
+ const repos = Layer.mergeAll(Repos.ReposConfigStore.layer, Repos.ReposManager.layer.pipe(Layer.provide(Repos.ReposConfigStore.layer)));
68
+ return Layer.mergeAll(SilkWorkspaceAnalyzer.layer.pipe(Layer.provide(analyzerDeps)), Turbo.TurboInspector.layer.pipe(Layer.provide(toolDiscovery)), inspectorAndAnalyzer, depsRegen, repos).pipe(Layer.provideMerge(kitGraph));
69
69
  };
70
70
 
71
71
  //#endregion
@@ -174,19 +174,20 @@ const runBiomeCheck = async (args, fallbackCwd) => {
174
174
  const parts = biomeCmd.split(" ");
175
175
  const bin = parts[0];
176
176
  const prefix = parts.slice(1);
177
- const maxBuffer = 64 * 1024 * 1024;
177
+ const maxBuffer = 67108864;
178
178
  const timeout = 12e4;
179
179
  const killSignal = "SIGKILL";
180
180
  let wrote = false;
181
181
  if (doWrite) {
182
- const fix = spawnSync(bin, [
182
+ const writeArgs = [
183
183
  ...prefix,
184
184
  mode,
185
185
  "--write",
186
186
  ...args.unsafe ? ["--unsafe"] : [],
187
187
  "--no-errors-on-unmatched",
188
188
  ...paths
189
- ], {
189
+ ];
190
+ const fix = spawnSync(bin, writeArgs, {
190
191
  cwd,
191
192
  encoding: "utf8",
192
193
  maxBuffer,
@@ -197,13 +198,14 @@ const runBiomeCheck = async (args, fallbackCwd) => {
197
198
  if ((fix.status ?? 0) > 1) throw new Error(`Biome --write failed (exit ${fix.status}): ${(fix.stderr ?? "").trim() || "unknown error"}`);
198
199
  wrote = true;
199
200
  }
200
- const read = spawnSync(bin, [
201
+ const readArgs = [
201
202
  ...prefix,
202
203
  mode,
203
204
  "--reporter=gitlab",
204
205
  "--no-errors-on-unmatched",
205
206
  ...paths
206
- ], {
207
+ ];
208
+ const read = spawnSync(bin, readArgs, {
207
209
  cwd,
208
210
  encoding: "utf8",
209
211
  maxBuffer,
@@ -63,7 +63,8 @@ const ChangesetValidateAsMarkdown = ChangesetValidateResult.pipe(Schema.decodeTo
63
63
  * than escaping as a defect.
64
64
  */
65
65
  const changesetValidate = (args, fallbackCwd) => Effect.gen(function* () {
66
- const dir = resolve(yield* (yield* WorkspaceRoot).find(args.cwd ?? fallbackCwd), args.dir ?? ".changeset");
66
+ const root = yield* (yield* WorkspaceRoot).find(args.cwd ?? fallbackCwd);
67
+ const dir = resolve(root, args.dir ?? ".changeset");
67
68
  const messages = yield* Effect.try({
68
69
  try: () => Changesets.ChangesetLinter.validate(dir),
69
70
  catch: (cause) => new ChangesetValidateError({