@eddyskywalker/dsh-chatgpt-subscription 0.31.0 → 0.33.0

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.
Files changed (131) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +112 -1
  3. package/lib/client.js +34731 -3832
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +12922 -2851
  6. package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts +20 -0
  7. package/lib/types/client/cline-pass/ClinePassComposerQuota.d.ts.map +1 -0
  8. package/lib/types/client/cline-pass/ClinePassSection.d.ts +17 -0
  9. package/lib/types/client/cline-pass/ClinePassSection.d.ts.map +1 -0
  10. package/lib/types/client/cline-pass/api.d.ts +84 -0
  11. package/lib/types/client/cline-pass/api.d.ts.map +1 -0
  12. package/lib/types/client/cline-pass/locales.d.ts +1025 -0
  13. package/lib/types/client/cline-pass/locales.d.ts.map +1 -0
  14. package/lib/types/client/cline-pass/styles.d.ts +7 -0
  15. package/lib/types/client/cline-pass/styles.d.ts.map +1 -0
  16. package/lib/types/client/hub/brand-icons.d.ts +18 -2
  17. package/lib/types/client/hub/brand-icons.d.ts.map +1 -1
  18. package/lib/types/client/hub/hub-styles.d.ts.map +1 -1
  19. package/lib/types/client/hub/providers.d.ts.map +1 -1
  20. package/lib/types/client/index.d.ts +4 -0
  21. package/lib/types/client/index.d.ts.map +1 -1
  22. package/lib/types/client/mermaid/renderer.d.ts +23 -0
  23. package/lib/types/client/mermaid/renderer.d.ts.map +1 -1
  24. package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts +31 -14
  25. package/lib/types/client/minimax-code/MinimaxVideoDocumentBody.d.ts.map +1 -1
  26. package/lib/types/client/minimax-code/MinimaxVideoToolView.d.ts.map +1 -1
  27. package/lib/types/client/minimax-code/VideoFormDialog.d.ts +46 -50
  28. package/lib/types/client/minimax-code/VideoFormDialog.d.ts.map +1 -1
  29. package/lib/types/client/minimax-code/locales.d.ts +80 -20
  30. package/lib/types/client/minimax-code/locales.d.ts.map +1 -1
  31. package/lib/types/client/minimax-code/styles.d.ts.map +1 -1
  32. package/lib/types/client/minimax-code/video-command-host.d.ts +17 -11
  33. package/lib/types/client/minimax-code/video-command-host.d.ts.map +1 -1
  34. package/lib/types/client/minimax-code/video-command-icon.d.ts +38 -0
  35. package/lib/types/client/minimax-code/video-command-icon.d.ts.map +1 -0
  36. package/lib/types/client/minimax-code/video-command.d.ts +53 -59
  37. package/lib/types/client/minimax-code/video-command.d.ts.map +1 -1
  38. package/lib/types/client/minimax-code/video-contract.d.ts +36 -0
  39. package/lib/types/client/minimax-code/video-contract.d.ts.map +1 -1
  40. package/lib/types/client/minimax-code/video-media-dropzone.d.ts +57 -0
  41. package/lib/types/client/minimax-code/video-media-dropzone.d.ts.map +1 -0
  42. package/lib/types/client/minimax-code/video-media-input.d.ts +173 -0
  43. package/lib/types/client/minimax-code/video-media-input.d.ts.map +1 -0
  44. package/lib/types/client/minimax-code/video-presets.d.ts +67 -0
  45. package/lib/types/client/minimax-code/video-presets.d.ts.map +1 -0
  46. package/lib/types/client/minimax-code/video-slots.d.ts +58 -5
  47. package/lib/types/client/minimax-code/video-slots.d.ts.map +1 -1
  48. package/lib/types/client/minimax-code/video-workspace.d.ts +41 -0
  49. package/lib/types/client/minimax-code/video-workspace.d.ts.map +1 -0
  50. package/lib/types/client/progress-updates/markdown-lite.d.ts +19 -6
  51. package/lib/types/client/progress-updates/markdown-lite.d.ts.map +1 -1
  52. package/lib/types/client/qoder/QoderComposerQuota.d.ts +41 -0
  53. package/lib/types/client/qoder/QoderComposerQuota.d.ts.map +1 -0
  54. package/lib/types/client/qoder/QoderSection.d.ts +26 -0
  55. package/lib/types/client/qoder/QoderSection.d.ts.map +1 -0
  56. package/lib/types/client/qoder/api.d.ts +4 -0
  57. package/lib/types/client/qoder/api.d.ts.map +1 -0
  58. package/lib/types/client/qoder/locales.d.ts +310 -0
  59. package/lib/types/client/qoder/locales.d.ts.map +1 -0
  60. package/lib/types/client/qoder/styles.d.ts +16 -0
  61. package/lib/types/client/qoder/styles.d.ts.map +1 -0
  62. package/lib/types/client/qoder/useQoderSection.d.ts +97 -0
  63. package/lib/types/client/qoder/useQoderSection.d.ts.map +1 -0
  64. package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
  65. package/lib/types/host/cline-pass/account-pool.d.ts +63 -0
  66. package/lib/types/host/cline-pass/account-pool.d.ts.map +1 -0
  67. package/lib/types/host/cline-pass/adapter.d.ts +49 -0
  68. package/lib/types/host/cline-pass/adapter.d.ts.map +1 -0
  69. package/lib/types/host/cline-pass/catalog.d.ts +49 -0
  70. package/lib/types/host/cline-pass/catalog.d.ts.map +1 -0
  71. package/lib/types/host/cline-pass/client.d.ts +118 -0
  72. package/lib/types/host/cline-pass/client.d.ts.map +1 -0
  73. package/lib/types/host/cline-pass/engine.d.ts +223 -0
  74. package/lib/types/host/cline-pass/engine.d.ts.map +1 -0
  75. package/lib/types/host/cline-pass/line.d.ts +55 -0
  76. package/lib/types/host/cline-pass/line.d.ts.map +1 -0
  77. package/lib/types/host/cline-pass/mapper.d.ts +112 -0
  78. package/lib/types/host/cline-pass/mapper.d.ts.map +1 -0
  79. package/lib/types/host/cline-pass/oauth.d.ts +134 -0
  80. package/lib/types/host/cline-pass/oauth.d.ts.map +1 -0
  81. package/lib/types/host/cline-pass/protocol.d.ts +186 -0
  82. package/lib/types/host/cline-pass/protocol.d.ts.map +1 -0
  83. package/lib/types/host/cline-pass/routes.d.ts +71 -0
  84. package/lib/types/host/cline-pass/routes.d.ts.map +1 -0
  85. package/lib/types/host/cline-pass/store.d.ts +97 -0
  86. package/lib/types/host/cline-pass/store.d.ts.map +1 -0
  87. package/lib/types/host/cline-pass/token-store.d.ts +168 -0
  88. package/lib/types/host/cline-pass/token-store.d.ts.map +1 -0
  89. package/lib/types/host/cline-pass/tools.d.ts +21 -0
  90. package/lib/types/host/cline-pass/tools.d.ts.map +1 -0
  91. package/lib/types/host/cline-pass/types.d.ts +168 -0
  92. package/lib/types/host/cline-pass/types.d.ts.map +1 -0
  93. package/lib/types/host/common/model-request-control.d.ts +1 -1
  94. package/lib/types/host/common/model-request-control.d.ts.map +1 -1
  95. package/lib/types/host/common/request-diagnostics.d.ts +1 -1
  96. package/lib/types/host/common/request-diagnostics.d.ts.map +1 -1
  97. package/lib/types/host/kimi-code/adapter.d.ts +3 -1
  98. package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
  99. package/lib/types/host/kimi-code/mapper.d.ts.map +1 -1
  100. package/lib/types/host/qoder/account-pool.d.ts +137 -0
  101. package/lib/types/host/qoder/account-pool.d.ts.map +1 -0
  102. package/lib/types/host/qoder/adapter.d.ts +134 -0
  103. package/lib/types/host/qoder/adapter.d.ts.map +1 -0
  104. package/lib/types/host/qoder/adopt.d.ts +146 -0
  105. package/lib/types/host/qoder/adopt.d.ts.map +1 -0
  106. package/lib/types/host/qoder/client.d.ts +189 -0
  107. package/lib/types/host/qoder/client.d.ts.map +1 -0
  108. package/lib/types/host/qoder/cosy.d.ts +173 -0
  109. package/lib/types/host/qoder/cosy.d.ts.map +1 -0
  110. package/lib/types/host/qoder/mapper.d.ts +235 -0
  111. package/lib/types/host/qoder/mapper.d.ts.map +1 -0
  112. package/lib/types/host/qoder/model-catalog.d.ts +185 -0
  113. package/lib/types/host/qoder/model-catalog.d.ts.map +1 -0
  114. package/lib/types/host/qoder/oauth.d.ts +134 -0
  115. package/lib/types/host/qoder/oauth.d.ts.map +1 -0
  116. package/lib/types/host/qoder/routes.d.ts +96 -0
  117. package/lib/types/host/qoder/routes.d.ts.map +1 -0
  118. package/lib/types/host/qoder/token-store.d.ts +231 -0
  119. package/lib/types/host/qoder/token-store.d.ts.map +1 -0
  120. package/lib/types/host/qoder/types.d.ts +257 -0
  121. package/lib/types/host/qoder/types.d.ts.map +1 -0
  122. package/lib/types/host/workbuddy/adapter.d.ts.map +1 -1
  123. package/lib/types/host/workbuddy/mapper.d.ts +1 -0
  124. package/lib/types/host/workbuddy/mapper.d.ts.map +1 -1
  125. package/lib/types/index.d.ts +17 -0
  126. package/lib/types/index.d.ts.map +1 -1
  127. package/lib/types/shared/cline-pass-contracts.d.ts +267 -0
  128. package/lib/types/shared/cline-pass-contracts.d.ts.map +1 -0
  129. package/lib/types/shared/qoder-contracts.d.ts +293 -0
  130. package/lib/types/shared/qoder-contracts.d.ts.map +1 -0
  131. package/package.json +2 -1
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Qoder(订阅)线路的登录:浏览器设备流(仅全球区)+ PAT 兑换 + 令牌刷新。
3
+ *
4
+ * 协议逐字来源:
5
+ *
6
+ * - 设备流(PKCE 风格 challenge/verifier + nonce 轮询,**不开本地回调端口**):
7
+ * qodercli2api \`docs/oauth.md\` §2(官方 CLI v1.1.34 的 frozen fixtures 互操作基线),
8
+ * 与 pi-provider \`src/auth/login.ts\`(live 验证)互相印证;
9
+ * - PAT 兑换:docs.qoder.com/cli/authentication(官方文档)+ pi-provider \`src/auth/pat.ts\`;
10
+ * - 刷新:pi-provider \`src/auth/oauth.ts\` \`refreshQoderTokenForMode\`(live 验证)。
11
+ *
12
+ * 与 step-code 的 oauth.ts 同构的部分(流程状态机外壳:flow / controller /
13
+ * getXxxLoginStatus / resetXxxLogin / takeXxxLoginCredential)是因为设置卡片跟随的是
14
+ * 同一组四个入口;与它的**差异**(凭据会过期、可刷新)全部集中在
15
+ * {@link refreshQoderCredential} 与凭据装配段。
16
+ *
17
+ * 凭据形状由 token-store.ts 的 \`QoderCredentials\` 定义;本文件只负责「把一次登录
18
+ * 变成一份凭据」,不持有凭据存储。
19
+ */
20
+ import type { QoderLoginFlowStatus, QoderRegion } from '../../shared/qoder-contracts.ts';
21
+ import { type QoderRequestOptions } from './client.ts';
22
+ import { type QoderCredentials } from './token-store.ts';
23
+ /**
24
+ * PKCE 风格参数。
25
+ *
26
+ * - verifier:43..128 字符(A-Z a-z 0-9 -._~)——32 字节 base64url 正好 43 字符;
27
+ * - challenge:base64url_nopad(SHA256(verifier));
28
+ * - nonce:random UUID;
29
+ * - machineId:36 字符 UUID(本机既有那把就用那把,见 cosy.ts 的读取顺序)。
30
+ */
31
+ export declare function createQoderDeviceParams(env?: NodeJS.ProcessEnv): {
32
+ verifier: string;
33
+ challenge: string;
34
+ nonce: string;
35
+ machineId: string;
36
+ };
37
+ /**
38
+ * 授权页 URL(host 拼,卡片打开)。
39
+ *
40
+ * 逐字 docs/oauth.md §2.1 的参数表(challenge / challenge_method=S256 / nonce /
41
+ * machine_id / client_id=官方 CLI 的固定值)。没有 scope、redirect URI 或本地回调。
42
+ */
43
+ export declare function qoderDeviceAuthorizeUrl(params: {
44
+ challenge: string;
45
+ nonce: string;
46
+ machineId: string;
47
+ }): string;
48
+ /** 一次轮询的三种结果。 */
49
+ export type QoderDevicePoll = {
50
+ readonly state: 'pending';
51
+ } | {
52
+ readonly state: 'ready';
53
+ readonly token: string;
54
+ readonly userId: string | null;
55
+ readonly refreshToken: string | null;
56
+ readonly expiresAt: number;
57
+ } | {
58
+ readonly state: 'failed';
59
+ readonly reason: string;
60
+ };
61
+ /**
62
+ * GET {openapi}/api/v1/deviceToken/poll?nonce=…&verifier=…&challenge_method=S256。
63
+ *
64
+ * 逐字 docs/oauth.md §2.2 与 pi-provider \`login.ts\` 的状态语义:
65
+ *
66
+ * - 404 / 202 = pending(用户还没在浏览器里确认);
67
+ * - 200 = 取 token(**缺 token 的 200 立即失败**——看形状,不只看状态码);
68
+ * - 其余非 2xx = 立即失败;
69
+ * - transport 错误由外层轮询循环按间隔重试(到截止为止),不在这里判死。
70
+ */
71
+ export declare function pollQoderDeviceToken(params: {
72
+ nonce: string;
73
+ verifier: string;
74
+ }, options?: QoderRequestOptions): Promise<QoderDevicePoll>;
75
+ /**
76
+ * 设备流轮询结果 → 落盘凭据。
77
+ *
78
+ * userinfo 是 best-effort 的补齐(uid 缺失会让 CN 拒成 105;全球区的设备流
79
+ * 轮询自己带 \`user_id\`),补齐失败不使登录失败(docs/oauth.md §2:
80
+ * enrichment 失败不使登录失败)。
81
+ */
82
+ export declare function qoderCredentialsFromDevicePoll(ready: {
83
+ token: string;
84
+ userId: string | null;
85
+ refreshToken: string | null;
86
+ expiresAt: number;
87
+ }, machineId: string, options?: QoderRequestOptions): Promise<QoderCredentials>;
88
+ /**
89
+ * PAT → 落盘凭据。
90
+ *
91
+ * 兑换 + userinfo 补齐;**PAT 本体留在凭据里**(host-only),因为 PAT 的「刷新」
92
+ * 就是拿它重新兑换一把 job token(pi-provider 把 PAT 编进 refresh 字段,
93
+ * 本线路把它放进一个具名字段——同一件事,更好读)。
94
+ */
95
+ export declare function qoderCredentialsFromPat(personalToken: string, region: QoderRegion, options?: QoderRequestOptions): Promise<QoderCredentials>;
96
+ /**
97
+ * 刷新一份凭据(号池 refresh 钩子的实现)。
98
+ *
99
+ * 两条路径(凭据的 origin 决定):
100
+ *
101
+ * - **PAT**:拿存下的 PAT 重新兑换(pi-provider 的 isPatRefresh 路径同一做法);
102
+ * - **其余**:\`refreshToken\` 走 center 刷新端点;没有 refreshToken 的凭据
103
+ * 无法刷新,抛出明确的错误(号池据此把账号标成需要重新登录)。
104
+ *
105
+ * 失败带上 \`status\`(有 HTTP 状态时),号池据此分类「这个账号要重登」还是
106
+ * 「瞬时故障,别判死」。
107
+ */
108
+ export declare function refreshQoderCredential(credentials: QoderCredentials, fetchFn?: typeof fetch): Promise<QoderCredentials>;
109
+ /** 卡片轮询的状态切片。返回副本,调用方改不到内部状态。 */
110
+ export declare function getQoderLoginStatus(): QoderLoginFlowStatus;
111
+ /** 取消进行中的流程并回到 idle(设置卡片的「取消」)。 */
112
+ export declare function resetQoderLogin(): void;
113
+ /** 看看有没有一份已经拿到、还没被取走的凭据(纯内存读)。 */
114
+ export declare function peekQoderLoginCredential(): QoderCredentials | null;
115
+ /** 取走那份凭据并清空(同一份凭据只该被落盘一次)。 */
116
+ export declare function takeQoderLoginCredential(): QoderCredentials | null;
117
+ export interface QoderLoginOptions {
118
+ /** 测试缝。默认 fetch。 */
119
+ fetchFn?: typeof fetch;
120
+ env?: NodeJS.ProcessEnv;
121
+ /** 完成的登录写到哪里(接入层传号池的保存函数)。 */
122
+ onSave?: (credential: QoderCredentials) => Promise<unknown>;
123
+ /** 本地总时限;缺省 10 分钟,可由 QODER_LOGIN_TIMEOUT_MS 覆盖。 */
124
+ timeoutMs?: number;
125
+ }
126
+ /**
127
+ * 开始一次浏览器设备流登录(**仅全球区**;CN 没有设备流,走 PAT 或 adopt)。
128
+ *
129
+ * 流程跑在 host 上(controller + flow),设置卡片只跟随 getQoderLoginStatus——
130
+ * 与其余各线路的登录面同构。轮询节奏 2 秒一次,总超时取本地总时限
131
+ * (服务端对 verifier 的硬截止由 404→failed 的翻转表达)。
132
+ */
133
+ export declare function beginQoderLogin(region: QoderRegion, options?: QoderLoginOptions): Promise<QoderLoginFlowStatus>;
134
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/qoder/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Qoder(订阅)线路的 web 路由。
3
+ *
4
+ * 路由表与客户端 \`src/client/qoder/api.ts\` 里那一份是**同一个约定**,两边必须逐条对上:
5
+ *
6
+ * \`\`\`
7
+ * GET /status -> QoderStatusDto(页面的唯一读口)
8
+ * POST /settings QoderSettingsUpdateDto -> QoderStatusDto
9
+ * POST /accounts { action, accountId } / { action:'strategy', strategy } -> QoderStatusDto
10
+ * POST /login/start { region } -> QoderLoginFlowStatus(设备流,仅全球区)
11
+ * GET /login/status -> QoderLoginFlowStatus
12
+ * POST /login/cancel { } -> QoderLoginFlowStatus
13
+ * POST /login/manual { region, token } -> QoderStatusDto(请求体带 PAT,不在冻结契约里)
14
+ * POST /adopt { } -> QoderAdoptResultDto(裸 DTO;失败永不阻断)
15
+ * POST /connection/test { } -> QoderConnectionDto(裸 DTO)
16
+ * POST /quota { } -> QoderStatusDto(强制刷新额度)
17
+ * POST /catalog/refresh { } -> QoderStatusDto
18
+ * \`\`\`
19
+ *
20
+ * 信封:除 \`/adopt\` 与 \`/connection/test\` 外一律 \`{ ok, value }\`(客户端的
21
+ * \`createLineApi\` 会把信封拆掉;那两条路由的契约把 DTO 定在顶层,所以它们直接返回 DTO)。
22
+ *
23
+ * 同源校验不可省:每个 POST 都过 \`isSameOriginMutation\`,与兄弟线路同一份实现。
24
+ *
25
+ * 本文件**不持有任何凭据,也不算任何用量**:落盘与刷新交给 token-store / account-pool /
26
+ * oauth / adopt,上游 I/O 交给 client.ts,缓存用量的累计是 adapter.ts 的累计器。
27
+ * 它只做三件事:读设置、组装状态面、把同源的 POST 翻译成对上面那些模块的一次调用。
28
+ */
29
+ import type { Context } from '@deepseek-ai/cordis';
30
+ import type { AccountRotationStrategy } from '../../shared/account-pool-contracts.ts';
31
+ import { type QoderAccountSummaryDto, type QoderCacheStatsDto, type QoderQuotaSnapshotDto, type QoderRegion, type QoderStatusDto } from '../../shared/qoder-contracts.ts';
32
+ import { type QoderAccountPool } from './account-pool.ts';
33
+ import { type QoderModelEntry } from './model-catalog.ts';
34
+ import { QoderModelSettingsStore, type QoderModelSettings, type QoderPreferenceStore, type QoderSettingsPatch } from './token-store.ts';
35
+ /** 一个请求寻址的子路径(剥掉契约前缀)。 */
36
+ export declare function qoderSubPathOf(requestUrl: string): string;
37
+ /**
38
+ * 设置来源:register 后端与文件后端形状不同,这里收敛成一个(与 step-code 同形)。
39
+ */
40
+ export interface QoderSettingsSource {
41
+ status(): QoderModelSettings | Promise<QoderModelSettings>;
42
+ update(patch: QoderSettingsPatch): Promise<QoderModelSettings>;
43
+ }
44
+ /** 设置来源:register 后端优先,没有就落回凭据旁边的 JSON 文件。 */
45
+ export declare function qoderSettingsSource(preferences: QoderPreferenceStore | undefined, fallback: QoderModelSettingsStore): QoderSettingsSource;
46
+ export interface QoderRouteOptions {
47
+ fetchFn?: typeof fetch;
48
+ /** 本插件是否正在服务这条 Provider 路由;每次状态都重新读。 */
49
+ serving?: boolean | (() => boolean);
50
+ /** 路由被别的适配器占用时的诊断文案;每次状态都重新读。 */
51
+ conflict?: string | null | (() => string | null);
52
+ /** 号池;本进程装了才有。 */
53
+ accountPool?: QoderAccountPool;
54
+ /** 环境变量读取处;缺省 process.env,且**调用时**读取。 */
55
+ env?: NodeJS.ProcessEnv;
56
+ }
57
+ /** 号池切片的收紧形状(本线路状态面实际持有的那一部分)。 */
58
+ export interface QoderPoolSlice {
59
+ accounts: QoderAccountSummaryDto[];
60
+ rotationStrategy: AccountRotationStrategy;
61
+ activeAccountId?: string;
62
+ }
63
+ export interface QoderStatusSources {
64
+ options: QoderRouteOptions;
65
+ settings: QoderSettingsSource;
66
+ /** 下一次登录要用的区域。 */
67
+ region: QoderRegion;
68
+ /** 号池切片:唯一装配它的地方是 account-pool 的 qoderPoolStatusSlice(这里只收紧形状)。 */
69
+ pool: QoderPoolSlice;
70
+ /** 本次读到的账号(卡片渲染用,不带任何凭据)。 */
71
+ account: QoderAccountSummaryDto | null;
72
+ /** 这个部署当前的模型目录(缓存读,轮询不联网)。 */
73
+ catalog: readonly QoderModelEntry[];
74
+ /** 本进程为当前账号记住的额度快照。 */
75
+ quota: QoderQuotaSnapshotDto | null;
76
+ /** 本次应答背后是否正在刷新额度。 */
77
+ quotaRefreshing: boolean;
78
+ /** 上一次额度读失败的原因;没有快照可渲染时为 null。 */
79
+ quotaError: string | null;
80
+ /** 本进程累计的缓存用量;尚无样本时为 undefined(客户端据此渲染占位符)。 */
81
+ cacheStats: QoderCacheStatsDto | undefined;
82
+ }
83
+ /**
84
+ * 组装 \`QoderStatusDto\`。
85
+ *
86
+ * 号池读不出来不能带倒整张卡:连接那一半仍然值得渲染,只是账号列表是空的。
87
+ */
88
+ export declare function getQoderStatus(sources: QoderStatusSources): Promise<QoderStatusDto>;
89
+ /**
90
+ * 注册本线路的路由。
91
+ *
92
+ * 本文件不持有凭据:账号的落盘与轮转在号池,凭据由号池镜像。
93
+ * 设置的唯一写入点是 \`POST /settings\`。
94
+ */
95
+ export declare function registerQoderRoutes(ctx: Context, settings: QoderSettingsSource, options?: QoderRouteOptions): () => void;
96
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/qoder/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AACrF,OAAO,EAKL,KAAK,sBAAsB,EAE3B,KAAK,kBAAkB,EAEvB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAA;AAMxC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAA;AAS1B,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAOtG,OAAO,EAEL,uBAAuB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAA;AA+CzB,0BAA0B;AAC1B,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOzD;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,IAAI,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC1D,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC/D;AAUD,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,oBAAoB,GAAG,SAAS,EAC7C,QAAQ,EAAE,uBAAuB,GAChC,mBAAmB,CAErB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAA;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAA;IAChD,kBAAkB;IAClB,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACxB;AAyBD,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAA;IAClC,gBAAgB,EAAE,uBAAuB,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,kBAAkB;IAClB,MAAM,EAAE,WAAW,CAAA;IACnB,mEAAmE;IACnE,IAAI,EAAE,cAAc,CAAA;IACpB,6BAA6B;IAC7B,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACtC,8BAA8B;IAC9B,OAAO,EAAE,SAAS,eAAe,EAAE,CAAA;IACnC,uBAAuB;IACvB,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACnC,sBAAsB;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,kCAAkC;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,+CAA+C;IAC/C,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAAA;CAC3C;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiCzF;AAiCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,GAAE,iBAAsB,GAC9B,MAAM,IAAI,CAkTZ"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Qoder(订阅)线路的凭据 / 模型设置 / 偏好三件套。
3
+ *
4
+ * 本线路的凭据与 step-code 相反的那个性质先说清楚,因为它决定了本文件的设计:
5
+ *
6
+ * **凭据会过期、可刷新。** Qoder 的 job/device token 带着 `expires_at` / `expires_in`
7
+ * (pi-provider `pat.ts` / `login.ts`;qodercli2api `docs/oauth.md` §3)。所以:
8
+ *
9
+ * - 本文件**有** refresh 相关的一切(过期时刻、提前刷新量、刷新输入的留存);
10
+ * - PAT 来源的凭据**留住 PAT 本体**(host-only,绝不进共享契约),因为 PAT 的
11
+ * 「刷新」就是拿它重新兑换一把 job token(pi-provider `oauth.ts` 的
12
+ * `isPatRefresh` 路径同一做法);
13
+ * - 号池的 `expiresAt`/`needsRefresh`/`refresh` 钩子都是活的,
14
+ * 刷新失败按 401/403 → expired、其余 → 瞬时 分类(account-pool.ts)。
15
+ *
16
+ * 第二件必须记住的事:**本线路自己拥有它的凭据副本,但从不拥有 qodercli 的文件**。
17
+ * adopt 只是把 `~/.qoder/.auth/user` 读成一份快照存进本插件自己的凭据存储
18
+ * (`adopt.ts` 只读、不写、不删)。落盘的 adopt 凭据带 `adopted / source / sourcePath`
19
+ * 三个判别式字段,与其它线路的 adopt 语义一致。
20
+ *
21
+ * 三件套的分工与兄弟线路一致:凭据走 DPAPI / Keychain / Secret Service;
22
+ * 模型设置是明文 JSON,带写后回读校验;偏好在 harness 还提供 register 接缝时注册进
23
+ * 设置文档,没有就落回那个 JSON 文件。
24
+ */
25
+ import type { CredentialStore } from '../token-store.ts';
26
+ import { type ContextWindowOverridePatch } from '../common/context-window-overrides.ts';
27
+ import type { QoderReasoningEffort, QoderRegion } from '../../shared/qoder-contracts.ts';
28
+ import { listModelIds } from './model-catalog.ts';
29
+ /** 本线路在设置文档里注册的命名空间。 */
30
+ export declare const QODER_PREFERENCES_NAMESPACE = "dsh-qoder";
31
+ /**
32
+ * 这份凭据是从哪条路来的。
33
+ *
34
+ * - `device`:浏览器设备流(仅全球区)。
35
+ * - `pat`:用户手动粘贴的 Personal Access Token 兑换来的 job token。
36
+ * - `adopt`:从本机 qodercli 客户端读来的登录态快照。
37
+ *
38
+ * 它与 `region` 是**两件事**:`region` 决定打哪套端点,`origin` 决定这份东西
39
+ * 怎么刷新(PAT 重兑换 vs refresh_token)以及本插件能不能对它做任何写操作。
40
+ */
41
+ export type QoderCredentialOrigin = 'device' | 'pat' | 'adopt';
42
+ /** 本线路读 qodercli 登录态时的来源标记(与兄弟线路的 adopt 判别式同构)。 */
43
+ export declare const QODER_CLI_CREDENTIAL_SOURCE = "qoder-cli";
44
+ /**
45
+ * 一份可服务请求的 Qoder 凭据。
46
+ *
47
+ * 真正发请求只用 `accessToken`(Bearer + COSY 载荷里的 `security_oauth_token`)。
48
+ * 其余字段分四类:
49
+ *
50
+ * - **刷新输入**(`refreshToken` / `expiresAt` / `personalToken`):过期后续命的原料;
51
+ * - **非机密的账号事实**(`uid` / `email` / `accountName`):COSY 载荷与卡片渲染用;
52
+ * - **路由事实**(`region`):它唯一决定端点表,见 `./types.ts` 的 `REGION_HOSTS`;
53
+ * - **COSY 头的条件字段**(`organizationId` / `organizationTags` / `dataPolicyAgreed`):
54
+ * 非空才出现在请求头里(inference-protocol.md §2 的 presence 矩阵);
55
+ * - adopt 判别式(`adopted` / `source` / `sourcePath`):见文件头。
56
+ */
57
+ export interface QoderCredentials {
58
+ /** 真正发请求用的 job/device token。Host-only,永不过共享边界。 */
59
+ accessToken: string;
60
+ /** 刷新令牌(`jrt-...` 或设备流的 refresh_token);没有时为 null。 */
61
+ refreshToken: string | null;
62
+ /** 过期时刻(Unix 毫秒,已含安全边);上游没给时按兑换时刻 + 24h 兜底。 */
63
+ expiresAt: number;
64
+ /** 凭据自述的区域;**端点由它唯一决定**,不另存一份。 */
65
+ region: QoderRegion;
66
+ origin: QoderCredentialOrigin;
67
+ /** 上游账号 id(COSY 的 `Cosy-User`);缺它 CN 会报「Login expired」(105)。 */
68
+ uid: string | null;
69
+ /** 账号邮箱(COSY UserInfo 的 `email`,非机密);没有时为 null。 */
70
+ email: string | null;
71
+ /** 账号显示名(COSY UserInfo 的 `name`);没有时为 null。 */
72
+ accountName: string | null;
73
+ /**
74
+ * PAT 来源的凭据留住的 PAT 本体(`pt-...`)。
75
+ *
76
+ * **Host-only,永远不过共享契约的边界**:它的唯一用途是过期后重新兑换一把
77
+ * job token(pi-provider 把 PAT 编进 refresh 字段,同一件事)。非 PAT 来源为 null。
78
+ */
79
+ personalToken: string | null;
80
+ /** 组织 id(`Cosy-Organization-Id` 的条件字段);个人账号为 null。 */
81
+ organizationId: string | null;
82
+ /** 组织 tags(`Cosy-Organization-Tags` 的条件字段,逗号连接前的那份数组)。 */
83
+ organizationTags: string[];
84
+ /** `Cosy-Data-Policy` 的取值开关:true → `agree`,否则 `disagree`(fixture 的默认)。 */
85
+ dataPolicyAgreed: boolean;
86
+ /** 本插件接管这份凭据的时刻(Unix 毫秒)。 */
87
+ authenticatedAt: number;
88
+ /** 判别式,取字面量 `true`(与兄弟线路同:一个布尔比一句注释更难被忽略)。 */
89
+ adopted?: true;
90
+ /** 恒为 {@link QODER_CLI_CREDENTIAL_SOURCE}。 */
91
+ source?: typeof QODER_CLI_CREDENTIAL_SOURCE;
92
+ /** 读的是哪个文件,卡片照它显示。 */
93
+ sourcePath?: string;
94
+ }
95
+ /**
96
+ * 校验并归一化一份落盘的凭据。
97
+ *
98
+ * 缺的字段一律拒绝而不是补默认值:缺 `accessToken` 的凭据发出去一定是一次 401;
99
+ * 缺 `uid` 的凭据在 CN 会被报「Login expired」(105)——但它不拒绝:全球区对这个字段
100
+ * 更宽容,而号池装配侧会在发卡前尽力补齐(oauth.ts 的 userinfo 步骤)。
101
+ *
102
+ * `region` 认不出来时**拒绝**而不是回落默认:落盘的凭据总该自述;猜错的代价是
103
+ * 拿一区的凭据去打另一区的端点,一次明确的鉴权失败,排查成本远高于重新登录。
104
+ */
105
+ export declare function parseQoderCredentials(value: unknown): QoderCredentials;
106
+ /**
107
+ * 一份凭据是不是 adopt 快照(号池与适配器据此知道它的上游权威是 qodercli 的文件)。
108
+ *
109
+ * 它读的是**凭据对象本身**而不是某个内存标记(同 step-code 的同名函数的理由)。
110
+ */
111
+ export declare function isAdoptedQoderCredential(credentials: QoderCredentials): boolean;
112
+ /**
113
+ * 凭据的失效时刻:自述的 `expiresAt`;缺 0 时按「接管时刻 + 24h」补一份诚实的兜底
114
+ * (pi-provider 的缺省寿命),让号池的刷新钩子有东西可判。
115
+ */
116
+ export declare function qoderCredentialsExpireAt(credentials: QoderCredentials): number;
117
+ /**
118
+ * 这份凭据需不需要刷新:`expiresAt - 3600_000 < now` 时刷新
119
+ * (逐字 qodercli2api `docs/oauth.md` §3 的提前 1 小时)。
120
+ */
121
+ export declare function qoderCredentialsNeedRefresh(credentials: QoderCredentials, now: number): boolean;
122
+ /**
123
+ * 兑换/刷新响应里的过期时刻 → Unix 毫秒(已含 5 分钟安全边)。
124
+ *
125
+ * 三种形态都收(计划 §9 风险 6):
126
+ *
127
+ * - `expiresAt`:ISO 字符串或 Unix 秒/毫秒——用**量级**分辨(10^10 秒是 2286 年,
128
+ * 更大的数一定已经是毫秒);
129
+ * - `expiresIn`:相对时长。pi-provider 注释说观测到的是**毫秒**,qodercli2api 按秒读;
130
+ * 同一量级判据两处都兼容(小于 10^7 的值按秒才合理:10^7 秒约 4 个月,
131
+ * 而一把 job token 的寿命以小时/天计)。
132
+ */
133
+ export declare function qoderExpiresAtFrom(expiresAt: unknown, expiresIn: unknown, now?: number): number;
134
+ /** 凭据文件路径(本线路自己拥有;号池把主账号镜像到这里)。 */
135
+ export declare function credentialPath(): string;
136
+ /** 模型设置文件路径。 */
137
+ export declare function modelSettingsPath(): string;
138
+ /**
139
+ * machine id 文件路径(本线路自己持有的那份)。
140
+ *
141
+ * adopt 优先读 qodercli 的 `~/.qoder/.auth/machine_id`(解密它的凭据文件必须用那把
142
+ * 原配 key);本线路自己发请求用的 machine id 落在这里——不与 qodercli 的混用,
143
+ * 也不写它的目录(读取顺序见 cosy.ts)。
144
+ */
145
+ export declare function machineIdPath(): string;
146
+ /**
147
+ * 加密凭据存储。
148
+ *
149
+ * 与兄弟线路同构:写入之后回读比对;按路径排队,避免两个同时落地的写互相丢掉。
150
+ * 没有明文迁移分支(本线路从未发布过,没有历史文件要迁)。
151
+ */
152
+ export declare class QoderCredentialStore {
153
+ private readonly filePath;
154
+ private readonly backend;
155
+ constructor(filePath?: string, backend?: CredentialStore<QoderCredentials>);
156
+ /** 人可读的存储位置说明(Windows DPAPI / macOS Keychain / Linux Secret Service)。 */
157
+ path(): string;
158
+ read(): Promise<QoderCredentials | null>;
159
+ write(credentials: QoderCredentials): Promise<void>;
160
+ delete(): Promise<void>;
161
+ }
162
+ /**
163
+ * 本线路设置文档里**用户自己**的那一半。
164
+ *
165
+ * 随包目录 `QODER_MODEL_CATALOG_*` 刻意不存:它跟着代码走(同 step-code 的理由)。
166
+ */
167
+ export interface QoderModelSettings {
168
+ /** 线路总开关。只有显式 false 才是关闭。 */
169
+ enabled?: boolean;
170
+ /**
171
+ * 用户勾选的模型 id;缺省或空数组 = **不过滤(全选)**,非空 = 显式选择。
172
+ * (语义逐字照抄 step-code:schemastery 会把缺省的 `z.array(z.string())` 归一化成
173
+ * `[]`,所以没有「null = 不过滤」的第三态。)
174
+ */
175
+ enabledModelIds?: string[];
176
+ /** 逐模型上下文窗口覆盖;缺省用目录声明值。 */
177
+ contextWindowOverrides: Record<string, number>;
178
+ /** 会话没指定档位时用的档位;null 表示各模型用自己的默认。 */
179
+ defaultReasoningEffort: QoderReasoningEffort | null;
180
+ /** 手动指定下一个请求使用的账号;null 交回号池调度。 */
181
+ selectedAccountId: string | null;
182
+ }
183
+ /** 一个设置补丁。 */
184
+ export interface QoderSettingsPatch {
185
+ enabled?: boolean;
186
+ enabledModelIds?: string[];
187
+ /** 补丁而不是整张表:`null` 必须能作为一个**值**活下来(卡片的「恢复目录默认」)。 */
188
+ contextWindowOverrides?: ContextWindowOverridePatch;
189
+ defaultReasoningEffort?: QoderReasoningEffort | null;
190
+ selectedAccountId?: string | null;
191
+ }
192
+ /**
193
+ * 路由与适配器共用的接缝(与 step-code 同一个形状,`status()` 同步的理由也相同)。
194
+ */
195
+ export interface QoderPreferenceStore {
196
+ ready(): Promise<void>;
197
+ status(): QoderModelSettings;
198
+ update(patch: QoderSettingsPatch): Promise<QoderModelSettings>;
199
+ }
200
+ /** 一次全新安装的设置:全开、无过滤、无覆盖、无指定账号。 */
201
+ export declare function defaultQoderModelSettings(): QoderModelSettings;
202
+ /**
203
+ * 归一化一份解析出来的设置文档。什么都不抛:手改过或降级过的文档必须降级成一份
204
+ * 可用的选择,而不是让整条线路不可用。
205
+ */
206
+ export declare function parseQoderModelSettings(value: unknown): QoderModelSettings;
207
+ /** 把一个补丁应用到一份设置文档上(register 与文件两个后端共用这一套规则)。 */
208
+ export declare function mergeQoderSettings(current: QoderModelSettings, patch: QoderSettingsPatch): QoderModelSettings;
209
+ /**
210
+ * 凭据旁边的设置文件(没有 register 接缝的 harness 启动时读的就是它)。
211
+ * 写入走「临时文件 + rename」,写完立刻回读比对再报告成功。
212
+ */
213
+ export declare class QoderModelSettingsStore {
214
+ private readonly filePath;
215
+ constructor(filePath?: string);
216
+ path(): string;
217
+ read(): Promise<QoderModelSettings>;
218
+ write(settings: QoderModelSettings): Promise<void>;
219
+ /** 在与凭据写入同一条按路径排队的锁里做「读-改-写」。 */
220
+ updateSettings(patch: QoderSettingsPatch): Promise<QoderModelSettings>;
221
+ }
222
+ /**
223
+ * 把模型选择绑到 DSH 设置文档(harness 还提供 register 接缝时),
224
+ * 否则绑到凭据旁边的 JSON 文件。
225
+ *
226
+ * ⚠ `enabledModelIds` 不给 `.default()`(与 step-code 同一处实测:
227
+ * schemastery 会把缺省的数组归一化成 `[]`,而 `[]` 与「不过滤」同义)。
228
+ */
229
+ export declare function registerQoderPreferenceStore(settings?: unknown, fallbackStore?: QoderModelSettingsStore): QoderPreferenceStore;
230
+ export { listModelIds };
231
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../src/host/qoder/token-store.ts"],"names":[],"mappings":"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"}