@ai-wendao/ant 0.4.14 → 0.4.15

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 (3) hide show
  1. package/README.md +1 -1
  2. package/client.js +30 -14
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ ANT (AI-native Teams) connects a DeepSeek Harness Desktop profile to its team's
14
14
 
15
15
  飞书机器人连接和消息收发由 DSH-IM 负责;ANT Bundle 不保存机器人密钥,也不直连 IM 平台。成员在 ANT 插件的“协作”页选择机器人、启用本机协作,并设置私聊和各群的普通聊天开关。群第一次 @ 机器人后会出现在群列表。群聊天开关只控制普通聊天;任务卡还要单独指定私聊或群、请求人范围和有效期。
16
16
 
17
- 开放任务时,成员用自然语言描述什么时候执行、要看哪些资料、怎样处理和返回结果。描述中的 Gitea PR 链接、仓库和编号也用自然语言表达。点击“识别规则”会调用一次当前获准的 DSH 团队模型,只生成草稿,不保存任务;检查摘要不合意时,修改描述并重新识别。任务名称、触发条件、PR 信息和参数由识别结果转成内部规则,界面不要求逐项填写。执行方、使用范围、请求人和有效期由通用控件控制。
17
+ 开放任务时,成员用自然语言描述什么时候执行、要看哪些资料、怎样处理和返回结果。描述中的 Gitea PR 链接、仓库和编号也用自然语言表达。点击“识别规则”会调用一次当前获准的 DSH 团队模型,只生成草稿,不保存任务;草稿包含明确触发短语,由机器人主人检查后再开放。机器人主人指在本人 DSH 中连接并管理该 DSH-IM 机器人的 ANT 成员,不代表群管理员身份;群内谁能请求任务仍由规则中的群范围和请求人范围决定。任务只在请求消息以已配置短语开头时执行;检查摘要不合意时,修改描述并重新识别。任务名称、触发条件、PR 信息和参数由识别结果转成内部规则,界面不要求逐项填写。执行方、使用范围、请求人和有效期由通用控件控制。
18
18
 
19
19
  群任务和群聊天设置只在 ANT 协作页配置。当前版本不设群管理员身份绑定,也不支持在群里开放任务、确认授权或开关群聊。群成员可以普通聊天,或按已开放任务的群范围、请求人范围、触发条件和有效期发起任务;未开放的任务不会因为群成员的消息而执行。关闭群普通聊天不会撤销已开放任务。服务端升级时会停用没有明确触发方式的旧任务卡;要继续使用这类任务,需在新界面重新描述规则并开放。
20
20
 
package/client.js CHANGED
@@ -2182,18 +2182,7 @@ window.__ModuleLoader__.load({
2182
2182
  ? provider.apiMode === 'responses' ? 'ant-team-openai-responses' : 'ant-team-openai-chat-completions'
2183
2183
  : provider.providerId === 'anthropic-default'
2184
2184
  ? 'ant-team-anthropic' : `ant-team-${provider.protocol}-${provider.providerId}`
2185
- const routes = providers.map(routeForProvider)
2186
- const ops = []
2187
- let previousRoutes = []
2188
- try {
2189
- const parsed = JSON.parse(localStorage.getItem(PROVIDER_ROUTES_STORAGE_KEY) || '[]')
2190
- if (Array.isArray(parsed)) previousRoutes = parsed.filter((route) => typeof route === 'string')
2191
- } catch {}
2192
- const knownRoutes = new Set([...previousRoutes, 'ant-team-openai', 'ant-team-openai-chat-completions',
2193
- 'ant-team-openai-responses', 'ant-team-anthropic'])
2194
- for (const route of knownRoutes) {
2195
- if (!routes.includes(route)) ops.push({ op: 'unset', path: ['providers', route] })
2196
- }
2185
+ const routeConfigurations = new Map()
2197
2186
  for (const provider of providers) {
2198
2187
  const route = routeForProvider(provider)
2199
2188
  const api = provider.protocol === 'openai'
@@ -2204,13 +2193,40 @@ window.__ModuleLoader__.load({
2204
2193
  : provider.protocol === 'openai'
2205
2194
  ? new URL(`/model-gateway/openai/providers/${encodeURIComponent(provider.providerId)}/v1`, normalized).toString()
2206
2195
  : new URL(`/model-gateway/anthropic/providers/${encodeURIComponent(provider.providerId)}`, normalized).toString()
2207
- ops.push({ op: 'set', path: ['providers', route], value: {
2196
+ routeConfigurations.set(route, {
2208
2197
  displayName: provider.providerName,
2209
2198
  apiKeyEnv: 'ANT_MODEL_API_KEY',
2210
2199
  api,
2211
2200
  baseURL,
2212
2201
  models: provider.models.map((model) => ({ id: model.model_id, name: model.display_name })),
2213
- } })
2202
+ })
2203
+ if (provider.protocol === 'openai' && provider.providerId === 'openai-default') {
2204
+ const aliases = provider.apiMode === 'responses'
2205
+ ? ['ant-team-openai-chat-completions', 'ant-team-openai'] : ['ant-team-openai']
2206
+ const legacyChat = {
2207
+ displayName: `${provider.providerName} · Chat(旧会话兼容)`,
2208
+ apiKeyEnv: 'ANT_MODEL_API_KEY',
2209
+ api: 'openai-completions',
2210
+ baseURL: new URL('/model-gateway/openai/v1', normalized).toString(),
2211
+ models: provider.models.map((model) => ({ id: model.model_id, name: model.display_name })),
2212
+ }
2213
+ for (const alias of aliases) routeConfigurations.set(alias, legacyChat)
2214
+ }
2215
+ }
2216
+ const routes = [...routeConfigurations.keys()]
2217
+ const ops = []
2218
+ let previousRoutes = []
2219
+ try {
2220
+ const parsed = JSON.parse(localStorage.getItem(PROVIDER_ROUTES_STORAGE_KEY) || '[]')
2221
+ if (Array.isArray(parsed)) previousRoutes = parsed.filter((route) => typeof route === 'string')
2222
+ } catch {}
2223
+ const knownRoutes = new Set([...previousRoutes, 'ant-team-openai', 'ant-team-openai-chat-completions',
2224
+ 'ant-team-openai-responses', 'ant-team-anthropic'])
2225
+ for (const route of knownRoutes) {
2226
+ if (!routes.includes(route)) ops.push({ op: 'unset', path: ['providers', route] })
2227
+ }
2228
+ for (const [route, value] of routeConfigurations) {
2229
+ ops.push({ op: 'set', path: ['providers', route], value })
2214
2230
  }
2215
2231
  const settingsWrite = await remote.settings.mutate('llm-pi-ai', ops, undefined)
2216
2232
  if (!settingsWrite.ok) throw new Error(settingsWrite.error?.message || 'DSH 无法更新团队模型设置。')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-wendao/ant",
3
- "version": "0.4.14",
3
+ "version": "0.4.15",
4
4
  "description": "ANT (AI-native Teams) connects a DeepSeek Harness Desktop profile to team identity and approved models.",
5
5
  "type": "module",
6
6
  "scripts": {