@okfit/mcp 0.2.0 → 0.3.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.
package/bin/okfit-mcp.js CHANGED
@@ -1,37 +1,13 @@
1
1
  #!/usr/bin/env node
2
+ import { main } from "../main.js";
3
+
2
4
  //#region src/bin.ts
3
5
  /**
4
6
  * MCP server entry point for okfit.
5
7
  *
6
8
  * @packageDocumentation
7
9
  */
8
- const FATAL_FALLBACK = "okfit-mcp: a fatal error occurred and could not be described.";
9
- const describe = (error) => {
10
- try {
11
- if (error instanceof Error) return error.stack ?? error.message;
12
- return String(error);
13
- } catch {
14
- return FATAL_FALLBACK;
15
- }
16
- };
17
- const fatal = (label, error) => {
18
- process.stderr.write(`okfit-mcp: ${label}: ${describe(error)}\n`);
19
- process.exit(1);
20
- };
21
- process.on("uncaughtException", (error) => fatal("uncaught exception", error));
22
- process.on("unhandledRejection", (reason) => fatal("unhandled rejection", reason));
23
- await (async () => {
24
- const NodeRuntime = await import("@effect/platform-node/NodeRuntime");
25
- const NodeServices = await import("@effect/platform-node/NodeServices");
26
- const { AppDirs, Xdg } = await import("@effected/xdg");
27
- const { Cause, Exit, Layer, Logger, Runtime } = await import("effect");
28
- const { resolveMcpProjectRoot } = await import("../internal/projectRoot.js");
29
- const { ServerLayer } = await import("../server.js");
30
- const PlatformLayer = Layer.mergeAll(Xdg.layer, AppDirs.layer({ namespace: "okfit" }).pipe(Layer.provide(Xdg.layer))).pipe(Layer.provideMerge(NodeServices.layer));
31
- const projectRoot = resolveMcpProjectRoot(process.env);
32
- const program = Layer.launch(ServerLayer(projectRoot).pipe(Layer.provide(PlatformLayer), Layer.provide(Logger.layer([Logger.consolePretty()])), Layer.provide(Layer.succeed(Logger.LogToStderr, true))));
33
- NodeRuntime.runMain(program, { teardown: (exit, onExit) => Exit.isSuccess(exit) || Cause.hasInterruptsOnly(exit.cause) ? onExit(0) : Runtime.defaultTeardown(exit, onExit) });
34
- })();
10
+ await main();
35
11
 
36
12
  //#endregion
37
13
  export { };
package/index.d.ts CHANGED
@@ -361,9 +361,9 @@ export type ValidateBundleParams = typeof ValidateBundleParams.Type;
361
361
  * discharged right here, below, by `Layer.mergeAll(Git.layer, GitHistory.layer)`
362
362
  * — both need only `ChildProcessSpawner` (`GitHistory.layer` itself provides
363
363
  * `Git.layer` internally, `packages/profiles/src/GitHistory.ts:136`), which
364
- * `bin.ts`'s untouched `PlatformLayer` already supplies via
364
+ * `@okfit/engine`'s `OkfitPlatform` already supplies via
365
365
  * `NodeServices.layer`. This type widening is the only thing that changes
366
- * at that boundary — `bin.ts` itself is not touched by this task.
366
+ * at that boundary.
367
367
  *
368
368
  * @public
369
369
  */
@@ -724,8 +724,8 @@ export declare const ToolsLayer: (projectRoot: string) => import("effect/Layer")
724
724
  //#endregion
725
725
  //#region src/version.d.ts
726
726
  /**
727
- * The version this server reports in `initialize`, read from its own
728
- * manifest (K-32) so a release can never desync from the reported version.
727
+ * The version this server reports in `initialize`. Injected by
728
+ * `@savvy-web/bundler` at build time (K-32); `"0.0.0"` in unbuilt source.
729
729
  *
730
730
  * @public
731
731
  */
@@ -1,7 +1,7 @@
1
1
  import { BundleNotFound, ConfigError, composeRemediatedMessage } from "../errors.js";
2
2
  import { Effect, Option } from "effect";
3
3
  import { Bundle } from "@okfit/core";
4
- import { provideConfig, resolveProjectConfig } from "@okfit/cli";
4
+ import { provideConfig, resolveProjectConfig } from "@okfit/engine";
5
5
 
6
6
  //#region src/internal/toolContext.ts
7
7
  /**
package/main.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ //#region src/main.d.ts
2
+ /**
3
+ * The assembled okfit MCP server program.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ /**
8
+ * Run the okfit MCP server over stdio. Owns the process.
9
+ *
10
+ * This module deliberately carries NO static imports of the server graph:
11
+ * the `uncaughtException` and `unhandledRejection` handlers are registered
12
+ * before `NodeRuntime`, the logger and `ServerLayer` are ever evaluated, so
13
+ * a throw during module evaluation is still reported on stderr rather than
14
+ * crashing silently. Adding a static import here would defeat that.
15
+ *
16
+ * @public
17
+ */
18
+ export declare const main: () => Promise<void>;
19
+ //#endregion
20
+ //# sourceMappingURL=main.d.ts.map
package/main.js ADDED
@@ -0,0 +1,45 @@
1
+ //#region src/main.ts
2
+ /**
3
+ * The assembled okfit MCP server program.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ const FATAL_FALLBACK = "okfit-mcp: a fatal error occurred and could not be described.";
8
+ const describe = (error) => {
9
+ try {
10
+ if (error instanceof Error) return error.stack ?? error.message;
11
+ return String(error);
12
+ } catch {
13
+ return FATAL_FALLBACK;
14
+ }
15
+ };
16
+ const fatal = (label, error) => {
17
+ process.stderr.write(`okfit-mcp: ${label}: ${describe(error)}\n`);
18
+ process.exit(1);
19
+ };
20
+ /**
21
+ * Run the okfit MCP server over stdio. Owns the process.
22
+ *
23
+ * This module deliberately carries NO static imports of the server graph:
24
+ * the `uncaughtException` and `unhandledRejection` handlers are registered
25
+ * before `NodeRuntime`, the logger and `ServerLayer` are ever evaluated, so
26
+ * a throw during module evaluation is still reported on stderr rather than
27
+ * crashing silently. Adding a static import here would defeat that.
28
+ *
29
+ * @public
30
+ */
31
+ const main = async () => {
32
+ process.on("uncaughtException", (error) => fatal("uncaught exception", error));
33
+ process.on("unhandledRejection", (reason) => fatal("unhandled rejection", reason));
34
+ const NodeRuntime = await import("@effect/platform-node/NodeRuntime");
35
+ const { OkfitPlatform } = await import("@okfit/engine");
36
+ const { Cause, Exit, Layer, Logger, Runtime } = await import("effect");
37
+ const { resolveMcpProjectRoot } = await import("./internal/projectRoot.js");
38
+ const { ServerLayer } = await import("./server.js");
39
+ const projectRoot = resolveMcpProjectRoot(process.env);
40
+ const program = Layer.launch(ServerLayer(projectRoot).pipe(Layer.provide(OkfitPlatform), Layer.provide(Logger.layer([Logger.consolePretty()])), Layer.provide(Layer.succeed(Logger.LogToStderr, true))));
41
+ NodeRuntime.runMain(program, { teardown: (exit, onExit) => Exit.isSuccess(exit) || Cause.hasInterruptsOnly(exit.cause) ? onExit(0) : Runtime.defaultTeardown(exit, onExit) });
42
+ };
43
+
44
+ //#endregion
45
+ export { main };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@okfit/mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "Model Context Protocol server for okfit: query and understand Open Knowledge Format (OKF) bundles from an agent.",
6
6
  "keywords": [
@@ -33,6 +33,11 @@
33
33
  "import": "./index.js",
34
34
  "default": "./index.js"
35
35
  },
36
+ "./main": {
37
+ "types": "./main.d.ts",
38
+ "import": "./main.js",
39
+ "default": "./main.js"
40
+ },
36
41
  "./package.json": "./package.json"
37
42
  },
38
43
  "bin": {
@@ -42,8 +47,8 @@
42
47
  "@effect/platform-node": "4.0.0-rc.112",
43
48
  "@effected/git": "^0.12.0",
44
49
  "@effected/xdg": "^0.4.1",
45
- "@okfit/cli": "0.2.0",
46
50
  "@okfit/core": "0.2.0",
51
+ "@okfit/engine": "0.1.0",
47
52
  "@okfit/profiles": "0.2.0",
48
53
  "effect": "4.0.0-rc.112"
49
54
  },
package/schema/tools.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ConceptSummary } from "./ConceptSummary.js";
2
2
  import { Schema } from "effect";
3
3
  import { GraphNodeKind, Status } from "@okfit/core";
4
- import { ContextTag, ContextType } from "@okfit/cli";
4
+ import { ContextTag, ContextType } from "@okfit/engine";
5
5
 
6
6
  //#region src/schema/tools.ts
7
7
  /** `describe_vocabulary`'s result (§5.2). @public */
@@ -3,7 +3,7 @@ import { resolveConfigOnly } from "../internal/toolContext.js";
3
3
  import { DescribeVocabularySuccess } from "../schema/tools.js";
4
4
  import { Effect, FileSystem, Option, Path } from "effect";
5
5
  import { Tool } from "effect/unstable/ai";
6
- import { contextEnvelope } from "@okfit/cli";
6
+ import { contextEnvelope } from "@okfit/engine";
7
7
  import { AppDirs, Xdg } from "@effected/xdg";
8
8
 
9
9
  //#region src/tools/describeVocabulary.ts
@@ -6,7 +6,7 @@ import { MCP_VERSION } from "../version.js";
6
6
  import { Effect, FileSystem, Option, Path } from "effect";
7
7
  import { OKF_SPEC_VERSION } from "@okfit/core";
8
8
  import { Tool } from "effect/unstable/ai";
9
- import { JsonEnvelope, collect, forDiagnostics, json, run } from "@okfit/cli";
9
+ import { JsonEnvelope, collect, forDiagnostics, json, run } from "@okfit/engine";
10
10
  import { Git } from "@effected/git";
11
11
  import { GitHistory } from "@okfit/profiles";
12
12
  import { AppDirs, Xdg } from "@effected/xdg";
@@ -25,7 +25,7 @@ const DESCRIPTION = "Runs the same conformance and lint checks as `okfit validat
25
25
  * GitHistory` so it can run `Provenance.lint`'s `generated-at-drift`
26
26
  * check (S-8, S-16). Both are provided by `server.ts`'s `ServerLayer`,
27
27
  * which needs only `ChildProcessSpawner` to build them — already
28
- * supplied by `bin.ts`'s untouched `PlatformLayer` (S-16).
28
+ * supplied by `@okfit/engine`'s `OkfitPlatform` (S-16).
29
29
  *
30
30
  * @public
31
31
  */
@@ -45,10 +45,10 @@ const validateBundle = Tool.make("validate_bundle", {
45
45
  }).annotate(Tool.Title, "Validate the bundle").annotate(Tool.Readonly, true).annotate(Tool.Idempotent, true).annotate(Tool.OpenWorld, false);
46
46
  /**
47
47
  * This tool does not call `loadToolContext`: `run()` calls `Bundle.load`
48
- * itself (`packages/cli/src/validate/run.ts:52-56`), so routing through
48
+ * itself (`packages/engine/src/validate/run.ts:52-56`), so routing through
49
49
  * `loadToolContext` would load the bundle twice. It uses `resolveConfigOnly`
50
50
  * and keeps `bundleRoot`, `config` **and** `profile` — `run()` needs the
51
- * profile. `success` is `JsonEnvelope`, imported from `@okfit/cli` and used
51
+ * profile. `success` is `JsonEnvelope`, imported from `@okfit/engine` and used
52
52
  * verbatim (N-35's own carve-out: data reuse, not envelope reuse);
53
53
  * `JsonErrorEnvelope` is never returned — that is the CLI's stdout
54
54
  * convention for an exit-3 infrastructure failure, and here that failure is
package/version.js CHANGED
@@ -1,13 +1,11 @@
1
- import { version } from "./package.js";
2
-
3
1
  //#region src/version.ts
4
2
  /**
5
- * The version this server reports in `initialize`, read from its own
6
- * manifest (K-32) so a release can never desync from the reported version.
3
+ * The version this server reports in `initialize`. Injected by
4
+ * `@savvy-web/bundler` at build time (K-32); `"0.0.0"` in unbuilt source.
7
5
  *
8
6
  * @public
9
7
  */
10
- const MCP_VERSION = version;
8
+ const MCP_VERSION = "0.3.0";
11
9
 
12
10
  //#endregion
13
11
  export { MCP_VERSION };
package/package.js DELETED
@@ -1,5 +0,0 @@
1
- //#region package.json
2
- var version = "0.2.0";
3
-
4
- //#endregion
5
- export { version };