@nifrajs/cli 2.2.0 → 2.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/README.md +25 -25
- package/dist/assure.d.ts +2 -2
- package/dist/assure.d.ts.map +1 -1
- package/dist/assure.js +17 -10
- package/dist/assure.js.map +1 -1
- package/dist/capabilities-tool.d.ts +7 -0
- package/dist/capabilities-tool.d.ts.map +1 -1
- package/dist/capabilities-tool.js +68 -16
- package/dist/capabilities-tool.js.map +1 -1
- package/dist/check.d.ts +61 -22
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +332 -86
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +30 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +132 -36
- package/dist/cli.js.map +1 -1
- package/dist/diff-tool.d.ts +3 -3
- package/dist/diff-tool.js +7 -7
- package/dist/docs-search.d.ts +3 -3
- package/dist/docs-search.js +6 -6
- package/dist/doctor.d.ts +3 -3
- package/dist/doctor.js +8 -8
- package/dist/examples.d.ts +5 -5
- package/dist/examples.js +5 -5
- package/dist/init-agents.d.ts +14 -14
- package/dist/init-agents.js +14 -14
- package/dist/internal/typescript-import.d.ts +24 -0
- package/dist/internal/typescript-import.d.ts.map +1 -0
- package/dist/internal/typescript-import.js +32 -0
- package/dist/internal/typescript-import.js.map +1 -0
- package/dist/introspect.d.ts +12 -12
- package/dist/introspect.js +24 -24
- package/dist/levels-tool.d.ts +8 -8
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +33 -30
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts +6 -6
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +15 -7
- package/dist/load.js.map +1 -1
- package/dist/manifest-tool.d.ts +1 -1
- package/dist/manifest-tool.d.ts.map +1 -1
- package/dist/manifest-tool.js +4 -2
- package/dist/manifest-tool.js.map +1 -1
- package/dist/mcp-docs-tools.d.ts +1 -1
- package/dist/mcp-docs-tools.js +9 -9
- package/dist/mcp-http.d.ts +5 -5
- package/dist/mcp-http.js +7 -7
- package/dist/mcp-protocol.d.ts +2 -2
- package/dist/mcp-protocol.js +2 -2
- package/dist/mcp-render.d.ts +3 -3
- package/dist/mcp-render.js +6 -6
- package/dist/mcp-run.d.ts +2 -2
- package/dist/mcp-run.js +2 -2
- package/dist/mcp.d.ts +14 -14
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +75 -45
- package/dist/mcp.js.map +1 -1
- package/dist/openapi-tool.d.ts +1 -1
- package/dist/openapi-tool.js +2 -2
- package/dist/pipeline-guard.d.ts +1 -1
- package/dist/pipeline-guard.js +1 -1
- package/dist/port.d.ts +9 -9
- package/dist/port.js +27 -27
- package/dist/recipes/1.8.0.d.ts +2 -2
- package/dist/recipes/1.8.0.js +5 -5
- package/dist/recipes/index.d.ts +2 -2
- package/dist/recipes/index.js +1 -1
- package/dist/scaffold.d.ts +3 -3
- package/dist/scaffold.js +8 -8
- package/dist/sync-routes.d.ts +28 -0
- package/dist/sync-routes.d.ts.map +1 -0
- package/dist/sync-routes.js +55 -0
- package/dist/sync-routes.js.map +1 -0
- package/dist/types-search.d.ts +5 -5
- package/dist/types-search.js +7 -7
- package/dist/upgrade.d.ts +7 -7
- package/dist/upgrade.js +12 -12
- package/dist/verification.d.ts +51 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +80 -0
- package/dist/verification.js.map +1 -0
- package/docs/examples.json +174 -90
- package/docs/llms-full.txt +1696 -747
- package/docs/types.json +1892 -3105
- package/package.json +22 -11
- package/src/assure.ts +17 -18
- package/src/capabilities-tool.ts +82 -16
- package/src/check.ts +405 -103
- package/src/cli.ts +141 -38
- package/src/diff-tool.ts +8 -8
- package/src/docs-search.ts +6 -6
- package/src/doctor.ts +10 -10
- package/src/examples.ts +7 -7
- package/src/init-agents.ts +17 -17
- package/src/internal/typescript-import.ts +33 -0
- package/src/introspect.ts +28 -28
- package/src/levels-tool.ts +37 -31
- package/src/load.ts +21 -12
- package/src/manifest-tool.ts +4 -2
- package/src/mcp-docs-tools.ts +9 -9
- package/src/mcp-http.ts +7 -7
- package/src/mcp-protocol.ts +2 -2
- package/src/mcp-render.ts +6 -6
- package/src/mcp-run.ts +2 -2
- package/src/mcp.ts +82 -45
- package/src/openapi-tool.ts +2 -2
- package/src/pipeline-guard.ts +1 -1
- package/src/port.ts +31 -31
- package/src/recipes/1.8.0.ts +5 -5
- package/src/recipes/index.ts +2 -2
- package/src/scaffold.ts +8 -8
- package/src/sync-routes.ts +69 -0
- package/src/types-search.ts +8 -8
- package/src/upgrade.ts +12 -12
- package/src/verification.ts +123 -0
package/dist/check.d.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `nifra check`
|
|
2
|
+
* `nifra check` - the agent's (and CI's) definition of done. It makes the guarantees that keep a nifra
|
|
3
3
|
* app drift-proof actually *fire*, instead of relying on the agent to remember them:
|
|
4
4
|
*
|
|
5
|
-
* 1. **typecheck** (`tsc --noEmit`)
|
|
5
|
+
* 1. **typecheck** (`tsc --noEmit`) - the frontend↔backend contract is compiler-enforced. The typed
|
|
6
6
|
* client derives request + response types from the routes, so a shape mismatch is a type error.
|
|
7
|
-
* 2. **typed-client lint**
|
|
7
|
+
* 2. **typed-client lint** - flags hand-rolled `fetch()` to this app's *own* API (a relative URL),
|
|
8
8
|
* which bypasses `client<typeof app>` so the compiler can't see the drift.
|
|
9
|
-
* 3. **server-only-import lint**
|
|
9
|
+
* 3. **server-only-import lint** - flags a top-level import of server-only code (a DB driver, `node:`/
|
|
10
10
|
* `bun:` builtins, the `./db` module) into a `routes/` page module. Those modules are bundled for
|
|
11
|
-
* the browser too, so the import ships server code to the client and breaks the build
|
|
11
|
+
* the browser too, so the import ships server code to the client and breaks the build - the #1
|
|
12
12
|
* full-stack footgun. Reach server resources via `c.db` / `ctx.api`, never a top-level import.
|
|
13
13
|
*
|
|
14
14
|
* `collectCheckResult` returns a structured, machine-readable result (consumed by `--json` and the
|
|
15
15
|
* `nifra_check` MCP tool, so an agent acts on diagnostics instead of scraping prose). Exits non-zero if
|
|
16
16
|
* anything fails. Pure scanners (`scanFetchText`, `scanServerOnlyImports`) are unit-tested.
|
|
17
17
|
*/
|
|
18
|
+
import type { AssuranceConfig, AssuranceReport } from "@nifrajs/core/assurance";
|
|
19
|
+
import type { CapabilityProjectReport } from "./capabilities-tool.js";
|
|
20
|
+
import { type TypeScriptApi } from "./internal/typescript-import.js";
|
|
18
21
|
export interface SourceFinding {
|
|
19
22
|
readonly file: string;
|
|
20
23
|
readonly line: number;
|
|
@@ -31,13 +34,13 @@ export interface StaticRouteFinding extends SourceFinding {
|
|
|
31
34
|
readonly path: string;
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
34
|
-
* Blank, with spaces (newlines preserved, so every byte offset
|
|
37
|
+
* Blank, with spaces (newlines preserved, so every byte offset - and line number - is unchanged):
|
|
35
38
|
* - `//` line comments and block comments;
|
|
36
|
-
* - the CONTENTS of backtick template literals
|
|
39
|
+
* - the CONTENTS of backtick template literals - code-as-text (doc `CodeBlock` examples, code
|
|
37
40
|
* generators), never a real statement to lint.
|
|
38
41
|
* Single/double-quoted strings are KEPT (a real import/Response specifier lives in one). A small
|
|
39
42
|
* char-state machine, not a full lexer: it doesn't model regex literals, so a regex containing a quote
|
|
40
|
-
* could mis-skip
|
|
43
|
+
* could mis-skip - in practice the constructs these scanners look for sit before any such regex.
|
|
41
44
|
* Shared by the source scanners here and by `nifra doctor` ({@link ./doctor.ts}).
|
|
42
45
|
*/
|
|
43
46
|
export declare function stripComments(src: string): string;
|
|
@@ -54,6 +57,17 @@ export declare function codePositionMask(src: string): string;
|
|
|
54
57
|
export declare function scanFetchText(file: string, content: string, externalMounts?: readonly string[]): SourceFinding[];
|
|
55
58
|
/** Statically collect simple Nifra route registrations from source, without importing app code. */
|
|
56
59
|
export declare function scanStaticRouteText(file: string, content: string): StaticRouteFinding[];
|
|
60
|
+
/** Scan one file's text for SQL assembled by interpolation. Pure + line-accurate. */
|
|
61
|
+
export declare function scanInterpolatedSql(file: string, content: string, ts: TypeScriptApi): SourceFinding[];
|
|
62
|
+
/**
|
|
63
|
+
* Collect interpolated-SQL findings across the project.
|
|
64
|
+
*
|
|
65
|
+
* Returns `undefined` - not an empty array - when TypeScript is not installed. The rule parses source
|
|
66
|
+
* with the compiler, so without it there is nothing to report and, more to the point, no basis for
|
|
67
|
+
* reporting nothing. An empty result would read as "no interpolated SQL found", which is the one
|
|
68
|
+
* answer a security rule must never give when it did not run.
|
|
69
|
+
*/
|
|
70
|
+
export declare function scanProjectSql(cwd: string): Promise<SourceFinding[] | undefined>;
|
|
57
71
|
/** Scan one file's text for untyped `client("…")` calls. Pure + line-accurate. */
|
|
58
72
|
export declare function scanUntypedClient(file: string, content: string): SourceFinding[];
|
|
59
73
|
/** Flag an import of a specifier that no longer exists. Pure; matches the exact specifier or a subpath
|
|
@@ -67,13 +81,13 @@ export declare function scanServerOnlyImports(file: string, content: string): Se
|
|
|
67
81
|
* Mirrors {@link STATIC_IMPORT}, so `import type` + dynamic `import()` are already excluded. Pure. */
|
|
68
82
|
export declare function parseStaticImports(content: string): string[];
|
|
69
83
|
/** The server-only SINK an import specifier names directly (a `node:`/`bun:` builtin or a known
|
|
70
|
-
* server-only package), or `undefined` if it isn't a by-name sink. Pure
|
|
84
|
+
* server-only package), or `undefined` if it isn't a by-name sink. Pure - the label is the specifier
|
|
71
85
|
* itself (it's already the actionable name). */
|
|
72
86
|
export declare function directSinkSpecifier(spec: string): string | undefined;
|
|
73
87
|
/** One transitive server-only finding: the route module, the route's offending top-level import (the
|
|
74
88
|
* first hop / `specifier`), the line + snippet of that import, and the FULL chain to the sink. */
|
|
75
89
|
export interface TransitiveServerImportFinding extends ServerImportFinding {
|
|
76
|
-
/** `[routeFile, ...as-written specifiers…, sink]`
|
|
90
|
+
/** `[routeFile, ...as-written specifiers…, sink]` - the shortest path the walk found. Length 2 means
|
|
77
91
|
* the route imports the sink directly (same as the regex scan's direct edge). */
|
|
78
92
|
readonly chain: readonly string[];
|
|
79
93
|
/** True when a precise transitive resolve wasn't possible for the first hop (a bare pkg / path alias),
|
|
@@ -94,14 +108,14 @@ export type ModuleReader = (absPath: string) => string | undefined;
|
|
|
94
108
|
* unresolvable alias). At each node, a by-name sink import (`node:fs`, `postgres`) OR a resolved
|
|
95
109
|
* `*.server` / `server-only`-marked dependency terminates the chain. Bounded by depth + a visited set, so
|
|
96
110
|
* it's linear and cycle-free. `routeFile`/`routeContent` seed the walk; `resolve`/`read` supply the graph
|
|
97
|
-
*
|
|
111
|
+
* - pure given those, so it's unit-testable with a fake graph.
|
|
98
112
|
*/
|
|
99
113
|
export declare function walkServerOnlyChain(routeFile: string, routeContent: string, resolve: ModuleResolver, read: ModuleReader): readonly string[] | undefined;
|
|
100
114
|
/**
|
|
101
115
|
* Resolve the FULL transitive server-only chain(s) for a route module, given a real fs-backed resolver +
|
|
102
116
|
* reader. For each of the route's top-level imports, if a precise transitive walk finds a sink, the
|
|
103
|
-
* finding carries the full chain; otherwise
|
|
104
|
-
* regex scan already flags, or when a relative import can't be resolved
|
|
117
|
+
* finding carries the full chain; otherwise - when the first hop is itself a direct by-name sink the
|
|
118
|
+
* regex scan already flags, or when a relative import can't be resolved - it falls back to the DIRECT
|
|
105
119
|
* edge (`fallback: true`), never a fabricated chain. Returns one finding per offending top-level import,
|
|
106
120
|
* de-duplicated to the shortest chain per first-hop specifier. Non-route files yield `[]`.
|
|
107
121
|
*/
|
|
@@ -115,7 +129,7 @@ export declare function scanProject(cwd: string): Promise<SourceFinding[]>;
|
|
|
115
129
|
export interface ManifestDriftFinding {
|
|
116
130
|
/** The committed server-manifest file (relative to cwd). */
|
|
117
131
|
readonly file: string;
|
|
118
|
-
/** Route files in `routes/` missing from the manifest (stale manifest
|
|
132
|
+
/** Route files in `routes/` missing from the manifest (stale manifest - these routes won't serve). */
|
|
119
133
|
readonly missing: readonly string[];
|
|
120
134
|
/** Route files the manifest imports that no longer exist in `routes/` (a dangling import). */
|
|
121
135
|
readonly extra: readonly string[];
|
|
@@ -129,17 +143,17 @@ export interface ManifestDriftFinding {
|
|
|
129
143
|
* a per-manifest miss (an unreadable routes dir is simply skipped).
|
|
130
144
|
*/
|
|
131
145
|
export declare function scanServerManifestDrift(cwd: string): Promise<ManifestDriftFinding[]>;
|
|
132
|
-
/** A single machine-readable check failure
|
|
146
|
+
/** A single machine-readable check failure - the unit an agent (or CI) acts on. */
|
|
133
147
|
export interface CheckDiagnostic {
|
|
134
|
-
readonly rule: "typecheck" | "typed-client" | "untyped-client" | "server-only-import" | "removed-import" | "response-route" | "undeclared-dependency" | "duplicate-install" | "server-manifest-drift" | "manifest-drift" | "capability-assurance" | "capability-config" | "check-config";
|
|
135
|
-
/** `error` fails the gate (a real contract break); `warning` is advisory
|
|
148
|
+
readonly rule: "typecheck" | "typed-client" | "untyped-client" | "server-only-import" | "removed-import" | "interpolated-sql" | "response-route" | "undeclared-dependency" | "duplicate-install" | "server-manifest-drift" | "manifest-drift" | "capability-assurance" | "capability-config" | "check-config";
|
|
149
|
+
/** `error` fails the gate (a real contract break); `warning` is advisory - surfaced to the agent but
|
|
136
150
|
* does NOT fail `nifra check`, for patterns that are sometimes intentional (a route returning a raw
|
|
137
151
|
* `Response`, which silently drops the typed client to `data: never` but is valid for files/redirects). */
|
|
138
152
|
readonly severity: "error" | "warning";
|
|
139
153
|
readonly file?: string;
|
|
140
154
|
readonly line?: number;
|
|
141
155
|
readonly message: string;
|
|
142
|
-
/** The canonical, rule-level fix
|
|
156
|
+
/** The canonical, rule-level fix - clean of the per-occurrence snippet, so an agent can apply it
|
|
143
157
|
* directly. Set for the lint rules (they have one correct fix); omitted for `typecheck` (the fix is
|
|
144
158
|
* specific to each type error). */
|
|
145
159
|
readonly fix?: string;
|
|
@@ -150,12 +164,12 @@ export interface CheckDiagnostic {
|
|
|
150
164
|
* The import chain that pulls server-only code into the browser bundle, as display labels
|
|
151
165
|
* `[routeFile, …as-written specifiers…, sink]`. Set only on `server-only-import`.
|
|
152
166
|
*
|
|
153
|
-
* #4.4: this is now the FULL **transitive** chain
|
|
167
|
+
* #4.4: this is now the FULL **transitive** chain - a bounded import-resolution walk (`Bun.resolveSync`
|
|
154
168
|
* from each file's dir, BFS the local module graph) follows `route → ../data → ../db → node:crypto`,
|
|
155
169
|
* matching the build leak-guard's depth (`detectNodeBuiltinsInClient` in `@nifrajs/web/build`). A
|
|
156
170
|
* length-2 chain (`[routeFile, specifier]`) means the route imports the sink directly. When a hop can't
|
|
157
171
|
* be resolved precisely (a bare pkg, a tsconfig path alias), the walk degrades to the honest direct
|
|
158
|
-
* edge rather than fabricating a deeper path
|
|
172
|
+
* edge rather than fabricating a deeper path - never a lie.
|
|
159
173
|
*/
|
|
160
174
|
readonly chain?: readonly string[];
|
|
161
175
|
}
|
|
@@ -167,7 +181,7 @@ export interface CheckSuggestion {
|
|
|
167
181
|
readonly command?: readonly string[];
|
|
168
182
|
readonly steps?: readonly string[];
|
|
169
183
|
}
|
|
170
|
-
/** The structured result of a full check
|
|
184
|
+
/** The structured result of a full check - what `--json` prints and the `nifra_check` MCP tool returns. */
|
|
171
185
|
export interface CheckResult {
|
|
172
186
|
readonly ok: boolean;
|
|
173
187
|
readonly typecheck: "pass" | "fail" | "skipped";
|
|
@@ -176,7 +190,7 @@ export interface CheckResult {
|
|
|
176
190
|
* better-auth). Echoed here so `--json` / the MCP tool / the report can show what the typed-client scan
|
|
177
191
|
* deliberately skipped - a suppressed prefix stays auditable instead of silently hiding real drift. */
|
|
178
192
|
readonly externalMounts?: readonly string[];
|
|
179
|
-
/** Set only when the caller passed `maxDiagnostics` and there were more
|
|
193
|
+
/** Set only when the caller passed `maxDiagnostics` and there were more - `diagnostics` then holds the
|
|
180
194
|
* first `shown` of `total`. It caps the serialized size so the `nifra_check` MCP tool can't emit a
|
|
181
195
|
* message large enough to break the stdio transport; fix the shown diagnostics and re-run for the rest. */
|
|
182
196
|
readonly truncated?: {
|
|
@@ -184,6 +198,24 @@ export interface CheckResult {
|
|
|
184
198
|
readonly total: number;
|
|
185
199
|
};
|
|
186
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Pre-resolved route-assurance inputs, so the same reflection that `nifra assure` / `nifra levels`
|
|
203
|
+
* already ran can feed `check`'s capability + trust-manifest diagnostics instead of a second pass.
|
|
204
|
+
* Supplied by {@link collectProjectVerification}. When omitted, `collectCheckResult` loads and computes
|
|
205
|
+
* these itself (the standalone `nifra_check` MCP path); the two routes produce byte-identical results.
|
|
206
|
+
*/
|
|
207
|
+
export interface CheckAssuranceContext {
|
|
208
|
+
/** Whether `nifra.assurance.ts` exists: the gate for running the assurance-fed diagnostics at all. */
|
|
209
|
+
readonly present: boolean;
|
|
210
|
+
/** The loaded config, when it loaded. Absent when the file is missing or {@link error} is set. */
|
|
211
|
+
readonly config?: AssuranceConfig;
|
|
212
|
+
/** The failure from loading/evaluating the config, surfaced as a `capability-config` diagnostic. */
|
|
213
|
+
readonly error?: unknown;
|
|
214
|
+
/** `evaluateRouteAssurance` over the config's source + policy (drives the trust-manifest check). */
|
|
215
|
+
readonly routeAssurance?: AssuranceReport;
|
|
216
|
+
/** Static capability provenance, when the config declares a capabilities policy. */
|
|
217
|
+
readonly capability?: CapabilityProjectReport;
|
|
218
|
+
}
|
|
187
219
|
/** Run the three checks and assemble a structured, machine-readable result. The single source the CLI
|
|
188
220
|
* report, `--json`, and the MCP tool all render from. */
|
|
189
221
|
export declare function collectCheckResult(cwd: string, opts?: {
|
|
@@ -192,6 +224,13 @@ export declare function collectCheckResult(cwd: string, opts?: {
|
|
|
192
224
|
/** Cap the returned `diagnostics` to this many (adds {@link CheckResult.truncated}). The MCP tool sets
|
|
193
225
|
* it so a huge project can't produce a transport-breaking result; the CLI leaves it unset (all shown). */
|
|
194
226
|
readonly maxDiagnostics?: number;
|
|
227
|
+
/** How the interpolated-SQL rule gets its compiler. Injectable so the "not installed" path - the
|
|
228
|
+
* one where a security rule reports that it did not run - is testable on a machine that has it. */
|
|
229
|
+
readonly loadTypeScript?: () => Promise<TypeScriptApi | undefined>;
|
|
230
|
+
/** Route-assurance inputs already computed by {@link collectProjectVerification}. When present,
|
|
231
|
+
* the capability + trust-manifest diagnostics reuse them instead of loading/reflecting a second
|
|
232
|
+
* time; when absent, they are computed here (unchanged standalone behavior). */
|
|
233
|
+
readonly assurance?: CheckAssuranceContext;
|
|
195
234
|
}): Promise<CheckResult>;
|
|
196
235
|
/** Run the full check; print a report (`--json` for machine output) and return whether it passed. */
|
|
197
236
|
export declare function runCheck(cwd: string, opts?: {
|
package/dist/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
|