From 439171e2c9bfe58b0e48f2dbc031984c64f7b380 Mon Sep 17 00:00:00 2001 From: Travis Fischer Date: Thu, 5 Jun 2025 00:33:33 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/api/package.json | 2 +- apps/api/src/server.ts | 2 +- apps/e2e/package.json | 2 +- apps/e2e/src/__snapshots__/e2e.test.ts.snap | 36 --- apps/e2e/src/e2e.test.ts | 20 +- apps/e2e/src/fixtures.ts | 9 +- apps/gateway/package.json | 10 +- apps/gateway/src/lib/agentic-client.ts | 3 +- .../src/lib/cf-validate-json-schema-object.ts | 6 +- apps/gateway/src/lib/fetch-cache.ts | 3 +- apps/gateway/src/lib/get-tool.ts | 11 +- .../gateway/src/lib/resolve-origin-request.ts | 5 +- apps/gateway/src/worker.ts | 26 +- eslint.config.js | 6 - packages/hono/package.json | 5 +- packages/hono/src/error-handler.ts | 12 +- packages/json-schema/src/coercion.ts | 1 + packages/json-schema/src/validator.ts | 8 +- packages/openapi-utils/package.json | 10 +- pnpm-lock.yaml | 238 ++++++++++-------- pnpm-workspace.yaml | 54 ++-- 21 files changed, 243 insertions(+), 226 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index 583ec800..c79c4bb8 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,5 +1,5 @@ { - "name": "@agentic/platform-api", + "name": "api", "private": true, "version": "0.1.0", "description": "Internal Agentic platform API service.", diff --git a/apps/api/src/server.ts b/apps/api/src/server.ts index e2cd6747..2adcaa10 100644 --- a/apps/api/src/server.ts +++ b/apps/api/src/server.ts @@ -14,6 +14,7 @@ import { initExitHooks } from './lib/exit-hooks' export const app = new OpenAPIHono() +app.onError(errorHandler) app.use(middleware.sentry()) app.use(middleware.compress()) app.use( @@ -29,7 +30,6 @@ app.use( app.use(middleware.init) app.use(middleware.accessLogger) app.use(middleware.responseTime) -app.onError(errorHandler) // Mount all auth routes which are handled by OpenAuth app.route('', authRouter) diff --git a/apps/e2e/package.json b/apps/e2e/package.json index 123efdcd..6be39f84 100644 --- a/apps/e2e/package.json +++ b/apps/e2e/package.json @@ -26,6 +26,6 @@ "@agentic/platform-api-client": "workspace:*", "@agentic/platform-core": "workspace:*", "@agentic/platform-fixtures": "workspace:*", - "fast-content-type-parse": "^3.0.0" + "fast-content-type-parse": "catalog:" } } diff --git a/apps/e2e/src/__snapshots__/e2e.test.ts.snap b/apps/e2e/src/__snapshots__/e2e.test.ts.snap index 3e26bef1..756fbbea 100644 --- a/apps/e2e/src/__snapshots__/e2e.test.ts.snap +++ b/apps/e2e/src/__snapshots__/e2e.test.ts.snap @@ -36,18 +36,6 @@ nostrum rerum est autem sunt rem eveniet architecto", } `; -exports[`Basic OpenAPI getPost(1) > 0.2: GET dev/test-basic-openapi@b6e21206/getPost 1`] = ` -{ - "body": "quia et suscipit -suscipit recusandae consequuntur expedita et cum -reprehenderit molestiae ut ut quas totam -nostrum rerum est autem sunt rem eveniet architecto", - "id": 1, - "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", - "userId": 1, -} -`; - exports[`Basic OpenAPI getPost(1) > 0.3: GET dev/test-basic-openapi@b6e21206/getPost 1`] = ` { "body": "quia et suscipit @@ -60,18 +48,6 @@ nostrum rerum est autem sunt rem eveniet architecto", } `; -exports[`Basic OpenAPI getPost(1) > 0.3: POST dev/test-basic-openapi/getPost 1`] = ` -{ - "body": "quia et suscipit -suscipit recusandae consequuntur expedita et cum -reprehenderit molestiae ut ut quas totam -nostrum rerum est autem sunt rem eveniet architecto", - "id": 1, - "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", - "userId": 1, -} -`; - exports[`Basic OpenAPI getPost(1) > 0.4: POST dev/test-basic-openapi/getPost 1`] = ` { "body": "quia et suscipit @@ -84,18 +60,6 @@ nostrum rerum est autem sunt rem eveniet architecto", } `; -exports[`Basic OpenAPI getPost(1) > 0.4: POST dev/test-basic-openapi@latest/getPost 1`] = ` -{ - "body": "quia et suscipit -suscipit recusandae consequuntur expedita et cum -reprehenderit molestiae ut ut quas totam -nostrum rerum est autem sunt rem eveniet architecto", - "id": 1, - "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", - "userId": 1, -} -`; - exports[`Basic OpenAPI getPost(1) > 0.5: POST dev/test-basic-openapi@latest/getPost 1`] = ` { "body": "quia et suscipit diff --git a/apps/e2e/src/e2e.test.ts b/apps/e2e/src/e2e.test.ts index d47dc492..7d69b207 100644 --- a/apps/e2e/src/e2e.test.ts +++ b/apps/e2e/src/e2e.test.ts @@ -9,7 +9,10 @@ const ky = defaultKy.extend({ prefixUrl: env.AGENTIC_GATEWAY_BASE_URL, // Disable automatic retries for testing. - retry: 0 + retry: 0, + + // Some tests expect HTTP errors, so handle them manually. + throwHttpErrors: false }) for (const [i, fixtureSuite] of fixtureSuites.entries()) { @@ -29,7 +32,7 @@ for (const [i, fixtureSuite] of fixtureSuites.entries()) { const { snapshot = status >= 200 && status < 300 } = fixture.response ?? {} - test.sequential( + test( `${i}.${j}: ${method} ${fixture.path}`, { timeout: fixture.timeout ?? 60_000 @@ -50,6 +53,10 @@ for (const [i, fixtureSuite] of fixtureSuites.entries()) { } } + // console.log(`${i}.${j}: ${method} ${fixture.path} => ${status}`, { + // headers: Object.fromEntries(res.headers.entries()) + // }) + let body: any if (type.includes('json')) { @@ -81,11 +88,10 @@ for (const [i, fixtureSuite] of fixtureSuites.entries()) { } } - console.log(`${i}.${j}: ${method} ${fixture.path}`, { - status, - body, - headers: Object.fromEntries(res.headers.entries()) - }) + // console.log(`${i}.${j}: ${method} ${fixture.path} => ${status}`, { + // body, + // headers: Object.fromEntries(res.headers.entries()) + // }) } ) } diff --git a/apps/e2e/src/fixtures.ts b/apps/e2e/src/fixtures.ts index 8cbac5eb..b845c06e 100644 --- a/apps/e2e/src/fixtures.ts +++ b/apps/e2e/src/fixtures.ts @@ -4,6 +4,9 @@ export type E2ETestFixture = { /** @default 60_000 milliseconds */ timeout?: number + /** @default false */ + // only?: boolean + request?: { /** @default 'GET' */ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' @@ -29,6 +32,9 @@ export type E2ETestFixture = { export type E2ETestFixtureSuite = { title: string fixtures: E2ETestFixture[] + + /** @default false */ + // only?: boolean } export const fixtureSuites: E2ETestFixtureSuite[] = [ @@ -84,8 +90,7 @@ export const fixtureSuites: E2ETestFixtureSuite[] = [ path: 'dev/test-basic-openapi/getPost', response: { - // TODO: need to instrument worker.ts to handle HTTP errors like `hono` middleware from `apps/api` does - + // Missing `postId` parameter. status: 400 } }, diff --git a/apps/gateway/package.json b/apps/gateway/package.json index d840b928..b5058902 100644 --- a/apps/gateway/package.json +++ b/apps/gateway/package.json @@ -1,5 +1,5 @@ { - "name": "@agentic/platform-api-gateway", + "name": "gateway", "private": true, "version": "0.1.0", "description": "Internal Agentic platform API gateway service.", @@ -38,15 +38,15 @@ "@agentic/platform-validators": "workspace:*", "@hono/zod-validator": "catalog:", "@modelcontextprotocol/sdk": "catalog:", - "fast-content-type-parse": "^3.0.0", + "fast-content-type-parse": "catalog:", "hono": "catalog:", "ky": "catalog:", - "plur": "^5.1.0", + "plur": "catalog:", "type-fest": "catalog:" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20250604.0", - "@edge-runtime/vm": "^5.0.0", + "@cloudflare/workers-types": "catalog:", + "@edge-runtime/vm": "catalog:", "wrangler": "catalog:" } } diff --git a/apps/gateway/src/lib/agentic-client.ts b/apps/gateway/src/lib/agentic-client.ts index 5f736d06..553db1d0 100644 --- a/apps/gateway/src/lib/agentic-client.ts +++ b/apps/gateway/src/lib/agentic-client.ts @@ -5,6 +5,7 @@ import type { GatewayHonoContext } from './types' export function createAgenticClient(ctx: GatewayHonoContext) { const cache = ctx.get('cache') + const logger = ctx.get('logger') const client = new AgenticApiClient({ apiBaseUrl: ctx.env.AGENTIC_API_BASE_URL, @@ -31,7 +32,7 @@ export function createAgenticClient(ctx: GatewayHonoContext) { // Agentic's backend API. ctx.executionCtx.waitUntil( cache.put(request, response.clone()).catch((err) => { - console.warn('cache put error', request, err) + logger.warn('cache put error', request, err) }) ) } diff --git a/apps/gateway/src/lib/cf-validate-json-schema-object.ts b/apps/gateway/src/lib/cf-validate-json-schema-object.ts index 2cdcedee..b60cd73c 100644 --- a/apps/gateway/src/lib/cf-validate-json-schema-object.ts +++ b/apps/gateway/src/lib/cf-validate-json-schema-object.ts @@ -5,9 +5,9 @@ import plur from 'plur' /** * Validates `data` against the provided JSON schema object. * - * This method uses `@cfworker/json-schema` and does not use `ajv` because CF - * workers does not support `ajv` due to its dynamic code generation and - * evaluation. + * This method uses a fork of `@cfworker/json-schema`. It does not use `ajv` + * because `ajv` is not supported on CF workers due to its dynamic code + * generation and evaluation. * * If you want a stricter version of this method which uses `ajv` and you're * not running on CF workers, consider using `validateJsonSchemaObject` from diff --git a/apps/gateway/src/lib/fetch-cache.ts b/apps/gateway/src/lib/fetch-cache.ts index 72b4f785..89040faf 100644 --- a/apps/gateway/src/lib/fetch-cache.ts +++ b/apps/gateway/src/lib/fetch-cache.ts @@ -11,6 +11,7 @@ export async function fetchCache( } ): Promise { const cache = ctx.get('cache') + const logger = ctx.get('logger') let response: Response | undefined if (cacheKey) { @@ -26,7 +27,7 @@ export async function fetchCache( // Note that cloudflare's `cache` should respect response headers. ctx.executionCtx.waitUntil( cache.put(cacheKey, response.clone()).catch((err) => { - console.warn('cache put error', cacheKey, err) + logger.warn('cache put error', cacheKey, err) }) ) } diff --git a/apps/gateway/src/lib/get-tool.ts b/apps/gateway/src/lib/get-tool.ts index 4fa4563c..da2bbe21 100644 --- a/apps/gateway/src/lib/get-tool.ts +++ b/apps/gateway/src/lib/get-tool.ts @@ -33,12 +33,13 @@ export function getTool({ if (operationToolName) { tool = deployment.tools.find((tool) => tool.name === operationToolName) + + assert( + tool, + 404, + `Tool not found "${toolName}" for deployment "${deployment.identifier}": did you mean "${operationToolName}"?` + ) } - assert( - tool, - 404, - `Tool not found "${toolName}" for deployment "${deployment.identifier}": did you mean "${operationToolName}"?` - ) } } diff --git a/apps/gateway/src/lib/resolve-origin-request.ts b/apps/gateway/src/lib/resolve-origin-request.ts index 8bf32fcd..50383265 100644 --- a/apps/gateway/src/lib/resolve-origin-request.ts +++ b/apps/gateway/src/lib/resolve-origin-request.ts @@ -23,6 +23,7 @@ import { updateOriginRequest } from './update-origin-request' export async function resolveOriginRequest( ctx: GatewayHonoContext ): Promise { + const logger = ctx.get('logger') // cf-connecting-ip should always be present, but if not we can fallback to XFF. const ip = ctx.req.header('cf-connecting-ip') || @@ -47,7 +48,7 @@ export async function resolveOriginRequest( toolPath }) - console.log('request', { + logger.debug('request', { method, pathname, deploymentIdentifier: deployment.identifier, @@ -185,7 +186,7 @@ export async function resolveOriginRequest( originRequest = new Request(originRequestUrl, ctx.req.raw) } - console.log('originRequestUrl', originRequest.url) + logger.info('originRequestUrl', originRequest.url) updateOriginRequest(originRequest, { consumer, deployment }) } diff --git a/apps/gateway/src/worker.ts b/apps/gateway/src/worker.ts index c1fc0f98..b04cd9b8 100644 --- a/apps/gateway/src/worker.ts +++ b/apps/gateway/src/worker.ts @@ -1,7 +1,5 @@ import { assert } from '@agentic/platform-core' import { - accessLogger, - compress, cors, errorHandler, init, @@ -22,8 +20,15 @@ export { DurableObjectRateLimiter } from './durable-object' export const app = new Hono() +app.onError(errorHandler) app.use(sentry()) -app.use(compress()) + +// TODO: Compression is causing a weird bug on dev even for simple responses. +// I think it's because wrangler is changing the response to be streamed +// with `transfer-encoding: chunked`, which is not compatible with +// `hono/compress`. +// app.use(compress()) + app.use( cors({ origin: '*', @@ -35,9 +40,10 @@ app.use( }) ) app.use(init) -app.use(accessLogger) + +// Wrangler does this for us. TODO: Does this happen on prod? +// app.use(accessLogger) app.use(responseTime) -app.onError(errorHandler) app.all(async (ctx) => { ctx.set('cache', caches.default) @@ -120,14 +126,14 @@ app.all(async (ctx) => { export default { async fetch( - inputReq: Request, - inputEnv: Env, - executionCtx: ExecutionContext + request: Request, + env: Env, + ctx: ExecutionContext ): Promise { let parsedEnv: Env try { - parsedEnv = parseEnv(inputEnv) + parsedEnv = parseEnv(env) } catch (err: any) { // TODO: Better error handling return new Response( @@ -140,6 +146,6 @@ export default { ) } - return app.fetch(inputReq, parsedEnv, executionCtx) + return app.fetch(request, parsedEnv, ctx) } } satisfies ExportedHandler diff --git a/eslint.config.js b/eslint.config.js index 3609c735..0ed50595 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -26,12 +26,6 @@ export default [ 'unicorn/no-process-exit': 'off' } }, - { - files: ['apps/gateway/src/**/*.ts'], - rules: { - 'no-console': 'off' - } - }, { files: ['apps/api/src/**/*.ts'], plugins: { diff --git a/packages/hono/package.json b/packages/hono/package.json index 7c17382c..954c148f 100644 --- a/packages/hono/package.json +++ b/packages/hono/package.json @@ -25,14 +25,15 @@ "dependencies": { "@agentic/platform-core": "workspace:*", "@hono/sentry": "catalog:", - "@sentry/core": "^9.26.0", + "@sentry/core": "catalog:", "dotenv": "catalog:", "eventid": "catalog:", "hono": "catalog:", + "ky": "catalog:", "type-fest": "catalog:" }, "devDependencies": { - "@sentry/cloudflare": "^9.26.0", + "@sentry/cloudflare": "catalog:", "@sentry/node": "catalog:" } } diff --git a/packages/hono/src/error-handler.ts b/packages/hono/src/error-handler.ts index 44aab6fe..ed914794 100644 --- a/packages/hono/src/error-handler.ts +++ b/packages/hono/src/error-handler.ts @@ -4,6 +4,7 @@ import type { ContentfulStatusCode } from 'hono/utils/http-status' import { HttpError } from '@agentic/platform-core' import { captureException } from '@sentry/core' import { HTTPException } from 'hono/http-exception' +import { HTTPError } from 'ky' export function errorHandler( err: Error | HTTPResponseError, @@ -21,20 +22,17 @@ export function errorHandler( } else if (err instanceof HttpError) { message = err.message status = err.statusCode + } else if (err instanceof HTTPError) { + message = err.message + status = err.response.status as ContentfulStatusCode } else if (!isProd) { message = err.message ?? message } - // console.warn('ERROR', err, { - // isHttpException: err instanceof HTTPException, - // isHttpError: err instanceof HttpError, - // isProd - // }) - if (status >= 500) { logger.error(status, err) captureException(err) - } else { + } else if (isProd) { logger.warn(status, err) } diff --git a/packages/json-schema/src/coercion.ts b/packages/json-schema/src/coercion.ts index ef63b63f..ffc0dd30 100644 --- a/packages/json-schema/src/coercion.ts +++ b/packages/json-schema/src/coercion.ts @@ -63,6 +63,7 @@ export function coerceValue({ } switch ($type) { + case 'integer': case 'number': switch (instanceType) { case 'string': diff --git a/packages/json-schema/src/validator.ts b/packages/json-schema/src/validator.ts index ec2089d8..d7cd0d91 100644 --- a/packages/json-schema/src/validator.ts +++ b/packages/json-schema/src/validator.ts @@ -6,8 +6,8 @@ export class Validator { private readonly lookup: ReturnType private readonly schema: Schema | boolean private readonly draft: SchemaDraft - private readonly shortCircuit - private readonly coerce + private readonly shortCircuit: boolean + private readonly coerce: boolean constructor({ schema, @@ -33,8 +33,8 @@ export class Validator { this.schema, this.draft, this.lookup, - this.shortCircuit, - this.coerce + this.coerce, + this.shortCircuit ) } diff --git a/packages/openapi-utils/package.json b/packages/openapi-utils/package.json index b21dcf14..37979898 100644 --- a/packages/openapi-utils/package.json +++ b/packages/openapi-utils/package.json @@ -25,14 +25,14 @@ "dependencies": { "@agentic/platform-core": "workspace:*", "@agentic/platform-types": "workspace:*", - "@apideck/better-ajv-errors": "^0.3.6", + "@apideck/better-ajv-errors": "catalog:", "@redocly/openapi-core": "catalog:", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", + "ajv": "catalog:", + "ajv-formats": "catalog:", "camelcase": "catalog:", "decamelize": "catalog:", - "fast-uri": "^3.0.6", - "plur": "^5.1.0" + "fast-uri": "catalog:", + "plur": "catalog:" }, "publishConfig": { "access": "public" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdf8ccfb..89aee5f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,12 +9,21 @@ catalogs: '@agentic/openauth': specifier: ^0.4.3 version: 0.4.3 + '@apideck/better-ajv-errors': + specifier: ^0.3.6 + version: 0.3.6 '@clack/prompts': specifier: ^0.11.0 version: 0.11.0 + '@cloudflare/workers-types': + specifier: ^4.20250604.0 + version: 4.20250604.0 '@commander-js/extra-typings': specifier: ^14.0.0 version: 14.0.0 + '@edge-runtime/vm': + specifier: ^5.0.0 + version: 5.0.0 '@fisch0920/config': specifier: ^1.1.0 version: 1.1.0 @@ -31,11 +40,11 @@ catalogs: specifier: ^1.2.1 version: 1.2.1 '@hono/zod-openapi': - specifier: ^0.19.7 - version: 0.19.7 + specifier: ^0.19.8 + version: 0.19.8 '@hono/zod-validator': - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^0.7.0 + version: 0.7.0 '@modelcontextprotocol/sdk': specifier: ^1.12.1 version: 1.12.1 @@ -45,9 +54,15 @@ catalogs: '@redocly/openapi-core': specifier: ^1.34.3 version: 1.34.3 + '@sentry/cloudflare': + specifier: ^9.26.0 + version: 9.26.0 + '@sentry/core': + specifier: ^9.26.0 + version: 9.26.0 '@sentry/node': - specifier: ^9.23.0 - version: 9.23.0 + specifier: ^9.26.0 + version: 9.26.0 '@types/ms': specifier: ^2.1.0 version: 2.1.0 @@ -57,6 +72,12 @@ catalogs: '@types/semver': specifier: ^7.7.0 version: 7.7.0 + ajv: + specifier: ^8.17.1 + version: 8.17.1 + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1 camelcase: specifier: ^8.0.0 version: 8.0.0 @@ -79,8 +100,8 @@ catalogs: specifier: ^0.31.1 version: 0.31.1 drizzle-orm: - specifier: ^0.43.1 - version: 0.43.1 + specifier: ^0.44.2 + version: 0.44.2 email-validator: specifier: ^2.0.4 version: 2.0.4 @@ -96,6 +117,12 @@ catalogs: exit-hook: specifier: ^4.0.0 version: 4.0.0 + fast-content-type-parse: + specifier: ^3.0.0 + version: 3.0.0 + fast-uri: + specifier: ^3.0.6 + version: 3.0.6 get-port: specifier: ^7.1.0 version: 7.1.0 @@ -103,8 +130,8 @@ catalogs: specifier: ^5.0.1 version: 5.0.1 hono: - specifier: ^4.7.10 - version: 4.7.10 + specifier: ^4.7.11 + version: 4.7.11 is-relative-url: specifier: ^4.0.0 version: 4.0.0 @@ -147,6 +174,9 @@ catalogs: parse-json: specifier: ^8.3.0 version: 8.3.0 + plur: + specifier: ^5.1.0 + version: 5.1.0 postgres: specifier: ^3.4.7 version: 3.4.7 @@ -163,8 +193,8 @@ catalogs: specifier: ^2.13.0 version: 2.13.0 stripe: - specifier: ^18.2.0 - version: 18.2.0 + specifier: ^18.2.1 + version: 18.2.1 tsup: specifier: ^8.5.0 version: 8.5.0 @@ -190,8 +220,8 @@ catalogs: specifier: ^3.2.1 version: 3.2.1 wrangler: - specifier: ^4.18.0 - version: 4.18.0 + specifier: ^4.19.1 + version: 4.19.1 zod: specifier: ^3.25.51 version: 3.25.51 @@ -268,7 +298,7 @@ importers: dependencies: '@agentic/openauth': specifier: 'catalog:' - version: 0.4.3(arctic@2.3.4)(hono@4.7.10) + version: 0.4.3(arctic@2.3.4)(hono@4.7.11) '@agentic/platform': specifier: workspace:* version: link:../../packages/platform @@ -292,16 +322,16 @@ importers: version: 0.7.9(@fisch0920/drizzle-orm@0.43.7(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7))(zod@3.25.51) '@hono/node-server': specifier: 'catalog:' - version: 1.14.3(hono@4.7.10) + version: 1.14.3(hono@4.7.11) '@hono/zod-openapi': specifier: 'catalog:' - version: 0.19.7(hono@4.7.10)(zod@3.25.51) + version: 0.19.8(hono@4.7.11)(zod@3.25.51) '@paralleldrive/cuid2': specifier: 'catalog:' version: 2.2.2 '@sentry/node': specifier: 'catalog:' - version: 9.23.0 + version: 9.26.0 dotenv: specifier: 'catalog:' version: 16.5.0 @@ -310,7 +340,7 @@ importers: version: 4.0.0 hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 octokit: specifier: 'catalog:' version: 5.0.3 @@ -328,7 +358,7 @@ importers: version: 7.7.2 stripe: specifier: 'catalog:' - version: 18.2.0(@types/node@22.15.29) + version: 18.2.1(@types/node@22.15.29) type-fest: specifier: 'catalog:' version: 4.41.0 @@ -344,7 +374,7 @@ importers: version: 0.31.1 drizzle-orm: specifier: 'catalog:' - version: 0.43.1(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7) + version: 0.44.2(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7) apps/e2e: dependencies: @@ -368,7 +398,7 @@ importers: specifier: workspace:* version: link:../../packages/fixtures fast-content-type-parse: - specifier: ^3.0.0 + specifier: 'catalog:' version: 3.0.0 apps/gateway: @@ -396,41 +426,41 @@ importers: version: link:../../packages/validators '@hono/zod-validator': specifier: 'catalog:' - version: 0.6.0(hono@4.7.10)(zod@3.25.51) + version: 0.7.0(hono@4.7.11)(zod@3.25.36) '@modelcontextprotocol/sdk': specifier: 'catalog:' version: 1.12.1 fast-content-type-parse: - specifier: ^3.0.0 + specifier: 'catalog:' version: 3.0.0 hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 ky: specifier: 'catalog:' version: 1.8.1 plur: - specifier: ^5.1.0 + specifier: 'catalog:' version: 5.1.0 type-fest: specifier: 'catalog:' version: 4.41.0 devDependencies: '@cloudflare/workers-types': - specifier: ^4.20250604.0 + specifier: 'catalog:' version: 4.20250604.0 '@edge-runtime/vm': - specifier: ^5.0.0 + specifier: 'catalog:' version: 5.0.0 wrangler: specifier: 'catalog:' - version: 4.18.0(@cloudflare/workers-types@4.20250604.0) + version: 4.19.1(@cloudflare/workers-types@4.20250604.0) packages/api-client: dependencies: '@agentic/openauth': specifier: 'catalog:' - version: 0.4.3(arctic@2.3.4)(hono@4.7.10) + version: 0.4.3(arctic@2.3.4)(hono@4.7.11) '@agentic/platform-core': specifier: workspace:* version: link:../core @@ -466,7 +496,7 @@ importers: version: 0.11.0 '@hono/node-server': specifier: 'catalog:' - version: 1.14.3(hono@4.7.10) + version: 1.14.3(hono@4.7.11) commander: specifier: 'catalog:' version: 14.0.0 @@ -481,7 +511,7 @@ importers: version: 7.1.0 hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 open: specifier: 'catalog:' version: 10.1.2 @@ -519,7 +549,7 @@ importers: devDependencies: hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 packages/fixtures: dependencies: @@ -534,9 +564,9 @@ importers: version: link:../core '@hono/sentry': specifier: 'catalog:' - version: 1.2.1(hono@4.7.10) + version: 1.2.1(hono@4.7.11) '@sentry/core': - specifier: ^9.26.0 + specifier: 'catalog:' version: 9.26.0 dotenv: specifier: 'catalog:' @@ -546,17 +576,20 @@ importers: version: 2.0.1 hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 + ky: + specifier: 'catalog:' + version: 1.8.1 type-fest: specifier: 'catalog:' version: 4.41.0 devDependencies: '@sentry/cloudflare': - specifier: ^9.26.0 + specifier: 'catalog:' version: 9.26.0(@cloudflare/workers-types@4.20250604.0) '@sentry/node': specifier: 'catalog:' - version: 9.23.0 + version: 9.26.0 packages/json-schema: devDependencies: @@ -573,16 +606,16 @@ importers: specifier: workspace:* version: link:../types '@apideck/better-ajv-errors': - specifier: ^0.3.6 + specifier: 'catalog:' version: 0.3.6(ajv@8.17.1) '@redocly/openapi-core': specifier: 'catalog:' version: 1.34.3(supports-color@10.0.0) ajv: - specifier: ^8.17.1 + specifier: 'catalog:' version: 8.17.1 ajv-formats: - specifier: ^3.0.1 + specifier: 'catalog:' version: 3.0.1(ajv@8.17.1) camelcase: specifier: 'catalog:' @@ -591,18 +624,18 @@ importers: specifier: 'catalog:' version: 6.0.0 fast-uri: - specifier: ^3.0.6 + specifier: 'catalog:' version: 3.0.6 plur: - specifier: ^5.1.0 + specifier: 'catalog:' version: 5.1.0 devDependencies: '@hono/node-server': specifier: 'catalog:' - version: 1.14.3(hono@4.7.10) + version: 1.14.3(hono@4.7.11) hono: specifier: 'catalog:' - version: 4.7.10 + version: 4.7.11 packages/platform: dependencies: @@ -620,7 +653,7 @@ importers: version: link:../validators '@hono/zod-openapi': specifier: 'catalog:' - version: 0.19.7(hono@4.7.10)(zod@3.25.51) + version: 0.19.8(hono@4.7.11)(zod@3.25.51) '@modelcontextprotocol/sdk': specifier: 'catalog:' version: 1.12.1 @@ -648,7 +681,7 @@ importers: dependencies: '@hono/zod-openapi': specifier: 'catalog:' - version: 0.19.7(hono@4.7.10)(zod@3.25.51) + version: 0.19.8(hono@4.7.11)(zod@3.25.51) ms: specifier: 'catalog:' version: 2.1.3 @@ -1254,18 +1287,18 @@ packages: peerDependencies: hono: '>=3.*' - '@hono/zod-openapi@0.19.7': - resolution: {integrity: sha512-S1IgblPPwx6yLYbrvLS0MJlvtmZpD6mDn0NqN+hYndoPUtDNqjNW/J7EmFAQu1Od8fYdIrwogcRL2rMANcULvA==} + '@hono/zod-openapi@0.19.8': + resolution: {integrity: sha512-CHUSW0K+bDGUYXovxQSbVjZffzoPeTsGu6wevPoGSmBdPuUw5yZqDeomnvyAAAAvEjhLQPlAsUyASc1Zi35exQ==} engines: {node: '>=16.0.0'} peerDependencies: hono: '>=4.3.6' zod: 3.* - '@hono/zod-validator@0.6.0': - resolution: {integrity: sha512-3aVk+cvuOE/9D6H2ugaG1kt14NT9rFyZzwRW6+aaPhMufMSiyKNvb/7pscZ/U302F8cTPD2TSTJiOUmx6TPqGg==} + '@hono/zod-validator@0.7.0': + resolution: {integrity: sha512-qe2ZE6sHFE98dcUrbYMtS3bAV8hqcCOflykvZga2S7XhmNSZzT+dIz4OuMILsjLHkJw9JMn912/dB7dQOmuPvg==} peerDependencies: hono: '>=3.9.0' - zod: ^3.19.1 + zod: ^3.25.0 '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -1960,20 +1993,16 @@ packages: resolution: {integrity: sha512-ixm8NISFlPlEo3FjSaqmq4nnd13BRHoafwJ5MG+okCz6BKGZ1SexEggP42/QpGvDprUUHnfncG6WUMgcarr1zA==} engines: {node: '>=14.18'} - '@sentry/core@9.23.0': - resolution: {integrity: sha512-9846pn/BvASGgl7WsnKY4xry98WreP9ToeLfCQTQOf+pNfD/qNPn1/0xPInGni3LVMAXRtfHHMPm2Ghz255N7A==} - engines: {node: '>=18'} - '@sentry/core@9.26.0': resolution: {integrity: sha512-XTFSqOPn6wsZgF3NLRVY/FjYCkFahZoR46BtLVmBliD60QZLChpya81slD3M8BgLQpjsA2q6N1xrQor1Rc29gg==} engines: {node: '>=18'} - '@sentry/node@9.23.0': - resolution: {integrity: sha512-s+s8vjeXg4hNRiEAfLvABI2UOnW84UC/VScXqA9J4eceQsHwKxUb/BKT5vqDKoYTs99YxEGZq9TeC+lchd0ZHw==} + '@sentry/node@9.26.0': + resolution: {integrity: sha512-B7VdUtXlg1Y8DeZMWc9gOIoSmGT9hkKepits+kmkZgjYlyPhZtT8a0fwUNBLYFYq1Ti/JzKWw3ZNIlg00BY40w==} engines: {node: '>=18'} - '@sentry/opentelemetry@9.23.0': - resolution: {integrity: sha512-+wliK4kkBiCEcgzsU/SQBWK0Lteny4fZjeNpz1AMGnWdWA1UlvD+rabkl25L6pRrGHBtj2xiZ55xL0ZCkRlhVA==} + '@sentry/opentelemetry@9.26.0': + resolution: {integrity: sha512-yVxRv6GtrtKFfNKpfb+b/focF4cKslInIN+HPzllQBoVebrq+KeCjUYzDEj9b6OwZGbUZDbQdxGRgXrrxcZUMg==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -2031,9 +2060,6 @@ packages: '@types/mysql@2.15.26': resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} - '@types/node@22.15.24': - resolution: {integrity: sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==} - '@types/node@22.15.29': resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} @@ -2595,8 +2621,8 @@ packages: resolution: {integrity: sha512-PUjYKWtzOzPtdtQlTHQG3qfv4Y0XT8+Eas6UbxCmxTj7qgMf+39dDujf1BP1I+qqZtw9uzwTh8jYtkMuCq+B0Q==} hasBin: true - drizzle-orm@0.43.1: - resolution: {integrity: sha512-dUcDaZtE/zN4RV/xqGrVSMpnEczxd5cIaoDeor7Zst9wOe/HzC/7eAaulywWGYXdDEc9oBPMjayVEDg0ziTLJA==} + drizzle-orm@0.44.2: + resolution: {integrity: sha512-zGAqBzWWkVSFjZpwPOrmCrgO++1kZ5H/rZ4qTGeGOe18iXGVJWf3WPfHOVwFIbmi8kHjfJstC6rJomzGx8g/dQ==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -2612,6 +2638,7 @@ packages: '@types/better-sqlite3': '*' '@types/pg': '*' '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' '@vercel/postgres': '>=0.8.0' '@xata.io/client': '*' better-sqlite3: '>=7' @@ -2655,6 +2682,8 @@ packages: optional: true '@types/sql.js': optional: true + '@upstash/redis': + optional: true '@vercel/postgres': optional: true '@xata.io/client': @@ -3170,8 +3199,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.7.10: - resolution: {integrity: sha512-QkACju9MiN59CKSY5JsGZCYmPZkA6sIW6OFCUp7qDjZu6S6KHtJHhAc9Uy9mV9F8PJ1/HQ3ybZF2yjCa/73fvQ==} + hono@4.7.11: + resolution: {integrity: sha512-rv0JMwC0KALbbmwJDEnxvQCeJh+xbS3KEWW5PC9cMJ08Ur9xgatI0HmtgYZfOdOSOeYsp5LO2cOhdI8cLEbDEQ==} engines: {node: '>=16.9.0'} hosted-git-info@7.0.2: @@ -3621,8 +3650,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@4.20250525.0: - resolution: {integrity: sha512-F5XRDn9WqxUaHphUT8qwy5WXC/3UwbBRJTdjjP5uwHX82vypxIlHNyHziZnplPLhQa1kbSdIY7wfuP1XJyyYZw==} + miniflare@4.20250525.1: + resolution: {integrity: sha512-4PJlT5WA+hfclFU5Q7xnpG1G1VGYTXaf/3iu6iKQ8IsbSi9QvPTA2bSZ5goCFxmJXDjV4cxttVxB0Wl1CLuQ0w==} engines: {node: '>=18.0.0'} hasBin: true @@ -4308,8 +4337,8 @@ packages: resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} engines: {node: '>=14.16'} - stripe@18.2.0: - resolution: {integrity: sha512-RpOaGh5CLs3SYeVXw1CIQZNwPVADBJtgNyUgu+ZkIvu3u4pkZvNrlKr+WaLoNjSPQWef0dikxDS2AKHBl/l3bg==} + stripe@18.2.1: + resolution: {integrity: sha512-GwB1B7WSwEBzW4dilgyJruUYhbGMscrwuyHsPUmSRKrGHZ5poSh2oU9XKdii5BFVJzXHn35geRvGJ6R8bYcp8w==} engines: {node: '>=12.*'} peerDependencies: '@types/node': '>=12.x.x' @@ -4718,8 +4747,8 @@ packages: engines: {node: '>=16'} hasBin: true - wrangler@4.18.0: - resolution: {integrity: sha512-/ng0KI9io97SNsBU1rheADBLLTE5Djybgsi4gXuvH1RBKJGpyj1xWvZ2fuWu8vAonit3EiZkwtERTm6kESHP3A==} + wrangler@4.19.1: + resolution: {integrity: sha512-b+ed2SJKauHgndl4Im1wHE+FeSSlrdlEZNuvpc8q/94k4EmRxRkXnwBAsVWuicBxG3HStFLQPGGlvL8wGKTtHw==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: @@ -4800,12 +4829,12 @@ packages: snapshots: - '@agentic/openauth@0.4.3(arctic@2.3.4)(hono@4.7.10)': + '@agentic/openauth@0.4.3(arctic@2.3.4)(hono@4.7.11)': dependencies: '@standard-schema/spec': 1.0.0-beta.3 arctic: 2.3.4 aws4fetch: 1.0.20 - hono: 4.7.10 + hono: 4.7.11 jose: 5.9.6 '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': @@ -5152,25 +5181,30 @@ snapshots: '@fisch0920/drizzle-orm': 0.43.7(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7) zod: 3.25.51 - '@hono/node-server@1.14.3(hono@4.7.10)': + '@hono/node-server@1.14.3(hono@4.7.11)': dependencies: - hono: 4.7.10 + hono: 4.7.11 - '@hono/sentry@1.2.1(hono@4.7.10)': + '@hono/sentry@1.2.1(hono@4.7.11)': dependencies: - hono: 4.7.10 + hono: 4.7.11 toucan-js: 4.1.1 - '@hono/zod-openapi@0.19.7(hono@4.7.10)(zod@3.25.51)': + '@hono/zod-openapi@0.19.8(hono@4.7.11)(zod@3.25.51)': dependencies: '@asteasolutions/zod-to-openapi': 7.3.0(zod@3.25.51) - '@hono/zod-validator': 0.6.0(hono@4.7.10)(zod@3.25.51) - hono: 4.7.10 + '@hono/zod-validator': 0.7.0(hono@4.7.11)(zod@3.25.51) + hono: 4.7.11 zod: 3.25.51 - '@hono/zod-validator@0.6.0(hono@4.7.10)(zod@3.25.51)': + '@hono/zod-validator@0.7.0(hono@4.7.11)(zod@3.25.36)': dependencies: - hono: 4.7.10 + hono: 4.7.11 + zod: 3.25.36 + + '@hono/zod-validator@0.7.0(hono@4.7.11)(zod@3.25.51)': + dependencies: + hono: 4.7.11 zod: 3.25.51 '@humanfs/core@0.19.1': {} @@ -5892,11 +5926,9 @@ snapshots: '@sentry/types': 8.9.2 '@sentry/utils': 8.9.2 - '@sentry/core@9.23.0': {} - '@sentry/core@9.26.0': {} - '@sentry/node@9.23.0': + '@sentry/node@9.26.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) @@ -5928,14 +5960,14 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 '@prisma/instrumentation': 6.8.2(@opentelemetry/api@1.9.0) - '@sentry/core': 9.23.0 - '@sentry/opentelemetry': 9.23.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) + '@sentry/core': 9.26.0 + '@sentry/opentelemetry': 9.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) import-in-the-middle: 1.13.2 minimatch: 9.0.5 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@9.23.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0)': + '@sentry/opentelemetry@9.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) @@ -5943,7 +5975,7 @@ snapshots: '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 - '@sentry/core': 9.23.0 + '@sentry/core': 9.26.0 '@sentry/types@8.9.2': {} @@ -5970,7 +6002,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/deep-eql@4.0.2': {} @@ -5984,11 +6016,7 @@ snapshots: '@types/mysql@2.15.26': dependencies: - '@types/node': 22.15.24 - - '@types/node@22.15.24': - dependencies: - undici-types: 6.21.0 + '@types/node': 22.15.29 '@types/node@22.15.29': dependencies: @@ -6002,7 +6030,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 pg-protocol: 1.10.0 pg-types: 2.2.0 @@ -6012,7 +6040,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: @@ -6592,7 +6620,7 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.43.1(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7): + drizzle-orm@0.44.2(@cloudflare/workers-types@4.20250604.0)(@opentelemetry/api@1.9.0)(@types/pg@8.6.1)(kysely@0.28.2)(postgres@3.4.7): optionalDependencies: '@cloudflare/workers-types': 4.20250604.0 '@opentelemetry/api': 1.9.0 @@ -7282,7 +7310,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.7.10: {} + hono@4.7.11: {} hosted-git-info@7.0.2: dependencies: @@ -7692,7 +7720,7 @@ snapshots: min-indent@1.0.1: {} - miniflare@4.20250525.0: + miniflare@4.20250525.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -8500,7 +8528,7 @@ snapshots: strip-json-comments@5.0.2: {} - stripe@18.2.0(@types/node@22.15.29): + stripe@18.2.1(@types/node@22.15.29): dependencies: qs: 6.14.0 optionalDependencies: @@ -8943,13 +8971,13 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250525.0 '@cloudflare/workerd-windows-64': 1.20250525.0 - wrangler@4.18.0(@cloudflare/workers-types@4.20250604.0): + wrangler@4.19.1(@cloudflare/workers-types@4.20250604.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@cloudflare/unenv-preset': 2.3.2(unenv@2.0.0-rc.17)(workerd@1.20250525.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250525.0 + miniflare: 4.20250525.1 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.17 workerd: 1.20250525.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index df51ce21..f26f6189 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,25 +2,32 @@ packages: - packages/* - apps/* catalog: - '@ai-sdk/openai': ^1.3.22 - '@clack/prompts': ^0.11.0 - '@commander-js/extra-typings': ^14.0.0 - '@fisch0920/config': ^1.1.0 - '@fisch0920/drizzle-orm': ^0.43.7 - '@fisch0920/drizzle-zod': ^0.7.9 - '@hono/node-server': ^1.14.3 - '@hono/sentry': ^1.2.1 - '@hono/zod-openapi': ^0.19.7 - '@hono/zod-validator': ^0.6.0 - '@modelcontextprotocol/sdk': ^1.12.1 - '@agentic/openauth': ^0.4.3 - '@paralleldrive/cuid2': ^2.2.2 - '@redocly/openapi-core': ^1.34.3 - '@sentry/node': ^9.23.0 - '@types/ms': ^2.1.0 - '@types/node': ^22.15.29 - '@types/semver': ^7.7.0 + "@agentic/openauth": ^0.4.3 + "@ai-sdk/openai": ^1.3.22 + "@apideck/better-ajv-errors": ^0.3.6 + "@clack/prompts": ^0.11.0 + "@cloudflare/workers-types": ^4.20250604.0 + "@commander-js/extra-typings": ^14.0.0 + "@edge-runtime/vm": ^5.0.0 + "@fisch0920/config": ^1.1.0 + "@fisch0920/drizzle-orm": ^0.43.7 + "@fisch0920/drizzle-zod": ^0.7.9 + "@hono/node-server": ^1.14.3 + "@hono/sentry": ^1.2.1 + "@hono/zod-openapi": ^0.19.8 + "@hono/zod-validator": ^0.7.0 + "@modelcontextprotocol/sdk": ^1.12.1 + "@paralleldrive/cuid2": ^2.2.2 + "@redocly/openapi-core": ^1.34.3 + "@sentry/cloudflare": ^9.26.0 + "@sentry/core": ^9.26.0 + "@sentry/node": ^9.26.0 + "@types/ms": ^2.1.0 + "@types/node": ^22.15.29 + "@types/semver": ^7.7.0 ai: ^4.3.15 + ajv: ^8.17.1 + ajv-formats: ^3.0.1 camelcase: ^8.0.0 cleye: ^1.3.4 commander: ^14.0.0 @@ -29,15 +36,17 @@ catalog: del-cli: ^6.0.0 dotenv: ^16.5.0 drizzle-kit: ^0.31.1 - drizzle-orm: ^0.43.1 + drizzle-orm: ^0.44.2 email-validator: ^2.0.4 eslint: ^9.28.0 eslint-plugin-drizzle: ^0.2.3 eventid: ^2.0.1 exit-hook: ^4.0.0 + fast-content-type-parse: ^3.0.0 + fast-uri: ^3.0.6 get-port: ^7.1.0 hash-object: ^5.0.1 - hono: ^4.7.10 + hono: ^4.7.11 is-relative-url: ^4.0.0 knip: ^5.60.0 ky: ^1.8.1 @@ -53,12 +62,13 @@ catalog: p-map: ^7.0.3 p-throttle: 7.0.0 parse-json: ^8.3.0 + plur: ^5.1.0 postgres: ^3.4.7 prettier: ^3.5.3 restore-cursor: ^5.1.0 semver: ^7.7.2 simple-git-hooks: ^2.13.0 - stripe: ^18.2.0 + stripe: ^18.2.1 tsup: ^8.5.0 tsx: ^4.19.4 turbo: ^2.5.4 @@ -67,7 +77,7 @@ catalog: unconfig: ^7.3.2 vite-tsconfig-paths: ^5.1.4 vitest: ^3.2.1 - wrangler: ^4.18.0 + wrangler: ^4.19.1 zod: ^3.25.51 zod-to-json-schema: ^3.24.5 zod-validation-error: ^3.4.1