@ccmsg/protocol 1.19.0 → 1.21.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/README.md +2 -2
- package/package.json +1 -1
- package/src/attributes.ts +77 -52
- package/src/common/auth.ts +28 -28
- package/src/common/hello.ts +72 -34
- package/src/common/ping.ts +2 -2
- package/src/common/shutdown.ts +4 -4
- package/src/common/topics.ts +36 -21
- package/src/control/agents.ts +23 -4
- package/src/control/dump.ts +73 -66
- package/src/control/files.ts +24 -24
- package/src/control/instances.ts +21 -0
- package/src/control/kv.ts +6 -6
- package/src/control/launcher.ts +4 -4
- package/src/control/llm.ts +8 -8
- package/src/control/peers.ts +52 -68
- package/src/control/sandbox.ts +4 -4
- package/src/control/session-errors.ts +3 -3
- package/src/control/session-status.ts +2 -2
- package/src/control/session.ts +36 -35
- package/src/control/transcript.ts +6 -6
- package/src/control/translate.ts +2 -2
- package/src/envelope.ts +2 -2
- package/src/errors.ts +1 -1
- package/src/fixtures/common.ts +45 -32
- package/src/fixtures/control.ts +67 -67
- package/src/fixtures/index.ts +78 -63
- package/src/fixtures/messaging.ts +9 -9
- package/src/fixtures/topics.ts +40 -19
- package/src/identifiers.ts +8 -6
- package/src/index.ts +1 -0
- package/src/messaging/message.ts +3 -3
- package/src/messaging/notify.ts +3 -3
- package/src/messaging/say.ts +9 -9
- package/src/schemas.ts +81 -67
- package/src/session-meta.ts +2 -1
package/src/schemas.ts
CHANGED
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
AuthChallengeRequest,
|
|
8
8
|
AuthChallengeResponse,
|
|
9
9
|
AuthRecordsFrame,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
AuthExtendRequest,
|
|
11
|
+
AuthExtendResponse,
|
|
12
|
+
AuthTokenRefreshRequest,
|
|
13
|
+
AuthTokenRefreshResponse,
|
|
14
14
|
AuthRegisterRequest,
|
|
15
15
|
AuthRegisterResponse,
|
|
16
16
|
AuthResolveRequest,
|
|
@@ -18,7 +18,14 @@ import {
|
|
|
18
18
|
AuthRotateRequest,
|
|
19
19
|
AuthRotateResponse,
|
|
20
20
|
} from "./common/auth.ts";
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
HelloInstanceRequest,
|
|
23
|
+
HelloInstanceResponse,
|
|
24
|
+
HelloSessionRequest,
|
|
25
|
+
HelloSessionResponse,
|
|
26
|
+
HelloUserRequest,
|
|
27
|
+
HelloUserResponse,
|
|
28
|
+
} from "./common/hello.ts";
|
|
22
29
|
import { InstancePingRequest, InstancePingResponse } from "./common/ping.ts";
|
|
23
30
|
import {
|
|
24
31
|
InstanceShutdownRequest,
|
|
@@ -49,8 +56,8 @@ import {
|
|
|
49
56
|
FileFindResponse,
|
|
50
57
|
FileReadRequest,
|
|
51
58
|
FileReadResponse,
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
FileStatRequest,
|
|
60
|
+
FileStatResponse,
|
|
54
61
|
FileWriteRequest,
|
|
55
62
|
FileWriteResponse,
|
|
56
63
|
} from "./control/files.ts";
|
|
@@ -77,6 +84,7 @@ import {
|
|
|
77
84
|
LlmUsageReadRequest,
|
|
78
85
|
LlmUsageReadResponse,
|
|
79
86
|
} from "./control/llm.ts";
|
|
87
|
+
import { InstancesFrame } from "./control/instances.ts";
|
|
80
88
|
import { PeersFrame } from "./control/peers.ts";
|
|
81
89
|
import {
|
|
82
90
|
SandboxGrantRequest,
|
|
@@ -91,12 +99,12 @@ import {
|
|
|
91
99
|
SessionDumpWriteResponse,
|
|
92
100
|
SessionEnvReadRequest,
|
|
93
101
|
SessionEnvReadResponse,
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
SessionForkOriginReadRequest,
|
|
103
|
+
SessionForkOriginReadResponse,
|
|
96
104
|
SessionKillRequest,
|
|
97
105
|
SessionKillResponse,
|
|
98
|
-
|
|
99
|
-
|
|
106
|
+
SessionForgetRequest,
|
|
107
|
+
SessionForgetResponse,
|
|
100
108
|
SessionRenameRequest,
|
|
101
109
|
SessionRenameResponse,
|
|
102
110
|
SessionSearchRequest,
|
|
@@ -114,8 +122,8 @@ import { TranslateRunRequest, TranslateRunResponse } from "./control/translate.t
|
|
|
114
122
|
import { InboxFrame, MessageSendRequest, MessageSendResponse } from "./messaging/message.ts";
|
|
115
123
|
import { NotifyFrame, NotifySendRequest, NotifySendResponse } from "./messaging/notify.ts";
|
|
116
124
|
import {
|
|
117
|
-
|
|
118
|
-
|
|
125
|
+
SayUnreadClearRequest,
|
|
126
|
+
SayUnreadClearResponse,
|
|
119
127
|
SayPostRequest,
|
|
120
128
|
SayPostResponse,
|
|
121
129
|
} from "./messaging/say.ts";
|
|
@@ -131,65 +139,70 @@ export interface OpSchemas {
|
|
|
131
139
|
* what it takes and what it answers. The two are checked against each other:
|
|
132
140
|
* an op in one and not the other is a hole in the contract, not a stage of it. */
|
|
133
141
|
export const OP_SCHEMAS: Record<OpName, OpSchemas> = {
|
|
134
|
-
hello: { request:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
142
|
+
"hello.session": { request: HelloSessionRequest, response: HelloSessionResponse },
|
|
143
|
+
"hello.user": { request: HelloUserRequest, response: HelloUserResponse },
|
|
144
|
+
"hello.instance": { request: HelloInstanceRequest, response: HelloInstanceResponse },
|
|
145
|
+
"instance.ping": { request: InstancePingRequest, response: InstancePingResponse },
|
|
146
|
+
"instance.shutdown": { request: InstanceShutdownRequest, response: InstanceShutdownResponse },
|
|
147
|
+
"session.stopping": { request: SessionStoppingRequest, response: SessionStoppingResponse },
|
|
148
|
+
"topic.subscribe": { request: TopicSubscribeRequest, response: TopicSubscribeResponse },
|
|
149
|
+
"topic.unsubscribe": { request: TopicUnsubscribeRequest, response: TopicUnsubscribeResponse },
|
|
150
|
+
"auth.challenge": { request: AuthChallengeRequest, response: AuthChallengeResponse },
|
|
151
|
+
"auth.register": { request: AuthRegisterRequest, response: AuthRegisterResponse },
|
|
152
|
+
"auth.assert": { request: AuthAssertRequest, response: AuthAssertResponse },
|
|
153
|
+
"auth.token.refresh": { request: AuthTokenRefreshRequest, response: AuthTokenRefreshResponse },
|
|
154
|
+
"auth.extend": { request: AuthExtendRequest, response: AuthExtendResponse },
|
|
155
|
+
"auth.resolve": { request: AuthResolveRequest, response: AuthResolveResponse },
|
|
156
|
+
"auth.rotate": { request: AuthRotateRequest, response: AuthRotateResponse },
|
|
157
|
+
"message.send": { request: MessageSendRequest, response: MessageSendResponse },
|
|
158
|
+
"say.post": { request: SayPostRequest, response: SayPostResponse },
|
|
159
|
+
"say.unread.clear": { request: SayUnreadClearRequest, response: SayUnreadClearResponse },
|
|
160
|
+
"notify.send": { request: NotifySendRequest, response: NotifySendResponse },
|
|
151
161
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
162
|
+
"session.kill": { request: SessionKillRequest, response: SessionKillResponse },
|
|
163
|
+
"session.rename": { request: SessionRenameRequest, response: SessionRenameResponse },
|
|
164
|
+
"session.env.read": { request: SessionEnvReadRequest, response: SessionEnvReadResponse },
|
|
165
|
+
"session.search": { request: SessionSearchRequest, response: SessionSearchResponse },
|
|
166
|
+
"session.dump.write": { request: SessionDumpWriteRequest, response: SessionDumpWriteResponse },
|
|
167
|
+
"dump.presets.read": { request: DumpPresetsReadRequest, response: DumpPresetsReadResponse },
|
|
168
|
+
"transcript.read": { request: TranscriptReadRequest, response: TranscriptReadResponse },
|
|
169
|
+
"transcript.items.read": {
|
|
160
170
|
request: TranscriptItemsReadRequest,
|
|
161
171
|
response: TranscriptItemsReadResponse,
|
|
162
172
|
},
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
"session.fork.origin.read": {
|
|
174
|
+
request: SessionForkOriginReadRequest,
|
|
175
|
+
response: SessionForkOriginReadResponse,
|
|
176
|
+
},
|
|
177
|
+
"session.forget": {
|
|
178
|
+
request: SessionForgetRequest,
|
|
179
|
+
response: SessionForgetResponse,
|
|
167
180
|
},
|
|
168
181
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
182
|
+
"dir.list": { request: DirListRequest, response: DirListResponse },
|
|
183
|
+
"file.read": { request: FileReadRequest, response: FileReadResponse },
|
|
184
|
+
"file.write": { request: FileWriteRequest, response: FileWriteResponse },
|
|
185
|
+
"file.create": { request: FileCreateRequest, response: FileCreateResponse },
|
|
186
|
+
"file.edit": { request: FileEditRequest, response: FileEditResponse },
|
|
187
|
+
"file.delete": { request: FileDeleteRequest, response: FileDeleteResponse },
|
|
188
|
+
"file.find": { request: FileFindRequest, response: FileFindResponse },
|
|
189
|
+
"file.stat": { request: FileStatRequest, response: FileStatResponse },
|
|
190
|
+
"dir.tree": { request: DirTreeRequest, response: DirTreeResponse },
|
|
178
191
|
|
|
179
|
-
|
|
192
|
+
"launcher.config.read": {
|
|
180
193
|
request: LauncherConfigReadRequest,
|
|
181
194
|
response: LauncherConfigReadResponse,
|
|
182
195
|
},
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
"launcher.run": { request: LauncherRunRequest, response: LauncherRunResponse },
|
|
197
|
+
"sandbox.grant": { request: SandboxGrantRequest, response: SandboxGrantResponse },
|
|
198
|
+
"sandbox.revoke": { request: SandboxRevokeRequest, response: SandboxRevokeResponse },
|
|
199
|
+
"translate.run": { request: TranslateRunRequest, response: TranslateRunResponse },
|
|
200
|
+
"llm.usage.read": { request: LlmUsageReadRequest, response: LlmUsageReadResponse },
|
|
201
|
+
"llm.stats.read": { request: LlmStatsReadRequest, response: LlmStatsReadResponse },
|
|
189
202
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
203
|
+
"kv.read": { request: KvReadRequest, response: KvReadResponse },
|
|
204
|
+
"kv.write": { request: KvWriteRequest, response: KvWriteResponse },
|
|
205
|
+
"kv.delete": { request: KvDeleteRequest, response: KvDeleteResponse },
|
|
193
206
|
};
|
|
194
207
|
|
|
195
208
|
/** The frame schema for every topic.
|
|
@@ -201,15 +214,16 @@ export const TOPIC_SCHEMAS = {
|
|
|
201
214
|
inbox: InboxFrame,
|
|
202
215
|
notify: NotifyFrame,
|
|
203
216
|
peers: PeersFrame,
|
|
217
|
+
instances: InstancesFrame,
|
|
204
218
|
agents: AgentsFrame,
|
|
205
|
-
|
|
219
|
+
"session.status": SessionStatusFrame,
|
|
206
220
|
transcript: TranscriptFrame,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
221
|
+
"transcript.items": TranscriptItemsFrame,
|
|
222
|
+
"session.errors": SessionErrorsFrame,
|
|
223
|
+
"llm.requests": LlmRequestsFrame,
|
|
224
|
+
"llm.status": LlmStatusFrame,
|
|
211
225
|
kv: KvFrame,
|
|
212
|
-
|
|
226
|
+
"auth.records": AuthRecordsFrame,
|
|
213
227
|
} as const;
|
|
214
228
|
|
|
215
229
|
const compiled = new WeakMap<TSchema, TypeCheck<TSchema>>();
|
package/src/session-meta.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { Type } from "@sinclair/typebox";
|
|
|
3
3
|
/** The fields that describe where a session lives and what it runs as.
|
|
4
4
|
*
|
|
5
5
|
* Stated once and referenced wherever a session is described: the session names
|
|
6
|
-
* them itself in `hello`, and the instance repeats them on the `peers`
|
|
6
|
+
* them itself in `hello.session`, and the instance repeats them on the `peers`
|
|
7
|
+
* topic
|
|
7
8
|
* for connected and last-known sessions alike. Which of them are required
|
|
8
9
|
* differs by place — a greeting may leave any of them unsaid — so each place
|
|
9
10
|
* wraps what it needs in `Type.Optional`, but the name and the type of a field
|