@eduwork/dsh-oidc 0.3.0-dev.2 → 0.3.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 (57) hide show
  1. package/CHANGELOG.en.md +6 -0
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +9 -1
  4. package/README_EN.md +9 -1
  5. package/THIRD_PARTY_NOTICES.en.md +5 -4
  6. package/THIRD_PARTY_NOTICES.md +5 -5
  7. package/docs/account-extensions.en.md +7 -1
  8. package/docs/account-extensions.md +7 -1
  9. package/docs/compatibility.en.md +3 -1
  10. package/docs/compatibility.md +3 -1
  11. package/docs/development.en.md +1 -1
  12. package/docs/development.md +1 -1
  13. package/docs/dsh-integration.en.md +3 -3
  14. package/docs/dsh-integration.md +3 -3
  15. package/docs/enterprise-profile.en.md +47 -0
  16. package/docs/enterprise-profile.md +47 -0
  17. package/docs/gateway-auth/README.md +6 -5
  18. package/docs/gateway-auth/README_EN.md +6 -5
  19. package/docs/gateway-auth/experimental-oidc-llm.en.md +9 -7
  20. package/docs/gateway-auth/experimental-oidc-llm.md +8 -6
  21. package/docs/gateway-auth/litellm-setup.en.md +9 -3
  22. package/docs/gateway-auth/litellm-setup.md +9 -3
  23. package/docs/gateway-auth/oidc-llm-draft.en.md +89 -63
  24. package/docs/gateway-auth/oidc-llm-draft.md +86 -60
  25. package/docs/getting-started.en.md +3 -1
  26. package/docs/getting-started.md +3 -1
  27. package/docs/key-binding-protocol.en.md +1 -1
  28. package/docs/key-binding-protocol.md +1 -1
  29. package/docs/oidc-interoperability.en.md +1 -1
  30. package/docs/oidc-interoperability.md +1 -1
  31. package/docs/open-integration.en.md +3 -1
  32. package/docs/open-integration.md +3 -1
  33. package/examples/ecnu.enterprise-profile.example.json +2 -0
  34. package/examples/enterprise-profile.example.json +2 -0
  35. package/examples/litellm.enterprise-profile.example.json +9 -1
  36. package/examples/oidc-llm.enterprise-profile.example.json +33 -1
  37. package/examples/resources-discovery.example.json +7 -1
  38. package/lib/callback-page.js +9 -4
  39. package/lib/client.js +460 -360
  40. package/lib/desktop-oidc.js +2 -2
  41. package/lib/gateway-backend.js +20 -5
  42. package/lib/index.js +8 -6
  43. package/lib/litellm-protocol.js +2 -1
  44. package/lib/model-types.js +7 -0
  45. package/lib/oidc-llm-protocol.js +6 -2
  46. package/lib/oidc.js +19 -13
  47. package/lib/profile.js +24 -9
  48. package/lib/provider/authorization-scope.js +4 -0
  49. package/lib/provider/core.js +3 -3
  50. package/lib/provider/index.js +18 -2
  51. package/lib/provider/transform-adapter.js +4 -0
  52. package/lib/resources.js +12 -4
  53. package/lib/token-lifetime.js +15 -0
  54. package/lib/typert-schemas.js +14 -12
  55. package/package.json +104 -97
  56. package/protocol/resources.openapi.yaml +11 -3
  57. package/schema/enterprise-profile.v1alpha1.schema.json +36 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduwork/dsh-oidc",
3
- "version": "0.3.0-dev.2",
3
+ "version": "0.3.0",
4
4
  "description": "Standards-based OIDC identity, token-authorized model access, declarative branding, and OpenAI-compatible model integration for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -65,7 +65,8 @@
65
65
  "@deepseek-ai/dsh-client-ui-settings-general",
66
66
  "@deepseek-ai/dsh-client-ui-settings-models",
67
67
  "@deepseek-ai/dsh-client-ui-sidebar",
68
- "@deepseek-ai/dsh-client-ui-theme"
68
+ "@deepseek-ai/dsh-client-ui-theme",
69
+ "@deepseek-ai/dsh-client-locale"
69
70
  ],
70
71
  "platform": "web",
71
72
  "immediately": true
@@ -90,118 +91,115 @@
90
91
  "check:lock": "node scripts/check-dependency-lock.mjs"
91
92
  },
92
93
  "engines": {
93
- "node": ">=22.0.0"
94
+ "node": ">=24.18.0"
94
95
  },
95
96
  "publishConfig": {
96
97
  "access": "public"
97
98
  },
98
99
  "repository": {
99
100
  "type": "git",
100
- "url": "git+https://github.com/ecnu/EduWork.git",
101
+ "url": "git+https://github.com/ECNU/EduWork.git",
101
102
  "directory": "packages/dsh-oidc"
102
103
  },
103
104
  "bugs": {
104
- "url": "https://github.com/ecnu/EduWork/issues"
105
+ "url": "https://github.com/ECNU/EduWork/issues"
105
106
  },
106
- "homepage": "https://github.com/ecnu/EduWork/tree/main/packages/dsh-oidc#readme",
107
+ "homepage": "https://github.com/ECNU/EduWork/tree/main/packages/dsh-oidc#readme",
107
108
  "license": "MIT",
108
109
  "dependencies": {
109
110
  "zod": "4.4.3"
110
111
  },
111
112
  "peerDependencies": {
112
- "@deepseek-ai/cordis": "4.0.2",
113
- "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
114
- "@deepseek-ai/dsh-attachment": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
115
- "@deepseek-ai/dsh-authorization": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
116
- "@deepseek-ai/dsh-brand": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
117
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
118
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
119
- "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
120
- "@deepseek-ai/dsh-client-ui-settings-general": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
121
- "@deepseek-ai/dsh-client-ui-settings-models": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
122
- "@deepseek-ai/dsh-client-ui-sidebar": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
123
- "@deepseek-ai/dsh-client-ui-theme": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
124
- "@deepseek-ai/dsh-credentials": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
125
- "@deepseek-ai/dsh-fs": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
126
- "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
127
- "@deepseek-ai/dsh-invariants": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
128
- "@deepseek-ai/dsh-launch-environment": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
129
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
130
- "@deepseek-ai/dsh-llm-pi-ai": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
131
- "@deepseek-ai/dsh-sandbox": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
132
- "@deepseek-ai/dsh-scope": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
133
- "@deepseek-ai/dsh-session": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
134
- "@deepseek-ai/dsh-settings": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
135
- "@deepseek-ai/dsh-timeout": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
136
- "@deepseek-ai/dsh-typert-protocol": "0.1.2-rc.1 || 0.1.3-alpha.1 || 0.1.3-alpha.2 || 0.1.5-alpha.1 || 0.1.5-rc.1",
137
- "@earendil-works/pi-ai": "^0.84.2 || ^0.85.1",
113
+ "@deepseek-ai/cordis": ">=4.0.5 <4.1.0",
114
+ "@deepseek-ai/dsh-api-remotes": ">=0.2.1-rc.2 <0.3.0-0",
115
+ "@deepseek-ai/dsh-attachment": ">=0.2.1-rc.2 <0.3.0-0",
116
+ "@deepseek-ai/dsh-authorization": ">=0.2.1-rc.2 <0.3.0-0",
117
+ "@deepseek-ai/dsh-brand": ">=0.2.1-rc.2 <0.3.0-0",
118
+ "@deepseek-ai/dsh-client-ui-conversation": ">=0.2.1-rc.2 <0.3.0-0",
119
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.2.1-rc.2 <0.3.0-0",
120
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.2.1-rc.2 <0.3.0-0",
121
+ "@deepseek-ai/dsh-client-ui-settings-general": ">=0.2.1-rc.2 <0.3.0-0",
122
+ "@deepseek-ai/dsh-client-ui-settings-models": ">=0.2.1-rc.2 <0.3.0-0",
123
+ "@deepseek-ai/dsh-client-ui-sidebar": ">=0.2.1-rc.2 <0.3.0-0",
124
+ "@deepseek-ai/dsh-client-ui-theme": ">=0.2.1-rc.2 <0.3.0-0",
125
+ "@deepseek-ai/dsh-credentials": ">=0.2.1-rc.2 <0.3.0-0",
126
+ "@deepseek-ai/dsh-fs": ">=0.2.1-rc.2 <0.3.0-0",
127
+ "@deepseek-ai/dsh-host-webserver": ">=0.2.1-rc.2 <0.3.0-0",
128
+ "@deepseek-ai/dsh-launch-environment": ">=0.2.1-rc.2 <0.3.0-0",
129
+ "@deepseek-ai/dsh-llm": ">=0.2.1-rc.2 <0.3.0-0",
130
+ "@deepseek-ai/dsh-llm-pi-ai": ">=0.2.1-rc.2 <0.3.0-0",
131
+ "@deepseek-ai/dsh-sandbox": ">=0.2.1-rc.2 <0.3.0-0",
132
+ "@deepseek-ai/dsh-scope": ">=0.2.1-rc.2 <0.3.0-0",
133
+ "@deepseek-ai/dsh-session": ">=0.2.1-rc.2 <0.3.0-0",
134
+ "@deepseek-ai/dsh-settings": ">=0.2.1-rc.2 <0.3.0-0",
135
+ "@deepseek-ai/dsh-timeout": ">=0.2.1-rc.2 <0.3.0-0",
136
+ "@deepseek-ai/dsh-typert-protocol": ">=0.2.1-rc.2 <0.3.0-0",
137
+ "@earendil-works/pi-ai": "^1.1.0",
138
138
  "react": "^18.2.0",
139
- "react-dom": "^18.2.0"
139
+ "react-dom": "^18.2.0",
140
+ "@deepseek-ai/dsh-client-locale": ">=0.2.1-rc.2 <0.3.0-0"
140
141
  },
141
142
  "devDependencies": {
142
- "@deepseek-ai/cordis": "4.0.2",
143
- "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
144
- "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.1",
145
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
146
- "@deepseek-ai/dsh-api-gateway": "0.1.5-rc.1",
147
- "@deepseek-ai/dsh-api-remotes": "0.1.5-rc.1",
148
- "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.1",
149
- "@deepseek-ai/dsh-atomic-write": "0.1.5-rc.1",
150
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
151
- "@deepseek-ai/dsh-authorization": "0.1.5-rc.1",
152
- "@deepseek-ai/dsh-brand": "0.1.5-rc.1",
153
- "@deepseek-ai/dsh-chunked-list": "0.1.5-rc.1",
154
- "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
155
- "@deepseek-ai/dsh-client-file-upload": "0.1.5-rc.1",
156
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
157
- "@deepseek-ai/dsh-client-ui-model-selection": "0.1.5-rc.1",
158
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1",
159
- "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.1",
160
- "@deepseek-ai/dsh-client-ui-settings-general": "0.1.5-rc.1",
161
- "@deepseek-ai/dsh-client-ui-settings-models": "0.1.5-rc.1",
162
- "@deepseek-ai/dsh-client-ui-sidebar": "0.1.5-rc.1",
163
- "@deepseek-ai/dsh-client-ui-theme": "0.1.5-rc.1",
164
- "@deepseek-ai/dsh-code-runtime": "0.1.5-rc.1",
165
- "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
166
- "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
167
- "@deepseek-ai/dsh-deque": "0.1.5-rc.1",
168
- "@deepseek-ai/dsh-file-reference": "0.1.5-rc.1",
169
- "@deepseek-ai/dsh-fs": "0.1.5-rc.1",
170
- "@deepseek-ai/dsh-home-paths": "0.1.5-rc.1",
171
- "@deepseek-ai/dsh-host-webserver": "0.1.5-rc.1",
172
- "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
173
- "@deepseek-ai/dsh-jobs": "0.1.5-rc.1",
174
- "@deepseek-ai/dsh-launch-environment": "0.1.5-rc.1",
175
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
176
- "@deepseek-ai/dsh-llm-pi-ai": "0.1.5-rc.1",
177
- "@deepseek-ai/dsh-native-command": "0.1.5-rc.1",
178
- "@deepseek-ai/dsh-sandbox": "0.1.5-rc.1",
179
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
180
- "@deepseek-ai/dsh-scope": "0.1.5-rc.1",
181
- "@deepseek-ai/dsh-session": "0.1.5-rc.1",
182
- "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.1",
183
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
184
- "@deepseek-ai/dsh-session-projection-cache": "0.1.5-rc.1",
185
- "@deepseek-ai/dsh-session-query": "0.1.5-rc.1",
186
- "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
187
- "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
188
- "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
189
- "@deepseek-ai/dsh-storage": "0.1.5-rc.1",
190
- "@deepseek-ai/dsh-storage-domain": "0.1.5-rc.1",
191
- "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
192
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
193
- "@deepseek-ai/dsh-timeout": "0.1.5-rc.1",
194
- "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.1",
195
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
196
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
197
- "@deepseek-ai/dsh-typert-registry": "0.1.5-rc.1",
198
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
199
- "@deepseek-ai/dsh-util-crypto": "0.1.5-rc.1",
200
- "@deepseek-ai/dsh-util-time": "0.1.5-rc.1",
201
- "@deepseek-ai/dsh-util-values": "0.1.5-rc.1",
202
- "@deepseek-ai/dsh-util-workspace-path": "0.1.5-rc.1",
203
- "@deepseek-ai/dsh-workspace": "0.1.5-rc.1",
204
- "@earendil-works/pi-ai": "0.85.1",
143
+ "@deepseek-ai/cordis": "4.0.5",
144
+ "@deepseek-ai/dsh-agent": "0.2.1-rc.2",
145
+ "@deepseek-ai/dsh-agent-default-model": "0.2.1-rc.2",
146
+ "@deepseek-ai/dsh-api-gateway": "0.2.1-rc.2",
147
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-rc.2",
148
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
149
+ "@deepseek-ai/dsh-atomic-write": "0.2.1-rc.2",
150
+ "@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
151
+ "@deepseek-ai/dsh-authorization": "0.2.1-rc.2",
152
+ "@deepseek-ai/dsh-brand": "0.2.1-rc.2",
153
+ "@deepseek-ai/dsh-chunked-list": "0.2.1-rc.2",
154
+ "@deepseek-ai/dsh-client-connection": "0.2.1-rc.2",
155
+ "@deepseek-ai/dsh-client-file-upload": "0.2.1-rc.2",
156
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
157
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-rc.2",
158
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
159
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.2",
160
+ "@deepseek-ai/dsh-client-ui-settings-general": "0.2.1-rc.2",
161
+ "@deepseek-ai/dsh-client-ui-settings-models": "0.2.1-rc.2",
162
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.2",
163
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.1-rc.2",
164
+ "@deepseek-ai/dsh-commands": "0.2.1-rc.2",
165
+ "@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
166
+ "@deepseek-ai/dsh-deque": "0.2.1-rc.2",
167
+ "@deepseek-ai/dsh-file-reference": "0.2.1-rc.2",
168
+ "@deepseek-ai/dsh-fs": "0.2.1-rc.2",
169
+ "@deepseek-ai/dsh-home-paths": "0.2.1-rc.2",
170
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.2",
171
+ "@deepseek-ai/dsh-jobs": "0.2.1-rc.2",
172
+ "@deepseek-ai/dsh-launch-environment": "0.2.1-rc.2",
173
+ "@deepseek-ai/dsh-llm": "0.2.1-rc.2",
174
+ "@deepseek-ai/dsh-llm-pi-ai": "0.2.1-rc.2",
175
+ "@deepseek-ai/dsh-native-command": "0.2.1-rc.2",
176
+ "@deepseek-ai/dsh-sandbox": "0.2.1-rc.2",
177
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.2",
178
+ "@deepseek-ai/dsh-scope": "0.2.1-rc.2",
179
+ "@deepseek-ai/dsh-session": "0.2.1-rc.2",
180
+ "@deepseek-ai/dsh-session-persistence": "0.2.1-rc.2",
181
+ "@deepseek-ai/dsh-session-projection": "0.2.1-rc.2",
182
+ "@deepseek-ai/dsh-session-projection-cache": "0.2.1-rc.2",
183
+ "@deepseek-ai/dsh-session-query": "0.2.1-rc.2",
184
+ "@deepseek-ai/dsh-session-title": "0.2.1-rc.2",
185
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.2",
186
+ "@deepseek-ai/dsh-skill": "0.2.1-rc.2",
187
+ "@deepseek-ai/dsh-storage": "0.2.1-rc.2",
188
+ "@deepseek-ai/dsh-storage-domain": "0.2.1-rc.2",
189
+ "@deepseek-ai/dsh-subagent": "0.2.1-rc.2",
190
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
191
+ "@deepseek-ai/dsh-timeout": "0.2.1-rc.2",
192
+ "@deepseek-ai/dsh-tool-todo": "0.2.1-rc.2",
193
+ "@deepseek-ai/dsh-tools": "0.2.1-rc.2",
194
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.2",
195
+ "@deepseek-ai/dsh-typert-registry": "0.2.1-rc.2",
196
+ "@deepseek-ai/dsh-user-approval": "0.2.1-rc.2",
197
+ "@deepseek-ai/dsh-util-crypto": "0.2.1-rc.2",
198
+ "@deepseek-ai/dsh-util-time": "0.2.1-rc.2",
199
+ "@deepseek-ai/dsh-util-values": "0.2.1-rc.2",
200
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.2",
201
+ "@deepseek-ai/dsh-workspace": "0.2.1-rc.2",
202
+ "@earendil-works/pi-ai": "1.1.0",
205
203
  "@types/react": "^18.3.28",
206
204
  "@types/react-dom": "^18.3.7",
207
205
  "ajv": "^8.17.1",
@@ -210,6 +208,15 @@
210
208
  "react-dom": "18.3.1",
211
209
  "tsdown": "0.22.14",
212
210
  "typescript": "^5.9.3",
213
- "yaml": "^2.8.1"
211
+ "yaml": "^2.8.1",
212
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
213
+ "@deepseek-ai/dsh": "0.2.1-rc.2",
214
+ "@deepseek-ai/schemastery": "3.18.5",
215
+ "semver": "7.7.4"
216
+ },
217
+ "peerDependenciesMeta": {
218
+ "@deepseek-ai/dsh-client-locale": {
219
+ "optional": true
220
+ }
214
221
  }
215
222
  }
@@ -17,7 +17,7 @@ paths:
17
17
  operationId: listResourceModels
18
18
  responses:
19
19
  '200':
20
- description: Available model identifiers; reviewed capabilities remain in the client Profile
20
+ description: Authorized model identifiers and optional purpose metadata; reviewed capabilities remain in the client Profile
21
21
  content:
22
22
  application/json:
23
23
  schema:
@@ -26,13 +26,21 @@ paths:
26
26
  properties:
27
27
  data:
28
28
  type: array
29
- minItems: 1
29
+ minItems: 0
30
30
  maxItems: 128
31
31
  items:
32
32
  type: object
33
33
  required: [id]
34
34
  properties:
35
35
  id: { type: string, minLength: 1, maxLength: 256 }
36
+ type:
37
+ type: string
38
+ description: >-
39
+ Optional EduWork purpose extension, independent of input modalities and
40
+ the OpenAI object field. Known values are llm, embedding, rerank, image,
41
+ tts and unknown. Server declarations take precedence over client Profile
42
+ metadata; absent types use Profile metadata. Unsupported or unresolved
43
+ types normalize to unknown. Only llm registers for conversation.
36
44
  '401': { description: Access Token is invalid or expired }
37
45
  '403': { description: Model discovery is not permitted }
38
46
  '404': { description: Discovery endpoint is unavailable }
@@ -45,6 +53,6 @@ components:
45
53
  headers:
46
54
  Retry-After: { schema: { type: string }, description: Seconds or HTTP date for a future retry; never a refresh-token grant }
47
55
  Unavailable:
48
- description: Temporary resource failure; do not clear identity or the model key
56
+ description: Temporary resource failure; do not clear identity or a still-valid Access Token
49
57
  securitySchemes:
50
58
  accessToken: { type: http, scheme: bearer, description: Model runtime credential }
@@ -166,6 +166,16 @@
166
166
  "oauth",
167
167
  "oidc"
168
168
  ]
169
+ },
170
+ "additionalScopes": {
171
+ "type": "array",
172
+ "maxItems": 64,
173
+ "uniqueItems": true,
174
+ "items": {
175
+ "type": "string",
176
+ "maxLength": 128,
177
+ "pattern": "^[\\u0021\\u0023-\\u005b\\u005d-\\u007e]+$"
178
+ }
169
179
  }
170
180
  },
171
181
  "allOf": [
@@ -194,6 +204,7 @@
194
204
  "properties": {
195
205
  "clientId": false,
196
206
  "identityMode": false,
207
+ "additionalScopes": false,
197
208
  "discoveryUrl": {
198
209
  "$ref": "#/$defs/secureEndpointURL"
199
210
  },
@@ -331,6 +342,11 @@
331
342
  "minLength": 1,
332
343
  "maxLength": 120
333
344
  },
345
+ "loginButtonLabel": {
346
+ "type": "string",
347
+ "minLength": 1,
348
+ "maxLength": 40
349
+ },
334
350
  "loginDescription": {
335
351
  "type": "string",
336
352
  "minLength": 1,
@@ -338,6 +354,14 @@
338
354
  },
339
355
  "supportURL": {
340
356
  "$ref": "#/$defs/httpsURL"
357
+ },
358
+ "language": {
359
+ "enum": [
360
+ "auto",
361
+ "zh-CN",
362
+ "en"
363
+ ],
364
+ "type": "string"
341
365
  }
342
366
  }
343
367
  },
@@ -495,6 +519,18 @@
495
519
  "minLength": 1,
496
520
  "maxLength": 256
497
521
  },
522
+ "type": {
523
+ "type": "string",
524
+ "enum": [
525
+ "llm",
526
+ "embedding",
527
+ "rerank",
528
+ "image",
529
+ "tts",
530
+ "unknown"
531
+ ],
532
+ "description": "Model purpose, independent of input modalities. Server type takes precedence; local metadata fills absent server types. Missing types resolve to unknown; only llm registers for conversation."
533
+ },
498
534
  "name": {
499
535
  "type": "string",
500
536
  "minLength": 1,