@mandujs/core 0.54.32 → 0.55.0-beta.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.
- package/README.md +654 -654
- package/package.json +106 -210
- package/scripts/postinstall-lock.ts +153 -153
- package/src/a11y/__tests__/run-audit.test.ts +333 -333
- package/src/a11y/fix-hints.ts +76 -76
- package/src/a11y/index.ts +18 -18
- package/src/a11y/run-audit.ts +15 -15
- package/src/a11y/types.ts +125 -125
- package/src/agent/__tests__/apply.test.ts +224 -0
- package/src/agent/__tests__/context.test.ts +97 -98
- package/src/agent/apply.ts +1031 -0
- package/src/agent/context.ts +552 -552
- package/src/agent/index.ts +4 -3
- package/src/agent/plan.ts +161 -243
- package/src/agent/repair.ts +239 -162
- package/src/agent/sync.ts +197 -198
- package/src/agent/types.ts +242 -94
- package/src/agent/verify.ts +55 -55
- package/src/auth/__tests__/login.test.ts +1 -1
- package/src/auth/__tests__/password.test.ts +15 -5
- package/src/auth/__tests__/reset.test.ts +2 -2
- package/src/auth/__tests__/tokens.test.ts +274 -274
- package/src/auth/__tests__/verification.test.ts +274 -274
- package/src/auth/index.ts +76 -76
- package/src/auth/login.ts +225 -225
- package/src/auth/password.ts +14 -2
- package/src/auth/reset.ts +243 -243
- package/src/auth/tokens.ts +612 -612
- package/src/auth/verification.ts +253 -253
- package/src/brain/__tests__/redactor.test.ts +94 -94
- package/src/brain/adapters/__tests__/_helpers.ts +83 -83
- package/src/brain/adapters/__tests__/anthropic-oauth.test.ts +196 -196
- package/src/brain/adapters/__tests__/chatgpt-auth.test.ts +193 -193
- package/src/brain/adapters/__tests__/openai-oauth.test.ts +209 -209
- package/src/brain/adapters/__tests__/resolver.test.ts +143 -143
- package/src/brain/adapters/anthropic-oauth.ts +1 -1
- package/src/brain/adapters/chatgpt-auth.ts +300 -300
- package/src/brain/adapters/index.ts +319 -319
- package/src/brain/adapters/oauth-flow.ts +439 -439
- package/src/brain/consent.ts +240 -240
- package/src/brain/credentials.ts +396 -396
- package/src/brain/doctor/analyzer.ts +7 -7
- package/src/bundler/__snapshots__/build.test.ts.snap +5 -5
- package/src/bundler/__tests__/build-runner.ts +166 -166
- package/src/bundler/__tests__/client-boundary-transform.test.ts +524 -524
- package/src/bundler/__tests__/cold-start.test.ts +60 -60
- package/src/bundler/__tests__/css.test.ts +49 -20
- package/src/bundler/__tests__/dev-reliability.test.ts +619 -619
- package/src/bundler/__tests__/extended-watch.test.ts +711 -711
- package/src/bundler/__tests__/fast-refresh.test.ts +24 -24
- package/src/bundler/__tests__/generation.test.ts +447 -0
- package/src/bundler/__tests__/hdr.test.ts +24 -18
- package/src/bundler/__tests__/hmr-client.test.ts +62 -24
- package/src/bundler/__tests__/jsx-runtime-shim.test.ts +179 -140
- package/src/bundler/__tests__/manifest-schema.test.ts +305 -266
- package/src/bundler/__tests__/prod-smoke.test.ts +138 -138
- package/src/bundler/__tests__/reverse-import-graph.test.ts +42 -42
- package/src/bundler/__tests__/slot-dispatch.test.ts +573 -573
- package/src/bundler/__tests__/url-cap-and-slot-regex.test.ts +286 -286
- package/src/bundler/__tests__/vendor-cache.test.ts +455 -455
- package/src/bundler/analyzer.ts +15 -15
- package/src/bundler/budget.ts +404 -404
- package/src/bundler/build.test.ts +898 -915
- package/src/bundler/build.ts +113 -24
- package/src/bundler/client-boundary-transform.ts +977 -977
- package/src/bundler/css.ts +65 -44
- package/src/bundler/dev.ts +105 -73
- package/src/bundler/fast-refresh-preamble.ts +47 -47
- package/src/bundler/generation.ts +602 -0
- package/src/bundler/index.ts +3 -3
- package/src/bundler/manifest-schema.ts +55 -40
- package/src/bundler/plugins/__tests__/block-generated-imports.test.ts +13 -13
- package/src/bundler/plugins/__tests__/react-compiler-config.test.ts +83 -83
- package/src/bundler/plugins/__tests__/react-compiler-lint.test.ts +110 -110
- package/src/bundler/plugins/block-generated-imports.ts +16 -15
- package/src/bundler/plugins/index.ts +83 -83
- package/src/bundler/plugins/react-compiler-config.ts +108 -108
- package/src/bundler/plugins/react-compiler-lint.ts +253 -253
- package/src/bundler/plugins/react-compiler.ts +162 -162
- package/src/bundler/prerender.ts +29 -9
- package/src/bundler/reverse-import-graph.ts +339 -339
- package/src/bundler/safe-build.test.ts +1 -1
- package/src/bundler/safe-build.ts +103 -103
- package/src/bundler/scenario-matrix.ts +229 -229
- package/src/bundler/types.ts +58 -56
- package/src/bundler/vendor-cache-types.ts +130 -130
- package/src/bundler/vendor-cache.ts +526 -526
- package/src/change/snapshot.ts +18 -18
- package/src/client/Form.tsx +105 -105
- package/src/client/Link.tsx +9 -9
- package/src/client/__tests__/props-serialization.test.ts +37 -37
- package/src/client/__tests__/use-sse.test.ts +153 -153
- package/src/client/globals.ts +1 -1
- package/src/client/hooks.ts +362 -362
- package/src/client/hydrate.ts +2 -2
- package/src/client/index.ts +1 -1
- package/src/client/island.ts +79 -79
- package/src/client/prefetch-helper.ts +55 -55
- package/src/client/props-serialization.ts +233 -233
- package/src/client/runtime-entry.ts +598 -598
- package/src/client/runtime.ts +1 -1
- package/src/client/serialize.ts +50 -50
- package/src/client/use-fetch.ts +6 -6
- package/src/client/use-head.ts +197 -197
- package/src/client/use-sse.ts +378 -378
- package/src/client/window-state.ts +101 -101
- package/src/components/Image-compat.ts +3 -0
- package/src/components/Image.tsx +162 -162
- package/src/config/validate.ts +1 -1
- package/src/config/watcher.ts +311 -311
- package/src/constants.ts +40 -40
- package/src/content/collection.ts +9 -9
- package/src/content/content-layer.ts +7 -7
- package/src/content/data-store.ts +245 -245
- package/src/content/frontmatter.ts +189 -189
- package/src/content/generate-types.ts +1 -1
- package/src/content/index.ts +2 -2
- package/src/content/loader-context.ts +171 -171
- package/src/content/loaders/api.ts +216 -216
- package/src/content/loaders/file.ts +172 -172
- package/src/content/loaders/glob.ts +253 -253
- package/src/content/loaders/index.ts +34 -34
- package/src/content/loaders/types.ts +137 -137
- package/src/content/meta-store.ts +209 -209
- package/src/content/prebuild.test.ts +571 -571
- package/src/content/prebuild.ts +636 -636
- package/src/content/schema.ts +20 -20
- package/src/content/sidebar.ts +630 -630
- package/src/content/slug.ts +110 -110
- package/src/content/types.ts +282 -282
- package/src/content/watcher.ts +135 -135
- package/src/contract/client-safe.test.ts +42 -42
- package/src/contract/client-safe.ts +114 -114
- package/src/contract/define.ts +11 -11
- package/src/contract/index.ts +1 -1
- package/src/contract/normalize.test.ts +276 -276
- package/src/contract/normalize.ts +410 -410
- package/src/contract/registry.test.ts +206 -206
- package/src/contract/route-helpers.ts +1 -1
- package/src/contract/rpc.ts +443 -443
- package/src/contract/types.ts +58 -58
- package/src/db/__tests__/db.test.ts +9 -9
- package/src/db/index.ts +2 -2
- package/src/db/migrations/history-table.ts +345 -345
- package/src/db/migrations/index.ts +3 -3
- package/src/db/migrations/lock.ts +324 -324
- package/src/db/migrations/runner.ts +650 -650
- package/src/deploy/cache.ts +140 -140
- package/src/deploy/compile/vercel.ts +344 -344
- package/src/deploy/index.ts +87 -87
- package/src/deploy/inference/brain.ts +268 -268
- package/src/deploy/inference/context.ts +82 -82
- package/src/deploy/inference/filling-extract.ts +245 -245
- package/src/deploy/inference/heuristic.ts +182 -182
- package/src/deploy/intent.ts +173 -173
- package/src/deploy/plan.ts +178 -178
- package/src/design/__tests__/agents-link.test.ts +109 -109
- package/src/design/__tests__/extract-patch-diff.test.ts +265 -265
- package/src/design/__tests__/lint.test.ts +110 -110
- package/src/design/__tests__/parser.test.ts +195 -195
- package/src/design/__tests__/tailwind-theme.test.ts +229 -229
- package/src/design/agents-link.ts +165 -165
- package/src/design/diff.ts +138 -138
- package/src/design/extract.ts +285 -285
- package/src/design/index.ts +102 -102
- package/src/design/lint.ts +209 -209
- package/src/design/parser.ts +555 -555
- package/src/design/patch.ts +241 -241
- package/src/design/scaffold.ts +147 -147
- package/src/design/tailwind-theme.ts +441 -441
- package/src/design/types.ts +210 -210
- package/src/desktop/__tests__/smoke.test.ts +2 -2
- package/src/desktop/__tests__/webview-fallback.test.ts +12 -32
- package/src/desktop/__tests__/window.test.ts +20 -99
- package/src/desktop/__tests__/worker.test.ts +266 -266
- package/src/desktop/index.ts +43 -43
- package/src/desktop/types.ts +158 -158
- package/src/desktop/webview-fallback.ts +17 -4
- package/src/desktop/window.ts +17 -8
- package/src/desktop/worker.ts +180 -180
- package/src/dev-error-overlay/__tests__/overlay-injector.test.ts +241 -241
- package/src/dev-error-overlay/index.ts +30 -30
- package/src/dev-error-overlay/overlay-injector.ts +243 -243
- package/src/dev-error-overlay/overlay-styles.ts +52 -52
- package/src/dev-error-overlay/types.ts +66 -66
- package/src/devtools/ai/context-builder.ts +375 -375
- package/src/devtools/ai/index.ts +25 -25
- package/src/devtools/ai/mcp-connector.ts +25 -25
- package/src/devtools/client/catchers/error-catcher.ts +344 -344
- package/src/devtools/client/catchers/index.ts +18 -18
- package/src/devtools/client/components/index.ts +39 -39
- package/src/devtools/client/components/mandu-character.tsx +331 -331
- package/src/devtools/client/components/panel/errors-panel.tsx +259 -259
- package/src/devtools/client/components/panel/guard-panel.tsx +30 -30
- package/src/devtools/client/components/panel/islands-panel.tsx +16 -16
- package/src/devtools/client/components/panel/network-panel.tsx +291 -291
- package/src/devtools/client/components/panel/panel-container.tsx +1 -1
- package/src/devtools/client/components/panel/preview-panel.tsx +46 -46
- package/src/devtools/client/filters/context-filters.ts +282 -282
- package/src/devtools/client/filters/index.ts +16 -16
- package/src/devtools/client/index.ts +63 -63
- package/src/devtools/hook/create-hook.ts +207 -207
- package/src/devtools/hook/index.ts +13 -13
- package/src/devtools/index.ts +439 -439
- package/src/devtools/init.ts +265 -265
- package/src/devtools/protocol.ts +237 -237
- package/src/devtools/server/index.ts +17 -17
- package/src/devtools/types.ts +35 -35
- package/src/devtools/worker/index.ts +25 -25
- package/src/devtools/worker/redaction-worker.ts +233 -233
- package/src/diagnose/__tests__/checks.test.ts +136 -136
- package/src/diagnose/checks.ts +185 -185
- package/src/diagnose/index.ts +17 -17
- package/src/diagnose/run.ts +10 -10
- package/src/diagnose/types.ts +53 -53
- package/src/email/__tests__/email.test.ts +355 -355
- package/src/email/index.ts +282 -282
- package/src/email/smtp.ts +64 -64
- package/src/error/domains.ts +265 -265
- package/src/error/types.ts +6 -6
- package/src/errors/extractor.ts +409 -409
- package/src/errors/index.ts +19 -19
- package/src/filling/__tests__/session-sqlite.test.ts +5 -1
- package/src/filling/auth.ts +308 -308
- package/src/filling/body-parse.test.ts +60 -60
- package/src/filling/cookie-codec.ts +5 -3
- package/src/filling/deps.ts +265 -265
- package/src/filling/head-method.test.ts +154 -154
- package/src/filling/session-sqlite.ts +617 -617
- package/src/filling/sse.ts +5 -5
- package/src/filling/ws.ts +78 -78
- package/src/generator/generate.ts +30 -30
- package/src/generator/index.ts +3 -3
- package/src/generator/templates.test.ts +48 -48
- package/src/generator/templates.ts +219 -219
- package/src/guard/__tests__/design-inline-class.test.ts +219 -219
- package/src/guard/__tests__/tsgolint-bridge.test.ts +347 -347
- package/src/guard/analyzer.ts +360 -360
- package/src/guard/auto-correct.ts +1 -1
- package/src/guard/check.ts +39 -24
- package/src/guard/config-guard.ts +13 -13
- package/src/guard/contract-guard.ts +9 -9
- package/src/guard/define-rule.ts +243 -243
- package/src/guard/design-inline-class.ts +393 -393
- package/src/guard/file-type.test.ts +24 -24
- package/src/guard/fs-routes-policy.ts +51 -51
- package/src/guard/graph.ts +1 -1
- package/src/guard/healing.ts +36 -36
- package/src/guard/index.ts +11 -11
- package/src/guard/presets/atomic.ts +70 -70
- package/src/guard/presets/clean.ts +77 -77
- package/src/guard/presets/fsd.ts +79 -79
- package/src/guard/presets/hexagonal.ts +68 -68
- package/src/guard/reporter.ts +442 -442
- package/src/guard/rule-presets.ts +379 -379
- package/src/guard/semantic-slots.ts +1 -1
- package/src/guard/suggestions.ts +358 -358
- package/src/guard/tsgolint-bridge.ts +512 -512
- package/src/guard/types.ts +348 -348
- package/src/guard/watcher.ts +405 -405
- package/src/i18n/define.ts +126 -126
- package/src/i18n/index.ts +52 -52
- package/src/i18n/message-registry.ts +173 -173
- package/src/i18n/types.ts +112 -112
- package/src/id/__tests__/id.test.ts +3 -3
- package/src/id/index.ts +105 -105
- package/src/index.ts +9 -48
- package/src/internal/client-boundary.ts +266 -266
- package/src/internal/index.ts +2 -2
- package/src/kitchen/api/agent-devtools-api.ts +779 -779
- package/src/kitchen/api/bundle-inspector.ts +179 -0
- package/src/kitchen/api/errors-grouping.ts +126 -126
- package/src/kitchen/api/file-api.ts +11 -11
- package/src/kitchen/kitchen-handler.ts +36 -0
- package/src/kitchen/kitchen-ui.ts +456 -0
- package/src/logging/index.ts +22 -22
- package/src/logging/transports.ts +365 -365
- package/src/middleware/bridge.ts +147 -147
- package/src/middleware/compose.ts +134 -134
- package/src/middleware/compress.ts +62 -62
- package/src/middleware/cors.ts +47 -47
- package/src/middleware/csrf.ts +328 -328
- package/src/middleware/define.ts +132 -132
- package/src/middleware/jwt.ts +134 -134
- package/src/middleware/logger.ts +58 -58
- package/src/middleware/oauth/__tests__/oauth.test.ts +1 -1
- package/src/middleware/oauth/index.ts +505 -505
- package/src/middleware/oauth/providers.ts +115 -115
- package/src/middleware/rate-limit/index.ts +522 -522
- package/src/middleware/rate-limit/sqlite-store.ts +382 -382
- package/src/middleware/scheduler-cron.ts +96 -96
- package/src/middleware/secure/__tests__/secure.test.ts +360 -360
- package/src/middleware/secure/csp.ts +193 -193
- package/src/middleware/session.ts +174 -174
- package/src/middleware/timeout.ts +55 -55
- package/src/observability/logger-adapter.ts +36 -36
- package/src/observability/sqlite-store.ts +254 -254
- package/src/openapi/generator.ts +1 -1
- package/src/openapi/openapi.test.ts +43 -43
- package/src/perf/__tests__/user-marks.test.ts +354 -354
- package/src/perf/index.ts +133 -133
- package/src/perf/user-marks.ts +1 -1
- package/src/plugins/__tests__/lifecycle-integration.test.ts +272 -272
- package/src/plugins/__tests__/runner.test.ts +409 -409
- package/src/plugins/define.ts +124 -124
- package/src/plugins/examples/dep-check-plugin.ts +80 -80
- package/src/plugins/examples/prerender-cache-plugin.ts +111 -111
- package/src/plugins/examples/sitemap-plugin.ts +65 -65
- package/src/plugins/runner.ts +361 -361
- package/src/plugins/types.ts +368 -368
- package/src/report/index.ts +1 -1
- package/src/resource/__tests__/generator.test.ts +7 -7
- package/src/resource/__tests__/schema.test.ts +14 -14
- package/src/resource/ddl/__tests__/diff.test.ts +639 -639
- package/src/resource/ddl/__tests__/emit.test.ts +165 -165
- package/src/resource/ddl/__tests__/snapshot.test.ts +499 -499
- package/src/resource/ddl/emit.ts +146 -146
- package/src/resource/ddl/persistence-types.ts +218 -218
- package/src/resource/ddl/type-map.ts +223 -223
- package/src/resource/ddl/types.ts +232 -232
- package/src/resource/generator-repo.ts +630 -630
- package/src/resource/generator-schema.ts +11 -11
- package/src/resource/generators/slot.ts +72 -72
- package/src/resource/schema.ts +21 -21
- package/src/router/client-entry.test.ts +227 -227
- package/src/router/client-entry.ts +218 -218
- package/src/router/fs-patterns.test.ts +96 -96
- package/src/router/fs-routes.test.ts +532 -532
- package/src/router/fs-routes.ts +53 -53
- package/src/router/fs-scanner.ts +216 -216
- package/src/router/fs-types.ts +19 -19
- package/src/router/route-source-analyzer.ts +521 -521
- package/src/routes/index.ts +74 -74
- package/src/routes/metadata-routes.ts +427 -427
- package/src/routes/types.ts +341 -341
- package/src/runtime/__tests__/devtools-adapter.test.ts +68 -68
- package/src/runtime/__tests__/error-boundary-redaction.test.ts +141 -141
- package/src/runtime/__tests__/hdr-client.test.ts +223 -223
- package/src/runtime/__tests__/http-errors.test.ts +117 -117
- package/src/runtime/__tests__/inline-client-hydration.test.ts +237 -237
- package/src/runtime/__tests__/not-found.test.ts +152 -152
- package/src/runtime/__tests__/observability-lifecycle.test.ts +103 -103
- package/src/runtime/__tests__/page-render-response.test.ts +517 -517
- package/src/runtime/__tests__/request-middleware.test.ts +70 -70
- package/src/runtime/__tests__/searchparams-page-props.test.ts +81 -81
- package/src/runtime/adapter.ts +47 -47
- package/src/runtime/boundary.tsx +252 -252
- package/src/runtime/cache.ts +494 -494
- package/src/runtime/compose.ts +222 -222
- package/src/runtime/devtools-adapter.ts +68 -68
- package/src/runtime/escape.ts +34 -34
- package/src/runtime/fast-refresh-runtime.ts +322 -322
- package/src/runtime/fast-refresh-types.ts +1 -1
- package/src/runtime/handler.ts +65 -65
- package/src/runtime/handlers.ts +30 -11
- package/src/runtime/http-errors.ts +113 -113
- package/src/runtime/image-handler.ts +1 -1
- package/src/runtime/lifecycle.ts +381 -381
- package/src/runtime/logger.test.ts +345 -345
- package/src/runtime/middleware.ts +264 -264
- package/src/runtime/not-found.ts +93 -93
- package/src/runtime/observability-lifecycle.ts +290 -290
- package/src/runtime/openapi-endpoint.ts +236 -236
- package/src/runtime/page-render-response.ts +287 -274
- package/src/runtime/ppr.ts +74 -74
- package/src/runtime/rate-limit.ts +1 -1
- package/src/runtime/redirect.ts +1 -1
- package/src/runtime/registry.ts +171 -171
- package/src/runtime/request-middleware.ts +31 -31
- package/src/runtime/router.test.ts +4 -4
- package/src/runtime/router.ts +10 -10
- package/src/runtime/server.ts +127 -211
- package/src/runtime/shims.ts +48 -48
- package/src/runtime/ssr.ts +43 -17
- package/src/runtime/static-files.ts +369 -289
- package/src/runtime/streaming-ssr.ts +219 -180
- package/src/runtime/trace.ts +144 -144
- package/src/scheduler/__tests__/scheduler.test.ts +12 -11
- package/src/scheduler/index.ts +11 -5
- package/src/scheduler/validate.ts +169 -169
- package/src/seo/index.ts +219 -219
- package/src/seo/integration/ssr.ts +306 -306
- package/src/seo/render/basic.ts +435 -435
- package/src/seo/render/index.ts +143 -143
- package/src/seo/render/jsonld.ts +539 -539
- package/src/seo/render/opengraph.ts +197 -197
- package/src/seo/render/robots.ts +116 -116
- package/src/seo/render/sitemap.ts +137 -137
- package/src/seo/render/twitter.ts +127 -127
- package/src/seo/resolve/opengraph.ts +143 -143
- package/src/seo/resolve/robots.ts +73 -73
- package/src/seo/resolve/title.ts +94 -94
- package/src/seo/resolve/twitter.ts +73 -73
- package/src/seo/resolve/url.ts +104 -104
- package/src/seo/routes/index.ts +290 -290
- package/src/seo/types.ts +588 -588
- package/src/slot/validator.ts +39 -39
- package/src/spec/schema.ts +35 -35
- package/src/storage/s3/__tests__/s3.test.ts +479 -479
- package/src/storage/s3/index.ts +412 -412
- package/src/testing/__tests__/assertions.test.ts +632 -632
- package/src/testing/__tests__/reporter.test.ts +454 -454
- package/src/testing/assertions.ts +986 -986
- package/src/testing/db.ts +157 -157
- package/src/testing/index.ts +9 -3
- package/src/testing/lcov.ts +192 -0
- package/src/testing/mocks.ts +203 -203
- package/src/testing/session.ts +190 -190
- package/src/types/branded.ts +56 -56
- package/src/types/index.ts +1 -1
- package/src/utils/safe-io.ts +188 -188
- package/src/utils/string-safe.ts +298 -298
- package/src/watcher/__tests__/watcher.test.ts +59 -59
- package/src/watcher/watcher.ts +61 -61
package/src/agent/types.ts
CHANGED
|
@@ -32,43 +32,43 @@ export interface AgentProjectSummary {
|
|
|
32
32
|
configFile: string | null;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export interface AgentRouteSummary {
|
|
36
|
-
id: string;
|
|
37
|
-
pattern: string;
|
|
38
|
-
kind: "page" | "api" | "metadata" | string;
|
|
35
|
+
export interface AgentRouteSummary {
|
|
36
|
+
id: string;
|
|
37
|
+
pattern: string;
|
|
38
|
+
kind: "page" | "api" | "metadata" | string;
|
|
39
39
|
module: string;
|
|
40
40
|
methods?: string[];
|
|
41
41
|
hydration?: {
|
|
42
42
|
strategy?: string;
|
|
43
43
|
priority?: string;
|
|
44
|
-
};
|
|
45
|
-
hasClientModule: boolean;
|
|
46
|
-
hasContractModule: boolean;
|
|
47
|
-
boundaryCount?: number;
|
|
48
|
-
boundaries?: AgentRouteBoundarySummary[];
|
|
49
|
-
layoutDepth: number;
|
|
50
|
-
metadataKind?: string;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface AgentRouteBoundarySummary {
|
|
54
|
-
id: string;
|
|
55
|
-
module: string;
|
|
56
|
-
importSpecifier?: string;
|
|
57
|
-
exportName: string;
|
|
58
|
-
localName: string;
|
|
59
|
-
ordinal: number;
|
|
60
|
-
hydrate: string;
|
|
61
|
-
propsSource: string;
|
|
62
|
-
propsKeys: string[];
|
|
63
|
-
hasSpreadProps: boolean;
|
|
64
|
-
source: {
|
|
65
|
-
file: string;
|
|
66
|
-
line: number;
|
|
67
|
-
column: number;
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface AgentArtifactSummary {
|
|
44
|
+
};
|
|
45
|
+
hasClientModule: boolean;
|
|
46
|
+
hasContractModule: boolean;
|
|
47
|
+
boundaryCount?: number;
|
|
48
|
+
boundaries?: AgentRouteBoundarySummary[];
|
|
49
|
+
layoutDepth: number;
|
|
50
|
+
metadataKind?: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface AgentRouteBoundarySummary {
|
|
54
|
+
id: string;
|
|
55
|
+
module: string;
|
|
56
|
+
importSpecifier?: string;
|
|
57
|
+
exportName: string;
|
|
58
|
+
localName: string;
|
|
59
|
+
ordinal: number;
|
|
60
|
+
hydrate: string;
|
|
61
|
+
propsSource: string;
|
|
62
|
+
propsKeys: string[];
|
|
63
|
+
hasSpreadProps: boolean;
|
|
64
|
+
source: {
|
|
65
|
+
file: string;
|
|
66
|
+
line: number;
|
|
67
|
+
column: number;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface AgentArtifactSummary {
|
|
72
72
|
path: string;
|
|
73
73
|
kind: "partial" | "island" | "slot" | "contract";
|
|
74
74
|
}
|
|
@@ -173,11 +173,21 @@ export interface AgentVerifyCheck {
|
|
|
173
173
|
details?: Record<string, unknown>;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
export interface AgentSuggestedCommand {
|
|
177
|
-
command: string;
|
|
178
|
-
reason: string;
|
|
179
|
-
required: boolean;
|
|
180
|
-
}
|
|
176
|
+
export interface AgentSuggestedCommand {
|
|
177
|
+
command: string;
|
|
178
|
+
reason: string;
|
|
179
|
+
required: boolean;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface AgentVerificationStep extends AgentSuggestedCommand {
|
|
183
|
+
id: string;
|
|
184
|
+
kind?: "agent.verify";
|
|
185
|
+
changedOnly?: boolean;
|
|
186
|
+
includeDiagnose?: boolean;
|
|
187
|
+
includeGit?: boolean;
|
|
188
|
+
includeGuard?: boolean;
|
|
189
|
+
includeContract?: boolean;
|
|
190
|
+
}
|
|
181
191
|
|
|
182
192
|
export interface AgentChangedFileReason {
|
|
183
193
|
file: string;
|
|
@@ -212,7 +222,12 @@ export interface BuildAgentVerifyOptions {
|
|
|
212
222
|
staged?: boolean;
|
|
213
223
|
}
|
|
214
224
|
|
|
215
|
-
export type AgentRepairStatus =
|
|
225
|
+
export type AgentRepairStatus =
|
|
226
|
+
| "ready"
|
|
227
|
+
| "nothing_to_repair"
|
|
228
|
+
| "input_missing"
|
|
229
|
+
| "rolled_back"
|
|
230
|
+
| "rollback_conflict";
|
|
216
231
|
|
|
217
232
|
export interface AgentRepairAction {
|
|
218
233
|
diagnosticCode: string;
|
|
@@ -233,15 +248,17 @@ export interface AgentRepairReport {
|
|
|
233
248
|
sourceReport: string;
|
|
234
249
|
diagnostics: AgentDiagnostic[];
|
|
235
250
|
actions: AgentRepairAction[];
|
|
236
|
-
appliedActions: AgentRepairAction[];
|
|
237
|
-
|
|
251
|
+
appliedActions: AgentRepairAction[];
|
|
252
|
+
rollback?: AgentRollbackResult;
|
|
253
|
+
warnings: string[];
|
|
238
254
|
nextVerifyCommand: string;
|
|
239
255
|
}
|
|
240
256
|
|
|
241
|
-
export interface BuildAgentRepairOptions {
|
|
242
|
-
from?: string;
|
|
243
|
-
apply?: boolean;
|
|
244
|
-
|
|
257
|
+
export interface BuildAgentRepairOptions {
|
|
258
|
+
from?: string;
|
|
259
|
+
apply?: boolean;
|
|
260
|
+
rollbackId?: string;
|
|
261
|
+
}
|
|
245
262
|
|
|
246
263
|
export type AgentDomain =
|
|
247
264
|
| "route"
|
|
@@ -257,56 +274,187 @@ export type AgentDomain =
|
|
|
257
274
|
| "db"
|
|
258
275
|
| "unknown";
|
|
259
276
|
|
|
260
|
-
export interface AgentPlanRisk {
|
|
261
|
-
level: "low" | "medium" | "high";
|
|
262
|
-
reason: string;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
export
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
277
|
+
export interface AgentPlanRisk {
|
|
278
|
+
level: "low" | "medium" | "high";
|
|
279
|
+
reason: string;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export type AgentOperationKind =
|
|
283
|
+
| "file.create"
|
|
284
|
+
| "file.patch-with-hash"
|
|
285
|
+
| "route.create"
|
|
286
|
+
| "api.create"
|
|
287
|
+
| "contract.update"
|
|
288
|
+
| "guard.safe-fix"
|
|
289
|
+
| "generated.refresh";
|
|
290
|
+
|
|
291
|
+
export interface AgentPermission {
|
|
292
|
+
kind: "read" | "write";
|
|
293
|
+
path: string;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export interface AgentOperationPrecondition {
|
|
297
|
+
exists: boolean;
|
|
298
|
+
contentHash?: string;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export interface AgentOperationEffect {
|
|
302
|
+
type: "write";
|
|
303
|
+
content: string;
|
|
304
|
+
encoding: "utf8";
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export interface AgentRollbackDescriptor {
|
|
308
|
+
strategy: "restore-snapshot";
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export interface AgentOperation {
|
|
312
|
+
id: string;
|
|
313
|
+
kind: AgentOperationKind;
|
|
314
|
+
target: string;
|
|
315
|
+
precondition: AgentOperationPrecondition;
|
|
316
|
+
effect: AgentOperationEffect;
|
|
317
|
+
rollback: AgentRollbackDescriptor;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export interface AgentOperationInput {
|
|
321
|
+
id?: string;
|
|
322
|
+
kind: AgentOperationKind;
|
|
323
|
+
target: string;
|
|
324
|
+
effect: AgentOperationEffect;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export type AgentRollbackPolicy = "automatic" | "manual";
|
|
328
|
+
|
|
329
|
+
export interface AgentPlan {
|
|
330
|
+
schemaVersion: 1;
|
|
331
|
+
framework: "mandu";
|
|
332
|
+
generatedAt: string;
|
|
333
|
+
id: string;
|
|
334
|
+
intent: string;
|
|
335
|
+
baseRevision: string | null;
|
|
336
|
+
idempotencyKey: string | null;
|
|
337
|
+
scope: string[];
|
|
338
|
+
permissions: AgentPermission[];
|
|
339
|
+
operations: AgentOperation[];
|
|
340
|
+
rollbackPolicy: AgentRollbackPolicy;
|
|
341
|
+
domains: AgentDomain[];
|
|
342
|
+
filesToRead: string[];
|
|
343
|
+
filesToCreate: string[];
|
|
344
|
+
filesToModify: string[];
|
|
345
|
+
mcpTools: string[];
|
|
346
|
+
risks: AgentPlanRisk[];
|
|
347
|
+
verification: AgentVerificationStep[];
|
|
348
|
+
notes: string[];
|
|
349
|
+
executable: boolean;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
export interface BuildAgentPlanOptions {
|
|
353
|
+
intent: string;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export interface BuildExecutableAgentPlanOptions {
|
|
357
|
+
intent: string;
|
|
358
|
+
operations: AgentOperationInput[];
|
|
359
|
+
idempotencyKey?: string;
|
|
360
|
+
rollbackPolicy?: AgentRollbackPolicy;
|
|
361
|
+
verification?: AgentVerificationStep[];
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export type AgentOperationStatus =
|
|
365
|
+
| "planned"
|
|
366
|
+
| "applied"
|
|
367
|
+
| "failed"
|
|
368
|
+
| "rolled_back"
|
|
369
|
+
| "skipped";
|
|
370
|
+
|
|
371
|
+
export interface AgentOperationReceipt {
|
|
372
|
+
operationId: string;
|
|
373
|
+
kind: AgentOperationKind;
|
|
374
|
+
target: string;
|
|
375
|
+
status: AgentOperationStatus;
|
|
376
|
+
beforeHash: string | null;
|
|
377
|
+
afterHash: string | null;
|
|
378
|
+
error?: string;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export interface AgentVerificationResult {
|
|
382
|
+
id: string;
|
|
383
|
+
kind: "agent.verify";
|
|
384
|
+
required: boolean;
|
|
385
|
+
ok: boolean;
|
|
386
|
+
checks: AgentVerifyCheck[];
|
|
387
|
+
diagnostics: AgentDiagnostic[];
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
export interface AgentRollbackReceipt {
|
|
391
|
+
id: string | null;
|
|
392
|
+
snapshotPath: string | null;
|
|
393
|
+
policy: AgentRollbackPolicy;
|
|
394
|
+
attempted: boolean;
|
|
395
|
+
ok: boolean | null;
|
|
396
|
+
restoredFiles: string[];
|
|
397
|
+
conflicts: string[];
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
export type AgentApplyStatus =
|
|
401
|
+
| "preview"
|
|
402
|
+
| "applied"
|
|
403
|
+
| "blocked"
|
|
404
|
+
| "failed"
|
|
405
|
+
| "rolled_back";
|
|
406
|
+
|
|
407
|
+
export interface AgentApplyAction {
|
|
408
|
+
kind: "mcp_tool" | "read_file" | "manual_edit" | "verify" | AgentOperationKind;
|
|
409
|
+
description: string;
|
|
410
|
+
tool?: string;
|
|
411
|
+
file?: string;
|
|
412
|
+
command?: string;
|
|
413
|
+
applied: boolean;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export interface ApplyReceipt {
|
|
417
|
+
schemaVersion: 1;
|
|
418
|
+
framework: "mandu";
|
|
419
|
+
generatedAt: string;
|
|
420
|
+
receiptId: string;
|
|
421
|
+
planId: string | null;
|
|
422
|
+
idempotencyKey: string | null;
|
|
423
|
+
baseRevision: string | null;
|
|
424
|
+
startedAt: string;
|
|
425
|
+
completedAt: string;
|
|
426
|
+
ok: boolean;
|
|
427
|
+
status: AgentApplyStatus;
|
|
428
|
+
dryRun: boolean;
|
|
429
|
+
replayed: boolean;
|
|
430
|
+
sourcePlan: string;
|
|
431
|
+
intent: string;
|
|
432
|
+
domains: AgentDomain[];
|
|
433
|
+
actions: AgentApplyAction[];
|
|
434
|
+
operations: AgentOperationReceipt[];
|
|
435
|
+
touchedFiles: string[];
|
|
436
|
+
changedFiles: string[];
|
|
437
|
+
verification: AgentVerificationResult[];
|
|
438
|
+
rollback: AgentRollbackReceipt;
|
|
439
|
+
warnings: string[];
|
|
440
|
+
nextVerifyCommand: string;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export type AgentApplyReport = ApplyReceipt;
|
|
444
|
+
|
|
445
|
+
export interface BuildAgentApplyOptions {
|
|
446
|
+
from?: string;
|
|
447
|
+
dryRun?: boolean;
|
|
448
|
+
/** Test-only deterministic failure injection; adapters never expose this option. */
|
|
449
|
+
failureAfterOperations?: number;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export interface AgentRollbackResult {
|
|
453
|
+
rollbackId: string;
|
|
454
|
+
ok: boolean;
|
|
455
|
+
restoredFiles: string[];
|
|
456
|
+
conflicts: string[];
|
|
457
|
+
}
|
|
310
458
|
|
|
311
459
|
export type AgentSyncTarget = "codex" | "claude" | "gemini" | "all";
|
|
312
460
|
|
package/src/agent/verify.ts
CHANGED
|
@@ -245,17 +245,17 @@ function commandSuggestions(
|
|
|
245
245
|
if (files.some((file) => file.startsWith("packages/mcp/"))) {
|
|
246
246
|
add("bun test packages/mcp/tests", "MCP package files changed.", true);
|
|
247
247
|
}
|
|
248
|
-
if (files.some((file) => file.includes("package.json") || file === "bun.lock")) {
|
|
249
|
-
add("bun run check:publish", "Package metadata or lockfile changed.", true);
|
|
250
|
-
}
|
|
251
|
-
if (files.some(isHydrationSensitiveEdit)) {
|
|
252
|
-
add("bun run test:hydration-boundary", "Hydration-sensitive runtime/router/bundler files changed.", true);
|
|
253
|
-
add("bun run test:hydration-e2e", "Hydration-sensitive changes need browser-level validation.", true);
|
|
254
|
-
add("bun run check:publish", "Pre-publish hydration gates should pass before release.", true);
|
|
255
|
-
}
|
|
256
|
-
if (changedFileReasons.some((entry) => entry.internalApi)) {
|
|
257
|
-
add("bun run check:public-api && bun run check:target-boundaries", "Internal framework boundaries changed.", true);
|
|
258
|
-
}
|
|
248
|
+
if (files.some((file) => file.includes("package.json") || file === "bun.lock")) {
|
|
249
|
+
add("bun run check:publish", "Package metadata or lockfile changed.", true);
|
|
250
|
+
}
|
|
251
|
+
if (files.some(isHydrationSensitiveEdit)) {
|
|
252
|
+
add("bun run test:hydration-boundary", "Hydration-sensitive runtime/router/bundler files changed.", true);
|
|
253
|
+
add("bun run test:hydration-e2e", "Hydration-sensitive changes need browser-level validation.", true);
|
|
254
|
+
add("bun run check:publish", "Pre-publish hydration gates should pass before release.", true);
|
|
255
|
+
}
|
|
256
|
+
if (changedFileReasons.some((entry) => entry.internalApi)) {
|
|
257
|
+
add("bun run check:public-api && bun run check:target-boundaries", "Internal framework boundaries changed.", true);
|
|
258
|
+
}
|
|
259
259
|
if (diagnostics.some((d) => d.severity === "error" || d.severity === "fatal")) {
|
|
260
260
|
add("mandu agent repair --from .mandu/agent-verify.json", "Verification produced repairable diagnostics.", false);
|
|
261
261
|
}
|
|
@@ -263,40 +263,40 @@ function commandSuggestions(
|
|
|
263
263
|
return out;
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
function isInternalApiEdit(file: string): boolean {
|
|
267
|
-
return [
|
|
268
|
-
"packages/core/src/runtime/",
|
|
269
|
-
"packages/core/src/bundler/",
|
|
266
|
+
function isInternalApiEdit(file: string): boolean {
|
|
267
|
+
return [
|
|
268
|
+
"packages/core/src/runtime/",
|
|
269
|
+
"packages/core/src/bundler/",
|
|
270
270
|
"packages/core/src/server/",
|
|
271
271
|
"packages/core/src/guard/",
|
|
272
272
|
"packages/core/src/spec/",
|
|
273
273
|
"packages/core/src/router/",
|
|
274
274
|
"packages/core/src/internal/",
|
|
275
|
-
].some((prefix) => file.startsWith(prefix));
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
function isHydrationSensitiveEdit(file: string): boolean {
|
|
279
|
-
return [
|
|
280
|
-
"packages/core/src/runtime/page-render-response.ts",
|
|
281
|
-
"packages/core/src/runtime/server.ts",
|
|
282
|
-
"packages/core/src/runtime/ssr.ts",
|
|
283
|
-
"packages/core/src/runtime/streaming-ssr.ts",
|
|
284
|
-
"packages/core/src/internal/client-boundary.ts",
|
|
285
|
-
"packages/core/src/bundler/build.ts",
|
|
286
|
-
"packages/core/src/bundler/client-boundary-transform.ts",
|
|
287
|
-
"packages/core/src/router/client-entry.ts",
|
|
288
|
-
"packages/core/src/router/fs-routes.ts",
|
|
289
|
-
"packages/core/src/router/fs-scanner.ts",
|
|
290
|
-
"packages/core/src/client/serialize.ts",
|
|
291
|
-
"packages/core/src/client/props-serialization.ts",
|
|
292
|
-
"packages/core/src/client/runtime-entry.ts",
|
|
293
|
-
].includes(file);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
function changedFileReason(file: string): AgentChangedFileReason {
|
|
297
|
-
const normalized = normalizePath(file) ?? file;
|
|
298
|
-
const reasons: string[] = [];
|
|
299
|
-
const recommendedChecks: string[] = [];
|
|
275
|
+
].some((prefix) => file.startsWith(prefix));
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function isHydrationSensitiveEdit(file: string): boolean {
|
|
279
|
+
return [
|
|
280
|
+
"packages/core/src/runtime/page-render-response.ts",
|
|
281
|
+
"packages/core/src/runtime/server.ts",
|
|
282
|
+
"packages/core/src/runtime/ssr.ts",
|
|
283
|
+
"packages/core/src/runtime/streaming-ssr.ts",
|
|
284
|
+
"packages/core/src/internal/client-boundary.ts",
|
|
285
|
+
"packages/core/src/bundler/build.ts",
|
|
286
|
+
"packages/core/src/bundler/client-boundary-transform.ts",
|
|
287
|
+
"packages/core/src/router/client-entry.ts",
|
|
288
|
+
"packages/core/src/router/fs-routes.ts",
|
|
289
|
+
"packages/core/src/router/fs-scanner.ts",
|
|
290
|
+
"packages/core/src/client/serialize.ts",
|
|
291
|
+
"packages/core/src/client/props-serialization.ts",
|
|
292
|
+
"packages/core/src/client/runtime-entry.ts",
|
|
293
|
+
].includes(file);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function changedFileReason(file: string): AgentChangedFileReason {
|
|
297
|
+
const normalized = normalizePath(file) ?? file;
|
|
298
|
+
const reasons: string[] = [];
|
|
299
|
+
const recommendedChecks: string[] = [];
|
|
300
300
|
|
|
301
301
|
if (/\.(ts|tsx|js|jsx)$/.test(normalized)) {
|
|
302
302
|
reasons.push("Source code changed.");
|
|
@@ -318,21 +318,21 @@ function changedFileReason(file: string): AgentChangedFileReason {
|
|
|
318
318
|
reasons.push("User-facing documentation changed.");
|
|
319
319
|
recommendedChecks.push("bun run check:docs-drift");
|
|
320
320
|
}
|
|
321
|
-
if (normalized === "package.json" || normalized === "bun.lock" || normalized.endsWith("/package.json")) {
|
|
322
|
-
reasons.push("Package metadata or dependency graph changed.");
|
|
323
|
-
recommendedChecks.push("bun run check:publish");
|
|
324
|
-
}
|
|
325
|
-
if (isHydrationSensitiveEdit(normalized)) {
|
|
326
|
-
reasons.push("Hydration/runtime/client boundary behavior changed.");
|
|
327
|
-
recommendedChecks.push(
|
|
328
|
-
"bun run test:hydration-boundary",
|
|
329
|
-
"bun run test:hydration-e2e",
|
|
330
|
-
"bun run check:publish",
|
|
331
|
-
);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
const internalApi = isInternalApiEdit(normalized);
|
|
335
|
-
if (internalApi) {
|
|
321
|
+
if (normalized === "package.json" || normalized === "bun.lock" || normalized.endsWith("/package.json")) {
|
|
322
|
+
reasons.push("Package metadata or dependency graph changed.");
|
|
323
|
+
recommendedChecks.push("bun run check:publish");
|
|
324
|
+
}
|
|
325
|
+
if (isHydrationSensitiveEdit(normalized)) {
|
|
326
|
+
reasons.push("Hydration/runtime/client boundary behavior changed.");
|
|
327
|
+
recommendedChecks.push(
|
|
328
|
+
"bun run test:hydration-boundary",
|
|
329
|
+
"bun run test:hydration-e2e",
|
|
330
|
+
"bun run check:publish",
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const internalApi = isInternalApiEdit(normalized);
|
|
335
|
+
if (internalApi) {
|
|
336
336
|
reasons.push("Framework internal API changed.");
|
|
337
337
|
recommendedChecks.push("bun run check:public-api && bun run check:target-boundaries");
|
|
338
338
|
}
|
|
@@ -18,11 +18,11 @@ const BCRYPT_PREFIX_RE = /^\$2[aby]\$/;
|
|
|
18
18
|
// Minimum argon2 cost params — keep tests fast without changing behavior.
|
|
19
19
|
const FAST_ARGON2 = {
|
|
20
20
|
algorithm: "argon2id",
|
|
21
|
-
memoryCost:
|
|
21
|
+
memoryCost: 8,
|
|
22
22
|
timeCost: 2,
|
|
23
23
|
} as const;
|
|
24
24
|
|
|
25
|
-
describe("@mandujs/core/auth/password — hashPassword", () => {
|
|
25
|
+
describe("@mandujs/core/compat/auth/password — hashPassword", () => {
|
|
26
26
|
it("produces an argon2id hash by default", async () => {
|
|
27
27
|
const h = await hashPassword("hunter2", FAST_ARGON2);
|
|
28
28
|
expect(h.startsWith(ARGON2ID_PREFIX)).toBe(true);
|
|
@@ -67,14 +67,24 @@ describe("@mandujs/core/auth/password — hashPassword", () => {
|
|
|
67
67
|
// We assert the timeCost is preserved end-to-end.
|
|
68
68
|
const h = await hashPassword("same-password", {
|
|
69
69
|
algorithm: "argon2id",
|
|
70
|
-
memoryCost:
|
|
70
|
+
memoryCost: 8,
|
|
71
71
|
timeCost: 3,
|
|
72
72
|
});
|
|
73
|
-
expect(h).toMatch(/\$argon2id\$v=\d+\$m=
|
|
73
|
+
expect(h).toMatch(/\$argon2id\$v=\d+\$m=8,t=3,p=\d+\$/);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("rejects Argon2 memoryCost values below Bun 1.4's minimum", async () => {
|
|
77
|
+
await expect(
|
|
78
|
+
hashPassword("same-password", {
|
|
79
|
+
algorithm: "argon2id",
|
|
80
|
+
memoryCost: 4,
|
|
81
|
+
timeCost: 2,
|
|
82
|
+
}),
|
|
83
|
+
).rejects.toThrow(/memoryCost must be at least 8/);
|
|
74
84
|
});
|
|
75
85
|
});
|
|
76
86
|
|
|
77
|
-
describe("@mandujs/core/auth/password — verifyPassword", () => {
|
|
87
|
+
describe("@mandujs/core/compat/auth/password — verifyPassword", () => {
|
|
78
88
|
it("returns true for a matching argon2id roundtrip", async () => {
|
|
79
89
|
const h = await hashPassword("correct-horse-battery-staple", FAST_ARGON2);
|
|
80
90
|
const ok = await verifyPassword("correct-horse-battery-staple", h);
|
|
@@ -34,7 +34,7 @@ const SECRET = "reset-flow-test-secret-32-bytes-or-more!!";
|
|
|
34
34
|
const URL_TEMPLATE = "https://app.example.com/reset?token={token}";
|
|
35
35
|
const FROM = "noreply@example.com";
|
|
36
36
|
const ARGON2ID_PREFIX = "$argon2id$";
|
|
37
|
-
const FAST_ARGON2 = { algorithm: "argon2id", memoryCost:
|
|
37
|
+
const FAST_ARGON2 = { algorithm: "argon2id", memoryCost: 8, timeCost: 2 } as const;
|
|
38
38
|
|
|
39
39
|
interface Fixture {
|
|
40
40
|
store: AuthTokenStore;
|
|
@@ -54,7 +54,7 @@ function makeFixture(): Fixture {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
describeIfBun("@mandujs/core/auth/reset — createPasswordReset", () => {
|
|
57
|
+
describeIfBun("@mandujs/core/compat/auth/reset — createPasswordReset", () => {
|
|
58
58
|
let fx: Fixture;
|
|
59
59
|
|
|
60
60
|
beforeEach(() => {
|