@warlock.js/core 5.34.1 → 5.34.3
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/CHANGELOG.md +24 -0
- package/esm/e2e/browser.d.mts.map +1 -1
- package/esm/e2e/browser.mjs +3 -1
- package/esm/e2e/browser.mjs.map +1 -1
- package/esm/e2e/types.d.mts +6 -0
- package/esm/e2e/types.d.mts.map +1 -1
- package/esm/e2e/types.mjs.map +1 -1
- package/esm/http/error-response.d.mts +12 -0
- package/esm/http/error-response.d.mts.map +1 -0
- package/esm/http/error-response.mjs +41 -0
- package/esm/http/error-response.mjs.map +1 -0
- package/esm/http/index.d.mts +3 -2
- package/esm/http/response.d.mts +2 -0
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +2 -0
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +2 -0
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/types.d.mts +7 -0
- package/esm/http/types.d.mts.map +1 -1
- package/esm/index.d.mts +3 -2
- package/esm/upgrade/codemods/toolchain-templates.mjs +3 -1
- package/esm/upgrade/codemods/toolchain-templates.mjs.map +1 -1
- package/llms-full.txt +323 -60
- package/llms.txt +56 -54
- package/package.json +13 -13
- package/skills/configure-app/SKILL.md +27 -0
- package/skills/generate-openapi/SKILL.md +1 -1
- package/skills/index.md +4 -4
- package/skills/{report-framework-issue.md → report-framework-issue/SKILL.md} +5 -0
- package/skills/send-response/SKILL.md +27 -0
- package/skills/test-browser/SKILL.md +1 -0
- package/skills/upgrade-from-5-29/SKILL.md +4 -0
- package/skills/warlock-check/SKILL.md +1 -1
- package/skills/warlock-trace/SKILL.md +2 -2
- package/skills/write-cli-command/SKILL.md +2 -2
- package/skills/README.md +0 -76
package/llms-full.txt
CHANGED
|
@@ -4,7 +4,48 @@
|
|
|
4
4
|
|
|
5
5
|
> Generated artifact. Concatenates every SKILL.md and reference file under `@warlock.js/core/skills/`. Re-run `node scripts/generate-llms.mjs` after any change.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Package orientation
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
description: 'Warlock application runtime: `router`, `Request`, `Response`, `config`, `env`, `sendMail` and `defineConfig`. Use for "add an API route", controllers, middleware, CLI commands, config, uploads, mail, sockets, OpenAPI, testing or upgrades. Not this package → @warlock.js/web for React SSR pages; @warlock.js/cascade for database queries; @warlock.js/seal for standalone schemas; @warlock.js/auth for login.'
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# @warlock.js/core
|
|
14
|
+
|
|
15
|
+
Core is the application runtime: it boots the app, auto-loads each module's special files, serves HTTP, and provides the helpers every feature layer uses. Features live in `src/app/<module>/` and flow one way: `routes.ts → controllers → services → repositories → models`; resources map output at the edge. Start with `warlock-conventions.md`, which every other topic assumes.
|
|
16
|
+
|
|
17
|
+
## The 80% path
|
|
18
|
+
|
|
19
|
+
1. Scaffold a module (`create-module.md`), then declare routes in its `routes.ts` (`register-route.md`, `warlock-routes.md`).
|
|
20
|
+
2. Write a thin controller (`create-controller.md`); validate input with a schema attached to the handler (`validate-input.md`).
|
|
21
|
+
3. Put logic in a service or use case (`write-use-case.md`), and data access in a repository (`use-repository.md`).
|
|
22
|
+
4. Return via `response.*` (`send-response.md`) and shape output with a resource (`define-resource.md`); declare `responseSchema` for typed clients and docs (`create-controller.md`, `generate-openapi.md`).
|
|
23
|
+
5. Configure and run (`configure-app.md`, `run-app.md`); check setup with `warlock-doctor.md`, read the app with `warlock-inspect.md` (or serve it to an agent with `warlock-mcp.md`), verify a change with `warlock-check.md`, and a request's runtime behaviour with `warlock-trace.md`.
|
|
24
|
+
|
|
25
|
+
When the framework is wrong or missing a capability, follow the `report-framework-issue` topic to prepare a public report and ask the user before filing.
|
|
26
|
+
|
|
27
|
+
## Topics by area
|
|
28
|
+
|
|
29
|
+
- **Foundations:** warlock-conventions, create-module, make-endpoint, configure-app, use-app-context, resolve-path, build-url, update-packages, lower-stage3-decorators, upgrade-from-5-29
|
|
30
|
+
- **HTTP & routing:** register-route, warlock-routes, create-controller, use-middleware, write-middleware, validate-input, use-request-locals, build-restful, wire-socket
|
|
31
|
+
- **Responses & resources:** send-response, define-resource, use-model-transformers, use-localization
|
|
32
|
+
- **Domain layers:** write-use-case, use-repository, write-seeder
|
|
33
|
+
- **CLI & running the app:** run-app, write-cli-command, add-connector, health-checks, warlock-doctor, warlock-inspect, warlock-check, generate-openapi
|
|
34
|
+
- **Agent tooling:** warlock-mcp, warlock-trace, warlock-agents-md, warlock-board
|
|
35
|
+
- **Storage, files & mail:** store-file, upload-file, process-image, send-mail
|
|
36
|
+
- **Security & utilities:** hash-password, encrypt-data, store-secrets, retry-operation, benchmark-code, request-memo, request-tracing
|
|
37
|
+
- **Testing:** test-browser, test-http, test-service, test-fakes, model-factories
|
|
38
|
+
|
|
39
|
+
## Conventions and pitfalls
|
|
40
|
+
|
|
41
|
+
- Several files are auto-loaded (`routes.ts`, `main.ts`, `events/*`, `utils/locales.ts`, `src/config/*`); never import them by hand.
|
|
42
|
+
- Core does NOT re-export `v`/`Infer` (import from `@warlock.js/seal`), or `Model`/`Migration` (from `@warlock.js/cascade`).
|
|
43
|
+
- Controllers stay thin: no business logic, transactions, or external API calls. Resources are output-only.
|
|
44
|
+
- No per-action `*.request.ts` files; schema files export the value and the inferred type together.
|
|
45
|
+
- Prefer typed model getters over scattered `.get<T>("field")` casts.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## add-connector `@warlock.js/core/skills/add-connector/SKILL.md`
|
|
8
49
|
|
|
9
50
|
---
|
|
10
51
|
name: add-connector
|
|
@@ -236,7 +277,7 @@ See the [Registering a connector](#registering-a-connector) section above for th
|
|
|
236
277
|
- The `warlock-conventions` topic — module layout, canonical imports.
|
|
237
278
|
|
|
238
279
|
|
|
239
|
-
## benchmark-code `@warlock.js/core/benchmark-code/SKILL.md`
|
|
280
|
+
## benchmark-code `@warlock.js/core/skills/benchmark-code/SKILL.md`
|
|
240
281
|
|
|
241
282
|
---
|
|
242
283
|
name: benchmark-code
|
|
@@ -502,7 +543,7 @@ The `latency` is the _total_ time including retries — useful for the SLO you a
|
|
|
502
543
|
- The `configure-app` topic — wiring `src/config/benchmark.ts`.
|
|
503
544
|
|
|
504
545
|
|
|
505
|
-
## build-restful `@warlock.js/core/build-restful/SKILL.md`
|
|
546
|
+
## build-restful `@warlock.js/core/skills/build-restful/SKILL.md`
|
|
506
547
|
|
|
507
548
|
---
|
|
508
549
|
name: build-restful
|
|
@@ -774,7 +815,7 @@ router.restfulResource("/orders", new OrdersRestful());
|
|
|
774
815
|
- The `warlock-conventions` topic — controller/service/repository layering rules.
|
|
775
816
|
|
|
776
817
|
|
|
777
|
-
## build-url `@warlock.js/core/build-url/SKILL.md`
|
|
818
|
+
## build-url `@warlock.js/core/skills/build-url/SKILL.md`
|
|
778
819
|
|
|
779
820
|
---
|
|
780
821
|
name: build-url
|
|
@@ -958,7 +999,7 @@ Don't call `setBaseUrl` per request — it's process-global and races every othe
|
|
|
958
999
|
- The `configure-app` topic — `src/config/app.ts` and the `baseUrl` env wiring.
|
|
959
1000
|
|
|
960
1001
|
|
|
961
|
-
## configure-app `@warlock.js/core/configure-app/SKILL.md`
|
|
1002
|
+
## configure-app `@warlock.js/core/skills/configure-app/SKILL.md`
|
|
962
1003
|
|
|
963
1004
|
---
|
|
964
1005
|
name: configure-app
|
|
@@ -1384,8 +1425,35 @@ Keep the domain error class in an app module imported by both the service and
|
|
|
1384
1425
|
this config. Return `undefined` for errors you do not recognize; a mapped 5xx
|
|
1385
1426
|
is opaque unless the mapper explicitly chooses a public message.
|
|
1386
1427
|
|
|
1428
|
+
## Format every JSON error response
|
|
1429
|
+
|
|
1430
|
+
`http.errorMapper` classifies thrown non-`HttpError` errors as `{ status, message?, payload? }`. It does not see existing `HttpError` subclasses, returned validation errors, helper responses, unmatched routes, or global rate-limit failures.
|
|
1431
|
+
|
|
1432
|
+
Use `http.errorResponse` when the application needs one JSON error envelope across those paths:
|
|
1433
|
+
|
|
1434
|
+
```ts title="src/config/http.ts"
|
|
1435
|
+
import type { HttpConfigurations } from "@warlock.js/core";
|
|
1436
|
+
|
|
1437
|
+
export default {
|
|
1438
|
+
errorMapper: () => ({ status: 500 }),
|
|
1439
|
+
errorResponse({ status, requestId }) {
|
|
1440
|
+
return {
|
|
1441
|
+
error: {
|
|
1442
|
+
code: status >= 500 ? "serverError" : `http${status}`,
|
|
1443
|
+
message: status >= 500 ? "Internal server error." : "Request failed.",
|
|
1444
|
+
},
|
|
1445
|
+
requestId,
|
|
1446
|
+
};
|
|
1447
|
+
},
|
|
1448
|
+
} satisfies HttpConfigurations;
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
The synchronous formatter receives `HttpErrorResponseContext`: `{ status: number, body: unknown, requestId: string }`. Narrow `body` before reading fields; it is the parsed, serialized JSON body. Return a JSON-serializable object or `undefined` to keep the original. The formatter changes only the body, preserving the HTTP status and headers except for recalculated content length, a `private, no-store` cache policy, and the correlation header. If it throws or cannot serialize its result, core logs the formatter error and retains the original body.
|
|
1387
1452
|
|
|
1388
|
-
|
|
1453
|
+
The hook covers status 400–599 with `application/json` or an `application/*+json` content type, including Fastify parsing errors, unmatched-route 404s, validation 422s, rate-limit 429s, and 500s. Warlock responses use the ID already stamped from `request.id`. Before Warlock creates a Request, the formatter receives Fastify's `request.id` and echoes that same value under `http.requestId.header` (default `X-Request-Id`). Setting `http.requestId.enabled: false` suppresses that header; without a stamped Warlock ID, the formatter falls back to Fastify's request ID even for routed responses. Keep request-ID headers enabled when the body must correlate with Warlock request logs. HTML pages, files, raw text, streams, and errors after headers have been sent are not reformatted. With no formatter configured, existing response shapes are unchanged.
|
|
1454
|
+
|
|
1455
|
+
|
|
1456
|
+
## create-controller `@warlock.js/core/skills/create-controller/SKILL.md`
|
|
1389
1457
|
|
|
1390
1458
|
---
|
|
1391
1459
|
name: create-controller
|
|
@@ -1684,7 +1752,7 @@ export const remoteCatalogController: RequestHandler = async ({ request, respons
|
|
|
1684
1752
|
```
|
|
1685
1753
|
|
|
1686
1754
|
|
|
1687
|
-
## create-module `@warlock.js/core/create-module/SKILL.md`
|
|
1755
|
+
## create-module `@warlock.js/core/skills/create-module/SKILL.md`
|
|
1688
1756
|
|
|
1689
1757
|
---
|
|
1690
1758
|
name: create-module
|
|
@@ -1885,7 +1953,7 @@ After editing generated code, run `npm run format` and `npm run lint:check`.
|
|
|
1885
1953
|
Formatting retains unused imports; the linter reports them.
|
|
1886
1954
|
|
|
1887
1955
|
|
|
1888
|
-
## define-resource `@warlock.js/core/define-resource/SKILL.md`
|
|
1956
|
+
## define-resource `@warlock.js/core/skills/define-resource/SKILL.md`
|
|
1889
1957
|
|
|
1890
1958
|
---
|
|
1891
1959
|
name: define-resource
|
|
@@ -2292,7 +2360,7 @@ export const CommentResource = defineResource({
|
|
|
2292
2360
|
- The `create-controller` topic — calling `new XResource(record).toJSON()` from a controller.
|
|
2293
2361
|
|
|
2294
2362
|
|
|
2295
|
-
## encrypt-data `@warlock.js/core/encrypt-data/SKILL.md`
|
|
2363
|
+
## encrypt-data `@warlock.js/core/skills/encrypt-data/SKILL.md`
|
|
2296
2364
|
|
|
2297
2365
|
---
|
|
2298
2366
|
name: encrypt-data
|
|
@@ -2506,11 +2574,11 @@ Password hashing (`hashPassword`) needs `bcryptjs`, which is its own install —
|
|
|
2506
2574
|
- The `warlock-conventions` topic — service layering, where the encryption boundary should sit.
|
|
2507
2575
|
|
|
2508
2576
|
|
|
2509
|
-
## generate-openapi `@warlock.js/core/generate-openapi/SKILL.md`
|
|
2577
|
+
## generate-openapi `@warlock.js/core/skills/generate-openapi/SKILL.md`
|
|
2510
2578
|
|
|
2511
2579
|
---
|
|
2512
2580
|
name: generate-openapi
|
|
2513
|
-
description: 'Generate an OpenAPI 3.1 document from the registered routes with `warlock generate.openapi` (default `storage/openapi/openapi.json`), write a Postman collection from it with `warlock generate.postman` (default `storage/postman/collection.json`), and read it live in the dev-only API docs page at `/__warlock/docs`. Documents paths, path/query parameters, request bodies from Seal validation, responses from `handler.responseSchema`, 401/422 and bearer/cookie security from `authMiddleware()`. Triggers: `generate.openapi`, `openApiGeneratorCommand`, `buildOpenApiDocument`, `getDevelopmentOpenApiDocument`, `generate.postman`, `openApiToPostmanCollection`, `getDevelopmentPostmanCollection`, `responseSchema`, `--include-pages`, `/__warlock/docs`; "OpenAPI", "Swagger", "API docs", "import my API into Postman or Insomnia", "document my routes". Skip: declaring response types on a handler — the `create-controller` topic; the devtools dashboard — the `
|
|
2581
|
+
description: 'Generate an OpenAPI 3.1 document from the registered routes with `warlock generate.openapi` (default `storage/openapi/openapi.json`), write a Postman collection from it with `warlock generate.postman` (default `storage/postman/collection.json`), and read it live in the dev-only API docs page at `/__warlock/docs`. Documents paths, path/query parameters, request bodies from Seal validation, responses from `handler.responseSchema`, 401/422 and bearer/cookie security from `authMiddleware()`. Triggers: `generate.openapi`, `openApiGeneratorCommand`, `buildOpenApiDocument`, `getDevelopmentOpenApiDocument`, `generate.postman`, `openApiToPostmanCollection`, `getDevelopmentPostmanCollection`, `responseSchema`, `--include-pages`, `/__warlock/docs`; "OpenAPI", "Swagger", "API docs", "import my API into Postman or Insomnia", "document my routes". Skip: declaring response types on a handler — the `create-controller` topic; the devtools dashboard — the `warlock-js-devtools` skill; listing routes — the `warlock-routes` topic.'
|
|
2514
2582
|
---
|
|
2515
2583
|
|
|
2516
2584
|
# Warlock — generate an OpenAPI document
|
|
@@ -2684,7 +2752,7 @@ const { document, warnings } = buildOpenApiDocument(router.list(), {
|
|
|
2684
2752
|
- The `warlock-routes` topic — list the routes the document is built from.
|
|
2685
2753
|
|
|
2686
2754
|
|
|
2687
|
-
## hash-password `@warlock.js/core/hash-password/SKILL.md`
|
|
2755
|
+
## hash-password `@warlock.js/core/skills/hash-password/SKILL.md`
|
|
2688
2756
|
|
|
2689
2757
|
---
|
|
2690
2758
|
name: hash-password
|
|
@@ -2871,7 +2939,7 @@ There is no `warlock add` feature for password hashing — `bcryptjs` is a plain
|
|
|
2871
2939
|
- The `warlock-conventions` topic — service layering, where the password boundary should sit.
|
|
2872
2940
|
|
|
2873
2941
|
|
|
2874
|
-
## health-checks `@warlock.js/core/health-checks/SKILL.md`
|
|
2942
|
+
## health-checks `@warlock.js/core/skills/health-checks/SKILL.md`
|
|
2875
2943
|
|
|
2876
2944
|
---
|
|
2877
2945
|
name: health-checks
|
|
@@ -3013,7 +3081,7 @@ For an even smoother handoff, give the load balancer time to observe the 503 bef
|
|
|
3013
3081
|
- The `use-middleware` topic — maintenance mode and other built-in middleware.
|
|
3014
3082
|
|
|
3015
3083
|
|
|
3016
|
-
## lower-stage3-decorators `@warlock.js/core/lower-stage3-decorators/SKILL.md`
|
|
3084
|
+
## lower-stage3-decorators `@warlock.js/core/skills/lower-stage3-decorators/SKILL.md`
|
|
3017
3085
|
|
|
3018
3086
|
---
|
|
3019
3087
|
name: lower-stage3-decorators
|
|
@@ -3073,7 +3141,7 @@ It's the **same esbuild transform the production `tsx`/build path uses**, so a f
|
|
|
3073
3141
|
- The `write-migration` topic of the `warlock-js-cascade` skill — the decorated models this plugin lets you load.
|
|
3074
3142
|
|
|
3075
3143
|
|
|
3076
|
-
## make-endpoint `@warlock.js/core/make-endpoint/SKILL.md`
|
|
3144
|
+
## make-endpoint `@warlock.js/core/skills/make-endpoint/SKILL.md`
|
|
3077
3145
|
|
|
3078
3146
|
---
|
|
3079
3147
|
name: make-endpoint
|
|
@@ -3187,7 +3255,7 @@ Every `generate.*` command, `make`, and `add` take both. `--dry-run` writes (and
|
|
|
3187
3255
|
- The `generate-openapi` topic — what `responseSchema` documents.
|
|
3188
3256
|
|
|
3189
3257
|
|
|
3190
|
-
## model-factories `@warlock.js/core/model-factories/SKILL.md`
|
|
3258
|
+
## model-factories `@warlock.js/core/skills/model-factories/SKILL.md`
|
|
3191
3259
|
|
|
3192
3260
|
---
|
|
3193
3261
|
name: model-factories
|
|
@@ -3283,7 +3351,7 @@ it("lists users", async () => {
|
|
|
3283
3351
|
- The `write-seeder` topic — seeding a development database.
|
|
3284
3352
|
|
|
3285
3353
|
|
|
3286
|
-
## process-image `@warlock.js/core/process-image/SKILL.md`
|
|
3354
|
+
## process-image `@warlock.js/core/skills/process-image/SKILL.md`
|
|
3287
3355
|
|
|
3288
3356
|
---
|
|
3289
3357
|
name: process-image
|
|
@@ -3460,7 +3528,7 @@ See the `upload-file` topic for the multipart entry point and the `store-file` t
|
|
|
3460
3528
|
- The `warlock-conventions` topic — where image-processing services live.
|
|
3461
3529
|
|
|
3462
3530
|
|
|
3463
|
-
## register-route `@warlock.js/core/register-route/SKILL.md`
|
|
3531
|
+
## register-route `@warlock.js/core/skills/register-route/SKILL.md`
|
|
3464
3532
|
|
|
3465
3533
|
---
|
|
3466
3534
|
name: register-route
|
|
@@ -3745,7 +3813,170 @@ router.get("/webhooks/status", webhookStatusController, { rateLimit: false });
|
|
|
3745
3813
|
- The `warlock-conventions` topic — module layout, the `guarded` convention, path aliases.
|
|
3746
3814
|
|
|
3747
3815
|
|
|
3748
|
-
##
|
|
3816
|
+
## report-framework-issue `@warlock.js/core/skills/report-framework-issue/SKILL.md`
|
|
3817
|
+
|
|
3818
|
+
---
|
|
3819
|
+
name: report-framework-issue
|
|
3820
|
+
description: "Report a confirmed Warlock.js framework bug or missing capability. Read when behavior contradicts the installed docs, a crash appears to originate in @warlock.js packages, or no documented API meets a requirement; covers minimal reproduction, duplicate searches, sanitized warlock issue output and user approval before filing."
|
|
3821
|
+
---
|
|
3822
|
+
|
|
3823
|
+
# Report a Warlock.js framework issue
|
|
3824
|
+
|
|
3825
|
+
Use this topic when behavior contradicts the installed version's docs or skills,
|
|
3826
|
+
a crash originates inside `@warlock.js/*`, or a needed framework capability is
|
|
3827
|
+
missing. Framework reports belong at <https://github.com/warlockjs/framework>.
|
|
3828
|
+
|
|
3829
|
+
## Confirm and search first
|
|
3830
|
+
|
|
3831
|
+
1. Reduce the problem to a minimal reproduction in a clean, generic app. Isolate
|
|
3832
|
+
application logic, third-party packages and configuration mistakes; a stack
|
|
3833
|
+
frame in the framework alone does not prove a framework bug.
|
|
3834
|
+
2. Read the **installed version's** package `CHANGELOG.md` and skills. Confirm
|
|
3835
|
+
that the documented API exists in that version and check whether a later
|
|
3836
|
+
release already addresses it. For a feature, describe the missing capability
|
|
3837
|
+
and why the documented APIs or an app-level workaround are insufficient.
|
|
3838
|
+
3. Run `warlock doctor --json` (see `warlock-doctor.md`). Fix app/environment
|
|
3839
|
+
findings first. If boot fails, retain only the sanitized failure; `warlock
|
|
3840
|
+
issue` itself does not boot the app.
|
|
3841
|
+
4. Search existing reports, including closed issues, using distinctive public
|
|
3842
|
+
terms. If a matching issue exists, show its link and help draft a useful
|
|
3843
|
+
follow-up instead of opening a duplicate. Ask before posting that follow-up.
|
|
3844
|
+
|
|
3845
|
+
```bash
|
|
3846
|
+
gh issue list -R warlockjs/framework --state all --search "public error or capability"
|
|
3847
|
+
```
|
|
3848
|
+
|
|
3849
|
+
Without GitHub CLI, use
|
|
3850
|
+
<https://github.com/warlockjs/framework/issues?q=is%3Aissue> and enter those terms.
|
|
3851
|
+
|
|
3852
|
+
## Collect and protect
|
|
3853
|
+
|
|
3854
|
+
```bash
|
|
3855
|
+
warlock issue --type bug --title "Public description of the failure"
|
|
3856
|
+
warlock issue --type feature --title "Public description of the capability" --json
|
|
3857
|
+
```
|
|
3858
|
+
|
|
3859
|
+
Collect affected package names and **installed versions**, Node and package
|
|
3860
|
+
manager versions, OS/architecture, TypeScript version, the reviewed `warlock
|
|
3861
|
+
issue` environment output, a minimal reproduction with exact steps, expected
|
|
3862
|
+
versus actual behavior, and relevant sanitized logs / `warlock doctor --json`
|
|
3863
|
+
output. If a tool cannot run or there are no relevant logs, explain why.
|
|
3864
|
+
|
|
3865
|
+
**Never paste secrets, tokens, `.env` contents, customer data, proprietary code or
|
|
3866
|
+
private app names** into titles, bodies, logs, screenshots, repro repositories,
|
|
3867
|
+
search queries or URLs. Replace the original app with a minimal generic repro.
|
|
3868
|
+
Review even generated environment output and stack traces; remove local paths,
|
|
3869
|
+
hostnames and identifying details. The command reads installed package metadata
|
|
3870
|
+
and a static config summary; it never reads `.env` or executes the app/config.
|
|
3871
|
+
Do not attach the app's full config or diagnostic report without sanitizing it.
|
|
3872
|
+
|
|
3873
|
+
## Draft and get consent
|
|
3874
|
+
|
|
3875
|
+
Choose one template below, replace every prompt with concrete evidence, and
|
|
3876
|
+
write the sanitized body to a local UTF-8 file such as `framework-issue.md`.
|
|
3877
|
+
**Always show the complete drafted title and body to the user and explicitly ask
|
|
3878
|
+
before filing.** Generating a draft or URL is not consent to publish. If the user
|
|
3879
|
+
requests edits, show the revised draft and obtain approval for that version.
|
|
3880
|
+
|
|
3881
|
+
### Bug body
|
|
3882
|
+
|
|
3883
|
+
```markdown
|
|
3884
|
+
### Summary
|
|
3885
|
+
|
|
3886
|
+
Public description of the framework failure and affected packages.
|
|
3887
|
+
|
|
3888
|
+
### Environment / warlock issue output
|
|
3889
|
+
|
|
3890
|
+
Reviewed environment output: installed @warlock.js package versions, Node,
|
|
3891
|
+
package manager + version, OS/arch, TypeScript, static config summary.
|
|
3892
|
+
|
|
3893
|
+
### Minimal reproduction
|
|
3894
|
+
|
|
3895
|
+
Public minimal code or repro link, setup commands and exact steps.
|
|
3896
|
+
|
|
3897
|
+
### Expected behavior
|
|
3898
|
+
|
|
3899
|
+
What should happen, with the installed version's docs/skills reference.
|
|
3900
|
+
|
|
3901
|
+
### Actual / current behavior
|
|
3902
|
+
|
|
3903
|
+
What happens instead, including the error and impact.
|
|
3904
|
+
|
|
3905
|
+
### Sanitized logs / doctor output
|
|
3906
|
+
|
|
3907
|
+
Relevant logs and warlock doctor --json, or why unavailable / not applicable.
|
|
3908
|
+
|
|
3909
|
+
### Checks
|
|
3910
|
+
|
|
3911
|
+
- [ ] Searched existing issues and checked installed-version CHANGELOG and skills.
|
|
3912
|
+
- [ ] Removed secrets, tokens, .env, customer data, proprietary code and private app names.
|
|
3913
|
+
- [ ] User reviewed this complete draft and approved filing.
|
|
3914
|
+
```
|
|
3915
|
+
|
|
3916
|
+
### Feature request body
|
|
3917
|
+
|
|
3918
|
+
```markdown
|
|
3919
|
+
### Problem / use case
|
|
3920
|
+
|
|
3921
|
+
Public description of the missing framework capability and affected packages.
|
|
3922
|
+
|
|
3923
|
+
### Environment / warlock issue output
|
|
3924
|
+
|
|
3925
|
+
Reviewed environment output: installed @warlock.js package versions, Node,
|
|
3926
|
+
package manager + version, OS/arch, TypeScript, static config summary.
|
|
3927
|
+
|
|
3928
|
+
### Minimal reproduction
|
|
3929
|
+
|
|
3930
|
+
Minimal public example of the capability that cannot currently be expressed.
|
|
3931
|
+
|
|
3932
|
+
### Proposed behavior
|
|
3933
|
+
|
|
3934
|
+
Desired API/behavior, with an example and why it belongs in the framework.
|
|
3935
|
+
|
|
3936
|
+
### Actual / current behavior
|
|
3937
|
+
|
|
3938
|
+
Current limitation and relevant installed-version docs/skills.
|
|
3939
|
+
|
|
3940
|
+
### Alternatives considered
|
|
3941
|
+
|
|
3942
|
+
Existing APIs, app-level workarounds and their limitations.
|
|
3943
|
+
|
|
3944
|
+
### Sanitized logs / doctor output
|
|
3945
|
+
|
|
3946
|
+
Relevant logs and warlock doctor --json, or why unavailable / not applicable.
|
|
3947
|
+
|
|
3948
|
+
### Checks
|
|
3949
|
+
|
|
3950
|
+
- [ ] Searched existing issues and checked installed-version CHANGELOG and skills.
|
|
3951
|
+
- [ ] Removed secrets, tokens, .env, customer data, proprietary code and private app names.
|
|
3952
|
+
- [ ] User reviewed this complete draft and approved filing.
|
|
3953
|
+
```
|
|
3954
|
+
|
|
3955
|
+
Only check a box after completing that step, including obtaining consent.
|
|
3956
|
+
|
|
3957
|
+
## File the approved draft
|
|
3958
|
+
|
|
3959
|
+
Check `gh --version` and `gh auth status --hostname github.com`. If GitHub CLI is
|
|
3960
|
+
available and authenticated, **after approval** run:
|
|
3961
|
+
|
|
3962
|
+
```bash
|
|
3963
|
+
gh issue create -R warlockjs/framework --title "Approved public title" --body-file framework-issue.md
|
|
3964
|
+
```
|
|
3965
|
+
|
|
3966
|
+
Return the created issue's link. If GitHub CLI is unavailable or unauthenticated,
|
|
3967
|
+
give the user the pre-filled new-issue URL printed by `warlock issue` together
|
|
3968
|
+
with the approved body. The URL selects `bug.yml` or `feature.yml` and prefills
|
|
3969
|
+
the environment field; the user must complete the remaining form fields. URLs
|
|
3970
|
+
are capped at 7,500 characters and may include a truncation note: restore the
|
|
3971
|
+
remaining reviewed output manually. Never claim the issue was filed from merely
|
|
3972
|
+
printing or opening a URL. `warlock issue` never sends anything itself.
|
|
3973
|
+
|
|
3974
|
+
GitHub CLI flags: [list](https://cli.github.com/manual/gh_issue_list),
|
|
3975
|
+
[create](https://cli.github.com/manual/gh_issue_create),
|
|
3976
|
+
[authentication](https://cli.github.com/manual/gh_auth_status).
|
|
3977
|
+
|
|
3978
|
+
|
|
3979
|
+
## request-memo `@warlock.js/core/skills/request-memo/SKILL.md`
|
|
3749
3980
|
|
|
3750
3981
|
---
|
|
3751
3982
|
name: request-memo
|
|
@@ -3891,7 +4122,7 @@ Reusing one key for different result types is a caller bug: TypeScript cannot co
|
|
|
3891
4122
|
- The `create-controller` topic — consuming request-scoped values from controllers.
|
|
3892
4123
|
|
|
3893
4124
|
|
|
3894
|
-
## request-tracing `@warlock.js/core/request-tracing/SKILL.md`
|
|
4125
|
+
## request-tracing `@warlock.js/core/skills/request-tracing/SKILL.md`
|
|
3895
4126
|
|
|
3896
4127
|
---
|
|
3897
4128
|
name: request-tracing
|
|
@@ -4129,7 +4360,7 @@ export default httpConfig;
|
|
|
4129
4360
|
- The `logger-basics` topic of the `warlock-js-logger` skill — structured logging; tracing hooks are the place to bridge phase timing into your log channel.
|
|
4130
4361
|
|
|
4131
4362
|
|
|
4132
|
-
## resolve-path `@warlock.js/core/resolve-path/SKILL.md`
|
|
4363
|
+
## resolve-path `@warlock.js/core/skills/resolve-path/SKILL.md`
|
|
4133
4364
|
|
|
4134
4365
|
---
|
|
4135
4366
|
name: resolve-path
|
|
@@ -4304,7 +4535,7 @@ If you find yourself reaching for `path.join(process.cwd(), ...)` — that's a s
|
|
|
4304
4535
|
- The `upload-file` topic — the `UploadedFile` shape that pairs with `uploadsPath`.
|
|
4305
4536
|
|
|
4306
4537
|
|
|
4307
|
-
## retry-operation `@warlock.js/core/retry-operation/SKILL.md`
|
|
4538
|
+
## retry-operation `@warlock.js/core/skills/retry-operation/SKILL.md`
|
|
4308
4539
|
|
|
4309
4540
|
---
|
|
4310
4541
|
name: retry-operation
|
|
@@ -4426,7 +4657,7 @@ const result = await measure("publish-event", () =>
|
|
|
4426
4657
|
- The `write-use-case` topic — the use-case `retry` option.
|
|
4427
4658
|
|
|
4428
4659
|
|
|
4429
|
-
## run-app `@warlock.js/core/run-app/SKILL.md`
|
|
4660
|
+
## run-app `@warlock.js/core/skills/run-app/SKILL.md`
|
|
4430
4661
|
|
|
4431
4662
|
---
|
|
4432
4663
|
name: run-app
|
|
@@ -5146,7 +5377,7 @@ directly. Regression tests cover both paths without inherited loader hooks,
|
|
|
5146
5377
|
including configured declaration roots, source updates and deleted declarations.
|
|
5147
5378
|
|
|
5148
5379
|
|
|
5149
|
-
## send-mail `@warlock.js/core/send-mail/SKILL.md`
|
|
5380
|
+
## send-mail `@warlock.js/core/skills/send-mail/SKILL.md`
|
|
5150
5381
|
|
|
5151
5382
|
---
|
|
5152
5383
|
name: send-mail
|
|
@@ -5552,7 +5783,7 @@ await Mail.to(user.email)
|
|
|
5552
5783
|
- The `warlock-conventions` topic — where mail-sending services live.
|
|
5553
5784
|
|
|
5554
5785
|
|
|
5555
|
-
## send-response `@warlock.js/core/send-response/SKILL.md`
|
|
5786
|
+
## send-response `@warlock.js/core/skills/send-response/SKILL.md`
|
|
5556
5787
|
|
|
5557
5788
|
---
|
|
5558
5789
|
name: send-response
|
|
@@ -6038,8 +6269,35 @@ export function requireProduct<T>(product: T | null | undefined): T {
|
|
|
6038
6269
|
}
|
|
6039
6270
|
```
|
|
6040
6271
|
|
|
6272
|
+
## Format every JSON error response
|
|
6273
|
+
|
|
6274
|
+
`http.errorMapper` classifies thrown non-`HttpError` errors as `{ status, message?, payload? }`. It does not see existing `HttpError` subclasses, returned validation errors, helper responses, unmatched routes, or global rate-limit failures.
|
|
6041
6275
|
|
|
6042
|
-
|
|
6276
|
+
Use `http.errorResponse` when the application needs one JSON error envelope across those paths:
|
|
6277
|
+
|
|
6278
|
+
```ts title="src/config/http.ts"
|
|
6279
|
+
import type { HttpConfigurations } from "@warlock.js/core";
|
|
6280
|
+
|
|
6281
|
+
export default {
|
|
6282
|
+
errorMapper: () => ({ status: 500 }),
|
|
6283
|
+
errorResponse({ status, requestId }) {
|
|
6284
|
+
return {
|
|
6285
|
+
error: {
|
|
6286
|
+
code: status >= 500 ? "serverError" : `http${status}`,
|
|
6287
|
+
message: status >= 500 ? "Internal server error." : "Request failed.",
|
|
6288
|
+
},
|
|
6289
|
+
requestId,
|
|
6290
|
+
};
|
|
6291
|
+
},
|
|
6292
|
+
} satisfies HttpConfigurations;
|
|
6293
|
+
```
|
|
6294
|
+
|
|
6295
|
+
The synchronous formatter receives `HttpErrorResponseContext`: `{ status: number, body: unknown, requestId: string }`. Narrow `body` before reading fields; it is the parsed, serialized JSON body. Return a JSON-serializable object or `undefined` to keep the original. The formatter changes only the body, preserving the HTTP status and headers except for recalculated content length, a `private, no-store` cache policy, and the correlation header. If it throws or cannot serialize its result, core logs the formatter error and retains the original body.
|
|
6296
|
+
|
|
6297
|
+
The hook covers status 400–599 with `application/json` or an `application/*+json` content type, including Fastify parsing errors, unmatched-route 404s, validation 422s, rate-limit 429s, and 500s. Warlock responses use the ID already stamped from `request.id`. Before Warlock creates a Request, the formatter receives Fastify's `request.id` and echoes that same value under `http.requestId.header` (default `X-Request-Id`). Setting `http.requestId.enabled: false` suppresses that header; without a stamped Warlock ID, the formatter falls back to Fastify's request ID even for routed responses. Keep request-ID headers enabled when the body must correlate with Warlock request logs. HTML pages, files, raw text, streams, and errors after headers have been sent are not reformatted. With no formatter configured, existing response shapes are unchanged.
|
|
6298
|
+
|
|
6299
|
+
|
|
6300
|
+
## store-file `@warlock.js/core/skills/store-file/SKILL.md`
|
|
6043
6301
|
|
|
6044
6302
|
---
|
|
6045
6303
|
name: store-file
|
|
@@ -6487,7 +6745,7 @@ Client `PUT`s the bytes straight to R2 — your server never sees them.
|
|
|
6487
6745
|
- The `send-response` topic — `response.sendFile(absPath)` for serving local files.
|
|
6488
6746
|
|
|
6489
6747
|
|
|
6490
|
-
## store-secrets `@warlock.js/core/store-secrets/SKILL.md`
|
|
6748
|
+
## store-secrets `@warlock.js/core/skills/store-secrets/SKILL.md`
|
|
6491
6749
|
|
|
6492
6750
|
---
|
|
6493
6751
|
name: store-secrets
|
|
@@ -6651,7 +6909,7 @@ The normal test harness still installs `secretsFake`; explicit `backend`
|
|
|
6651
6909
|
instances and that fake continue to bypass configured backend selection.
|
|
6652
6910
|
|
|
6653
6911
|
|
|
6654
|
-
## test-browser `@warlock.js/core/test-browser/SKILL.md`
|
|
6912
|
+
## test-browser `@warlock.js/core/skills/test-browser/SKILL.md`
|
|
6655
6913
|
|
|
6656
6914
|
---
|
|
6657
6915
|
name: test-browser
|
|
@@ -6758,6 +7016,7 @@ port-file handshake above when the app supports binding `0` itself.
|
|
|
6758
7016
|
document. Selector helpers do not enter frames or closed shadow roots.
|
|
6759
7017
|
|
|
6760
7018
|
Use `--browser /path/to/chrome` or `WARLOCK_E2E_BROWSER` if discovery fails.
|
|
7019
|
+
Set `browser.startupTimeoutMs` (default 30 seconds) when the browser is slow to start, for example on shared CI runners.
|
|
6761
7020
|
`browser: { args: ["--no-sandbox"] }` is an explicit option for controlled root
|
|
6762
7021
|
containers; it is not a default. On Windows, command arrays should invoke JS tools
|
|
6763
7022
|
through `process.execPath`, avoiding `.cmd` executables that require a shell.
|
|
@@ -6774,7 +7033,7 @@ if ownership verification fails and reports the failure in evidence. Do not add
|
|
|
6774
7033
|
process-name or port-based kills to a spec.
|
|
6775
7034
|
|
|
6776
7035
|
|
|
6777
|
-
## test-fakes `@warlock.js/core/test-fakes/SKILL.md`
|
|
7036
|
+
## test-fakes `@warlock.js/core/skills/test-fakes/SKILL.md`
|
|
6778
7037
|
|
|
6779
7038
|
---
|
|
6780
7039
|
name: test-fakes
|
|
@@ -6903,7 +7162,7 @@ An unknown fake name or a non-boolean value fails setup with the list of known f
|
|
|
6903
7162
|
- The `model-factories` topic — deterministic fixtures.
|
|
6904
7163
|
|
|
6905
7164
|
|
|
6906
|
-
## test-http `@warlock.js/core/test-http/SKILL.md`
|
|
7165
|
+
## test-http `@warlock.js/core/skills/test-http/SKILL.md`
|
|
6907
7166
|
|
|
6908
7167
|
---
|
|
6909
7168
|
name: test-http
|
|
@@ -7367,7 +7626,7 @@ This is fine for normal test flow. It bites when you're inside a transaction the
|
|
|
7367
7626
|
- The `write-cli-command` topic — `warlock add test` scaffolds both global + worker setup files.
|
|
7368
7627
|
|
|
7369
7628
|
|
|
7370
|
-
## test-service `@warlock.js/core/test-service/SKILL.md`
|
|
7629
|
+
## test-service `@warlock.js/core/skills/test-service/SKILL.md`
|
|
7371
7630
|
|
|
7372
7631
|
---
|
|
7373
7632
|
name: test-service
|
|
@@ -7817,7 +8076,7 @@ setupTest({ importModule: (file) => import(file) });
|
|
|
7817
8076
|
The generated `src/test-setup.ts` already does this. Without it, `setupTest()` under Vitest warns once.
|
|
7818
8077
|
|
|
7819
8078
|
|
|
7820
|
-
## update-packages `@warlock.js/core/update-packages/SKILL.md`
|
|
8079
|
+
## update-packages `@warlock.js/core/skills/update-packages/SKILL.md`
|
|
7821
8080
|
|
|
7822
8081
|
---
|
|
7823
8082
|
name: update-packages
|
|
@@ -7965,7 +8224,7 @@ Two small zero-dependency utilities back the tooling and are exported from `@war
|
|
|
7965
8224
|
- The `configure-app` topic — `warlock.config.ts` shape and `defineConfig`.
|
|
7966
8225
|
|
|
7967
8226
|
|
|
7968
|
-
## upgrade-from-5-29 `@warlock.js/core/upgrade-from-5-29/SKILL.md`
|
|
8227
|
+
## upgrade-from-5-29 `@warlock.js/core/skills/upgrade-from-5-29/SKILL.md`
|
|
7969
8228
|
|
|
7970
8229
|
---
|
|
7971
8230
|
name: upgrade-from-5-29
|
|
@@ -8445,6 +8704,10 @@ It replaces standard scripts/dependencies, pins TypeScript 7.0.2, updates genera
|
|
|
8445
8704
|
editor settings, removes `healthCheckers.eslint` and selects Oxlint. A generated
|
|
8446
8705
|
`.prettierignore` becomes `.oxfmtignore`; Oxfmt scripts read it explicitly.
|
|
8447
8706
|
|
|
8707
|
+
Generated migration configs enable `typescript/no-explicit-any`, `curly`, and
|
|
8708
|
+
`no-console` as errors, matching new apps. Fix those diagnostics before running
|
|
8709
|
+
`npm run lint:check` and `npx warlock check` again.
|
|
8710
|
+
|
|
8448
8711
|
The `oxc-toolchain` codemod also updates generated VS Code settings and literal
|
|
8449
8712
|
ESLint/Oxlint health-check switches. Custom editor settings, checker arrays,
|
|
8450
8713
|
computed options and nonstandard scripts require review. Oxc diagnostics keep
|
|
@@ -8501,7 +8764,7 @@ marker determines the installer: `package-lock.json` plus `pnpm-workspace.yaml`
|
|
|
8501
8764
|
without `pnpm-lock.yaml` now produces `npm install`.
|
|
8502
8765
|
|
|
8503
8766
|
|
|
8504
|
-
## upload-file `@warlock.js/core/upload-file/SKILL.md`
|
|
8767
|
+
## upload-file `@warlock.js/core/skills/upload-file/SKILL.md`
|
|
8505
8768
|
|
|
8506
8769
|
---
|
|
8507
8770
|
name: upload-file
|
|
@@ -8814,7 +9077,7 @@ The reverse direction — sending a stored file back via `response.sendFile(...)
|
|
|
8814
9077
|
- The `warlock-conventions` topic — storage configuration and driver selection.
|
|
8815
9078
|
|
|
8816
9079
|
|
|
8817
|
-
## use-app-context `@warlock.js/core/use-app-context/SKILL.md`
|
|
9080
|
+
## use-app-context `@warlock.js/core/skills/use-app-context/SKILL.md`
|
|
8818
9081
|
|
|
8819
9082
|
---
|
|
8820
9083
|
name: use-app-context
|
|
@@ -9125,7 +9388,7 @@ cors: {
|
|
|
9125
9388
|
- The `warlock-conventions` topic — module layout, where paths point to.
|
|
9126
9389
|
|
|
9127
9390
|
|
|
9128
|
-
## use-localization `@warlock.js/core/use-localization/SKILL.md`
|
|
9391
|
+
## use-localization `@warlock.js/core/skills/use-localization/SKILL.md`
|
|
9129
9392
|
|
|
9130
9393
|
---
|
|
9131
9394
|
name: use-localization
|
|
@@ -9467,7 +9730,7 @@ This produces `account.title` and `account.actions.save`. Keep every leaf comple
|
|
|
9467
9730
|
When a route-locales snapshot applies, `t()` (through the request binding) and `request.transFrom(locale, key, placeholders?)` resolve through it; without one, they retain the existing global-registry behavior. The underlying `transFromKeywords(locale, keywords, key, placeholders?, converter?)` is supplied by `@mongez/localization` 3.5.0. Error pages rebind to their own snapshot, while framework fallback uses the app/root snapshot. Development HMR add/edit/delete publishes a new snapshot, and the snapshot revision keeps page-cache entries from reusing old JSON. Generated `.warlock` typings contain the flattened route keys; do not maintain a second handwritten key union.
|
|
9468
9731
|
|
|
9469
9732
|
|
|
9470
|
-
## use-middleware `@warlock.js/core/use-middleware/SKILL.md`
|
|
9733
|
+
## use-middleware `@warlock.js/core/skills/use-middleware/SKILL.md`
|
|
9471
9734
|
|
|
9472
9735
|
---
|
|
9473
9736
|
name: use-middleware
|
|
@@ -9765,7 +10028,7 @@ router.post("/private/preview", ({ response }) => response.success({ ready: true
|
|
|
9765
10028
|
```
|
|
9766
10029
|
|
|
9767
10030
|
|
|
9768
|
-
## use-model-transformers `@warlock.js/core/use-model-transformers/SKILL.md`
|
|
10031
|
+
## use-model-transformers `@warlock.js/core/skills/use-model-transformers/SKILL.md`
|
|
9769
10032
|
|
|
9770
10033
|
---
|
|
9771
10034
|
name: use-model-transformers
|
|
@@ -9998,7 +10261,7 @@ Rule of thumb: transformers are for **pure, deterministic** transforms of the ro
|
|
|
9998
10261
|
- The `warlock-conventions` topic — schema files live in `src/app/<module>/models/<entity>/<entity>.model.ts`.
|
|
9999
10262
|
|
|
10000
10263
|
|
|
10001
|
-
## use-repository `@warlock.js/core/use-repository/SKILL.md`
|
|
10264
|
+
## use-repository `@warlock.js/core/skills/use-repository/SKILL.md`
|
|
10002
10265
|
|
|
10003
10266
|
---
|
|
10004
10267
|
name: use-repository
|
|
@@ -10432,7 +10695,7 @@ The third arg is a context object — `{ allValues, dateFormat, ... }` — for f
|
|
|
10432
10695
|
- The `warlock-conventions` topic — controller → service → repository → model layering.
|
|
10433
10696
|
|
|
10434
10697
|
|
|
10435
|
-
## use-request-locals `@warlock.js/core/use-request-locals/SKILL.md`
|
|
10698
|
+
## use-request-locals `@warlock.js/core/skills/use-request-locals/SKILL.md`
|
|
10436
10699
|
|
|
10437
10700
|
---
|
|
10438
10701
|
name: use-request-locals
|
|
@@ -10603,7 +10866,7 @@ Writing `request.locals.organization` does not affect `request.all()`, `request.
|
|
|
10603
10866
|
- The `create-controller` topic — reading locals in downstream controllers.
|
|
10604
10867
|
|
|
10605
10868
|
|
|
10606
|
-
## validate-input `@warlock.js/core/validate-input/SKILL.md`
|
|
10869
|
+
## validate-input `@warlock.js/core/skills/validate-input/SKILL.md`
|
|
10607
10870
|
|
|
10608
10871
|
---
|
|
10609
10872
|
name: validate-input
|
|
@@ -10961,7 +11224,7 @@ updateProductController.validation = {
|
|
|
10961
11224
|
- The `warlock-conventions` topic — `Request<Schema>` type-alias convention.
|
|
10962
11225
|
|
|
10963
11226
|
|
|
10964
|
-
## warlock-agents-md `@warlock.js/core/warlock-agents-md/SKILL.md`
|
|
11227
|
+
## warlock-agents-md `@warlock.js/core/skills/warlock-agents-md/SKILL.md`
|
|
10965
11228
|
|
|
10966
11229
|
---
|
|
10967
11230
|
name: warlock-agents-md
|
|
@@ -11061,7 +11324,7 @@ refresher.dispose();
|
|
|
11061
11324
|
- The `warlock-conventions` topic — the conventions listed in the section.
|
|
11062
11325
|
|
|
11063
11326
|
|
|
11064
|
-
## warlock-board `@warlock.js/core/warlock-board/SKILL.md`
|
|
11327
|
+
## warlock-board `@warlock.js/core/skills/warlock-board/SKILL.md`
|
|
11065
11328
|
|
|
11066
11329
|
---
|
|
11067
11330
|
name: warlock-board
|
|
@@ -11188,7 +11451,7 @@ const { messages } = await watchBoard({ agent: "implementer", timeoutMs: 30 * 60
|
|
|
11188
11451
|
- The `warlock-inspect` topic — the app's facts as JSON before you change it.
|
|
11189
11452
|
|
|
11190
11453
|
|
|
11191
|
-
## warlock-check `@warlock.js/core/warlock-check/SKILL.md`
|
|
11454
|
+
## warlock-check `@warlock.js/core/skills/warlock-check/SKILL.md`
|
|
11192
11455
|
|
|
11193
11456
|
---
|
|
11194
11457
|
name: warlock-check
|
|
@@ -11319,7 +11582,7 @@ const types = runTypecheck({ files: ["src/app/posts/services/publish.service.ts"
|
|
|
11319
11582
|
|
|
11320
11583
|
## See also
|
|
11321
11584
|
|
|
11322
|
-
- `report-framework-issue
|
|
11585
|
+
- the `report-framework-issue` topic — confirm a framework bug or missing capability, collect `warlock issue` output, and get the user's approval before filing.
|
|
11323
11586
|
- The `warlock-doctor` topic — boot-time diagnostics; `doctor --json` uses the same codes and fields.
|
|
11324
11587
|
- The `warlock-inspect` topic — the app's routes, models and config as JSON.
|
|
11325
11588
|
- The `warlock-conventions` topic — the rules behind `WL9001`–`WL9012`, with the fix for each.
|
|
@@ -11329,7 +11592,7 @@ Migrate lint and format tooling with
|
|
|
11329
11592
|
and work through the manual-review list. Use `--lint=oxc` for new apps.
|
|
11330
11593
|
|
|
11331
11594
|
|
|
11332
|
-
## warlock-conventions `@warlock.js/core/warlock-conventions/SKILL.md`
|
|
11595
|
+
## warlock-conventions `@warlock.js/core/skills/warlock-conventions/SKILL.md`
|
|
11333
11596
|
|
|
11334
11597
|
---
|
|
11335
11598
|
name: warlock-conventions
|
|
@@ -11585,7 +11848,7 @@ The comment covers the codes it names on its own line and the next; with no code
|
|
|
11585
11848
|
- The `send-response` topic — the full Response helper surface.
|
|
11586
11849
|
|
|
11587
11850
|
|
|
11588
|
-
## warlock-doctor `@warlock.js/core/warlock-doctor/SKILL.md`
|
|
11851
|
+
## warlock-doctor `@warlock.js/core/skills/warlock-doctor/SKILL.md`
|
|
11589
11852
|
|
|
11590
11853
|
---
|
|
11591
11854
|
name: warlock-doctor
|
|
@@ -11768,7 +12031,7 @@ formatting. Oxlint/Oxfmt are the only supported tools in 5.34.0. Use the
|
|
|
11768
12031
|
Migrate with `npx warlock upgrade --from 5.32 --to 5.33.0` (preview with `--dry-run`).
|
|
11769
12032
|
|
|
11770
12033
|
|
|
11771
|
-
## warlock-inspect `@warlock.js/core/warlock-inspect/SKILL.md`
|
|
12034
|
+
## warlock-inspect `@warlock.js/core/skills/warlock-inspect/SKILL.md`
|
|
11772
12035
|
|
|
11773
12036
|
---
|
|
11774
12037
|
name: warlock-inspect
|
|
@@ -11906,7 +12169,7 @@ const valid = new Ajv2020({ strict: false }).validate(INSPECT_REPORT_JSON_SCHEMA
|
|
|
11906
12169
|
- The `generate-openapi` topic — the same route schemas as an OpenAPI document.
|
|
11907
12170
|
|
|
11908
12171
|
|
|
11909
|
-
## warlock-mcp `@warlock.js/core/warlock-mcp/SKILL.md`
|
|
12172
|
+
## warlock-mcp `@warlock.js/core/skills/warlock-mcp/SKILL.md`
|
|
11910
12173
|
|
|
11911
12174
|
---
|
|
11912
12175
|
name: warlock-mcp
|
|
@@ -12030,7 +12293,7 @@ await server.close();
|
|
|
12030
12293
|
- The `expose-as-mcp-server` topic of @warlock.js/ai-tools — the transport underneath.
|
|
12031
12294
|
|
|
12032
12295
|
|
|
12033
|
-
## warlock-routes `@warlock.js/core/warlock-routes/SKILL.md`
|
|
12296
|
+
## warlock-routes `@warlock.js/core/skills/warlock-routes/SKILL.md`
|
|
12034
12297
|
|
|
12035
12298
|
---
|
|
12036
12299
|
name: warlock-routes
|
|
@@ -12170,11 +12433,11 @@ and exits non-zero.
|
|
|
12170
12433
|
- The `write-cli-command` topic — the command + `preload` shape `routesCommand` is built from.
|
|
12171
12434
|
|
|
12172
12435
|
|
|
12173
|
-
## warlock-trace `@warlock.js/core/warlock-trace/SKILL.md`
|
|
12436
|
+
## warlock-trace `@warlock.js/core/skills/warlock-trace/SKILL.md`
|
|
12174
12437
|
|
|
12175
12438
|
---
|
|
12176
12439
|
name: warlock-trace
|
|
12177
|
-
description: 'Verify runtime behaviour without a browser: `warlock trace <method> <url> [--body json|@file] [--header k:v] [--json]` sends one request to the running `warlock dev` server and prints what devtools recorded for it — middleware chain with timings, validation result and errors, handler time, queries with N+1 flags, logs, cache operations, captured mails, the response and timings — as a versioned report (`schemaVersion: 1`); `traceRequest()` returns the same object. Triggers: `warlock trace`, `traceRequest`, `TraceReport`, `buildTraceReport`, `x-request-id`, `.warlock/dev-server.json`, `WL8008`, `WL8009`, `WL5004`, `--id-header`; "did validation pass for this request", "which queries does this endpoint run", "is there an N+1 on this route", "what middleware runs on this route", "check the endpoint after my change", "request timeline as JSON". Skip: the devtools dashboard in a browser — the `devtools
|
|
12440
|
+
description: 'Verify runtime behaviour without a browser: `warlock trace <method> <url> [--body json|@file] [--header k:v] [--json]` sends one request to the running `warlock dev` server and prints what devtools recorded for it — middleware chain with timings, validation result and errors, handler time, queries with N+1 flags, logs, cache operations, captured mails, the response and timings — as a versioned report (`schemaVersion: 1`); `traceRequest()` returns the same object. Triggers: `warlock trace`, `traceRequest`, `TraceReport`, `buildTraceReport`, `x-request-id`, `.warlock/dev-server.json`, `WL8008`, `WL8009`, `WL5004`, `--id-header`; "did validation pass for this request", "which queries does this endpoint run", "is there an N+1 on this route", "what middleware runs on this route", "check the endpoint after my change", "request timeline as JSON". Skip: the devtools dashboard in a browser — the `warlock-js-devtools` skill; static route facts (guard, rate limit, schemas) — the `warlock-inspect` topic; typecheck/lint/tests — the `warlock-check` topic.'
|
|
12178
12441
|
---
|
|
12179
12442
|
|
|
12180
12443
|
# Warlock — `warlock trace`
|
|
@@ -12252,10 +12515,10 @@ Devtools is checked before anything is sent. With `--json` a failure prints `{ "
|
|
|
12252
12515
|
|
|
12253
12516
|
- The `warlock-inspect` topic — the static facts of a route (guard, rate limit, schemas).
|
|
12254
12517
|
- The `warlock-check` topic — typecheck, lint, tests and conventions in one run.
|
|
12255
|
-
- The `devtools
|
|
12518
|
+
- The `warlock-js-devtools` skill — the dashboard behind the timeline.
|
|
12256
12519
|
|
|
12257
12520
|
|
|
12258
|
-
## wire-socket `@warlock.js/core/wire-socket/SKILL.md`
|
|
12521
|
+
## wire-socket `@warlock.js/core/skills/wire-socket/SKILL.md`
|
|
12259
12522
|
|
|
12260
12523
|
---
|
|
12261
12524
|
name: wire-socket
|
|
@@ -12566,7 +12829,7 @@ CLI commands, scheduled jobs, queue workers — anything running outside an HTTP
|
|
|
12566
12829
|
- The `warlock-conventions` topic — where socket-related code lives (a setup function for handler registration, `services/` for emit sites).
|
|
12567
12830
|
|
|
12568
12831
|
|
|
12569
|
-
## write-cli-command `@warlock.js/core/write-cli-command/SKILL.md`
|
|
12832
|
+
## write-cli-command `@warlock.js/core/skills/write-cli-command/SKILL.md`
|
|
12570
12833
|
|
|
12571
12834
|
---
|
|
12572
12835
|
name: write-cli-command
|
|
@@ -12907,11 +13170,11 @@ Set a unique owner and registry per app instance, then import `processes` from
|
|
|
12907
13170
|
the generated module and await `processes.spawn({ kind: "worker", command,
|
|
12908
13171
|
args, labels })`. Consume output and await `handle.exited`. Use handle stops or
|
|
12909
13172
|
label filters; never stop processes by command or name. `spawnPty()` lazily
|
|
12910
|
-
loads separately installed optional peer `node-pty`. The `
|
|
12911
|
-
skill
|
|
13173
|
+
loads separately installed optional peer `node-pty`. The `warlock-js-process`
|
|
13174
|
+
skill contains complete working examples.
|
|
12912
13175
|
|
|
12913
13176
|
|
|
12914
|
-
## write-middleware `@warlock.js/core/write-middleware/SKILL.md`
|
|
13177
|
+
## write-middleware `@warlock.js/core/skills/write-middleware/SKILL.md`
|
|
12915
13178
|
|
|
12916
13179
|
---
|
|
12917
13180
|
name: write-middleware
|
|
@@ -13139,7 +13402,7 @@ export const optionalAuth: Middleware = async ({ request, response }) => {
|
|
|
13139
13402
|
- The `warlock-conventions` topic — the `guarded()` / `guardedAdmin()` / `publicRoutes()` convention.
|
|
13140
13403
|
|
|
13141
13404
|
|
|
13142
|
-
## write-seeder `@warlock.js/core/write-seeder/SKILL.md`
|
|
13405
|
+
## write-seeder `@warlock.js/core/skills/write-seeder/SKILL.md`
|
|
13143
13406
|
|
|
13144
13407
|
---
|
|
13145
13408
|
name: write-seeder
|
|
@@ -13534,7 +13797,7 @@ warlock seed --transaction # (default true) — pass --transaction=false to s
|
|
|
13534
13797
|
- The `warlock-conventions` topic — `seeds/` is the canonical folder name (singular `seed/` is incorrect).
|
|
13535
13798
|
|
|
13536
13799
|
|
|
13537
|
-
## write-use-case `@warlock.js/core/write-use-case/SKILL.md`
|
|
13800
|
+
## write-use-case `@warlock.js/core/skills/write-use-case/SKILL.md`
|
|
13538
13801
|
|
|
13539
13802
|
---
|
|
13540
13803
|
name: write-use-case
|