This is an automated email from the ASF dual-hosted git repository.
moonming pushed a change to branch
dependabot/github_actions/actions/setup-node-7.0.0
in repository https://gitbox.apache.org/repos/asf/apisix.git
from 8c3f18d12 build(deps): bump actions/setup-node from 6.2.0 to 7.0.0
add d0692133e fix(ai-proxy-multi): reject instances that share a name
(#13851)
add aa4472cab feat(ai-proxy-multi): let configured HTTP statuses trigger a
fallback (#13852)
add 1719001b4 fix(data-mask): keep request header masking effective in the
log phase (#13839)
add 749a9bc15 test(basic-auth): store the vault secret before the consumer
references it (#13853)
add 6e51dcfb7 test(cli): wait for the pid file before reading it (#13854)
add d7553551a feat(graphql-limit-count): rate limit by GraphQL query cost
(#13840)
add fa6929773 chore: release 3.18.0 (#13842)
add f519a0f04 docs(admin-api): correct the retry_timeout type to Number
(#13860)
add 579e18eec fix(redirect): compare X-Forwarded-Proto case-insensitively
(#13865)
add e056eac68 docs: align plugin references with current behavior (#13864)
add 5abb66e39 fix(ai-proxy): return 502 when a streaming upstream produces
no output (#13870)
add 77086b0db fix(ai-proxy): do not turn a streaming read error after
partial output into a 5xx (#13876)
add d55f6d310 fix(ua-restriction): return false when UA matches the
deny_list (#13869)
add cb7e781b4 chore: upgrade lua-resty-dns-client to 7.1.2 (#13875)
add 76ff252b1 test(ai-proxy): cover the AWS moderation path in the
truncated-stream suite (#13880)
add b9cfc05eb feat(upstream): verify the upstream certificate against
configurable CAs (#13863)
add a036f1858 fix(basic-auth): reject an empty consumer password (#13884)
add 89c782ee2 fix(etcd): do not block writes when the deployment role
cannot be read (#13885)
add 6dbdb9354 fix(jwe-decrypt): reject malformed tokens instead of
returning 500 (#13844)
add 97e3800d4 feat: chaitin waf response logging (#13763)
add a64f2baa0 fix(standalone): stop aborting stream connections before the
first config arrives (#13855)
add f94b3c765 docs: clarify JWE and RAG plugin guidance (#13873)
add 9037ee593 chore: bump APISIX-Runtime to 1.3.18 (#13890)
add 127e6bb28 test: give the redis counter poll five seconds instead of
one (#13892)
add bc54a21c0 fix(control): always report healthcheck nodes as a JSON
array (#13891)
add 1caee4f69 docs(openid-connect): recommend setting redirect_uri to an
absolute URL (#13879)
add d53d855c6 fix(ai-providers): encode Vertex AI model path segment
(#13872)
add 10e61e0fd docs: improve gateway operations guidance (#13900)
add f80e42c2f fix(basic-auth): split credentials on the first colon only
(#13836)
add bd8ac3a86 docs: add LocalAI integration tutorial (#13770)
add 51fad8a89 fix(traffic-label): cache the compiled match expressions
outside the plugin config (#13901)
add 385b80a6e fix(jwe-decrypt): accept JWE tokens that authenticate the
protected header (#13889)
add 89e627384 feat(control-api): report the health checks a plugin owns
(#13899)
add 96a5b43d5 test(skywalking): remove worker-0 dependency in backend
timer assertion (#13902)
add f0bb251a9 fix(ai-cache): key the passthrough protocol on the client
method, path and query (#13887)
add 9fc501f03 fix(aws-lambda): request "/" for a path-less function_uri
and log function error responses (#13908)
add 15a438183 feat: improve API-driven standalone update reliability
(#13904)
add 494dc4229 feat: label WebSocket sessions with request_type=websocket
(#13909)
add 978dfce91 fix: write request_type=websocket through ctx.var (#13915)
add f3623982e fix(etcd): watch from the revision the configuration was
read at (#13917)
add 57b401dab feat(stream): support TLS passthrough on the stream proxy
(#13912)
add fae270412 fix(ci): unbreak CI under pnpm 12 (#13921)
add 316aea792 fix(standalone): harden the declarative configuration paths
(#13886)
add 96a4e7cc4 fix(ci): stop rerun_flaky_tests from turning unparsable
failures into a pass (#13923)
add 1f6120d19 fix(ai-aliyun-content-moderation): report final results
without usage (#13922)
add 09b19c609 fix: preserve servlet upstream URI boundaries (#13914)
add 9aee46aaa fix(workflow): reject invalid case expressions and missing
action conf (#13862)
add efef0e841 docs(changelog): add the 3.18.0 section to the Chinese
changelog (#13843)
add c3141d49c fix(batch-requests): bound aggregated response bodies
(#13906)
add b95627061 fix(openid-connect): validate introspection issuer (#13916)
add a508d83de fix(plugin): align unavailable plugin handling (#13928)
add a1e02b89a test(elasticsearch-logger): drop the max_pending_entries
metadata after the discard test (#13924)
add d13105e17 test(xds): wait for the privileged agent's startup sync
before flush_all in TEST 4 (#13937)
add d5ea736a7 fix(etcd): check availability before starting watcher
(#13934)
add 4278bc9ae fix(redis): send the TLS SNI and add redis_server_name
(#13938)
add 5e784af30 fix(ai-proxy): avoid aborting streams on empty flushes
(#13947)
add 8615934a9 test: stabilize plugin tests and cover CI bailouts (#13948)
add 32cdc6227 feat(stream): match a stream route by several SNIs (#13911)
add e564adb84 feat: add openapi-to-mcp plugin (#13942)
add 0890d2de3 fix(feishu-auth, dingtalk-auth): bind the authorization code
to the session that started the login (#13806)
add c525ae5c8 feat(upstream): slow start for newly observed upstream nodes
(#13941)
add b172d640c ci: fix dev image push (#13930)
add 694fd352a fix(ext-plugin-post-resp): set upstream_addr and
upstream_response_time for loggers (#13940)
add 789d4b822 fix(openapi-to-mcp): apply defaults, keep SSE variables,
reject non-OpenAPI documents (#13956)
add c4776e85f docs: fix traffic-split attribute table rendering (#13965)
add 3d64360a6 feat(saml-auth): add lua-resty-saml 0.2.6 validation options
(#13964)
add 52eb4e31c feat(websocket): add enhanced proxy and plugin hook (#13939)
add 97b612204 feat(websocket): add plugin to customize proxy behaviors
(#13972)
add 271e79969 fix(websocket): address review findings on the ws/wss proxy
path (#13977)
add d97d5f725 ci(test): migrate from jest to vitest (#13989)
add ee7dc10b4 chore: release 3.19.0 (#13976)
add c6b2adc32 feat(ai-rate-limiting): expose nested usage fields to
cost_expr (#13984)
add 2ee8dfa81 feat(prometheus): add service and service_id to the stream
metrics (#13992)
add 2b98a717f feat(kubernetes): select clusters by
discovery_args.cluster_ids (#13991)
add cbd07d0f5 feat(limit-count): report the counting window in
$rate_limiting_info (#13996)
add 9bd84f4f2 chore: migrate branch protection to rulesets (#13955)
add 88c4b8c47 fix(limit-count): refresh the delayed-sync quota after the
local delta expired (#14015)
add 323997dda docs(forward-auth): clarify that X-Forwarded-* carry the
client request (#13978)
add a5ddc1cf7 feat!: remove the deprecated mcp-bridge plugin (#14019)
add 3551401b4 feat: add the request-decompress plugin (#14016)
add e79d37789 docs(limit-count): correct when the delayed-sync snapshot is
refreshed (#14017)
add 6a3a76648 fix(consul): run the catalog and health watchers as
independent timers (#14032)
add 2e43b6c60 feat(consul): support https consul server addresses (#14018)
add 64a4afdd1 fix(ai-proxy): include cache tokens in Anthropic prompt
usage and read them from message_delta (#14028)
add e14c6e937 feat(prometheus): export per-process timers, connection
slots and Lua memory (#14034)
add de0782a91 fix: return 421 for SNI and Host mismatches on mTLS requests
(#14013)
add 9326926e3 docs: clarify RPM package links after UBI 9 migration
(#14039)
add b972ce477 fix(nacos): keep cached nodes when a per-service refresh
fails (#13971)
add 016dcd074 fix(kubernetes): fail the list when a later page fails
(#14053)
add c4f09e1f8 fix(secret): do not include secret values in aws and vault
error messages (#14049)
add 210943c18 fix: preserve client-control body limit for gRPC upstreams
(#14036)
add cea64fbf4 ci: make CI work on the Ubuntu 26.04 runner image (#14070)
add 6c700c5dc fix(traffic-split): apply tls and keepalive_pool of the
inline upstream (#14054)
add 5dccf0e04 fix(oas-validator): release remote specs unused for
spec_url_ttl (#14061)
add a546e8559 fix(router): keep the query string when
normalize_uri_like_servlet is on (#13982)
add b6cefbf7f fix(openapi-to-mcp): harden the plugin against a hostile
document and caller (#13959)
add f2523f7ad chore: bump APISIX-Runtime to 1.4.0 (#14041)
add 96ba388d5 fix(ai-proxy): account for Bedrock prompt cache tokens
(#14044)
add 4a080d029 fix(router): forward the matched path when nginx normalizes
the request uri (#14035)
add a177234f6 test(prometheus): wait for stream session metrics to reach
the exposition (#14092)
add f77401f1e fix(cli): don't capture openresty stdout in apisix start
(#14087)
add 238aa9ee4 feat(prometheus): configure expired metric cleanup interval
(#13981)
add f7139e2ad fix(jwe-decrypt,forward-auth): clear forwarded headers when
skipping (#14096)
add b6deb41da feat(openid-connect): map verified claims to upstream
request headers (#14030)
add b31e828c6 feat(chaitin-waf): add allow_degradation option for
fail-open behavior (#13311)
add 0e4242f58 docs: port source-verified terminology corrections (#14105)
add ae87b9423 fix(authz-keycloak): require every requested permission to
be granted (#14098)
add 3b33a0347 Handle missing resource config in node version helpers
(#13986)
add f3390e585 fix(consul): upgrade lua-resty-consul to 0.4.0 (#14118)
add 2e27e9b4b feat(openid-connect): upgrade lua-resty-openidc to 1.9.3
(#14088)
add ff1187e9b fix(upstream): verify against ssl_trusted_certificate when
only tls.verify is set (#14113)
add 88a41b7f3 docs: add source-verified Admin API contract for master
(#14084)
add ef7135862 fix(ai-prompt-guard): check embeddings string arrays before
forwarding (#14073)
add a135515b0 docs(proxy-cache): clarify that the remote_user isolation
fallback is unverified (#14115)
add f88e1d238 refactor(wolf-rbac): move header_prefix to route
configuration (#13929)
add bf40a99c5 fix(ssl): match skip_mtls_uri_regex against the
encoded-slash route uri (#14108)
add 530099397 fix(limit-count): keep delayed sync counters per rule
(#14064)
add 83db779df chore: bump APISIX-Runtime to 1.4.2 (#14126)
add 6205e4a56 docs: add source-verified Control API contract (#14131)
add f4a4cb4fd chore: bump brotli to 1.2.1 (#14138)
add 79a87e559 feat(core): make the readable request header count
configurable (#14136)
add 37b630480 fix(csrf): safely validate decoded token table and fields
(#14025)
add 7db9dce5b docs: modularize the Admin API OpenAPI specification (#14147)
add 5222007fc fix(prometheus): bump nginx-lua-prometheus-api7 to 1.1.1
(#14150)
add 4d736af51 perf(forward-auth): send auth requests through
ngx_http_ffi_client (#14144)
add 377cb5961 perf(request-id): read only the configured header and encode
v4 ids through a table (#14140)
add 7c7c8f9f4 perf(limit-count): cache parsed templates, local limiters
and header names (#14141)
add 7577c3173 fix(syslog): separate error cause from message in syslog
errors (#13974)
add 7f7b7a0ba fix(syslog): return early when logger init fails (#13970)
add b5b50fa71 fix(oas-validator): verify the TLS certificate of the
spec_url host (#14146)
add 77055643b fix(openapi-to-mcp): confine a path parameter to one path
segment (#14154)
add 22ecbc60e fix(discovery): refresh the kubernetes endpoint cache by ttl
instead of a version key (#14167)
add 1d920b0c7 docs: correct Admin API TLS and derived schemas (#14160)
add 4a9d5d567 clarify Credential name field description and fix typos
(#13837)
add 2b6d519a0 fix(prometheus): count stream bytes of slots created after
the first read (#14101)
add 460cae8bb Merge remote-tracking branch 'origin/master' into
codex/deps-13846
add 34f6780a1 ci: update OpenAPI workflow to setup-node v7
No new revisions were added by this update.
Summary of changes:
.asf.yaml | 126 +-
.gitattributes | 1 +
.github/workflows/admin-api-contract.yml | 39 +
.github/workflows/build.yml | 9 +-
.github/workflows/cli.yml | 7 +-
.github/workflows/doc-lint.yml | 19 +
.github/workflows/link-check.yml | 2 +-
.github/workflows/lint.yml | 2 +-
.github/workflows/push-dev-image-on-commit.yml | 4 +-
.github/workflows/source-install.yml | 6 +-
.gitignore | 3 +-
.licenserc.yaml | 1 +
.requirements | 4 +-
CHANGELOG.md | 241 +
CONTRIBUTING.md | 30 +
Makefile | 20 +-
README.md | 2 -
apisix-master-0.rockspec | 17 +-
apisix/admin/config_validate.lua | 58 +-
apisix/admin/graphql_cost_decorations.lua | 251 +
apisix/admin/init.lua | 43 +-
apisix/admin/resource.lua | 20 +
apisix/admin/services.lua | 87 +-
apisix/admin/standalone.lua | 296 +-
apisix/admin/stream_routes.lua | 7 +-
apisix/balancer.lua | 131 +-
apisix/cli/config.lua | 14 +-
apisix/cli/file.lua | 9 +-
apisix/cli/ngx_tpl.lua | 122 +-
apisix/cli/ops.lua | 154 +-
apisix/cli/schema.lua | 10 +
apisix/consumer.lua | 8 +-
apisix/control/v1.lua | 123 +-
apisix/core.lua | 1 +
apisix/core/config_etcd.lua | 82 +-
apisix/core/config_local.lua | 28 +-
apisix/core/config_yaml.lua | 108 +-
apisix/core/etcd.lua | 12 +-
apisix/core/lrucache.lua | 124 +-
apisix/core/request.lua | 39 +-
apisix/core/utils.lua | 244 +-
apisix/core/version.lua | 2 +-
apisix/core/websocket.lua | 86 +
apisix/discovery/consul/client.lua | 42 +-
apisix/discovery/consul/init.lua | 136 +-
apisix/discovery/consul/schema.lua | 1 +
apisix/discovery/kubernetes/core.lua | 28 +-
apisix/discovery/kubernetes/informer_factory.lua | 2 +-
apisix/discovery/kubernetes/init.lua | 155 +-
apisix/discovery/nacos/client.lua | 32 +-
apisix/discovery/nacos/init.lua | 8 +-
apisix/discovery/tars/init.lua | 32 +-
apisix/http/service.lua | 75 +-
apisix/init.lua | 624 +-
apisix/plugin.lua | 18 +-
apisix/plugins/ai-aliyun-content-moderation.lua | 53 +-
apisix/plugins/ai-aws-content-moderation.lua | 7 +-
apisix/plugins/ai-cache/key.lua | 22 +-
apisix/plugins/ai-lakera-guard.lua | 4 +-
apisix/plugins/ai-prompt-guard.lua | 8 +-
apisix/plugins/ai-protocols/anthropic-messages.lua | 88 +-
apisix/plugins/ai-protocols/bedrock-converse.lua | 39 +-
.../anthropic-messages-to-openai-chat.lua | 44 +-
apisix/plugins/ai-protocols/openai-chat.lua | 84 +-
apisix/plugins/ai-protocols/openai-embeddings.lua | 6 +-
apisix/plugins/ai-protocols/openai-responses.lua | 6 +
apisix/plugins/ai-providers/base.lua | 88 +-
apisix/plugins/ai-providers/vertex-ai.lua | 3 +-
apisix/plugins/ai-proxy-multi.lua | 57 +-
apisix/plugins/ai-proxy/base.lua | 24 +-
apisix/plugins/ai-proxy/schema.lua | 26 +-
apisix/plugins/ai-rate-limiting.lua | 32 +-
apisix/plugins/authz-keycloak.lua | 100 +-
apisix/plugins/basic-auth.lua | 34 +-
apisix/plugins/batch-requests.lua | 102 +-
apisix/plugins/chaitin-waf.lua | 115 +-
apisix/plugins/client-control.lua | 1 +
apisix/plugins/csrf.lua | 12 +-
apisix/plugins/data-mask.lua | 27 +-
apisix/plugins/dingtalk-auth.lua | 78 +-
apisix/plugins/example-plugin.lua | 28 +
apisix/plugins/ext-plugin-post-resp.lua | 18 +
apisix/plugins/feishu-auth.lua | 79 +-
apisix/plugins/forward-auth.lua | 177 +-
apisix/plugins/graphql-limit-count.lua | 251 +-
apisix/plugins/graphql-limit-count/cost.lua | 570 +
apisix/plugins/graphql-limit-count/decorations.lua | 97 +
.../plugins/graphql-limit-count/introspection.lua | 414 +
apisix/plugins/jwe-decrypt.lua | 60 +-
apisix/plugins/limit-count/delayed-syncer.lua | 67 +-
apisix/plugins/limit-count/init.lua | 122 +-
apisix/plugins/limit-count/limit-count-local.lua | 36 +-
.../limit-count/limit-count-redis-cluster.lua | 6 +-
.../limit-count/limit-count-redis-sentinel.lua | 6 +-
apisix/plugins/limit-count/limit-count-redis.lua | 10 +-
.../limit-count/sliding-window/sliding-window.lua | 10 +-
apisix/plugins/limit-count/util.lua | 20 +-
apisix/plugins/mcp-bridge.lua | 173 -
apisix/plugins/mcp/broker/shared_dict.lua | 90 -
apisix/plugins/mcp/broker/utils.lua | 21 -
apisix/plugins/mcp/server.lua | 116 -
apisix/plugins/mcp/server_wrapper.lua | 106 -
apisix/plugins/multi-auth.lua | 9 +
apisix/plugins/oas-validator.lua | 12 +-
apisix/plugins/openapi-to-mcp.lua | 394 +
apisix/plugins/openapi-to-mcp/cache.lua | 129 +
apisix/plugins/openapi-to-mcp/fetch.lua | 158 +
apisix/plugins/openapi-to-mcp/json_pretty.lua | 104 +
apisix/plugins/openapi-to-mcp/jsonrpc.lua | 97 +
.../plugins/openapi-to-mcp/openapi/endpoints.lua | 129 +
apisix/plugins/openapi-to-mcp/openapi/loader.lua | 206 +
apisix/plugins/openapi-to-mcp/openapi/ref.lua | 344 +
apisix/plugins/openapi-to-mcp/openapi/schema.lua | 119 +
apisix/plugins/openapi-to-mcp/protocol.lua | 71 +
apisix/plugins/openapi-to-mcp/server.lua | 239 +
apisix/plugins/openapi-to-mcp/session.lua | 211 +
apisix/plugins/openapi-to-mcp/tools/generator.lua | 425 +
apisix/plugins/openapi-to-mcp/tools/handler.lua | 610 +
apisix/plugins/openapi-to-mcp/transport/sse.lua | 313 +
.../openapi-to-mcp/transport/streamable_http.lua | 203 +
apisix/plugins/openid-connect.lua | 143 +-
apisix/plugins/prometheus/exporter.lua | 176 +-
apisix/plugins/prometheus/process_metrics.lua | 457 +
apisix/plugins/proxy-rewrite.lua | 3 +-
apisix/plugins/redirect.lua | 5 +-
apisix/plugins/request-decompress.lua | 262 +
apisix/plugins/request-id.lua | 24 +-
apisix/plugins/saml-auth.lua | 51 +-
apisix/plugins/serverless/generic-upstream.lua | 10 +-
apisix/plugins/syslog/init.lua | 5 +-
apisix/plugins/traffic-label.lua | 25 +-
apisix/plugins/traffic-split.lua | 18 +-
apisix/plugins/ua-restriction.lua | 3 +-
apisix/plugins/websocket-proxy.lua | 73 +
apisix/plugins/wolf-rbac.lua | 70 +-
apisix/plugins/workflow.lua | 11 +-
apisix/resource.lua | 8 +
apisix/router.lua | 10 +
apisix/schema_def.lua | 143 +-
apisix/secret/aws.lua | 3 +-
apisix/secret/vault.lua | 2 +-
apisix/slow_start.lua | 531 +
apisix/ssl.lua | 12 +-
apisix/stream/plugins/prometheus.lua | 1 +
apisix/stream/router/ip_port.lua | 82 +-
apisix/upstream.lua | 271 +-
apisix/utils/content-decode.lua | 32 +-
apisix/utils/gzip.lua | 110 +
apisix/utils/log-util.lua | 4 +-
apisix/utils/redis-schema.lua | 3 +
apisix/utils/redis.lua | 14 +-
ci/backup-docker-images.sh | 2 +-
ci/check_changelog_prs.ts | 9 +
ci/common.sh | 30 +-
ci/free_disk_space.sh | 8 +-
ci/init-common-test-service.sh | 4 -
ci/init-last-test-service.sh | 4 +-
ci/init-plugin-test-service.sh | 24 +-
ci/linux-install-openresty.sh | 6 +-
ci/linux_apisix_current_luarocks_runner.sh | 2 +-
ci/linux_openresty_common_runner.sh | 2 +-
ci/prepare_filesystem_mcp.sh | 47 -
conf/config.yaml.example | 34 +-
docker/debian-dev/Dockerfile | 7 +-
docker/debian-dev/install-brotli.sh | 2 +-
docs/en/latest/FAQ.md | 2 +-
docs/en/latest/admin-api.json | 21748 +++++++++++++++++++
docs/en/latest/admin-api.md | 58 +-
docs/en/latest/architecture-design/apisix.md | 31 +-
docs/en/latest/config.json | 7 +-
docs/en/latest/control-api.json | 1533 ++
docs/en/latest/control-api.md | 76 +-
docs/en/latest/deployment-modes.md | 22 +-
docs/en/latest/discovery/consul.md | 15 +
docs/en/latest/discovery/kubernetes.md | 31 +-
docs/en/latest/discovery/nacos.md | 171 +-
docs/en/latest/install-dependencies.md | 2 +-
docs/en/latest/installation-guide.md | 312 +-
docs/en/latest/internal/testing-framework.md | 23 +
docs/en/latest/plugin-develop.md | 27 +
.../latest/plugins/ai-aliyun-content-moderation.md | 12 +
docs/en/latest/plugins/ai-cache.md | 3 +
docs/en/latest/plugins/ai-prompt-guard.md | 4 +
docs/en/latest/plugins/ai-proxy-multi.md | 19 +-
docs/en/latest/plugins/ai-proxy.md | 8 +-
docs/en/latest/plugins/ai-rag.md | 26 +-
docs/en/latest/plugins/ai-rate-limiting.md | 5 +-
docs/en/latest/plugins/authz-keycloak.md | 2 +
docs/en/latest/plugins/basic-auth.md | 2 +-
docs/en/latest/plugins/batch-requests.md | 18 +-
docs/en/latest/plugins/brotli.md | 6 +-
docs/en/latest/plugins/chaitin-waf.md | 20 +
docs/en/latest/plugins/dingtalk-auth.md | 4 +-
docs/en/latest/plugins/feishu-auth.md | 9 +-
docs/en/latest/plugins/forward-auth.md | 39 +-
docs/en/latest/plugins/graphql-limit-count.md | 147 +-
docs/en/latest/plugins/jwe-decrypt.md | 46 +-
docs/en/latest/plugins/limit-conn.md | 1 +
docs/en/latest/plugins/limit-count.md | 101 +-
docs/en/latest/plugins/limit-req.md | 1 +
docs/en/latest/plugins/mcp-bridge.md | 69 -
docs/en/latest/plugins/oas-validator.md | 5 +-
docs/en/latest/plugins/openapi-to-mcp.md | 216 +
docs/en/latest/plugins/openid-connect.md | 41 +-
docs/en/latest/plugins/prometheus.md | 243 +-
docs/en/latest/plugins/proxy-cache.md | 2 +
docs/en/latest/plugins/proxy-rewrite.md | 111 +-
docs/en/latest/plugins/redirect.md | 2 +
docs/en/latest/plugins/request-decompress.md | 202 +
docs/en/latest/plugins/saml-auth.md | 82 +-
docs/en/latest/plugins/traffic-split.md | 2 +
docs/en/latest/plugins/websocket-proxy.md | 114 +
docs/en/latest/plugins/wolf-rbac.md | 22 +-
docs/en/latest/router-radixtree.md | 33 +-
docs/en/latest/stream-proxy.md | 110 +-
docs/en/latest/terminology/api-gateway.md | 27 +-
docs/en/latest/terminology/consumer.md | 33 +-
docs/en/latest/terminology/credential.md | 8 +-
docs/en/latest/terminology/global-rule.md | 4 +-
docs/en/latest/terminology/plugin-config.md | 8 +-
docs/en/latest/terminology/plugin-metadata.md | 20 +-
docs/en/latest/terminology/plugin.md | 23 +-
docs/en/latest/terminology/secret.md | 2 +-
docs/en/latest/tutorials/cache-api-responses.md | 239 +-
docs/en/latest/tutorials/proxy-localai.md | 298 +
.../latest/tutorials/websocket-authentication.md | 170 +-
docs/openapi/admin-api/README.md | 51 +
.../components/parameters/FilterExpr.yaml | 11 +-
.../admin-api/components/parameters/Force.yaml | 14 +-
.../admin-api/components/parameters/IdInPath.yaml | 12 +-
.../components/parameters/LabelFilter.yaml | 12 +-
.../components/parameters/NameFilter.yaml | 10 +-
.../admin-api/components/parameters/Page.yaml | 13 +-
.../admin-api/components/parameters/PageSize.yaml | 14 +-
.../components/parameters/PluginListAll.yaml | 14 +-
.../components/parameters/PluginNameInPath.yaml | 13 +-
.../components/parameters/ResourceKindInPath.yaml | 24 +-
.../components/parameters/SchemaNameInPath.yaml | 12 +-
.../components/parameters/SecretType.yaml | 16 +-
.../admin-api/components/parameters/Subsystem.yaml | 15 +-
.../admin-api/components/parameters/Ttl.yaml | 13 +-
.../admin-api/components/parameters/UriFilter.yaml | 11 +-
.../components/parameters/UsernameInPath.yaml | 15 +-
.../requestBodies/ConsumerGroupUpsertPatchId.yaml | 24 +-
.../requestBodies/ConsumerGroupUpsertPutId.yaml | 27 +-
.../requestBodies/ConsumerUpsertPutCollection.yaml | 28 +-
.../components/requestBodies/CredentialUpsert.yaml | 23 +-
.../requestBodies/GlobalRuleUpsertPatchId.yaml | 25 +-
.../requestBodies/GlobalRuleUpsertPutId.yaml | 26 +-
.../GraphQLCostDecorationPatchBody.yaml | 21 +-
.../requestBodies/PluginConfigUpsertPatchId.yaml | 24 +-
.../requestBodies/PluginConfigUpsertPutId.yaml | 71 +-
.../requestBodies/PluginMetadataUpsert.yaml | 20 +-
.../requestBodies/ProtoUpsertPostCollection.yaml | 49 +
.../components/requestBodies/ProtoUpsertPutId.yaml | 47 +
.../requestBodies/RouteUpsertPatchId.yaml | 76 +-
.../requestBodies/RouteUpsertPostCollection.yaml | 60 +
.../components/requestBodies/RouteUpsertPutId.yaml | 52 +
.../requestBodies/SecretUpsertPatchCollection.yaml | 24 +-
.../requestBodies/SecretUpsertPutCollection.yaml | 49 +
.../requestBodies/ServiceUpsertPatchId.yaml | 22 +-
.../requestBodies/ServiceUpsertPostCollection.yaml | 74 +-
.../requestBodies/ServiceUpsertPutId.yaml | 44 +
.../components/requestBodies/SslUpsertPatchId.yaml | 22 +-
.../requestBodies/SslUpsertPostCollection.yaml | 52 +
.../components/requestBodies/SslUpsertPutId.yaml | 50 +
.../StreamRouteUpsertPostCollection.yaml | 28 +-
.../requestBodies/StreamRouteUpsertPutId.yaml | 26 +-
.../requestBodies/UpstreamUpsertPatchId.yaml | 21 +-
.../UpstreamUpsertPostCollection.yaml | 35 +-
.../requestBodies/UpstreamUpsertPutId.yaml | 57 +
.../admin-api/components/responses/BadRequest.yaml | 19 +-
.../admin-api/components/responses/NotFound.yaml | 12 +-
.../components/responses/Unauthorized.yaml | 26 +-
.../components/schemas/AuthErrorResponse.yaml | 23 +-
.../admin-api/components/schemas/AwsSecret.yaml | 28 +-
.../components/schemas/CertificateOrReference.yaml | 7 +-
.../components/schemas/CertificatePem.yaml | 11 +-
.../schemas/ConfigValidationConsumer.yaml | 35 +-
.../schemas/ConfigValidationConsumerGroup.yaml | 33 +-
.../schemas/ConfigValidationCredential.yaml | 36 +-
.../schemas/ConfigValidationDocument.yaml | 126 +
.../components/schemas/ConfigValidationError.yaml | 24 +-
.../schemas/ConfigValidationErrorResponse.yaml | 17 +-
.../schemas/ConfigValidationGlobalRule.yaml | 24 +-
.../schemas/ConfigValidationPluginConfig.yaml | 31 +-
.../components/schemas/ConfigValidationProto.yaml | 34 +-
.../components/schemas/ConfigValidationRoute.yaml | 217 +
.../components/schemas/ConfigValidationSSL.yaml | 120 +
.../schemas/ConfigValidationService.yaml | 92 +-
.../schemas/ConfigValidationStreamRoute.yaml | 116 +
.../schemas/ConfigValidationUpstream.yaml | 127 +
.../admin-api/components/schemas/Consumer.yaml | 33 +-
.../components/schemas/ConsumerEnvelope.yaml | 19 +-
.../components/schemas/ConsumerGroup.yaml | 30 +-
.../components/schemas/ConsumerGroupEnvelope.yaml | 19 +-
.../schemas/ConsumerGroupListEnvelope.yaml | 17 +-
.../components/schemas/ConsumerGroupPatch.yaml | 36 +-
.../components/schemas/ConsumerListEnvelope.yaml | 17 +-
.../admin-api/components/schemas/Credential.yaml | 34 +-
.../components/schemas/CredentialEnvelope.yaml | 19 +-
.../components/schemas/CredentialListEnvelope.yaml | 17 +-
.../components/schemas/ErrorResponse.yaml | 17 +-
.../admin-api/components/schemas/GcpSecret.yaml | 56 +
.../admin-api/components/schemas/GlobalRule.yaml | 21 +-
.../components/schemas/GlobalRuleEnvelope.yaml | 19 +-
.../components/schemas/GlobalRuleListEnvelope.yaml | 17 +-
.../components/schemas/GlobalRulePatch.yaml | 21 +-
.../components/schemas/GraphQLCostDecoration.yaml | 71 +
.../schemas/GraphQLCostDecorationCreate.yaml | 63 +
.../schemas/GraphQLCostDecorationEnvelope.yaml | 18 +-
.../schemas/GraphQLCostDecorationListEnvelope.yaml | 16 +-
.../schemas/GraphQLCostDecorationPatch.yaml | 62 +
.../admin-api/components/schemas/HealthCheck.yaml | 18 +-
.../components/schemas/HealthCheckActive.yaml | 72 +
.../schemas/HealthCheckActiveHealthy.yaml | 28 +-
.../schemas/HealthCheckActiveUnhealthy.yaml | 56 +-
.../components/schemas/HealthCheckPassive.yaml | 19 +-
.../schemas/HealthCheckPassiveHealthy.yaml | 41 +-
.../schemas/HealthCheckPassiveUnhealthy.yaml | 47 +-
.../components/schemas/KeepalivePool.yaml | 20 +-
.../admin-api/components/schemas/Labels.yaml | 15 +-
.../components/schemas/NotFoundResponse.yaml | 14 +-
.../admin-api/components/schemas/PluginConfig.yaml | 28 +-
.../components/schemas/PluginConfigEnvelope.yaml | 19 +-
.../schemas/PluginConfigListEnvelope.yaml | 17 +-
.../components/schemas/PluginConfigPatch.yaml | 34 +-
.../admin-api/components/schemas/Plugins.yaml | 9 +-
.../components/schemas/PrivateKeyOrReference.yaml | 7 +-
.../components/schemas/PrivateKeyPem.yaml | 11 +-
.../admin-api/components/schemas/Proto.yaml | 32 +-
.../components/schemas/ProtoEnvelope.yaml | 19 +-
.../components/schemas/ProtoListEnvelope.yaml | 17 +-
.../admin-api/components/schemas/ResourceId.yaml | 13 +-
.../admin-api/components/schemas/Route.yaml | 706 +
.../components/schemas/RouteEnvelope.yaml | 19 +-
.../components/schemas/RouteListEnvelope.yaml | 17 +-
.../admin-api/components/schemas/RoutePatch.yaml | 679 +
.../admin-api/components/schemas/RouteRead.yaml | 268 +
docs/openapi/admin-api/components/schemas/SSL.yaml | 118 +
.../admin-api/components/schemas/SSLEnvelope.yaml | 19 +-
.../components/schemas/SSLListEnvelope.yaml | 17 +-
.../admin-api/components/schemas/SSLPatch.yaml | 124 +
.../admin-api/components/schemas/SSLRead.yaml | 93 +
.../admin-api/components/schemas/SSLWrite.yaml | 119 +
.../components/schemas/SSLWriteEnvelope.yaml | 19 +-
.../admin-api/components/schemas/Secret.yaml | 10 +-
.../schemas/SecretOrEnvironmentReference.yaml | 8 +-
.../admin-api/components/schemas/SecretPatch.yaml | 7 +-
.../admin-api/components/schemas/Service.yaml | 516 +
.../components/schemas/ServiceEnvelope.yaml | 19 +-
.../components/schemas/ServiceListEnvelope.yaml | 17 +-
.../admin-api/components/schemas/ServicePatch.yaml | 514 +
.../admin-api/components/schemas/ServiceRead.yaml | 78 +
.../components/schemas/StoredPrivateKeyValue.yaml | 7 +-
.../admin-api/components/schemas/StreamRoute.yaml | 601 +
.../components/schemas/StreamRouteEnvelope.yaml | 19 +-
.../schemas/StreamRouteListEnvelope.yaml | 17 +-
.../components/schemas/StreamRouteRead.yaml | 163 +
.../admin-api/components/schemas/Timeout.yaml | 21 +-
.../admin-api/components/schemas/Upstream.yaml | 459 +
.../components/schemas/UpstreamEnvelope.yaml | 19 +-
.../components/schemas/UpstreamListEnvelope.yaml | 17 +-
.../components/schemas/UpstreamNodeItem.yaml | 30 +-
.../components/schemas/UpstreamNodes.yaml | 11 +-
.../components/schemas/UpstreamNodesMap.yaml | 12 +-
.../components/schemas/UpstreamPatch.yaml | 435 +
.../admin-api/components/schemas/UpstreamRead.yaml | 426 +
.../admin-api/components/schemas/UpstreamTLS.yaml | 51 +
.../components/schemas/UpstreamTLSRead.yaml | 53 +
.../components/schemas/UpstreamWarmUp.yaml | 47 +
.../components/schemas/UpstreamWarmUpPatch.yaml | 54 +
.../admin-api/components/schemas/VaultSecret.yaml | 25 +-
.../components/securitySchemes/adminKey.yaml | 9 +-
.../components/securitySchemes/apiKeyCookie.yaml | 8 +-
.../components/securitySchemes/apiKeyQuery.yaml | 9 +-
docs/openapi/admin-api/openapi.yaml | 601 +
.../openapi/admin-api/paths/apisix-admin.yaml | 16 +-
docs/openapi/admin-api/paths/configs-validate.yaml | 72 +
docs/openapi/admin-api/paths/configs.yaml | 92 +
.../paths/consumer-groups-by-id-by-sub-path.yaml | 55 +
.../admin-api/paths/consumer-groups-by-id.yaml | 231 +
docs/openapi/admin-api/paths/consumer-groups.yaml | 135 +
.../consumers-by-username-credentials-by-id.yaml | 153 +
.../paths/consumers-by-username-credentials.yaml | 126 +
.../admin-api/paths/consumers-by-username.yaml | 196 +
docs/openapi/admin-api/paths/consumers.yaml | 163 +
.../paths/global-rules-by-id-by-sub-path.yaml | 55 +
.../admin-api/paths/global-rules-by-id.yaml | 223 +
docs/openapi/admin-api/paths/global-rules.yaml | 130 +
.../paths/plugin-configs-by-id-by-sub-path.yaml | 55 +
.../admin-api/paths/plugin-configs-by-id.yaml | 227 +
docs/openapi/admin-api/paths/plugin-configs.yaml | 135 +
.../paths/plugin-metadata-by-plugin-name.yaml | 155 +
docs/openapi/admin-api/paths/plugin-metadata.yaml | 74 +
.../admin-api/paths/plugins-by-plugin-name.yaml | 64 +
docs/openapi/admin-api/paths/plugins-list.yaml | 51 +
docs/openapi/admin-api/paths/plugins-reload.yaml | 45 +
docs/openapi/admin-api/paths/plugins.yaml | 63 +
docs/openapi/admin-api/paths/protos-by-id.yaml | 187 +
docs/openapi/admin-api/paths/protos.yaml | 211 +
.../admin-api/paths/routes-by-id-by-sub-path.yaml | 51 +
docs/openapi/admin-api/paths/routes-by-id.yaml | 431 +
docs/openapi/admin-api/paths/routes.yaml | 279 +
.../admin-api/paths/schema-by-resource.yaml | 25 +-
.../paths/schema-plugins-by-plugin-name.yaml | 55 +
.../paths/schema-validate-by-resource.yaml | 48 +
.../secrets-by-secret-type-by-id-by-sub-path.yaml | 63 +
.../paths/secrets-by-secret-type-by-id.yaml | 334 +
.../admin-api/paths/secrets-by-secret-type.yaml | 44 +
docs/openapi/admin-api/paths/secrets.yaml | 94 +
.../service-graphql-cost-decoration-by-id.yaml | 168 +
.../paths/service-graphql-cost-decorations.yaml | 101 +
.../paths/services-by-id-by-sub-path.yaml | 51 +
docs/openapi/admin-api/paths/services-by-id.yaml | 251 +
docs/openapi/admin-api/paths/services.yaml | 208 +
.../admin-api/paths/ssls-by-id-by-sub-path.yaml | 51 +
docs/openapi/admin-api/paths/ssls-by-id.yaml | 219 +
docs/openapi/admin-api/paths/ssls.yaml | 212 +
.../admin-api/paths/stream-routes-by-id.yaml | 162 +
docs/openapi/admin-api/paths/stream-routes.yaml | 175 +
.../paths/upstreams-by-id-by-sub-path.yaml | 51 +
docs/openapi/admin-api/paths/upstreams-by-id.yaml | 315 +
docs/openapi/admin-api/paths/upstreams.yaml | 305 +
docs/zh/latest/CHANGELOG.md | 179 +
docs/zh/latest/FAQ.md | 2 +-
docs/zh/latest/admin-api.md | 43 +-
docs/zh/latest/config.json | 6 +-
docs/zh/latest/control-api.md | 68 +-
docs/zh/latest/discovery/kubernetes.md | 31 +-
docs/zh/latest/install-dependencies.md | 2 +-
docs/zh/latest/installation-guide.md | 19 +-
.../latest/plugins/ai-aliyun-content-moderation.md | 12 +
docs/zh/latest/plugins/ai-cache.md | 3 +
docs/zh/latest/plugins/ai-prompt-guard.md | 4 +
docs/zh/latest/plugins/ai-proxy-multi.md | 13 +-
docs/zh/latest/plugins/ai-proxy.md | 6 +-
docs/zh/latest/plugins/ai-rate-limiting.md | 4 +-
docs/zh/latest/plugins/authz-keycloak.md | 2 +
docs/zh/latest/plugins/basic-auth.md | 2 +-
docs/zh/latest/plugins/batch-requests.md | 18 +-
docs/zh/latest/plugins/brotli.md | 6 +-
docs/zh/latest/plugins/chaitin-waf.md | 20 +
docs/zh/latest/plugins/feishu-auth.md | 9 +-
docs/zh/latest/plugins/forward-auth.md | 39 +-
docs/zh/latest/plugins/graphql-limit-count.md | 1 +
docs/zh/latest/plugins/jwe-decrypt.md | 8 +-
docs/zh/latest/plugins/limit-conn.md | 1 +
docs/zh/latest/plugins/limit-count.md | 95 +-
docs/zh/latest/plugins/limit-req.md | 1 +
docs/zh/latest/plugins/oas-validator.md | 5 +-
docs/zh/latest/plugins/openapi-to-mcp.md | 216 +
docs/zh/latest/plugins/openid-connect.md | 35 +
docs/zh/latest/plugins/prometheus.md | 256 +-
docs/zh/latest/plugins/proxy-cache.md | 2 +
docs/zh/latest/plugins/proxy-rewrite.md | 111 +-
docs/zh/latest/plugins/redirect.md | 2 +
docs/zh/latest/plugins/saml-auth.md | 82 +-
docs/zh/latest/plugins/traffic-split.md | 4 +-
docs/zh/latest/plugins/websocket-proxy.md | 89 +
docs/zh/latest/plugins/wolf-rbac.md | 22 +-
docs/zh/latest/router-radixtree.md | 10 +
docs/zh/latest/stream-proxy.md | 105 +
docs/zh/latest/terminology/consumer.md | 31 +-
docs/zh/latest/terminology/credential.md | 8 +-
docs/zh/latest/terminology/global-rule.md | 6 +-
docs/zh/latest/terminology/plugin-config.md | 8 +-
docs/zh/latest/terminology/plugin-metadata.md | 20 +-
docs/zh/latest/terminology/plugin.md | 23 +-
t/APISIX.pm | 40 +-
t/admin/config-validate.t | 199 +
t/admin/graphql-cost-decorations.t | 620 +
t/admin/metadata.t | 4 +-
t/admin/plugins.t | 8 +-
.../standalone-stream.t} | 53 +-
t/admin/standalone-wait.t | 221 +
t/admin/standalone.t | 128 +-
t/admin/upstream-slow-start.t | 622 +
t/certs/chain_root.crt | 19 +
t/certs/chain_server.crt | 59 +
t/certs/chain_server.key | 28 +
t/certs/crl_ca.crl | 11 +
t/certs/crl_ca.crt | 19 +
t/certs/crl_revoked.crt | 20 +
t/certs/crl_revoked.key | 28 +
t/certs/crl_server.crt | 20 +
t/certs/crl_server.key | 28 +
t/cli/ci-bailout.t | 46 +
t/cli/ci-kafka-topics.t | 74 +
t/cli/common.sh | 21 +
t/cli/test_access_log.sh | 31 +
t/cli/test_cmd.sh | 1 +
t/cli/test_deployment_null_sections.sh | 82 +
t/cli/test_etcd_sync_event_handle.sh | 6 +
t/cli/test_main.sh | 6 +
t/cli/test_mcp_bridge.sh | 64 -
t/cli/{test_dubbo.sh => test_openapi_to_mcp.sh} | 24 +-
t/cli/test_prometheus_reload.sh | 106 +
t/cli/test_prometheus_stream.sh | 43 +-
t/cli/test_standalone_plugin_reload.sh | 241 +
t/cli/test_stream_tls_passthrough.sh | 449 +
t/cli/test_upstream_mtls.sh | 80 +
t/control/healthcheck-ai-proxy-multi.t | 660 +
t/control/healthcheck.t | 59 +-
t/core/config_etcd.t | 31 +-
t/core/etcd-watch-start-revision.t | 147 +
t/core/etcd-write.t | 99 +
t/core/lrucache.t | 249 +
t/core/plugin-checker.t | 186 +
t/core/request.t | 99 +
t/{node/http_host.t => core/resource.t} | 61 +-
t/core/{cjson-bundled.t => runtime-version.t} | 32 +-
t/core/utils.t | 219 +
t/discovery/consul-tls.t | 346 +
t/discovery/consul-watch-race.t | 168 +
t/discovery/kubernetes_cluster_ids.t | 190 +
t/discovery/kubernetes_list_pagination.t | 114 +
t/discovery/nacos2.t | 248 +
.../result-anthropic-deny.sse} | 8 +-
t/fixtures/aliyun/result-anthropic-error.sse | 18 +
t/fixtures/aliyun/result-anthropic-null-delta.sse | 18 +
.../result-anthropic-safe.sse} | 10 +-
.../aliyun/result-anthropic-stop-sequence.sse | 18 +
.../result-anthropic-usage.sse} | 10 +-
t/fixtures/aliyun/result-chat-clean-eof.sse | 8 +
t/fixtures/aliyun/result-chat-deny.sse | 8 +
t/fixtures/aliyun/result-chat-error.sse | 8 +
t/fixtures/aliyun/result-chat-failure.sse | 8 +
t/fixtures/aliyun/result-chat-length.sse | 10 +
t/fixtures/aliyun/result-chat-multiple-choices.sse | 10 +
t/fixtures/aliyun/result-chat-multiple-reasons.sse | 10 +
t/fixtures/aliyun/result-chat-safe.sse | 8 +
t/fixtures/aliyun/result-chat-tool_calls.sse | 10 +
t/fixtures/aliyun/result-chat-usage.sse | 10 +
t/fixtures/aliyun/result-responses-deny.sse | 24 +
t/fixtures/aliyun/result-responses-eof.sse | 21 +
t/fixtures/aliyun/result-responses-error.sse | 24 +
t/fixtures/aliyun/result-responses-failed.sse | 24 +
t/fixtures/aliyun/result-responses-incomplete.sse | 24 +
t/fixtures/aliyun/result-responses-safe.sse | 24 +
t/fixtures/aliyun/result-responses-usage.sse | 24 +
... => messages-streaming-with-cache-in-delta.sse} | 4 +-
t/fixtures/bedrock/converse-cache-usage-cases.json | 196 +
.../bedrock/converse-streaming-with-cache.bin | Bin 0 -> 600 bytes
t/fixtures/bedrock/converse-with-cache.json | 1 +
...se => chat-streaming-cache-creation-tokens.sse} | 2 +-
...e.sse => chat-streaming-cache-write-tokens.sse} | 2 +-
...se => chat-streaming-cache-write-top-level.sse} | 2 +-
...cache.sse => chat-streaming-deepseek-cache.sse} | 2 +-
....sse => chat-streaming-incomplete-no-usage.sse} | 3 +-
...e.sse => chat-streaming-injection-no-usage.sse} | 4 +-
t/fixtures/openai/chat-usage-audio.json | 19 +
t/fixtures/openai/chat-usage-deep.json | 22 +
t/fixtures/openai/moderation-eof-no-usage.sse | 6 +
t/fixtures/openai/moderation-incomplete-event.sse | 7 +
t/fixtures/openai/moderation-no-usage.sse | 8 +
t/fixtures/openai/moderation-with-usage.sse | 10 +
...-with-cache.json => responses-usage-clash.json} | 3 +-
t/jest.config.ts | 30 -
t/kubernetes/discovery/kubernetes2.t | 2 +-
t/kubernetes/discovery/kubernetes3.t | 8 +-
t/kubernetes/discovery/kubernetes4.t | 4 +-
t/kubernetes/discovery/kubernetes5.t | 585 +
t/kubernetes/discovery/kubernetes6.t | 372 +
t/kubernetes/discovery/kubernetes7.t | 135 +
t/kubernetes/discovery/stream/kubernetes.t | 2 +-
t/lib/ai_moderation_result.lua | 255 +
t/lib/k8s_discovery_e2e.lua | 235 +
t/lib/keycloak_saml.lua | 40 +
t/lib/oauth_login.lua | 85 +
t/lib/oidc_introspection.lua | 131 +
t/lib/openapi_to_mcp_fixture.lua | 459 +
.../lib/openapi_to_mcp_ref_fragment.lua | 36 +-
t/lib/openapi_to_mcp_swagger2_spec.json | 1 +
t/lib/openapi_to_mcp_swagger2_spec.lua | 71 +
t/lib/rate_limiting_info.lua | 122 +
t/lib/server.lua | 537 +-
t/lib/test_redis.lua | 18 +-
t/lib/truncated_sse.lua | 142 +
t/node/client-mtls-encoded-slash.t | 174 +
t/node/client-mtls-openresty.t | 8 +-
t/node/client-mtls.t | 8 +-
.../{grpc-proxy-stream.t => grpc-client-control.t} | 102 +-
t/node/upstream-mtls.t | 4 +-
t/node/upstream-mtls2.t | 355 +
t/node/upstream-slow-start.t | 833 +
t/node/upstream-tls-trusted-ca.t | 372 +
t/node/upstream-tls2.t | 433 +
t/node/websocket-proxy.spec.ts | 863 +
t/{admin/metadata.t => node/websocket-proxy.t} | 13 +-
t/openapi/test_control_validator.py | 189 +
t/openapi/test_validator.py | 97 +
t/package.json | 10 +-
t/plugin/ai-aliyun-content-moderation-result.t | 322 +
.../ai-aliyun-content-moderation-stream-usage.t | 189 +
t/plugin/ai-cache.t | 214 +
t/plugin/ai-lakera-guard.t | 108 +-
t/plugin/ai-prompt-guard-embeddings.t | 258 +
t/plugin/ai-proxy-anthropic.t | 324 +-
t/plugin/ai-proxy-bedrock-single.t | 68 +
t/plugin/ai-proxy-empty-stream.t | 109 +
t/plugin/ai-proxy-flush-fragmented.t | 332 +
t/plugin/ai-proxy-multi-retry.t | 193 +
t/plugin/ai-proxy-multi.t | 117 +
t/plugin/ai-proxy-stream-truncated.t | 442 +
t/plugin/ai-proxy-vertex-ai.t | 11 +-
t/plugin/ai-rate-limiting-expression.t | 578 +
t/plugin/ai-rate-limiting.t | 160 +
t/plugin/authz-keycloak3.t | 93 +
t/plugin/authz-keycloak5.t | 2 +-
t/plugin/aws-lambda.t | 100 +
t/plugin/basic-auth.t | 330 +-
t/plugin/batch-requests.t | 266 +
t/plugin/chaitin-waf-degradation.t | 340 +
t/plugin/chaitin-waf-log-resp.t | 413 +
t/plugin/chaitin-waf-timeout.t | 95 +
t/plugin/chaitin-waf.t | 208 +
t/plugin/csrf.t | 88 +
t/plugin/data-mask.t | 332 +
t/plugin/dingtalk-auth.t | 152 +-
t/plugin/elasticsearch-logger2.t | 6 +
t/plugin/ext-plugin/response.t | 129 +
t/plugin/feishu-auth.t | 168 +-
t/plugin/forward-auth.t | 8 +-
t/plugin/forward-auth2.t | 4 +-
t/plugin/forward-auth3.t | 63 +
t/plugin/forward-auth4.t | 468 +
t/plugin/graphql-limit-count2.t | 2615 +++
t/plugin/jwe-decrypt.t | 397 +-
t/plugin/kafka-logger.t | 49 +-
t/plugin/{lago.spec.mts => lago.spec.ts} | 1 -
t/plugin/lago.t | 4 +-
t/plugin/limit-count-rate-limiting-info.t | 287 +
t/plugin/limit-count-redis-delayed-sync2.t | 134 +
t/plugin/limit-count-redis-delayed-sync3.t | 350 +
t/plugin/limit-count-redis-sentinel.t | 7 +-
t/plugin/limit-count-rules.t | 325 +
t/plugin/limit-count-sliding.t | 42 +-
t/plugin/limit-count-variable.t | 66 +-
t/plugin/limit-count5.t | 14 +-
t/plugin/loggly.t | 19 +
t/plugin/mcp-bridge.spec.mts | 85 -
t/plugin/mcp-bridge.t | 59 -
t/plugin/mcp/assets/bridge-list-tools.json | 266 -
t/plugin/multi-auth.t | 227 +
t/plugin/oas-validator3.t | 748 +
t/plugin/ocsp-stapling.t | 4 +-
t/plugin/openapi-to-mcp-cache.t | 403 +
t/plugin/openapi-to-mcp-concurrent.t | 124 +
t/plugin/openapi-to-mcp-e2e-sse-multiworker.t | 90 +
t/plugin/openapi-to-mcp-e2e-sse.t | 362 +
t/plugin/openapi-to-mcp-e2e-streamable.t | 513 +
t/plugin/openapi-to-mcp-interop.spec.ts | 137 +
t/plugin/openapi-to-mcp-interop.t | 100 +
t/plugin/openapi-to-mcp-json-pretty.t | 135 +
t/plugin/openapi-to-mcp-openapi-endpoints.t | 202 +
t/plugin/openapi-to-mcp-openapi-loader.t | 346 +
t/plugin/openapi-to-mcp-openapi-ref.t | 640 +
t/plugin/openapi-to-mcp-openapi-schema.t | 234 +
t/plugin/openapi-to-mcp-plugin-stack.t | 210 +
t/plugin/openapi-to-mcp-protocol.t | 174 +
t/plugin/openapi-to-mcp-session-lifecycle.t | 260 +
t/plugin/openapi-to-mcp-swagger2.t | 180 +
t/plugin/openapi-to-mcp-tools-generator.t | 575 +
t/plugin/openapi-to-mcp.t | 2167 ++
t/plugin/openapi_to_mcp_concurrent.py | 156 +
t/plugin/openapi_to_mcp_cross_route.py | 50 +
t/plugin/openapi_to_mcp_harness.py | 197 +
t/plugin/openapi_to_mcp_session_reconnect.py | 82 +
t/plugin/openapi_to_mcp_sse_frozen_vars.py | 58 +
t/plugin/openapi_to_mcp_sse_multiworker.py | 76 +
t/plugin/openapi_to_mcp_sse_roundtrip.py | 64 +
t/plugin/openid-connect-claim-validation.t | 159 +
t/plugin/openid-connect-introspection.t | 298 +
t/plugin/openid-connect-upstream-headers.t | 539 +
t/plugin/openid-connect6.t | 2 +-
t/plugin/prometheus-cleanup-interval.t | 113 +
t/plugin/prometheus-process-metrics.t | 210 +
t/plugin/prometheus-websocket.t | 277 +
t/plugin/proxy-rewrite3.t | 61 +
t/plugin/redirect.t | 71 +
t/plugin/request-decompress.t | 1678 ++
t/plugin/request-id.t | 291 +
t/plugin/saml-auth-options.t | 615 +
t/plugin/saml-auth.t | 386 +
t/plugin/security-warning2.t | 6 +-
t/plugin/skywalking2.t | 11 +-
t/plugin/syslog.t | 77 +
t/plugin/traffic-label2.t | 63 +
t/plugin/traffic-split5.t | 363 +
t/plugin/ua-restriction.t | 24 +
t/plugin/wolf-rbac.t | 195 +-
t/plugin/workflow.t | 2 +-
t/plugin/workflow2.t | 310 +
t/pnpm-lock.yaml | 3124 +--
t/router/radixtree-uri-normalized-upstream.t | 396 +
t/router/servlet-upstream-uri.t | 184 +
t/secret/aws.t | 39 +
t/secret/vault.t | 43 +-
t/stream-node/stream-route-snis.t | 565 +
t/stream-node/tls-passthrough.t | 302 +
t/stream-plugin/prometheus-metrics-service.t | 667 +
t/stream-plugin/prometheus-metrics.t | 318 +-
t/stream-plugin/prometheus.t | 4 +-
t/tars/discovery/tars.t | 20 +
t/tsconfig.json | 6 +-
t/utils/gzip.t | 157 +
t/utils/redis-schema.t | 41 +
.../limit-count-redis2.t => utils/redis-sni.t} | 271 +-
.../test-body/cmd/main.go => t/vitest.config.ts | 22 +-
t/xds-library/config_xds_2.t | 1 +
.../bundle-admin-api-spec.sh | 40 +-
utils/install-dependencies.sh | 26 +-
utils/linux-install-luarocks.sh | 6 +
.requirements => utils/requirements-admin-api.txt | 14 +-
utils/validate-admin-api.py | 391 +
utils/validate-control-api.py | 315 +
717 files changed, 97647 insertions(+), 7423 deletions(-)
create mode 100644 .github/workflows/admin-api-contract.yml
create mode 100644 apisix/admin/graphql_cost_decorations.lua
create mode 100644 apisix/core/websocket.lua
create mode 100644 apisix/plugins/graphql-limit-count/cost.lua
create mode 100644 apisix/plugins/graphql-limit-count/decorations.lua
create mode 100644 apisix/plugins/graphql-limit-count/introspection.lua
delete mode 100644 apisix/plugins/mcp-bridge.lua
delete mode 100644 apisix/plugins/mcp/broker/shared_dict.lua
delete mode 100644 apisix/plugins/mcp/broker/utils.lua
delete mode 100644 apisix/plugins/mcp/server.lua
delete mode 100644 apisix/plugins/mcp/server_wrapper.lua
create mode 100644 apisix/plugins/openapi-to-mcp.lua
create mode 100644 apisix/plugins/openapi-to-mcp/cache.lua
create mode 100644 apisix/plugins/openapi-to-mcp/fetch.lua
create mode 100644 apisix/plugins/openapi-to-mcp/json_pretty.lua
create mode 100644 apisix/plugins/openapi-to-mcp/jsonrpc.lua
create mode 100644 apisix/plugins/openapi-to-mcp/openapi/endpoints.lua
create mode 100644 apisix/plugins/openapi-to-mcp/openapi/loader.lua
create mode 100644 apisix/plugins/openapi-to-mcp/openapi/ref.lua
create mode 100644 apisix/plugins/openapi-to-mcp/openapi/schema.lua
create mode 100644 apisix/plugins/openapi-to-mcp/protocol.lua
create mode 100644 apisix/plugins/openapi-to-mcp/server.lua
create mode 100644 apisix/plugins/openapi-to-mcp/session.lua
create mode 100644 apisix/plugins/openapi-to-mcp/tools/generator.lua
create mode 100644 apisix/plugins/openapi-to-mcp/tools/handler.lua
create mode 100644 apisix/plugins/openapi-to-mcp/transport/sse.lua
create mode 100644 apisix/plugins/openapi-to-mcp/transport/streamable_http.lua
create mode 100644 apisix/plugins/prometheus/process_metrics.lua
create mode 100644 apisix/plugins/request-decompress.lua
create mode 100644 apisix/plugins/websocket-proxy.lua
create mode 100644 apisix/slow_start.lua
create mode 100644 apisix/utils/gzip.lua
delete mode 100755 ci/prepare_filesystem_mcp.sh
create mode 100644 docs/en/latest/admin-api.json
create mode 100644 docs/en/latest/control-api.json
delete mode 100644 docs/en/latest/plugins/mcp-bridge.md
create mode 100644 docs/en/latest/plugins/openapi-to-mcp.md
create mode 100644 docs/en/latest/plugins/request-decompress.md
create mode 100644 docs/en/latest/plugins/websocket-proxy.md
create mode 100644 docs/en/latest/tutorials/proxy-localai.md
create mode 100644 docs/openapi/admin-api/README.md
copy .requirements =>
docs/openapi/admin-api/components/parameters/FilterExpr.yaml (81%)
copy .requirements => docs/openapi/admin-api/components/parameters/Force.yaml
(82%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/IdInPath.yaml (86%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/LabelFilter.yaml (85%)
copy ci/pod/opa/echo.rego =>
docs/openapi/admin-api/components/parameters/NameFilter.yaml (87%)
copy .requirements => docs/openapi/admin-api/components/parameters/Page.yaml
(78%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/PageSize.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/PluginListAll.yaml (82%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/PluginNameInPath.yaml (86%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/ResourceKindInPath.yaml (72%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/SchemaNameInPath.yaml (78%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/SecretType.yaml (83%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/Subsystem.yaml (84%)
copy .requirements => docs/openapi/admin-api/components/parameters/Ttl.yaml
(74%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/UriFilter.yaml (85%)
copy .requirements =>
docs/openapi/admin-api/components/parameters/UsernameInPath.yaml (82%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/ConsumerGroupUpsertPatchId.yaml
(57%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/ConsumerGroupUpsertPutId.yaml
(53%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/ConsumerUpsertPutCollection.yaml
(52%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/CredentialUpsert.yaml (57%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/GlobalRuleUpsertPatchId.yaml
(57%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/GlobalRuleUpsertPutId.yaml (54%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/GraphQLCostDecorationPatchBody.yaml
(58%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/PluginConfigUpsertPatchId.yaml
(57%)
copy .editorconfig =>
docs/openapi/admin-api/components/requestBodies/PluginConfigUpsertPutId.yaml
(51%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/PluginMetadataUpsert.yaml (56%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/ProtoUpsertPostCollection.yaml
create mode 100644
docs/openapi/admin-api/components/requestBodies/ProtoUpsertPutId.yaml
copy .editorconfig =>
docs/openapi/admin-api/components/requestBodies/RouteUpsertPatchId.yaml (50%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/RouteUpsertPostCollection.yaml
create mode 100644
docs/openapi/admin-api/components/requestBodies/RouteUpsertPutId.yaml
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/SecretUpsertPatchCollection.yaml
(61%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/SecretUpsertPutCollection.yaml
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/ServiceUpsertPatchId.yaml (60%)
copy .editorconfig =>
docs/openapi/admin-api/components/requestBodies/ServiceUpsertPostCollection.yaml
(50%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/ServiceUpsertPutId.yaml
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/SslUpsertPatchId.yaml (62%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/SslUpsertPostCollection.yaml
create mode 100644
docs/openapi/admin-api/components/requestBodies/SslUpsertPutId.yaml
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/StreamRouteUpsertPostCollection.yaml
(52%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/StreamRouteUpsertPutId.yaml
(54%)
copy .requirements =>
docs/openapi/admin-api/components/requestBodies/UpstreamUpsertPatchId.yaml (62%)
copy conf/apisix.yaml =>
docs/openapi/admin-api/components/requestBodies/UpstreamUpsertPostCollection.yaml
(52%)
create mode 100644
docs/openapi/admin-api/components/requestBodies/UpstreamUpsertPutId.yaml
copy .requirements =>
docs/openapi/admin-api/components/responses/BadRequest.yaml (61%)
copy .requirements =>
docs/openapi/admin-api/components/responses/NotFound.yaml (79%)
copy .requirements =>
docs/openapi/admin-api/components/responses/Unauthorized.yaml (53%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/AuthErrorResponse.yaml (62%)
copy .requirements => docs/openapi/admin-api/components/schemas/AwsSecret.yaml
(55%)
copy ci/pod/opa/echo.rego =>
docs/openapi/admin-api/components/schemas/CertificateOrReference.yaml (90%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/CertificatePem.yaml (83%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationConsumer.yaml (60%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationConsumerGroup.yaml
(63%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationCredential.yaml (57%)
create mode 100644
docs/openapi/admin-api/components/schemas/ConfigValidationDocument.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationError.yaml (59%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationErrorResponse.yaml
(78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationGlobalRule.yaml (71%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationPluginConfig.yaml
(65%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConfigValidationProto.yaml (61%)
create mode 100644
docs/openapi/admin-api/components/schemas/ConfigValidationRoute.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/ConfigValidationSSL.yaml
copy t/kubernetes/configs/endpointslices.yaml =>
docs/openapi/admin-api/components/schemas/ConfigValidationService.yaml (50%)
create mode 100644
docs/openapi/admin-api/components/schemas/ConfigValidationStreamRoute.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/ConfigValidationUpstream.yaml
copy .requirements => docs/openapi/admin-api/components/schemas/Consumer.yaml
(61%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerGroup.yaml (65%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerGroupEnvelope.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerGroupListEnvelope.yaml (78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerGroupPatch.yaml (53%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ConsumerListEnvelope.yaml (79%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/Credential.yaml (58%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/CredentialEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/CredentialListEnvelope.yaml (78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ErrorResponse.yaml (67%)
create mode 100644 docs/openapi/admin-api/components/schemas/GcpSecret.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/GlobalRule.yaml (74%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/GlobalRuleEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/GlobalRuleListEnvelope.yaml (78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/GlobalRulePatch.yaml (64%)
create mode 100644
docs/openapi/admin-api/components/schemas/GraphQLCostDecoration.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/GraphQLCostDecorationCreate.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/GraphQLCostDecorationEnvelope.yaml
(80%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/GraphQLCostDecorationListEnvelope.yaml
(82%)
create mode 100644
docs/openapi/admin-api/components/schemas/GraphQLCostDecorationPatch.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/HealthCheck.yaml (77%)
create mode 100644
docs/openapi/admin-api/components/schemas/HealthCheckActive.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/HealthCheckActiveHealthy.yaml (67%)
copy ci/pod/otelcol-contrib/config.yaml =>
docs/openapi/admin-api/components/schemas/HealthCheckActiveUnhealthy.yaml (57%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/HealthCheckPassive.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/HealthCheckPassiveHealthy.yaml (60%)
copy ci/pod/otelcol-contrib/config.yaml =>
docs/openapi/admin-api/components/schemas/HealthCheckPassiveUnhealthy.yaml (62%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/KeepalivePool.yaml (76%)
copy .requirements => docs/openapi/admin-api/components/schemas/Labels.yaml
(77%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/NotFoundResponse.yaml (77%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/PluginConfig.yaml (67%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/PluginConfigEnvelope.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/PluginConfigListEnvelope.yaml (78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/PluginConfigPatch.yaml (55%)
copy .requirements => docs/openapi/admin-api/components/schemas/Plugins.yaml
(76%)
copy ci/pod/opa/echo.rego =>
docs/openapi/admin-api/components/schemas/PrivateKeyOrReference.yaml (90%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/PrivateKeyPem.yaml (85%)
copy .requirements => docs/openapi/admin-api/components/schemas/Proto.yaml
(63%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ProtoEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ProtoListEnvelope.yaml (79%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ResourceId.yaml (83%)
create mode 100644 docs/openapi/admin-api/components/schemas/Route.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/RouteEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/RouteListEnvelope.yaml (79%)
create mode 100644 docs/openapi/admin-api/components/schemas/RoutePatch.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/RouteRead.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/SSL.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/SSLEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/SSLListEnvelope.yaml (79%)
create mode 100644 docs/openapi/admin-api/components/schemas/SSLPatch.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/SSLRead.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/SSLWrite.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/SSLWriteEnvelope.yaml (72%)
copy .requirements => docs/openapi/admin-api/components/schemas/Secret.yaml
(78%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/SecretOrEnvironmentReference.yaml
(82%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/SecretPatch.yaml (84%)
create mode 100644 docs/openapi/admin-api/components/schemas/Service.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/ServiceEnvelope.yaml (76%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/ServiceListEnvelope.yaml (79%)
create mode 100644 docs/openapi/admin-api/components/schemas/ServicePatch.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/ServiceRead.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/StoredPrivateKeyValue.yaml (79%)
create mode 100644 docs/openapi/admin-api/components/schemas/StreamRoute.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/StreamRouteEnvelope.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/StreamRouteListEnvelope.yaml (78%)
create mode 100644
docs/openapi/admin-api/components/schemas/StreamRouteRead.yaml
copy .requirements => docs/openapi/admin-api/components/schemas/Timeout.yaml
(76%)
create mode 100644 docs/openapi/admin-api/components/schemas/Upstream.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/UpstreamEnvelope.yaml (75%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/UpstreamListEnvelope.yaml (79%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/UpstreamNodeItem.yaml (62%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/UpstreamNodes.yaml (85%)
copy .requirements =>
docs/openapi/admin-api/components/schemas/UpstreamNodesMap.yaml (85%)
create mode 100644 docs/openapi/admin-api/components/schemas/UpstreamPatch.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/UpstreamRead.yaml
create mode 100644 docs/openapi/admin-api/components/schemas/UpstreamTLS.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/UpstreamTLSRead.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/UpstreamWarmUp.yaml
create mode 100644
docs/openapi/admin-api/components/schemas/UpstreamWarmUpPatch.yaml
copy .requirements =>
docs/openapi/admin-api/components/schemas/VaultSecret.yaml (60%)
copy .requirements =>
docs/openapi/admin-api/components/securitySchemes/adminKey.yaml (78%)
copy ci/pod/opa/echo.rego =>
docs/openapi/admin-api/components/securitySchemes/apiKeyCookie.yaml (90%)
copy .requirements =>
docs/openapi/admin-api/components/securitySchemes/apiKeyQuery.yaml (81%)
create mode 100644 docs/openapi/admin-api/openapi.yaml
copy .requirements => docs/openapi/admin-api/paths/apisix-admin.yaml (70%)
create mode 100644 docs/openapi/admin-api/paths/configs-validate.yaml
create mode 100644 docs/openapi/admin-api/paths/configs.yaml
create mode 100644
docs/openapi/admin-api/paths/consumer-groups-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/consumer-groups-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/consumer-groups.yaml
create mode 100644
docs/openapi/admin-api/paths/consumers-by-username-credentials-by-id.yaml
create mode 100644
docs/openapi/admin-api/paths/consumers-by-username-credentials.yaml
create mode 100644 docs/openapi/admin-api/paths/consumers-by-username.yaml
create mode 100644 docs/openapi/admin-api/paths/consumers.yaml
create mode 100644
docs/openapi/admin-api/paths/global-rules-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/global-rules-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/global-rules.yaml
create mode 100644
docs/openapi/admin-api/paths/plugin-configs-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/plugin-configs-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/plugin-configs.yaml
create mode 100644
docs/openapi/admin-api/paths/plugin-metadata-by-plugin-name.yaml
create mode 100644 docs/openapi/admin-api/paths/plugin-metadata.yaml
create mode 100644 docs/openapi/admin-api/paths/plugins-by-plugin-name.yaml
create mode 100644 docs/openapi/admin-api/paths/plugins-list.yaml
create mode 100644 docs/openapi/admin-api/paths/plugins-reload.yaml
create mode 100644 docs/openapi/admin-api/paths/plugins.yaml
create mode 100644 docs/openapi/admin-api/paths/protos-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/protos.yaml
create mode 100644 docs/openapi/admin-api/paths/routes-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/routes-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/routes.yaml
copy .requirements => docs/openapi/admin-api/paths/schema-by-resource.yaml
(56%)
create mode 100644
docs/openapi/admin-api/paths/schema-plugins-by-plugin-name.yaml
create mode 100644
docs/openapi/admin-api/paths/schema-validate-by-resource.yaml
create mode 100644
docs/openapi/admin-api/paths/secrets-by-secret-type-by-id-by-sub-path.yaml
create mode 100644
docs/openapi/admin-api/paths/secrets-by-secret-type-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/secrets-by-secret-type.yaml
create mode 100644 docs/openapi/admin-api/paths/secrets.yaml
create mode 100644
docs/openapi/admin-api/paths/service-graphql-cost-decoration-by-id.yaml
create mode 100644
docs/openapi/admin-api/paths/service-graphql-cost-decorations.yaml
create mode 100644 docs/openapi/admin-api/paths/services-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/services-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/services.yaml
create mode 100644 docs/openapi/admin-api/paths/ssls-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/ssls-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/ssls.yaml
create mode 100644 docs/openapi/admin-api/paths/stream-routes-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/stream-routes.yaml
create mode 100644
docs/openapi/admin-api/paths/upstreams-by-id-by-sub-path.yaml
create mode 100644 docs/openapi/admin-api/paths/upstreams-by-id.yaml
create mode 100644 docs/openapi/admin-api/paths/upstreams.yaml
create mode 100644 docs/zh/latest/plugins/openapi-to-mcp.md
create mode 100644 docs/zh/latest/plugins/websocket-proxy.md
create mode 100644 t/admin/graphql-cost-decorations.t
copy t/{node/upstream-domain-with-special-ipv6-dns.t =>
admin/standalone-stream.t} (62%)
create mode 100644 t/admin/standalone-wait.t
create mode 100644 t/admin/upstream-slow-start.t
create mode 100644 t/certs/chain_root.crt
create mode 100644 t/certs/chain_server.crt
create mode 100644 t/certs/chain_server.key
create mode 100644 t/certs/crl_ca.crl
create mode 100644 t/certs/crl_ca.crt
create mode 100644 t/certs/crl_revoked.crt
create mode 100644 t/certs/crl_revoked.key
create mode 100644 t/certs/crl_server.crt
create mode 100644 t/certs/crl_server.key
create mode 100644 t/cli/ci-bailout.t
create mode 100644 t/cli/ci-kafka-topics.t
create mode 100755 t/cli/test_deployment_null_sections.sh
delete mode 100755 t/cli/test_mcp_bridge.sh
copy t/cli/{test_dubbo.sh => test_openapi_to_mcp.sh} (63%)
create mode 100755 t/cli/test_standalone_plugin_reload.sh
create mode 100755 t/cli/test_stream_tls_passthrough.sh
create mode 100644 t/control/healthcheck-ai-proxy-multi.t
create mode 100644 t/core/etcd-watch-start-revision.t
create mode 100644 t/core/plugin-checker.t
copy t/{node/http_host.t => core/resource.t} (54%)
copy t/core/{cjson-bundled.t => runtime-version.t} (64%)
create mode 100644 t/discovery/consul-tls.t
create mode 100644 t/discovery/consul-watch-race.t
create mode 100644 t/discovery/kubernetes_cluster_ids.t
create mode 100644 t/discovery/kubernetes_list_pagination.t
copy t/fixtures/{protocol-conversion/anthropic-mismatch.sse =>
aliyun/result-anthropic-deny.sse} (51%)
create mode 100644 t/fixtures/aliyun/result-anthropic-error.sse
create mode 100644 t/fixtures/aliyun/result-anthropic-null-delta.sse
copy t/fixtures/{anthropic/messages-streaming.sse =>
aliyun/result-anthropic-safe.sse} (54%)
create mode 100644 t/fixtures/aliyun/result-anthropic-stop-sequence.sse
copy t/fixtures/{anthropic/messages-streaming.sse =>
aliyun/result-anthropic-usage.sse} (54%)
create mode 100644 t/fixtures/aliyun/result-chat-clean-eof.sse
create mode 100644 t/fixtures/aliyun/result-chat-deny.sse
create mode 100644 t/fixtures/aliyun/result-chat-error.sse
create mode 100644 t/fixtures/aliyun/result-chat-failure.sse
create mode 100644 t/fixtures/aliyun/result-chat-length.sse
create mode 100644 t/fixtures/aliyun/result-chat-multiple-choices.sse
create mode 100644 t/fixtures/aliyun/result-chat-multiple-reasons.sse
create mode 100644 t/fixtures/aliyun/result-chat-safe.sse
create mode 100644 t/fixtures/aliyun/result-chat-tool_calls.sse
create mode 100644 t/fixtures/aliyun/result-chat-usage.sse
create mode 100644 t/fixtures/aliyun/result-responses-deny.sse
create mode 100644 t/fixtures/aliyun/result-responses-eof.sse
create mode 100644 t/fixtures/aliyun/result-responses-error.sse
create mode 100644 t/fixtures/aliyun/result-responses-failed.sse
create mode 100644 t/fixtures/aliyun/result-responses-incomplete.sse
create mode 100644 t/fixtures/aliyun/result-responses-safe.sse
create mode 100644 t/fixtures/aliyun/result-responses-usage.sse
copy t/fixtures/anthropic/{messages-streaming-with-cache.sse =>
messages-streaming-with-cache-in-delta.sse} (68%)
create mode 100644 t/fixtures/bedrock/converse-cache-usage-cases.json
create mode 100644 t/fixtures/bedrock/converse-streaming-with-cache.bin
create mode 100644 t/fixtures/bedrock/converse-with-cache.json
copy t/fixtures/openai/{chat-streaming-with-cache.sse =>
chat-streaming-cache-creation-tokens.sse} (74%)
copy t/fixtures/openai/{chat-streaming-with-cache.sse =>
chat-streaming-cache-write-tokens.sse} (74%)
copy t/fixtures/openai/{chat-streaming-with-cache.sse =>
chat-streaming-cache-write-top-level.sse} (61%)
copy t/fixtures/openai/{chat-streaming-with-cache.sse =>
chat-streaming-deepseek-cache.sse} (74%)
copy t/fixtures/openai/{chat-streaming-no-usage.sse =>
chat-streaming-incomplete-no-usage.sse} (97%)
copy t/fixtures/openai/{chat-streaming-no-usage.sse =>
chat-streaming-injection-no-usage.sse} (83%)
create mode 100644 t/fixtures/openai/chat-usage-audio.json
create mode 100644 t/fixtures/openai/chat-usage-deep.json
create mode 100644 t/fixtures/openai/moderation-eof-no-usage.sse
create mode 100644 t/fixtures/openai/moderation-incomplete-event.sse
create mode 100644 t/fixtures/openai/moderation-no-usage.sse
create mode 100644 t/fixtures/openai/moderation-with-usage.sse
copy t/fixtures/openai/{responses-with-cache.json =>
responses-usage-clash.json} (90%)
delete mode 100644 t/jest.config.ts
create mode 100644 t/kubernetes/discovery/kubernetes5.t
create mode 100644 t/kubernetes/discovery/kubernetes6.t
create mode 100644 t/kubernetes/discovery/kubernetes7.t
create mode 100644 t/lib/ai_moderation_result.lua
create mode 100644 t/lib/k8s_discovery_e2e.lua
create mode 100644 t/lib/oauth_login.lua
create mode 100644 t/lib/oidc_introspection.lua
create mode 100644 t/lib/openapi_to_mcp_fixture.lua
rename apisix/plugins/mcp/transport/sse.lua =>
t/lib/openapi_to_mcp_ref_fragment.lua (52%)
create mode 100644 t/lib/openapi_to_mcp_swagger2_spec.json
create mode 100644 t/lib/openapi_to_mcp_swagger2_spec.lua
create mode 100644 t/lib/rate_limiting_info.lua
create mode 100644 t/lib/truncated_sse.lua
create mode 100644 t/node/client-mtls-encoded-slash.t
copy t/node/{grpc-proxy-stream.t => grpc-client-control.t} (52%)
create mode 100644 t/node/upstream-mtls2.t
create mode 100644 t/node/upstream-slow-start.t
create mode 100644 t/node/upstream-tls-trusted-ca.t
create mode 100644 t/node/upstream-tls2.t
create mode 100644 t/node/websocket-proxy.spec.ts
copy t/{admin/metadata.t => node/websocket-proxy.t} (81%)
create mode 100644 t/openapi/test_control_validator.py
create mode 100644 t/openapi/test_validator.py
create mode 100644 t/plugin/ai-aliyun-content-moderation-result.t
create mode 100644 t/plugin/ai-aliyun-content-moderation-stream-usage.t
create mode 100644 t/plugin/ai-prompt-guard-embeddings.t
create mode 100644 t/plugin/ai-proxy-empty-stream.t
create mode 100644 t/plugin/ai-proxy-flush-fragmented.t
create mode 100644 t/plugin/ai-proxy-stream-truncated.t
create mode 100644 t/plugin/chaitin-waf-degradation.t
create mode 100644 t/plugin/chaitin-waf-log-resp.t
create mode 100644 t/plugin/forward-auth4.t
create mode 100644 t/plugin/graphql-limit-count2.t
rename t/plugin/{lago.spec.mts => lago.spec.ts} (99%)
create mode 100644 t/plugin/limit-count-rate-limiting-info.t
create mode 100644 t/plugin/limit-count-redis-delayed-sync3.t
delete mode 100644 t/plugin/mcp-bridge.spec.mts
delete mode 100644 t/plugin/mcp-bridge.t
delete mode 100644 t/plugin/mcp/assets/bridge-list-tools.json
create mode 100644 t/plugin/openapi-to-mcp-cache.t
create mode 100644 t/plugin/openapi-to-mcp-concurrent.t
create mode 100644 t/plugin/openapi-to-mcp-e2e-sse-multiworker.t
create mode 100644 t/plugin/openapi-to-mcp-e2e-sse.t
create mode 100644 t/plugin/openapi-to-mcp-e2e-streamable.t
create mode 100644 t/plugin/openapi-to-mcp-interop.spec.ts
create mode 100644 t/plugin/openapi-to-mcp-interop.t
create mode 100644 t/plugin/openapi-to-mcp-json-pretty.t
create mode 100644 t/plugin/openapi-to-mcp-openapi-endpoints.t
create mode 100644 t/plugin/openapi-to-mcp-openapi-loader.t
create mode 100644 t/plugin/openapi-to-mcp-openapi-ref.t
create mode 100644 t/plugin/openapi-to-mcp-openapi-schema.t
create mode 100644 t/plugin/openapi-to-mcp-plugin-stack.t
create mode 100644 t/plugin/openapi-to-mcp-protocol.t
create mode 100644 t/plugin/openapi-to-mcp-session-lifecycle.t
create mode 100644 t/plugin/openapi-to-mcp-swagger2.t
create mode 100644 t/plugin/openapi-to-mcp-tools-generator.t
create mode 100644 t/plugin/openapi-to-mcp.t
create mode 100644 t/plugin/openapi_to_mcp_concurrent.py
create mode 100644 t/plugin/openapi_to_mcp_cross_route.py
create mode 100644 t/plugin/openapi_to_mcp_harness.py
create mode 100644 t/plugin/openapi_to_mcp_session_reconnect.py
create mode 100644 t/plugin/openapi_to_mcp_sse_frozen_vars.py
create mode 100644 t/plugin/openapi_to_mcp_sse_multiworker.py
create mode 100644 t/plugin/openapi_to_mcp_sse_roundtrip.py
create mode 100644 t/plugin/openid-connect-introspection.t
create mode 100644 t/plugin/openid-connect-upstream-headers.t
create mode 100644 t/plugin/prometheus-cleanup-interval.t
create mode 100644 t/plugin/prometheus-process-metrics.t
create mode 100644 t/plugin/prometheus-websocket.t
create mode 100644 t/plugin/request-decompress.t
create mode 100644 t/plugin/saml-auth-options.t
create mode 100644 t/router/radixtree-uri-normalized-upstream.t
create mode 100644 t/router/servlet-upstream-uri.t
create mode 100644 t/stream-node/stream-route-snis.t
create mode 100644 t/stream-node/tls-passthrough.t
create mode 100644 t/stream-plugin/prometheus-metrics-service.t
create mode 100644 t/utils/gzip.t
copy t/{plugin/limit-count-redis2.t => utils/redis-sni.t} (56%)
copy ci/pod/openfunction/function-example/test-body/cmd/main.go =>
t/vitest.config.ts (79%)
copy .github/workflows/license-checker.yml => utils/bundle-admin-api-spec.sh
(50%)
mode change 100644 => 100755
copy .requirements => utils/requirements-admin-api.txt (70%)
create mode 100644 utils/validate-admin-api.py
create mode 100644 utils/validate-control-api.py