@cartanova/qgrid-cli 2.10.10 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
- package/bundle/dist/application/monit/log-buffer.js +12 -6
- package/bundle/dist/application/monit/monit.frame.js +11 -3
- package/bundle/dist/application/monit/monit.types.js +1 -1
- package/bundle/dist/application/qgrid/conv-routing.js +9 -6
- package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
- package/bundle/dist/application/qgrid/oauth.js +31 -4
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
- package/bundle/dist/application/qgrid/qgrid-response-format.js +21 -19
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +40 -33
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
- package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
- package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
- package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
- package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
- package/bundle/dist/application/qgrid/token-death.js +1 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
- package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
- package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
- package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
- package/bundle/dist/application/request-log/request-log.model.js +83 -70
- package/bundle/dist/application/request-log/request-log.types.js +1 -1
- package/bundle/dist/application/request-log/zod-code-format.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
- package/bundle/dist/application/setting/setting.constant.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +2 -2
- package/bundle/dist/application/setting/setting.store.js +2 -2
- package/bundle/dist/application/setting/setting.types.js +1 -1
- package/bundle/dist/application/sonamu.generated.js +32 -16
- package/bundle/dist/application/sonamu.generated.sso.js +1 -1
- package/bundle/dist/application/token/token.model.js +26 -9
- package/bundle/dist/application/token/token.types.js +20 -3
- package/bundle/dist/i18n/en.js +15 -1
- package/bundle/dist/i18n/ko.js +15 -1
- package/bundle/dist/i18n/sd.generated.js +1 -1
- package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
- package/bundle/dist/server-bootstrap.js +4 -2
- package/bundle/dist/server-error-handler.js +1 -1
- package/bundle/dist/sonamu.config.js +37 -8
- package/bundle/dist/startup-migrations.js +17 -7
- package/bundle/dist/testing/global.js +1 -1
- package/bundle/dist/testing/schema-bench.js +0 -0
- package/bundle/dist/testing/test-database-name.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
- package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
- package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
- package/bundle/dist/utils/providers/common/credentials.js +5 -1
- package/bundle/dist/utils/providers/common/effort.js +3 -3
- package/bundle/dist/utils/providers/common/model-cost.js +69 -14
- package/bundle/dist/utils/providers/common/provider-types.js +29 -1
- package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
- package/bundle/dist/utils/providers/common/strictifier.js +62 -43
- package/bundle/dist/utils/providers/common/thinking.js +3 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -1
- package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
- package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
- package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
- package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
- package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
- package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
- package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
- package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
- package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
- package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
- package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
- package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
- package/bundle/dist/utils/providers/grok/index.js +11 -0
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
- package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
- package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
- package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
- package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
- package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
- package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
- package/bundle/dist/utils/quiet-hours.js +1 -1
- package/bundle/dist/utils/slack-notify.js +14 -8
- package/bundle/dist/utils/subset-loaders.js +4 -5
- package/bundle/src/application/monit/log-buffer.ts +23 -9
- package/bundle/src/application/monit/monit.frame.ts +22 -5
- package/bundle/src/application/monit/monit.types.ts +6 -0
- package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
- package/bundle/src/application/qgrid/conv-routing.ts +35 -9
- package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
- package/bundle/src/application/qgrid/oauth.ts +51 -15
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +19 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +84 -40
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
- package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
- package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
- package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
- package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
- package/bundle/src/application/qgrid/token-death.ts +4 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
- package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
- package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
- package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
- package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
- package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
- package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
- package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
- package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
- package/bundle/src/application/request-log/request-log.model.ts +277 -146
- package/bundle/src/application/request-log/request-log.types.ts +6 -0
- package/bundle/src/application/request-log/zod-code-format.ts +11 -0
- package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
- package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
- package/bundle/src/application/setting/setting.constant.ts +9 -0
- package/bundle/src/application/setting/setting.model.ts +12 -2
- package/bundle/src/application/setting/setting.store.ts +5 -1
- package/bundle/src/application/setting/setting.types.ts +8 -0
- package/bundle/src/application/sonamu.generated.http +133 -0
- package/bundle/src/application/sonamu.generated.sso.ts +2 -0
- package/bundle/src/application/sonamu.generated.ts +15 -0
- package/bundle/src/application/token/token.identity.test.ts +20 -0
- package/bundle/src/application/token/token.model.ts +66 -7
- package/bundle/src/application/token/token.types.ts +24 -1
- package/bundle/src/i18n/en.ts +19 -0
- package/bundle/src/i18n/ko.ts +21 -0
- package/bundle/src/i18n/sd.generated.ts +23 -2
- package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
- package/bundle/src/server-bootstrap.ts +4 -2
- package/bundle/src/server-error-handler.ts +1 -0
- package/bundle/src/sonamu.config.ts +69 -7
- package/bundle/src/startup-migrations.ts +27 -9
- package/bundle/src/testing/global.ts +20 -0
- package/bundle/src/testing/schema-bench.ts +105 -30
- package/bundle/src/testing/test-database-name.ts +2 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
- package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
- package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
- package/bundle/src/utils/providers/common/credentials.ts +8 -0
- package/bundle/src/utils/providers/common/effort.ts +9 -2
- package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
- package/bundle/src/utils/providers/common/model-cost.ts +259 -158
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
- package/bundle/src/utils/providers/common/provider-types.ts +46 -3
- package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
- package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
- package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
- package/bundle/src/utils/providers/common/strictifier.ts +185 -59
- package/bundle/src/utils/providers/common/thinking.ts +2 -2
- package/bundle/src/utils/providers/common/ttft.ts +4 -2
- package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
- package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
- package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
- package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
- package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
- package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
- package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
- package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
- package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
- package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
- package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
- package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
- package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
- package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
- package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
- package/bundle/src/utils/providers/grok/index.ts +20 -0
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
- package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
- package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
- package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
- package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
- package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
- package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
- package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
- package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
- package/bundle/src/utils/quiet-hours.ts +12 -1
- package/bundle/src/utils/slack-notify.ts +44 -13
- package/bundle/src/utils/subset-loaders.ts +7 -7
- package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
- package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
- package/bundle/web-dist/client/assets/index-C96h3feE.js +32 -0
- package/bundle/web-dist/client/assets/logs-DBM6U0QD.js +1 -0
- package/bundle/web-dist/client/assets/monit-BBjXa7vB.js +1 -0
- package/bundle/web-dist/client/assets/routes-Crz_PQzi.js +5 -0
- package/bundle/web-dist/client/assets/{services.generated-NP-ValHd.js → services.generated-B5lc3aIC.js} +5 -5
- package/bundle/web-dist/client/assets/settings-Cdwm3OBB.js +1 -0
- package/bundle/web-dist/client/assets/show-DBUhALT1.js +2 -0
- package/bundle/web-dist/client/assets/tokens-CVQAVJTo.js +1 -0
- package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
- package/bundle/web-dist/client/assets/use-oauth-login-flow-BfxYI4Oh.js +1 -0
- package/bundle/web-dist/client/assets/use-update-token-mutation-qKBC2sn7.js +1 -0
- package/bundle/web-dist/client/assets/{vendor-tanstack-DJRQAbrY.js → vendor-tanstack-DRPs09ai.js} +1 -1
- package/bundle/web-dist/client/index.html +5 -5
- package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
- package/bundle/web-dist/server/assets/{lazyRouteComponent-CgBdabgd.js → lazyRouteComponent-AKiHfZWp.js} +129 -2
- package/bundle/web-dist/server/assets/{logs-BMyR98rU.js → logs-B7QmGJq3.js} +18 -14
- package/bundle/web-dist/server/assets/{monit-ZPt66W5M.js → monit-DFt7x3bh.js} +13 -12
- package/bundle/web-dist/server/assets/{plus-BZ9I0VgC.js → plus-DaYQRpBt.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-Ds75e4Jl.js → react-dom-Cv23mm1K.js} +2 -129
- package/bundle/web-dist/server/assets/{refresh-cw-CztCFis-.js → refresh-cw-BpXNsAy-.js} +1 -1
- package/bundle/web-dist/server/assets/{request-model-DjGldb-h.js → request-model-eHE6YbaF.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-Ct-k7nBA.js → routes-_Y-PJfgO.js} +110 -39
- package/bundle/web-dist/server/assets/{services.generated-BA4AcAf5.js → services.generated-CMJ8AHbO.js} +582 -172
- package/bundle/web-dist/server/assets/{settings-CBUZ47Xx.js → settings-JwJKxn2e.js} +14 -14
- package/bundle/web-dist/server/assets/{show-LSFIzvO2.js → show-BEv6z1v_.js} +90 -60
- package/bundle/web-dist/server/assets/{tokens-DxrBW512.js → tokens-CNT4mI-f.js} +162 -50
- package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
- package/bundle/web-dist/server/assets/use-oauth-login-flow-jkAkT3X6.js +2345 -0
- package/bundle/web-dist/server/assets/{use-update-token-mutation-pkArIzCP.js → use-update-token-mutation-Sm6kh02m.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +1644 -21655
- package/dist/cli.js +9 -9
- package/package.json +4 -11
- package/postinstall.mjs +12 -0
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
- package/skills/qgrid/references/decision-rationale.md +23 -0
- package/skills/qgrid/references/grok-runtime.md +89 -0
- package/skills/qgrid/references/provider-runtime-differences.md +30 -29
- package/skills/qgrid/references/repo-map.md +10 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
- package/bundle/dist/testing/setup-mocks.js +0 -16
- package/bundle/src/testing/setup-mocks.ts +0 -44
- package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
- package/bundle/web-dist/client/assets/index-DZwzUfI-.js +0 -106
- package/bundle/web-dist/client/assets/logs-Cog79DU5.js +0 -1
- package/bundle/web-dist/client/assets/monit-2auznBys.js +0 -1
- package/bundle/web-dist/client/assets/routes-B0lTeLK-.js +0 -5
- package/bundle/web-dist/client/assets/settings-D8ZxZGSJ.js +0 -1
- package/bundle/web-dist/client/assets/show-CFSERlnM.js +0 -2
- package/bundle/web-dist/client/assets/tokens-CZXUyI7O.js +0 -1
- package/bundle/web-dist/client/assets/use-oauth-login-flow-hboOs3wG.js +0 -1
- package/bundle/web-dist/client/assets/use-update-token-mutation-BQHS0byG.js +0 -1
- package/bundle/web-dist/server/assets/use-oauth-login-flow-Gn8flMK5.js +0 -178
- package/dist/cli.d.ts +0 -10
- /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
- /package/bundle/web-dist/client/assets/{plus-B62CuqT8.js → plus-BsQdY7PS.js} +0 -0
- /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/bundle/web-dist/client/assets/{refresh-cw-NNcU0Cmq.js → refresh-cw-D9IUmT23.js} +0 -0
- /package/bundle/web-dist/client/assets/{request-model-CojtinqK.js → request-model-Bpp_rkK8.js} +0 -0
- /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { GROK_REASONING_EFFORTS, GROK_SEED_MODELS } from "./grok-constants.js";
|
|
2
|
+
import { grokProxyGet } from "./grok-direct-client.js";
|
|
3
|
+
import { buildGrokProxyGetHeaders } from "./grok-headers.js";
|
|
4
|
+
import { GrokModelsResponse } from "./grok-types.js";
|
|
5
|
+
//#region src/utils/providers/grok/grok-models.ts
|
|
6
|
+
function isGrokEffort(value) {
|
|
7
|
+
return GROK_REASONING_EFFORTS.some((effort) => effort === value);
|
|
8
|
+
}
|
|
9
|
+
/** Strips the qgrid route prefix; an empty id means the default model. */
|
|
10
|
+
function canonicalGrokModelId(modelId) {
|
|
11
|
+
return ((modelId ?? "").startsWith("grok/") ? (modelId ?? "").slice(5) : modelId ?? "") || "grok-4.7";
|
|
12
|
+
}
|
|
13
|
+
function fromProxyModel(model) {
|
|
14
|
+
if (model.api_backend !== "responses") return void 0;
|
|
15
|
+
const listed = (model.reasoning_efforts ?? []).map((entry) => entry.value).filter(isGrokEffort);
|
|
16
|
+
const efforts = listed.length ? listed : GROK_REASONING_EFFORTS;
|
|
17
|
+
const defaultEffort = [
|
|
18
|
+
model.reasoning_efforts?.find((entry) => entry.default)?.value,
|
|
19
|
+
model.reasoning_effort ?? void 0,
|
|
20
|
+
"high"
|
|
21
|
+
].find((value) => value !== void 0 && isGrokEffort(value) && efforts.includes(value)) ?? efforts[0];
|
|
22
|
+
return {
|
|
23
|
+
id: model.id,
|
|
24
|
+
contextWindow: model.context_window,
|
|
25
|
+
efforts,
|
|
26
|
+
defaultEffort,
|
|
27
|
+
known: true
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Model catalog seeded from the U0 capture and merged with live `GET {proxy}/models`. Like the
|
|
32
|
+
* OpenAI runtime, it never rejects an id: an unlisted id is forwarded and the upstream decides.
|
|
33
|
+
*/
|
|
34
|
+
var GrokModelCatalog = class {
|
|
35
|
+
models = /* @__PURE__ */ new Map();
|
|
36
|
+
etag;
|
|
37
|
+
refreshedAt;
|
|
38
|
+
pendingRefresh;
|
|
39
|
+
constructor() {
|
|
40
|
+
for (const seed of GROK_SEED_MODELS) this.models.set(seed.id, {
|
|
41
|
+
id: seed.id,
|
|
42
|
+
contextWindow: seed.contextWindow,
|
|
43
|
+
efforts: seed.reasoningEfforts,
|
|
44
|
+
defaultEffort: seed.defaultEffort,
|
|
45
|
+
known: true
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** True when a response advertised a catalog etag different from the one last merged. */
|
|
49
|
+
isStale(observedEtag) {
|
|
50
|
+
return observedEtag !== void 0 && observedEtag !== this.etag;
|
|
51
|
+
}
|
|
52
|
+
/** Single-flight refresh. Live entries replace seeds; seeds absent from the live list stay. */
|
|
53
|
+
async refresh(credentials, options = {}) {
|
|
54
|
+
this.pendingRefresh ??= this.refreshNow(credentials, options).finally(() => {
|
|
55
|
+
this.pendingRefresh = void 0;
|
|
56
|
+
});
|
|
57
|
+
return this.pendingRefresh;
|
|
58
|
+
}
|
|
59
|
+
async refreshNow(credentials, options) {
|
|
60
|
+
try {
|
|
61
|
+
const getOptions = { headers: buildGrokProxyGetHeaders({
|
|
62
|
+
bearer: credentials.accessToken,
|
|
63
|
+
userId: credentials.userId
|
|
64
|
+
}) };
|
|
65
|
+
if (options.fetch) getOptions.fetch = options.fetch;
|
|
66
|
+
if (options.signal) getOptions.signal = options.signal;
|
|
67
|
+
if (options.baseUrl) getOptions.baseUrl = options.baseUrl;
|
|
68
|
+
const { json, headers } = await grokProxyGet("/models", getOptions);
|
|
69
|
+
const parsed = GrokModelsResponse.safeParse(json);
|
|
70
|
+
if (!parsed.success) return {
|
|
71
|
+
kind: "lookup_failed",
|
|
72
|
+
reason: `unexpected /models shape: ${parsed.error.message}`
|
|
73
|
+
};
|
|
74
|
+
const merged = [];
|
|
75
|
+
for (const entry of parsed.data.data) {
|
|
76
|
+
const model = fromProxyModel(entry);
|
|
77
|
+
if (!model) continue;
|
|
78
|
+
this.models.set(model.id, model);
|
|
79
|
+
merged.push(model.id);
|
|
80
|
+
}
|
|
81
|
+
this.etag = headers.modelsEtag;
|
|
82
|
+
this.refreshedAt = options.now ?? Date.now();
|
|
83
|
+
return {
|
|
84
|
+
kind: "ok",
|
|
85
|
+
models: merged,
|
|
86
|
+
etag: this.etag
|
|
87
|
+
};
|
|
88
|
+
} catch (error) {
|
|
89
|
+
return {
|
|
90
|
+
kind: "lookup_failed",
|
|
91
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
resolve(modelId) {
|
|
96
|
+
const id = canonicalGrokModelId(modelId);
|
|
97
|
+
return this.models.get(id) ?? {
|
|
98
|
+
id,
|
|
99
|
+
contextWindow: void 0,
|
|
100
|
+
efforts: GROK_REASONING_EFFORTS,
|
|
101
|
+
defaultEffort: "high",
|
|
102
|
+
known: false
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** The effort if the model accepts it, otherwise undefined. Unlisted ids accept every effort. */
|
|
106
|
+
validateEffort(modelId, effort) {
|
|
107
|
+
const model = this.resolve(modelId);
|
|
108
|
+
return isGrokEffort(effort) && model.efforts.includes(effort) ? effort : void 0;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
//#endregion
|
|
112
|
+
export { GrokModelCatalog, canonicalGrokModelId };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jvay1tb2RlbHMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9ncm9rL2dyb2stbW9kZWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEdST0tfREVGQVVMVF9NT0RFTCxcbiAgR1JPS19SRUFTT05JTkdfRUZGT1JUUyxcbiAgR1JPS19TRUVEX01PREVMUyxcbiAgdHlwZSBHcm9rUmVhc29uaW5nRWZmb3J0LFxufSBmcm9tIFwiLi9ncm9rLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ3Jva1Byb3h5R2V0IH0gZnJvbSBcIi4vZ3Jvay1kaXJlY3QtY2xpZW50XCI7XG5pbXBvcnQgeyBidWlsZEdyb2tQcm94eUdldEhlYWRlcnMgfSBmcm9tIFwiLi9ncm9rLWhlYWRlcnNcIjtcbmltcG9ydCB7IEdyb2tNb2RlbHNSZXNwb25zZSwgdHlwZSBHcm9rQ3JlZGVudGlhbHMsIHR5cGUgR3Jva1Byb3h5TW9kZWwgfSBmcm9tIFwiLi9ncm9rLXR5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Jva1Jlc29sdmVkTW9kZWwge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5kZWZpbmVkIGZvciBhbiB1bmxpc3RlZCBpZDsgdGhlIHJlc3BvbnNlIGB4LWdyb2stY29udGV4dC13aW5kb3dgIGhlYWRlciBtYXkgZmlsbCBpdC4gKi9cbiAgY29udGV4dFdpbmRvdzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBlZmZvcnRzOiByZWFkb25seSBHcm9rUmVhc29uaW5nRWZmb3J0W107XG4gIGRlZmF1bHRFZmZvcnQ6IEdyb2tSZWFzb25pbmdFZmZvcnQ7XG4gIC8qKiBGYWxzZSB3aGVuIHRoZSBpZCBpcyBpbiBuZWl0aGVyIHRoZSBzZWVkIG5vciB0aGUgbGl2ZSBjYXRhbG9nIGFuZCBpcyBmb3J3YXJkZWQgYXMtaXMuICovXG4gIGtub3duOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc0dyb2tFZmZvcnQodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIEdyb2tSZWFzb25pbmdFZmZvcnQge1xuICByZXR1cm4gR1JPS19SRUFTT05JTkdfRUZGT1JUUy5zb21lKChlZmZvcnQpID0+IGVmZm9ydCA9PT0gdmFsdWUpO1xufVxuXG4vKiogU3RyaXBzIHRoZSBxZ3JpZCByb3V0ZSBwcmVmaXg7IGFuIGVtcHR5IGlkIG1lYW5zIHRoZSBkZWZhdWx0IG1vZGVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbm9uaWNhbEdyb2tNb2RlbElkKG1vZGVsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0cmlwcGVkID0gKG1vZGVsSWQgPz8gXCJcIikuc3RhcnRzV2l0aChcImdyb2svXCIpID8gKG1vZGVsSWQgPz8gXCJcIikuc2xpY2UoNSkgOiAobW9kZWxJZCA/PyBcIlwiKTtcblxuICByZXR1cm4gc3RyaXBwZWQgfHwgR1JPS19ERUZBVUxUX01PREVMO1xufVxuXG5mdW5jdGlvbiBmcm9tUHJveHlNb2RlbChtb2RlbDogR3Jva1Byb3h5TW9kZWwpOiBHcm9rUmVzb2x2ZWRNb2RlbCB8IHVuZGVmaW5lZCB7XG4gIGlmIChtb2RlbC5hcGlfYmFja2VuZCAhPT0gXCJyZXNwb25zZXNcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbGlzdGVkID0gKG1vZGVsLnJlYXNvbmluZ19lZmZvcnRzID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSkuZmlsdGVyKGlzR3Jva0VmZm9ydCk7XG4gIGNvbnN0IGVmZm9ydHM6IHJlYWRvbmx5IEdyb2tSZWFzb25pbmdFZmZvcnRbXSA9IGxpc3RlZC5sZW5ndGggPyBsaXN0ZWQgOiBHUk9LX1JFQVNPTklOR19FRkZPUlRTO1xuICBjb25zdCBmbGFnZ2VkID0gbW9kZWwucmVhc29uaW5nX2VmZm9ydHM/LmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5kZWZhdWx0KT8udmFsdWU7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbZmxhZ2dlZCwgbW9kZWwucmVhc29uaW5nX2VmZm9ydCA/PyB1bmRlZmluZWQsIFwiaGlnaFwiXTtcblxuICBjb25zdCBkZWZhdWx0RWZmb3J0ID1cbiAgICBjYW5kaWRhdGVzLmZpbmQoXG4gICAgICAodmFsdWUpOiB2YWx1ZSBpcyBHcm9rUmVhc29uaW5nRWZmb3J0ID0+XG4gICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNHcm9rRWZmb3J0KHZhbHVlKSAmJiBlZmZvcnRzLmluY2x1ZGVzKHZhbHVlKSxcbiAgICApID8/IGVmZm9ydHNbMF0hO1xuXG4gIHJldHVybiB7IGlkOiBtb2RlbC5pZCwgY29udGV4dFdpbmRvdzogbW9kZWwuY29udGV4dF93aW5kb3csIGVmZm9ydHMsIGRlZmF1bHRFZmZvcnQsIGtub3duOiB0cnVlIH07XG59XG5cbmV4cG9ydCB0eXBlIEdyb2tNb2RlbFJlZnJlc2hSZXN1bHQgPVxuICB8IHsga2luZDogXCJva1wiOyBtb2RlbHM6IHN0cmluZ1tdOyBldGFnOiBzdHJpbmcgfCB1bmRlZmluZWQgfVxuICB8IHsga2luZDogXCJsb29rdXBfZmFpbGVkXCI7IHJlYXNvbjogc3RyaW5nIH07XG5cbi8qKlxuICogTW9kZWwgY2F0YWxvZyBzZWVkZWQgZnJvbSB0aGUgVTAgY2FwdHVyZSBhbmQgbWVyZ2VkIHdpdGggbGl2ZSBgR0VUIHtwcm94eX0vbW9kZWxzYC4gTGlrZSB0aGVcbiAqIE9wZW5BSSBydW50aW1lLCBpdCBuZXZlciByZWplY3RzIGFuIGlkOiBhbiB1bmxpc3RlZCBpZCBpcyBmb3J3YXJkZWQgYW5kIHRoZSB1cHN0cmVhbSBkZWNpZGVzLlxuICovXG5leHBvcnQgY2xhc3MgR3Jva01vZGVsQ2F0YWxvZyB7XG4gIHJlYWRvbmx5IG1vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBHcm9rUmVzb2x2ZWRNb2RlbD4oKTtcbiAgZXRhZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWZyZXNoZWRBdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwZW5kaW5nUmVmcmVzaDogUHJvbWlzZTxHcm9rTW9kZWxSZWZyZXNoUmVzdWx0PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBmb3IgKGNvbnN0IHNlZWQgb2YgR1JPS19TRUVEX01PREVMUykge1xuICAgICAgdGhpcy5tb2RlbHMuc2V0KHNlZWQuaWQsIHtcbiAgICAgICAgaWQ6IHNlZWQuaWQsXG4gICAgICAgIGNvbnRleHRXaW5kb3c6IHNlZWQuY29udGV4dFdpbmRvdyxcbiAgICAgICAgZWZmb3J0czogc2VlZC5yZWFzb25pbmdFZmZvcnRzLFxuICAgICAgICBkZWZhdWx0RWZmb3J0OiBzZWVkLmRlZmF1bHRFZmZvcnQsXG4gICAgICAgIGtub3duOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBhIHJlc3BvbnNlIGFkdmVydGlzZWQgYSBjYXRhbG9nIGV0YWcgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBsYXN0IG1lcmdlZC4gKi9cbiAgaXNTdGFsZShvYnNlcnZlZEV0YWc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvYnNlcnZlZEV0YWcgIT09IHVuZGVmaW5lZCAmJiBvYnNlcnZlZEV0YWcgIT09IHRoaXMuZXRhZztcbiAgfVxuXG4gIC8qKiBTaW5nbGUtZmxpZ2h0IHJlZnJlc2guIExpdmUgZW50cmllcyByZXBsYWNlIHNlZWRzOyBzZWVkcyBhYnNlbnQgZnJvbSB0aGUgbGl2ZSBsaXN0IHN0YXkuICovXG4gIGFzeW5jIHJlZnJlc2goXG4gICAgY3JlZGVudGlhbHM6IFBpY2s8R3Jva0NyZWRlbnRpYWxzLCBcImFjY2Vzc1Rva2VuXCIgfCBcInVzZXJJZFwiPixcbiAgICBvcHRpb25zOiB7IGZldGNoPzogdHlwZW9mIGZldGNoOyBzaWduYWw/OiBBYm9ydFNpZ25hbDsgYmFzZVVybD86IHN0cmluZzsgbm93PzogbnVtYmVyIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxHcm9rTW9kZWxSZWZyZXNoUmVzdWx0PiB7XG4gICAgdGhpcy5wZW5kaW5nUmVmcmVzaCA/Pz0gdGhpcy5yZWZyZXNoTm93KGNyZWRlbnRpYWxzLCBvcHRpb25zKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ1JlZnJlc2ggPSB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nUmVmcmVzaDtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hOb3coXG4gICAgY3JlZGVudGlhbHM6IFBpY2s8R3Jva0NyZWRlbnRpYWxzLCBcImFjY2Vzc1Rva2VuXCIgfCBcInVzZXJJZFwiPixcbiAgICBvcHRpb25zOiB7IGZldGNoPzogdHlwZW9mIGZldGNoOyBzaWduYWw/OiBBYm9ydFNpZ25hbDsgYmFzZVVybD86IHN0cmluZzsgbm93PzogbnVtYmVyIH0sXG4gICk6IFByb21pc2U8R3Jva01vZGVsUmVmcmVzaFJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRPcHRpb25zOiBQYXJhbWV0ZXJzPHR5cGVvZiBncm9rUHJveHlHZXQ+WzFdID0ge1xuICAgICAgICBoZWFkZXJzOiBidWlsZEdyb2tQcm94eUdldEhlYWRlcnMoe1xuICAgICAgICAgIGJlYXJlcjogY3JlZGVudGlhbHMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgdXNlcklkOiBjcmVkZW50aWFscy51c2VySWQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMuZmV0Y2gpIGdldE9wdGlvbnMuZmV0Y2ggPSBvcHRpb25zLmZldGNoO1xuXG4gICAgICBpZiAob3B0aW9ucy5zaWduYWwpIGdldE9wdGlvbnMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWw7XG5cbiAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIGdldE9wdGlvbnMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICAgIGNvbnN0IHsganNvbiwgaGVhZGVycyB9ID0gYXdhaXQgZ3Jva1Byb3h5R2V0KFwiL21vZGVsc1wiLCBnZXRPcHRpb25zKTtcblxuICAgICAgY29uc3QgcGFyc2VkID0gR3Jva01vZGVsc1Jlc3BvbnNlLnNhZmVQYXJzZShqc29uKTtcblxuICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtpbmQ6IFwibG9va3VwX2ZhaWxlZFwiLFxuICAgICAgICAgIHJlYXNvbjogYHVuZXhwZWN0ZWQgL21vZGVscyBzaGFwZTogJHtwYXJzZWQuZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGFyc2VkLmRhdGEuZGF0YSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGZyb21Qcm94eU1vZGVsKGVudHJ5KTtcblxuICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgdGhpcy5tb2RlbHMuc2V0KG1vZGVsLmlkLCBtb2RlbCk7XG4gICAgICAgIG1lcmdlZC5wdXNoKG1vZGVsLmlkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ldGFnID0gaGVhZGVycy5tb2RlbHNFdGFnO1xuICAgICAgdGhpcy5yZWZyZXNoZWRBdCA9IG9wdGlvbnMubm93ID8/IERhdGUubm93KCk7XG5cbiAgICAgIHJldHVybiB7IGtpbmQ6IFwib2tcIiwgbW9kZWxzOiBtZXJnZWQsIGV0YWc6IHRoaXMuZXRhZyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBcImxvb2t1cF9mYWlsZWRcIixcbiAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmUobW9kZWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogR3Jva1Jlc29sdmVkTW9kZWwge1xuICAgIGNvbnN0IGlkID0gY2Fub25pY2FsR3Jva01vZGVsSWQobW9kZWxJZCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tb2RlbHMuZ2V0KGlkKSA/PyB7XG4gICAgICAgIGlkLFxuICAgICAgICBjb250ZXh0V2luZG93OiB1bmRlZmluZWQsXG4gICAgICAgIGVmZm9ydHM6IEdST0tfUkVBU09OSU5HX0VGRk9SVFMsXG4gICAgICAgIGRlZmF1bHRFZmZvcnQ6IFwiaGlnaFwiLFxuICAgICAgICBrbm93bjogZmFsc2UsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUaGUgZWZmb3J0IGlmIHRoZSBtb2RlbCBhY2NlcHRzIGl0LCBvdGhlcndpc2UgdW5kZWZpbmVkLiBVbmxpc3RlZCBpZHMgYWNjZXB0IGV2ZXJ5IGVmZm9ydC4gKi9cbiAgdmFsaWRhdGVFZmZvcnQobW9kZWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBlZmZvcnQ6IHN0cmluZyk6IEdyb2tSZWFzb25pbmdFZmZvcnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yZXNvbHZlKG1vZGVsSWQpO1xuXG4gICAgcmV0dXJuIGlzR3Jva0VmZm9ydChlZmZvcnQpICYmIG1vZGVsLmVmZm9ydHMuaW5jbHVkZXMoZWZmb3J0KSA/IGVmZm9ydCA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQW9CQSxTQUFTLGFBQWEsT0FBNkM7Q0FDakUsT0FBTyx1QkFBdUIsTUFBTSxXQUFXLFdBQVcsS0FBSztBQUNqRTs7QUFHQSxTQUFnQixxQkFBcUIsU0FBcUM7Q0FHeEUsU0FGa0IsV0FBVyxHQUFBLENBQUksV0FBVyxPQUFPLEtBQUssV0FBVyxHQUFBLENBQUksTUFBTSxDQUFDLElBQUssV0FBVyxPQUV2RjtBQUNUO0FBRUEsU0FBUyxlQUFlLE9BQXNEO0NBQzVFLElBQUksTUFBTSxnQkFBZ0IsYUFBYSxPQUFPO0NBQzlDLE1BQU0sVUFBVSxNQUFNLHFCQUFxQixDQUFDLEVBQUEsQ0FBRyxLQUFLLFVBQVUsTUFBTSxLQUFLLENBQUMsQ0FBQyxPQUFP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
|