mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-17 20:32:25 +03:00
* fix(quality): clear the release/v3.8.51 base-reds
19 failing unit tests plus the API Route Typecheck and mutation-test-coverage
gates, all reproduced on the clean tip before touching anything.
Ten of the failures share one cause. #13452/#13798 made `*-compatible-*`
buildUrl() refuse a connection with no baseUrl instead of quietly defaulting to
the real OpenAI/Anthropic API — which would ship the operator's stored key to a
public third party. The guard is right; three fixtures still built those
connections unhydrated, and one of them put baseUrl at the top level of
credentials, where the chat path never reads it.
The rest:
- modelDiscovery.ts missed the VertexModelMetadataProvenance cast that its
read-path twin in db/models/synced.ts already had — both written by #12471.
- A provider-test regexp carried raw 0x00/0x1f bytes, which makes git, GitHub
and ripgrep treat the file as binary. Same character class, written
with escapes instead of the bytes themselves.
- #13399 (Agnes AI China) adds "agnes-cn" + "agnescn": the only two provider
prefixes since the count was last set (412 -> 414). Everything else added in
that range is model ids.
- The free-tier budget card SVG was stale (443 -> 452 models); regenerated by
its own script.
- Three new tests were missing from stryker.conf.json tap.testFiles, so the
mutants they kill did not count.
Three guards asserted syntax rather than the invariant they protect, and broke
when the source legitimately changed. Each was re-expressed and then verified by
mutating the source back:
- #2331 required modelEffort to head the rawEffort chain; #13556 deliberately
put the server-selected force rule first. The real invariant is relative —
modelEffort outranks the defaults a client injects — and it still trips when
explicitReasoning is moved ahead of it.
- The OAuth loopback guard matched the isLocalhost arm literally; #9944 added
`&& !opts?.manualLoopback`. It now matches the arm whatever guards it, and
still fails when the hint stops being built.
- The i18n scanner flagged dynamically-built keys — t("effort." + mode) reaches
it as a literal prefix, never a string. It now accepts a prefix that resolves
to a namespace holding messages, and still fails when the namespace is gone.
tests/unit/sse-auth.test.ts (#12080) expected a bare null where #13879 now
returns the key-policy diagnostic — the same sentinel shape the terminal-state
path has used since #12441. The assertion was rewritten to the constraint #12080
actually protects: nothing usable comes back and neither connection leaks. The
contract risk that remains — those sentinels are truthy, and executeWebSearch
treats any truthy value as a credential — is filed as #13945 rather than
widened into this PR.
Refs #13866
* fix(quality): clear the second wave of release/v3.8.51 base-reds
The tip moved 13 commits while the first pass was running and brought its own
reds. All reproduced locally on the merged tree first.
vitest 4.1.11 -> 5.0.0 in the #13661 development-group bump is a major, and
vitest 5 moved `vite` from a dependency to a peerDependency. This repo only ever
declared `vite` under `overrides`, which pins a version but installs nothing, so
`npm ci` stopped providing it and the Vitest job died at startup with
ERR_MODULE_NOT_FOUND. Declared as the devDependency it actually is — the same
^8.0.16 the override already pinned, and what @vitejs/plugin-react asks for as a
peer — and regenerated the lockfile: 684 lines added, none changed.
#12909 filtered a mapped array with `toolCall is JsonRecord`, but the element
type is the tool-call literal or null, and a predicate's type has to be
assignable to the parameter's (TS2677). Narrowed by the element's own type
instead; the literal still satisfies JsonRecord at the return.
#12906 added `|| result.errorCode === "empty_response"` to the stream-failure
condition and Prettier rewrapped it, so the #8928 probe — which located the
branch by an exact four-line string — stopped finding it. It now matches on what
the branch tests rather than how it is typeset, and still fails when the
eviction call is removed.
probe-7293 is the visible half of a real conflict, filed as #13948. #7293 merges
a mid-array system into index 0; #12908, landed later, demotes it to "user" in
place instead. Both target the same constraint and only one can win, and the
combination also reorders: the pre-translation hoist moves the turn forward
expecting it to stay a system message, then the demotion converts it where it
now sits, ahead of the conversation. Choosing between the two strategies is a
product call, not a base-red one, so the test was realigned to assert the half
that protects the caller — the instruction survives, as a user turn — and pins
the current ordering with a pointer to the issue, so the eventual decision shows
up as a deliberate test change instead of a silent regression.
Refs #13866, #13948
* fix(quality): allowlist vite, rebaseline tip growth, drop a dead import
Third pass on the release/v3.8.51 base-reds. Declaring `vite` in the previous
commit was correct but incomplete: check-deps is a human review point against
typosquatting, so a newly declared package has to be vouched for by name.
Recorded in dependency-allowlist.json with why it is needed — the official Vite
build tool, already pinned through overrides, and a required peer of both
vitest 5 and @vitejs/plugin-react. That also turns check-deps.test.ts green.
check-file-size went red on nine files. One is mine: sse-auth.test.ts grew when
the #12080 assertion was rewritten. Three of the four assertions I had added
were redundant with the strict deepEqual that follows them, so they are gone and
the file grows by 4 lines instead of 8; the cap absorbs the rest.
The other eight are production and test files this PR does not touch, grown by
other work and never rebaselined — which is the whole reason a base-red drain
exists. Each is attributed to the commit that grew it: #12906 (chat.ts,
chatHelpers.ts, proxyFetch.ts, stream.ts), #12904 + #12910 (chatCore.ts), and
batch_api.test.ts from the same wave. Two of them predate the wave entirely and
were already over cap on 3d5baf13 — imageGeneration.ts (#13748) and
roundRobinCombo.ts (#13776) — so they were base-reds hiding behind a gate that
only surfaced them once the tip was merged in. Both are recorded separately from
the wave so the history stays honest about when each cap actually moved.
Note for whoever reads the gate next: it counts one line more than `wc -l`,
since it measures split length rather than newlines.
Finally, #13290 replaced rmSync with cleanupTempDataDir in
zcode-executor.test.ts but left the import behind, which the frozen-warning
ESLint gate rejects. Removed.
Refs #13866
546 lines
34 KiB
JSON
546 lines
34 KiB
JSON
{
|
|
"name": "omniroute",
|
|
"version": "3.8.51",
|
|
"description": "Unified AI router with 359 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.",
|
|
"type": "module",
|
|
"bin": {
|
|
"omniroute": "bin/omniroute.mjs",
|
|
"omniroute-reset-password": "bin/reset-password.mjs"
|
|
},
|
|
"files": [
|
|
"bin/",
|
|
"dist/",
|
|
"@omniroute/",
|
|
"open-sse/",
|
|
"src/domain/",
|
|
"src/lib/",
|
|
"src/models/",
|
|
"src/mitm/",
|
|
"src/server/",
|
|
"src/shared/",
|
|
"src/sse/",
|
|
"src/types/",
|
|
".env.example",
|
|
"config/i18n.json",
|
|
".npmrc",
|
|
"scripts/build/postinstall.mjs",
|
|
"scripts/build/fixPlaywrightAndroid.mjs",
|
|
"bin/cli/runtime/",
|
|
"scripts/postinstall.mjs",
|
|
"scripts/build/postinstallSupport.mjs",
|
|
"scripts/build/runtime-env.mjs",
|
|
"scripts/build/colocateOptionals.mjs",
|
|
"scripts/build/sync-env.mjs",
|
|
"scripts/dev/responses-ws-proxy.mjs",
|
|
"scripts/dev/tls-options.mjs",
|
|
"scripts/check/check-supported-node-runtime.ts",
|
|
"scripts/dev/sync-env.mjs",
|
|
"scripts/build/assembleStandalone.mjs",
|
|
"scripts/build/backendOnlyPages.mjs",
|
|
"scripts/build/build-tproxy-native.mjs",
|
|
"scripts/build/native-binary-compat.mjs",
|
|
"scripts/build/wreqJsNative.mjs",
|
|
"config/release/wreq-js-native-manifest.json",
|
|
"config/release/wreq-js-rust-license-inventory.json",
|
|
"config/release/wreq-js-rust-notices.md",
|
|
"scripts/build/build-next-isolated.mjs",
|
|
"scripts/build/runtime-env.mjs",
|
|
"scripts/packs/optionalPackManifest.mjs",
|
|
"scripts/packs/optionalPackInstaller.mjs",
|
|
"README.md",
|
|
"LICENSE",
|
|
"!**/node_modules/**",
|
|
"THIRD_PARTY_NOTICES.md",
|
|
"!**/__tests__/**",
|
|
"!**/*.test.ts",
|
|
"!**/*.test.tsx",
|
|
"!**/*.test.js",
|
|
"!**/*.test.mjs",
|
|
"!**/*.spec.ts",
|
|
"!**/*.spec.tsx",
|
|
"!**/*.nft.json"
|
|
],
|
|
"workspaces": [
|
|
"open-sse",
|
|
"packages/browser-pool"
|
|
],
|
|
"engines": {
|
|
"node": ">=22.22.2 <23 || >=24.0.0 <27"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"router",
|
|
"proxy",
|
|
"openai",
|
|
"claude",
|
|
"anthropic",
|
|
"gemini",
|
|
"fallback",
|
|
"cursor",
|
|
"cline",
|
|
"codex",
|
|
"llm",
|
|
"auto-fallback"
|
|
],
|
|
"license": "MIT",
|
|
"author": "diegosouzapw",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/diegosouzapw/OmniRoute"
|
|
},
|
|
"homepage": "https://omniroute.online",
|
|
"scripts": {
|
|
"dev": "node --max-old-space-size=8192 scripts/dev/run-next.mjs dev",
|
|
"prebuild:docs": "node scripts/docs/gen-openapi-module.mjs",
|
|
"gen:provider-reference": "bun scripts/docs/gen-provider-reference.ts",
|
|
"bench:compression": "bun scripts/compression/benchmark.ts",
|
|
"bench:heap-body": "node --expose-gc --import tsx/esm scripts/perf/request-body-heap.ts",
|
|
"bench:routing-events": "node --import tsx/esm scripts/perf/routing-events-bench.ts",
|
|
"bench:highwatermark": "node --import tsx/esm scripts/perf/benchmark-highwatermark.ts",
|
|
"eval:compression": "node --import tsx scripts/compression-eval/index.ts",
|
|
"eval:router": "node --import tsx scripts/router-eval/index.ts",
|
|
"eval:router:compare": "node --import tsx scripts/router-eval/compare.ts",
|
|
"eval:router:patch-compare": "node --import tsx scripts/router-eval/patch-compare.ts",
|
|
"eval:router:search": "node --import tsx scripts/router-eval/search.ts",
|
|
"eval:router:trends": "node --import tsx scripts/router-eval/trends.ts",
|
|
"release:sync-changelog-i18n": "node scripts/release/sync-changelog-i18n.mjs",
|
|
"prebuild": "npm run check:native-deps",
|
|
"build": "node scripts/build/build-next-isolated.mjs",
|
|
"build:secure": "OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs",
|
|
"build:backend": "cross-env OMNIROUTE_BUILD_BACKEND_ONLY=1 node scripts/build/build-next-isolated.mjs",
|
|
"build:contributor": "cross-env OMNIROUTE_BUILD_PROFILE=contributor OMNIROUTE_USE_TURBOPACK=0 node scripts/build/build-next-isolated.mjs",
|
|
"build:cli": "node --import tsx scripts/build/prepublish.ts",
|
|
"omniroute:verify": "node scripts/check/omniroute-verify.mjs",
|
|
"build:release": "rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs",
|
|
"build:native:tproxy": "cd src/mitm/tproxy/native && npx --yes node-gyp rebuild",
|
|
"start": "node scripts/dev/run-next.mjs start",
|
|
"homolog": "node scripts/homolog/run.mjs",
|
|
"lint": "eslint . --cache --cache-location .eslintcache --suppressions-location config/quality/eslint-suppressions.json",
|
|
"lint:json": "node scripts/quality/run-eslint-json.mjs",
|
|
"lint:md": "npx --yes markdownlint-cli2 \"docs/**/*.md\" \"*.md\" \"!docs/i18n\" \"!docs/research\"",
|
|
"lint:prose": "vale docs",
|
|
"electron:dev": "concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"",
|
|
"electron:build": "npm run build && cd electron && npm run build",
|
|
"electron:build:win": "npm run build && cd electron && npm run build:win",
|
|
"electron:build:mac": "npm run build && cd electron && npm run build:mac",
|
|
"electron:build:linux": "npm run build && cd electron && npm run build:linux",
|
|
"electron:smoke:packaged": "node scripts/dev/smoke-electron-packaged.mjs",
|
|
"test": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial",
|
|
"test:unit": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial",
|
|
"test:unit:ci": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial",
|
|
"test:unit:ci:shard": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 --test-shard=$TEST_SHARD \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD \"tests/unit/serial/**/*.test.ts\"",
|
|
"test:unit:fast": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-isolation=none \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial",
|
|
"test:scoped": "bash scripts/quality/test-scoped.sh",
|
|
"test:scoped:staged": "bash scripts/quality/test-scoped.sh --staged",
|
|
"test:scoped:full": "bash scripts/quality/test-scoped.sh --full",
|
|
"test:unit:shard": "concurrently --kill-others-on-fail -n s1,s2 \"npm:test:unit:shard:1\" \"npm:test:unit:shard:2\"",
|
|
"test:unit:shard:1": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=1/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=1/2 \"tests/unit/serial/**/*.test.ts\"",
|
|
"test:unit:shard:2": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=10 --test-shard=2/2 \"tests/unit/dashboard/**/*.test.ts\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=2/2 \"tests/unit/serial/**/*.test.ts\"",
|
|
"test:bun:db": "bun test tests/unit/db-adapters/bunSqliteAdapter.test.ts tests/unit/db-adapters/driverFactory.test.ts tests/unit/db-adapters/cliSqlite.test.mjs",
|
|
"test:plan3": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/plan3-p0.test.ts",
|
|
"test:fixes": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/fixes-p1.test.ts",
|
|
"test:security": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test tests/unit/security-fase01.test.ts",
|
|
"test:property": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-force-exit tests/unit/correctness/*.property.test.ts",
|
|
"check:cycles": "node scripts/check/check-cycles.mjs",
|
|
"check:route-validation:t06": "node scripts/check/check-route-validation.mjs",
|
|
"check:any-budget:t11": "node scripts/check/check-t11-any-budget.mjs",
|
|
"check:docs-sync": "node scripts/check/check-docs-sync.mjs",
|
|
"check:env-doc-sync": "node scripts/check/check-env-doc-sync.mjs",
|
|
"check:docs-counts": "node scripts/check/check-docs-counts-sync.mjs",
|
|
"check:deprecated-versions": "node scripts/check/check-deprecated-versions.mjs",
|
|
"check:compression-budget": "bun scripts/check/check-compression-budget.ts",
|
|
"check:router-eval": "node --import tsx scripts/check/check-router-eval-regression.ts",
|
|
"check:doc-links": "node scripts/check/check-doc-links.mjs",
|
|
"check:fabricated-docs": "node scripts/check/check-fabricated-docs.mjs --strict",
|
|
"check:docs-frontmatter": "node scripts/check/check-docs-frontmatter.mjs",
|
|
"check:docs-all": "npm run check:docs-sync && npm run check:docs-frontmatter && npm run check:docs-counts && npm run check:env-doc-sync && npm run check:deprecated-versions && npm run check:doc-links && npm run check:fabricated-docs",
|
|
"docs:render-diagrams": "node scripts/docs/render-diagrams.mjs",
|
|
"i18n:run": "node scripts/i18n/run-translation.mjs",
|
|
"i18n:run:dry": "node scripts/i18n/run-translation.mjs --dry-run",
|
|
"i18n:check": "node scripts/i18n/check-translation-drift.mjs",
|
|
"i18n:sync-ui": "node scripts/i18n/sync-ui-keys.mjs",
|
|
"i18n:sync-ui:dry": "node scripts/i18n/sync-ui-keys.mjs --dry-run",
|
|
"i18n:check-ui-coverage": "node scripts/i18n/check-ui-keys-coverage.mjs",
|
|
"i18n:check-value-drift": "node scripts/i18n/check-ui-value-drift.mjs",
|
|
"i18n:check-value-drift:warn": "node scripts/i18n/check-ui-value-drift.mjs --warn",
|
|
"i18n:check-glossary": "node scripts/i18n/check-glossary-consistency.mjs",
|
|
"i18n:check-glossary:ko": "node scripts/i18n/check-glossary-consistency.mjs --locale=ko",
|
|
"i18n:check-ratio": "node scripts/i18n/check-translation-ratio.mjs",
|
|
"i18n:check-ratio:update": "node scripts/i18n/check-translation-ratio.mjs --update",
|
|
"i18n:sync-bars": "node scripts/i18n/sync-language-bars.mjs",
|
|
"i18n:add-locale": "node scripts/i18n/add-locale.mjs",
|
|
"check:native-deps": "node scripts/check/check-native-deps.mjs",
|
|
"check:node-runtime": "node --import tsx scripts/check/check-supported-node-runtime.ts",
|
|
"check:pack-artifact": "node --import tsx scripts/build/validate-pack-artifact.ts",
|
|
"check:pack-boot": "node scripts/check/check-pack-boot.mjs",
|
|
"check:install-upgrade": "node scripts/check/check-install-upgrade.mjs",
|
|
"check:pack-policy": "node --import tsx scripts/build/validate-pack-artifact.ts --policy-only",
|
|
"check:cli-i18n": "node scripts/check/check-cli-i18n.mjs",
|
|
"check:openapi-coverage": "node scripts/check/check-openapi-coverage.mjs",
|
|
"check:openapi-security-tiers": "node scripts/check/check-openapi-security-tiers.mjs",
|
|
"check:model-lifecycle": "node --import tsx/esm scripts/check/check-model-lifecycle.mjs",
|
|
"check:provider-consistency": "bun scripts/check/check-provider-consistency.ts",
|
|
"check:provider-assets": "node scripts/check/check-provider-assets.mjs",
|
|
"check:provider-order-sync": "node scripts/check/check-provider-order-sync.mjs",
|
|
"check:provider-asset-provenance": "node scripts/check/check-provider-asset-provenance.mjs",
|
|
"check:radar-sentinels": "node scripts/check/check-radar-sentinels.mjs",
|
|
"check:nvidia-catalog-drift": "node --import tsx/esm scripts/check/check-nvidia-catalog-drift.ts",
|
|
"check:fetch-targets": "node scripts/check/check-fetch-targets.mjs",
|
|
"check:openapi-routes": "node scripts/check/check-openapi-routes.mjs",
|
|
"check:api-docs-refs": "node scripts/check/check-api-docs-refs.mjs",
|
|
"check:openapi-breaking": "node scripts/check/check-openapi-breaking.mjs",
|
|
"check:deps": "node scripts/check/check-deps.mjs",
|
|
"check:file-size": "node scripts/check/check-file-size.mjs",
|
|
"check:duplication": "node scripts/check/check-duplication.mjs",
|
|
"check:tracked-artifacts": "node scripts/check/check-tracked-artifacts.mjs",
|
|
"check:test-masking": "node scripts/check/check-test-masking.mjs",
|
|
"check:test-runner-api": "node scripts/check/check-test-runner-api.mjs",
|
|
"check:changelog-integrity": "node scripts/check/check-changelog-integrity.mjs",
|
|
"sweep:stale-fragments": "node scripts/release/sweep-stale-fragments.mjs",
|
|
"changelog:aggregate": "node scripts/release/aggregate-changelog.mjs",
|
|
"check:agent-skills-sync": "node --import tsx/esm scripts/skills/generate-agent-skills.mjs",
|
|
"check:build-scope": "node scripts/check/check-build-scope.mjs",
|
|
"check:error-helper": "node scripts/check/check-error-helper.mjs",
|
|
"check:routing-error-guard": "node scripts/check/check-routing-error-guard.mjs",
|
|
"check:migration-numbering": "node scripts/check/check-migration-numbering.mjs",
|
|
"check:public-creds": "node scripts/check/check-public-creds.mjs",
|
|
"check:db-rules": "node scripts/check/check-db-rules.mjs",
|
|
"check:docs-symbols": "node scripts/check/check-docs-symbols.mjs",
|
|
"check:known-symbols": "bun scripts/check/check-known-symbols.ts",
|
|
"check:route-guard-membership": "node --import tsx scripts/check/check-route-guard-membership.ts",
|
|
"check:test-discovery": "node scripts/check/check-test-discovery.mjs",
|
|
"check:forgotten-sibling-tests": "node scripts/check/check-forgotten-sibling-tests.mjs",
|
|
"check:mutation-test-coverage": "node scripts/check/check-mutation-test-coverage.mjs --strict",
|
|
"check:complexity": "node scripts/check/check-complexity.mjs",
|
|
"check:dead-code": "node scripts/check/check-dead-code.mjs",
|
|
"check:cognitive-complexity": "node scripts/check/check-cognitive-complexity.mjs",
|
|
"check:complexity-ratchets": "node scripts/check/check-complexity-ratchets.mjs",
|
|
"check:release-green": "node scripts/quality/validate-release-green.mjs",
|
|
"check:ratchet-bank": "node scripts/quality/verify-ratchet-bank.mjs",
|
|
"check:type-coverage": "node scripts/check/check-type-coverage.mjs",
|
|
"check:lockfile": "node scripts/check/check-lockfile.mjs",
|
|
"check:bundle-size": "node scripts/check/check-bundle-size.mjs",
|
|
"check:circular-deps": "node scripts/check/check-circular-deps.mjs",
|
|
"check:mutation-ratchet": "node scripts/check/check-mutation-ratchet.mjs",
|
|
"check:rtl-ratchet": "node scripts/check/check-rtl-ratchet.mjs",
|
|
"check:licenses": "node scripts/check/check-licenses.mjs",
|
|
"check:pr-evidence": "node scripts/check/check-pr-evidence.mjs",
|
|
"check:vuln-ratchet": "node scripts/check/check-vuln-ratchet.mjs",
|
|
"check:codeql-ratchet": "node scripts/check/check-codeql-ratchet.mjs",
|
|
"check:secrets": "node scripts/check/check-secrets.mjs",
|
|
"check:workflows": "node scripts/check/check-workflows.mjs",
|
|
"quality:collect": "node scripts/quality/collect-metrics.mjs",
|
|
"quality:ratchet": "node scripts/quality/check-quality-ratchet.mjs",
|
|
"quality:headroom": "node scripts/quality/baseline-headroom.mjs",
|
|
"quality:relax-baselines": "node scripts/quality/relax-baselines.mjs",
|
|
"quality:refresh-model-lifecycle": "node scripts/quality/refresh-model-lifecycle.mjs",
|
|
"quality:gate": "npm run quality:collect && npm run quality:ratchet -- --allow-missing",
|
|
"quality:scan": "node scripts/quality/run-all-gates.mjs",
|
|
"quality:scan:fast": "node scripts/quality/run-all-gates.mjs --fast",
|
|
"audit:deps": "npm audit --audit-level=critical && (npm audit --audit-level=high || echo '::warning::high-severity advisories present (non-blocking)') && npm run audit:electron",
|
|
"audit:electron": "npm --prefix electron audit --audit-level=critical && (npm --prefix electron audit --audit-level=high || echo '::warning::electron high-severity advisories present (non-blocking)')",
|
|
"typecheck:core": "tsc --pretty false -p tsconfig.typecheck-core.json",
|
|
"typecheck:noimplicit:core": "tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json",
|
|
"check:dashboard-typecheck": "node scripts/check/check-dashboard-typecheck.mjs",
|
|
"check:open-sse-typecheck": "node scripts/check/check-open-sse-typecheck.mjs",
|
|
"check:ts7-diagnostics-ratchet": "node scripts/check/check-ts7-diagnostics-ratchet.mjs",
|
|
"backfill-aggregation": "node --import tsx src/scripts/backfillAggregation.ts",
|
|
"env:sync": "node scripts/dev/sync-env.mjs",
|
|
"test:integration": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"",
|
|
"test:integration:ci": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 --test-shard=$TEST_SHARD tests/integration/*.test.ts \"tests/integration/combo-matrix/*.test.ts\"",
|
|
"test:combo:matrix": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-matrix/*.test.ts\"",
|
|
"test:combo:live": "cross-env RUN_COMBO_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/integration/combo-live/*.live.test.ts\"",
|
|
"test:combo:live:vps": "node scripts/test/combo-live-vps.mjs",
|
|
"test:combo:live:vps:failover": "node scripts/test/combo-live-vps.mjs --failover",
|
|
"test:boundary:live": "cross-env RUN_BOUNDARY_LIVE=1 DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/boundary/*.live.test.ts\"",
|
|
"test:heap": "node --expose-gc --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit tests/integration/heap-growth.test.ts",
|
|
"test:chaos": "cross-env RUN_CHAOS_INT=1 node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/integration/resilience-chaos.test.ts",
|
|
"test:e2e": "node scripts/dev/run-playwright-tests.mjs test tests/e2e/*.spec.ts",
|
|
"test:protocols:e2e": "node scripts/dev/run-protocol-clients-tests.mjs",
|
|
"test:vitest": "vitest run --config vitest.mcp.config.ts",
|
|
"test:vitest:ui": "vitest run --config vitest.config.ts",
|
|
"test:mutation": "stryker run",
|
|
"test:ecosystem": "node scripts/dev/run-ecosystem-tests.mjs",
|
|
"test:system": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 tests/e2e/system-failover.test.ts",
|
|
"test:coverage": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 npm run test:coverage:runner",
|
|
"test:coverage:legacy": "c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts",
|
|
"coverage:report": "cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 report --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov",
|
|
"coverage:summary": "node scripts/check/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md",
|
|
"check:pr-test-policy": "node scripts/check/check-pr-test-policy.mjs",
|
|
"check:pricing-freshness": "node scripts/check/check-pricing-freshness.mjs",
|
|
"coverage:report:legacy": "c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary",
|
|
"test:all": "npm run test:unit && npm run test:vitest && npm run test:vitest:ui && npm run test:ecosystem && npm run test:e2e",
|
|
"check": "npm run lint && npm run test",
|
|
"prepublishOnly": "npm run build:cli-api && npm run build:cli && npm run check:pack-artifact",
|
|
"postinstall": "node scripts/build/postinstall.mjs",
|
|
"uninstall": "node scripts/build/uninstall.mjs",
|
|
"uninstall:full": "node scripts/build/uninstall.mjs --full",
|
|
"prepare": "node -e \"try{require.resolve('husky')}catch(e){process.exit(0)};require('child_process').execSync('husky',{stdio:'inherit'})\"",
|
|
"system-info": "node scripts/dev/system-info.mjs",
|
|
"build:cli-api": "node --import tsx/esm scripts/cli/generate-api-commands.mjs",
|
|
"postbuild": "node scripts/build/colocate-standalone.mjs",
|
|
"release:contributors": "node scripts/release/gen-contributors.mjs",
|
|
"release:uncovered": "node scripts/release/list-uncovered-commits.mjs",
|
|
"release:reconcile": "node scripts/release/reconcile-changelog.mjs",
|
|
"test:coverage:runner": "node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 tests/unit/*.test.ts \"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,db,db-adapters,docs,gamification,guardrails,lib,mcp,memory,runtime,security,services,settings,shared,translator,ui,usage}/**/*.test.ts\" \"tests/unit/**/*.test.mjs\" && cross-env DISABLE_SQLITE_AUTO_BACKUP=true NODE_OPTIONS=--max-old-space-size=8192 c8 --merge-async --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=8 \"tests/unit/dashboard/**/*.test.ts\" && npm run test:unit:serial",
|
|
"test:unit:serial": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx/esm --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=1 \"tests/unit/serial/**/*.test.ts\"",
|
|
"alibaba:sync-allowlist": "node --import tsx/esm scripts/ops/sync-alibaba-allowlist.mjs",
|
|
"check:vitest-exclusions": "node scripts/check/check-vitest-exclusions.mjs",
|
|
"i18n:check-new-keys": "node scripts/i18n/check-new-key-coverage.mjs",
|
|
"i18n:check-keys": "node scripts/i18n/check-key-completeness.mjs",
|
|
"i18n:check-keys:cli": "node scripts/i18n/check-key-completeness.mjs --catalog=cli"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-bedrock-runtime": "^3.1120.0",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@lobehub/icons": "^5.16.0",
|
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
"@monaco-editor/react": "^4.7.0",
|
|
"@ngrok/ngrok": "^1.7.0",
|
|
"@swc/helpers": "0.5.23",
|
|
"@toon-format/toon": "^4.1.1",
|
|
"@types/mdx": "^2.0.13",
|
|
"@xyflow/react": "^12.11.5",
|
|
"ajv": "^8.20.0",
|
|
"ajv-formats": "^3.0.1",
|
|
"axios": "^1.20.0",
|
|
"bcryptjs": "^3.0.3",
|
|
"bottleneck": "^2.19.5",
|
|
"clsx": "^2.1.1",
|
|
"commander": "^15.0.0",
|
|
"cron-parser": "^5.10.0",
|
|
"csv-stringify": "^6.8.3",
|
|
"dompurify": "^3.4.14",
|
|
"express": "^5.2.1",
|
|
"fetch-socks": "^1.3.3",
|
|
"fflate": "^0.8.3",
|
|
"fumadocs-core": "^16.15.4",
|
|
"fumadocs-ui": "^16.15.4",
|
|
"http-proxy-middleware": "^4.0.0",
|
|
"https-proxy-agent": "^9.0.0",
|
|
"ink": "^7.0.3",
|
|
"ink-spinner": "^5.0.0",
|
|
"ink-text-input": "^6.0.0",
|
|
"ioredis": "^5.10.1",
|
|
"jose": "^6.2.10",
|
|
"js-yaml": "^5.4.1",
|
|
"jsonc-parser": "^3.3.1",
|
|
"lowdb": "^7.0.1",
|
|
"lucide-react": "^1.33.0",
|
|
"marked": "^18.0.11",
|
|
"marked-terminal": "^7.3.0",
|
|
"material-symbols": "^0.47.0",
|
|
"mermaid": "^11.17.2",
|
|
"monaco-editor": "^0.56.0",
|
|
"next": "16.3.3",
|
|
"next-intl": "^4.14.0",
|
|
"next-themes": "^0.4.6",
|
|
"node-machine-id": "^1.1.12",
|
|
"omniglyph": "^1.4.0",
|
|
"open": "^11.0.2",
|
|
"ora": "^9.4.1",
|
|
"parse5": "^8.0.1",
|
|
"pino": "^10.3.1",
|
|
"pino-abstract-transport": "^3.0.0",
|
|
"pino-pretty": "^13.1.3",
|
|
"playwright": "1.62.1",
|
|
"playwright-core": "1.62.1",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"react-is": "^19.2.6",
|
|
"react-markdown": "^10.1.0",
|
|
"react-reconciler": "^0.33.0",
|
|
"react18-json-view": "0.2.10",
|
|
"recharts": "^3.8.1",
|
|
"safe-regex": "^2.1.1",
|
|
"selfsigned": "^5.5.0",
|
|
"sharp": "^0.35.4",
|
|
"smol-toml": "1.8.0",
|
|
"socks": "^2.8.7",
|
|
"sql.js": "^1.14.2",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tiktoken": "^1.0.22",
|
|
"tsx": "^4.23.13",
|
|
"turndown": "7.2.4",
|
|
"turndown-plugin-gfm": "1.0.2",
|
|
"undici": "^8.10.0",
|
|
"update-notifier": "^7.3.1",
|
|
"uuid": "^14.0.2",
|
|
"ws": "^8.21.3",
|
|
"xxhash-wasm": "^1.1.0",
|
|
"yazl": "^3.3.1",
|
|
"zod": "^4.5.4",
|
|
"zustand": "^5.0.15"
|
|
},
|
|
"optionalDependencies": {
|
|
"@atjsh/llmlingua-2": "3.0.0",
|
|
"@huggingface/transformers": "^4.2.0",
|
|
"better-sqlite3": "^13.0.2",
|
|
"js-tiktoken": "^1.0.20",
|
|
"keytar": "^7.9.0",
|
|
"onnxruntime-node": "1.24.3",
|
|
"sqlite-vec": "^0.1.9",
|
|
"wreq-js": "3.2.0"
|
|
},
|
|
"devDependencies": {
|
|
"@axe-core/playwright": "^4.13.0",
|
|
"@cyclonedx/cyclonedx-npm": "6.0.1",
|
|
"@eslint/compat": "^2.1.1",
|
|
"@playwright/test": "^1.63.0",
|
|
"@size-limit/file": "^13.0.3",
|
|
"@stryker-mutator/core": "^10.0.0",
|
|
"@stryker-mutator/tap-runner": "^10.0.0",
|
|
"@tailwindcss/postcss": "^4.3.0",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/jest-dom": "^7.0.1",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@testing-library/user-event": "^14.6.7",
|
|
"@types/better-sqlite3": "^9.6.0",
|
|
"@types/bun": "1.4.2",
|
|
"@types/node": "^26.5.1",
|
|
"@types/react": "^19.2.18",
|
|
"@types/react-dom": "^19.2.5",
|
|
"@types/safe-regex": "^1.1.6",
|
|
"@types/ws": "^8.18.0",
|
|
"@vitejs/plugin-react": "^6.1.0",
|
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
"bun": "1.4.2",
|
|
"c8": "^12.0.0",
|
|
"concurrently": "^10.0.5",
|
|
"cross-env": "^10.1.0",
|
|
"ctrf": "^0.3.0",
|
|
"dpdm": "^4.3.0",
|
|
"esbuild": "0.28.2",
|
|
"eslint": "^10.10.0",
|
|
"eslint-config-next": "16.3.5",
|
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
"eslint-plugin-sonarjs": "^4.1.0",
|
|
"espree": "^11.2.0",
|
|
"fast-check": "^4.10.0",
|
|
"fumadocs-mdx": "^15.4.0",
|
|
"glob": "^13.0.6",
|
|
"httpyac": "^6.16.7",
|
|
"husky": "^9.1.7",
|
|
"jscpd": "^4.3.0",
|
|
"jsdom": "^30.0.1",
|
|
"junit-to-ctrf": "^0.0.14",
|
|
"knip": "^6.35.1",
|
|
"license-checker-rseidelsohn": "^5.0.1",
|
|
"lint-staged": "^17.5.1",
|
|
"lockfile-lint": "^5.0.1",
|
|
"node-loader": "^2.1.0",
|
|
"opencode-ai": "1.18.30",
|
|
"playwright-ctrf-json-reporter": "^0.0.29",
|
|
"prettier": "^3.9.6",
|
|
"promptfoo": "^0.123.0",
|
|
"size-limit": "^13.0.3",
|
|
"tailwindcss": "^4.3.0",
|
|
"type-coverage": "^2.30.1",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.70.0",
|
|
"vite": "^8.0.16",
|
|
"vitest": "^5.0.0",
|
|
"wait-on": "^9.1.0",
|
|
"wtfnode": "^0.10.1"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,jsx,ts,tsx,mjs}": [
|
|
"prettier --write",
|
|
"eslint --fix --no-error-on-unmatched-pattern --no-warn-ignored --suppressions-location config/quality/eslint-suppressions.json"
|
|
],
|
|
"*.{json,md,yml,yaml,css}": [
|
|
"prettier --write"
|
|
]
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"@parcel/watcher",
|
|
"@swc/core",
|
|
"better-sqlite3",
|
|
"esbuild",
|
|
"omniroute",
|
|
"sharp"
|
|
]
|
|
},
|
|
"allowScripts": {
|
|
"better-sqlite3": true,
|
|
"esbuild": true,
|
|
"@swc/core": true,
|
|
"@parcel/watcher": true,
|
|
"keytar": true,
|
|
"protobufjs": true,
|
|
"unrs-resolver": true
|
|
},
|
|
"overrides": {
|
|
"browserslist": "^4.28.8",
|
|
"joi": "^18.2.8",
|
|
"onnxruntime-node": "1.24.3",
|
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
"fast-xml-parser": "^5.10.1",
|
|
"sharp": "^0.35.4",
|
|
"postcss": "^8.5.18",
|
|
"ip-address": "^10.3.1",
|
|
"qs": "^6.16.0",
|
|
"uuid": "^14.0.2",
|
|
"form-data": "^4.0.6",
|
|
"vite": "^8.0.16",
|
|
"protobufjs": "^7.6.5",
|
|
"@babel/core": "^7.29.6",
|
|
"hono": "^4.13.7",
|
|
"@hono/node-server": "^2.0.5",
|
|
"fast-uri": "^3.1.7",
|
|
"body-parser": "^2.3.0",
|
|
"@yarnpkg/parsers": {
|
|
"js-yaml": "^4.3.2"
|
|
},
|
|
"@openai/codex-security": {
|
|
"smol-toml": "^1.8.0"
|
|
},
|
|
"jsdom": {
|
|
"undici": "^7.29.0"
|
|
},
|
|
"node-gyp": {
|
|
"undici": "^6.28.0"
|
|
},
|
|
"concurrently": {
|
|
"shell-quote": "^1.9.0"
|
|
},
|
|
"adm-zip": "^0.6.1",
|
|
"promptfoo": {
|
|
"js-yaml": "^5.2.2",
|
|
"undici": "^7.29.0"
|
|
},
|
|
"socket.io-parser": "^4.2.7",
|
|
"tar": "^7.5.21",
|
|
"libxmljs2": {
|
|
"minimatch": {
|
|
"brace-expansion": "^2.1.4"
|
|
}
|
|
},
|
|
"rimraf": {
|
|
"minimatch": {
|
|
"brace-expansion": "^2.1.4"
|
|
}
|
|
},
|
|
"@apidevtools/json-schema-ref-parser": {
|
|
"js-yaml": "^4.3.1"
|
|
},
|
|
"@eslint/eslintrc": {
|
|
"js-yaml": "^4.3.1"
|
|
},
|
|
"lockfile-lint": {
|
|
"js-yaml": "^4.3.1"
|
|
},
|
|
"xmlbuilder2": {
|
|
"js-yaml": "^4.3.1"
|
|
},
|
|
"nanoid": "^3.3.17",
|
|
"monaco-editor": {
|
|
"dompurify": "^3.4.14"
|
|
},
|
|
"csv-parse": "^7.0.2"
|
|
}
|
|
}
|