@agent-phonon/protocol 0.2.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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/index.d.ts +24 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +24 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/json-schema/_index.json +3794 -0
  8. package/dist/json-schema/connect.hello.json +117 -0
  9. package/dist/json-schema/discovery.changed.json +190 -0
  10. package/dist/json-schema/discovery.get.json +183 -0
  11. package/dist/json-schema/discovery.list.json +182 -0
  12. package/dist/json-schema/document.prepare_upload.json +96 -0
  13. package/dist/json-schema/document.send.json +165 -0
  14. package/dist/json-schema/hook.fired.json +100 -0
  15. package/dist/json-schema/hook.resolve.json +96 -0
  16. package/dist/json-schema/interaction.cancel.json +48 -0
  17. package/dist/json-schema/interaction.request.json +376 -0
  18. package/dist/json-schema/interaction.response.json +68 -0
  19. package/dist/json-schema/project.create.json +89 -0
  20. package/dist/json-schema/project.get.json +76 -0
  21. package/dist/json-schema/project.git.deleteBranch.json +64 -0
  22. package/dist/json-schema/project.list.json +72 -0
  23. package/dist/json-schema/project.remove.json +69 -0
  24. package/dist/json-schema/project.worktree.create.json +88 -0
  25. package/dist/json-schema/project.worktree.list.json +77 -0
  26. package/dist/json-schema/project.worktree.remove.json +61 -0
  27. package/dist/json-schema/session.compress.json +72 -0
  28. package/dist/json-schema/session.create.json +128 -0
  29. package/dist/json-schema/session.inject.json +72 -0
  30. package/dist/json-schema/session.interrupt.json +58 -0
  31. package/dist/json-schema/session.list.json +127 -0
  32. package/dist/json-schema/session.send.json +132 -0
  33. package/dist/json-schema/session.status.json +94 -0
  34. package/dist/json-schema/session.switchModel.json +73 -0
  35. package/dist/json-schema/session.terminate.json +54 -0
  36. package/dist/json-schema/skill.install.json +171 -0
  37. package/dist/json-schema/skill.list.json +101 -0
  38. package/dist/json-schema/skill.uninstall.json +76 -0
  39. package/dist/json-schema/stream.ack.json +36 -0
  40. package/dist/json-schema/stream.event.json +381 -0
  41. package/dist/schemas/capabilities.d.ts +90 -0
  42. package/dist/schemas/capabilities.d.ts.map +1 -0
  43. package/dist/schemas/capabilities.js +59 -0
  44. package/dist/schemas/capabilities.js.map +1 -0
  45. package/dist/schemas/common.d.ts +66 -0
  46. package/dist/schemas/common.d.ts.map +1 -0
  47. package/dist/schemas/common.js +97 -0
  48. package/dist/schemas/common.js.map +1 -0
  49. package/dist/schemas/connect.d.ts +111 -0
  50. package/dist/schemas/connect.d.ts.map +1 -0
  51. package/dist/schemas/connect.js +46 -0
  52. package/dist/schemas/connect.js.map +1 -0
  53. package/dist/schemas/device.d.ts +221 -0
  54. package/dist/schemas/device.d.ts.map +1 -0
  55. package/dist/schemas/device.js +59 -0
  56. package/dist/schemas/device.js.map +1 -0
  57. package/dist/schemas/discovery.d.ts +892 -0
  58. package/dist/schemas/discovery.d.ts.map +1 -0
  59. package/dist/schemas/discovery.js +66 -0
  60. package/dist/schemas/discovery.js.map +1 -0
  61. package/dist/schemas/document.d.ts +351 -0
  62. package/dist/schemas/document.d.ts.map +1 -0
  63. package/dist/schemas/document.js +103 -0
  64. package/dist/schemas/document.js.map +1 -0
  65. package/dist/schemas/env.d.ts +265 -0
  66. package/dist/schemas/env.d.ts.map +1 -0
  67. package/dist/schemas/env.js +44 -0
  68. package/dist/schemas/env.js.map +1 -0
  69. package/dist/schemas/file.d.ts +274 -0
  70. package/dist/schemas/file.d.ts.map +1 -0
  71. package/dist/schemas/file.js +72 -0
  72. package/dist/schemas/file.js.map +1 -0
  73. package/dist/schemas/hook.d.ts +132 -0
  74. package/dist/schemas/hook.d.ts.map +1 -0
  75. package/dist/schemas/hook.js +58 -0
  76. package/dist/schemas/hook.js.map +1 -0
  77. package/dist/schemas/interaction.d.ts +1583 -0
  78. package/dist/schemas/interaction.d.ts.map +1 -0
  79. package/dist/schemas/interaction.js +112 -0
  80. package/dist/schemas/interaction.js.map +1 -0
  81. package/dist/schemas/jsonrpc.d.ts +314 -0
  82. package/dist/schemas/jsonrpc.d.ts.map +1 -0
  83. package/dist/schemas/jsonrpc.js +64 -0
  84. package/dist/schemas/jsonrpc.js.map +1 -0
  85. package/dist/schemas/methods.d.ts +3826 -0
  86. package/dist/schemas/methods.d.ts.map +1 -0
  87. package/dist/schemas/methods.js +311 -0
  88. package/dist/schemas/methods.js.map +1 -0
  89. package/dist/schemas/policy.d.ts +81 -0
  90. package/dist/schemas/policy.d.ts.map +1 -0
  91. package/dist/schemas/policy.js +66 -0
  92. package/dist/schemas/policy.js.map +1 -0
  93. package/dist/schemas/project.d.ts +506 -0
  94. package/dist/schemas/project.d.ts.map +1 -0
  95. package/dist/schemas/project.js +148 -0
  96. package/dist/schemas/project.js.map +1 -0
  97. package/dist/schemas/session.d.ts +730 -0
  98. package/dist/schemas/session.d.ts.map +1 -0
  99. package/dist/schemas/session.js +287 -0
  100. package/dist/schemas/session.js.map +1 -0
  101. package/dist/schemas/skill.d.ts +465 -0
  102. package/dist/schemas/skill.d.ts.map +1 -0
  103. package/dist/schemas/skill.js +103 -0
  104. package/dist/schemas/skill.js.map +1 -0
  105. package/dist/schemas/stream.d.ts +688 -0
  106. package/dist/schemas/stream.d.ts.map +1 -0
  107. package/dist/schemas/stream.js +133 -0
  108. package/dist/schemas/stream.js.map +1 -0
  109. package/package.json +52 -0
  110. package/src/index.ts +24 -0
  111. package/src/schemas/capabilities.ts +62 -0
  112. package/src/schemas/common.ts +119 -0
  113. package/src/schemas/connect.ts +50 -0
  114. package/src/schemas/device.ts +67 -0
  115. package/src/schemas/discovery.ts +80 -0
  116. package/src/schemas/document.ts +121 -0
  117. package/src/schemas/env.ts +60 -0
  118. package/src/schemas/file.ts +97 -0
  119. package/src/schemas/hook.ts +66 -0
  120. package/src/schemas/interaction.ts +135 -0
  121. package/src/schemas/jsonrpc.ts +80 -0
  122. package/src/schemas/methods.ts +414 -0
  123. package/src/schemas/policy.ts +71 -0
  124. package/src/schemas/project.ts +185 -0
  125. package/src/schemas/session.ts +336 -0
  126. package/src/schemas/skill.ts +121 -0
  127. package/src/schemas/stream.ts +149 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/schemas/methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqGxB,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6RV,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,OAAO,CAAC;AAC9C,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAEtD,uBAAuB;AACvB,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpF,uBAAuB;AACvB,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEpF,wBAAwB;AACxB,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAC9C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,OAAO,GACZ,QAAQ,CAAC,CAAC,CAAC,CAEb;AAED,wBAAwB;AACxB,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAC9C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,OAAO,GACZ,QAAQ,CAAC,CAAC,CAAC,CAEb;AAED,oBAAoB;AACpB,eAAO,MAAM,YAAY,EAA2B,UAAU,EAAE,CAAC"}
@@ -0,0 +1,311 @@
1
+ import { z } from "zod";
2
+ import { ConnectHelloParams, ConnectWelcomeResult, } from "./connect.js";
3
+ import { DiscoveryListParams, DiscoveryListResult, DiscoveryGetParams, DiscoveryGetResult, DiscoveryChangedParams, } from "./discovery.js";
4
+ import { SessionCreateParams, SessionCreateResult, SessionSendParams, SessionSendAck, SessionInjectParams, SessionInjectResult, SessionCompressParams, SessionCompressResult, SessionSwitchModelParams, SessionSwitchModelResult, SessionInterruptParams, SessionInterruptResult, SessionTerminateParams, SessionTerminateResult, SessionStatusParams, SessionStatusResult, SessionListParams, SessionListResult, } from "./session.js";
5
+ import { StreamEvent, StreamAckParams } from "./stream.js";
6
+ import { HookFiredParams, HookResolveParams, HookResolveResult, } from "./hook.js";
7
+ import { DocumentSendParams, DocumentSendResult, DocumentPrepareUploadParams, DocumentPrepareUploadResult } from "./document.js";
8
+ import { InteractionRequestParams, InteractionRequestResult, InteractionResponseParams, InteractionCancelParams, InteractionCancelResult, } from "./interaction.js";
9
+ import { ProjectCreateParams, ProjectCreateResult, ProjectListParams, ProjectListResult, ProjectGetParams, ProjectGetResult, ProjectRemoveParams, ProjectRemoveResult, WorktreeCreateParams, WorktreeCreateResult, WorktreeListParams, WorktreeListResult, WorktreeRemoveParams, WorktreeRemoveResult, GitDeleteBranchParams, GitDeleteBranchResult, } from "./project.js";
10
+ import { SkillInstallParams, SkillInstallResult, SkillUninstallParams, SkillUninstallResult, SkillListParams, SkillListResult, } from "./skill.js";
11
+ import { DeviceInfoParams, DeviceInfoResult, DeviceResourcesParams, DeviceResourcesResult } from "./device.js";
12
+ import { FileReadParams, FileReadResult, FileWriteParams, FileWriteResult, FileListParams, FileListResult, FileStatParams, FileStatResult, FileMkdirParams, FileMkdirResult, } from "./file.js";
13
+ import { EnvSetParams, EnvSetResult, EnvListParams, EnvListResult, EnvDeleteParams, EnvDeleteResult } from "./env.js";
14
+ /**
15
+ * 方法注册表(design 全协议的单一事实来源)。
16
+ *
17
+ * 每个方法声明:
18
+ * - direction: 谁是 requester
19
+ * s2p = server → phonon (服务端下发操作)
20
+ * p2s = phonon → server (设备上报结果/事件/发现)
21
+ * - kind: "request"(需响应)| "notification"(无响应)
22
+ * - params / result 的 zod schema
23
+ *
24
+ * core 与 client-sdk 都 import 本表,确保两端对齐、可机器校验。
25
+ */
26
+ const z_void = z.undefined();
27
+ export const METHODS = {
28
+ // --- 握手(phonon 拨出后先发)---
29
+ "connect.hello": {
30
+ direction: "p2s",
31
+ kind: "request",
32
+ params: ConnectHelloParams,
33
+ result: ConnectWelcomeResult,
34
+ },
35
+ // --- 设备级信息与可观测(server 查询)---
36
+ "device.info": {
37
+ direction: "s2p",
38
+ kind: "request",
39
+ params: DeviceInfoParams,
40
+ result: DeviceInfoResult,
41
+ },
42
+ "device.resources": {
43
+ direction: "s2p",
44
+ kind: "request",
45
+ params: DeviceResourcesParams,
46
+ result: DeviceResourcesResult,
47
+ },
48
+ // --- 发现(server 查询;phonon 主动推变更)---
49
+ "discovery.list": {
50
+ direction: "s2p",
51
+ kind: "request",
52
+ params: DiscoveryListParams,
53
+ result: DiscoveryListResult,
54
+ },
55
+ "discovery.get": {
56
+ direction: "s2p",
57
+ kind: "request",
58
+ params: DiscoveryGetParams,
59
+ result: DiscoveryGetResult,
60
+ },
61
+ "discovery.changed": {
62
+ direction: "p2s",
63
+ kind: "notification",
64
+ params: DiscoveryChangedParams,
65
+ result: z_void,
66
+ },
67
+ // --- session 原语(server 下发)---
68
+ "session.create": {
69
+ direction: "s2p",
70
+ kind: "request",
71
+ params: SessionCreateParams,
72
+ result: SessionCreateResult,
73
+ },
74
+ "session.send": {
75
+ direction: "s2p",
76
+ kind: "request",
77
+ params: SessionSendParams,
78
+ result: SessionSendAck,
79
+ },
80
+ "session.inject": {
81
+ direction: "s2p",
82
+ kind: "request",
83
+ params: SessionInjectParams,
84
+ result: SessionInjectResult,
85
+ },
86
+ "session.compress": {
87
+ direction: "s2p",
88
+ kind: "request",
89
+ params: SessionCompressParams,
90
+ result: SessionCompressResult,
91
+ },
92
+ "session.switchModel": {
93
+ direction: "s2p",
94
+ kind: "request",
95
+ params: SessionSwitchModelParams,
96
+ result: SessionSwitchModelResult,
97
+ },
98
+ "session.interrupt": {
99
+ direction: "s2p",
100
+ kind: "request",
101
+ params: SessionInterruptParams,
102
+ result: SessionInterruptResult,
103
+ },
104
+ "session.terminate": {
105
+ direction: "s2p",
106
+ kind: "request",
107
+ params: SessionTerminateParams,
108
+ result: SessionTerminateResult,
109
+ },
110
+ "session.status": {
111
+ direction: "s2p",
112
+ kind: "request",
113
+ params: SessionStatusParams,
114
+ result: SessionStatusResult,
115
+ },
116
+ "session.list": {
117
+ direction: "s2p",
118
+ kind: "request",
119
+ params: SessionListParams,
120
+ result: SessionListResult,
121
+ },
122
+ // --- 流式结果(phonon 上推;无响应)---
123
+ "stream.event": {
124
+ direction: "p2s",
125
+ kind: "notification",
126
+ params: StreamEvent,
127
+ result: z_void,
128
+ },
129
+ // --- 流式 ack(server 确认 seq,phonon 据此清 outbox,P0-4)---
130
+ "stream.ack": {
131
+ direction: "s2p",
132
+ kind: "notification",
133
+ params: StreamAckParams,
134
+ result: z_void,
135
+ },
136
+ // --- hook / HITL ---
137
+ "hook.fired": {
138
+ direction: "p2s",
139
+ kind: "request", // phonon 发起、阻塞等 server 裁决
140
+ params: HookFiredParams,
141
+ result: HookResolveResult,
142
+ },
143
+ "hook.resolve": {
144
+ direction: "s2p",
145
+ kind: "request",
146
+ params: HookResolveParams,
147
+ result: HookResolveResult,
148
+ },
149
+ // --- 文档交换(agent emit 指令 → phonon 读本地文件 → 上传,平面③ / D20)---
150
+ "document.send": {
151
+ direction: "p2s",
152
+ kind: "request",
153
+ params: DocumentSendParams,
154
+ result: DocumentSendResult,
155
+ },
156
+ "document.prepare_upload": {
157
+ direction: "p2s",
158
+ kind: "request", // 大文件凭证上传(P1-6)
159
+ params: DocumentPrepareUploadParams,
160
+ result: DocumentPrepareUploadResult,
161
+ },
162
+ // --- 人机交互(表单/卡片,agent主动或HITL发起,平面③ / D21)---
163
+ "interaction.request": {
164
+ direction: "p2s",
165
+ kind: "request", // blocking 时阻塞等人回填
166
+ params: InteractionRequestParams,
167
+ result: InteractionRequestResult,
168
+ },
169
+ "interaction.response": {
170
+ direction: "s2p",
171
+ kind: "notification", // 异步/非阻塞回填走这条
172
+ params: InteractionResponseParams,
173
+ result: z_void,
174
+ },
175
+ "interaction.cancel": {
176
+ direction: "s2p",
177
+ kind: "request", // 主动取消一个 pending 交互(P1-5)
178
+ params: InteractionCancelParams,
179
+ result: InteractionCancelResult,
180
+ },
181
+ // --- 项目管理(目录 + Git;server 下发,D23)---
182
+ "project.create": {
183
+ direction: "s2p",
184
+ kind: "request",
185
+ params: ProjectCreateParams,
186
+ result: ProjectCreateResult,
187
+ },
188
+ "project.list": {
189
+ direction: "s2p",
190
+ kind: "request",
191
+ params: ProjectListParams,
192
+ result: ProjectListResult,
193
+ },
194
+ "project.get": {
195
+ direction: "s2p",
196
+ kind: "request",
197
+ params: ProjectGetParams,
198
+ result: ProjectGetResult,
199
+ },
200
+ "project.remove": {
201
+ direction: "s2p",
202
+ kind: "request",
203
+ params: ProjectRemoveParams,
204
+ result: ProjectRemoveResult,
205
+ },
206
+ // --- worktree / git 子能力(D25)---
207
+ "project.worktree.create": {
208
+ direction: "s2p",
209
+ kind: "request",
210
+ params: WorktreeCreateParams,
211
+ result: WorktreeCreateResult,
212
+ },
213
+ "project.worktree.list": {
214
+ direction: "s2p",
215
+ kind: "request",
216
+ params: WorktreeListParams,
217
+ result: WorktreeListResult,
218
+ },
219
+ "project.worktree.remove": {
220
+ direction: "s2p",
221
+ kind: "request",
222
+ params: WorktreeRemoveParams,
223
+ result: WorktreeRemoveResult,
224
+ },
225
+ "project.git.deleteBranch": {
226
+ direction: "s2p",
227
+ kind: "request",
228
+ params: GitDeleteBranchParams,
229
+ result: GitDeleteBranchResult,
230
+ },
231
+ // --- 受控工作区文件读写(server 下发,project/worktree scoped)---
232
+ "file.read": {
233
+ direction: "s2p",
234
+ kind: "request",
235
+ params: FileReadParams,
236
+ result: FileReadResult,
237
+ },
238
+ "file.write": {
239
+ direction: "s2p",
240
+ kind: "request",
241
+ params: FileWriteParams,
242
+ result: FileWriteResult,
243
+ },
244
+ "file.list": {
245
+ direction: "s2p",
246
+ kind: "request",
247
+ params: FileListParams,
248
+ result: FileListResult,
249
+ },
250
+ "file.stat": {
251
+ direction: "s2p",
252
+ kind: "request",
253
+ params: FileStatParams,
254
+ result: FileStatResult,
255
+ },
256
+ "file.mkdir": {
257
+ direction: "s2p",
258
+ kind: "request",
259
+ params: FileMkdirParams,
260
+ result: FileMkdirResult,
261
+ },
262
+ // --- 环境变量配置(skill/agent 运行环境,默认脱敏)---
263
+ "env.set": {
264
+ direction: "s2p",
265
+ kind: "request",
266
+ params: EnvSetParams,
267
+ result: EnvSetResult,
268
+ },
269
+ "env.list": {
270
+ direction: "s2p",
271
+ kind: "request",
272
+ params: EnvListParams,
273
+ result: EnvListResult,
274
+ },
275
+ "env.delete": {
276
+ direction: "s2p",
277
+ kind: "request",
278
+ params: EnvDeleteParams,
279
+ result: EnvDeleteResult,
280
+ },
281
+ // --- skill 管理(给 agent 装/卸 skill,global|project 两级,D24)---
282
+ "skill.install": {
283
+ direction: "s2p",
284
+ kind: "request",
285
+ params: SkillInstallParams,
286
+ result: SkillInstallResult,
287
+ },
288
+ "skill.uninstall": {
289
+ direction: "s2p",
290
+ kind: "request",
291
+ params: SkillUninstallParams,
292
+ result: SkillUninstallResult,
293
+ },
294
+ "skill.list": {
295
+ direction: "s2p",
296
+ kind: "request",
297
+ params: SkillListParams,
298
+ result: SkillListResult,
299
+ },
300
+ };
301
+ /** 运行时校验某方法的 params。 */
302
+ export function parseParams(method, data) {
303
+ return METHODS[method].params.parse(data);
304
+ }
305
+ /** 运行时校验某方法的 result。 */
306
+ export function parseResult(method, data) {
307
+ return METHODS[method].result.parse(data);
308
+ }
309
+ /** 全部方法名(运行时数组)。 */
310
+ export const METHOD_NAMES = Object.keys(METHODS);
311
+ //# sourceMappingURL=methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/schemas/methods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * 本地安全策略(design D27 / review P0-1)。
4
+ *
5
+ * phonon 不做终端用户鉴权(那是服务端的事),但**必须有设备主人配置的本地授权边界**——
6
+ * 否则任意接入的 server 都能让本地 agent 读任意文件、装任意 skill、删 worktree。
7
+ *
8
+ * 这是「设备 policy」,不是「用户鉴权」。每个 tenant 一份,phonon 在执行前据此拦截。
9
+ * 这些是本地配置,不进 device→server 的线协议;放协议包是为了类型共享与校验。
10
+ */
11
+ /** 单个 tenant 的本地授权边界。 */
12
+ export declare const TenantPolicy: z.ZodObject<{
13
+ /** 允许操作的项目根目录白名单(绝对路径)。document/project 路径必须落在其下。 */
14
+ allowedProjectRoots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
15
+ /** 允许使用的 agent 白名单;空 = 不限制。 */
16
+ allowedAgents: z.ZodDefault<z.ZodArray<z.ZodBranded<z.ZodString, "AgentId">, "many">>;
17
+ /** 允许的方法白名单;空 = 全允许。用它可表达「只读租户」(只放查询类方法)。 */
18
+ allowedMethods: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
19
+ /** 是否允许全局 skill 安装(影响该 agent 所有项目,危险)。默认 false。 */
20
+ allowGlobalSkillInstall: z.ZodDefault<z.ZodBoolean>;
21
+ /** 是否允许从 url 安装 skill(供应链入口,危险)。默认 false。 */
22
+ allowUrlSkillInstall: z.ZodDefault<z.ZodBoolean>;
23
+ /** 是否允许物理删盘(project.remove deleteFiles / worktree force 等)。默认 false。 */
24
+ allowDeleteFiles: z.ZodDefault<z.ZodBoolean>;
25
+ /** document.send 是否允许发送项目/worktree 目录之外的文件。默认 false(project-scoped)。 */
26
+ allowExternalDocuments: z.ZodDefault<z.ZodBoolean>;
27
+ /** env.list reveal=true 是否允许返回环境变量明文。默认 false(只能脱敏查看)。 */
28
+ allowEnvReveal: z.ZodDefault<z.ZodBoolean>;
29
+ /** 单文件上传上限(字节);超出走 prepare_upload 或拒绝。 */
30
+ maxUploadBytes: z.ZodOptional<z.ZodNumber>;
31
+ /** 敏感路径黑名单(即使在 allowedProjectRoots 内也拒绝,如 .ssh/.aws/.env)。 */
32
+ denyPathPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ allowedProjectRoots: string[];
35
+ allowedAgents: (string & z.BRAND<"AgentId">)[];
36
+ allowedMethods: string[];
37
+ allowGlobalSkillInstall: boolean;
38
+ allowUrlSkillInstall: boolean;
39
+ allowDeleteFiles: boolean;
40
+ allowExternalDocuments: boolean;
41
+ allowEnvReveal: boolean;
42
+ denyPathPatterns: string[];
43
+ maxUploadBytes?: number | undefined;
44
+ }, {
45
+ allowedProjectRoots?: string[] | undefined;
46
+ allowedAgents?: string[] | undefined;
47
+ allowedMethods?: string[] | undefined;
48
+ allowGlobalSkillInstall?: boolean | undefined;
49
+ allowUrlSkillInstall?: boolean | undefined;
50
+ allowDeleteFiles?: boolean | undefined;
51
+ allowExternalDocuments?: boolean | undefined;
52
+ allowEnvReveal?: boolean | undefined;
53
+ maxUploadBytes?: number | undefined;
54
+ denyPathPatterns?: string[] | undefined;
55
+ }>;
56
+ export type TenantPolicy = z.infer<typeof TenantPolicy>;
57
+ /** policy 默认值(最严格:白名单空、写操作全关)。 */
58
+ export declare const DEFAULT_TENANT_POLICY: TenantPolicy;
59
+ /**
60
+ * 校验一个绝对路径是否落在某项目根白名单内(不含 deny 匹配)。
61
+ * 真实 glob/deny 匹配由 core 实现;这里给协议层一个轻量前缀检查骨架。
62
+ */
63
+ export declare function isPathUnderRoots(absPath: string, roots: readonly string[]): boolean;
64
+ /** policy 拒绝时的归一化结果(core 用,便于回 errPolicyDenied)。 */
65
+ export declare const PolicyDecision: z.ZodObject<{
66
+ allowed: z.ZodBoolean;
67
+ /** 拒绝原因(如 "path_outside_project" / "url_skill_disabled" / "delete_not_allowed")。 */
68
+ reason: z.ZodOptional<z.ZodString>;
69
+ /** 关联 projectId(若适用)。 */
70
+ projectId: z.ZodOptional<z.ZodBranded<z.ZodString, "ProjectId">>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ allowed: boolean;
73
+ reason?: string | undefined;
74
+ projectId?: (string & z.BRAND<"ProjectId">) | undefined;
75
+ }, {
76
+ allowed: boolean;
77
+ reason?: string | undefined;
78
+ projectId?: string | undefined;
79
+ }>;
80
+ export type PolicyDecision = z.infer<typeof PolicyDecision>;
81
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/schemas/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;GAQG;AAEH,yBAAyB;AACzB,eAAO,MAAM,YAAY;IACvB,qDAAqD;;IAErD,+BAA+B;;IAE/B,6CAA6C;;IAE7C,mDAAmD;;IAEnD,6CAA6C;;IAE7C,wEAAwE;;IAExE,wEAAwE;;IAExE,0DAA0D;;IAE1D,0CAA0C;;IAE1C,8DAA8D;;;;;;;;;;;;;;;;;;;;;;;;EAU9D,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,kCAAkC;AAClC,eAAO,MAAM,qBAAqB,EAAE,YAAqC,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAOnF;AAED,oDAAoD;AACpD,eAAO,MAAM,cAAc;;IAEzB,oFAAoF;;IAEpF,yBAAyB;;;;;;;;;;EAEzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import { AgentId, ProjectId } from "./common.js";
3
+ /**
4
+ * 本地安全策略(design D27 / review P0-1)。
5
+ *
6
+ * phonon 不做终端用户鉴权(那是服务端的事),但**必须有设备主人配置的本地授权边界**——
7
+ * 否则任意接入的 server 都能让本地 agent 读任意文件、装任意 skill、删 worktree。
8
+ *
9
+ * 这是「设备 policy」,不是「用户鉴权」。每个 tenant 一份,phonon 在执行前据此拦截。
10
+ * 这些是本地配置,不进 device→server 的线协议;放协议包是为了类型共享与校验。
11
+ */
12
+ /** 单个 tenant 的本地授权边界。 */
13
+ export const TenantPolicy = z.object({
14
+ /** 允许操作的项目根目录白名单(绝对路径)。document/project 路径必须落在其下。 */
15
+ allowedProjectRoots: z.array(z.string()).default([]),
16
+ /** 允许使用的 agent 白名单;空 = 不限制。 */
17
+ allowedAgents: z.array(AgentId).default([]),
18
+ /** 允许的方法白名单;空 = 全允许。用它可表达「只读租户」(只放查询类方法)。 */
19
+ allowedMethods: z.array(z.string()).default([]),
20
+ /** 是否允许全局 skill 安装(影响该 agent 所有项目,危险)。默认 false。 */
21
+ allowGlobalSkillInstall: z.boolean().default(false),
22
+ /** 是否允许从 url 安装 skill(供应链入口,危险)。默认 false。 */
23
+ allowUrlSkillInstall: z.boolean().default(false),
24
+ /** 是否允许物理删盘(project.remove deleteFiles / worktree force 等)。默认 false。 */
25
+ allowDeleteFiles: z.boolean().default(false),
26
+ /** document.send 是否允许发送项目/worktree 目录之外的文件。默认 false(project-scoped)。 */
27
+ allowExternalDocuments: z.boolean().default(false),
28
+ /** env.list reveal=true 是否允许返回环境变量明文。默认 false(只能脱敏查看)。 */
29
+ allowEnvReveal: z.boolean().default(false),
30
+ /** 单文件上传上限(字节);超出走 prepare_upload 或拒绝。 */
31
+ maxUploadBytes: z.number().int().positive().optional(),
32
+ /** 敏感路径黑名单(即使在 allowedProjectRoots 内也拒绝,如 .ssh/.aws/.env)。 */
33
+ denyPathPatterns: z.array(z.string()).default([
34
+ "**/.ssh/**",
35
+ "**/.aws/**",
36
+ "**/.env",
37
+ "**/.git/config",
38
+ "**/id_rsa*",
39
+ "**/*.pem",
40
+ "**/openclaw.json",
41
+ ]),
42
+ });
43
+ /** policy 默认值(最严格:白名单空、写操作全关)。 */
44
+ export const DEFAULT_TENANT_POLICY = TenantPolicy.parse({});
45
+ /**
46
+ * 校验一个绝对路径是否落在某项目根白名单内(不含 deny 匹配)。
47
+ * 真实 glob/deny 匹配由 core 实现;这里给协议层一个轻量前缀检查骨架。
48
+ */
49
+ export function isPathUnderRoots(absPath, roots) {
50
+ if (roots.length === 0)
51
+ return false;
52
+ const norm = absPath.replace(/\\/g, "/");
53
+ return roots.some((r) => {
54
+ const root = r.replace(/\\/g, "/").replace(/\/+$/, "");
55
+ return norm === root || norm.startsWith(root + "/");
56
+ });
57
+ }
58
+ /** policy 拒绝时的归一化结果(core 用,便于回 errPolicyDenied)。 */
59
+ export const PolicyDecision = z.object({
60
+ allowed: z.boolean(),
61
+ /** 拒绝原因(如 "path_outside_project" / "url_skill_disabled" / "delete_not_allowed")。 */
62
+ reason: z.string().optional(),
63
+ /** 关联 projectId(若适用)。 */
64
+ projectId: ProjectId.optional(),
65
+ });
66
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/schemas/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;GAQG;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,qDAAqD;IACrD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,+BAA+B;IAC/B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,6CAA6C;IAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,mDAAmD;IACnD,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnD,6CAA6C;IAC7C,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChD,wEAAwE;IACxE,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,wEAAwE;IACxE,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClD,0DAA0D;IAC1D,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,0CAA0C;IAC1C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,8DAA8D;IAC9D,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;QAC5C,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,gBAAgB;QAChB,YAAY;QACZ,UAAU;QACV,kBAAkB;KACnB,CAAC;CACH,CAAC,CAAC;AAGH,kCAAkC;AAClC,MAAM,CAAC,MAAM,qBAAqB,GAAiB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAwB;IACxE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,oFAAoF;IACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,yBAAyB;IACzB,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC"}