@nifrajs/cli 3.3.0 → 4.0.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/README.md +42 -3
- package/dist/app-files.d.ts +11 -0
- package/dist/app-files.d.ts.map +1 -0
- package/dist/app-files.js +34 -0
- package/dist/app-files.js.map +1 -0
- package/dist/assure-hydration.d.ts +7 -1
- package/dist/assure-hydration.d.ts.map +1 -1
- package/dist/assure-hydration.js +128 -43
- package/dist/assure-hydration.js.map +1 -1
- package/dist/assure.d.ts.map +1 -1
- package/dist/assure.js +16 -2
- package/dist/assure.js.map +1 -1
- package/dist/capabilities-tool.d.ts +5 -1
- package/dist/capabilities-tool.d.ts.map +1 -1
- package/dist/capabilities-tool.js +32 -10
- package/dist/capabilities-tool.js.map +1 -1
- package/dist/cdn-check.d.ts +41 -0
- package/dist/cdn-check.d.ts.map +1 -0
- package/dist/cdn-check.js +207 -0
- package/dist/cdn-check.js.map +1 -0
- package/dist/check-diagnostics.d.ts +7 -15
- package/dist/check-diagnostics.d.ts.map +1 -1
- package/dist/check-diagnostics.js +162 -713
- package/dist/check-diagnostics.js.map +1 -1
- package/dist/check-scan.d.ts +58 -7
- package/dist/check-scan.d.ts.map +1 -1
- package/dist/check-scan.js +323 -62
- package/dist/check-scan.js.map +1 -1
- package/dist/check.d.ts +1 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +145 -54
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +42 -16
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +306 -87
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.d.ts +60 -5
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +298 -33
- package/dist/command-catalog.js.map +1 -1
- package/dist/config-target.d.ts +8 -0
- package/dist/config-target.d.ts.map +1 -0
- package/dist/config-target.js +45 -0
- package/dist/config-target.js.map +1 -0
- package/dist/contracts.d.ts +3 -2
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +56 -16
- package/dist/contracts.js.map +1 -1
- package/dist/db-audit.d.ts +37 -0
- package/dist/db-audit.d.ts.map +1 -0
- package/dist/db-audit.js +99 -0
- package/dist/db-audit.js.map +1 -0
- package/dist/db-child.d.ts +64 -0
- package/dist/db-child.d.ts.map +1 -0
- package/dist/db-child.js +213 -0
- package/dist/db-child.js.map +1 -0
- package/dist/db-config.d.ts +60 -0
- package/dist/db-config.d.ts.map +1 -0
- package/dist/db-config.js +176 -0
- package/dist/db-config.js.map +1 -0
- package/dist/db-tool.d.ts +84 -0
- package/dist/db-tool.d.ts.map +1 -0
- package/dist/db-tool.js +537 -0
- package/dist/db-tool.js.map +1 -0
- package/dist/dev-bun-config.d.ts +20 -13
- package/dist/dev-bun-config.d.ts.map +1 -1
- package/dist/dev-bun-config.js +98 -41
- package/dist/dev-bun-config.js.map +1 -1
- package/dist/dev-feed-tool.d.ts +106 -0
- package/dist/dev-feed-tool.d.ts.map +1 -0
- package/dist/dev-feed-tool.js +713 -0
- package/dist/dev-feed-tool.js.map +1 -0
- package/dist/dev-server-client.d.ts +67 -0
- package/dist/dev-server-client.d.ts.map +1 -0
- package/dist/dev-server-client.js +195 -0
- package/dist/dev-server-client.js.map +1 -0
- package/dist/diagnostics.d.ts +86 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +85 -0
- package/dist/diagnostics.js.map +1 -1
- package/dist/diff-tool.d.ts +3 -3
- package/dist/diff-tool.d.ts.map +1 -1
- package/dist/diff-tool.js +6 -5
- package/dist/diff-tool.js.map +1 -1
- package/dist/docs-search.d.ts.map +1 -1
- package/dist/docs-search.js +12 -4
- package/dist/docs-search.js.map +1 -1
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +76 -15
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +15 -0
- package/dist/env-file.d.ts.map +1 -1
- package/dist/env-file.js +73 -1
- package/dist/env-file.js.map +1 -1
- package/dist/fix-recipes.d.ts.map +1 -1
- package/dist/fix-recipes.js +41 -21
- package/dist/fix-recipes.js.map +1 -1
- package/dist/frontend-guidance.js +5 -5
- package/dist/frontend-guidance.js.map +1 -1
- package/dist/i18n-check.d.ts +16 -0
- package/dist/i18n-check.d.ts.map +1 -0
- package/dist/i18n-check.js +154 -0
- package/dist/i18n-check.js.map +1 -0
- package/dist/init-agents.d.ts +49 -13
- package/dist/init-agents.d.ts.map +1 -1
- package/dist/init-agents.js +239 -34
- package/dist/init-agents.js.map +1 -1
- package/dist/internal/code-unit-order.d.ts +4 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +6 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/script-kind.d.ts +7 -0
- package/dist/internal/script-kind.d.ts.map +1 -0
- package/dist/internal/script-kind.js +12 -0
- package/dist/internal/script-kind.js.map +1 -0
- package/dist/internal/source-facts.d.ts +5 -0
- package/dist/internal/source-facts.d.ts.map +1 -1
- package/dist/internal/source-facts.js +61 -5
- package/dist/internal/source-facts.js.map +1 -1
- package/dist/internal/typescript-import.d.ts +49 -24
- package/dist/internal/typescript-import.d.ts.map +1 -1
- package/dist/internal/typescript-import.js +507 -67
- package/dist/internal/typescript-import.js.map +1 -1
- package/dist/introspect.d.ts +6 -4
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +93 -74
- package/dist/introspect.js.map +1 -1
- package/dist/learn.js +3 -3
- package/dist/learn.js.map +1 -1
- package/dist/levels-tool.d.ts +10 -0
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +33 -3
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts +71 -16
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +78 -18
- package/dist/load.js.map +1 -1
- package/dist/manifest-tool.d.ts.map +1 -1
- package/dist/manifest-tool.js +3 -2
- package/dist/manifest-tool.js.map +1 -1
- package/dist/mcp-app-tool.d.ts.map +1 -1
- package/dist/mcp-app-tool.js +2 -0
- package/dist/mcp-app-tool.js.map +1 -1
- package/dist/mcp-context.d.ts.map +1 -1
- package/dist/mcp-context.js +5 -6
- package/dist/mcp-context.js.map +1 -1
- package/dist/mcp-delegate.d.ts +57 -0
- package/dist/mcp-delegate.d.ts.map +1 -0
- package/dist/mcp-delegate.js +130 -0
- package/dist/mcp-delegate.js.map +1 -0
- package/dist/mcp-docs-tools.d.ts.map +1 -1
- package/dist/mcp-docs-tools.js +23 -5
- package/dist/mcp-docs-tools.js.map +1 -1
- package/dist/mcp-exec.d.ts +3 -0
- package/dist/mcp-exec.d.ts.map +1 -1
- package/dist/mcp-exec.js +263 -131
- package/dist/mcp-exec.js.map +1 -1
- package/dist/mcp-http.d.ts.map +1 -1
- package/dist/mcp-http.js +20 -5
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp-io.d.ts +26 -0
- package/dist/mcp-io.d.ts.map +1 -1
- package/dist/mcp-io.js +113 -0
- package/dist/mcp-io.js.map +1 -1
- package/dist/mcp-isolate.d.ts +48 -0
- package/dist/mcp-isolate.d.ts.map +1 -0
- package/dist/mcp-isolate.js +222 -0
- package/dist/mcp-isolate.js.map +1 -0
- package/dist/mcp-path.d.ts +10 -0
- package/dist/mcp-path.d.ts.map +1 -0
- package/dist/mcp-path.js +51 -0
- package/dist/mcp-path.js.map +1 -0
- package/dist/mcp-project-child.d.ts +74 -0
- package/dist/mcp-project-child.d.ts.map +1 -0
- package/dist/mcp-project-child.js +130 -0
- package/dist/mcp-project-child.js.map +1 -0
- package/dist/mcp-reflect.d.ts.map +1 -1
- package/dist/mcp-reflect.js +2 -2
- package/dist/mcp-reflect.js.map +1 -1
- package/dist/mcp-render.d.ts.map +1 -1
- package/dist/mcp-render.js +64 -45
- package/dist/mcp-render.js.map +1 -1
- package/dist/mcp-root.d.ts +37 -9
- package/dist/mcp-root.d.ts.map +1 -1
- package/dist/mcp-root.js +124 -25
- package/dist/mcp-root.js.map +1 -1
- package/dist/mcp-run.d.ts +18 -1
- package/dist/mcp-run.d.ts.map +1 -1
- package/dist/mcp-run.js +159 -55
- package/dist/mcp-run.js.map +1 -1
- package/dist/mcp-ws.js +4 -1
- package/dist/mcp-ws.js.map +1 -1
- package/dist/mcp.d.ts +18 -5
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +165 -82
- package/dist/mcp.js.map +1 -1
- package/dist/migrate-layout.d.ts +44 -0
- package/dist/migrate-layout.d.ts.map +1 -0
- package/dist/migrate-layout.js +982 -0
- package/dist/migrate-layout.js.map +1 -0
- package/dist/openapi-tool.d.ts +2 -2
- package/dist/openapi-tool.d.ts.map +1 -1
- package/dist/openapi-tool.js.map +1 -1
- package/dist/openapi-types.d.ts +2 -1
- package/dist/openapi-types.d.ts.map +1 -1
- package/dist/openapi-types.js +240 -12
- package/dist/openapi-types.js.map +1 -1
- package/dist/pipeline-report.d.ts +3 -2
- package/dist/pipeline-report.d.ts.map +1 -1
- package/dist/pipeline-report.js +19 -16
- package/dist/pipeline-report.js.map +1 -1
- package/dist/port.d.ts +5 -4
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +46 -29
- package/dist/port.js.map +1 -1
- package/dist/project-facts.d.ts +28 -4
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js +12 -2
- package/dist/project-facts.js.map +1 -1
- package/dist/recipes/4.0.0.d.ts +9 -0
- package/dist/recipes/4.0.0.d.ts.map +1 -0
- package/dist/recipes/4.0.0.js +34 -0
- package/dist/recipes/4.0.0.js.map +1 -0
- package/dist/recipes/index.d.ts.map +1 -1
- package/dist/recipes/index.js +2 -0
- package/dist/recipes/index.js.map +1 -1
- package/dist/release-verification.d.ts +11 -1
- package/dist/release-verification.d.ts.map +1 -1
- package/dist/release-verification.js +47 -4
- package/dist/release-verification.js.map +1 -1
- package/dist/review.d.ts +21 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +823 -0
- package/dist/review.js.map +1 -0
- package/dist/route-types.d.ts +28 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +106 -0
- package/dist/route-types.js.map +1 -0
- package/dist/rules/codes.d.ts +9 -0
- package/dist/rules/codes.d.ts.map +1 -1
- package/dist/rules/codes.js +9 -0
- package/dist/rules/codes.js.map +1 -1
- package/dist/rules/data-guard.d.ts +12 -0
- package/dist/rules/data-guard.d.ts.map +1 -0
- package/dist/rules/data-guard.js +213 -0
- package/dist/rules/data-guard.js.map +1 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +17 -5
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/islands.d.ts.map +1 -1
- package/dist/rules/islands.js +7 -4
- package/dist/rules/islands.js.map +1 -1
- package/dist/rules/legacy.d.ts +3 -1
- package/dist/rules/legacy.d.ts.map +1 -1
- package/dist/rules/legacy.js +829 -34
- package/dist/rules/legacy.js.map +1 -1
- package/dist/rules/nano.d.ts.map +1 -1
- package/dist/rules/nano.js +15 -6
- package/dist/rules/nano.js.map +1 -1
- package/dist/rules/pages.d.ts +15 -0
- package/dist/rules/pages.d.ts.map +1 -0
- package/dist/rules/pages.js +88 -0
- package/dist/rules/pages.js.map +1 -0
- package/dist/rules/routes.d.ts +11 -0
- package/dist/rules/routes.d.ts.map +1 -1
- package/dist/rules/routes.js +180 -2
- package/dist/rules/routes.js.map +1 -1
- package/dist/rules/secrets.d.ts +10 -0
- package/dist/rules/secrets.d.ts.map +1 -0
- package/dist/rules/secrets.js +169 -0
- package/dist/rules/secrets.js.map +1 -0
- package/dist/rules/security.d.ts +7 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +171 -65
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/typescript.d.ts +16 -0
- package/dist/rules/typescript.d.ts.map +1 -0
- package/dist/rules/typescript.js +59 -0
- package/dist/rules/typescript.js.map +1 -0
- package/dist/rules/zones.d.ts +17 -0
- package/dist/rules/zones.d.ts.map +1 -0
- package/dist/rules/zones.js +174 -0
- package/dist/rules/zones.js.map +1 -0
- package/dist/scaffold.d.ts +25 -12
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +154 -90
- package/dist/scaffold.js.map +1 -1
- package/dist/sdk.d.ts +17 -3
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +941 -153
- package/dist/sdk.js.map +1 -1
- package/dist/search-terms.d.ts +2 -0
- package/dist/search-terms.d.ts.map +1 -1
- package/dist/search-terms.js +23 -8
- package/dist/search-terms.js.map +1 -1
- package/dist/smoke.d.ts +79 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +494 -0
- package/dist/smoke.js.map +1 -0
- package/dist/sync-manifest.d.ts.map +1 -1
- package/dist/sync-manifest.js +2 -1
- package/dist/sync-manifest.js.map +1 -1
- package/dist/sync-routes.d.ts +4 -3
- package/dist/sync-routes.d.ts.map +1 -1
- package/dist/sync-routes.js +4 -3
- package/dist/sync-routes.js.map +1 -1
- package/dist/test-tool.d.ts.map +1 -1
- package/dist/test-tool.js +30 -11
- package/dist/test-tool.js.map +1 -1
- package/dist/types-search.d.ts.map +1 -1
- package/dist/types-search.js +11 -5
- package/dist/types-search.js.map +1 -1
- package/dist/upgrade.d.ts +36 -6
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +167 -29
- package/dist/upgrade.js.map +1 -1
- package/dist/verification-plan.d.ts.map +1 -1
- package/dist/verification-plan.js +8 -0
- package/dist/verification-plan.js.map +1 -1
- package/dist/verification.d.ts.map +1 -1
- package/dist/verification.js +45 -12
- package/dist/verification.js.map +1 -1
- package/dist/web-app-options.d.ts +19 -0
- package/dist/web-app-options.d.ts.map +1 -0
- package/dist/web-app-options.js +49 -0
- package/dist/web-app-options.js.map +1 -0
- package/dist/work-graph.d.ts +3 -0
- package/dist/work-graph.d.ts.map +1 -1
- package/dist/work-graph.js +33 -16
- package/dist/work-graph.js.map +1 -1
- package/docs/examples.json +185 -29
- package/docs/llms-full.txt +4123 -548
- package/docs/types.json +14391 -10060
- package/package.json +19 -11
- package/src/app-files.ts +40 -0
- package/src/assure-hydration.ts +139 -46
- package/src/assure.ts +17 -2
- package/src/capabilities-tool.ts +35 -9
- package/src/cdn-check.ts +268 -0
- package/src/check-diagnostics.ts +199 -797
- package/src/check-scan.ts +394 -63
- package/src/check.ts +146 -58
- package/src/cli.ts +347 -92
- package/src/command-catalog.ts +407 -45
- package/src/config-target.ts +47 -0
- package/src/contracts.ts +66 -15
- package/src/db-audit.ts +128 -0
- package/src/db-child.ts +285 -0
- package/src/db-config.ts +224 -0
- package/src/db-tool.ts +690 -0
- package/src/dev-bun-config.ts +116 -40
- package/src/dev-feed-tool.ts +912 -0
- package/src/dev-server-client.ts +267 -0
- package/src/diagnostics.ts +179 -0
- package/src/diff-tool.ts +6 -5
- package/src/docs-search.ts +10 -3
- package/src/doctor.ts +98 -15
- package/src/env-file.ts +78 -1
- package/src/fix-recipes.ts +44 -31
- package/src/frontend-guidance.ts +5 -5
- package/src/i18n-check.ts +179 -0
- package/src/init-agents.ts +301 -38
- package/src/internal/code-unit-order.ts +5 -0
- package/src/internal/script-kind.ts +11 -0
- package/src/internal/source-facts.ts +96 -22
- package/src/internal/typescript-import.ts +663 -68
- package/src/introspect.ts +93 -82
- package/src/learn.ts +3 -3
- package/src/levels-tool.ts +47 -2
- package/src/load.ts +144 -32
- package/src/manifest-tool.ts +3 -2
- package/src/mcp-app-tool.ts +2 -0
- package/src/mcp-context.ts +5 -7
- package/src/mcp-delegate.ts +162 -0
- package/src/mcp-docs-tools.ts +23 -5
- package/src/mcp-exec.ts +301 -161
- package/src/mcp-http.ts +22 -5
- package/src/mcp-io.ts +130 -0
- package/src/mcp-isolate.ts +287 -0
- package/src/mcp-path.ts +50 -0
- package/src/mcp-project-child.ts +182 -0
- package/src/mcp-reflect.ts +3 -2
- package/src/mcp-render.ts +72 -42
- package/src/mcp-root.ts +130 -24
- package/src/mcp-run.ts +190 -56
- package/src/mcp-ws.ts +4 -1
- package/src/mcp.ts +193 -91
- package/src/migrate-layout.ts +1121 -0
- package/src/openapi-tool.ts +7 -3
- package/src/openapi-types.ts +315 -13
- package/src/pipeline-report.ts +22 -18
- package/src/port.ts +53 -30
- package/src/project-facts.ts +42 -8
- package/src/recipes/4.0.0.ts +35 -0
- package/src/recipes/index.ts +2 -0
- package/src/release-verification.ts +74 -5
- package/src/review.ts +988 -0
- package/src/route-types.ts +133 -0
- package/src/rules/codes.ts +9 -0
- package/src/rules/data-guard.ts +230 -0
- package/src/rules/index.ts +18 -5
- package/src/rules/islands.ts +12 -4
- package/src/rules/legacy.ts +947 -35
- package/src/rules/nano.ts +18 -6
- package/src/rules/pages.ts +99 -0
- package/src/rules/routes.ts +181 -2
- package/src/rules/secrets.ts +174 -0
- package/src/rules/security.ts +198 -70
- package/src/rules/typescript.ts +77 -0
- package/src/rules/zones.ts +195 -0
- package/src/scaffold.ts +175 -98
- package/src/sdk.ts +1215 -158
- package/src/search-terms.ts +24 -7
- package/src/smoke.ts +607 -0
- package/src/sync-manifest.ts +2 -1
- package/src/sync-routes.ts +4 -3
- package/src/test-tool.ts +32 -11
- package/src/types-search.ts +11 -4
- package/src/upgrade.ts +205 -25
- package/src/verification-plan.ts +27 -0
- package/src/verification.ts +50 -12
- package/src/web-app-options.ts +57 -0
- package/src/work-graph.ts +40 -16
package/dist/mcp-render.js
CHANGED
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
* {@link renderPages} never throws - every failure (no config, a loader error, a render throw) becomes
|
|
10
10
|
* `{ error }` so the agent gets the actionable message.
|
|
11
11
|
*/
|
|
12
|
-
import { inProcessClient } from "@nifrajs/client";
|
|
13
12
|
import { runApp } from "@nifrajs/runner";
|
|
14
13
|
import { createWebApp } from "@nifrajs/web";
|
|
15
14
|
import { discoverRoutes } from "@nifrajs/web/fs";
|
|
16
15
|
import { loadApp, resolvePlugins } from "./load.js";
|
|
16
|
+
import { CHILD_INPUT_MAX_BYTES, CHILD_OUTPUT_MAX_BYTES, readBoundedLines, readBoundedStream, serializeBoundedJson, } from "./mcp-io.js";
|
|
17
|
+
import { frameworkWebAppOptions } from "./web-app-options.js";
|
|
17
18
|
const errString = (err) => err instanceof Error ? `${err.name}: ${err.message}` : String(err);
|
|
18
19
|
/** Load the project, register its SSR plugins, and build the SSR `createWebApp` once - the cost the warm
|
|
19
20
|
* worker amortizes across calls. Never throws (every failure → `{ error }`). Factored out of
|
|
@@ -43,7 +44,7 @@ async function buildWebApp(cwd) {
|
|
|
43
44
|
adapter: app.framework.adapter,
|
|
44
45
|
manifest: discoverRoutes(app.routesDir),
|
|
45
46
|
clientEntry: "/_nifra-render-only.js", // placeholder; SSR HTML does not need the built client
|
|
46
|
-
...(app.
|
|
47
|
+
...frameworkWebAppOptions(app.framework, app.backend),
|
|
47
48
|
});
|
|
48
49
|
return { app: webApp };
|
|
49
50
|
}
|
|
@@ -76,6 +77,13 @@ function redirectConsoleToStderr() {
|
|
|
76
77
|
console.warn = (...args) => write("warn", args);
|
|
77
78
|
console.error = (...args) => write("error", args);
|
|
78
79
|
}
|
|
80
|
+
function safeResponseId(value) {
|
|
81
|
+
if (typeof value === "number" && Number.isSafeInteger(value))
|
|
82
|
+
return value;
|
|
83
|
+
if (typeof value === "string" && value.length <= 128)
|
|
84
|
+
return value;
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
79
87
|
/**
|
|
80
88
|
* Warm-worker loop (`--worker`): build the web app ONCE, then SSR each `{ id, input: { requests } }` line
|
|
81
89
|
* against that hot app and reply `{ id, output }`. The parent (`mcp.ts`'s warm-render handler) spawns this,
|
|
@@ -87,45 +95,49 @@ async function runWorker(cwd) {
|
|
|
87
95
|
// Build once; the same `{ error }` is returned for every request if the build failed, so an agent sees
|
|
88
96
|
// the actionable message and the parent restarts the worker on the next file change.
|
|
89
97
|
const built = await buildWebApp(cwd);
|
|
90
|
-
const decoder = new TextDecoder();
|
|
91
|
-
let buffer = "";
|
|
92
98
|
const send = (id, output) => {
|
|
93
|
-
|
|
99
|
+
const responseId = safeResponseId(id);
|
|
100
|
+
const encoded = serializeBoundedJson({ id: responseId, output }, CHILD_OUTPUT_MAX_BYTES - 1);
|
|
101
|
+
process.stdout.write(`${encoded ?? JSON.stringify({ id: responseId, output: { error: "worker output exceeded the size limit" } })}\n`);
|
|
94
102
|
};
|
|
95
|
-
for await (const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
103
|
+
for await (const item of readBoundedLines(Bun.stdin.stream(), CHILD_INPUT_MAX_BYTES)) {
|
|
104
|
+
if (item.kind === "too-large") {
|
|
105
|
+
send(null, { error: `worker input exceeded ${CHILD_INPUT_MAX_BYTES} bytes` });
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const line = item.text.trim();
|
|
109
|
+
if (line === "")
|
|
110
|
+
continue;
|
|
111
|
+
let message;
|
|
112
|
+
try {
|
|
113
|
+
message = JSON.parse(line);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
send(null, { error: "invalid worker input: expected JSON line" });
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const record = message !== null && typeof message === "object" && !Array.isArray(message)
|
|
120
|
+
? message
|
|
121
|
+
: undefined;
|
|
122
|
+
const input = record?.input !== null && typeof record?.input === "object" && !Array.isArray(record.input)
|
|
123
|
+
? record.input
|
|
124
|
+
: undefined;
|
|
125
|
+
const requests = input?.requests;
|
|
126
|
+
if (!Array.isArray(requests)) {
|
|
127
|
+
send(record?.id, { error: "expected { requests: [...] }" });
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if ("error" in built) {
|
|
131
|
+
send(record?.id, built);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
send(record?.id, {
|
|
136
|
+
results: await runApp(built.app, requests),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
send(record?.id, { error: errString(err) });
|
|
129
141
|
}
|
|
130
142
|
}
|
|
131
143
|
}
|
|
@@ -152,14 +164,21 @@ if (import.meta.main) {
|
|
|
152
164
|
process.exit(0);
|
|
153
165
|
}
|
|
154
166
|
let output;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
output =
|
|
167
|
+
const input = await readBoundedStream(Bun.stdin.stream(), CHILD_INPUT_MAX_BYTES);
|
|
168
|
+
if (input.truncated) {
|
|
169
|
+
output = { error: `input exceeded ${CHILD_INPUT_MAX_BYTES} bytes` };
|
|
158
170
|
}
|
|
159
|
-
|
|
160
|
-
|
|
171
|
+
else {
|
|
172
|
+
try {
|
|
173
|
+
const { requests } = JSON.parse(input.text);
|
|
174
|
+
output = await renderPages(cwd, requests);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
output = { error: "invalid input: expected JSON { requests: [...] }" };
|
|
178
|
+
}
|
|
161
179
|
}
|
|
162
|
-
await Bun.write(Bun.stdout,
|
|
180
|
+
await Bun.write(Bun.stdout, serializeBoundedJson(output, CHILD_OUTPUT_MAX_BYTES, 2) ??
|
|
181
|
+
JSON.stringify({ error: `output exceeded ${CHILD_OUTPUT_MAX_BYTES} bytes` }));
|
|
163
182
|
// Exit explicitly, exactly as the `--worker` branch above already does.
|
|
164
183
|
//
|
|
165
184
|
// Loading the app runs its module side effects, and a real app opens things: a database pool, a
|
package/dist/mcp-render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-render.js","sourceRoot":"","sources":["../src/mcp-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-render.js","sourceRoot":"","sources":["../src/mcp-render.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-root.d.ts
CHANGED
|
@@ -5,17 +5,21 @@
|
|
|
5
5
|
* 1. An explicit `nifra mcp <dir>` argument is taken literally (human configuration wins).
|
|
6
6
|
* 2. A cwd guess walks UP to the nearest nifra marker (a `package.json` depending on `@nifrajs/*`,
|
|
7
7
|
* or a `nifra.config.ts` monorepo root), so running from a subdirectory still finds the project.
|
|
8
|
+
* When nothing above is a project but the spawn directory is a package-manager workspace root
|
|
9
|
+
* (`package.json` `workspaces`) with exactly one nifra member, the server adopts that member.
|
|
8
10
|
* 3. The client's MCP `roots` (its workspace folders) are requested after the handshake. When the
|
|
9
11
|
* guess found no project - or found one DISJOINT from every workspace root - and exactly one
|
|
10
|
-
* workspace root is a nifra project, the server
|
|
12
|
+
* workspace root (or one member of a workspace-root folder) is a nifra project, the server
|
|
13
|
+
* adopts it.
|
|
11
14
|
* 4. What cannot be resolved fails CLOSED: project-scoped tools refuse with a remediation message
|
|
12
15
|
* instead of describing whatever directory the server happened to start in.
|
|
13
16
|
*
|
|
14
17
|
* Everything here is pure state + fs probes; the I/O wiring lives in `./mcp.ts`.
|
|
15
18
|
*/
|
|
16
19
|
/** How the current root was chosen. `arg` = explicit `nifra mcp <dir>`; `cwd` = the spawn directory;
|
|
17
|
-
* `parent` = a marker found walking up from cwd; `
|
|
18
|
-
|
|
20
|
+
* `parent` = a marker found walking up from cwd; `workspace` = the one nifra member of the spawn
|
|
21
|
+
* directory's package-manager workspaces; `client-root` = adopted from the client's MCP roots. */
|
|
22
|
+
export type McpRootSource = "arg" | "cwd" | "parent" | "workspace" | "client-root";
|
|
19
23
|
export interface McpRootState {
|
|
20
24
|
/** Absolute directory every project-scoped tool operates on. */
|
|
21
25
|
readonly root: string;
|
|
@@ -25,6 +29,9 @@ export interface McpRootState {
|
|
|
25
29
|
/** The client's workspace roots (absolute paths), or `null` until (unless) the client answers
|
|
26
30
|
* `roots/list`. `null` disables mismatch detection - no data is not a mismatch. */
|
|
27
31
|
readonly clientRoots: readonly string[] | null;
|
|
32
|
+
/** Nifra members of the spawn directory's workspaces when there were several to choose from - the
|
|
33
|
+
* remediation list, since adopting one of them would be a guess. */
|
|
34
|
+
readonly workspaceCandidates?: readonly string[];
|
|
28
35
|
}
|
|
29
36
|
/** A directory is a nifra project when its `package.json` depends on any `@nifrajs/*` package, or it
|
|
30
37
|
* is a `nifra.config.ts` monorepo root. Backend-only projects (no web config, no `routes/`) count -
|
|
@@ -32,8 +39,15 @@ export interface McpRootState {
|
|
|
32
39
|
export declare function isNifraProjectDir(dir: string): Promise<boolean>;
|
|
33
40
|
/** Nearest ancestor (including `start` itself) that is a nifra project, or `null`. */
|
|
34
41
|
export declare function findNifraRoot(start: string): Promise<string | null>;
|
|
42
|
+
/**
|
|
43
|
+
* The nifra projects among `dir`'s package-manager workspace members, in declaration order. Empty when
|
|
44
|
+
* `dir` declares no `workspaces`. A member is a directory a pattern matches that holds a `package.json`;
|
|
45
|
+
* `node_modules` is never a member.
|
|
46
|
+
*/
|
|
47
|
+
export declare function workspaceProjects(dir: string): Promise<string[]>;
|
|
35
48
|
/** Initial root state. An explicit dir is taken literally (no walk-up - the human named it); a cwd
|
|
36
|
-
* guess walks up so a subdirectory spawn still lands on the project
|
|
49
|
+
* guess walks up so a subdirectory spawn still lands on the project, then tries the spawn directory's
|
|
50
|
+
* workspace members so a monorepo root finds its one nifra app. */
|
|
37
51
|
export declare function resolveRootState(requested: string, explicit: boolean): Promise<McpRootState>;
|
|
38
52
|
/** `file://` roots from a `roots/list` result, as absolute paths. Non-file and malformed URIs are
|
|
39
53
|
* skipped - the client owns that list, this server only reads it. */
|
|
@@ -45,13 +59,14 @@ export declare function rootMismatch(state: McpRootState): boolean;
|
|
|
45
59
|
/**
|
|
46
60
|
* Fold the client's workspace roots into the state, adopting one of them when the current root is
|
|
47
61
|
* wrong and the correction is unambiguous: the root was GUESSED (never an explicit `nifra mcp <dir>`),
|
|
48
|
-
* it is not a project - or is one disjoint from the whole workspace - and exactly ONE
|
|
49
|
-
*
|
|
50
|
-
* message lists the candidates instead.
|
|
62
|
+
* it is not a project - or is one disjoint from the whole workspace - and exactly ONE candidate exists
|
|
63
|
+
* (see {@link nifraCandidates}). Ambiguity (zero or several candidates) adopts nothing; the guard's
|
|
64
|
+
* remediation message lists the candidates instead.
|
|
51
65
|
*/
|
|
52
66
|
export declare function applyClientRoots(state: McpRootState, paths: readonly string[]): Promise<McpRootState>;
|
|
53
|
-
/** The nifra
|
|
54
|
-
*
|
|
67
|
+
/** The nifra projects the client's workspace roots name: each root that is a project itself, and
|
|
68
|
+
* otherwise the nifra members of a root that is a package-manager workspace. The remediation list
|
|
69
|
+
* when adoption was ambiguous. */
|
|
55
70
|
export declare function nifraCandidates(paths: readonly string[]): Promise<string[]>;
|
|
56
71
|
/** Per-call verdict for the tool guard: `blocked` set = project tools refuse with that message;
|
|
57
72
|
* otherwise `note` is appended to every project tool result so the effective root stays visible. */
|
|
@@ -80,6 +95,19 @@ export declare const driftNote: (drift: ToolingDrift) => string;
|
|
|
80
95
|
* the version sprawl is invisible because every answer still looks authoritative.
|
|
81
96
|
*/
|
|
82
97
|
export declare function detectToolingDrift(root: string, cliVersion: string): Promise<ToolingDrift | undefined>;
|
|
98
|
+
/**
|
|
99
|
+
* The nifra the project builds with: its `@nifrajs/cli` when installed, else its `@nifrajs/core`
|
|
100
|
+
* (`fixed` versioning keeps the two in lockstep, so either names the CLI that matches the project).
|
|
101
|
+
* The version drift detection compares against and the version `init-agents --sync-mcp` pins to.
|
|
102
|
+
*/
|
|
103
|
+
export declare function installedNifraVersion(root: string): Promise<{
|
|
104
|
+
readonly package: string;
|
|
105
|
+
readonly version: string;
|
|
106
|
+
} | undefined>;
|
|
107
|
+
/** The command that re-pins a project's MCP launch to the nifra it installs. Named with the running
|
|
108
|
+
* CLI's own exact version: the binary printing this is the one known to have `--sync-mcp`, and it pins
|
|
109
|
+
* to the project's version, not its own. */
|
|
110
|
+
export declare const syncMcpCommand: (cliVersion: string) => string;
|
|
83
111
|
/**
|
|
84
112
|
* Wrap project-scoped tools with root trust. A bad root refuses in-band; a good root stamps every
|
|
85
113
|
* result so the agent can see which project answered. Docs tools pass through untouched.
|
package/dist/mcp-root.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-root.d.ts","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-root.d.ts","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-root.js
CHANGED
|
@@ -5,17 +5,26 @@
|
|
|
5
5
|
* 1. An explicit `nifra mcp <dir>` argument is taken literally (human configuration wins).
|
|
6
6
|
* 2. A cwd guess walks UP to the nearest nifra marker (a `package.json` depending on `@nifrajs/*`,
|
|
7
7
|
* or a `nifra.config.ts` monorepo root), so running from a subdirectory still finds the project.
|
|
8
|
+
* When nothing above is a project but the spawn directory is a package-manager workspace root
|
|
9
|
+
* (`package.json` `workspaces`) with exactly one nifra member, the server adopts that member.
|
|
8
10
|
* 3. The client's MCP `roots` (its workspace folders) are requested after the handshake. When the
|
|
9
11
|
* guess found no project - or found one DISJOINT from every workspace root - and exactly one
|
|
10
|
-
* workspace root is a nifra project, the server
|
|
12
|
+
* workspace root (or one member of a workspace-root folder) is a nifra project, the server
|
|
13
|
+
* adopts it.
|
|
11
14
|
* 4. What cannot be resolved fails CLOSED: project-scoped tools refuse with a remediation message
|
|
12
15
|
* instead of describing whatever directory the server happened to start in.
|
|
13
16
|
*
|
|
14
17
|
* Everything here is pure state + fs probes; the I/O wiring lives in `./mcp.ts`.
|
|
15
18
|
*/
|
|
16
19
|
import { readFile } from "node:fs/promises";
|
|
17
|
-
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
20
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
18
21
|
import { fileURLToPath } from "node:url";
|
|
22
|
+
const MAX_CLIENT_ROOTS = 64;
|
|
23
|
+
const MAX_ROOT_URI_LENGTH = 16_384;
|
|
24
|
+
const MAX_ROOT_PATH_LENGTH = 4_096;
|
|
25
|
+
/** Workspace members probed per workspace root. A monorepo larger than this is pointed at explicitly
|
|
26
|
+
* (`nifra mcp <dir>`) rather than scanned on every server start. */
|
|
27
|
+
const MAX_WORKSPACE_MEMBERS = 256;
|
|
19
28
|
/** A directory is a nifra project when its `package.json` depends on any `@nifrajs/*` package, or it
|
|
20
29
|
* is a `nifra.config.ts` monorepo root. Backend-only projects (no web config, no `routes/`) count -
|
|
21
30
|
* the marker is the dependency, not the app shape. */
|
|
@@ -50,8 +59,57 @@ export async function findNifraRoot(start) {
|
|
|
50
59
|
dir = parent;
|
|
51
60
|
}
|
|
52
61
|
}
|
|
62
|
+
/** The `workspaces` globs a `package.json` declares (the array form, or Yarn's `{ packages }`), or
|
|
63
|
+
* `null` when the directory is not a workspace root. Negated patterns are dropped: they only exclude. */
|
|
64
|
+
async function workspacePatterns(dir) {
|
|
65
|
+
let field;
|
|
66
|
+
try {
|
|
67
|
+
field = JSON.parse(await readFile(join(dir, "package.json"), "utf8")).workspaces;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const list = Array.isArray(field)
|
|
73
|
+
? field
|
|
74
|
+
: typeof field === "object" && field !== null
|
|
75
|
+
? field.packages
|
|
76
|
+
: undefined;
|
|
77
|
+
if (!Array.isArray(list))
|
|
78
|
+
return null;
|
|
79
|
+
return list.filter((pattern) => typeof pattern === "string" && pattern !== "" && !pattern.startsWith("!"));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The nifra projects among `dir`'s package-manager workspace members, in declaration order. Empty when
|
|
83
|
+
* `dir` declares no `workspaces`. A member is a directory a pattern matches that holds a `package.json`;
|
|
84
|
+
* `node_modules` is never a member.
|
|
85
|
+
*/
|
|
86
|
+
export async function workspaceProjects(dir) {
|
|
87
|
+
const patterns = await workspacePatterns(dir);
|
|
88
|
+
if (patterns === null)
|
|
89
|
+
return [];
|
|
90
|
+
const members = new Set();
|
|
91
|
+
let probed = 0;
|
|
92
|
+
for (const pattern of patterns) {
|
|
93
|
+
const glob = new Bun.Glob(`${pattern.replace(/\/+$/, "")}/package.json`);
|
|
94
|
+
for await (const match of glob.scan({ cwd: dir, onlyFiles: true })) {
|
|
95
|
+
if (match.split(/[\\/]/).includes("node_modules"))
|
|
96
|
+
continue;
|
|
97
|
+
if (++probed > MAX_WORKSPACE_MEMBERS)
|
|
98
|
+
break;
|
|
99
|
+
members.add(dirname(join(dir, match)));
|
|
100
|
+
}
|
|
101
|
+
if (probed > MAX_WORKSPACE_MEMBERS)
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
const projects = [];
|
|
105
|
+
for (const member of members)
|
|
106
|
+
if (await isNifraProjectDir(member))
|
|
107
|
+
projects.push(member);
|
|
108
|
+
return projects;
|
|
109
|
+
}
|
|
53
110
|
/** Initial root state. An explicit dir is taken literally (no walk-up - the human named it); a cwd
|
|
54
|
-
* guess walks up so a subdirectory spawn still lands on the project
|
|
111
|
+
* guess walks up so a subdirectory spawn still lands on the project, then tries the spawn directory's
|
|
112
|
+
* workspace members so a monorepo root finds its one nifra app. */
|
|
55
113
|
export async function resolveRootState(requested, explicit) {
|
|
56
114
|
if (explicit) {
|
|
57
115
|
return {
|
|
@@ -70,7 +128,17 @@ export async function resolveRootState(requested, explicit) {
|
|
|
70
128
|
clientRoots: null,
|
|
71
129
|
};
|
|
72
130
|
}
|
|
73
|
-
|
|
131
|
+
const members = await workspaceProjects(requested);
|
|
132
|
+
if (members.length === 1) {
|
|
133
|
+
return { root: members[0], source: "workspace", isProject: true, clientRoots: null };
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
root: requested,
|
|
137
|
+
source: "cwd",
|
|
138
|
+
isProject: false,
|
|
139
|
+
clientRoots: null,
|
|
140
|
+
...(members.length > 1 ? { workspaceCandidates: members } : {}),
|
|
141
|
+
};
|
|
74
142
|
}
|
|
75
143
|
/** `file://` roots from a `roots/list` result, as absolute paths. Non-file and malformed URIs are
|
|
76
144
|
* skipped - the client owns that list, this server only reads it. */
|
|
@@ -81,9 +149,12 @@ export function pathsFromRootsResult(result) {
|
|
|
81
149
|
if (!Array.isArray(roots))
|
|
82
150
|
return [];
|
|
83
151
|
const paths = [];
|
|
152
|
+
const seen = new Set();
|
|
84
153
|
for (const entry of roots) {
|
|
154
|
+
if (paths.length >= MAX_CLIENT_ROOTS)
|
|
155
|
+
break;
|
|
85
156
|
const uri = entry?.uri;
|
|
86
|
-
if (typeof uri !== "string" || !uri.startsWith("file://"))
|
|
157
|
+
if (typeof uri !== "string" || uri.length > MAX_ROOT_URI_LENGTH || !uri.startsWith("file://"))
|
|
87
158
|
continue;
|
|
88
159
|
try {
|
|
89
160
|
const parsed = new URL(uri);
|
|
@@ -93,7 +164,13 @@ export function pathsFromRootsResult(result) {
|
|
|
93
164
|
if (parsed.protocol !== "file:" ||
|
|
94
165
|
(parsed.hostname !== "" && parsed.hostname !== "localhost"))
|
|
95
166
|
continue;
|
|
96
|
-
|
|
167
|
+
const path = fileURLToPath(parsed);
|
|
168
|
+
if (path.length === 0 || path.length > MAX_ROOT_PATH_LENGTH || path.includes("\0"))
|
|
169
|
+
continue;
|
|
170
|
+
if (seen.has(path))
|
|
171
|
+
continue;
|
|
172
|
+
seen.add(path);
|
|
173
|
+
paths.push(path);
|
|
97
174
|
}
|
|
98
175
|
catch {
|
|
99
176
|
// Malformed URI - skip.
|
|
@@ -117,9 +194,9 @@ export function rootMismatch(state) {
|
|
|
117
194
|
/**
|
|
118
195
|
* Fold the client's workspace roots into the state, adopting one of them when the current root is
|
|
119
196
|
* wrong and the correction is unambiguous: the root was GUESSED (never an explicit `nifra mcp <dir>`),
|
|
120
|
-
* it is not a project - or is one disjoint from the whole workspace - and exactly ONE
|
|
121
|
-
*
|
|
122
|
-
* message lists the candidates instead.
|
|
197
|
+
* it is not a project - or is one disjoint from the whole workspace - and exactly ONE candidate exists
|
|
198
|
+
* (see {@link nifraCandidates}). Ambiguity (zero or several candidates) adopts nothing; the guard's
|
|
199
|
+
* remediation message lists the candidates instead.
|
|
123
200
|
*/
|
|
124
201
|
export async function applyClientRoots(state, paths) {
|
|
125
202
|
const next = { ...state, clientRoots: paths };
|
|
@@ -127,10 +204,7 @@ export async function applyClientRoots(state, paths) {
|
|
|
127
204
|
return next;
|
|
128
205
|
if (next.isProject && !rootMismatch(next))
|
|
129
206
|
return next;
|
|
130
|
-
const candidates =
|
|
131
|
-
for (const path of paths)
|
|
132
|
-
if (await isNifraProjectDir(path))
|
|
133
|
-
candidates.push(path);
|
|
207
|
+
const candidates = await nifraCandidates(paths);
|
|
134
208
|
if (candidates.length !== 1)
|
|
135
209
|
return next;
|
|
136
210
|
return {
|
|
@@ -140,13 +214,18 @@ export async function applyClientRoots(state, paths) {
|
|
|
140
214
|
clientRoots: paths,
|
|
141
215
|
};
|
|
142
216
|
}
|
|
143
|
-
/** The nifra
|
|
144
|
-
*
|
|
217
|
+
/** The nifra projects the client's workspace roots name: each root that is a project itself, and
|
|
218
|
+
* otherwise the nifra members of a root that is a package-manager workspace. The remediation list
|
|
219
|
+
* when adoption was ambiguous. */
|
|
145
220
|
export async function nifraCandidates(paths) {
|
|
146
221
|
const candidates = [];
|
|
147
|
-
for (const path of paths)
|
|
222
|
+
for (const path of paths) {
|
|
148
223
|
if (await isNifraProjectDir(path))
|
|
149
224
|
candidates.push(path);
|
|
225
|
+
else
|
|
226
|
+
for (const member of await workspaceProjects(path))
|
|
227
|
+
candidates.push(member);
|
|
228
|
+
}
|
|
150
229
|
return candidates;
|
|
151
230
|
}
|
|
152
231
|
const REMEDIATION = "Fix: start the client in the project directory, register the server project-scoped " +
|
|
@@ -156,9 +235,14 @@ export async function rootVerdict(state) {
|
|
|
156
235
|
? ` Client workspace roots: ${state.clientRoots.join(", ")}.`
|
|
157
236
|
: "";
|
|
158
237
|
if (!state.isProject) {
|
|
159
|
-
const candidates =
|
|
238
|
+
const candidates = [
|
|
239
|
+
...new Set([
|
|
240
|
+
...(state.workspaceCandidates ?? []),
|
|
241
|
+
...(state.clientRoots !== null ? await nifraCandidates(state.clientRoots) : []),
|
|
242
|
+
]),
|
|
243
|
+
];
|
|
160
244
|
const hint = candidates.length > 1
|
|
161
|
-
? ` Several workspace
|
|
245
|
+
? ` Several workspace folders are nifra projects (${candidates.join(", ")}) - pass one: \`nifra mcp <dir>\`.`
|
|
162
246
|
: "";
|
|
163
247
|
return {
|
|
164
248
|
blocked: `No nifra project at ${state.root} (no package.json with an @nifrajs/* dependency, no nifra.config.ts). ` +
|
|
@@ -192,7 +276,8 @@ export function rootInstructions(state, drift) {
|
|
|
192
276
|
* nifra than the project compiles against - stale types, checks, and docs all read as authoritative. */
|
|
193
277
|
export const driftNote = (drift) => `WARNING: this server runs nifra CLI ${drift.cli}, but the project installs ${drift.package} ${drift.project}. ` +
|
|
194
278
|
"Types, checks, and docs may describe a different version than your code builds with. " +
|
|
195
|
-
|
|
279
|
+
`Fix: re-pin the project's MCP launch to the nifra it installs with \`${syncMcpCommand(drift.cli)}\` (run in the project directory), then restart the agent. ` +
|
|
280
|
+
"If this server is not launched from the project's .mcp.json, run the project's own CLI instead (`bunx --bun nifra mcp` from the project directory, or point the client at ./node_modules/.bin/nifra).";
|
|
196
281
|
/** Feature-level agreement. Patch drift is not reported: it never changes the surface being described. */
|
|
197
282
|
const featureVersion = (version) => version.split(".").slice(0, 2).join(".");
|
|
198
283
|
async function installedVersion(root, name) {
|
|
@@ -219,16 +304,30 @@ async function installedVersion(root, name) {
|
|
|
219
304
|
* the version sprawl is invisible because every answer still looks authoritative.
|
|
220
305
|
*/
|
|
221
306
|
export async function detectToolingDrift(root, cliVersion) {
|
|
307
|
+
const installed = await installedNifraVersion(root);
|
|
308
|
+
if (installed === undefined)
|
|
309
|
+
return undefined;
|
|
310
|
+
return featureVersion(installed.version) === featureVersion(cliVersion)
|
|
311
|
+
? undefined
|
|
312
|
+
: { cli: cliVersion, project: installed.version, package: installed.package };
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* The nifra the project builds with: its `@nifrajs/cli` when installed, else its `@nifrajs/core`
|
|
316
|
+
* (`fixed` versioning keeps the two in lockstep, so either names the CLI that matches the project).
|
|
317
|
+
* The version drift detection compares against and the version `init-agents --sync-mcp` pins to.
|
|
318
|
+
*/
|
|
319
|
+
export async function installedNifraVersion(root) {
|
|
222
320
|
for (const name of ["@nifrajs/cli", "@nifrajs/core"]) {
|
|
223
|
-
const
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
return featureVersion(project) === featureVersion(cliVersion)
|
|
227
|
-
? undefined
|
|
228
|
-
: { cli: cliVersion, project, package: name };
|
|
321
|
+
const version = await installedVersion(root, name);
|
|
322
|
+
if (version !== undefined)
|
|
323
|
+
return { package: name, version };
|
|
229
324
|
}
|
|
230
325
|
return undefined;
|
|
231
326
|
}
|
|
327
|
+
/** The command that re-pins a project's MCP launch to the nifra it installs. Named with the running
|
|
328
|
+
* CLI's own exact version: the binary printing this is the one known to have `--sync-mcp`, and it pins
|
|
329
|
+
* to the project's version, not its own. */
|
|
330
|
+
export const syncMcpCommand = (cliVersion) => `bunx @nifrajs/cli@${cliVersion} init-agents --sync-mcp`;
|
|
232
331
|
/** Tool names served from the bundled corpus; they do not depend on the project root. */
|
|
233
332
|
const PROJECT_FREE_TOOLS = new Set(["nifra_docs", "nifra_example", "nifra_types", "nifra_learn"]);
|
|
234
333
|
/**
|
package/dist/mcp-root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-root.js","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-root.js","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-run.d.ts
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* up the agent's latest edits. {@link runBackend} is the pure-ish core (resolve entry → import → run),
|
|
5
5
|
* exported so it's unit-testable in-process; the entry below wires it to stdin/stdout.
|
|
6
6
|
*/
|
|
7
|
-
import { type AppLike } from "@nifrajs/runner";
|
|
7
|
+
import { type AppLike, type RunResult } from "@nifrajs/runner";
|
|
8
|
+
import { type DevLogLevel } from "@nifrajs/web/dev-feed";
|
|
9
|
+
import type { Diagnostic } from "@nifrajs/web/diagnostic";
|
|
8
10
|
export declare function loadBackend(cwd: string, entry?: string): Promise<{
|
|
9
11
|
app: AppLike;
|
|
10
12
|
} | {
|
|
@@ -21,4 +23,19 @@ export declare function runBackend(cwd: string, requests: unknown, entry?: strin
|
|
|
21
23
|
} | {
|
|
22
24
|
error: string;
|
|
23
25
|
}>;
|
|
26
|
+
/** What `nifra_run` adds to the runner's result: what the app printed, and what failed, structured. */
|
|
27
|
+
export interface RunCapture {
|
|
28
|
+
readonly logs?: ReadonlyArray<{
|
|
29
|
+
readonly level: DevLogLevel;
|
|
30
|
+
readonly message: string;
|
|
31
|
+
}>;
|
|
32
|
+
readonly errors?: readonly Diagnostic[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run `requests` one at a time, each inside its own request context, so what a handler logs - and
|
|
36
|
+
* core's `unhandled request error` line behind a bare 500 - lands on the result of the request that
|
|
37
|
+
* produced it, redacted, with the error as a Diagnostic (codeframe, cause, fix). Without this a 500 came
|
|
38
|
+
* back as `internal_error` and the reason only ever reached a stderr nobody reads.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runCaptured(cwd: string, app: AppLike, requests: readonly unknown[]): Promise<Array<RunResult & RunCapture>>;
|
|
24
41
|
//# sourceMappingURL=mcp-run.d.ts.map
|
package/dist/mcp-run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-run.d.ts","sourceRoot":"","sources":["../src/mcp-run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-run.d.ts","sourceRoot":"","sources":["../src/mcp-run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,KAAK,OAAO,EAAoB,KAAK,SAAS,EAAU,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAezD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC/C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,uGAAuG;AACvG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;CACxC;AAID;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAqBxC"}
|