@kanyun-ai-infra/agenthub 1.13.0 → 1.14.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.
- package/CHANGELOG.md +12 -0
- package/README.md +50 -1
- package/dist/index.cjs +209 -104
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -9
- package/dist/index.d.ts +90 -9
- package/dist/index.js +209 -104
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/agenthub-sdk/SKILL.md +94 -46
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
本文件从 1.12.0 开始记录;更早的版本见 git 历史中的 `chore(agenthub-sdk): release X.Y.Z` 提交。
|
|
4
4
|
|
|
5
|
+
## 1.14.0
|
|
6
|
+
|
|
7
|
+
### 随共享契约内联的语音变化
|
|
8
|
+
|
|
9
|
+
- 回合式语音的 `voice.input.provider` 和 `voice.output.provider` 支持 `dashscope`、`modelgate-chat`,并保留 `modelgate`。`publishVersion` / `publishRevision` 的本地请求校验接受这些值。
|
|
10
|
+
- `voice.input` 和 `voice.output` 各自支持可选的 `modelService`,用于指定该方向使用的项目模型服务名;不填写时沿用主模型服务。显式指定的模型服务无法解析或与 provider 不匹配时拒绝使用,不回落到主模型服务。
|
|
11
|
+
- 随包语音错误码包含 `VOICE_INPUT_FORMAT_UNSUPPORTED`(HTTP 400):所选语音服务不支持输入音频格式。模型服务不满足语音要求时仍使用 `VOICE_MODEL_SERVICE_UNSUPPORTED`(HTTP 400),模型未获授权时使用 `VOICE_MODEL_NOT_AUTHORIZED`(HTTP 502)。这些是服务端错误,不是本地 schema 校验的错误码。
|
|
12
|
+
|
|
13
|
+
### 迁移说明
|
|
14
|
+
|
|
15
|
+
- 使用 `dashscope`、`modelgate-chat` 或语音子段 `modelService` 的接入方须升级到 `@kanyun-ai-infra/agenthub@1.14.0`。1.13.0 的内联请求 schema 会在发送请求前拒绝这些配置并抛出 `ZodError`;仅升级服务端不能更新已安装 SDK 的 schema。
|
|
16
|
+
|
|
5
17
|
## 1.13.0
|
|
6
18
|
|
|
7
19
|
- 浏览器实时语音支持可选 `onEnded({ callId, reason })`:识别通话终态帧 `call_ended` 或关闭码 `4000`,清理采集与播放并停止自动接手;时长上限映射为 `duration_limit`,未知原因映射为 `unknown`。回调每通至多一次,本地 `stop()` 不触发;终态到达后可以手动开始新通话。
|
package/README.md
CHANGED
|
@@ -36,6 +36,8 @@ pnpm add @kanyun-ai-infra/agenthub
|
|
|
36
36
|
|
|
37
37
|
需要 Node 18+,因为 SDK 使用全局 `fetch`。
|
|
38
38
|
|
|
39
|
+
回合式语音使用 `dashscope`、`modelgate-chat` provider 或 `voice.input.modelService` / `voice.output.modelService` 时,需要 SDK ≥ 1.14.0。
|
|
40
|
+
|
|
39
41
|
如果调用方是 Java、Python 或 Shell(curl),请优先看
|
|
40
42
|
<https://agenthub.zhenguanyu.com/v1/docs/api-and-sdk#multi-language>(Python / Java)
|
|
41
43
|
或 <https://agenthub.zhenguanyu.com/v1/docs/api-and-sdk#rest-flow>(curl)。
|
|
@@ -276,7 +278,7 @@ try {
|
|
|
276
278
|
|
|
277
279
|
## 实时语音(浏览器)
|
|
278
280
|
|
|
279
|
-
|
|
281
|
+
通话前,项目要先在门户配好实时语音模型服务和站点来源,见下文「开通前提」。
|
|
280
282
|
|
|
281
283
|
从 `@kanyun-ai-infra/agenthub/realtime` 导入 `createRealtimeVoiceClient`。浏览器只持有短期通话票;接入方后端调用 `client.sessions.createVoiceTicket(sessionId, options?)` 换票,`options` 可传 `signal: AbortSignal`,返回 `{ ticket, gatewayUrl, expiresAt }`。`getTicket()` 推荐返回整个响应对象,SDK 按票里的 `gatewayUrl` 建连;也可以只返回 `ticket` 字符串,此时连初始化时传入的 `gatewayUrl`。不能把平台 token 放进前端。主入口不加载浏览器代码。转写 `role` 为 `user` 或 `assistant`。
|
|
282
284
|
|
|
@@ -329,3 +331,50 @@ SDK 1.13.0 起提供此行为。旧版 1.11.0 / 1.12.0 / 1.12.1 忽略 `call_end
|
|
|
329
331
|
`adaptiveConnect` 缺省为 `true`;设为 `false` 时只连初始化地址,首次建连被拒立即报 `CONNECTION_FAILED`,与 1.11.0 一致。
|
|
330
332
|
|
|
331
333
|
仓库内运行本地浏览器冒烟:`pnpm --filter @kanyun-ai-infra/agenthub run smoke:realtime`。该入口先按依赖顺序构建 SDK 及 contracts,再用本地假网关和无头 Chrome 验证采集、播放、打断、回执与停止;运行前需安装仓库依赖及 Chrome,不需要通话凭据。
|
|
334
|
+
|
|
335
|
+
### 开通前提
|
|
336
|
+
|
|
337
|
+
项目要先在门户配好下面两项。SDK 和 API 都没有这两项的入口。
|
|
338
|
+
|
|
339
|
+
1. **实时语音模型服务。** 项目里要有且只有一个启用中的 GCP 服务账号模型服务(鉴权方式 `gcp_service_account`)。在门户「凭证与集成」→「模型服务」→「新建模型服务」里把用途选为「GCP 实时语音」,粘贴服务账号 JSON,填区域(默认 `us-central1`)。Vertex AI 的费用记在服务账号 JSON 里 `project_id` 所指的 GCP 项目上。`agent.yaml` 不引用这一项:每通通话首次接通时,平台在项目里找到这一行并冻结到这通通话上。live Agent 声明的 `modelService` 是文本模型服务,照常必填,两者互不替代。
|
|
340
|
+
- 项目里已有一个启用中的 GCP 模型服务时,再建第二个会被拒。更换服务账号或私钥时编辑原来那一行,粘贴完整的新 JSON。
|
|
341
|
+
- 归档这一行后,项目不能再开新通话;已经接通的通话不受影响,断线接手照常。
|
|
342
|
+
- 取票时的预检只验证 Google 能为这个服务账号换发访问令牌,不验证它在该 GCP 项目里有没有调用 Vertex AI 的权限。缺权限时取票照常成功,到网关连 Vertex AI 时才失败;网关连上游失败发生在 `ready` 之前时,SDK 报 `GATEWAY_ERROR`。
|
|
343
|
+
2. **站点来源。** 浏览器从接入方自己的站点发起通话时,在门户「配置」→「项目」页的「允许发起实时通话的站点来源」里加上这个站点的来源,即发起连接的页面的 `location.origin`:协议、主机名和可选端口,例如 `https://app.example.com`,不带路径和通配符。比较前只统一大小写、去掉默认端口和末尾斜杠,`https://www.example.com` 与 `https://example.com` 是两个来源。HTTP 只允许 `localhost`、`127.0.0.1` 和 `[::1]`,最多 20 个,只有项目 owner 或管理员能修改。从 AgentHub 门户(`https://agenthub.zhenguanyu.com`、`https://agenthub-test.zhenguanyu.com`)发起的通话不受这份名单限制。
|
|
344
|
+
|
|
345
|
+
### 拒绝码与处理
|
|
346
|
+
|
|
347
|
+
通话可能在两处被拒:接入方后端取票时,和浏览器握手时。
|
|
348
|
+
|
|
349
|
+
**取票被拒。** 发票接口的错误体是 `{ success: false, error: { code, message?, scope? } }`。SDK 只从响应顶层取码,所以 `createVoiceTicket` 抛出的 `PilotPlatformApiError` 上,`err.code` 只是按 HTTP 状态给的通用值(409 为 `REQUEST_FAILED`,503 为 `SERVER_ERROR`)。实际的码在 `err.body.error.code`,可读原因在 `err.body.error.message`,下表注明哪些码带 `message`。
|
|
350
|
+
|
|
351
|
+
```ts
|
|
352
|
+
import { PilotPlatformApiError } from "@kanyun-ai-infra/agenthub";
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
return await client.sessions.createVoiceTicket(sessionId);
|
|
356
|
+
} catch (err) {
|
|
357
|
+
if (err instanceof PilotPlatformApiError) {
|
|
358
|
+
const detail = (err.body?.error ?? {}) as { code?: string; message?: string; scope?: string };
|
|
359
|
+
// detail.code 例如 "REALTIME_UPSTREAM_NOT_CONFIGURED";detail.message 可以直接展示给用户
|
|
360
|
+
}
|
|
361
|
+
throw err;
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
浏览器里 `getTicket()` 抛错时,SDK 只报 `CONNECTION_FAILED`,不转交错误内容。要让用户看到原因,由接入方的取票接口把 `code` 和 `message` 返回给前端,在 `getTicket()` 里自行展示。
|
|
366
|
+
|
|
367
|
+
| 码 | HTTP | 带 `message` | 含义 | 处理 |
|
|
368
|
+
| --- | --- | --- | --- | --- |
|
|
369
|
+
| `REALTIME_UPSTREAM_NOT_CONFIGURED` | 409 | 是 | 项目没有启用中的 GCP 实时语音模型服务 | 按「开通前提」第 1 项添加 |
|
|
370
|
+
| `REALTIME_UPSTREAM_AMBIGUOUS` | 409 | 是 | 项目里有多个启用中的 GCP 实时语音模型服务 | 归档多余的,只留一个 |
|
|
371
|
+
| `REALTIME_UPSTREAM_CREDENTIAL_INVALID` | 409 | 是 | Google 拒绝为这个服务账号换发访问令牌,或私钥无法使用,例如服务账号被删除或停用、密钥被撤销、JSON 填错 | 在模型服务里重新粘贴服务账号 JSON;重试不会恢复 |
|
|
372
|
+
| `REALTIME_UPSTREAM_CREDENTIAL_UNAVAILABLE` | 503 | 是 | 暂时换不到访问令牌:Google 令牌端点不可达,或返回 5xx、429 | 稍后重试;响应不带 `Retry-After` |
|
|
373
|
+
| `REALTIME_CAPACITY_EXCEEDED` | 409 | 是 | `scope` 为 `"project"`:项目的在线通话数到上限,上限值写在 `message` 里;`scope` 为 `"global"`:平台的在线通话总数到上限 | 项目上限:结束本项目的其他通话后重试;平台上限:稍后重试 |
|
|
374
|
+
| `REALTIME_ADMISSION_UNAVAILABLE` | 503 | 否 | 平台的通话计数服务暂时不可用 | 稍后重试;响应不带 `Retry-After` |
|
|
375
|
+
| `REALTIME_UPSTREAM_TENANT_UNSUPPORTED` | 409 | 是 | 会话所在租户使用独立数据库,这种部署形态还不支持项目自带的实时语音凭据 | 项目侧无法处理,联系平台 |
|
|
376
|
+
| `REALTIME_DISABLED` | 409 | 否 | 平台紧急停用了实时语音 | 项目侧无法处理,等平台恢复 |
|
|
377
|
+
|
|
378
|
+
会话不是 ready(`SESSION_NOT_READY`)、Revision 未声明 `voice.realtime`(`REALTIME_NOT_DECLARED`)、会话绑定了渠道(`REALTIME_CHANNEL_SESSION`)也是 409,不带 `message`。会话不存在或不属于调用方项目回 404 `SESSION_NOT_FOUND`;平台没配好网关地址回 503 `REALTIME_NOT_CONFIGURED`,票存储不可用回 503 `REALTIME_TICKET_STORE_UNAVAILABLE`,两者都不带 `message`,项目侧无法处理。会话上已有在线通话时,这张票只用于接手那通通话,不做上表里模型服务、凭据、平台上限和租户这几项预检,也不受项目上限限制。
|
|
379
|
+
|
|
380
|
+
**握手被拒(站点来源)。** 站点来源不在取票时检查。请求没有 `Origin` 头(或超过 2048 个字符)时,网关在兑票前就回 401,票没有用掉。带了 `Origin` 的握手,网关兑票之后交平台判来源:既不是平台门户、也不在项目名单里时回 403 `REALTIME_ORIGIN_FORBIDDEN`,这时票已经用掉。另一个来源码 `REALTIME_ORIGIN_REQUIRED`(claim 没带来源)经平台网关碰不到:网关在没有 `Origin` 时已先回 401。浏览器读不到握手的 HTTP 状态码,SDK 按首次建连被拒处理:报 `CONNECT_RETRYING`,每次重新取票再连,3 次后报 `CONNECTION_FAILED`(`adaptiveConnect: false` 时直接报)。取票一直成功、`start()` 却以 `CONNECTION_FAILED` 结束时,先核对项目的站点来源;网关满额、排空等其他握手拒绝也是同样的表现。断线接手时同样检查来源,通话中途从名单里删掉的来源,接手会失败。不用 SDK、自己建 WebSocket 的接入方,被拒后要重新取票再连,同一张票不能再用。
|
package/dist/index.cjs
CHANGED
|
@@ -257,6 +257,8 @@ var import_zod86 = require("zod");
|
|
|
257
257
|
var import_zod87 = require("zod");
|
|
258
258
|
var import_zod88 = require("zod");
|
|
259
259
|
var import_zod89 = require("zod");
|
|
260
|
+
var import_zod90 = require("zod");
|
|
261
|
+
var import_zod91 = require("zod");
|
|
260
262
|
var MODELGATE_VENDOR_TYPES = [
|
|
261
263
|
"anthropic",
|
|
262
264
|
"openai",
|
|
@@ -500,8 +502,10 @@ var EXECUTOR_FORMAT_REGISTRY = {
|
|
|
500
502
|
},
|
|
501
503
|
pi: {
|
|
502
504
|
descriptor: { kind: "harness", adapterId: "pi", protocolVersion: "1" },
|
|
503
|
-
// `@ai-sdk/harness-pi`, pinned exactly (#
|
|
504
|
-
|
|
505
|
+
// `@ai-sdk/harness-pi`, pinned exactly (#3670 owner decision 2026-10-15,
|
|
506
|
+
// issuecomment-6186259511; supersedes the 2026-09-22 #3667 §7 pin of
|
|
507
|
+
// 1.0.120 — 1.0.154 dropped the pi-mcp-adapter/pi-ai direct deps).
|
|
508
|
+
adapterVersion: "1.0.154",
|
|
505
509
|
sectionKey: "pi",
|
|
506
510
|
workerContractKind: "managed_agent",
|
|
507
511
|
// Provisional until #3670 S0: only `structuredOutput: false` is decided
|
|
@@ -522,6 +526,13 @@ var ReservedExecutorValueSchema = import_zod5.z.never();
|
|
|
522
526
|
var RevisionExecutorSchema = ExecutorDescriptorSchema.extend({
|
|
523
527
|
format: ExecutorFormatSchema
|
|
524
528
|
}).strict();
|
|
529
|
+
var RevisionExecutorInputSchema = import_zod5.z.object({
|
|
530
|
+
format: ExecutorFormatSchema,
|
|
531
|
+
kind: ExecutorKindSchema.optional(),
|
|
532
|
+
adapterId: import_zod5.z.string().min(1).max(EXECUTOR_ADAPTER_ID_MAX_LENGTH).optional(),
|
|
533
|
+
protocolVersion: import_zod5.z.string().min(1).max(EXECUTOR_PROTOCOL_VERSION_MAX_LENGTH).optional()
|
|
534
|
+
}).strict();
|
|
535
|
+
var ProfileExecutorSchema = ExecutorFormatSchema;
|
|
525
536
|
var ImageExecutorCapabilitySchema = import_zod5.z.object({
|
|
526
537
|
format: import_zod5.z.string().min(1).max(EXECUTOR_FORMAT_NAME_MAX_LENGTH),
|
|
527
538
|
protocolVersions: import_zod5.z.array(import_zod5.z.string().min(1).max(EXECUTOR_PROTOCOL_VERSION_MAX_LENGTH)).max(32)
|
|
@@ -4134,6 +4145,15 @@ var WorkloadManifestErrorCodeSchema = import_zod4.z.enum([
|
|
|
4134
4145
|
"EXECUTOR_NOT_PUBLISHABLE",
|
|
4135
4146
|
"EXECUTOR_AGENT_OPTIONS_UNSUPPORTED",
|
|
4136
4147
|
"EXECUTOR_CAPABILITY_UNSUPPORTED",
|
|
4148
|
+
// EXI-L (spec `pilot-v2-executor-identity.md` §2 EXI-L / §4.4): a snapshot
|
|
4149
|
+
// with `agentPackage.format = live` carrying an `executor` key. `live` is an
|
|
4150
|
+
// agent-package form, not an executor — the two keys must not coexist, and
|
|
4151
|
+
// neither may be silently dropped. Thrown by `applyRevisionManifest`'s EXI-3
|
|
4152
|
+
// normalisation (#3668 D7) before `findLiveRevisionViolations` would report
|
|
4153
|
+
// the same field under LIVE_REVISION_UNSUPPORTED. Same HTTP mapping (400,
|
|
4154
|
+
// the `statusForManifestError` default) and additive-widening note as the
|
|
4155
|
+
// four codes above.
|
|
4156
|
+
"EXECUTOR_NOT_APPLICABLE_TO_LIVE",
|
|
4137
4157
|
// `format: live` publish admission (#4625 PR-1, spec
|
|
4138
4158
|
// pilot-v2-managed-agent-profile.md §11 MAP-VL3), both thrown by
|
|
4139
4159
|
// `applyRevisionManifest` and mapped to 400 by the default branch of
|
|
@@ -4277,9 +4297,11 @@ var LiveRevisionAgentPackageSchema = AgentPackageSchema.extend({
|
|
|
4277
4297
|
format: import_zod4.z.literal("live"),
|
|
4278
4298
|
source: AgentPackageSourceSchema.optional()
|
|
4279
4299
|
}).strict();
|
|
4300
|
+
var PiRevisionAgentPackageSchema = AgentPackageSchema.omit({ entryCommand: true }).extend({ format: import_zod4.z.literal("pi") }).strict();
|
|
4280
4301
|
var RevisionAgentPackageSchema = import_zod4.z.discriminatedUnion("format", [
|
|
4281
4302
|
AgentPackageSchema,
|
|
4282
|
-
LiveRevisionAgentPackageSchema
|
|
4303
|
+
LiveRevisionAgentPackageSchema,
|
|
4304
|
+
PiRevisionAgentPackageSchema
|
|
4283
4305
|
]);
|
|
4284
4306
|
var AGENT_OPTIONS_MAX_TURNS = 200;
|
|
4285
4307
|
var AGENT_OPTIONS_MAX_THINKING_TOKENS = 6e4;
|
|
@@ -4509,12 +4531,14 @@ var WorkloadManifestRealtimeVoiceSchema = import_zod4.z.object({
|
|
|
4509
4531
|
var WorkloadManifestVoiceSchema = import_zod4.z.object({
|
|
4510
4532
|
realtime: WorkloadManifestRealtimeVoiceSchema.optional(),
|
|
4511
4533
|
input: import_zod4.z.object({
|
|
4512
|
-
provider: import_zod4.z.
|
|
4534
|
+
provider: import_zod4.z.enum(["modelgate", "dashscope", "modelgate-chat"]),
|
|
4535
|
+
modelService: platformEntityNameSchema("modelService", 200).optional(),
|
|
4513
4536
|
model: import_zod4.z.string().min(1).max(200),
|
|
4514
4537
|
language: import_zod4.z.string().min(2).max(16).optional()
|
|
4515
4538
|
}).strict().optional(),
|
|
4516
4539
|
output: import_zod4.z.object({
|
|
4517
|
-
provider: import_zod4.z.
|
|
4540
|
+
provider: import_zod4.z.enum(["modelgate", "dashscope", "modelgate-chat"]),
|
|
4541
|
+
modelService: platformEntityNameSchema("modelService", 200).optional(),
|
|
4518
4542
|
model: import_zod4.z.string().min(1).max(200),
|
|
4519
4543
|
voice: import_zod4.z.string().min(1).max(64),
|
|
4520
4544
|
format: import_zod4.z.literal("mp3")
|
|
@@ -4582,30 +4606,40 @@ var ManagedAgentProfileSnapshotSchema = import_zod4.z.object({
|
|
|
4582
4606
|
*/
|
|
4583
4607
|
channels: WorkloadManifestChannelsSchema.optional(),
|
|
4584
4608
|
/**
|
|
4585
|
-
* Session executor (#3668 D, spec `pilot-v2-executor-identity.md` EXI-2
|
|
4586
|
-
* the registry descriptor plus the `format` name
|
|
4587
|
-
*
|
|
4588
|
-
* `
|
|
4589
|
-
*
|
|
4590
|
-
*
|
|
4591
|
-
*
|
|
4592
|
-
*
|
|
4593
|
-
*
|
|
4594
|
-
* `
|
|
4595
|
-
*
|
|
4596
|
-
|
|
4597
|
-
|
|
4609
|
+
* Session executor (#3668 D, spec `pilot-v2-executor-identity.md` EXI-2 /
|
|
4610
|
+
* EXI-3): the registry descriptor plus the `format` name — written ONLY
|
|
4611
|
+
* for a non-default executor, so a `claude_code` Revision's snapshot
|
|
4612
|
+
* carries no `executor` key and absence means `claude_code`. Session
|
|
4613
|
+
* executor = this key, never the workload defaults (EXI-5).
|
|
4614
|
+
*
|
|
4615
|
+
* Opened to the target shape by #3668 D7 together with the publish gate
|
|
4616
|
+
* (EXP). THIS schema parses the EXI-3 INPUT shape (`format` required,
|
|
4617
|
+
* descriptor fields optional — the file-agent converter sends `format`
|
|
4618
|
+
* only); `applyRevisionManifest` normalises to the stored shape
|
|
4619
|
+
* (registry descriptor, `EXECUTOR_DESCRIPTOR_MISMATCH` on a contradicting
|
|
4620
|
+
* `adapterId` / `kind`, key dropped for the default format) before any
|
|
4621
|
+
* write. The `.strict()` rolling-window caveat in the `managedMcpBindings`
|
|
4622
|
+
* comment above applies unchanged — which is why the gate keeps the
|
|
4623
|
+
* switch default OFF: with it off, no snapshot carrying this key can be
|
|
4624
|
+
* written at all (pi is refused by EXP-1).
|
|
4625
|
+
*/
|
|
4626
|
+
executor: RevisionExecutorInputSchema.optional(),
|
|
4598
4627
|
/**
|
|
4599
4628
|
* 语音声明(spec pilot-v2-managed-agent-profile.md §11 MAP-VL1)冻结快照。
|
|
4600
4629
|
*
|
|
4601
4630
|
* **读者先行**:本 schema 是 `.strict()`,滚动窗口里的旧副本(control-worker /
|
|
4602
4631
|
* agent-hub 各自打包一份 `@pilot/contracts`)遇到不认识的 `voice` 键会**整份
|
|
4603
|
-
* safeParse 失败**,随后静默回落 workload 默认 model / systemPrompt
|
|
4604
|
-
*
|
|
4605
|
-
*
|
|
4606
|
-
*
|
|
4632
|
+
* safeParse 失败**,随后静默回落 workload 默认 model / systemPrompt。所以当初先让
|
|
4633
|
+
* 读快照的全部服务发布能解析 `voice` 的版本,再由写侧闸
|
|
4634
|
+
* `voice_declarations_enabled` 放开(同 `managedMcpBindings` / `executor` 的历史
|
|
4635
|
+
* 包袱,见下方两条注释)。读者早已全量,那道闸已于 #5069 删除。
|
|
4607
4636
|
*/
|
|
4608
4637
|
voice: WorkloadManifestVoiceSchema.optional(),
|
|
4638
|
+
/** Project-scoped model service ids resolved when publishing voice declarations. */
|
|
4639
|
+
voiceModelServiceRefs: import_zod4.z.object({
|
|
4640
|
+
input: LlmProviderConfigPublicIdSchema.optional(),
|
|
4641
|
+
output: LlmProviderConfigPublicIdSchema.optional()
|
|
4642
|
+
}).strict().optional(),
|
|
4609
4643
|
/**
|
|
4610
4644
|
* promote 门禁档位的冻结值(#4870 G1;字段本体 `PROMOTE_GATE_MODES` 见本文件
|
|
4611
4645
|
* 上方,agent.yaml 的声明面在 `agenthub-file-agent.ts` 两个 arm)。
|
|
@@ -4803,16 +4837,20 @@ var WorkloadManifestDefaultsSchema = import_zod4.z.object({
|
|
|
4803
4837
|
memory: WorkloadManifestMemorySchema.optional(),
|
|
4804
4838
|
/**
|
|
4805
4839
|
* Workload-level executor selection (#3668 D, spec
|
|
4806
|
-
* `pilot-v2-executor-identity.md` EXI-4): a format name
|
|
4840
|
+
* `pilot-v2-executor-identity.md` EXI-4, opened by D7): a format name
|
|
4807
4841
|
* (`ProfileExecutorSchema`), omitted for the default (`claude_code`).
|
|
4808
4842
|
* Frozen into the Revision snapshot's `executor` at publish time; a session
|
|
4809
|
-
* never falls back to this value (EXI-5).
|
|
4810
|
-
*
|
|
4843
|
+
* never falls back to this value (EXI-5). Rejected in repo-bound projects
|
|
4844
|
+
* like `memory` (#1876), so a `format: claude_code` file agent cannot be
|
|
4845
|
+
* silently re-executed as pi by console-side defaults.
|
|
4811
4846
|
*
|
|
4812
|
-
*
|
|
4813
|
-
*
|
|
4847
|
+
* Publishing a Revision whose (merged, normalised) executor format is
|
|
4848
|
+
* outside the publishable set is refused by EXP-1
|
|
4849
|
+
* (`EXECUTOR_NOT_PUBLISHABLE`, `applyRevisionManifest`); storing this key
|
|
4850
|
+
* itself is NOT gated — a dormant `executor: pi` defaults entry only
|
|
4851
|
+
* takes effect when some publish freezes it, and that publish is gated.
|
|
4814
4852
|
*/
|
|
4815
|
-
executor:
|
|
4853
|
+
executor: ProfileExecutorSchema.optional()
|
|
4816
4854
|
}).strict().superRefine(assertMcpBindingFieldsExclusive);
|
|
4817
4855
|
var WORKLOAD_MANIFEST_UI_DISPLAY_NAME_MAX_LENGTH = 255;
|
|
4818
4856
|
var WORKLOAD_MANIFEST_UI_PROMPT_PLACEHOLDER_MAX_LENGTH = 500;
|
|
@@ -9041,16 +9079,19 @@ var ManagedAgentProfileV1RuntimeSchema = import_zod60.z.object({
|
|
|
9041
9079
|
setupScript: WorkloadManifestSetupScriptSchema.optional(),
|
|
9042
9080
|
resources: SessionResourcesSchema.optional(),
|
|
9043
9081
|
agentPackage: AgentPackageSchema.optional(),
|
|
9044
|
-
// Executor selection (#3668 D, spec `pilot-v2-executor-identity.md` EXI-4
|
|
9045
|
-
// a format name (`ProfileExecutorSchema`), omitted for the
|
|
9046
|
-
// projected into `WorkloadManifestDefaults.executor` only when
|
|
9047
|
-
// Here in the strict `runtime` group rather than the
|
|
9048
|
-
// level: a server that does not know the key
|
|
9049
|
-
// of dropping the selection (why:
|
|
9082
|
+
// Executor selection (#3668 D, spec `pilot-v2-executor-identity.md` EXI-4,
|
|
9083
|
+
// opened by D7): a format name (`ProfileExecutorSchema`), omitted for the
|
|
9084
|
+
// default; projected into `WorkloadManifestDefaults.executor` only when
|
|
9085
|
+
// non-default. Here in the strict `runtime` group rather than the
|
|
9086
|
+
// passthrough `spec` top level: a server that does not know the key
|
|
9087
|
+
// rejects the profile instead of dropping the selection (why:
|
|
9088
|
+
// `.agents/notes/proposed/architecture/
|
|
9050
9089
|
// 2026-09-28-executor-keys-reserved-until-gates.md`).
|
|
9051
|
-
//
|
|
9052
|
-
//
|
|
9053
|
-
|
|
9090
|
+
// The profile→defaults projection and the form selector are #3843; the
|
|
9091
|
+
// publish-side gate (EXP) judging the frozen executor is already live in
|
|
9092
|
+
// `applyRevisionManifest`, so a pi selection cannot reach a Revision while
|
|
9093
|
+
// its publishable switch is off.
|
|
9094
|
+
executor: ProfileExecutorSchema.optional()
|
|
9054
9095
|
}).strict().superRefine((runtime, ctx) => {
|
|
9055
9096
|
if (!runtime.templateRef && !runtime.environmentRef) {
|
|
9056
9097
|
ctx.addIssue({
|
|
@@ -9632,14 +9673,32 @@ var VOICE_ERROR_CODES = {
|
|
|
9632
9673
|
REALTIME_UPSTREAM_CREDENTIAL_UNAVAILABLE: 503,
|
|
9633
9674
|
/** A project-credential call reached a gateway that did not declare `project-credential`. */
|
|
9634
9675
|
REALTIME_GATEWAY_INCAPABLE: 409,
|
|
9635
|
-
/**
|
|
9676
|
+
/** The project has no active GCP service-account model service. */
|
|
9636
9677
|
REALTIME_UPSTREAM_NOT_CONFIGURED: 409,
|
|
9678
|
+
/** More than one active GCP service-account model service; the project must archive the extras. */
|
|
9679
|
+
REALTIME_UPSTREAM_AMBIGUOUS: 409,
|
|
9680
|
+
/** Ticket preflight: Google refused the project's service account or its key cannot sign. */
|
|
9681
|
+
REALTIME_UPSTREAM_CREDENTIAL_INVALID: 409,
|
|
9682
|
+
/** The session's tenant database is not the catalog database holding the model service rows. */
|
|
9683
|
+
REALTIME_UPSTREAM_TENANT_UNSUPPORTED: 409,
|
|
9684
|
+
/** An unfinished call frozen before #4883 M6 (no model service): never served or re-resolved. */
|
|
9685
|
+
REALTIME_LEGACY_CALL_UNSUPPORTED: 409,
|
|
9686
|
+
/** The claim carried no browser origin. */
|
|
9687
|
+
REALTIME_ORIGIN_REQUIRED: 403,
|
|
9688
|
+
/** The origin is neither a platform portal origin nor configured by the project. */
|
|
9689
|
+
REALTIME_ORIGIN_FORBIDDEN: 403,
|
|
9690
|
+
/** Project or platform concurrent-call limit reached; the envelope's `scope` says which. */
|
|
9691
|
+
REALTIME_CAPACITY_EXCEEDED: 409,
|
|
9692
|
+
/** The platform concurrency store (realtime Redis) is unavailable; retry. */
|
|
9693
|
+
REALTIME_ADMISSION_UNAVAILABLE: 503,
|
|
9637
9694
|
/** `voice_turns_enabled` 关态时任何语音回合派发被拒(紧急停止;VT-1)。 */
|
|
9638
9695
|
VOICE_TURNS_DISABLED: 400,
|
|
9639
9696
|
/** 语音附件时长 >60 秒或大小 >2MB(VA-3,上限只在语音路径)。 */
|
|
9640
9697
|
VOICE_INPUT_TOO_LONG: 400,
|
|
9641
9698
|
/** 语音附件字节无法解析出时长(格式损坏 / 不识别)。与「超时长」分开,前端据此提示「录音格式无法识别」。 */
|
|
9642
9699
|
VOICE_AUDIO_UNREADABLE: 400,
|
|
9700
|
+
/** 所选语音服务不支持此输入音频格式。 */
|
|
9701
|
+
VOICE_INPUT_FORMAT_UNSUPPORTED: 400,
|
|
9643
9702
|
/** 转写调用上游(ModelGate)失败。 */
|
|
9644
9703
|
VOICE_TRANSCRIPTION_FAILED: 502,
|
|
9645
9704
|
/** 转写成功但产出的文本为空,无处派发。 */
|
|
@@ -11121,9 +11180,29 @@ var FileAgentLiveDefinitionSchema = import_zod77.z.object({
|
|
|
11121
11180
|
/** promote 门禁档位 —— 与 claude_code 臂同义同形(#4870 G1),理由见那一处注释。 */
|
|
11122
11181
|
promoteGate: PromoteGateModeSchema.optional()
|
|
11123
11182
|
}).strict();
|
|
11183
|
+
var FileAgentPiDefinitionSchema = import_zod77.z.object({
|
|
11184
|
+
apiVersion: import_zod77.z.literal(FILE_AGENT_API_VERSION),
|
|
11185
|
+
format: import_zod77.z.literal("pi"),
|
|
11186
|
+
model: WorkloadManifestModelSchema.optional(),
|
|
11187
|
+
/**
|
|
11188
|
+
* 自定义模型服务(D21 同款语义:平台注册名,join 解析成 `llmp_*` 冻进
|
|
11189
|
+
* `snapshot.llmProviderRef`)。它是执行器正交的**模型配置**字段——pi 是沙箱
|
|
11190
|
+
* agent,会话同样要求冻结一个模型服务(#3077 无回落通道),臂上没有它的
|
|
11191
|
+
* pi 文件 agent 除非 workload defaults 恰好有默认,否则结构性建不了会话。
|
|
11192
|
+
* CI 红过一次后补上(agenthub-cli `check --refs` 按三臂共面读该键)。
|
|
11193
|
+
*/
|
|
11194
|
+
modelService: FileAgentModelServiceNameSchema.optional(),
|
|
11195
|
+
memory: FileAgentMemorySchema.optional(),
|
|
11196
|
+
channels: WorkloadManifestChannelsSchema.optional(),
|
|
11197
|
+
pi: import_zod77.z.object({}).strict().optional(),
|
|
11198
|
+
voice: WorkloadManifestVoiceSchema.optional(),
|
|
11199
|
+
/** promote 门禁档位 —— 与其它臂同义同形(#4870 G1,门禁与执行器正交)。 */
|
|
11200
|
+
promoteGate: PromoteGateModeSchema.optional()
|
|
11201
|
+
}).strict();
|
|
11124
11202
|
var FileAgentDefinitionSchema = import_zod77.z.discriminatedUnion("format", [
|
|
11125
11203
|
FileAgentClaudeCodeDefinitionSchema,
|
|
11126
|
-
FileAgentLiveDefinitionSchema
|
|
11204
|
+
FileAgentLiveDefinitionSchema,
|
|
11205
|
+
FileAgentPiDefinitionSchema
|
|
11127
11206
|
]).superRefine((definition, ctx) => {
|
|
11128
11207
|
for (const violation of findRealtimeVoiceViolations(definition)) {
|
|
11129
11208
|
ctx.addIssue(__spreadValues({ code: import_zod77.z.ZodIssueCode.custom }, violation));
|
|
@@ -13083,7 +13162,7 @@ var EvalOnlineScoreRowSchema = import_zod83.z.object({
|
|
|
13083
13162
|
turnId: import_zod83.z.string().uuid().nullable(),
|
|
13084
13163
|
/**
|
|
13085
13164
|
* 会话级被评单元的生命周期 transition(进入回收流程那一次)——会话级幂等键
|
|
13086
|
-
* `(session_id, lifecycle_transition_id,
|
|
13165
|
+
* `(session_id, lifecycle_transition_id, grader_key)` 的成分(v2.22 起不含 config_version):
|
|
13087
13166
|
* 复活再回收产生新 transition,可再判一次而不被唯一索引挡掉(note §4.1 v2.13)。
|
|
13088
13167
|
* 轮级行为 NULL。
|
|
13089
13168
|
*/
|
|
@@ -13092,7 +13171,6 @@ var EvalOnlineScoreRowSchema = import_zod83.z.object({
|
|
|
13092
13171
|
agentRevisionId: import_zod83.z.string().uuid(),
|
|
13093
13172
|
graderRevisionId: import_zod83.z.string().uuid(),
|
|
13094
13173
|
graderSetDigest: import_zod83.z.string().min(1),
|
|
13095
|
-
configVersion: import_zod83.z.number().int(),
|
|
13096
13174
|
/** `<providerConfigId>:<judgeModel>` 复合(#4862 形态;worker 领任务时解析冻结)。非 llm 行为 NULL。 */
|
|
13097
13175
|
judgeIdentity: import_zod83.z.string().nullable(),
|
|
13098
13176
|
graderKey: import_zod83.z.string(),
|
|
@@ -13611,7 +13689,10 @@ var RealtimeCallClaimsSchema = import_zod87.z.object({
|
|
|
13611
13689
|
var RealtimeClaimRequestSchema = import_zod87.z.object({
|
|
13612
13690
|
ticket: VoiceTicketSchema,
|
|
13613
13691
|
callId: import_zod87.z.string().uuid().optional(),
|
|
13614
|
-
/**
|
|
13692
|
+
/**
|
|
13693
|
+
* Browser Origin seen at WebSocket upgrade. K4 gateways always send it: a control plane that
|
|
13694
|
+
* enforces origin refuses claims without it, and #4883 §8 keeps them paired with M4a+ planes.
|
|
13695
|
+
*/
|
|
13615
13696
|
origin: import_zod87.z.string().max(2048).optional()
|
|
13616
13697
|
}).strict();
|
|
13617
13698
|
var RealtimeCallRequestSchema = import_zod87.z.object({
|
|
@@ -13887,6 +13968,30 @@ var REALTIME_RECOVERY_REASONS = Object.freeze([
|
|
|
13887
13968
|
"response_incomplete",
|
|
13888
13969
|
"connection_interrupted"
|
|
13889
13970
|
]);
|
|
13971
|
+
var PILOT_PERMISSION_MODES = ["manual", "auto", "accept_edits", "bypass"];
|
|
13972
|
+
var PilotPermissionModeSchema = import_zod90.z.enum(PILOT_PERMISSION_MODES);
|
|
13973
|
+
var PilotPlanSegmentJobSchema = import_zod91.z.object({ tenantId: import_zod91.z.string().min(1), planId: import_zod91.z.string().uuid() }).strict();
|
|
13974
|
+
var PILOT_APPROVAL_TTL_MS = 10 * 60 * 1e3;
|
|
13975
|
+
var responseTarget = {
|
|
13976
|
+
messageId: import_zod91.z.string().min(1).max(128),
|
|
13977
|
+
toolCallId: import_zod91.z.string().min(1).max(128)
|
|
13978
|
+
};
|
|
13979
|
+
var PilotPlanResponseSchema = import_zod91.z.discriminatedUnion("kind", [
|
|
13980
|
+
import_zod91.z.object(__spreadProps(__spreadValues({}, responseTarget), {
|
|
13981
|
+
kind: import_zod91.z.literal("approval"),
|
|
13982
|
+
approved: import_zod91.z.boolean(),
|
|
13983
|
+
reason: import_zod91.z.string().optional()
|
|
13984
|
+
})).strict(),
|
|
13985
|
+
import_zod91.z.object(__spreadProps(__spreadValues({}, responseTarget), {
|
|
13986
|
+
kind: import_zod91.z.literal("user_answer"),
|
|
13987
|
+
output: import_zod91.z.union([
|
|
13988
|
+
import_zod91.z.object({ skipped: import_zod91.z.literal(true) }).strict(),
|
|
13989
|
+
import_zod91.z.object({
|
|
13990
|
+
answers: import_zod91.z.array(import_zod91.z.object({ text: import_zod91.z.string(), value: import_zod91.z.string() }).strict()).min(1).max(3)
|
|
13991
|
+
}).strict()
|
|
13992
|
+
])
|
|
13993
|
+
})).strict()
|
|
13994
|
+
]);
|
|
13890
13995
|
|
|
13891
13996
|
// src/errors.ts
|
|
13892
13997
|
var PilotPlatformApiError = class extends Error {
|
|
@@ -14016,7 +14121,7 @@ var BindingsResource = class {
|
|
|
14016
14121
|
};
|
|
14017
14122
|
|
|
14018
14123
|
// src/resources/environments.ts
|
|
14019
|
-
var
|
|
14124
|
+
var import_zod92 = require("zod");
|
|
14020
14125
|
|
|
14021
14126
|
// src/agent-vocab.ts
|
|
14022
14127
|
function resolveExclusiveAlias(canonicalKey, canonicalValue, aliasKey, aliasValue) {
|
|
@@ -14040,24 +14145,24 @@ function attachAgentAliases(data) {
|
|
|
14040
14145
|
}
|
|
14041
14146
|
|
|
14042
14147
|
// src/resources/environments.ts
|
|
14043
|
-
var EnvironmentVersionHistorySchema =
|
|
14044
|
-
versions:
|
|
14045
|
-
repoints:
|
|
14148
|
+
var EnvironmentVersionHistorySchema = import_zod92.z.object({
|
|
14149
|
+
versions: import_zod92.z.array(EnvironmentVersionSchema),
|
|
14150
|
+
repoints: import_zod92.z.array(EnvironmentRepointRecordSchema)
|
|
14046
14151
|
}).strict();
|
|
14047
|
-
var RepointedSlotResultSchema =
|
|
14048
|
-
workloadId:
|
|
14152
|
+
var RepointedSlotResultSchema = import_zod92.z.object({
|
|
14153
|
+
workloadId: import_zod92.z.string().uuid(),
|
|
14049
14154
|
stage: StageSchema,
|
|
14050
|
-
fromVersion:
|
|
14155
|
+
fromVersion: import_zod92.z.number().int().positive().nullable()
|
|
14051
14156
|
}).strict();
|
|
14052
|
-
var RepointEnvironmentResultSchema =
|
|
14053
|
-
toVersion:
|
|
14054
|
-
repointedSlotCount:
|
|
14055
|
-
repointedSlots:
|
|
14157
|
+
var RepointEnvironmentResultSchema = import_zod92.z.object({
|
|
14158
|
+
toVersion: import_zod92.z.number().int().positive(),
|
|
14159
|
+
repointedSlotCount: import_zod92.z.number().int().nonnegative(),
|
|
14160
|
+
repointedSlots: import_zod92.z.array(RepointedSlotResultSchema)
|
|
14056
14161
|
}).strict();
|
|
14057
|
-
var UpdateEnvironmentResultSchema =
|
|
14162
|
+
var UpdateEnvironmentResultSchema = import_zod92.z.object({
|
|
14058
14163
|
environment: EnvironmentSchema,
|
|
14059
|
-
createdVersion:
|
|
14060
|
-
repointedSlotCount:
|
|
14164
|
+
createdVersion: import_zod92.z.number().int().positive().nullable(),
|
|
14165
|
+
repointedSlotCount: import_zod92.z.number().int().nonnegative()
|
|
14061
14166
|
}).strict();
|
|
14062
14167
|
function attachAgentAliasesToEach(items) {
|
|
14063
14168
|
return items.map((item) => attachAgentAliases(item));
|
|
@@ -14455,14 +14560,14 @@ var McpDevTicketsResource = class {
|
|
|
14455
14560
|
};
|
|
14456
14561
|
|
|
14457
14562
|
// src/resources/memories.ts
|
|
14458
|
-
var
|
|
14563
|
+
var import_zod93 = require("zod");
|
|
14459
14564
|
var ListedMemorySchema = AgentMemorySchema.extend({
|
|
14460
|
-
createdAt:
|
|
14461
|
-
updatedAt:
|
|
14565
|
+
createdAt: import_zod93.z.string(),
|
|
14566
|
+
updatedAt: import_zod93.z.string()
|
|
14462
14567
|
});
|
|
14463
|
-
var ListMemoriesResponseSchema =
|
|
14464
|
-
items:
|
|
14465
|
-
nextCursor:
|
|
14568
|
+
var ListMemoriesResponseSchema = import_zod93.z.object({
|
|
14569
|
+
items: import_zod93.z.array(ListedMemorySchema),
|
|
14570
|
+
nextCursor: import_zod93.z.string().nullish()
|
|
14466
14571
|
});
|
|
14467
14572
|
function parseEnvelopeData2(envelope, routeLabel, schema) {
|
|
14468
14573
|
if (envelope?.data === void 0) {
|
|
@@ -14956,7 +15061,7 @@ var ProjectsResource = class {
|
|
|
14956
15061
|
};
|
|
14957
15062
|
|
|
14958
15063
|
// src/resources/sessions.ts
|
|
14959
|
-
var
|
|
15064
|
+
var import_zod94 = require("zod");
|
|
14960
15065
|
function normalizeSessionRequest(request) {
|
|
14961
15066
|
const { agentId, versionId, ...rest } = request;
|
|
14962
15067
|
const workloadId = resolveExclusiveAlias("workloadId", rest.workloadId, "agentId", agentId);
|
|
@@ -14981,48 +15086,48 @@ function normalizeSessionRequest(request) {
|
|
|
14981
15086
|
...revisionId !== void 0 ? { revisionId } : {}
|
|
14982
15087
|
};
|
|
14983
15088
|
}
|
|
14984
|
-
var ListSessionEventsEnvelopeSchema =
|
|
14985
|
-
data:
|
|
14986
|
-
events:
|
|
15089
|
+
var ListSessionEventsEnvelopeSchema = import_zod94.z.object({
|
|
15090
|
+
data: import_zod94.z.object({
|
|
15091
|
+
events: import_zod94.z.array(SessionEventSchema),
|
|
14987
15092
|
// Optional so a pre-P1 server's `{ events }` body still parses.
|
|
14988
|
-
hasMore:
|
|
14989
|
-
cursorReset:
|
|
15093
|
+
hasMore: import_zod94.z.boolean().optional(),
|
|
15094
|
+
cursorReset: import_zod94.z.boolean().optional()
|
|
14990
15095
|
})
|
|
14991
15096
|
});
|
|
14992
|
-
var TurnListEnvelopeSchema =
|
|
14993
|
-
var TurnEnvelopeSchema =
|
|
14994
|
-
var TurnRecordingEnvelopeSchema =
|
|
14995
|
-
var TurnAudioEnvelopeSchema =
|
|
14996
|
-
var DispatchOutcomeEnvelopeSchema =
|
|
14997
|
-
data:
|
|
15097
|
+
var TurnListEnvelopeSchema = import_zod94.z.object({ data: TurnListResponseDataSchema });
|
|
15098
|
+
var TurnEnvelopeSchema = import_zod94.z.object({ data: TurnSchema });
|
|
15099
|
+
var TurnRecordingEnvelopeSchema = import_zod94.z.object({ data: TurnRecordingResponseSchema });
|
|
15100
|
+
var TurnAudioEnvelopeSchema = import_zod94.z.object({ data: TurnAudioResponseSchema });
|
|
15101
|
+
var DispatchOutcomeEnvelopeSchema = import_zod94.z.object({
|
|
15102
|
+
data: import_zod94.z.object({ outcome: DispatchOutcomeSchema })
|
|
14998
15103
|
});
|
|
14999
|
-
var SendTurnTurnRefEnvelopeSchema =
|
|
15000
|
-
data:
|
|
15001
|
-
turn:
|
|
15104
|
+
var SendTurnTurnRefEnvelopeSchema = import_zod94.z.object({
|
|
15105
|
+
data: import_zod94.z.object({
|
|
15106
|
+
turn: import_zod94.z.object({ turnId: import_zod94.z.string(), status: TurnStatusSchema }).optional()
|
|
15002
15107
|
})
|
|
15003
15108
|
});
|
|
15004
|
-
var SessionRuntimeBindingEnvelopeSchema =
|
|
15005
|
-
runtimeBinding:
|
|
15006
|
-
});
|
|
15007
|
-
var DeliveryResultEnvelopeSchema =
|
|
15008
|
-
data:
|
|
15009
|
-
});
|
|
15010
|
-
var SessionArtifactsListEnvelopeSchema =
|
|
15011
|
-
data:
|
|
15012
|
-
items:
|
|
15013
|
-
|
|
15014
|
-
id:
|
|
15015
|
-
artifactId:
|
|
15016
|
-
filename:
|
|
15017
|
-
path:
|
|
15018
|
-
contentType:
|
|
15019
|
-
size:
|
|
15020
|
-
turnId:
|
|
15021
|
-
messageId:
|
|
15109
|
+
var SessionRuntimeBindingEnvelopeSchema = import_zod94.z.object({
|
|
15110
|
+
runtimeBinding: import_zod94.z.object({ id: import_zod94.z.string().min(1) }).nullish()
|
|
15111
|
+
});
|
|
15112
|
+
var DeliveryResultEnvelopeSchema = import_zod94.z.object({
|
|
15113
|
+
data: import_zod94.z.object({ delivery: SessionDeliveryEnvelopeSchema.nullable() })
|
|
15114
|
+
});
|
|
15115
|
+
var SessionArtifactsListEnvelopeSchema = import_zod94.z.object({
|
|
15116
|
+
data: import_zod94.z.object({
|
|
15117
|
+
items: import_zod94.z.array(
|
|
15118
|
+
import_zod94.z.object({
|
|
15119
|
+
id: import_zod94.z.string(),
|
|
15120
|
+
artifactId: import_zod94.z.string().optional(),
|
|
15121
|
+
filename: import_zod94.z.string(),
|
|
15122
|
+
path: import_zod94.z.string(),
|
|
15123
|
+
contentType: import_zod94.z.string(),
|
|
15124
|
+
size: import_zod94.z.number(),
|
|
15125
|
+
turnId: import_zod94.z.string().optional(),
|
|
15126
|
+
messageId: import_zod94.z.string().optional()
|
|
15022
15127
|
})
|
|
15023
15128
|
),
|
|
15024
|
-
partial:
|
|
15025
|
-
skippedBundles:
|
|
15129
|
+
partial: import_zod94.z.boolean().optional(),
|
|
15130
|
+
skippedBundles: import_zod94.z.array(import_zod94.z.object({ artifactId: import_zod94.z.string(), reason: import_zod94.z.string() })).optional()
|
|
15026
15131
|
})
|
|
15027
15132
|
});
|
|
15028
15133
|
var SessionTurnsResource = class {
|
|
@@ -16034,9 +16139,9 @@ function isTurnAudioNotFound(error) {
|
|
|
16034
16139
|
return error instanceof PilotPlatformApiError && error.code === "TURN_AUDIO_NOT_FOUND";
|
|
16035
16140
|
}
|
|
16036
16141
|
var TURN_AUDIO_VISIBILITY_GRACE_MS = 3e4;
|
|
16037
|
-
var SessionRevivalStateSchema =
|
|
16038
|
-
pendingRevival:
|
|
16039
|
-
session:
|
|
16142
|
+
var SessionRevivalStateSchema = import_zod94.z.object({
|
|
16143
|
+
pendingRevival: import_zod94.z.object({ attemptId: import_zod94.z.string() }).nullish(),
|
|
16144
|
+
session: import_zod94.z.object({ lifecyclePhase: import_zod94.z.string().nullish() }).loose().optional()
|
|
16040
16145
|
});
|
|
16041
16146
|
async function isRevivalPending(sessions, sessionId, signal) {
|
|
16042
16147
|
let snapshot;
|
|
@@ -16115,11 +16220,11 @@ function sleep(ms, signal) {
|
|
|
16115
16220
|
}
|
|
16116
16221
|
|
|
16117
16222
|
// src/resources/workloads.ts
|
|
16118
|
-
var
|
|
16119
|
-
var CanaryPromoteResponseSchema =
|
|
16223
|
+
var import_zod95 = require("zod");
|
|
16224
|
+
var CanaryPromoteResponseSchema = import_zod95.z.object({
|
|
16120
16225
|
slot: StageSlotViewSchema,
|
|
16121
|
-
fromRevisionId:
|
|
16122
|
-
toRevisionId:
|
|
16226
|
+
fromRevisionId: import_zod95.z.string().uuid(),
|
|
16227
|
+
toRevisionId: import_zod95.z.string().uuid()
|
|
16123
16228
|
}).strict();
|
|
16124
16229
|
var WorkloadStageCanaryResource = class {
|
|
16125
16230
|
constructor(client) {
|