@roll-agent/protocol 0.5.0 → 0.6.1
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/README.md +15 -5
- package/dist/index.d.ts +36 -0
- package/dist/index.js +53 -4
- package/fixtures/v1.4/invalid-attachment-stage-sha256-request.json +14 -0
- package/fixtures/v1.4/invalid-turn-start-too-many-attachments-request.json +24 -0
- package/fixtures/v1.4/valid-attachment-chunk-request.json +12 -0
- package/fixtures/v1.4/valid-attachment-commit-request.json +10 -0
- package/fixtures/v1.4/valid-attachment-commit-response.json +16 -0
- package/fixtures/v1.4/valid-attachment-release-request.json +10 -0
- package/fixtures/v1.4/valid-attachment-stage-request.json +14 -0
- package/fixtures/v1.4/valid-attachment-stage-response.json +8 -0
- package/fixtures/v1.4/valid-initialize-response.json +34 -0
- package/fixtures/v1.4/valid-runtime-durable-event-notification.json +20 -0
- package/fixtures/v1.4/valid-thread-snapshot-attachment-part-response.json +44 -0
- package/fixtures/v1.4/valid-turn-start-with-attachments-request.json +14 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -86,22 +86,23 @@ function handleEvent(event: RuntimeEventEnvelopeV13): void {
|
|
|
86
86
|
|
|
87
87
|
- `@roll-agent/protocol/schema` 与 `@roll-agent/protocol/schema/latest`:最新版本
|
|
88
88
|
JSON Schema Draft 2020-12 根 Schema;
|
|
89
|
-
- `@roll-agent/protocol/schema/1.3`、`/1.2`、`/1.1`、`/1.0`:严格按协商版本隔离的 Schema;
|
|
89
|
+
- `@roll-agent/protocol/schema/1.4`、`/1.3`、`/1.2`、`/1.1`、`/1.0`:严格按协商版本隔离的 Schema;
|
|
90
|
+
- `@roll-agent/protocol/fixtures/v1.4/*`:Protocol 1.4 attachment / turn.start / snapshot fixtures;
|
|
90
91
|
- `@roll-agent/protocol/fixtures/v1.3/*`:Protocol 1.3 durable event/replay fixtures;
|
|
91
92
|
- `@roll-agent/protocol/fixtures/v1/*`:冻结的 1.1/1.0 跨语言有效/无效消息 fixtures。
|
|
92
93
|
- `@roll-agent/protocol/fixtures/v1.2/*`:Protocol 1.2 capability/interaction fixtures。
|
|
93
94
|
|
|
94
95
|
协议版本与 npm 包版本相互独立。`RUNTIME_PROTOCOL_VERSION` 表示这个包提供的最新 wire
|
|
95
96
|
schema,并不代表调用方已实现对应 Client 能力。当前支持顺序为
|
|
96
|
-
`["1.3", "1.2", "1.1", "1.0"]`。`initialize` 请求保持旧 strict 形状;协商到 `"1.2"
|
|
97
|
-
或 `"1.
|
|
97
|
+
`["1.4", "1.3", "1.2", "1.1", "1.0"]`。`initialize` 请求保持旧 strict 形状;协商到 `"1.2"`、
|
|
98
|
+
`"1.3"` 或 `"1.4"` 后,
|
|
98
99
|
Client 必须用 `client.capabilities.set` 提交单调 `revision` 与当前 Handler methods,Runtime
|
|
99
100
|
返回 registry 交集后才进入 interaction-ready。ACK 可以为空或为请求集的任意子集,顺序按
|
|
100
101
|
Runtime registry;Client 必须按集合语义处理。未知的未来 method 名可安全发送但不会被接受。
|
|
101
102
|
|
|
102
|
-
广告 `"1.3"` 同时声明 Client 能接收至少 `17 MiB` 的单个 Runtime→Client NDJSON 帧:
|
|
103
|
+
广告 `"1.4"` 或 `"1.3"` 同时声明 Client 能接收至少 `17 MiB` 的单个 Runtime→Client NDJSON 帧:
|
|
103
104
|
durable record 的绝对上限为 `16 MiB`,额外 1 MiB 留给 envelope 与 JSON-RPC 元数据。本地
|
|
104
|
-
入站预算低于 17 MiB 的 Client
|
|
105
|
+
入站预算低于 17 MiB 的 Client 必须同时省略 `"1.4"` 与 `"1.3"`。这不会扩大 Client→Runtime 出站额度;
|
|
105
106
|
初始化后的出站上限仍取本地预算与 Runtime 返回的 `limits.maxFrameBytes` 的较小值。
|
|
106
107
|
官方 Node 恢复管理器的默认 replay 暂存窗口为 10,000 条 / 32 MiB。
|
|
107
108
|
|
|
@@ -162,6 +163,15 @@ Protocol `"1.0"` / `"1.1"` 的 strict 顶层结构不变,旧 GUI 可以继续
|
|
|
162
163
|
时才向用户展示风险 `reason`;仅因无法证明安全而复用 `destructiveHint` 的 `unknown`
|
|
163
164
|
命令不会显示“破坏性操作”。GUI 在 `reason` 缺失时应使用中性提示或直接省略。
|
|
164
165
|
|
|
166
|
+
文件编辑类审批(`edit_file` / `write_file`)的变更预览位于 `approval.preview.diff`,形状为
|
|
167
|
+
`fileChangeDiffSchema`(`path`、`change: "create" | "modify"`、`added`、`removed`、`hunks`、可选的
|
|
168
|
+
`unified` 文本、`truncated`);`getApprovalDiffPreview()` 完成校验。写入成功后的
|
|
169
|
+
`tool.completed.display` 为 `{ text, diff }` 对象(`fileChangeDisplaySchema`),`getFileChangeDisplay()`
|
|
170
|
+
读取;`text` 是与旧版本一致的人类可读摘要。`operationView.display`(`thread.snapshot` /
|
|
171
|
+
`operation.get`)沿用台账信封 `{ version, encoding, value }`,`value` 才是同一 `{ text, diff }` 对象,
|
|
172
|
+
读取时传 `display.value`。两者同样刻意放在既有 JSON 槽位内:strict 顶层结构不变,旧客户端把它们当
|
|
173
|
+
普通 JSON 忽略;`unified` 缺席表示只有统计(超大文件),`truncated: true` 表示正文按上限截断。
|
|
174
|
+
|
|
165
175
|
## 文档
|
|
166
176
|
|
|
167
177
|
- [Runtime Protocol v1 参考](https://github.com/steveoon/roll-agent/blob/main/docs/runtime-protocol-v1-reference.md)
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,10 @@ export declare const RUNTIME_V13_RECOVERY_SNAPSHOT_METADATA_MAX_CHARS = 1024;
|
|
|
22
22
|
export declare const RUNTIME_V13_RECOVERY_SNAPSHOT_TIMESTAMP_MAX_CHARS = 64;
|
|
23
23
|
export declare const APPROVAL_EXPLANATION_PREVIEW_KEY: "explanation";
|
|
24
24
|
export declare const APPROVAL_EXPLANATION_MAX_CHARS = 100;
|
|
25
|
+
export declare const APPROVAL_DIFF_PREVIEW_KEY: "diff";
|
|
26
|
+
export declare const FILE_CHANGE_DIFF_PATH_MAX_CHARS = 4096;
|
|
27
|
+
export declare const FILE_CHANGE_DIFF_UNIFIED_MAX_CHARS = 20000;
|
|
28
|
+
export declare const FILE_CHANGE_KINDS: readonly ["create", "modify"];
|
|
25
29
|
export declare const CLIENT_CAPABILITY_METHOD_MAX_COUNT = 64;
|
|
26
30
|
export declare const CLIENT_CAPABILITY_METHOD_MAX_CHARS = 100;
|
|
27
31
|
export declare const USER_INPUT_CONTROL_MAX_COUNT = 16;
|
|
@@ -277,6 +281,33 @@ export declare const runtimeInteractionMetadataSchema: z.ZodReadonly<z.ZodObject
|
|
|
277
281
|
}>;
|
|
278
282
|
}, z.core.$strict>>;
|
|
279
283
|
export declare const approvalExplanationSchema: z.ZodString;
|
|
284
|
+
export declare const fileChangeDiffSchema: z.ZodReadonly<z.ZodObject<{
|
|
285
|
+
path: z.ZodString;
|
|
286
|
+
change: z.ZodEnum<{
|
|
287
|
+
create: "create";
|
|
288
|
+
modify: "modify";
|
|
289
|
+
}>;
|
|
290
|
+
added: z.ZodNumber;
|
|
291
|
+
removed: z.ZodNumber;
|
|
292
|
+
hunks: z.ZodNumber;
|
|
293
|
+
unified: z.ZodOptional<z.ZodString>;
|
|
294
|
+
truncated: z.ZodBoolean;
|
|
295
|
+
}, z.core.$strip>>;
|
|
296
|
+
export declare const fileChangeDisplaySchema: z.ZodReadonly<z.ZodObject<{
|
|
297
|
+
text: z.ZodString;
|
|
298
|
+
diff: z.ZodReadonly<z.ZodObject<{
|
|
299
|
+
path: z.ZodString;
|
|
300
|
+
change: z.ZodEnum<{
|
|
301
|
+
create: "create";
|
|
302
|
+
modify: "modify";
|
|
303
|
+
}>;
|
|
304
|
+
added: z.ZodNumber;
|
|
305
|
+
removed: z.ZodNumber;
|
|
306
|
+
hunks: z.ZodNumber;
|
|
307
|
+
unified: z.ZodOptional<z.ZodString>;
|
|
308
|
+
truncated: z.ZodBoolean;
|
|
309
|
+
}, z.core.$strip>>;
|
|
310
|
+
}, z.core.$strip>>;
|
|
280
311
|
export type ThreadId = z.infer<typeof threadIdSchema>;
|
|
281
312
|
export type TurnId = z.infer<typeof turnIdSchema>;
|
|
282
313
|
export type ApprovalId = z.infer<typeof approvalIdSchema>;
|
|
@@ -13294,6 +13325,9 @@ export type UserInputResult = z.infer<typeof userInputResultSchema>;
|
|
|
13294
13325
|
/** A submitted result whose values were correlated and ordered against the original form. */
|
|
13295
13326
|
export type NormalizedUserInputResult = UserInputResult;
|
|
13296
13327
|
export type ApprovalExplanation = z.infer<typeof approvalExplanationSchema>;
|
|
13328
|
+
export type FileChangeKind = (typeof FILE_CHANGE_KINDS)[number];
|
|
13329
|
+
export type FileChangeDiff = z.infer<typeof fileChangeDiffSchema>;
|
|
13330
|
+
export type FileChangeDisplay = z.infer<typeof fileChangeDisplaySchema>;
|
|
13297
13331
|
export type ActiveTurn = z.infer<typeof activeTurnSchema>;
|
|
13298
13332
|
export type ActiveTurnV11 = z.infer<typeof activeTurnV11Schema>;
|
|
13299
13333
|
export type ActiveTurnV12 = z.infer<typeof activeTurnV12Schema>;
|
|
@@ -13317,6 +13351,8 @@ export declare function isRuntimeMethodAvailable<TVersion extends RuntimeProtoco
|
|
|
13317
13351
|
export declare function isRuntimeServerRequestMethodAvailable<TVersion extends RuntimeProtocolVersion>(version: TVersion, method: string): method is RuntimeServerRequestMethodForVersion<TVersion>;
|
|
13318
13352
|
export declare function projectClientCapabilitiesSetResult(value: unknown): ClientCapabilitiesSetResult;
|
|
13319
13353
|
export declare function getApprovalExplanation(approval: Pick<PendingApproval, "preview">): ApprovalExplanation | undefined;
|
|
13354
|
+
export declare function getApprovalDiffPreview(approval: Pick<PendingApproval, "preview">): FileChangeDiff | undefined;
|
|
13355
|
+
export declare function getFileChangeDisplay(display: unknown): FileChangeDisplay | undefined;
|
|
13320
13356
|
/**
|
|
13321
13357
|
* Correlates a structurally valid Client result with the original form and returns values in
|
|
13322
13358
|
* form definition order. Unknown, duplicate, missing or type-incompatible values are rejected.
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,10 @@ export const RUNTIME_V13_RECOVERY_SNAPSHOT_METADATA_MAX_CHARS = 1_024;
|
|
|
30
30
|
export const RUNTIME_V13_RECOVERY_SNAPSHOT_TIMESTAMP_MAX_CHARS = 64;
|
|
31
31
|
export const APPROVAL_EXPLANATION_PREVIEW_KEY = "explanation";
|
|
32
32
|
export const APPROVAL_EXPLANATION_MAX_CHARS = 100;
|
|
33
|
+
export const APPROVAL_DIFF_PREVIEW_KEY = "diff";
|
|
34
|
+
export const FILE_CHANGE_DIFF_PATH_MAX_CHARS = 4_096;
|
|
35
|
+
export const FILE_CHANGE_DIFF_UNIFIED_MAX_CHARS = 20_000;
|
|
36
|
+
export const FILE_CHANGE_KINDS = ["create", "modify"];
|
|
33
37
|
export const CLIENT_CAPABILITY_METHOD_MAX_COUNT = 64;
|
|
34
38
|
export const CLIENT_CAPABILITY_METHOD_MAX_CHARS = 100;
|
|
35
39
|
export const USER_INPUT_CONTROL_MAX_COUNT = 16;
|
|
@@ -125,6 +129,19 @@ export const REQUIRED_RUNTIME_SERVER_REQUEST_METHODS_BY_VERSION = {
|
|
|
125
129
|
export function getRuntimeProtocolCapabilities(version) {
|
|
126
130
|
return RUNTIME_PROTOCOL_CAPABILITIES[version];
|
|
127
131
|
}
|
|
132
|
+
const RUNTIME_SERVER_REQUEST_WIRE_SHAPES = {
|
|
133
|
+
interaction: "interaction",
|
|
134
|
+
legacy: "legacy",
|
|
135
|
+
};
|
|
136
|
+
function resolveRuntimeServerRequestWireShape(version) {
|
|
137
|
+
const capabilities = getRuntimeProtocolCapabilities(version);
|
|
138
|
+
if (!capabilities.serverRequests) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
return capabilities.serverRequestCapabilityNegotiation
|
|
142
|
+
? RUNTIME_SERVER_REQUEST_WIRE_SHAPES.interaction
|
|
143
|
+
: RUNTIME_SERVER_REQUEST_WIRE_SHAPES.legacy;
|
|
144
|
+
}
|
|
128
145
|
export function isRuntimeServerRequestMethodRequired(version, method) {
|
|
129
146
|
return getRuntimeProtocolCapabilities(version).requiredServerRequestMethods.some((requiredMethod) => requiredMethod === method);
|
|
130
147
|
}
|
|
@@ -243,6 +260,23 @@ export const approvalExplanationSchema = z
|
|
|
243
260
|
.trim()
|
|
244
261
|
.min(1)
|
|
245
262
|
.max(APPROVAL_EXPLANATION_MAX_CHARS);
|
|
263
|
+
export const fileChangeDiffSchema = z
|
|
264
|
+
.object({
|
|
265
|
+
path: z.string().min(1).max(FILE_CHANGE_DIFF_PATH_MAX_CHARS),
|
|
266
|
+
change: z.enum(FILE_CHANGE_KINDS),
|
|
267
|
+
added: z.number().int().nonnegative(),
|
|
268
|
+
removed: z.number().int().nonnegative(),
|
|
269
|
+
hunks: z.number().int().nonnegative(),
|
|
270
|
+
unified: z.string().max(FILE_CHANGE_DIFF_UNIFIED_MAX_CHARS).optional(),
|
|
271
|
+
truncated: z.boolean(),
|
|
272
|
+
})
|
|
273
|
+
.readonly();
|
|
274
|
+
export const fileChangeDisplaySchema = z
|
|
275
|
+
.object({
|
|
276
|
+
text: z.string(),
|
|
277
|
+
diff: fileChangeDiffSchema,
|
|
278
|
+
})
|
|
279
|
+
.readonly();
|
|
246
280
|
function runtimeEventCursorParts(cursor) {
|
|
247
281
|
const parsed = runtimeEventCursorSchema.parse(cursor);
|
|
248
282
|
const [, eventLogId, threadSequence, eventId] = parsed.split(":");
|
|
@@ -1780,6 +1814,18 @@ export function getApprovalExplanation(approval) {
|
|
|
1780
1814
|
const parsed = approvalExplanationSchema.safeParse(preview[APPROVAL_EXPLANATION_PREVIEW_KEY]);
|
|
1781
1815
|
return parsed.success ? parsed.data : undefined;
|
|
1782
1816
|
}
|
|
1817
|
+
export function getApprovalDiffPreview(approval) {
|
|
1818
|
+
const preview = approval.preview;
|
|
1819
|
+
if (typeof preview !== "object" || preview === null || Array.isArray(preview)) {
|
|
1820
|
+
return undefined;
|
|
1821
|
+
}
|
|
1822
|
+
const parsed = fileChangeDiffSchema.safeParse(preview[APPROVAL_DIFF_PREVIEW_KEY]);
|
|
1823
|
+
return parsed.success ? parsed.data : undefined;
|
|
1824
|
+
}
|
|
1825
|
+
export function getFileChangeDisplay(display) {
|
|
1826
|
+
const parsed = fileChangeDisplaySchema.safeParse(display);
|
|
1827
|
+
return parsed.success ? parsed.data : undefined;
|
|
1828
|
+
}
|
|
1783
1829
|
function validateUserInputTextValue(control, value, path, addIssue) {
|
|
1784
1830
|
if (typeof value !== "string") {
|
|
1785
1831
|
addIssue(path, `${control.type} control requires a string value`);
|
|
@@ -2088,10 +2134,12 @@ export function parseRuntimeProtocolErrorDataForVersion(version, value) {
|
|
|
2088
2134
|
}
|
|
2089
2135
|
export function projectRuntimeServerRequestParams(version, method, value) {
|
|
2090
2136
|
const latest = parseRuntimeServerRequestParamsForVersion("1.3", method, value);
|
|
2091
|
-
|
|
2137
|
+
const shape = resolveRuntimeServerRequestWireShape(version);
|
|
2138
|
+
if (shape === RUNTIME_SERVER_REQUEST_WIRE_SHAPES.interaction) {
|
|
2092
2139
|
return latest;
|
|
2093
2140
|
}
|
|
2094
|
-
if (
|
|
2141
|
+
if (shape === RUNTIME_SERVER_REQUEST_WIRE_SHAPES.legacy &&
|
|
2142
|
+
method === RUNTIME_SERVER_REQUEST_METHODS.approvalRequest) {
|
|
2095
2143
|
const approval = approvalRequestParamsV12Schema.parse(latest);
|
|
2096
2144
|
return approvalRequestParamsV11Schema.parse({
|
|
2097
2145
|
threadId: approval.threadId,
|
|
@@ -2103,13 +2151,14 @@ export function projectRuntimeServerRequestParams(version, method, value) {
|
|
|
2103
2151
|
}
|
|
2104
2152
|
export function projectRuntimeServerRequestCancelParams(version, value) {
|
|
2105
2153
|
const input = runtimeServerRequestCancelProjectionInputSchema.parse(value);
|
|
2106
|
-
|
|
2154
|
+
const shape = resolveRuntimeServerRequestWireShape(version);
|
|
2155
|
+
if (shape === RUNTIME_SERVER_REQUEST_WIRE_SHAPES.interaction) {
|
|
2107
2156
|
return runtimeServerRequestCancelParamsV12Schema.parse({
|
|
2108
2157
|
interactionId: input.interactionId,
|
|
2109
2158
|
reason: input.reason,
|
|
2110
2159
|
});
|
|
2111
2160
|
}
|
|
2112
|
-
if (
|
|
2161
|
+
if (shape === RUNTIME_SERVER_REQUEST_WIRE_SHAPES.legacy) {
|
|
2113
2162
|
return runtimeServerRequestCancelParamsV11Schema.parse({
|
|
2114
2163
|
serverRequestId: input.serverRequestId,
|
|
2115
2164
|
...(input.approvalId === undefined ? {} : { approvalId: input.approvalId }),
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 26,
|
|
4
|
+
"method": "attachment.stage",
|
|
5
|
+
"params": {
|
|
6
|
+
"requestId": "00000000-0000-4000-8000-0000000000b1",
|
|
7
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
8
|
+
"fileName": "diagram.png",
|
|
9
|
+
"mediaType": "image/png",
|
|
10
|
+
"bytes": 2048,
|
|
11
|
+
"sha256": "not-a-sha256",
|
|
12
|
+
"source": "chunks"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 25,
|
|
4
|
+
"method": "turn.start",
|
|
5
|
+
"params": {
|
|
6
|
+
"requestId": "00000000-0000-4000-8000-0000000000b5",
|
|
7
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
8
|
+
"turnId": "00000000-0000-4000-8000-000000000003",
|
|
9
|
+
"input": {
|
|
10
|
+
"text": "too many",
|
|
11
|
+
"attachments": [
|
|
12
|
+
"00000000-0000-4000-8000-0000000000a1",
|
|
13
|
+
"00000000-0000-4000-8000-0000000000a2",
|
|
14
|
+
"00000000-0000-4000-8000-0000000000a3",
|
|
15
|
+
"00000000-0000-4000-8000-0000000000a4",
|
|
16
|
+
"00000000-0000-4000-8000-0000000000a5",
|
|
17
|
+
"00000000-0000-4000-8000-0000000000a6",
|
|
18
|
+
"00000000-0000-4000-8000-0000000000a7",
|
|
19
|
+
"00000000-0000-4000-8000-0000000000a8",
|
|
20
|
+
"00000000-0000-4000-8000-0000000000a9"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 21,
|
|
4
|
+
"method": "attachment.chunk",
|
|
5
|
+
"params": {
|
|
6
|
+
"requestId": "00000000-0000-4000-8000-0000000000b2",
|
|
7
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
8
|
+
"attachmentId": "00000000-0000-4000-8000-0000000000a1",
|
|
9
|
+
"sequence": 0,
|
|
10
|
+
"dataBase64": "iVBORw0KGgo="
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 22,
|
|
4
|
+
"result": {
|
|
5
|
+
"descriptor": {
|
|
6
|
+
"attachmentId": "00000000-0000-4000-8000-0000000000a1",
|
|
7
|
+
"fileName": "diagram.png",
|
|
8
|
+
"displayName": "diagram.png",
|
|
9
|
+
"mediaType": "image/png",
|
|
10
|
+
"bytes": 2048,
|
|
11
|
+
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
|
12
|
+
"source": "chunks",
|
|
13
|
+
"createdAt": "2026-08-21T12:00:00.000Z"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 20,
|
|
4
|
+
"method": "attachment.stage",
|
|
5
|
+
"params": {
|
|
6
|
+
"requestId": "00000000-0000-4000-8000-0000000000b1",
|
|
7
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
8
|
+
"fileName": "diagram.png",
|
|
9
|
+
"mediaType": "image/png",
|
|
10
|
+
"bytes": 2048,
|
|
11
|
+
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
|
12
|
+
"source": "chunks"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 1,
|
|
4
|
+
"result": {
|
|
5
|
+
"protocolVersion": "1.4",
|
|
6
|
+
"runtimeInstanceId": "00000000-0000-4000-8000-000000000001",
|
|
7
|
+
"server": {
|
|
8
|
+
"name": "roll-runtime",
|
|
9
|
+
"version": "0.18.0",
|
|
10
|
+
"runtimeVersion": "0.18.0"
|
|
11
|
+
},
|
|
12
|
+
"features": [
|
|
13
|
+
"thread-management",
|
|
14
|
+
"snapshots",
|
|
15
|
+
"turns",
|
|
16
|
+
"approvals",
|
|
17
|
+
"tool-streaming",
|
|
18
|
+
"reasoning-summary",
|
|
19
|
+
"operation-projection",
|
|
20
|
+
"process-local-sequence",
|
|
21
|
+
"attachments"
|
|
22
|
+
],
|
|
23
|
+
"limits": {
|
|
24
|
+
"maxFrameBytes": 4194304,
|
|
25
|
+
"maxPageSize": 500,
|
|
26
|
+
"eventReplay": true,
|
|
27
|
+
"idempotencyCacheEntries": 10000,
|
|
28
|
+
"maxAttachmentBytes": 16777216,
|
|
29
|
+
"maxAttachmentChunkBytes": 2097152,
|
|
30
|
+
"maxTurnAttachments": 8,
|
|
31
|
+
"maxStagedAttachments": 16
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"method": "runtime.event",
|
|
4
|
+
"params": {
|
|
5
|
+
"protocolVersion": "1.4",
|
|
6
|
+
"runtimeInstanceId": "00000000-0000-4000-8000-000000000001",
|
|
7
|
+
"sequence": 8,
|
|
8
|
+
"timestamp": "2026-07-30T12:00:00.000Z",
|
|
9
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
10
|
+
"turnId": "00000000-0000-4000-8000-000000000003",
|
|
11
|
+
"durability": "durable",
|
|
12
|
+
"eventId": "00000000-0000-4000-8000-000000000007",
|
|
13
|
+
"cursor": "rte1:00000000-0000-4000-8000-000000000008:0:00000000-0000-4000-8000-000000000007",
|
|
14
|
+
"event": {
|
|
15
|
+
"type": "message.completed",
|
|
16
|
+
"streamId": "00000000-0000-4000-8000-000000000004",
|
|
17
|
+
"text": "hello"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 27,
|
|
4
|
+
"result": {
|
|
5
|
+
"thread": {
|
|
6
|
+
"id": "00000000-0000-4000-8000-000000000002",
|
|
7
|
+
"title": "Attachment transcript",
|
|
8
|
+
"model": "fixture-model",
|
|
9
|
+
"createdAt": "2026-08-21T12:00:00.000Z",
|
|
10
|
+
"updatedAt": "2026-08-21T12:00:00.000Z",
|
|
11
|
+
"messageCount": 1
|
|
12
|
+
},
|
|
13
|
+
"messages": {
|
|
14
|
+
"items": [
|
|
15
|
+
{
|
|
16
|
+
"sequence": 0,
|
|
17
|
+
"role": "user",
|
|
18
|
+
"createdAt": "2026-08-21T12:00:00.000Z",
|
|
19
|
+
"parts": [
|
|
20
|
+
{
|
|
21
|
+
"type": "text",
|
|
22
|
+
"text": "看看这张图"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "attachment",
|
|
26
|
+
"mediaType": "image/png",
|
|
27
|
+
"bytes": 2048,
|
|
28
|
+
"displayName": "diagram.png"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"nextBeforeSequence": null
|
|
34
|
+
},
|
|
35
|
+
"operations": {
|
|
36
|
+
"items": [],
|
|
37
|
+
"nextBeforeSequence": null
|
|
38
|
+
},
|
|
39
|
+
"pendingApprovals": [],
|
|
40
|
+
"pendingInteractions": [],
|
|
41
|
+
"transcriptCompleteness": "complete",
|
|
42
|
+
"eventCursor": null
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsonrpc": "2.0",
|
|
3
|
+
"id": 24,
|
|
4
|
+
"method": "turn.start",
|
|
5
|
+
"params": {
|
|
6
|
+
"requestId": "00000000-0000-4000-8000-0000000000b5",
|
|
7
|
+
"threadId": "00000000-0000-4000-8000-000000000002",
|
|
8
|
+
"turnId": "00000000-0000-4000-8000-000000000003",
|
|
9
|
+
"input": {
|
|
10
|
+
"text": "",
|
|
11
|
+
"attachments": ["00000000-0000-4000-8000-0000000000a1"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roll-agent/protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"./schema": "./dist/schema/roll-runtime-protocol-v1.schema.json",
|
|
19
19
|
"./schema/latest": "./dist/schema/roll-runtime-protocol-v1.schema.json",
|
|
20
|
+
"./schema/1.4": "./dist/schema/roll-runtime-protocol-v1.4.schema.json",
|
|
20
21
|
"./schema/1.3": "./dist/schema/roll-runtime-protocol-v1.3.schema.json",
|
|
21
22
|
"./schema/1.2": "./dist/schema/roll-runtime-protocol-v1.2.schema.json",
|
|
22
23
|
"./schema/1.1": "./dist/schema/roll-runtime-protocol-v1.1.schema.json",
|