@cartanova/qgrid-cli 2.9.2 → 2.9.4
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/application/qgrid/qgrid.frame.js +4 -3
- package/bundle/dist/application/qgrid/token-death.js +6 -22
- package/bundle/dist/application/qgrid/token-subscriber.js +2 -1
- package/bundle/dist/application/token/token.model.js +22 -17
- package/bundle/dist/utils/providers/common/model-cost.js +21 -13
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +20 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +3 -2
- package/bundle/src/application/qgrid/token-death.test.ts +11 -10
- package/bundle/src/application/qgrid/token-death.ts +9 -21
- package/bundle/src/application/qgrid/token-subscriber.test.ts +5 -1
- package/bundle/src/application/qgrid/token-subscriber.ts +1 -0
- package/bundle/src/application/token/token.model.test.ts +24 -5
- package/bundle/src/application/token/token.model.ts +30 -23
- package/bundle/src/utils/providers/common/effort.test.ts +8 -0
- package/bundle/src/utils/providers/common/model-cost.test.ts +25 -12
- package/bundle/src/utils/providers/common/model-cost.ts +28 -14
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +1 -0
- package/bundle/web-dist/client/assets/{index-DH1n8kgG.js → index-fogJvajr.js} +3 -3
- package/bundle/web-dist/client/assets/{logs-D36O-NET.js → logs-CsY2cqvt.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-DhZAaz9K.js → monit-ChgaLEcD.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-C7q1CsSv.js → routes-BvyiTnOZ.js} +2 -2
- package/bundle/web-dist/client/assets/{settings-M_jfoIAe.js → settings-ZR2J9rWb.js} +1 -1
- package/bundle/web-dist/client/assets/{show-CORjMGQs.js → show-CjwO4-So.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-C7-j4VXD.js → tokens-Bx-hG1gm.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-Fi62xbBc.js → use-oauth-login-flow-Bqax_icS.js} +1 -1
- package/bundle/web-dist/client/index.html +1 -1
- package/bundle/web-dist/server/assets/{routes-CxMHXfdH.js → routes-B408iqh1.js} +29 -14
- package/bundle/web-dist/server/entry-server.generated.js +3 -2
- package/package.json +1 -1
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/ai-sdk-provider-contract.md +1 -1
- package/skills/qgrid/references/openai-codex-runtime.md +71 -0
- package/skills/qgrid/references/provider-runtime-differences.md +1 -1
- package/skills/qgrid/references/sonamu-api-web-flow.md +1 -1
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +3 -2
|
@@ -204,9 +204,10 @@ When a refresh fails in a way that only re-login can fix, qgrid removes the toke
|
|
|
204
204
|
|
|
205
205
|
- Detection lives at the existing refresh failure points, not a background scanner. OpenAI classifies on the error code (`refresh_token_expired`, `refresh_token_reused`, `refresh_token_invalidated`) regardless of HTTP status; Anthropic treats refresh 400/401 as auth-dead.
|
|
206
206
|
- Before deactivating, qgrid locks the token row and confirms the full credentials used by the failed attempt still match the stored credentials. A successful concurrent refresh therefore wins without a stale failure killing the rotated login. `QgridFrame.refreshToken` also dedups concurrent refreshes per token.
|
|
207
|
-
- Auth death is one conditional `reauth_required=false → true` transaction. Provider-scoped advisory locking serializes the last-active decision, and the update
|
|
207
|
+
- Auth death is one conditional `reauth_required=false → true` transaction. Provider-scoped advisory locking serializes the last-active decision, and the update always sets `active=false`, including for the last active token. The process whose update affects a row is the only one that sends the Slack death notification, so a shared database produces exactly one alert per event. Manual active toggles never set `reauth_required`, and an expired inactive token cannot be reactivated without completing OAuth.
|
|
208
208
|
- A successful refresh clears a concurrent stale `reauth_required` mark but preserves `active`, so it never overrides an operator's manual inactive choice.
|
|
209
|
-
- The provider's last active token is
|
|
209
|
+
- The provider's last active token is also deactivated. Its ordinary `세션 만료` notification is urgent and explains that no usable tokens remain; retaining a confirmed expired login cannot keep the provider usable. The persisted flag gates repeat alerts across instances. Startup and periodic subscriber reconciliation deactivate legacy rows with both `reauth_required=true` and `active=true` before loading the routing pool.
|
|
210
|
+
- The dashboard shows `Session expired` only when `reauth_required=true`, including inactive tokens. Usage errors such as a one-off 401 or a transient refresh failure show `Unavailable`; error-message text is not a second expiry classifier.
|
|
210
211
|
- The other notification is registration: every completed login sends one alert, whether the account is new or replacing an existing row through the account dedup. Manually toggling a token back to active is not a registration and sends nothing.
|
|
211
212
|
- Quiet hours suppress non-urgent Slack notifications: weekends, plus 20:00–08:00 on weekdays, in `Asia/Seoul`. All three parts are settings (`slack.quietFromHour`, `slack.quietUntilHour`, `slack.notifyOnWeekends`), defaulting to that window. The hour is computed through `Intl` with an explicit timezone rather than `getHours()` — dev0 runs in UTC, where "20:00" would land at 05:00 Korean time. Expiry alerts repeat, so one dropped in quiet hours returns on the first cycle of the next working window. The last-active-token death alert sets `urgent: true` and ignores quiet hours: it means that provider has no usable login, which cannot wait for the next working day.
|
|
212
213
|
- `slack.enabled` exists because holidays cannot be expressed as a recurring rule — substitute holidays, one-off national days, and company closures change every year, so an operator turns notifications off directly instead. It gates the same non-urgent path as quiet hours, which keeps the escape hatch for pool-empty alerts identical in both mechanisms.
|