@warlock.js/core 5.30.0 → 5.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +165 -36
- package/README.md +28 -23
- package/bin/source-load-hook.mjs +63 -0
- package/bin/warlock.js +102 -42
- package/esm/application/app.d.mts +3 -3
- package/esm/application/app.d.mts.map +1 -1
- package/esm/application/application-config-types.d.mts +1 -2
- package/esm/application/application-config-types.d.mts.map +1 -1
- package/esm/application/application.d.mts +5 -7
- package/esm/application/application.d.mts.map +1 -1
- package/esm/application/application.mjs +3 -1
- package/esm/application/application.mjs.map +1 -1
- package/esm/application/boot-signal.d.mts +14 -12
- package/esm/application/boot-signal.d.mts.map +1 -1
- package/esm/application/index.d.mts +2 -1
- package/esm/application/index.mjs +1 -1
- package/esm/application/public-url.d.mts +1 -2
- package/esm/application/public-url.d.mts.map +1 -1
- package/esm/application/roles.d.mts +10 -11
- package/esm/application/roles.d.mts.map +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts +1 -3
- package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
- package/esm/benchmark/benchmark.d.mts +1 -3
- package/esm/benchmark/benchmark.d.mts.map +1 -1
- package/esm/benchmark/channels/console.channel.d.mts +1 -3
- package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts +1 -3
- package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
- package/esm/benchmark/index.mjs +1 -1
- package/esm/benchmark/profiler.d.mts +1 -3
- package/esm/benchmark/profiler.d.mts.map +1 -1
- package/esm/benchmark/profiler.mjs +2 -1
- package/esm/benchmark/profiler.mjs.map +1 -1
- package/esm/benchmark/types.d.mts +22 -17
- package/esm/benchmark/types.d.mts.map +1 -1
- package/esm/bootstrap/setup.d.mts +1 -2
- package/esm/bootstrap/setup.d.mts.map +1 -1
- package/esm/bootstrap.d.mts +1 -2
- package/esm/bootstrap.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.d.mts +3 -5
- package/esm/cache/database-cache-driver.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.mjs +1 -1
- package/esm/cache/index.d.mts +2 -1
- package/esm/cache/index.mjs +1 -1
- package/esm/cli/cli-commands.manager.mjs +6 -3
- package/esm/cli/cli-commands.manager.mjs.map +1 -1
- package/esm/cli/commands/add.command.mjs +4 -2
- package/esm/cli/commands/add.command.mjs.map +1 -1
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs +70 -0
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -0
- package/esm/cli/commands/agents-md.command.mjs +38 -0
- package/esm/cli/commands/agents-md.command.mjs.map +1 -0
- package/esm/cli/commands/board/board-command.action.mjs +279 -0
- package/esm/cli/commands/board/board-command.action.mjs.map +1 -0
- package/esm/cli/commands/board.command.mjs +78 -0
- package/esm/cli/commands/board.command.mjs.map +1 -0
- package/esm/cli/commands/build.command.mjs +6 -1
- package/esm/cli/commands/build.command.mjs.map +1 -1
- package/esm/cli/commands/check/check-command.action.mjs +57 -0
- package/esm/cli/commands/check/check-command.action.mjs.map +1 -0
- package/esm/cli/commands/check/child-typecheck.mjs +66 -0
- package/esm/cli/commands/check/child-typecheck.mjs.map +1 -0
- package/esm/cli/commands/check/format-problems.mjs +43 -0
- package/esm/cli/commands/check/format-problems.mjs.map +1 -0
- package/esm/cli/commands/check/typecheck-command.action.mjs +61 -0
- package/esm/cli/commands/check/typecheck-command.action.mjs.map +1 -0
- package/esm/cli/commands/check.command.mjs +50 -0
- package/esm/cli/commands/check.command.mjs.map +1 -0
- package/esm/cli/commands/dev-server.command.mjs +12 -3
- package/esm/cli/commands/dev-server.command.mjs.map +1 -1
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +8 -3
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
- package/esm/cli/commands/doctor/check.types.d.mts +89 -0
- package/esm/cli/commands/doctor/check.types.d.mts.map +1 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/connectors.check.mjs +2 -0
- package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/health.check.mjs +3 -0
- package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +23 -27
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +4 -0
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/routes.check.mjs +3 -0
- package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/doctor-command.action.mjs +15 -6
- package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
- package/esm/cli/commands/doctor/format-report.mjs +30 -2
- package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
- package/esm/cli/commands/doctor.command.mjs +4 -0
- package/esm/cli/commands/doctor.command.mjs.map +1 -1
- package/esm/cli/commands/explain/explain-command.action.mjs +64 -0
- package/esm/cli/commands/explain/explain-command.action.mjs.map +1 -0
- package/esm/cli/commands/explain.command.mjs +23 -0
- package/esm/cli/commands/explain.command.mjs.map +1 -0
- package/esm/cli/commands/generate/generate.command.mjs +124 -124
- package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs +5 -2
- package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs +313 -0
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -0
- package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +4 -3
- package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/templates/endpoint-stubs.mjs +341 -0
- package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -0
- package/esm/cli/commands/generate/templates/stubs.mjs +19 -6
- package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs +136 -0
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -0
- package/esm/cli/commands/generate/utils/name-parser.mjs +2 -2
- package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
- package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/writer.mjs +38 -13
- package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
- package/esm/cli/commands/inspect/inspect-command.action.mjs +73 -0
- package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -0
- package/esm/cli/commands/inspect.command.mjs +39 -0
- package/esm/cli/commands/inspect.command.mjs.map +1 -0
- package/esm/cli/commands/issue/collect-environment.mjs +187 -0
- package/esm/cli/commands/issue/collect-environment.mjs.map +1 -0
- package/esm/cli/commands/issue/issue-command.action.mjs +70 -0
- package/esm/cli/commands/issue/issue-command.action.mjs.map +1 -0
- package/esm/cli/commands/issue.command.mjs +31 -0
- package/esm/cli/commands/issue.command.mjs.map +1 -0
- package/esm/cli/commands/mcp/mcp-command.action.mjs +104 -0
- package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -0
- package/esm/cli/commands/mcp.command.mjs +76 -0
- package/esm/cli/commands/mcp.command.mjs.map +1 -0
- package/esm/cli/commands/openapi-generator.action.mjs +1 -1
- package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
- package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
- package/esm/cli/commands/postman-generator.action.mjs +1 -1
- package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
- package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
- package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
- package/esm/cli/commands/routes/route-row.mjs +1 -1
- package/esm/cli/commands/routes/routes-diff.action.mjs +3 -3
- package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
- package/esm/cli/commands/test.command.mjs +131 -0
- package/esm/cli/commands/test.command.mjs.map +1 -0
- package/esm/cli/commands/trace/trace-command.action.mjs +145 -0
- package/esm/cli/commands/trace/trace-command.action.mjs.map +1 -0
- package/esm/cli/commands/trace.command.mjs +60 -0
- package/esm/cli/commands/trace.command.mjs.map +1 -0
- package/esm/cli/commands/typecheck.command.mjs +40 -0
- package/esm/cli/commands/typecheck.command.mjs.map +1 -0
- package/esm/cli/commands/upgrade.command.mjs +46 -0
- package/esm/cli/commands/upgrade.command.mjs.map +1 -0
- package/esm/cli/commands-loader.mjs +1 -1
- package/esm/cli/flush-and-exit.mjs +34 -0
- package/esm/cli/flush-and-exit.mjs.map +1 -0
- package/esm/cli/framework-cli-commands.mjs +25 -1
- package/esm/cli/framework-cli-commands.mjs.map +1 -1
- package/esm/cli/parse-cli-args.mjs +3 -2
- package/esm/cli/parse-cli-args.mjs.map +1 -1
- package/esm/cli/start.d.mts +1 -1
- package/esm/cli/string-similarity.mjs +1 -1
- package/esm/commands/cli-command.d.mts +2 -4
- package/esm/commands/cli-command.d.mts.map +1 -1
- package/esm/commands/index.d.mts +2 -1
- package/esm/commands/index.mjs +1 -1
- package/esm/commands/types.d.mts +8 -8
- package/esm/commands/types.d.mts.map +1 -1
- package/esm/config/config-getter.d.mts +2 -3
- package/esm/config/config-getter.d.mts.map +1 -1
- package/esm/config/config-getter.mjs +5 -5
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-handlers.d.mts +1 -3
- package/esm/config/config-handlers.d.mts.map +1 -1
- package/esm/config/config-loader.d.mts +1 -2
- package/esm/config/config-loader.d.mts.map +1 -1
- package/esm/config/config-loader.mjs +35 -14
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/config/config-manager.mjs +1 -1
- package/esm/config/config-schema.d.mts +70 -0
- package/esm/config/config-schema.d.mts.map +1 -0
- package/esm/config/config-schema.mjs +77 -0
- package/esm/config/config-schema.mjs.map +1 -0
- package/esm/config/config-setter.d.mts +2 -4
- package/esm/config/config-setter.d.mts.map +1 -1
- package/esm/config/config-setter.mjs +2 -2
- package/esm/config/config-setter.mjs.map +1 -1
- package/esm/config/config-special-handlers.d.mts +2 -4
- package/esm/config/config-special-handlers.d.mts.map +1 -1
- package/esm/config/index.d.mts +7 -0
- package/esm/config/index.mjs +2 -1
- package/esm/config/types.d.mts +4 -5
- package/esm/config/types.d.mts.map +1 -1
- package/esm/connectors/access-connector.d.mts +1 -3
- package/esm/connectors/access-connector.d.mts.map +1 -1
- package/esm/connectors/access-connector.mjs +2 -2
- package/esm/connectors/access-connector.mjs.map +1 -1
- package/esm/connectors/ai-connector.d.mts +1 -3
- package/esm/connectors/ai-connector.d.mts.map +1 -1
- package/esm/connectors/ai-connector.mjs +2 -2
- package/esm/connectors/ai-connector.mjs.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -3
- package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.mjs +2 -1
- package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
- package/esm/connectors/assert-unique-connector-names.d.mts +1 -3
- package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-unique-connector-names.mjs +26 -1
- package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
- package/esm/connectors/base-connector.d.mts +1 -3
- package/esm/connectors/base-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.d.mts +1 -3
- package/esm/connectors/cache-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.mjs +3 -3
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/connectors-manager.d.mts +2 -4
- package/esm/connectors/connectors-manager.d.mts.map +1 -1
- package/esm/connectors/connectors-manager.mjs +2 -2
- package/esm/connectors/connectors-manager.mjs.map +1 -1
- package/esm/connectors/database-connector.d.mts +1 -3
- package/esm/connectors/database-connector.d.mts.map +1 -1
- package/esm/connectors/database-connector.mjs +2 -2
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/describe-server-address.mjs +4 -4
- package/esm/connectors/describe-server-address.mjs.map +1 -1
- package/esm/connectors/herald-connector.d.mts +1 -3
- package/esm/connectors/herald-connector.d.mts.map +1 -1
- package/esm/connectors/herald-connector.mjs +2 -2
- package/esm/connectors/herald-connector.mjs.map +1 -1
- package/esm/connectors/http-connector.d.mts +1 -3
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +11 -9
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/index.d.mts +2 -1
- package/esm/connectors/index.mjs +1 -1
- package/esm/connectors/logger-connector.d.mts +1 -3
- package/esm/connectors/logger-connector.d.mts.map +1 -1
- package/esm/connectors/logger-connector.mjs +2 -2
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.d.mts +1 -3
- package/esm/connectors/mail-connector.d.mts.map +1 -1
- package/esm/connectors/mail-connector.mjs +2 -2
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.d.mts +1 -3
- package/esm/connectors/notifications-connector.d.mts.map +1 -1
- package/esm/connectors/notifications-connector.mjs +2 -2
- package/esm/connectors/notifications-connector.mjs.map +1 -1
- package/esm/connectors/register-configured-connectors.d.mts +2 -4
- package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
- package/esm/connectors/single-server-warnings.mjs.map +1 -1
- package/esm/connectors/socket-connector.d.mts +1 -3
- package/esm/connectors/socket-connector.d.mts.map +1 -1
- package/esm/connectors/socket-connector.mjs +12 -10
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/connectors/storage.connector.d.mts +1 -3
- package/esm/connectors/storage.connector.d.mts.map +1 -1
- package/esm/connectors/storage.connector.mjs +2 -2
- package/esm/connectors/storage.connector.mjs.map +1 -1
- package/esm/connectors/types.d.mts +17 -14
- package/esm/connectors/types.d.mts.map +1 -1
- package/esm/container/container-instance-registry.mjs.map +1 -1
- package/esm/container/development-app-modules.d.mts +7 -5
- package/esm/container/development-app-modules.d.mts.map +1 -1
- package/esm/container/development-model-modules.d.mts +6 -5
- package/esm/container/development-model-modules.d.mts.map +1 -1
- package/esm/container/index.d.mts +4 -4
- package/esm/container/index.d.mts.map +1 -1
- package/esm/container/index.mjs.map +1 -1
- package/esm/database/index.d.mts +3 -1
- package/esm/database/index.mjs +1 -1
- package/esm/database/migrate-action.mjs +1 -1
- package/esm/database/migrate-action.mjs.map +1 -1
- package/esm/database/models/database-log/database-log.d.mts +2 -31
- package/esm/database/models/database-log/database-log.d.mts.map +1 -1
- package/esm/database/models/database-log/index.d.mts +2 -1
- package/esm/database/models/database-log/index.mjs +1 -1
- package/esm/database/seed-command-action.mjs +1 -1
- package/esm/database/seeds/seeder.d.mts +2 -4
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.d.mts +6 -3
- package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.mjs +2 -0
- package/esm/database/seeds/seeder.errors.mjs.map +1 -1
- package/esm/database/seeds/seeders.manager.mjs +2 -1
- package/esm/database/seeds/seeders.manager.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +7 -8
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/utils.d.mts +4 -5
- package/esm/database/utils.d.mts.map +1 -1
- package/esm/dev-server/app-module-registry.mjs +1 -1
- package/esm/dev-server/boot-precondition-error.mjs +1 -0
- package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
- package/esm/dev-server/create-worker.mjs +17 -9
- package/esm/dev-server/create-worker.mjs.map +1 -1
- package/esm/dev-server/dependency-graph.d.mts +1 -3
- package/esm/dev-server/dependency-graph.d.mts.map +1 -1
- package/esm/dev-server/dependency-graph.mjs +1 -1
- package/esm/dev-server/dependency-graph.mjs.map +1 -1
- package/esm/dev-server/dev-agent-tooling.mjs +135 -0
- package/esm/dev-server/dev-agent-tooling.mjs.map +1 -0
- package/esm/dev-server/dev-logger.mjs.map +1 -1
- package/esm/dev-server/development-server.mjs +8 -0
- package/esm/dev-server/development-server.mjs.map +1 -1
- package/esm/dev-server/extract-translation-keys.mjs +16 -17
- package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
- package/esm/dev-server/file-manager.d.mts +3 -7
- package/esm/dev-server/file-manager.d.mts.map +1 -1
- package/esm/dev-server/file-operations.d.mts +1 -3
- package/esm/dev-server/file-operations.d.mts.map +1 -1
- package/esm/dev-server/files-orchestrator.mjs +4 -5
- package/esm/dev-server/files-orchestrator.mjs.map +1 -1
- package/esm/dev-server/files-watcher.mjs +12 -11
- package/esm/dev-server/files-watcher.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +2 -3
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs +33 -0
- package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs.map +1 -0
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +36 -115
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/default-health-checkers.mjs +31 -0
- package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -0
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +12 -6
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts +2 -2
- package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs +16 -4
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/oxlint-runner.mjs +303 -0
- package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -0
- package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +1 -1
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -0
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs +42 -0
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs.map +1 -0
- package/esm/dev-server/health-checker/workers/ts-health.worker.d.mts +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +40 -174
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
- package/esm/dev-server/loader/hook-thread.d.mts +4 -8
- package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
- package/esm/dev-server/loader/load-hook.d.mts +10 -6
- package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/load-hook.mjs +4 -3
- package/esm/dev-server/loader/load-hook.mjs.map +1 -1
- package/esm/dev-server/loader/loader-port-acks.mjs +1 -1
- package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -1
- package/esm/dev-server/loader/own-resolver.mjs +1 -1
- package/esm/dev-server/loader/register-loader.mjs +4 -3
- package/esm/dev-server/loader/register-loader.mjs.map +1 -1
- package/esm/dev-server/loader/resolve-hook.d.mts +2 -2
- package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/resolve-hook.mjs +3 -2
- package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +3 -2
- package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
- package/esm/dev-server/manifest-manager.d.mts +1 -3
- package/esm/dev-server/manifest-manager.d.mts.map +1 -1
- package/esm/dev-server/model-module-registry.mjs +3 -3
- package/esm/dev-server/model-module-registry.mjs.map +1 -1
- package/esm/dev-server/model-resource-typings.mjs +40 -47
- package/esm/dev-server/model-resource-typings.mjs.map +1 -1
- package/esm/dev-server/module-loader.mjs +3 -2
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/dev-server/package-json-manager.mjs +1 -1
- package/esm/dev-server/parse-imports.mjs +7 -39
- package/esm/dev-server/parse-imports.mjs.map +1 -1
- package/esm/dev-server/read-config-ast.mjs +3 -33
- package/esm/dev-server/read-config-ast.mjs.map +1 -1
- package/esm/dev-server/ready-block.mjs +1 -1
- package/esm/dev-server/route-types-publisher.mjs +1 -1
- package/esm/dev-server/shortcuts.mjs +1 -1
- package/esm/dev-server/special-files-collector.d.mts +2 -4
- package/esm/dev-server/special-files-collector.d.mts.map +1 -1
- package/esm/dev-server/start-development-server.mjs.map +1 -1
- package/esm/dev-server/supervisor.mjs +1 -1
- package/esm/dev-server/translation-keys-sources.mjs +1 -1
- package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
- package/esm/dev-server/tsconfig-manager.mjs +3 -3
- package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
- package/esm/dev-server/type-generator.mjs +31 -38
- package/esm/dev-server/type-generator.mjs.map +1 -1
- package/esm/dev-server/types.d.mts +3 -4
- package/esm/dev-server/types.d.mts.map +1 -1
- package/esm/dev-server/update-check-cache.mjs +2 -2
- package/esm/dev-server/update-check-cache.mjs.map +1 -1
- package/esm/encryption/encrypt.d.mts +2 -3
- package/esm/encryption/encrypt.d.mts.map +1 -1
- package/esm/encryption/hash.d.mts +1 -2
- package/esm/encryption/hash.d.mts.map +1 -1
- package/esm/encryption/index.mjs +1 -1
- package/esm/encryption/password.d.mts +2 -3
- package/esm/encryption/password.d.mts.map +1 -1
- package/esm/encryption/types.d.mts +2 -3
- package/esm/encryption/types.d.mts.map +1 -1
- package/esm/errors/container-key-missing-error.mjs +1 -0
- package/esm/errors/container-key-missing-error.mjs.map +1 -1
- package/esm/errors/error-codes.d.mts +660 -0
- package/esm/errors/error-codes.d.mts.map +1 -0
- package/esm/errors/error-codes.mjs +634 -0
- package/esm/errors/error-codes.mjs.map +1 -0
- package/esm/errors/esbuild-binary-missing-error.mjs +1 -0
- package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
- package/esm/errors/index.d.mts +3 -1
- package/esm/errors/index.mjs +3 -1
- package/esm/errors/unknown-locale-error.mjs +1 -0
- package/esm/errors/unknown-locale-error.mjs.map +1 -1
- package/esm/errors/warlock-error.d.mts +21 -0
- package/esm/errors/warlock-error.d.mts.map +1 -0
- package/esm/errors/warlock-error.mjs +22 -0
- package/esm/errors/warlock-error.mjs.map +1 -0
- package/esm/generations/add-command.action.mjs +22 -5
- package/esm/generations/add-command.action.mjs.map +1 -1
- package/esm/generations/features/access.feature.mjs +1 -1
- package/esm/generations/features/access.feature.mjs.map +1 -1
- package/esm/generations/features/bull-board.feature.mjs +3 -2
- package/esm/generations/features/bull-board.feature.mjs.map +1 -1
- package/esm/generations/features/mysql.feature.mjs.map +1 -1
- package/esm/generations/features/notifications.feature.mjs +7 -3
- package/esm/generations/features/notifications.feature.mjs.map +1 -1
- package/esm/generations/features/queue.feature.mjs +1 -1
- package/esm/generations/features/queue.feature.mjs.map +1 -1
- package/esm/generations/features/react-email.feature.mjs +1 -1
- package/esm/generations/features/react-email.feature.mjs.map +1 -1
- package/esm/generations/features/shadcn.feature.mjs +1 -1
- package/esm/generations/features/shadcn.feature.mjs.map +1 -1
- package/esm/generations/features/shared/link-ai-package-import.mjs +1 -1
- package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
- package/esm/generations/features/shared/merge-web-sitemap-config.mjs +16 -23
- package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
- package/esm/generations/features/shared/patch-tsconfig-include.mjs +2 -2
- package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
- package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +2 -2
- package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
- package/esm/generations/features/sitemap.feature.mjs +3 -2
- package/esm/generations/features/sitemap.feature.mjs.map +1 -1
- package/esm/generations/features/tailwind.feature.mjs +1 -1
- package/esm/generations/features/tailwind.feature.mjs.map +1 -1
- package/esm/generations/features/test.feature.mjs +11 -6
- package/esm/generations/features/test.feature.mjs.map +1 -1
- package/esm/generations/features/web.feature.mjs +1 -1
- package/esm/generations/features/web.feature.mjs.map +1 -1
- package/esm/generations/generation-fs.mjs +73 -0
- package/esm/generations/generation-fs.mjs.map +1 -0
- package/esm/generations/generation-run.mjs +185 -0
- package/esm/generations/generation-run.mjs.map +1 -0
- package/esm/generations/stubs.mjs +156 -14
- package/esm/generations/stubs.mjs.map +1 -1
- package/esm/http/boot-port-preflight.d.mts +4 -5
- package/esm/http/boot-port-preflight.d.mts.map +1 -1
- package/esm/http/boot-port-preflight.mjs +2 -2
- package/esm/http/boot-port-preflight.mjs.map +1 -1
- package/esm/http/bounded-stream-queue.d.mts +10 -0
- package/esm/http/bounded-stream-queue.d.mts.map +1 -0
- package/esm/http/bounded-stream-queue.mjs +97 -0
- package/esm/http/bounded-stream-queue.mjs.map +1 -0
- package/esm/http/build-cors-options.mjs +2 -2
- package/esm/http/build-cors-options.mjs.map +1 -1
- package/esm/http/build-rate-limit-options.d.mts +15 -3
- package/esm/http/build-rate-limit-options.d.mts.map +1 -1
- package/esm/http/build-rate-limit-options.mjs +1 -1
- package/esm/http/build-rate-limit-options.mjs.map +1 -1
- package/esm/http/conditional-request.d.mts +87 -0
- package/esm/http/conditional-request.d.mts.map +1 -0
- package/esm/http/conditional-request.mjs +121 -0
- package/esm/http/conditional-request.mjs.map +1 -0
- package/esm/http/config.d.mts +2 -4
- package/esm/http/config.d.mts.map +1 -1
- package/esm/http/config.mjs +2 -2
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/context/request-context.d.mts +6 -7
- package/esm/http/context/request-context.d.mts.map +1 -1
- package/esm/http/context/request-memo.d.mts +1 -2
- package/esm/http/context/request-memo.d.mts.map +1 -1
- package/esm/http/createHttpApplication.d.mts +2 -3
- package/esm/http/createHttpApplication.d.mts.map +1 -1
- package/esm/http/createHttpApplication.mjs +2 -2
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/csp.d.mts +12 -12
- package/esm/http/csp.d.mts.map +1 -1
- package/esm/http/csp.mjs +3 -2
- package/esm/http/csp.mjs.map +1 -1
- package/esm/http/csrf-default-guard.d.mts +2 -4
- package/esm/http/csrf-default-guard.d.mts.map +1 -1
- package/esm/http/csrf-default-guard.mjs +1 -1
- package/esm/http/csrf-default-guard.mjs.map +1 -1
- package/esm/http/csrf-origin-policy.d.mts +7 -9
- package/esm/http/csrf-origin-policy.d.mts.map +1 -1
- package/esm/http/csrf-origin-policy.mjs +2 -2
- package/esm/http/csrf-origin-policy.mjs.map +1 -1
- package/esm/http/database/RequestLog.d.mts +26 -87
- package/esm/http/database/RequestLog.d.mts.map +1 -1
- package/esm/http/error-codes.d.mts +1 -2
- package/esm/http/error-codes.d.mts.map +1 -1
- package/esm/http/error-mapper.d.mts +2 -4
- package/esm/http/error-mapper.d.mts.map +1 -1
- package/esm/http/error-mapper.mjs +2 -2
- package/esm/http/error-mapper.mjs.map +1 -1
- package/esm/http/errors/errors.d.mts +30 -29
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/errors/errors.mjs +1 -0
- package/esm/http/errors/errors.mjs.map +1 -1
- package/esm/http/escape-header-value.d.mts +17 -0
- package/esm/http/escape-header-value.d.mts.map +1 -0
- package/esm/http/escape-header-value.mjs +27 -0
- package/esm/http/escape-header-value.mjs.map +1 -0
- package/esm/http/events.d.mts +2 -4
- package/esm/http/events.d.mts.map +1 -1
- package/esm/http/flush-pending-cookies.mjs.map +1 -1
- package/esm/http/health.d.mts +4 -4
- package/esm/http/health.d.mts.map +1 -1
- package/esm/http/index.d.mts +9 -3
- package/esm/http/index.mjs +5 -2
- package/esm/http/lazy-static.mjs +194 -0
- package/esm/http/lazy-static.mjs.map +1 -0
- package/esm/http/middleware/cache-response-middleware.d.mts +2 -4
- package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts +3 -3
- package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts +3 -3
- package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +6 -6
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/index.d.mts +3 -1
- package/esm/http/middleware/index.mjs +1 -1
- package/esm/http/middleware/inject-request-context.d.mts +2 -4
- package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +3 -3
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts +3 -3
- package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts +3 -3
- package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +4 -4
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts +2 -2
- package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
- package/esm/http/middleware/middleware-list.d.mts +1 -3
- package/esm/http/middleware/middleware-list.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts +3 -3
- package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs +2 -2
- package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts +2 -3
- package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts +3 -5
- package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
- package/esm/http/middleware/utils/index.d.mts +2 -1
- package/esm/http/middleware/utils/parse-size.d.mts +1 -2
- package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
- package/esm/http/middleware/utils/parse-size.mjs +2 -2
- package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
- package/esm/http/plugins.d.mts +2 -4
- package/esm/http/plugins.d.mts.map +1 -1
- package/esm/http/plugins.mjs +17 -14
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/port-preflight.d.mts +3 -4
- package/esm/http/port-preflight.d.mts.map +1 -1
- package/esm/http/rate-limit-cache-store.mjs +6 -4
- package/esm/http/rate-limit-cache-store.mjs.map +1 -1
- package/esm/http/ready-report.d.mts +15 -10
- package/esm/http/ready-report.d.mts.map +1 -1
- package/esm/http/request-controller.d.mts +1 -3
- package/esm/http/request-controller.d.mts.map +1 -1
- package/esm/http/request-log-snapshot.d.mts +26 -15
- package/esm/http/request-log-snapshot.d.mts.map +1 -1
- package/esm/http/request-log-snapshot.mjs +85 -6
- package/esm/http/request-log-snapshot.mjs.map +1 -1
- package/esm/http/request.d.mts +6 -5
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +13 -11
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/response.d.mts +23 -12
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +169 -81
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/safe-redirect.d.mts +50 -0
- package/esm/http/safe-redirect.d.mts.map +1 -0
- package/esm/http/safe-redirect.mjs +80 -0
- package/esm/http/safe-redirect.mjs.map +1 -0
- package/esm/http/serialized.d.mts +12 -13
- package/esm/http/serialized.d.mts.map +1 -1
- package/esm/http/server-rebuilt.d.mts +3 -5
- package/esm/http/server-rebuilt.d.mts.map +1 -1
- package/esm/http/server.d.mts +11 -9
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +17 -7
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/stream-react-response.d.mts +7 -7
- package/esm/http/stream-react-response.d.mts.map +1 -1
- package/esm/http/stream-transport.mjs +4 -2
- package/esm/http/stream-transport.mjs.map +1 -1
- package/esm/http/tracing/index.mjs +1 -1
- package/esm/http/tracing/trace-id.d.mts +2 -3
- package/esm/http/tracing/trace-id.d.mts.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.d.mts +10 -11
- package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.mjs +2 -2
- package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
- package/esm/http/tracing/tracing.type.d.mts +11 -9
- package/esm/http/tracing/tracing.type.d.mts.map +1 -1
- package/esm/http/types.d.mts +78 -39
- package/esm/http/types.d.mts.map +1 -1
- package/esm/http/uploaded-file.d.mts +6 -5
- package/esm/http/uploaded-file.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variant.mjs +1 -1
- package/esm/http/uploads/generate-image-variants.d.mts +13 -10
- package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variants.mjs +62 -25
- package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
- package/esm/http/uploads/image-variant-cache-entries.mjs +78 -0
- package/esm/http/uploads/image-variant-cache-entries.mjs.map +1 -0
- package/esm/http/uploads/image-variant-cache.mjs +72 -30
- package/esm/http/uploads/image-variant-cache.mjs.map +1 -1
- package/esm/http/uploads/image-variant-types.d.mts +9 -9
- package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.d.mts +4 -3
- package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.mjs +3 -2
- package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
- package/esm/http/uploads/index.d.mts +2 -1
- package/esm/http/uploads/index.mjs +1 -1
- package/esm/http/uploads/load-variant-source.mjs +1 -1
- package/esm/http/uploads/load-variant-source.mjs.map +1 -1
- package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
- package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
- package/esm/http/uploads/purge-image-variants.d.mts +9 -6
- package/esm/http/uploads/purge-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/purge-image-variants.mjs +16 -16
- package/esm/http/uploads/purge-image-variants.mjs.map +1 -1
- package/esm/http/uploads/remote-variant-source.mjs +115 -0
- package/esm/http/uploads/remote-variant-source.mjs.map +1 -0
- package/esm/http/uploads/resolve-image-variant.d.mts +6 -9
- package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -1
- package/esm/http/uploads/resolve-image-variant.mjs +10 -18
- package/esm/http/uploads/resolve-image-variant.mjs.map +1 -1
- package/esm/http/uploads/resolve-image-variants-config.mjs +7 -5
- package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
- package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
- package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
- package/esm/http/uploads/resolve-remote-image-variant.mjs +89 -0
- package/esm/http/uploads/resolve-remote-image-variant.mjs.map +1 -0
- package/esm/http/uploads/trim-image-variant-cache.mjs +193 -0
- package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -0
- package/esm/http/uploads/uploaded-file.controller.d.mts +9 -6
- package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
- package/esm/http/uploads/uploaded-file.controller.mjs +18 -9
- package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
- package/esm/http/uploads/variant-cache-key.mjs +2 -2
- package/esm/http/uploads-config.d.mts +2 -4
- package/esm/http/uploads-config.d.mts.map +1 -1
- package/esm/http/uploads-types.d.mts +22 -16
- package/esm/http/uploads-types.d.mts.map +1 -1
- package/esm/http/xmlable.d.mts +1 -2
- package/esm/http/xmlable.d.mts.map +1 -1
- package/esm/image/image.d.mts +6 -7
- package/esm/image/image.d.mts.map +1 -1
- package/esm/image/image.mjs.map +1 -1
- package/esm/image/index.d.mts +2 -1
- package/esm/image/index.mjs +1 -1
- package/esm/index.d.mts +38 -6
- package/esm/index.mjs +14 -3
- package/esm/loader/app-module-importer.d.mts +1 -2
- package/esm/loader/app-module-importer.d.mts.map +1 -1
- package/esm/localization/index.mjs +1 -1
- package/esm/localization/parse-locale-dictionary.d.mts +6 -5
- package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/parse-locale-dictionary.mjs +2 -1
- package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
- package/esm/localization/register-locale-dictionary.d.mts +3 -4
- package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/register-locale-dictionary.mjs +2 -2
- package/esm/localization/register-locale-dictionary.mjs.map +1 -1
- package/esm/logger/fatal-visibility.d.mts +1 -2
- package/esm/logger/fatal-visibility.d.mts.map +1 -1
- package/esm/logger/index.d.mts +2 -1
- package/esm/logger/index.mjs +1 -1
- package/esm/logger/logger.d.mts +1 -3
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/types.d.mts +2 -3
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +21 -12
- package/esm/mail/config.d.mts.map +1 -1
- package/esm/mail/config.mjs +16 -1
- package/esm/mail/config.mjs.map +1 -1
- package/esm/mail/events.d.mts +4 -6
- package/esm/mail/events.d.mts.map +1 -1
- package/esm/mail/index.d.mts +3 -2
- package/esm/mail/index.mjs +2 -2
- package/esm/mail/mail.d.mts +1 -3
- package/esm/mail/mail.d.mts.map +1 -1
- package/esm/mail/mailer-pool.d.mts +5 -7
- package/esm/mail/mailer-pool.d.mts.map +1 -1
- package/esm/mail/react-mail.d.mts +1 -3
- package/esm/mail/react-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.d.mts +1 -3
- package/esm/mail/send-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.mjs +2 -1
- package/esm/mail/send-mail.mjs.map +1 -1
- package/esm/mail/test-mailbox.d.mts +11 -13
- package/esm/mail/test-mailbox.d.mts.map +1 -1
- package/esm/mail/types.d.mts +17 -18
- package/esm/mail/types.d.mts.map +1 -1
- package/esm/manifest/manifest-manager.mjs +1 -1
- package/esm/net/index.d.mts +2 -0
- package/esm/net/index.mjs +3 -0
- package/esm/openapi/build-openapi-document.d.mts +2 -4
- package/esm/openapi/build-openapi-document.d.mts.map +1 -1
- package/esm/openapi/build-openapi-document.mjs +8 -5
- package/esm/openapi/build-openapi-document.mjs.map +1 -1
- package/esm/openapi/cast-schema.mjs +1 -1
- package/esm/openapi/development-openapi-provider.d.mts +5 -6
- package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
- package/esm/openapi/error-responses.mjs +28 -2
- package/esm/openapi/error-responses.mjs.map +1 -1
- package/esm/openapi/index.d.mts +3 -1
- package/esm/openapi/index.mjs +1 -1
- package/esm/openapi/openapi-child-output.mjs +2 -2
- package/esm/openapi/openapi-child-output.mjs.map +1 -1
- package/esm/openapi/postman/build-request-body.mjs.map +1 -1
- package/esm/openapi/postman/build-request-url.mjs +1 -1
- package/esm/openapi/postman/build-request-url.mjs.map +1 -1
- package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
- package/esm/openapi/postman/example-from-schema.d.mts +1 -3
- package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
- package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
- package/esm/openapi/postman/index.d.mts +2 -1
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts +3 -5
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
- package/esm/openapi/postman/postman-types.d.mts +19 -18
- package/esm/openapi/postman/postman-types.d.mts.map +1 -1
- package/esm/openapi/postman/schema-refs.d.mts +1 -3
- package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
- package/esm/openapi/postman/schema-refs.mjs.map +1 -1
- package/esm/openapi/postman/uuid-v5.mjs +1 -1
- package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
- package/esm/openapi/request-schemas.mjs.map +1 -1
- package/esm/openapi/response-schemas.mjs.map +1 -1
- package/esm/openapi/schema-registry.d.mts +1 -0
- package/esm/openapi/schema-registry.mjs.map +1 -1
- package/esm/openapi/security.mjs +1 -1
- package/esm/openapi/security.mjs.map +1 -1
- package/esm/openapi/types.d.mts +23 -20
- package/esm/openapi/types.d.mts.map +1 -1
- package/esm/production/assert-generated-imports.mjs +2 -1
- package/esm/production/assert-generated-imports.mjs.map +1 -1
- package/esm/production/build-contributions.mjs +1 -1
- package/esm/production/bundle-framework-dependencies.mjs +1 -1
- package/esm/production/dist-build-manifest.mjs +1 -1
- package/esm/production/esbuild-plugins.mjs.map +1 -1
- package/esm/production/esbuild-preflight.mjs +1 -1
- package/esm/production/production-builder.mjs +14 -5
- package/esm/production/production-builder.mjs.map +1 -1
- package/esm/production/production-supervisor.mjs +1 -1
- package/esm/production/registration-child-runner.mjs +4 -3
- package/esm/production/registration-child-runner.mjs.map +1 -1
- package/esm/production/resolve-build-config.d.mts +4 -4
- package/esm/production/resolve-build-config.d.mts.map +1 -1
- package/esm/production/resolve-build-config.mjs +2 -1
- package/esm/production/resolve-build-config.mjs.map +1 -1
- package/esm/production/route-registration-child.d.mts +1 -1
- package/esm/production/route-registration-child.mjs +8 -7
- package/esm/production/route-registration-child.mjs.map +1 -1
- package/esm/production/route-registration-snapshot.mjs.map +1 -1
- package/esm/production/tsconfig-path-aliases.mjs +1 -1
- package/esm/react/index.d.mts +1 -3
- package/esm/react/index.d.mts.map +1 -1
- package/esm/react/index.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +3 -4
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +2 -3
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs +10 -9
- package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/index.d.mts +2 -1
- package/esm/repositories/adapters/cascade/index.mjs +1 -1
- package/esm/repositories/contracts/index.d.mts +2 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +4 -6
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -3
- package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/types.d.mts +23 -25
- package/esm/repositories/contracts/types.d.mts.map +1 -1
- package/esm/repositories/index.d.mts +4 -1
- package/esm/repositories/index.mjs +1 -1
- package/esm/repositories/repository.manager.d.mts +2 -3
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +2 -2
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/resource/define-resource.d.mts +3 -5
- package/esm/resource/define-resource.d.mts.map +1 -1
- package/esm/resource/index.d.mts +2 -1
- package/esm/resource/index.mjs +1 -1
- package/esm/resource/nullable-resource.d.mts +5 -7
- package/esm/resource/nullable-resource.d.mts.map +1 -1
- package/esm/resource/register-resource.d.mts +1 -3
- package/esm/resource/register-resource.d.mts.map +1 -1
- package/esm/resource/resource-field-builder.d.mts +1 -3
- package/esm/resource/resource-field-builder.d.mts.map +1 -1
- package/esm/resource/resource.d.mts +3 -5
- package/esm/resource/resource.d.mts.map +1 -1
- package/esm/resource/resource.mjs +4 -2
- package/esm/resource/resource.mjs.map +1 -1
- package/esm/resource/types.d.mts +21 -21
- package/esm/resource/types.d.mts.map +1 -1
- package/esm/restful/index.d.mts +2 -1
- package/esm/restful/index.mjs +1 -1
- package/esm/restful/restful.d.mts +11 -31
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/restful/restful.mjs.map +1 -1
- package/esm/router/build-route-rate-limit.mjs.map +1 -1
- package/esm/router/dev-dispatch.mjs +31 -12
- package/esm/router/dev-dispatch.mjs.map +1 -1
- package/esm/router/index.d.mts +5 -2
- package/esm/router/index.mjs +3 -1
- package/esm/router/log-request-lifecycle.mjs.map +1 -1
- package/esm/router/named-api-routes-with-responses.mjs +2 -1
- package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
- package/esm/router/normalize-request-path.d.mts +1 -2
- package/esm/router/normalize-request-path.d.mts.map +1 -1
- package/esm/router/normalize-route-path.d.mts +1 -2
- package/esm/router/normalize-route-path.d.mts.map +1 -1
- package/esm/router/positional-handler-diagnostics.d.mts +15 -13
- package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
- package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
- package/esm/router/resolve-route-rate-limit.mjs +47 -0
- package/esm/router/resolve-route-rate-limit.mjs.map +1 -0
- package/esm/router/resolve-route-validation.mjs +19 -0
- package/esm/router/resolve-route-validation.mjs.map +1 -0
- package/esm/router/route-builder.d.mts +1 -3
- package/esm/router/route-builder.d.mts.map +1 -1
- package/esm/router/route-guard-names.mjs +30 -0
- package/esm/router/route-guard-names.mjs.map +1 -0
- package/esm/router/route-name-method-suffix.d.mts +2 -3
- package/esm/router/route-name-method-suffix.d.mts.map +1 -1
- package/esm/router/route-name-taken-error.d.mts +12 -0
- package/esm/router/route-name-taken-error.d.mts.map +1 -0
- package/esm/router/route-name-taken-error.mjs +18 -0
- package/esm/router/route-name-taken-error.mjs.map +1 -0
- package/esm/router/route-registry.d.mts +1 -3
- package/esm/router/route-registry.d.mts.map +1 -1
- package/esm/router/router.d.mts +34 -17
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +74 -39
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +156 -37
- package/esm/router/types.d.mts.map +1 -1
- package/esm/router/unguarded-route-diagnostics.d.mts +38 -0
- package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -0
- package/esm/router/unguarded-route-diagnostics.mjs +95 -0
- package/esm/router/unguarded-route-diagnostics.mjs.map +1 -0
- package/esm/socket/index.d.mts +2 -1
- package/esm/socket/index.mjs +1 -1
- package/esm/socket/types.d.mts +2 -4
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +1 -3
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/storage/config.d.mts +4 -6
- package/esm/storage/config.d.mts.map +1 -1
- package/esm/storage/context/storage-driver-context.d.mts +3 -4
- package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts +2 -4
- package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts +1 -3
- package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.d.mts +2 -3
- package/esm/storage/drivers/local-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.mjs +8 -3
- package/esm/storage/drivers/local-driver.mjs.map +1 -1
- package/esm/storage/drivers/r2-driver.d.mts +1 -3
- package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
- package/esm/storage/drivers/s3-driver.d.mts +1 -3
- package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
- package/esm/storage/index.d.mts +2 -1
- package/esm/storage/index.mjs +1 -1
- package/esm/storage/local-disk-roots.mjs +24 -0
- package/esm/storage/local-disk-roots.mjs.map +1 -0
- package/esm/storage/scoped-storage.d.mts +2 -3
- package/esm/storage/scoped-storage.d.mts.map +1 -1
- package/esm/storage/storage-file.d.mts +1 -3
- package/esm/storage/storage-file.d.mts.map +1 -1
- package/esm/storage/storage.d.mts +17 -4
- package/esm/storage/storage.d.mts.map +1 -1
- package/esm/storage/storage.mjs +22 -0
- package/esm/storage/storage.mjs.map +1 -1
- package/esm/storage/types.d.mts +36 -36
- package/esm/storage/types.d.mts.map +1 -1
- package/esm/storage/utils/classify-ip-address.d.mts +1 -2
- package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
- package/esm/storage/utils/contain-path.d.mts +1 -2
- package/esm/storage/utils/contain-path.d.mts.map +1 -1
- package/esm/storage/utils/mime.d.mts +2 -3
- package/esm/storage/utils/mime.d.mts.map +1 -1
- package/esm/storage/utils/safe-fetch.d.mts +6 -6
- package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
- package/esm/storage/utils/safe-fetch.mjs +3 -3
- package/esm/storage/utils/safe-fetch.mjs.map +1 -1
- package/esm/storage/utils/storage-capability-error.d.mts +1 -3
- package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-error.d.mts +2 -3
- package/esm/storage/utils/storage-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.d.mts +3 -2
- package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.mjs +1 -0
- package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
- package/esm/tests/authenticated-test-client.d.mts +31 -0
- package/esm/tests/authenticated-test-client.d.mts.map +1 -0
- package/esm/tests/authenticated-test-client.mjs +40 -0
- package/esm/tests/authenticated-test-client.mjs.map +1 -0
- package/esm/tests/factories.d.mts +74 -0
- package/esm/tests/factories.d.mts.map +1 -0
- package/esm/tests/factories.mjs +105 -0
- package/esm/tests/factories.mjs.map +1 -0
- package/esm/tests/fakes/cache-fake.d.mts +34 -0
- package/esm/tests/fakes/cache-fake.d.mts.map +1 -0
- package/esm/tests/fakes/cache-fake.mjs +79 -0
- package/esm/tests/fakes/cache-fake.mjs.map +1 -0
- package/esm/tests/fakes/clock-fake.d.mts +37 -0
- package/esm/tests/fakes/clock-fake.d.mts.map +1 -0
- package/esm/tests/fakes/clock-fake.mjs +69 -0
- package/esm/tests/fakes/clock-fake.mjs.map +1 -0
- package/esm/tests/fakes/fake-assertion-error.d.mts +12 -0
- package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -0
- package/esm/tests/fakes/fake-assertion-error.mjs +20 -0
- package/esm/tests/fakes/fake-assertion-error.mjs.map +1 -0
- package/esm/tests/fakes/ids-fake.d.mts +23 -0
- package/esm/tests/fakes/ids-fake.d.mts.map +1 -0
- package/esm/tests/fakes/ids-fake.mjs +57 -0
- package/esm/tests/fakes/ids-fake.mjs.map +1 -0
- package/esm/tests/fakes/index.d.mts +9 -0
- package/esm/tests/fakes/index.mjs +10 -0
- package/esm/tests/fakes/mail-fake.d.mts +49 -0
- package/esm/tests/fakes/mail-fake.d.mts.map +1 -0
- package/esm/tests/fakes/mail-fake.mjs +111 -0
- package/esm/tests/fakes/mail-fake.mjs.map +1 -0
- package/esm/tests/fakes/queue-fake.d.mts +56 -0
- package/esm/tests/fakes/queue-fake.d.mts.map +1 -0
- package/esm/tests/fakes/queue-fake.mjs +134 -0
- package/esm/tests/fakes/queue-fake.mjs.map +1 -0
- package/esm/tests/fakes/storage-fake.d.mts +35 -0
- package/esm/tests/fakes/storage-fake.d.mts.map +1 -0
- package/esm/tests/fakes/storage-fake.mjs +122 -0
- package/esm/tests/fakes/storage-fake.mjs.map +1 -0
- package/esm/tests/fakes/test-fakes.d.mts +38 -0
- package/esm/tests/fakes/test-fakes.d.mts.map +1 -0
- package/esm/tests/fakes/test-fakes.mjs +90 -0
- package/esm/tests/fakes/test-fakes.mjs.map +1 -0
- package/esm/tests/index.d.mts +15 -2
- package/esm/tests/index.mjs +15 -2
- package/esm/tests/snapshot-response.d.mts +33 -0
- package/esm/tests/snapshot-response.d.mts.map +1 -0
- package/esm/tests/snapshot-response.mjs +42 -0
- package/esm/tests/snapshot-response.mjs.map +1 -0
- package/esm/tests/start-http-development-server.d.mts +25 -5
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +41 -8
- package/esm/tests/start-http-development-server.mjs.map +1 -1
- package/esm/tests/test-connectors-selection.d.mts +2 -2
- package/esm/tests/test-connectors-selection.d.mts.map +1 -1
- package/esm/tests/test-connectors-selection.mjs +1 -1
- package/esm/tests/test-helpers.d.mts +28 -10
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-helpers.mjs +40 -27
- package/esm/tests/test-helpers.mjs.map +1 -1
- package/esm/tests/test-http-server.d.mts +66 -0
- package/esm/tests/test-http-server.d.mts.map +1 -0
- package/esm/tests/test-http-server.mjs +119 -0
- package/esm/tests/test-http-server.mjs.map +1 -0
- package/esm/tests/test-lifecycle-state.mjs +1 -1
- package/esm/tests/vitest-setup.d.mts +17 -7
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs +12 -4
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/tooling/agents-md/agents-md-markers.d.mts +26 -0
- package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs +60 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -0
- package/esm/tooling/agents-md/agents-md-refresher.d.mts +43 -0
- package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -0
- package/esm/tooling/agents-md/agents-md-refresher.mjs +72 -0
- package/esm/tooling/agents-md/agents-md-refresher.mjs.map +1 -0
- package/esm/tooling/agents-md/index.mjs +7 -0
- package/esm/tooling/agents-md/installed-skills.d.mts +34 -0
- package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -0
- package/esm/tooling/agents-md/installed-skills.mjs +74 -0
- package/esm/tooling/agents-md/installed-skills.mjs.map +1 -0
- package/esm/tooling/agents-md/render-agents-md.d.mts +34 -0
- package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -0
- package/esm/tooling/agents-md/render-agents-md.mjs +195 -0
- package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -0
- package/esm/tooling/agents-md/write-agents-md.d.mts +38 -0
- package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -0
- package/esm/tooling/agents-md/write-agents-md.mjs +49 -0
- package/esm/tooling/agents-md/write-agents-md.mjs.map +1 -0
- package/esm/tooling/board/board-message.d.mts +29 -0
- package/esm/tooling/board/board-message.d.mts.map +1 -0
- package/esm/tooling/board/board-message.mjs +86 -0
- package/esm/tooling/board/board-message.mjs.map +1 -0
- package/esm/tooling/board/board.d.mts +121 -0
- package/esm/tooling/board/board.d.mts.map +1 -0
- package/esm/tooling/board/board.mjs +407 -0
- package/esm/tooling/board/board.mjs.map +1 -0
- package/esm/tooling/board/board.types.d.mts +81 -0
- package/esm/tooling/board/board.types.d.mts.map +1 -0
- package/esm/tooling/board/board.types.mjs +54 -0
- package/esm/tooling/board/board.types.mjs.map +1 -0
- package/esm/tooling/check/changed-files.d.mts +31 -0
- package/esm/tooling/check/changed-files.d.mts.map +1 -0
- package/esm/tooling/check/changed-files.mjs +73 -0
- package/esm/tooling/check/changed-files.mjs.map +1 -0
- package/esm/tooling/check/check-report.types.d.mts +67 -0
- package/esm/tooling/check/check-report.types.d.mts.map +1 -0
- package/esm/tooling/check/check-report.types.mjs +37 -0
- package/esm/tooling/check/check-report.types.mjs.map +1 -0
- package/esm/tooling/check/code-style-conventions.mjs +106 -0
- package/esm/tooling/check/code-style-conventions.mjs.map +1 -0
- package/esm/tooling/check/conventions-step.d.mts +32 -0
- package/esm/tooling/check/conventions-step.d.mts.map +1 -0
- package/esm/tooling/check/conventions-step.mjs +173 -0
- package/esm/tooling/check/conventions-step.mjs.map +1 -0
- package/esm/tooling/check/environment-step.d.mts +16 -0
- package/esm/tooling/check/environment-step.d.mts.map +1 -0
- package/esm/tooling/check/environment-step.mjs +78 -0
- package/esm/tooling/check/environment-step.mjs.map +1 -0
- package/esm/tooling/check/index.mjs +10 -0
- package/esm/tooling/check/lint-step.d.mts +18 -0
- package/esm/tooling/check/lint-step.d.mts.map +1 -0
- package/esm/tooling/check/lint-step.mjs +112 -0
- package/esm/tooling/check/lint-step.mjs.map +1 -0
- package/esm/tooling/check/request-input.mjs +132 -0
- package/esm/tooling/check/request-input.mjs.map +1 -0
- package/esm/tooling/check/run-check.d.mts +43 -0
- package/esm/tooling/check/run-check.d.mts.map +1 -0
- package/esm/tooling/check/run-check.mjs +192 -0
- package/esm/tooling/check/run-check.mjs.map +1 -0
- package/esm/tooling/check/run-tests.d.mts +55 -0
- package/esm/tooling/check/run-tests.d.mts.map +1 -0
- package/esm/tooling/check/run-tests.mjs +93 -0
- package/esm/tooling/check/run-tests.mjs.map +1 -0
- package/esm/tooling/check/security-conventions.mjs +650 -0
- package/esm/tooling/check/security-conventions.mjs.map +1 -0
- package/esm/tooling/check/source-ast.mjs +155 -0
- package/esm/tooling/check/source-ast.mjs.map +1 -0
- package/esm/tooling/check/source-files.mjs +27 -0
- package/esm/tooling/check/source-files.mjs.map +1 -0
- package/esm/tooling/check/tests-step.d.mts +33 -0
- package/esm/tooling/check/tests-step.d.mts.map +1 -0
- package/esm/tooling/check/tests-step.mjs +177 -0
- package/esm/tooling/check/tests-step.mjs.map +1 -0
- package/esm/tooling/dev-state/dev-server-state.d.mts +43 -0
- package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -0
- package/esm/tooling/dev-state/dev-server-state.mjs +67 -0
- package/esm/tooling/dev-state/dev-server-state.mjs.map +1 -0
- package/esm/tooling/devtools/devtools-client.d.mts +100 -0
- package/esm/tooling/devtools/devtools-client.d.mts.map +1 -0
- package/esm/tooling/devtools/devtools-client.mjs +155 -0
- package/esm/tooling/devtools/devtools-client.mjs.map +1 -0
- package/esm/tooling/generate/generation.d.mts +90 -0
- package/esm/tooling/generate/generation.d.mts.map +1 -0
- package/esm/tooling/generate/generation.mjs +127 -0
- package/esm/tooling/generate/generation.mjs.map +1 -0
- package/esm/tooling/generate/generator-spec.d.mts +57 -0
- package/esm/tooling/generate/generator-spec.d.mts.map +1 -0
- package/esm/tooling/generate/generator-spec.mjs +102 -0
- package/esm/tooling/generate/generator-spec.mjs.map +1 -0
- package/esm/tooling/generate/index.mjs +6 -0
- package/esm/tooling/generate/project-files.mjs +121 -0
- package/esm/tooling/generate/project-files.mjs.map +1 -0
- package/esm/tooling/generate/run-cli.d.mts +43 -0
- package/esm/tooling/generate/run-cli.d.mts.map +1 -0
- package/esm/tooling/generate/run-cli.mjs +93 -0
- package/esm/tooling/generate/run-cli.mjs.map +1 -0
- package/esm/tooling/generate/unified-diff.d.mts +40 -0
- package/esm/tooling/generate/unified-diff.d.mts.map +1 -0
- package/esm/tooling/generate/unified-diff.mjs +161 -0
- package/esm/tooling/generate/unified-diff.mjs.map +1 -0
- package/esm/tooling/index.d.mts +42 -0
- package/esm/tooling/index.mjs +45 -0
- package/esm/tooling/inspect/boot-for-inspect.d.mts +23 -0
- package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -0
- package/esm/tooling/inspect/boot-for-inspect.mjs +63 -0
- package/esm/tooling/inspect/boot-for-inspect.mjs.map +1 -0
- package/esm/tooling/inspect/collect-config.mjs +77 -0
- package/esm/tooling/inspect/collect-config.mjs.map +1 -0
- package/esm/tooling/inspect/collect-models.d.mts +10 -0
- package/esm/tooling/inspect/collect-models.d.mts.map +1 -0
- package/esm/tooling/inspect/collect-models.mjs +154 -0
- package/esm/tooling/inspect/collect-models.mjs.map +1 -0
- package/esm/tooling/inspect/collect-packages.d.mts +9 -0
- package/esm/tooling/inspect/collect-packages.d.mts.map +1 -0
- package/esm/tooling/inspect/collect-packages.mjs +157 -0
- package/esm/tooling/inspect/collect-packages.mjs.map +1 -0
- package/esm/tooling/inspect/collect-pages.mjs +108 -0
- package/esm/tooling/inspect/collect-pages.mjs.map +1 -0
- package/esm/tooling/inspect/collect-routes.mjs +168 -0
- package/esm/tooling/inspect/collect-routes.mjs.map +1 -0
- package/esm/tooling/inspect/event-recorder.d.mts +37 -0
- package/esm/tooling/inspect/event-recorder.d.mts.map +1 -0
- package/esm/tooling/inspect/event-recorder.mjs +91 -0
- package/esm/tooling/inspect/event-recorder.mjs.map +1 -0
- package/esm/tooling/inspect/index.d.mts +8 -0
- package/esm/tooling/inspect/index.mjs +7 -0
- package/esm/tooling/inspect/inspect-app.d.mts +62 -0
- package/esm/tooling/inspect/inspect-app.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-app.mjs +92 -0
- package/esm/tooling/inspect/inspect-app.mjs.map +1 -0
- package/esm/tooling/inspect/inspect-report.schema.d.mts +14 -0
- package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-report.schema.mjs +463 -0
- package/esm/tooling/inspect/inspect-report.schema.mjs.map +1 -0
- package/esm/tooling/inspect/inspect-report.types.d.mts +228 -0
- package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-report.types.mjs +33 -0
- package/esm/tooling/inspect/inspect-report.types.mjs.map +1 -0
- package/esm/tooling/mcp/create-mcp-context.d.mts +29 -0
- package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -0
- package/esm/tooling/mcp/create-mcp-context.mjs +75 -0
- package/esm/tooling/mcp/create-mcp-context.mjs.map +1 -0
- package/esm/tooling/mcp/db-schema.d.mts +50 -0
- package/esm/tooling/mcp/db-schema.d.mts.map +1 -0
- package/esm/tooling/mcp/db-schema.mjs +56 -0
- package/esm/tooling/mcp/db-schema.mjs.map +1 -0
- package/esm/tooling/mcp/docs-search.d.mts +77 -0
- package/esm/tooling/mcp/docs-search.d.mts.map +1 -0
- package/esm/tooling/mcp/docs-search.mjs +178 -0
- package/esm/tooling/mcp/docs-search.mjs.map +1 -0
- package/esm/tooling/mcp/index.mjs +9 -0
- package/esm/tooling/mcp/load-ai-tools.d.mts +61 -0
- package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/load-ai-tools.mjs +45 -0
- package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -0
- package/esm/tooling/mcp/mcp-tools.d.mts +70 -0
- package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/mcp-tools.mjs +514 -0
- package/esm/tooling/mcp/mcp-tools.mjs.map +1 -0
- package/esm/tooling/mcp/start-mcp-server.d.mts +63 -0
- package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -0
- package/esm/tooling/mcp/start-mcp-server.mjs +126 -0
- package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -0
- package/esm/tooling/mcp/tool-input.d.mts +75 -0
- package/esm/tooling/mcp/tool-input.d.mts.map +1 -0
- package/esm/tooling/mcp/tool-input.mjs +72 -0
- package/esm/tooling/mcp/tool-input.mjs.map +1 -0
- package/esm/tooling/problem.d.mts +55 -0
- package/esm/tooling/problem.d.mts.map +1 -0
- package/esm/tooling/problem.mjs +28 -0
- package/esm/tooling/problem.mjs.map +1 -0
- package/esm/tooling/syntax/ast.mjs +230 -0
- package/esm/tooling/syntax/ast.mjs.map +1 -0
- package/esm/tooling/syntax/imports.mjs +34 -0
- package/esm/tooling/syntax/imports.mjs.map +1 -0
- package/esm/tooling/trace/trace-report.types.d.mts +85 -0
- package/esm/tooling/trace/trace-report.types.d.mts.map +1 -0
- package/esm/tooling/trace/trace-report.types.mjs +7 -0
- package/esm/tooling/trace/trace-report.types.mjs.map +1 -0
- package/esm/tooling/trace/trace-request.d.mts +90 -0
- package/esm/tooling/trace/trace-request.d.mts.map +1 -0
- package/esm/tooling/trace/trace-request.mjs +241 -0
- package/esm/tooling/trace/trace-request.mjs.map +1 -0
- package/esm/tooling/typecheck/index.mjs +3 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts +26 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -0
- package/esm/tooling/typecheck/run-typecheck.mjs +90 -0
- package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -0
- package/esm/tooling/typescript/compiler.d.mts +31 -0
- package/esm/tooling/typescript/compiler.d.mts.map +1 -0
- package/esm/tooling/typescript/compiler.mjs +120 -0
- package/esm/tooling/typescript/compiler.mjs.map +1 -0
- package/esm/updater/update-warlock-packages.mjs +3 -2
- package/esm/updater/update-warlock-packages.mjs.map +1 -1
- package/esm/upgrade/codemods/head-viewport.mjs +46 -0
- package/esm/upgrade/codemods/head-viewport.mjs.map +1 -0
- package/esm/upgrade/codemods/helpers.mjs +81 -0
- package/esm/upgrade/codemods/helpers.mjs.map +1 -0
- package/esm/upgrade/codemods/index.mjs +34 -0
- package/esm/upgrade/codemods/index.mjs.map +1 -0
- package/esm/upgrade/codemods/logger-sync-calls.mjs +57 -0
- package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -0
- package/esm/upgrade/codemods/package-json.mjs +122 -0
- package/esm/upgrade/codemods/package-json.mjs.map +1 -0
- package/esm/upgrade/codemods/request-log-snapshot.mjs +82 -0
- package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -0
- package/esm/upgrade/codemods/review-sites.mjs +262 -0
- package/esm/upgrade/codemods/review-sites.mjs.map +1 -0
- package/esm/upgrade/diff.mjs +119 -0
- package/esm/upgrade/diff.mjs.map +1 -0
- package/esm/upgrade/format-upgrade-report.mjs +32 -0
- package/esm/upgrade/format-upgrade-report.mjs.map +1 -0
- package/esm/upgrade/load-ts-morph.mjs +49 -0
- package/esm/upgrade/load-ts-morph.mjs.map +1 -0
- package/esm/upgrade/notes.mjs +16 -0
- package/esm/upgrade/notes.mjs.map +1 -0
- package/esm/upgrade/run-upgrade.mjs +246 -0
- package/esm/upgrade/run-upgrade.mjs.map +1 -0
- package/esm/upgrade/upgrade-command.action.mjs +37 -0
- package/esm/upgrade/upgrade-command.action.mjs.map +1 -0
- package/esm/upgrade/version.mjs +39 -0
- package/esm/upgrade/version.mjs.map +1 -0
- package/esm/use-cases/index.d.mts +2 -1
- package/esm/use-cases/index.mjs +1 -1
- package/esm/use-cases/types.d.mts +116 -63
- package/esm/use-cases/types.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts +1 -3
- package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
- package/esm/use-cases/use-case-events.d.mts +3 -5
- package/esm/use-cases/use-case-events.d.mts.map +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts +6 -6
- package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
- package/esm/use-cases/use-case.d.mts +2 -4
- package/esm/use-cases/use-case.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.d.mts +1 -3
- package/esm/use-cases/use-case.errors.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.d.mts +8 -10
- package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.mjs.map +1 -1
- package/esm/utils/app-log.d.mts +1 -2
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/clock.d.mts +35 -0
- package/esm/utils/clock.d.mts.map +1 -0
- package/esm/utils/clock.mjs +27 -0
- package/esm/utils/clock.mjs.map +1 -0
- package/esm/utils/database-log.d.mts +3 -4
- package/esm/utils/database-log.d.mts.map +1 -1
- package/esm/utils/environment.d.mts +4 -5
- package/esm/utils/environment.d.mts.map +1 -1
- package/esm/utils/framework-vesion.mjs +1 -1
- package/esm/utils/framework-vesion.mjs.map +1 -1
- package/esm/utils/get-localized.d.mts +2 -3
- package/esm/utils/get-localized.d.mts.map +1 -1
- package/esm/utils/ids.d.mts +35 -0
- package/esm/utils/ids.d.mts.map +1 -0
- package/esm/utils/ids.mjs +33 -0
- package/esm/utils/ids.mjs.map +1 -0
- package/esm/utils/index.d.mts +5 -1
- package/esm/utils/index.mjs +4 -1
- package/esm/utils/normalized-path.d.mts +1 -2
- package/esm/utils/normalized-path.d.mts.map +1 -1
- package/esm/utils/npm-registry.d.mts +1 -2
- package/esm/utils/npm-registry.d.mts.map +1 -1
- package/esm/utils/paths.d.mts +13 -14
- package/esm/utils/paths.d.mts.map +1 -1
- package/esm/utils/paths.mjs +2 -2
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/utils/promise-all-object.d.mts +1 -2
- package/esm/utils/promise-all-object.d.mts.map +1 -1
- package/esm/utils/queue.d.mts +1 -2
- package/esm/utils/queue.d.mts.map +1 -1
- package/esm/utils/runtime.d.mts +60 -0
- package/esm/utils/runtime.d.mts.map +1 -0
- package/esm/utils/runtime.mjs +85 -0
- package/esm/utils/runtime.mjs.map +1 -0
- package/esm/utils/sleep.d.mts +1 -2
- package/esm/utils/sleep.d.mts.map +1 -1
- package/esm/utils/sluggable.d.mts +1 -3
- package/esm/utils/sluggable.d.mts.map +1 -1
- package/esm/utils/to-json.d.mts +1 -2
- package/esm/utils/to-json.d.mts.map +1 -1
- package/esm/utils/types.d.mts +1 -2
- package/esm/utils/types.d.mts.map +1 -1
- package/esm/utils/urls.d.mts +5 -6
- package/esm/utils/urls.d.mts.map +1 -1
- package/esm/utils/version-compare.d.mts +1 -2
- package/esm/utils/version-compare.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts +2 -3
- package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts +2 -3
- package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/index.d.mts +2 -1
- package/esm/validation/database/index.mjs +1 -1
- package/esm/validation/database/types.d.mts +14 -10
- package/esm/validation/database/types.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts +2 -3
- package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts +2 -3
- package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
- package/esm/validation/file/file.d.mts +4 -6
- package/esm/validation/file/file.d.mts.map +1 -1
- package/esm/validation/file/index.d.mts +2 -1
- package/esm/validation/file/index.mjs +1 -1
- package/esm/validation/index.d.mts +6 -2
- package/esm/validation/index.mjs +1 -1
- package/esm/validation/plugins/index.mjs +1 -1
- package/esm/validation/types.d.mts +61 -4
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +21 -4
- package/esm/validation/validateAll.mjs.map +1 -1
- package/esm/validation/validation-failure-status.mjs +15 -0
- package/esm/validation/validation-failure-status.mjs.map +1 -0
- package/esm/validation/validators/file-validator.d.mts +2 -20
- package/esm/validation/validators/file-validator.d.mts.map +1 -1
- package/esm/validation/validators/index.d.mts +2 -1
- package/esm/validation/validators/index.mjs +1 -1
- package/esm/vite/lower-stage3-decorators.d.mts +2 -3
- package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
- package/esm/warlock-config/bundle-config.mjs +1 -1
- package/esm/warlock-config/define-config.d.mts +1 -3
- package/esm/warlock-config/define-config.d.mts.map +1 -1
- package/esm/warlock-config/define-config.mjs +3 -2
- package/esm/warlock-config/define-config.mjs.map +1 -1
- package/esm/warlock-config/index.d.mts +2 -1
- package/esm/warlock-config/index.mjs +1 -1
- package/esm/warlock-config/types.d.mts +31 -6
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +5 -7
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +2 -1
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
- package/llms-full.txt +3211 -731
- package/llms.txt +16 -6
- package/package.json +47 -15
- package/schemas/inspect-report.schema.json +554 -0
- package/skills/README.md +9 -0
- package/skills/add-connector/SKILL.md +26 -38
- package/skills/benchmark-code/SKILL.md +30 -24
- package/skills/build-restful/SKILL.md +14 -14
- package/skills/build-url/SKILL.md +18 -18
- package/skills/configure-app/SKILL.md +107 -14
- package/skills/create-controller/SKILL.md +25 -12
- package/skills/create-module/SKILL.md +10 -3
- package/skills/define-resource/SKILL.md +32 -29
- package/skills/encrypt-data/SKILL.md +21 -19
- package/skills/generate-openapi/SKILL.md +50 -24
- package/skills/hash-password/SKILL.md +2 -2
- package/skills/health-checks/SKILL.md +24 -7
- package/skills/index.md +11 -4
- package/skills/lower-stage3-decorators/SKILL.md +4 -4
- package/skills/make-endpoint/SKILL.md +110 -0
- package/skills/model-factories/SKILL.md +92 -0
- package/skills/process-image/SKILL.md +32 -30
- package/skills/register-route/SKILL.md +109 -10
- package/skills/report-framework-issue.md +154 -0
- package/skills/request-memo/SKILL.md +1 -1
- package/skills/request-tracing/SKILL.md +4 -1
- package/skills/resolve-path/SKILL.md +45 -44
- package/skills/retry-operation/SKILL.md +20 -11
- package/skills/run-app/SKILL.md +107 -22
- package/skills/send-response/SKILL.md +179 -14
- package/skills/store-file/SKILL.md +93 -53
- package/skills/test-fakes/SKILL.md +123 -0
- package/skills/test-http/SKILL.md +125 -21
- package/skills/test-service/SKILL.md +41 -1
- package/skills/update-packages/SKILL.md +29 -18
- package/skills/upgrade-from-5-29/SKILL.md +454 -0
- package/skills/upload-file/SKILL.md +31 -33
- package/skills/use-app-context/SKILL.md +38 -31
- package/skills/use-middleware/SKILL.md +45 -25
- package/skills/use-model-transformers/SKILL.md +37 -28
- package/skills/use-repository/SKILL.md +2 -2
- package/skills/validate-input/SKILL.md +72 -28
- package/skills/warlock-agents-md/SKILL.md +96 -0
- package/skills/warlock-board/SKILL.md +123 -0
- package/skills/warlock-check/SKILL.md +133 -0
- package/skills/warlock-conventions/SKILL.md +115 -0
- package/skills/warlock-doctor/SKILL.md +55 -22
- package/skills/warlock-inspect/SKILL.md +134 -0
- package/skills/warlock-mcp/SKILL.md +120 -0
- package/skills/warlock-routes/SKILL.md +18 -11
- package/skills/warlock-trace/SKILL.md +81 -0
- package/skills/wire-socket/SKILL.md +8 -8
- package/skills/write-seeder/SKILL.md +46 -32
- package/skills/write-use-case/SKILL.md +40 -27
- package/esm/http/uploads/matches-if-none-match.mjs +0 -13
- package/esm/http/uploads/matches-if-none-match.mjs.map +0 -1
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import { WarlockError } from "../../errors/warlock-error.mjs";
|
|
2
|
+
import { BOARD_DIRECTORY, BOARD_TRANSITIONS, isBoardState } from "./board.types.mjs";
|
|
3
|
+
import { formatBoardMessage, parseBoardMessage } from "./board-message.mjs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "node:fs";
|
|
6
|
+
|
|
7
|
+
//#region ../../packages/core/src/tooling/board/board.ts
|
|
8
|
+
/** Agent names: lower-case letters, digits and dashes, starting with a letter or digit. */
|
|
9
|
+
const AGENT_NAME = /^[a-z0-9][a-z0-9-]*$/;
|
|
10
|
+
/** How many sequence numbers a writer tries before giving up on a contended slot. */
|
|
11
|
+
const MAX_ALLOCATION_ATTEMPTS = 1e3;
|
|
12
|
+
/** The marker file `init` writes; its presence is what "initialized" means. */
|
|
13
|
+
const BOARD_FILE = "board.json";
|
|
14
|
+
function boardRoot(cwd) {
|
|
15
|
+
return path.join(cwd, BOARD_DIRECTORY);
|
|
16
|
+
}
|
|
17
|
+
function toPosix(value) {
|
|
18
|
+
return value.split(path.sep).join("/");
|
|
19
|
+
}
|
|
20
|
+
function pad(value) {
|
|
21
|
+
return String(value).padStart(4, "0");
|
|
22
|
+
}
|
|
23
|
+
/** A file-name slug: lower-case, dashes, at most 48 characters. */
|
|
24
|
+
function boardSlug(value, fallback) {
|
|
25
|
+
const slug = value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 48).replace(/-+$/g, "");
|
|
26
|
+
return slug.length > 0 ? slug : fallback;
|
|
27
|
+
}
|
|
28
|
+
/** Throw unless `name` is a valid agent name. */
|
|
29
|
+
function assertAgentName(name, label = "agent") {
|
|
30
|
+
if (!AGENT_NAME.test(name)) throw new Error(`Invalid ${label} name ${JSON.stringify(name)}: use lower-case letters, digits and dashes (e.g. "reviewer").`);
|
|
31
|
+
}
|
|
32
|
+
function isErrnoException(error) {
|
|
33
|
+
return error instanceof Error && "code" in error;
|
|
34
|
+
}
|
|
35
|
+
/** Write a file through a temp file and a rename, so a reader never sees half of it. */
|
|
36
|
+
function writeAtomic(file, content) {
|
|
37
|
+
const temporary = `${file}.${process.pid}.${Date.now()}.tmp`;
|
|
38
|
+
writeFileSync(temporary, content, "utf8");
|
|
39
|
+
renameSync(temporary, file);
|
|
40
|
+
}
|
|
41
|
+
/** The `NNNN` numbers of the files in a directory named `NNNN-…`. */
|
|
42
|
+
function numberedEntries(directory, extension) {
|
|
43
|
+
if (!existsSync(directory)) return [];
|
|
44
|
+
return readdirSync(directory).filter((name) => !name.startsWith(".") && name.endsWith(extension)).flatMap((name) => {
|
|
45
|
+
const match = /^(\d+)-/.exec(name);
|
|
46
|
+
return match?.[1] ? [{
|
|
47
|
+
number: Number.parseInt(match[1], 10),
|
|
48
|
+
name
|
|
49
|
+
}] : [];
|
|
50
|
+
}).sort((first, second) => first.number - second.number);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Reserve the next free sequence number in `directory` by creating
|
|
54
|
+
* `.seq/NNNN` exclusively (`wx`). Two writers racing for the same number:
|
|
55
|
+
* one gets `EEXIST` and moves on to the next, so numbers are never shared.
|
|
56
|
+
*/
|
|
57
|
+
function reserveNumber(directory, start) {
|
|
58
|
+
const sequence = path.join(directory, ".seq");
|
|
59
|
+
mkdirSync(sequence, { recursive: true });
|
|
60
|
+
for (let number = start, attempt = 0; attempt < MAX_ALLOCATION_ATTEMPTS; number++, attempt++) try {
|
|
61
|
+
writeFileSync(path.join(sequence, pad(number)), "", { flag: "wx" });
|
|
62
|
+
return number;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (isErrnoException(error) && error.code === "EEXIST") continue;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
throw new Error(`Could not allocate a sequence number in ${directory}.`);
|
|
68
|
+
}
|
|
69
|
+
function nextNumber(directory, extension) {
|
|
70
|
+
const entries = numberedEntries(directory, extension);
|
|
71
|
+
return reserveNumber(directory, (entries[entries.length - 1]?.number ?? 0) + 1);
|
|
72
|
+
}
|
|
73
|
+
/** Throw `WL7401` unless the board exists. */
|
|
74
|
+
function assertInitialized(cwd) {
|
|
75
|
+
const root = boardRoot(cwd);
|
|
76
|
+
if (!existsSync(path.join(root, BOARD_FILE))) throw new WarlockError("WL7401", `No agent board in ${BOARD_DIRECTORY}. Run \`warlock board init\` at the project root.`);
|
|
77
|
+
return root;
|
|
78
|
+
}
|
|
79
|
+
/** Whether a `.gitignore` already ignores the board folder (or `.warlock` as a whole). */
|
|
80
|
+
function gitignoreCoversBoard(content) {
|
|
81
|
+
const covering = /* @__PURE__ */ new Set([
|
|
82
|
+
".warlock",
|
|
83
|
+
".warlock/",
|
|
84
|
+
"/.warlock",
|
|
85
|
+
"/.warlock/",
|
|
86
|
+
".warlock/*",
|
|
87
|
+
"/.warlock/*",
|
|
88
|
+
".warlock/board",
|
|
89
|
+
".warlock/board/",
|
|
90
|
+
"/.warlock/board",
|
|
91
|
+
"/.warlock/board/"
|
|
92
|
+
]);
|
|
93
|
+
return content.split(/\r?\n/).some((line) => covering.has(line.trim()));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create the board (idempotent): `.warlock/board/` with its `board.json`
|
|
97
|
+
* marker, `items/`, and `.warlock/board/` in `.gitignore` unless the project
|
|
98
|
+
* already ignores it. A `.gitignore` is created when there is none.
|
|
99
|
+
*/
|
|
100
|
+
function initBoard(cwd = process.cwd(), now = () => /* @__PURE__ */ new Date()) {
|
|
101
|
+
const root = boardRoot(cwd);
|
|
102
|
+
const marker = path.join(root, BOARD_FILE);
|
|
103
|
+
const created = !existsSync(marker);
|
|
104
|
+
mkdirSync(path.join(root, "items"), { recursive: true });
|
|
105
|
+
mkdirSync(path.join(root, "cursors"), { recursive: true });
|
|
106
|
+
if (created) writeAtomic(marker, `${JSON.stringify({
|
|
107
|
+
schemaVersion: 1,
|
|
108
|
+
createdAt: now().toISOString()
|
|
109
|
+
}, null, 2)}\n`);
|
|
110
|
+
const gitignore = path.join(cwd, ".gitignore");
|
|
111
|
+
const current = existsSync(gitignore) ? readFileSync(gitignore, "utf8") : "";
|
|
112
|
+
let gitignoreUpdated = false;
|
|
113
|
+
if (!gitignoreCoversBoard(current)) {
|
|
114
|
+
const separator = current.length === 0 || current.endsWith("\n") ? "" : "\n";
|
|
115
|
+
writeFileSync(gitignore, `${current}${separator}${current.length > 0 ? "\n" : ""}# Agent board (warlock board)\n${BOARD_DIRECTORY}/\n`, "utf8");
|
|
116
|
+
gitignoreUpdated = true;
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
directory: BOARD_DIRECTORY,
|
|
120
|
+
created,
|
|
121
|
+
gitignoreUpdated
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function parseItem(value) {
|
|
125
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
126
|
+
const id = Reflect.get(value, "id");
|
|
127
|
+
const title = Reflect.get(value, "title");
|
|
128
|
+
const state = Reflect.get(value, "state");
|
|
129
|
+
if (typeof id !== "number" || typeof title !== "string") return void 0;
|
|
130
|
+
if (typeof state !== "string" || !isBoardState(state)) return void 0;
|
|
131
|
+
const text = (key) => {
|
|
132
|
+
const field = Reflect.get(value, key);
|
|
133
|
+
return typeof field === "string" ? field : null;
|
|
134
|
+
};
|
|
135
|
+
const history = Reflect.get(value, "history");
|
|
136
|
+
return {
|
|
137
|
+
id,
|
|
138
|
+
title,
|
|
139
|
+
state,
|
|
140
|
+
assignee: text("assignee"),
|
|
141
|
+
reviewer: text("reviewer"),
|
|
142
|
+
createdAt: text("createdAt") ?? "",
|
|
143
|
+
updatedAt: text("updatedAt") ?? "",
|
|
144
|
+
history: Array.isArray(history) ? history.flatMap((entry) => {
|
|
145
|
+
if (typeof entry !== "object" || entry === null) return [];
|
|
146
|
+
const from = Reflect.get(entry, "from");
|
|
147
|
+
const to = Reflect.get(entry, "to");
|
|
148
|
+
const by = Reflect.get(entry, "by");
|
|
149
|
+
const at = Reflect.get(entry, "at");
|
|
150
|
+
const note = Reflect.get(entry, "note");
|
|
151
|
+
if (typeof to !== "string" || !isBoardState(to)) return [];
|
|
152
|
+
return [{
|
|
153
|
+
from: typeof from === "string" && isBoardState(from) ? from : null,
|
|
154
|
+
to,
|
|
155
|
+
by: typeof by === "string" ? by : null,
|
|
156
|
+
at: typeof at === "string" ? at : "",
|
|
157
|
+
note: typeof note === "string" ? note : null
|
|
158
|
+
}];
|
|
159
|
+
}) : []
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function itemFile(root, id) {
|
|
163
|
+
const entry = numberedEntries(path.join(root, "items"), ".json").find((candidate) => candidate.number === id);
|
|
164
|
+
return entry ? path.join(root, "items", entry.name) : void 0;
|
|
165
|
+
}
|
|
166
|
+
/** Every item, by id. Throws `WL7401` when the board does not exist. */
|
|
167
|
+
function listBoardItems(cwd = process.cwd()) {
|
|
168
|
+
const root = assertInitialized(cwd);
|
|
169
|
+
const directory = path.join(root, "items");
|
|
170
|
+
return numberedEntries(directory, ".json").flatMap(({ name }) => {
|
|
171
|
+
try {
|
|
172
|
+
const item = parseItem(JSON.parse(readFileSync(path.join(directory, name), "utf8")));
|
|
173
|
+
return item ? [item] : [];
|
|
174
|
+
} catch {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/** One item. Throws `WL7402` for an unknown id. */
|
|
180
|
+
function readBoardItem(id, cwd = process.cwd()) {
|
|
181
|
+
const file = itemFile(assertInitialized(cwd), id);
|
|
182
|
+
const item = file ? parseItem(JSON.parse(readFileSync(file, "utf8"))) : void 0;
|
|
183
|
+
if (!item) throw new WarlockError("WL7402", `Board item ${id} does not exist. Run \`warlock board status\` to list the items.`);
|
|
184
|
+
return item;
|
|
185
|
+
}
|
|
186
|
+
/** Add an item in state `todo`, with a fresh id no other writer can take. */
|
|
187
|
+
function addBoardItem(input, cwd = process.cwd()) {
|
|
188
|
+
const root = assertInitialized(cwd);
|
|
189
|
+
const title = input.title.replace(/[\r\n]+/g, " ").trim();
|
|
190
|
+
if (title.length === 0) throw new Error("A board item needs a title.");
|
|
191
|
+
for (const [label, name] of [
|
|
192
|
+
["assignee", input.assignee],
|
|
193
|
+
["reviewer", input.reviewer],
|
|
194
|
+
["by", input.by]
|
|
195
|
+
]) if (name) assertAgentName(name, label);
|
|
196
|
+
const directory = path.join(root, "items");
|
|
197
|
+
const id = nextNumber(directory, ".json");
|
|
198
|
+
const at = (input.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
|
|
199
|
+
const item = {
|
|
200
|
+
id,
|
|
201
|
+
title,
|
|
202
|
+
state: "todo",
|
|
203
|
+
assignee: input.assignee ?? null,
|
|
204
|
+
reviewer: input.reviewer ?? null,
|
|
205
|
+
createdAt: at,
|
|
206
|
+
updatedAt: at,
|
|
207
|
+
history: [{
|
|
208
|
+
from: null,
|
|
209
|
+
to: "todo",
|
|
210
|
+
by: input.by ?? null,
|
|
211
|
+
at,
|
|
212
|
+
note: null
|
|
213
|
+
}]
|
|
214
|
+
};
|
|
215
|
+
writeAtomic(path.join(directory, `${pad(id)}-${boardSlug(title, "item")}.json`), `${JSON.stringify(item, null, 2)}\n`);
|
|
216
|
+
return item;
|
|
217
|
+
}
|
|
218
|
+
/** The states an item in `state` may move to. */
|
|
219
|
+
function nextBoardStates(state) {
|
|
220
|
+
return BOARD_TRANSITIONS[state];
|
|
221
|
+
}
|
|
222
|
+
/** Throw `WL7403` unless `from → to` is in {@link BOARD_TRANSITIONS}. */
|
|
223
|
+
function assertBoardTransition(id, from, to) {
|
|
224
|
+
if (!BOARD_TRANSITIONS[from].includes(to)) throw new WarlockError("WL7403", `Board item ${id} is "${from}" and cannot move to "${to}". Allowed next states: ${BOARD_TRANSITIONS[from].join(", ")}.`);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Move an item to another state, recording who moved it and why. Throws
|
|
228
|
+
* `WL7402` for an unknown id and `WL7403` for a move the state machine does
|
|
229
|
+
* not allow.
|
|
230
|
+
*/
|
|
231
|
+
function moveBoardItem(id, to, options = {}, cwd = process.cwd()) {
|
|
232
|
+
const root = assertInitialized(cwd);
|
|
233
|
+
const item = readBoardItem(id, cwd);
|
|
234
|
+
const file = itemFile(root, id);
|
|
235
|
+
if (options.by) assertAgentName(options.by, "by");
|
|
236
|
+
assertBoardTransition(id, item.state, to);
|
|
237
|
+
const at = (options.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
|
|
238
|
+
const moved = {
|
|
239
|
+
...item,
|
|
240
|
+
state: to,
|
|
241
|
+
updatedAt: at,
|
|
242
|
+
history: [...item.history, {
|
|
243
|
+
from: item.state,
|
|
244
|
+
to,
|
|
245
|
+
by: options.by ?? null,
|
|
246
|
+
at,
|
|
247
|
+
note: options.note ?? null
|
|
248
|
+
}]
|
|
249
|
+
};
|
|
250
|
+
if (file) writeAtomic(file, `${JSON.stringify(moved, null, 2)}\n`);
|
|
251
|
+
return moved;
|
|
252
|
+
}
|
|
253
|
+
function inboxDirectory(root, agent) {
|
|
254
|
+
return path.join(root, `to-${agent}`);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Write a message to `to-<agent>/NNNN-<slug>.md`. Messages are append-only:
|
|
258
|
+
* the number is reserved exclusively and the file is created with `wx`, so it
|
|
259
|
+
* is never rewritten. A verdict with an `item` also moves the item to
|
|
260
|
+
* `approved` / `changes-requested` — before the message is written, so a
|
|
261
|
+
* refused move (`WL7403`) leaves no message behind.
|
|
262
|
+
*/
|
|
263
|
+
function sendBoardMessage(input, cwd = process.cwd()) {
|
|
264
|
+
const root = assertInitialized(cwd);
|
|
265
|
+
assertAgentName(input.to, "recipient");
|
|
266
|
+
assertAgentName(input.from, "sender");
|
|
267
|
+
const subject = input.subject.replace(/[\r\n]+/g, " ").trim();
|
|
268
|
+
if (subject.length === 0) throw new Error("A board message needs a subject.");
|
|
269
|
+
const itemId = input.item ?? null;
|
|
270
|
+
const verdict = input.verdict ?? null;
|
|
271
|
+
const now = input.now ?? (() => /* @__PURE__ */ new Date());
|
|
272
|
+
if (itemId !== null) readBoardItem(itemId, cwd);
|
|
273
|
+
const item = itemId !== null && verdict !== null ? moveBoardItem(itemId, verdict, {
|
|
274
|
+
by: input.from,
|
|
275
|
+
note: subject,
|
|
276
|
+
now
|
|
277
|
+
}, cwd) : null;
|
|
278
|
+
const directory = inboxDirectory(root, input.to);
|
|
279
|
+
mkdirSync(directory, { recursive: true });
|
|
280
|
+
const number = nextNumber(directory, ".md");
|
|
281
|
+
const at = now().toISOString();
|
|
282
|
+
const name = `${pad(number)}-${boardSlug(subject, "message")}.md`;
|
|
283
|
+
const file = path.join(directory, name);
|
|
284
|
+
writeFileSync(file, formatBoardMessage({
|
|
285
|
+
from: input.from,
|
|
286
|
+
to: input.to,
|
|
287
|
+
item: itemId,
|
|
288
|
+
subject,
|
|
289
|
+
at
|
|
290
|
+
}, input.body ?? "", verdict), {
|
|
291
|
+
encoding: "utf8",
|
|
292
|
+
flag: "wx"
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
message: {
|
|
296
|
+
number,
|
|
297
|
+
file: toPosix(path.relative(cwd, file)),
|
|
298
|
+
from: input.from,
|
|
299
|
+
to: input.to,
|
|
300
|
+
item: itemId,
|
|
301
|
+
subject,
|
|
302
|
+
at,
|
|
303
|
+
body: (input.body ?? "").replace(/\s+$/, ""),
|
|
304
|
+
verdict
|
|
305
|
+
},
|
|
306
|
+
item
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/** The messages in an agent's inbox numbered above `since`, oldest first. */
|
|
310
|
+
function listBoardMessages(agent, options = {}, cwd = process.cwd()) {
|
|
311
|
+
const root = assertInitialized(cwd);
|
|
312
|
+
assertAgentName(agent);
|
|
313
|
+
const directory = inboxDirectory(root, agent);
|
|
314
|
+
const since = options.since ?? 0;
|
|
315
|
+
return numberedEntries(directory, ".md").filter((entry) => entry.number > since).map(({ number, name }) => {
|
|
316
|
+
const file = path.join(directory, name);
|
|
317
|
+
const parsed = parseBoardMessage(readFileSync(file, "utf8"));
|
|
318
|
+
return {
|
|
319
|
+
number,
|
|
320
|
+
file: toPosix(path.relative(cwd, file)),
|
|
321
|
+
from: parsed.from,
|
|
322
|
+
to: parsed.to || agent,
|
|
323
|
+
item: parsed.item,
|
|
324
|
+
subject: parsed.subject,
|
|
325
|
+
at: parsed.at,
|
|
326
|
+
body: parsed.body,
|
|
327
|
+
verdict: parsed.verdict
|
|
328
|
+
};
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
/** The highest message number `watch` has returned to `agent` (0 when none). */
|
|
332
|
+
function readBoardCursor(agent, cwd = process.cwd()) {
|
|
333
|
+
const root = assertInitialized(cwd);
|
|
334
|
+
assertAgentName(agent);
|
|
335
|
+
const file = path.join(root, "cursors", agent);
|
|
336
|
+
if (!existsSync(file)) return 0;
|
|
337
|
+
const value = Number.parseInt(readFileSync(file, "utf8").trim(), 10);
|
|
338
|
+
return Number.isInteger(value) && value > 0 ? value : 0;
|
|
339
|
+
}
|
|
340
|
+
/** Record that `agent` has seen messages up to `number`. Never moves the cursor back. */
|
|
341
|
+
function writeBoardCursor(agent, number, cwd = process.cwd()) {
|
|
342
|
+
const root = assertInitialized(cwd);
|
|
343
|
+
const current = readBoardCursor(agent, cwd);
|
|
344
|
+
const next = Math.max(current, number);
|
|
345
|
+
if (next !== current) {
|
|
346
|
+
mkdirSync(path.join(root, "cursors"), { recursive: true });
|
|
347
|
+
writeAtomic(path.join(root, "cursors", agent), `${next}\n`);
|
|
348
|
+
}
|
|
349
|
+
return next;
|
|
350
|
+
}
|
|
351
|
+
/** Every item and every inbox with its message count, cursor and unread count. */
|
|
352
|
+
function readBoardStatus(cwd = process.cwd()) {
|
|
353
|
+
const root = assertInitialized(cwd);
|
|
354
|
+
const inboxes = readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.startsWith("to-")).map((entry) => entry.name.slice(3)).filter((agent) => /^[a-z0-9][a-z0-9-]*$/.test(agent)).sort().map((agent) => {
|
|
355
|
+
const numbers = numberedEntries(inboxDirectory(root, agent), ".md").map((entry) => entry.number);
|
|
356
|
+
const cursor = readBoardCursor(agent, cwd);
|
|
357
|
+
return {
|
|
358
|
+
agent,
|
|
359
|
+
messages: numbers.length,
|
|
360
|
+
cursor,
|
|
361
|
+
unread: numbers.filter((number) => number > cursor).length
|
|
362
|
+
};
|
|
363
|
+
});
|
|
364
|
+
return {
|
|
365
|
+
schemaVersion: 1,
|
|
366
|
+
items: listBoardItems(cwd),
|
|
367
|
+
inboxes
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Block until `agent` has a message numbered above `since` (default: its
|
|
372
|
+
* cursor), then return every such message and advance the cursor past them.
|
|
373
|
+
*
|
|
374
|
+
* Polls the inbox every `intervalMs`; throws `WL7404` when `timeoutMs` passes
|
|
375
|
+
* first. An aborted `signal` resolves with no messages.
|
|
376
|
+
*/
|
|
377
|
+
async function watchBoard(options, cwd = process.cwd()) {
|
|
378
|
+
assertInitialized(cwd);
|
|
379
|
+
assertAgentName(options.agent);
|
|
380
|
+
const since = options.since ?? readBoardCursor(options.agent, cwd);
|
|
381
|
+
const timeoutMs = options.timeoutMs ?? 6e5;
|
|
382
|
+
const intervalMs = options.intervalMs ?? 250;
|
|
383
|
+
const deadline = Date.now() + timeoutMs;
|
|
384
|
+
for (;;) {
|
|
385
|
+
const messages = listBoardMessages(options.agent, { since }, cwd);
|
|
386
|
+
if (messages.length > 0) {
|
|
387
|
+
const newest = messages[messages.length - 1]?.number ?? since;
|
|
388
|
+
return {
|
|
389
|
+
agent: options.agent,
|
|
390
|
+
messages,
|
|
391
|
+
cursor: writeBoardCursor(options.agent, newest, cwd)
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
if (options.signal?.aborted) return {
|
|
395
|
+
agent: options.agent,
|
|
396
|
+
messages: [],
|
|
397
|
+
cursor: readBoardCursor(options.agent, cwd)
|
|
398
|
+
};
|
|
399
|
+
const remaining = deadline - Date.now();
|
|
400
|
+
if (remaining <= 0) throw new WarlockError("WL7404", `No new message for "${options.agent}" after ${Math.round(timeoutMs / 1e3)}s (watching messages above #${since}).`);
|
|
401
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(intervalMs, remaining)));
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
//#endregion
|
|
406
|
+
export { addBoardItem, assertAgentName, assertBoardTransition, boardSlug, gitignoreCoversBoard, initBoard, listBoardItems, listBoardMessages, moveBoardItem, nextBoardStates, readBoardCursor, readBoardItem, readBoardStatus, sendBoardMessage, watchBoard, writeBoardCursor };
|
|
407
|
+
//# sourceMappingURL=board.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/board/board.ts"],"sourcesContent":["import {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n writeFileSync,\n} from \"node:fs\";\nimport path from \"node:path\";\nimport { WarlockError } from \"../../errors/warlock-error\";\nimport { formatBoardMessage, parseBoardMessage } from \"./board-message\";\nimport {\n BOARD_DIRECTORY,\n BOARD_TRANSITIONS,\n type BoardInbox,\n type BoardItem,\n type BoardMessage,\n type BoardState,\n type BoardStatus,\n type BoardVerdict,\n isBoardState,\n} from \"./board.types\";\n\n/** Agent names: lower-case letters, digits and dashes, starting with a letter or digit. */\nconst AGENT_NAME = /^[a-z0-9][a-z0-9-]*$/;\n\n/** How many sequence numbers a writer tries before giving up on a contended slot. */\nconst MAX_ALLOCATION_ATTEMPTS = 1000;\n\n/** The marker file `init` writes; its presence is what \"initialized\" means. */\nconst BOARD_FILE = \"board.json\";\n\n/** What `initBoard` did. */\nexport type InitBoardResult = {\n /** The board directory, relative to the project root. */\n directory: string;\n /** `false` when the board already existed. */\n created: boolean;\n /** Whether `.warlock/board/` was added to `.gitignore` by this call. */\n gitignoreUpdated: boolean;\n};\n\n/** Inputs of {@link addBoardItem}. */\nexport type AddBoardItemInput = {\n title: string;\n assignee?: string | null;\n reviewer?: string | null;\n /** The agent creating it, recorded in the history. */\n by?: string | null;\n /** Clock, for tests. */\n now?: () => Date;\n};\n\n/** Inputs of {@link moveBoardItem}. */\nexport type MoveBoardItemOptions = {\n by?: string | null;\n note?: string | null;\n now?: () => Date;\n};\n\n/** Inputs of {@link sendBoardMessage}. */\nexport type SendBoardMessageInput = {\n to: string;\n from: string;\n subject: string;\n body?: string;\n /** The item the message is about. */\n item?: number | null;\n /** A review verdict; with `item`, also moves the item to that state. */\n verdict?: BoardVerdict | null;\n now?: () => Date;\n};\n\n/** What {@link sendBoardMessage} wrote. */\nexport type SendBoardMessageResult = {\n message: BoardMessage;\n /** The item after the verdict moved it, when the message carried one. */\n item: BoardItem | null;\n};\n\n/** Inputs of {@link watchBoard}. */\nexport type WatchBoardOptions = {\n agent: string;\n /** Return messages numbered above this. Default: the agent's cursor. */\n since?: number;\n /** Give up after this long; throws `WL7404`. Default: 10 minutes. */\n timeoutMs?: number;\n /** Poll interval. Default: 250 ms. */\n intervalMs?: number;\n /** Stop early (resolves with no messages). */\n signal?: AbortSignal;\n};\n\n/** What {@link watchBoard} returned. */\nexport type WatchBoardResult = {\n agent: string;\n /** The new messages, oldest first. */\n messages: BoardMessage[];\n /** The agent's cursor after the call. */\n cursor: number;\n};\n\nfunction boardRoot(cwd: string): string {\n return path.join(cwd, BOARD_DIRECTORY);\n}\n\nfunction toPosix(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\nfunction pad(value: number): string {\n return String(value).padStart(4, \"0\");\n}\n\n/** A file-name slug: lower-case, dashes, at most 48 characters. */\nexport function boardSlug(value: string, fallback: string): string {\n const slug = value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 48)\n .replace(/-+$/g, \"\");\n\n return slug.length > 0 ? slug : fallback;\n}\n\n/** Throw unless `name` is a valid agent name. */\nexport function assertAgentName(name: string, label = \"agent\"): void {\n if (!AGENT_NAME.test(name)) {\n throw new Error(\n `Invalid ${label} name ${JSON.stringify(name)}: use lower-case letters, digits and dashes (e.g. \"reviewer\").`,\n );\n }\n}\n\nfunction isErrnoException(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error;\n}\n\n/** Write a file through a temp file and a rename, so a reader never sees half of it. */\nfunction writeAtomic(file: string, content: string): void {\n const temporary = `${file}.${process.pid}.${Date.now()}.tmp`;\n\n writeFileSync(temporary, content, \"utf8\");\n renameSync(temporary, file);\n}\n\n/** The `NNNN` numbers of the files in a directory named `NNNN-…`. */\nfunction numberedEntries(directory: string, extension: string): { number: number; name: string }[] {\n if (!existsSync(directory)) return [];\n\n return readdirSync(directory)\n .filter((name) => !name.startsWith(\".\") && name.endsWith(extension))\n .flatMap((name) => {\n const match = /^(\\d+)-/.exec(name);\n return match?.[1] ? [{ number: Number.parseInt(match[1], 10), name }] : [];\n })\n .sort((first, second) => first.number - second.number);\n}\n\n/**\n * Reserve the next free sequence number in `directory` by creating\n * `.seq/NNNN` exclusively (`wx`). Two writers racing for the same number:\n * one gets `EEXIST` and moves on to the next, so numbers are never shared.\n */\nfunction reserveNumber(directory: string, start: number): number {\n const sequence = path.join(directory, \".seq\");\n\n mkdirSync(sequence, { recursive: true });\n\n for (let number = start, attempt = 0; attempt < MAX_ALLOCATION_ATTEMPTS; number++, attempt++) {\n try {\n writeFileSync(path.join(sequence, pad(number)), \"\", { flag: \"wx\" });\n return number;\n } catch (error) {\n if (isErrnoException(error) && error.code === \"EEXIST\") continue;\n throw error;\n }\n }\n\n throw new Error(`Could not allocate a sequence number in ${directory}.`);\n}\n\nfunction nextNumber(directory: string, extension: string): number {\n const entries = numberedEntries(directory, extension);\n const highest = entries[entries.length - 1]?.number ?? 0;\n\n return reserveNumber(directory, highest + 1);\n}\n\n/** Throw `WL7401` unless the board exists. */\nfunction assertInitialized(cwd: string): string {\n const root = boardRoot(cwd);\n\n if (!existsSync(path.join(root, BOARD_FILE))) {\n throw new WarlockError(\n \"WL7401\",\n `No agent board in ${BOARD_DIRECTORY}. Run \\`warlock board init\\` at the project root.`,\n );\n }\n\n return root;\n}\n\n/** Whether a `.gitignore` already ignores the board folder (or `.warlock` as a whole). */\nexport function gitignoreCoversBoard(content: string): boolean {\n const covering = new Set([\n \".warlock\",\n \".warlock/\",\n \"/.warlock\",\n \"/.warlock/\",\n \".warlock/*\",\n \"/.warlock/*\",\n \".warlock/board\",\n \".warlock/board/\",\n \"/.warlock/board\",\n \"/.warlock/board/\",\n ]);\n\n return content.split(/\\r?\\n/).some((line) => covering.has(line.trim()));\n}\n\n/**\n * Create the board (idempotent): `.warlock/board/` with its `board.json`\n * marker, `items/`, and `.warlock/board/` in `.gitignore` unless the project\n * already ignores it. A `.gitignore` is created when there is none.\n */\nexport function initBoard(\n cwd = process.cwd(),\n now: () => Date = () => new Date(),\n): InitBoardResult {\n const root = boardRoot(cwd);\n const marker = path.join(root, BOARD_FILE);\n const created = !existsSync(marker);\n\n mkdirSync(path.join(root, \"items\"), { recursive: true });\n mkdirSync(path.join(root, \"cursors\"), { recursive: true });\n\n if (created) {\n writeAtomic(\n marker,\n `${JSON.stringify({ schemaVersion: 1, createdAt: now().toISOString() }, null, 2)}\\n`,\n );\n }\n\n const gitignore = path.join(cwd, \".gitignore\");\n const current = existsSync(gitignore) ? readFileSync(gitignore, \"utf8\") : \"\";\n let gitignoreUpdated = false;\n\n if (!gitignoreCoversBoard(current)) {\n const separator = current.length === 0 || current.endsWith(\"\\n\") ? \"\" : \"\\n\";\n\n writeFileSync(\n gitignore,\n `${current}${separator}${current.length > 0 ? \"\\n\" : \"\"}# Agent board (warlock board)\\n${BOARD_DIRECTORY}/\\n`,\n \"utf8\",\n );\n gitignoreUpdated = true;\n }\n\n return { directory: BOARD_DIRECTORY, created, gitignoreUpdated };\n}\n\nfunction parseItem(value: unknown): BoardItem | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n\n const id = Reflect.get(value, \"id\");\n const title = Reflect.get(value, \"title\");\n const state = Reflect.get(value, \"state\");\n\n if (typeof id !== \"number\" || typeof title !== \"string\") return undefined;\n if (typeof state !== \"string\" || !isBoardState(state)) return undefined;\n\n const text = (key: string): string | null => {\n const field = Reflect.get(value, key);\n return typeof field === \"string\" ? field : null;\n };\n const history = Reflect.get(value, \"history\");\n\n return {\n id,\n title,\n state,\n assignee: text(\"assignee\"),\n reviewer: text(\"reviewer\"),\n createdAt: text(\"createdAt\") ?? \"\",\n updatedAt: text(\"updatedAt\") ?? \"\",\n history: Array.isArray(history)\n ? history.flatMap((entry: unknown) => {\n if (typeof entry !== \"object\" || entry === null) return [];\n\n const from = Reflect.get(entry, \"from\");\n const to = Reflect.get(entry, \"to\");\n const by = Reflect.get(entry, \"by\");\n const at = Reflect.get(entry, \"at\");\n const note = Reflect.get(entry, \"note\");\n\n if (typeof to !== \"string\" || !isBoardState(to)) return [];\n\n return [\n {\n from: typeof from === \"string\" && isBoardState(from) ? from : null,\n to,\n by: typeof by === \"string\" ? by : null,\n at: typeof at === \"string\" ? at : \"\",\n note: typeof note === \"string\" ? note : null,\n },\n ];\n })\n : [],\n };\n}\n\nfunction itemFile(root: string, id: number): string | undefined {\n const entry = numberedEntries(path.join(root, \"items\"), \".json\").find(\n (candidate) => candidate.number === id,\n );\n\n return entry ? path.join(root, \"items\", entry.name) : undefined;\n}\n\n/** Every item, by id. Throws `WL7401` when the board does not exist. */\nexport function listBoardItems(cwd = process.cwd()): BoardItem[] {\n const root = assertInitialized(cwd);\n const directory = path.join(root, \"items\");\n\n return numberedEntries(directory, \".json\").flatMap(({ name }) => {\n try {\n const item = parseItem(JSON.parse(readFileSync(path.join(directory, name), \"utf8\")));\n return item ? [item] : [];\n } catch {\n return [];\n }\n });\n}\n\n/** One item. Throws `WL7402` for an unknown id. */\nexport function readBoardItem(id: number, cwd = process.cwd()): BoardItem {\n const root = assertInitialized(cwd);\n const file = itemFile(root, id);\n const item = file ? parseItem(JSON.parse(readFileSync(file, \"utf8\"))) : undefined;\n\n if (!item) {\n throw new WarlockError(\n \"WL7402\",\n `Board item ${id} does not exist. Run \\`warlock board status\\` to list the items.`,\n );\n }\n\n return item;\n}\n\n/** Add an item in state `todo`, with a fresh id no other writer can take. */\nexport function addBoardItem(input: AddBoardItemInput, cwd = process.cwd()): BoardItem {\n const root = assertInitialized(cwd);\n const title = input.title.replace(/[\\r\\n]+/g, \" \").trim();\n\n if (title.length === 0) throw new Error(\"A board item needs a title.\");\n\n for (const [label, name] of [\n [\"assignee\", input.assignee],\n [\"reviewer\", input.reviewer],\n [\"by\", input.by],\n ] as const) {\n if (name) assertAgentName(name, label);\n }\n\n const directory = path.join(root, \"items\");\n const id = nextNumber(directory, \".json\");\n const at = (input.now ?? (() => new Date()))().toISOString();\n const item: BoardItem = {\n id,\n title,\n state: \"todo\",\n assignee: input.assignee ?? null,\n reviewer: input.reviewer ?? null,\n createdAt: at,\n updatedAt: at,\n history: [{ from: null, to: \"todo\", by: input.by ?? null, at, note: null }],\n };\n\n writeAtomic(\n path.join(directory, `${pad(id)}-${boardSlug(title, \"item\")}.json`),\n `${JSON.stringify(item, null, 2)}\\n`,\n );\n\n return item;\n}\n\n/** The states an item in `state` may move to. */\nexport function nextBoardStates(state: BoardState): readonly BoardState[] {\n return BOARD_TRANSITIONS[state];\n}\n\n/** Throw `WL7403` unless `from → to` is in {@link BOARD_TRANSITIONS}. */\nexport function assertBoardTransition(id: number, from: BoardState, to: BoardState): void {\n if (!BOARD_TRANSITIONS[from].includes(to)) {\n throw new WarlockError(\n \"WL7403\",\n `Board item ${id} is \"${from}\" and cannot move to \"${to}\". Allowed next states: ${BOARD_TRANSITIONS[from].join(\", \")}.`,\n );\n }\n}\n\n/**\n * Move an item to another state, recording who moved it and why. Throws\n * `WL7402` for an unknown id and `WL7403` for a move the state machine does\n * not allow.\n */\nexport function moveBoardItem(\n id: number,\n to: BoardState,\n options: MoveBoardItemOptions = {},\n cwd = process.cwd(),\n): BoardItem {\n const root = assertInitialized(cwd);\n const item = readBoardItem(id, cwd);\n const file = itemFile(root, id);\n\n if (options.by) assertAgentName(options.by, \"by\");\n\n assertBoardTransition(id, item.state, to);\n\n const at = (options.now ?? (() => new Date()))().toISOString();\n const moved: BoardItem = {\n ...item,\n state: to,\n updatedAt: at,\n history: [\n ...item.history,\n { from: item.state, to, by: options.by ?? null, at, note: options.note ?? null },\n ],\n };\n\n if (file) writeAtomic(file, `${JSON.stringify(moved, null, 2)}\\n`);\n\n return moved;\n}\n\nfunction inboxDirectory(root: string, agent: string): string {\n return path.join(root, `to-${agent}`);\n}\n\n/**\n * Write a message to `to-<agent>/NNNN-<slug>.md`. Messages are append-only:\n * the number is reserved exclusively and the file is created with `wx`, so it\n * is never rewritten. A verdict with an `item` also moves the item to\n * `approved` / `changes-requested` — before the message is written, so a\n * refused move (`WL7403`) leaves no message behind.\n */\nexport function sendBoardMessage(\n input: SendBoardMessageInput,\n cwd = process.cwd(),\n): SendBoardMessageResult {\n const root = assertInitialized(cwd);\n\n assertAgentName(input.to, \"recipient\");\n assertAgentName(input.from, \"sender\");\n\n const subject = input.subject.replace(/[\\r\\n]+/g, \" \").trim();\n\n if (subject.length === 0) throw new Error(\"A board message needs a subject.\");\n\n const itemId = input.item ?? null;\n const verdict = input.verdict ?? null;\n const now = input.now ?? (() => new Date());\n\n if (itemId !== null) readBoardItem(itemId, cwd);\n\n const item =\n itemId !== null && verdict !== null\n ? moveBoardItem(itemId, verdict, { by: input.from, note: subject, now }, cwd)\n : null;\n\n const directory = inboxDirectory(root, input.to);\n\n mkdirSync(directory, { recursive: true });\n\n const number = nextNumber(directory, \".md\");\n const at = now().toISOString();\n const name = `${pad(number)}-${boardSlug(subject, \"message\")}.md`;\n const file = path.join(directory, name);\n\n writeFileSync(\n file,\n formatBoardMessage(\n { from: input.from, to: input.to, item: itemId, subject, at },\n input.body ?? \"\",\n verdict,\n ),\n { encoding: \"utf8\", flag: \"wx\" },\n );\n\n return {\n message: {\n number,\n file: toPosix(path.relative(cwd, file)),\n from: input.from,\n to: input.to,\n item: itemId,\n subject,\n at,\n body: (input.body ?? \"\").replace(/\\s+$/, \"\"),\n verdict,\n },\n item,\n };\n}\n\n/** The messages in an agent's inbox numbered above `since`, oldest first. */\nexport function listBoardMessages(\n agent: string,\n options: { since?: number } = {},\n cwd = process.cwd(),\n): BoardMessage[] {\n const root = assertInitialized(cwd);\n\n assertAgentName(agent);\n\n const directory = inboxDirectory(root, agent);\n const since = options.since ?? 0;\n\n return numberedEntries(directory, \".md\")\n .filter((entry) => entry.number > since)\n .map(({ number, name }) => {\n const file = path.join(directory, name);\n const parsed = parseBoardMessage(readFileSync(file, \"utf8\"));\n\n return {\n number,\n file: toPosix(path.relative(cwd, file)),\n from: parsed.from,\n to: parsed.to || agent,\n item: parsed.item,\n subject: parsed.subject,\n at: parsed.at,\n body: parsed.body,\n verdict: parsed.verdict,\n };\n });\n}\n\n/** The highest message number `watch` has returned to `agent` (0 when none). */\nexport function readBoardCursor(agent: string, cwd = process.cwd()): number {\n const root = assertInitialized(cwd);\n\n assertAgentName(agent);\n\n const file = path.join(root, \"cursors\", agent);\n\n if (!existsSync(file)) return 0;\n\n const value = Number.parseInt(readFileSync(file, \"utf8\").trim(), 10);\n\n return Number.isInteger(value) && value > 0 ? value : 0;\n}\n\n/** Record that `agent` has seen messages up to `number`. Never moves the cursor back. */\nexport function writeBoardCursor(agent: string, number: number, cwd = process.cwd()): number {\n const root = assertInitialized(cwd);\n const current = readBoardCursor(agent, cwd);\n const next = Math.max(current, number);\n\n if (next !== current) {\n mkdirSync(path.join(root, \"cursors\"), { recursive: true });\n writeAtomic(path.join(root, \"cursors\", agent), `${next}\\n`);\n }\n\n return next;\n}\n\n/** Every item and every inbox with its message count, cursor and unread count. */\nexport function readBoardStatus(cwd = process.cwd()): BoardStatus {\n const root = assertInitialized(cwd);\n const inboxes: BoardInbox[] = readdirSync(root, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && entry.name.startsWith(\"to-\"))\n .map((entry) => entry.name.slice(3))\n .filter((agent) => /^[a-z0-9][a-z0-9-]*$/.test(agent))\n .sort()\n .map((agent) => {\n const numbers = numberedEntries(inboxDirectory(root, agent), \".md\").map(\n (entry) => entry.number,\n );\n const cursor = readBoardCursor(agent, cwd);\n\n return {\n agent,\n messages: numbers.length,\n cursor,\n unread: numbers.filter((number) => number > cursor).length,\n };\n });\n\n return { schemaVersion: 1, items: listBoardItems(cwd), inboxes };\n}\n\n/**\n * Block until `agent` has a message numbered above `since` (default: its\n * cursor), then return every such message and advance the cursor past them.\n *\n * Polls the inbox every `intervalMs`; throws `WL7404` when `timeoutMs` passes\n * first. An aborted `signal` resolves with no messages.\n */\nexport async function watchBoard(\n options: WatchBoardOptions,\n cwd = process.cwd(),\n): Promise<WatchBoardResult> {\n assertInitialized(cwd);\n assertAgentName(options.agent);\n\n const since = options.since ?? readBoardCursor(options.agent, cwd);\n const timeoutMs = options.timeoutMs ?? 10 * 60 * 1000;\n const intervalMs = options.intervalMs ?? 250;\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const messages = listBoardMessages(options.agent, { since }, cwd);\n\n if (messages.length > 0) {\n const newest = messages[messages.length - 1]?.number ?? since;\n\n return {\n agent: options.agent,\n messages,\n cursor: writeBoardCursor(options.agent, newest, cwd),\n };\n }\n\n if (options.signal?.aborted) {\n return { agent: options.agent, messages: [], cursor: readBoardCursor(options.agent, cwd) };\n }\n\n const remaining = deadline - Date.now();\n\n if (remaining <= 0) {\n throw new WarlockError(\n \"WL7404\",\n `No new message for \"${options.agent}\" after ${Math.round(timeoutMs / 1000)}s (watching messages above #${since}).`,\n );\n }\n\n await new Promise((resolve) => setTimeout(resolve, Math.min(intervalMs, remaining)));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tooling/board/board.types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Types and the state machine of the agent board (`warlock board`): a
|
|
4
|
+
* git-ignored folder two coding agents — usually an implementer and a
|
|
5
|
+
* reviewer — share to track work items and exchange append-only messages.
|
|
6
|
+
*/
|
|
7
|
+
/** Where the board lives, under the project root. */
|
|
8
|
+
export declare const BOARD_DIRECTORY = ".warlock/board";
|
|
9
|
+
/** Every state an item can be in. */
|
|
10
|
+
export declare const BOARD_STATES: readonly ["todo", "in-progress", "ready-for-review", "changes-requested", "approved", "blocked"];
|
|
11
|
+
/** One item state. */
|
|
12
|
+
export type BoardState = (typeof BOARD_STATES)[number];
|
|
13
|
+
/**
|
|
14
|
+
* The allowed moves: an item in the key state may move to any listed state,
|
|
15
|
+
* and nowhere else. `approved` may only be reopened (`in-progress`).
|
|
16
|
+
*/
|
|
17
|
+
export declare const BOARD_TRANSITIONS: Readonly<Record<BoardState, readonly BoardState[]>>;
|
|
18
|
+
/** A review verdict a message can carry. */
|
|
19
|
+
export type BoardVerdict = "approved" | "changes-requested";
|
|
20
|
+
/** The exact final line each verdict is written as. */
|
|
21
|
+
export declare const BOARD_VERDICT_LINES: Readonly<Record<BoardVerdict, string>>;
|
|
22
|
+
/** One recorded state change of an item. */
|
|
23
|
+
export type BoardHistoryEntry = {
|
|
24
|
+
/** `null` for the creation entry. */
|
|
25
|
+
from: BoardState | null;
|
|
26
|
+
to: BoardState;
|
|
27
|
+
/** The agent that made the move, or `null` when not given. */
|
|
28
|
+
by: string | null;
|
|
29
|
+
/** ISO time. */
|
|
30
|
+
at: string;
|
|
31
|
+
note: string | null;
|
|
32
|
+
};
|
|
33
|
+
/** One work item, stored as `items/NNNN-<slug>.json`. */
|
|
34
|
+
export type BoardItem = {
|
|
35
|
+
id: number;
|
|
36
|
+
title: string;
|
|
37
|
+
state: BoardState;
|
|
38
|
+
assignee: string | null;
|
|
39
|
+
reviewer: string | null;
|
|
40
|
+
createdAt: string;
|
|
41
|
+
updatedAt: string;
|
|
42
|
+
history: BoardHistoryEntry[];
|
|
43
|
+
};
|
|
44
|
+
/** One message, stored as `to-<agent>/NNNN-<slug>.md`. */
|
|
45
|
+
export type BoardMessage = {
|
|
46
|
+
/** The per-recipient sequence number (`NNNN`). */
|
|
47
|
+
number: number;
|
|
48
|
+
/** Path relative to the project root, POSIX separators. */
|
|
49
|
+
file: string;
|
|
50
|
+
from: string;
|
|
51
|
+
to: string;
|
|
52
|
+
/** The item the message is about, or `null`. */
|
|
53
|
+
item: number | null;
|
|
54
|
+
subject: string;
|
|
55
|
+
/** ISO time. */
|
|
56
|
+
at: string;
|
|
57
|
+
body: string;
|
|
58
|
+
verdict: BoardVerdict | null;
|
|
59
|
+
};
|
|
60
|
+
/** One recipient's inbox, as `readBoardStatus` reports it. */
|
|
61
|
+
export type BoardInbox = {
|
|
62
|
+
agent: string;
|
|
63
|
+
/** Messages in the inbox. */
|
|
64
|
+
messages: number;
|
|
65
|
+
/** The highest message number `watch` has returned to this agent (0 = none). */
|
|
66
|
+
cursor: number;
|
|
67
|
+
/** Messages numbered above the cursor. */
|
|
68
|
+
unread: number;
|
|
69
|
+
};
|
|
70
|
+
/** What `warlock board status --json` prints without an item id. */
|
|
71
|
+
export type BoardStatus = {
|
|
72
|
+
schemaVersion: 1;
|
|
73
|
+
items: BoardItem[];
|
|
74
|
+
inboxes: BoardInbox[];
|
|
75
|
+
};
|
|
76
|
+
/** Whether a string is a board state. */
|
|
77
|
+
export declare function isBoardState(value: string): value is BoardState;
|
|
78
|
+
/** Whether a string is a verdict. */
|
|
79
|
+
export declare function isBoardVerdict(value: string): value is BoardVerdict;
|
|
80
|
+
//#endregion
|
|
81
|
+
//# sourceMappingURL=board.types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.types.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/board/board.types.ts"],"mappings":";;;;;;;qBAOa;;qBAGA;;YAUD,qBAAqB;;;;;qBAMpB,mBAAmB,SAAS,OAAO,qBAAqB;;YAUzD;;qBAGC,qBAAqB,SAAS,OAAO;;YAMtC;;EAEV,MAAM;EACN,IAAI;;EAEJ;;EAEA;EACA;;;YAIU;EACV;EACA;EACA,OAAO;EACP;EACA;EACA;EACA;EACA,SAAS;;;YAIC;;EAEV;;EAEA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA,SAAS;;;YAIC;EACV;;EAEA;;EAEA;;EAEA;;;YAIU;EACV;EACA,OAAO;EACP,SAAS;;;wBAIK,aAAa,gBAAgB,SAAS;;wBAKtC,eAAe,gBAAgB,SAAS"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tooling/board/board.types.ts
|
|
2
|
+
/**
|
|
3
|
+
* Types and the state machine of the agent board (`warlock board`): a
|
|
4
|
+
* git-ignored folder two coding agents — usually an implementer and a
|
|
5
|
+
* reviewer — share to track work items and exchange append-only messages.
|
|
6
|
+
*/
|
|
7
|
+
/** Where the board lives, under the project root. */
|
|
8
|
+
const BOARD_DIRECTORY = ".warlock/board";
|
|
9
|
+
/** Every state an item can be in. */
|
|
10
|
+
const BOARD_STATES = [
|
|
11
|
+
"todo",
|
|
12
|
+
"in-progress",
|
|
13
|
+
"ready-for-review",
|
|
14
|
+
"changes-requested",
|
|
15
|
+
"approved",
|
|
16
|
+
"blocked"
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* The allowed moves: an item in the key state may move to any listed state,
|
|
20
|
+
* and nowhere else. `approved` may only be reopened (`in-progress`).
|
|
21
|
+
*/
|
|
22
|
+
const BOARD_TRANSITIONS = {
|
|
23
|
+
todo: ["in-progress", "blocked"],
|
|
24
|
+
"in-progress": [
|
|
25
|
+
"ready-for-review",
|
|
26
|
+
"blocked",
|
|
27
|
+
"todo"
|
|
28
|
+
],
|
|
29
|
+
"ready-for-review": [
|
|
30
|
+
"approved",
|
|
31
|
+
"changes-requested",
|
|
32
|
+
"in-progress"
|
|
33
|
+
],
|
|
34
|
+
"changes-requested": ["in-progress", "blocked"],
|
|
35
|
+
approved: ["in-progress"],
|
|
36
|
+
blocked: ["todo", "in-progress"]
|
|
37
|
+
};
|
|
38
|
+
/** The exact final line each verdict is written as. */
|
|
39
|
+
const BOARD_VERDICT_LINES = {
|
|
40
|
+
approved: "VERDICT: APPROVED",
|
|
41
|
+
"changes-requested": "VERDICT: CHANGES REQUESTED"
|
|
42
|
+
};
|
|
43
|
+
/** Whether a string is a board state. */
|
|
44
|
+
function isBoardState(value) {
|
|
45
|
+
return BOARD_STATES.includes(value);
|
|
46
|
+
}
|
|
47
|
+
/** Whether a string is a verdict. */
|
|
48
|
+
function isBoardVerdict(value) {
|
|
49
|
+
return value === "approved" || value === "changes-requested";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { BOARD_DIRECTORY, BOARD_STATES, BOARD_TRANSITIONS, BOARD_VERDICT_LINES, isBoardState, isBoardVerdict };
|
|
54
|
+
//# sourceMappingURL=board.types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.types.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/board/board.types.ts"],"sourcesContent":["/**\n * Types and the state machine of the agent board (`warlock board`): a\n * git-ignored folder two coding agents — usually an implementer and a\n * reviewer — share to track work items and exchange append-only messages.\n */\n\n/** Where the board lives, under the project root. */\nexport const BOARD_DIRECTORY = \".warlock/board\";\n\n/** Every state an item can be in. */\nexport const BOARD_STATES = [\n \"todo\",\n \"in-progress\",\n \"ready-for-review\",\n \"changes-requested\",\n \"approved\",\n \"blocked\",\n] as const;\n\n/** One item state. */\nexport type BoardState = (typeof BOARD_STATES)[number];\n\n/**\n * The allowed moves: an item in the key state may move to any listed state,\n * and nowhere else. `approved` may only be reopened (`in-progress`).\n */\nexport const BOARD_TRANSITIONS: Readonly<Record<BoardState, readonly BoardState[]>> = {\n todo: [\"in-progress\", \"blocked\"],\n \"in-progress\": [\"ready-for-review\", \"blocked\", \"todo\"],\n \"ready-for-review\": [\"approved\", \"changes-requested\", \"in-progress\"],\n \"changes-requested\": [\"in-progress\", \"blocked\"],\n approved: [\"in-progress\"],\n blocked: [\"todo\", \"in-progress\"],\n};\n\n/** A review verdict a message can carry. */\nexport type BoardVerdict = \"approved\" | \"changes-requested\";\n\n/** The exact final line each verdict is written as. */\nexport const BOARD_VERDICT_LINES: Readonly<Record<BoardVerdict, string>> = {\n approved: \"VERDICT: APPROVED\",\n \"changes-requested\": \"VERDICT: CHANGES REQUESTED\",\n};\n\n/** One recorded state change of an item. */\nexport type BoardHistoryEntry = {\n /** `null` for the creation entry. */\n from: BoardState | null;\n to: BoardState;\n /** The agent that made the move, or `null` when not given. */\n by: string | null;\n /** ISO time. */\n at: string;\n note: string | null;\n};\n\n/** One work item, stored as `items/NNNN-<slug>.json`. */\nexport type BoardItem = {\n id: number;\n title: string;\n state: BoardState;\n assignee: string | null;\n reviewer: string | null;\n createdAt: string;\n updatedAt: string;\n history: BoardHistoryEntry[];\n};\n\n/** One message, stored as `to-<agent>/NNNN-<slug>.md`. */\nexport type BoardMessage = {\n /** The per-recipient sequence number (`NNNN`). */\n number: number;\n /** Path relative to the project root, POSIX separators. */\n file: string;\n from: string;\n to: string;\n /** The item the message is about, or `null`. */\n item: number | null;\n subject: string;\n /** ISO time. */\n at: string;\n body: string;\n verdict: BoardVerdict | null;\n};\n\n/** One recipient's inbox, as `readBoardStatus` reports it. */\nexport type BoardInbox = {\n agent: string;\n /** Messages in the inbox. */\n messages: number;\n /** The highest message number `watch` has returned to this agent (0 = none). */\n cursor: number;\n /** Messages numbered above the cursor. */\n unread: number;\n};\n\n/** What `warlock board status --json` prints without an item id. */\nexport type BoardStatus = {\n schemaVersion: 1;\n items: BoardItem[];\n inboxes: BoardInbox[];\n};\n\n/** Whether a string is a board state. */\nexport function isBoardState(value: string): value is BoardState {\n return (BOARD_STATES as readonly string[]).includes(value);\n}\n\n/** Whether a string is a verdict. */\nexport function isBoardVerdict(value: string): value is BoardVerdict {\n return value === \"approved\" || value === \"changes-requested\";\n}\n"],"mappings":";;;;;;;AAOA,MAAa,kBAAkB;;AAG/B,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;AACF;;;;;AASA,MAAa,oBAAyE;CACpF,MAAM,CAAC,eAAe,SAAS;CAC/B,eAAe;EAAC;EAAoB;EAAW;CAAM;CACrD,oBAAoB;EAAC;EAAY;EAAqB;CAAa;CACnE,qBAAqB,CAAC,eAAe,SAAS;CAC9C,UAAU,CAAC,aAAa;CACxB,SAAS,CAAC,QAAQ,aAAa;AACjC;;AAMA,MAAa,sBAA8D;CACzE,UAAU;CACV,qBAAqB;AACvB;;AA8DA,SAAgB,aAAa,OAAoC;CAC/D,OAAQ,aAAmC,SAAS,KAAK;AAC3D;;AAGA,SAAgB,eAAe,OAAsC;CACnE,OAAO,UAAU,cAAc,UAAU;AAC3C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ToolingProblem } from "../problem.mjs";
|
|
2
|
+
//#region ../../packages/core/src/tooling/check/changed-files.d.ts
|
|
3
|
+
/** The result of one git invocation. */
|
|
4
|
+
export type GitResult = {
|
|
5
|
+
code: number;
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr: string;
|
|
8
|
+
};
|
|
9
|
+
/** Runs `git <args>` in `cwd`. Injectable so tests need no repository. */
|
|
10
|
+
export type GitRunner = (args: readonly string[], cwd: string) => Promise<GitResult>;
|
|
11
|
+
/** The default {@link GitRunner}: the `git` on PATH. */
|
|
12
|
+
export declare const runGit: GitRunner;
|
|
13
|
+
/**
|
|
14
|
+
* The source files changed in the working tree — tracked changes against
|
|
15
|
+
* `base` (or HEAD) plus untracked files — relative to `cwd`, existing only.
|
|
16
|
+
*
|
|
17
|
+
* With `base`, the comparison point is `git merge-base <base> HEAD`, so a
|
|
18
|
+
* branch is compared with where it left `base` rather than with `base`'s tip.
|
|
19
|
+
* A git failure is a `WL8006` environment problem.
|
|
20
|
+
*/
|
|
21
|
+
export declare function listChangedFiles(options: {
|
|
22
|
+
cwd: string;
|
|
23
|
+
base?: string;
|
|
24
|
+
git?: GitRunner;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
files: string[];
|
|
27
|
+
} | {
|
|
28
|
+
problem: ToolingProblem;
|
|
29
|
+
}>;
|
|
30
|
+
//#endregion
|
|
31
|
+
//# sourceMappingURL=changed-files.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changed-files.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tooling/check/changed-files.ts"],"mappings":";;;YAMY;EAAc;EAAc;EAAgB;;;YAG5C,aAAa,yBAAyB,gBAAgB,QAAQ;;qBAG7D,QAAQ;;;;;;;;;wBAoCC,iBAAiB;EACrC;EACA;EACA,MAAM;IACJ;EAAU;;EAAsB,SAAS"}
|