@nifrajs/cli 0.1.0-alpha.1

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/check.d.ts +100 -0
  4. package/dist/check.d.ts.map +1 -0
  5. package/dist/check.js +690 -0
  6. package/dist/check.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +208 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/docs-search.d.ts +30 -0
  12. package/dist/docs-search.d.ts.map +1 -0
  13. package/dist/docs-search.js +94 -0
  14. package/dist/docs-search.js.map +1 -0
  15. package/dist/doctor.d.ts +52 -0
  16. package/dist/doctor.d.ts.map +1 -0
  17. package/dist/doctor.js +291 -0
  18. package/dist/doctor.js.map +1 -0
  19. package/dist/examples.d.ts +30 -0
  20. package/dist/examples.d.ts.map +1 -0
  21. package/dist/examples.js +70 -0
  22. package/dist/examples.js.map +1 -0
  23. package/dist/introspect.d.ts +64 -0
  24. package/dist/introspect.d.ts.map +1 -0
  25. package/dist/introspect.js +243 -0
  26. package/dist/introspect.js.map +1 -0
  27. package/dist/load.d.ts +51 -0
  28. package/dist/load.d.ts.map +1 -0
  29. package/dist/load.js +70 -0
  30. package/dist/load.js.map +1 -0
  31. package/dist/mcp-docs-tools.d.ts +13 -0
  32. package/dist/mcp-docs-tools.d.ts.map +1 -0
  33. package/dist/mcp-docs-tools.js +63 -0
  34. package/dist/mcp-docs-tools.js.map +1 -0
  35. package/dist/mcp-http.d.ts +43 -0
  36. package/dist/mcp-http.d.ts.map +1 -0
  37. package/dist/mcp-http.js +136 -0
  38. package/dist/mcp-http.js.map +1 -0
  39. package/dist/mcp-protocol.d.ts +97 -0
  40. package/dist/mcp-protocol.d.ts.map +1 -0
  41. package/dist/mcp-protocol.js +248 -0
  42. package/dist/mcp-protocol.js.map +1 -0
  43. package/dist/mcp-render.d.ts +17 -0
  44. package/dist/mcp-render.d.ts.map +1 -0
  45. package/dist/mcp-render.js +73 -0
  46. package/dist/mcp-render.js.map +1 -0
  47. package/dist/mcp-run.d.ts +24 -0
  48. package/dist/mcp-run.d.ts.map +1 -0
  49. package/dist/mcp-run.js +142 -0
  50. package/dist/mcp-run.js.map +1 -0
  51. package/dist/mcp-ws.d.ts +26 -0
  52. package/dist/mcp-ws.d.ts.map +1 -0
  53. package/dist/mcp-ws.js +258 -0
  54. package/dist/mcp-ws.js.map +1 -0
  55. package/dist/mcp.d.ts +42 -0
  56. package/dist/mcp.d.ts.map +1 -0
  57. package/dist/mcp.js +712 -0
  58. package/dist/mcp.js.map +1 -0
  59. package/dist/openapi-tool.d.ts +6 -0
  60. package/dist/openapi-tool.d.ts.map +1 -0
  61. package/dist/openapi-tool.js +48 -0
  62. package/dist/openapi-tool.js.map +1 -0
  63. package/dist/scaffold.d.ts +35 -0
  64. package/dist/scaffold.d.ts.map +1 -0
  65. package/dist/scaffold.js +140 -0
  66. package/dist/scaffold.js.map +1 -0
  67. package/dist/search-terms.d.ts +17 -0
  68. package/dist/search-terms.d.ts.map +1 -0
  69. package/dist/search-terms.js +82 -0
  70. package/dist/search-terms.js.map +1 -0
  71. package/dist/test-tool.d.ts +29 -0
  72. package/dist/test-tool.d.ts.map +1 -0
  73. package/dist/test-tool.js +150 -0
  74. package/dist/test-tool.js.map +1 -0
  75. package/docs/examples.json +314 -0
  76. package/docs/llms-full.txt +4325 -0
  77. package/package.json +58 -0
  78. package/src/check.ts +790 -0
  79. package/src/cli.ts +237 -0
  80. package/src/docs-search.ts +111 -0
  81. package/src/doctor.ts +349 -0
  82. package/src/examples.ts +89 -0
  83. package/src/introspect.ts +284 -0
  84. package/src/load.ts +129 -0
  85. package/src/mcp-docs-tools.ts +72 -0
  86. package/src/mcp-http.ts +155 -0
  87. package/src/mcp-protocol.ts +326 -0
  88. package/src/mcp-render.ts +78 -0
  89. package/src/mcp-run.ts +153 -0
  90. package/src/mcp-ws.ts +328 -0
  91. package/src/mcp.ts +863 -0
  92. package/src/openapi-tool.ts +51 -0
  93. package/src/scaffold.ts +164 -0
  94. package/src/search-terms.ts +89 -0
  95. package/src/test-tool.ts +181 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { LoadedApp } from "./load.js";
2
+ export type OpenApiFormat = "json" | "yaml";
3
+ /** Render a project's backend as OpenAPI 3.1. Frontend-only apps get a valid empty document, which is
4
+ * easier for agents and API tooling to handle than a tool error. */
5
+ export declare function renderOpenApi(app: LoadedApp, format: OpenApiFormat): string;
6
+ //# sourceMappingURL=openapi-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-tool.d.ts","sourceRoot":"","sources":["../src/openapi-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAuC3C;oEACoE;AACpE,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAK3E"}
@@ -0,0 +1,48 @@
1
+ import { basename } from "node:path";
2
+ import { toOpenAPI } from "@nifrajs/schema/openapi";
3
+ function hasRoutesMethod(value) {
4
+ return typeof value?.routes === "function";
5
+ }
6
+ function indent(text, spaces) {
7
+ const pad = " ".repeat(spaces);
8
+ return text
9
+ .split("\n")
10
+ .map((line) => (line.length === 0 ? line : `${pad}${line}`))
11
+ .join("\n");
12
+ }
13
+ function toYaml(value, depth = 0) {
14
+ if (value === null || typeof value !== "object")
15
+ return JSON.stringify(value);
16
+ if (Array.isArray(value)) {
17
+ if (value.length === 0)
18
+ return "[]";
19
+ return value
20
+ .map((item) => {
21
+ if (item !== null && typeof item === "object")
22
+ return `-\n${indent(toYaml(item, depth + 1), 2)}`;
23
+ return `- ${toYaml(item, depth + 1)}`;
24
+ })
25
+ .join("\n");
26
+ }
27
+ const entries = Object.entries(value);
28
+ if (entries.length === 0)
29
+ return "{}";
30
+ return entries
31
+ .map(([key, item]) => {
32
+ const rendered = toYaml(item, depth + 1);
33
+ if (item !== null && typeof item === "object" && rendered !== "{}" && rendered !== "[]") {
34
+ return `${JSON.stringify(key)}:\n${indent(rendered, 2)}`;
35
+ }
36
+ return `${JSON.stringify(key)}: ${rendered}`;
37
+ })
38
+ .join("\n");
39
+ }
40
+ /** Render a project's backend as OpenAPI 3.1. Frontend-only apps get a valid empty document, which is
41
+ * easier for agents and API tooling to handle than a tool error. */
42
+ export function renderOpenApi(app, format) {
43
+ const title = `${basename(app.cwd)} API`;
44
+ const input = hasRoutesMethod(app.backend) ? app.backend : {};
45
+ const document = toOpenAPI(input, { title, version: "1.0.0" });
46
+ return format === "yaml" ? toYaml(document) : JSON.stringify(document, null, 2);
47
+ }
48
+ //# sourceMappingURL=openapi-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-tool.js","sourceRoot":"","sources":["../src/openapi-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `nifra_scaffold` — turn a URL path into the correct `routes/` file (the convention an agent most often
3
+ * gets wrong) + a minimal, contract-correct stub. The mapping is the inverse of @nifrajs/web's
4
+ * `filePathToPatterns`: `:id`/`[id]` → `[id]`, `*rest`/`[...rest]` → `[...rest]`, `[[lang]]` optional,
5
+ * `/` → `index`. The framework (→ file extension) comes from the project's `clientModule`.
6
+ *
7
+ * Page stubs are emitted only for the JSX family (react/preact/solid — one shared, verified shape);
8
+ * for vue/svelte/vanilla we return the correct PATH + the route-module contract and point at
9
+ * `nifra_example` for the body, rather than hand-writing an SFC we can't typecheck here.
10
+ */
11
+ export type Framework = "react" | "preact" | "solid" | "vue" | "svelte" | "vanilla";
12
+ /** Derive the framework from a `clientModule` like `@nifrajs/web-react/client`. Defaults to react. */
13
+ export declare function frameworkFromClientModule(clientModule: string | undefined): Framework;
14
+ /** Map a URL path to its `routes/` file path (relative to `routes/`, without extension prefix dir).
15
+ * `/` → `index`; `/users/:id` → `users/[id]`; `/blog/*slug` → `blog/[...slug]`. */
16
+ export declare function routePathToFile(urlPath: string, ext: string): string;
17
+ export interface ScaffoldResult {
18
+ readonly file: string;
19
+ readonly content?: string;
20
+ readonly note: string;
21
+ }
22
+ export interface ScaffoldWriteResult extends ScaffoldResult {
23
+ readonly written: boolean;
24
+ readonly reason?: string;
25
+ }
26
+ /** Scaffold a page route for `urlPath` under the project's `framework`. Returns the correct file path
27
+ * always; a ready-to-write stub for the JSX family, contract guidance otherwise. */
28
+ export declare function scaffoldRoute(urlPath: string, framework: Framework): ScaffoldResult;
29
+ /** Write a scaffolded route stub when the framework has a verified ready-to-write body. The write is
30
+ * intentionally conservative: it refuses non-JSX stubs (where we only return contract guidance) and
31
+ * uses `wx`, so an agent cannot overwrite user work by accident. */
32
+ export declare function writeScaffoldRoute(cwd: string, urlPath: string, framework: Framework): Promise<ScaffoldWriteResult>;
33
+ /** Render the tool result as markdown — the file path, the stub (if any), and the contract note. */
34
+ export declare function renderScaffold(urlPath: string, framework: Framework): string;
35
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAA;AAWnF,sGAAsG;AACtG,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGrF;AAWD;mFACmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUpE;AAiCD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;oFACoF;AACpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,cAAc,CAenF;AAWD;;oEAEoE;AACpE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAoB9B;AAED,oGAAoG;AACpG,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAS5E"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * `nifra_scaffold` — turn a URL path into the correct `routes/` file (the convention an agent most often
3
+ * gets wrong) + a minimal, contract-correct stub. The mapping is the inverse of @nifrajs/web's
4
+ * `filePathToPatterns`: `:id`/`[id]` → `[id]`, `*rest`/`[...rest]` → `[...rest]`, `[[lang]]` optional,
5
+ * `/` → `index`. The framework (→ file extension) comes from the project's `clientModule`.
6
+ *
7
+ * Page stubs are emitted only for the JSX family (react/preact/solid — one shared, verified shape);
8
+ * for vue/svelte/vanilla we return the correct PATH + the route-module contract and point at
9
+ * `nifra_example` for the body, rather than hand-writing an SFC we can't typecheck here.
10
+ */
11
+ import { mkdir, writeFile } from "node:fs/promises";
12
+ import { dirname, resolve, sep } from "node:path";
13
+ const EXT = {
14
+ react: "tsx",
15
+ preact: "tsx",
16
+ solid: "tsx",
17
+ vue: "vue",
18
+ svelte: "svelte",
19
+ vanilla: "ts",
20
+ };
21
+ /** Derive the framework from a `clientModule` like `@nifrajs/web-react/client`. Defaults to react. */
22
+ export function frameworkFromClientModule(clientModule) {
23
+ const m = /@nifrajs\/web-(react|preact|solid|vue|svelte|vanilla)\b/.exec(clientModule ?? "");
24
+ return m?.[1] ?? "react";
25
+ }
26
+ /** One URL path segment → its `routes/` filename segment. Accepts both URL (`:id`, `*rest`) and
27
+ * file (`[id]`, `[...rest]`) spellings so an agent can pass either. */
28
+ function segmentToFile(seg) {
29
+ if (seg.startsWith("["))
30
+ return seg; // already file-spelled ([id], [...rest], [[lang]])
31
+ if (seg.startsWith("*"))
32
+ return `[...${seg.slice(1) || "rest"}]`; // *rest / * → catch-all
33
+ if (seg.startsWith(":"))
34
+ return `[${seg.slice(1)}]`; // :id → [id]
35
+ return seg;
36
+ }
37
+ /** Map a URL path to its `routes/` file path (relative to `routes/`, without extension prefix dir).
38
+ * `/` → `index`; `/users/:id` → `users/[id]`; `/blog/*slug` → `blog/[...slug]`. */
39
+ export function routePathToFile(urlPath, ext) {
40
+ const segments = urlPath.split("/").filter((s) => s.length > 0);
41
+ if (segments.length === 0)
42
+ return `routes/index.${ext}`;
43
+ const last = segments.length - 1;
44
+ // Catch-all must be the final segment (mirrors @nifrajs/web); flag it rather than emit an invalid file.
45
+ for (let i = 0; i < last; i++) {
46
+ if (segments[i]?.startsWith("*") || segments[i]?.startsWith("[..."))
47
+ throw new Error(`catch-all must be the last segment: "${urlPath}"`);
48
+ }
49
+ return `routes/${segments.map(segmentToFile).join("/")}.${ext}`;
50
+ }
51
+ const ROUTE_CONTRACT = `A route module may export:
52
+ - \`export default function Page(props: { data: LoaderData<typeof loader> }) { … }\` — the page component.
53
+ - \`export async function loader({ params, request, api }: LoaderArgs<typeof backend>) { … }\` — server-only; data for SSR. Reach the backend via \`api\` (typed) / DB via the backend, NEVER a top-level server-only import.
54
+ - \`export async function action({ request, api }: ActionArgs<typeof backend>) { … }\` — server-only; handles the form POST.
55
+ - \`export const meta = { title, meta:[…] }\` — head tags.
56
+ Path params are typed on \`params\`.`;
57
+ function jsxStub(file, params) {
58
+ const paramsNote = params.length > 0 ? `params.${params.join(", params.")}` : "no path params on this route";
59
+ const loaderLine = params.length > 0
60
+ ? `// export async function loader({ params, api }: LoaderArgs<typeof backend>) { return { /* fetch by ${params[0]} */ } }`
61
+ : `// export async function loader({ api }: LoaderArgs<typeof backend>) { return {} }`;
62
+ return `// ${file} — server-only loader/action allowed; never top-level-import server-only code (DB/secrets).
63
+ // Available here: ${paramsNote}. Fetch data in a loader via the typed \`api\`; see nifra_example("loader").
64
+ ${loaderLine}
65
+ export default function Page() {
66
+ return <main>TODO: ${file}</main>
67
+ }
68
+ `;
69
+ }
70
+ /** Param names a route file declares, for the stub's notes. */
71
+ function paramsOf(file) {
72
+ const out = [];
73
+ for (const m of file.matchAll(/\[(?:\.\.\.)?([A-Za-z_][A-Za-z0-9_]*)\]/g))
74
+ out.push(m[1]);
75
+ return out;
76
+ }
77
+ /** Scaffold a page route for `urlPath` under the project's `framework`. Returns the correct file path
78
+ * always; a ready-to-write stub for the JSX family, contract guidance otherwise. */
79
+ export function scaffoldRoute(urlPath, framework) {
80
+ const ext = EXT[framework];
81
+ const file = routePathToFile(urlPath, ext);
82
+ const params = paramsOf(file);
83
+ if (framework === "react" || framework === "preact" || framework === "solid") {
84
+ return {
85
+ file,
86
+ content: jsxStub(file, params),
87
+ note: `Create ${file}. ${ROUTE_CONTRACT}`,
88
+ };
89
+ }
90
+ return {
91
+ file,
92
+ note: `Create ${file} as a ${framework} route module. ${ROUTE_CONTRACT}\nFor the ${framework} page body, call nifra_example (it ships verified ${framework} snippets) rather than guessing the SFC shape.`,
93
+ };
94
+ }
95
+ function resolveInsideCwd(cwd, relativeFile) {
96
+ const root = resolve(cwd);
97
+ const target = resolve(root, relativeFile);
98
+ if (target !== root && !target.startsWith(`${root}${sep}`)) {
99
+ throw new Error(`refusing to write outside project root: ${relativeFile}`);
100
+ }
101
+ return target;
102
+ }
103
+ /** Write a scaffolded route stub when the framework has a verified ready-to-write body. The write is
104
+ * intentionally conservative: it refuses non-JSX stubs (where we only return contract guidance) and
105
+ * uses `wx`, so an agent cannot overwrite user work by accident. */
106
+ export async function writeScaffoldRoute(cwd, urlPath, framework) {
107
+ const result = scaffoldRoute(urlPath, framework);
108
+ if (result.content === undefined) {
109
+ return {
110
+ ...result,
111
+ written: false,
112
+ reason: "no verified ready-to-write stub for this framework; use nifra_example for the body",
113
+ };
114
+ }
115
+ const target = resolveInsideCwd(cwd, result.file);
116
+ await mkdir(dirname(target), { recursive: true });
117
+ try {
118
+ await writeFile(target, result.content, { flag: "wx" });
119
+ }
120
+ catch (err) {
121
+ if (err && typeof err === "object" && err.code === "EEXIST") {
122
+ return { ...result, written: false, reason: `file already exists: ${result.file}` };
123
+ }
124
+ throw err;
125
+ }
126
+ return { ...result, written: true };
127
+ }
128
+ /** Render the tool result as markdown — the file path, the stub (if any), and the contract note. */
129
+ export function renderScaffold(urlPath, framework) {
130
+ let r;
131
+ try {
132
+ r = scaffoldRoute(urlPath, framework);
133
+ }
134
+ catch (err) {
135
+ return `Cannot scaffold ${JSON.stringify(urlPath)}: ${err instanceof Error ? err.message : String(err)}`;
136
+ }
137
+ const stub = r.content ? `\n\n\`\`\`${EXT[framework]}\n${r.content}\`\`\`` : "";
138
+ return `# Scaffold route \`${urlPath}\` (${framework})\n\n**File:** \`${r.file}\`\n\n${r.note}${stub}`;
139
+ }
140
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Tiny deterministic query expansion for the agent-facing docs/example search tools.
3
+ *
4
+ * This is intentionally not "semantic search": the corpora are small, curated, and bundled with the
5
+ * package. A few framework-specific aliases plus safe prefix matching cover the common human/agent
6
+ * wording drift ("authentication" vs "auth", "ws" vs "websocket") without adding dependencies,
7
+ * model calls, or nondeterministic ranking.
8
+ */
9
+ export interface SearchTermGroup {
10
+ readonly term: string;
11
+ readonly variants: readonly string[];
12
+ }
13
+ export declare const tokenize: (s: string) => string[];
14
+ export declare function queryTermGroups(query: string): SearchTermGroup[];
15
+ export declare function tokenSetHas(tokens: ReadonlySet<string>, group: SearchTermGroup): boolean;
16
+ export declare function countBodyHits(lowerBody: string, group: SearchTermGroup, maxHits: number): number;
17
+ //# sourceMappingURL=search-terms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-terms.d.ts","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAkCD,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAAM,EAIX,CAAA;AAEhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAKhE;AAQD,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAOxF;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAchG"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Tiny deterministic query expansion for the agent-facing docs/example search tools.
3
+ *
4
+ * This is intentionally not "semantic search": the corpora are small, curated, and bundled with the
5
+ * package. A few framework-specific aliases plus safe prefix matching cover the common human/agent
6
+ * wording drift ("authentication" vs "auth", "ws" vs "websocket") without adding dependencies,
7
+ * model calls, or nondeterministic ranking.
8
+ */
9
+ const ALIASES = {
10
+ action: ["actions"],
11
+ actions: ["action"],
12
+ api: ["backend", "server"],
13
+ auth: ["authentication", "login", "session", "sessions"],
14
+ authentication: ["auth", "login", "session", "sessions"],
15
+ backend: ["api", "server"],
16
+ cache: ["caching", "isr"],
17
+ caching: ["cache", "isr"],
18
+ client: ["typed"],
19
+ deploy: ["deployment", "edge", "worker", "workers", "vercel", "deno"],
20
+ deployment: ["deploy", "edge", "worker", "workers", "vercel", "deno"],
21
+ loader: ["loaders"],
22
+ loaders: ["loader"],
23
+ route: ["routes", "routing"],
24
+ routes: ["route", "routing"],
25
+ schema: ["schemas", "validation", "validate"],
26
+ schemas: ["schema", "validation", "validate"],
27
+ server: ["api", "backend"],
28
+ session: ["sessions", "auth", "authentication", "cookie", "cookies"],
29
+ sessions: ["session", "auth", "authentication", "cookie", "cookies"],
30
+ sse: ["eventsource", "stream", "streams"],
31
+ typed: ["client", "type", "types"],
32
+ upload: ["uploads", "file"],
33
+ uploads: ["upload", "file"],
34
+ validate: ["validation", "schema", "schemas"],
35
+ validation: ["validate", "schema", "schemas"],
36
+ websocket: ["websockets", "ws"],
37
+ websockets: ["websocket", "ws"],
38
+ ws: ["websocket", "websockets"],
39
+ };
40
+ export const tokenize = (s) => s
41
+ .toLowerCase()
42
+ .split(/[^a-z0-9]+/)
43
+ .filter((t) => t.length > 1);
44
+ export function queryTermGroups(query) {
45
+ return [...new Set(tokenize(query))].map((term) => ({
46
+ term,
47
+ variants: [term, ...(ALIASES[term] ?? [])],
48
+ }));
49
+ }
50
+ function tokenMatches(term, token) {
51
+ if (term === token)
52
+ return true;
53
+ // Prefix matching catches plural/stem variants without letting very short terms get noisy.
54
+ return term.length >= 4 && token.length >= 4 && (term.startsWith(token) || token.startsWith(term));
55
+ }
56
+ export function tokenSetHas(tokens, group) {
57
+ for (const variant of group.variants) {
58
+ for (const token of tokens) {
59
+ if (tokenMatches(variant, token))
60
+ return true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+ export function countBodyHits(lowerBody, group, maxHits) {
66
+ let best = 0;
67
+ for (const variant of group.variants) {
68
+ let from = 0;
69
+ let hits = 0;
70
+ while (hits < maxHits) {
71
+ const at = lowerBody.indexOf(variant, from);
72
+ if (at === -1)
73
+ break;
74
+ hits++;
75
+ from = at + variant.length;
76
+ }
77
+ if (hits > best)
78
+ best = hits;
79
+ }
80
+ return best;
81
+ }
82
+ //# sourceMappingURL=search-terms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-terms.js","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface TestToolArgs {
2
+ readonly pattern?: unknown;
3
+ readonly timeoutMs?: unknown;
4
+ }
5
+ export interface TestSummary {
6
+ readonly passed?: number;
7
+ readonly failed?: number;
8
+ readonly skipped?: number;
9
+ readonly expectations?: number;
10
+ readonly files?: number;
11
+ }
12
+ export interface TestToolResult {
13
+ readonly ok: boolean;
14
+ readonly command: readonly string[];
15
+ readonly durationMs: number;
16
+ readonly exitCode: number | null;
17
+ readonly timedOut: boolean;
18
+ readonly cancelled?: boolean;
19
+ readonly summary: TestSummary;
20
+ readonly stdout: string;
21
+ readonly stderr: string;
22
+ readonly error?: string;
23
+ }
24
+ /** Run `bun test` in a project with bounded runtime and bounded output. Arguments are argv entries,
25
+ * never a shell string, so an agent can safely pass a path pattern without command injection risk. */
26
+ export declare function collectTestResult(cwd: string, args?: TestToolArgs, opts?: {
27
+ readonly signal?: AbortSignal;
28
+ }): Promise<TestToolResult>;
29
+ //# sourceMappingURL=test-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-tool.d.ts","sourceRoot":"","sources":["../src/test-tool.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAyDD;sGACsG;AACtG,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,YAAiB,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAC3C,OAAO,CAAC,cAAc,CAAC,CA6FzB"}
@@ -0,0 +1,150 @@
1
+ const DEFAULT_TIMEOUT_MS = 30_000;
2
+ const MAX_TIMEOUT_MS = 300_000;
3
+ const MAX_OUTPUT_CHARS = 12_000;
4
+ function normalizePattern(value) {
5
+ if (value === undefined || value === null)
6
+ return undefined;
7
+ if (typeof value !== "string")
8
+ throw new Error("pattern must be a string");
9
+ const pattern = value.trim();
10
+ if (pattern === "")
11
+ return undefined;
12
+ if (pattern.length > 500)
13
+ throw new Error("pattern is too long");
14
+ if (pattern.includes("\0"))
15
+ throw new Error("pattern contains a NUL byte");
16
+ // It is passed as argv, not a shell string, but blocking flags keeps the MCP tool's contract simple:
17
+ // `pattern` narrows test files; it is not a remote flag injection surface.
18
+ if (pattern.startsWith("-"))
19
+ throw new Error("pattern must be a file/path pattern, not a CLI flag");
20
+ return pattern;
21
+ }
22
+ function normalizeTimeout(value) {
23
+ if (value === undefined || value === null)
24
+ return DEFAULT_TIMEOUT_MS;
25
+ if (typeof value !== "number" || !Number.isFinite(value)) {
26
+ throw new Error("timeoutMs must be a finite number");
27
+ }
28
+ return Math.min(Math.max(Math.trunc(value), 1_000), MAX_TIMEOUT_MS);
29
+ }
30
+ const ANSI = new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]*[@-~]`, "g");
31
+ function clean(text) {
32
+ const stripped = text.replace(ANSI, "");
33
+ return stripped.length <= MAX_OUTPUT_CHARS
34
+ ? stripped
35
+ : `${stripped.slice(0, 4_000)}\n…(trimmed ${stripped.length - MAX_OUTPUT_CHARS} chars)…\n${stripped.slice(-8_000)}`;
36
+ }
37
+ function firstNumber(pattern, text) {
38
+ const match = pattern.exec(text);
39
+ return match?.[1] === undefined ? undefined : Number(match[1]);
40
+ }
41
+ function parseSummary(output) {
42
+ const passed = firstNumber(/(\d+)\s+pass(?:ed)?\b/i, output);
43
+ const failed = firstNumber(/(\d+)\s+fail(?:ed)?\b/i, output);
44
+ const skipped = firstNumber(/(\d+)\s+skip(?:ped)?\b/i, output);
45
+ const expectations = firstNumber(/(\d+)\s+expect(?:ation)?s?\b/i, output);
46
+ const files = firstNumber(/(\d+)\s+files?\b/i, output);
47
+ return {
48
+ ...(passed !== undefined ? { passed } : {}),
49
+ ...(failed !== undefined ? { failed } : {}),
50
+ ...(skipped !== undefined ? { skipped } : {}),
51
+ ...(expectations !== undefined ? { expectations } : {}),
52
+ ...(files !== undefined ? { files } : {}),
53
+ };
54
+ }
55
+ /** Run `bun test` in a project with bounded runtime and bounded output. Arguments are argv entries,
56
+ * never a shell string, so an agent can safely pass a path pattern without command injection risk. */
57
+ export async function collectTestResult(cwd, args = {}, opts = {}) {
58
+ let pattern;
59
+ let timeoutMs;
60
+ try {
61
+ pattern = normalizePattern(args.pattern);
62
+ timeoutMs = normalizeTimeout(args.timeoutMs);
63
+ }
64
+ catch (err) {
65
+ return {
66
+ ok: false,
67
+ command: ["bun", "test"],
68
+ durationMs: 0,
69
+ exitCode: null,
70
+ timedOut: false,
71
+ summary: {},
72
+ stdout: "",
73
+ stderr: "",
74
+ error: err instanceof Error ? err.message : String(err),
75
+ };
76
+ }
77
+ const command = ["bun", "test", ...(pattern === undefined ? [] : [pattern])];
78
+ const started = Date.now();
79
+ if (opts.signal?.aborted) {
80
+ return {
81
+ ok: false,
82
+ command,
83
+ durationMs: 0,
84
+ exitCode: null,
85
+ timedOut: false,
86
+ cancelled: true,
87
+ summary: {},
88
+ stdout: "",
89
+ stderr: "",
90
+ error: typeof opts.signal.reason === "string" && opts.signal.reason.length > 0
91
+ ? `cancelled: ${opts.signal.reason}`
92
+ : "cancelled",
93
+ };
94
+ }
95
+ const proc = Bun.spawn(command, {
96
+ cwd,
97
+ stdout: "pipe",
98
+ stderr: "pipe",
99
+ });
100
+ let timedOut = false;
101
+ let cancelled = false;
102
+ const abort = () => {
103
+ cancelled = true;
104
+ proc.kill();
105
+ };
106
+ opts.signal?.addEventListener("abort", abort, { once: true });
107
+ const timer = setTimeout(() => {
108
+ timedOut = true;
109
+ proc.kill();
110
+ }, timeoutMs);
111
+ let stdoutRaw = "";
112
+ let stderrRaw = "";
113
+ let exitCode = null;
114
+ try {
115
+ const result = await Promise.all([
116
+ new Response(proc.stdout).text(),
117
+ new Response(proc.stderr).text(),
118
+ proc.exited,
119
+ ]);
120
+ stdoutRaw = result[0];
121
+ stderrRaw = result[1];
122
+ exitCode = result[2];
123
+ }
124
+ finally {
125
+ clearTimeout(timer);
126
+ opts.signal?.removeEventListener("abort", abort);
127
+ }
128
+ const stdout = clean(stdoutRaw);
129
+ const stderr = clean(stderrRaw);
130
+ const combined = `${stdout}\n${stderr}`;
131
+ return {
132
+ ok: exitCode === 0 && !timedOut && !cancelled,
133
+ command,
134
+ durationMs: Date.now() - started,
135
+ exitCode,
136
+ timedOut,
137
+ ...(cancelled ? { cancelled: true } : {}),
138
+ summary: parseSummary(combined),
139
+ stdout,
140
+ stderr,
141
+ ...(cancelled
142
+ ? {
143
+ error: typeof opts.signal?.reason === "string" && opts.signal.reason.length > 0
144
+ ? `cancelled: ${opts.signal.reason}`
145
+ : "cancelled",
146
+ }
147
+ : {}),
148
+ };
149
+ }
150
+ //# sourceMappingURL=test-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-tool.js","sourceRoot":"","sources":["../src/test-tool.ts"],"names":[],"mappings":"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"}