@isoplan/protocol 0.1.0 → 0.3.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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Adam Linscott
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Adam Linscott
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @isoplan/protocol
2
+
3
+ The wire protocol between [Isoplan](https://github.com/adamlinscott/isoplan-plugin)'s Claude Code plugin and an office server: the facts a session reports, the messages each side sends, and [zod](https://zod.dev) schemas that check them.
4
+
5
+ ```
6
+ npm install @isoplan/protocol
7
+ ```
8
+
9
+ ES module only, with TypeScript types. Depends on zod 4.
10
+
11
+ ## What is in it
12
+
13
+ - **Facts** (`FactsSchema` and its parts: `SessionFactSchema`, `AgentFactSchema`, `FileFactSchema`, `WaitFactSchema`, `ReportFactSchema`, `QuestionFactSchema`): what one session reports, the shape a data layer sends and a server stores.
14
+ - **Messages**: `DataLayerMessageSchema` for what a data layer or runner sends (hellos, full facts, changes, replies, refusals, and the hand-over, take and taken steps of a handoff), and `OfficeServerMessageSchema` for what a server sends back (repair, conflict, error, request, release and handoff). Each message type has its own schema and type as well, such as `HelloMessage` or `RequestMessage`.
15
+ - **`PROTOCOL_VERSION`**: the version both sides speak. A message's `v` must match it.
16
+ - **`projectId(remoteUrl, { machine, root })`**: a repository's project id, `host/owner/repo` from its git remote whatever form the remote is written in, or `local:<machine>/<root>` without one.
17
+
18
+ ## Parse a message
19
+
20
+ ```ts
21
+ import { parseDataLayerMessage } from "@isoplan/protocol";
22
+
23
+ const result = parseDataLayerMessage(JSON.parse(text));
24
+ if (result.ok) handle(result.message);
25
+ else if (result.kind === "unsupported-version") reply(result.error); // a peer on another protocol version
26
+ else drop(result.error);
27
+ ```
28
+
29
+ `parseOfficeServerMessage` does the same for the other direction. Neither throws.
30
+
31
+ ## Licence
32
+
33
+ MIT. Source: [`packages/protocol`](https://github.com/adamlinscott/isoplan-plugin/tree/main/packages/protocol).
package/dist/facts.d.ts CHANGED
@@ -90,10 +90,38 @@ export declare const WaitFactSchema: z.ZodObject<{
90
90
  since: z.ZodISODateTime;
91
91
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
92
92
  }, z.core.$strip>;
93
+ /**
94
+ * An agent's final report. One the secret scan matched, and its owner hasn't released, is
95
+ * `withheld`: its `text` then only says so, and the report follows once the owner releases it by
96
+ * `withheld.id`, a random id for this one text. A newer report of the same agent gets a new id.
97
+ */
93
98
  export declare const ReportFactSchema: z.ZodObject<{
94
99
  agent: z.ZodString;
95
100
  at: z.ZodISODateTime;
96
101
  text: z.ZodString;
102
+ withheld: z.ZodOptional<z.ZodObject<{
103
+ id: z.ZodString;
104
+ }, z.core.$strip>>;
105
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
106
+ }, z.core.$strip>;
107
+ /**
108
+ * A question an agent asked its owner, open until it is answered, so the floor can show it and the
109
+ * owner can answer it there. One of the named cases of session-derived text leaving a machine: the
110
+ * server keeps it only for the retention period. `id` is the tool call's own id.
111
+ */
112
+ export declare const QuestionFactSchema: z.ZodObject<{
113
+ id: z.ZodString;
114
+ agent: z.ZodString;
115
+ at: z.ZodISODateTime;
116
+ questions: z.ZodArray<z.ZodObject<{
117
+ question: z.ZodString;
118
+ header: z.ZodString;
119
+ options: z.ZodArray<z.ZodObject<{
120
+ label: z.ZodString;
121
+ description: z.ZodString;
122
+ }, z.core.$strip>>;
123
+ multiSelect: z.ZodBoolean;
124
+ }, z.core.$strip>>;
97
125
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
98
126
  }, z.core.$strip>;
99
127
  export declare const FactsSchema: z.ZodObject<{
@@ -194,8 +222,26 @@ export declare const FactsSchema: z.ZodObject<{
194
222
  agent: z.ZodString;
195
223
  at: z.ZodISODateTime;
196
224
  text: z.ZodString;
225
+ withheld: z.ZodOptional<z.ZodObject<{
226
+ id: z.ZodString;
227
+ }, z.core.$strip>>;
197
228
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
198
229
  }, z.core.$strip>>;
230
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
231
+ id: z.ZodString;
232
+ agent: z.ZodString;
233
+ at: z.ZodISODateTime;
234
+ questions: z.ZodArray<z.ZodObject<{
235
+ question: z.ZodString;
236
+ header: z.ZodString;
237
+ options: z.ZodArray<z.ZodObject<{
238
+ label: z.ZodString;
239
+ description: z.ZodString;
240
+ }, z.core.$strip>>;
241
+ multiSelect: z.ZodBoolean;
242
+ }, z.core.$strip>>;
243
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
244
+ }, z.core.$strip>>>;
199
245
  }, z.core.$strip>;
200
246
  /** The records that changed, each replacing the one with the same key. */
201
247
  export declare const FactUpsertSchema: z.ZodObject<{
@@ -296,12 +342,31 @@ export declare const FactUpsertSchema: z.ZodObject<{
296
342
  agent: z.ZodString;
297
343
  at: z.ZodISODateTime;
298
344
  text: z.ZodString;
345
+ withheld: z.ZodOptional<z.ZodObject<{
346
+ id: z.ZodString;
347
+ }, z.core.$strip>>;
348
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
349
+ }, z.core.$strip>>>;
350
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
351
+ id: z.ZodString;
352
+ agent: z.ZodString;
353
+ at: z.ZodISODateTime;
354
+ questions: z.ZodArray<z.ZodObject<{
355
+ question: z.ZodString;
356
+ header: z.ZodString;
357
+ options: z.ZodArray<z.ZodObject<{
358
+ label: z.ZodString;
359
+ description: z.ZodString;
360
+ }, z.core.$strip>>;
361
+ multiSelect: z.ZodBoolean;
362
+ }, z.core.$strip>>;
299
363
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
300
364
  }, z.core.$strip>>>;
301
365
  }, z.core.$strip>;
302
366
  /**
303
367
  * The keys of records that went away: an agent by its id, an edit or read by agent and file, a
304
- * wait by waiter and on, a report by its agent. The session itself goes with the connection.
368
+ * wait by waiter and on, a report by its agent, a question by its id. The session itself goes with
369
+ * the connection.
305
370
  */
306
371
  export declare const FactRemoveSchema: z.ZodObject<{
307
372
  agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -318,6 +383,7 @@ export declare const FactRemoveSchema: z.ZodObject<{
318
383
  on: z.ZodString;
319
384
  }, z.core.$strip>>>;
320
385
  reports: z.ZodOptional<z.ZodArray<z.ZodString>>;
386
+ questions: z.ZodOptional<z.ZodArray<z.ZodString>>;
321
387
  }, z.core.$strip>;
322
388
  export type Source = z.infer<typeof SourceSchema>;
323
389
  export type SessionFact = z.infer<typeof SessionFactSchema>;
@@ -325,6 +391,7 @@ export type AgentFact = z.infer<typeof AgentFactSchema>;
325
391
  export type FileFact = z.infer<typeof FileFactSchema>;
326
392
  export type WaitFact = z.infer<typeof WaitFactSchema>;
327
393
  export type ReportFact = z.infer<typeof ReportFactSchema>;
394
+ export type QuestionFact = z.infer<typeof QuestionFactSchema>;
328
395
  export type Facts = z.infer<typeof FactsSchema>;
329
396
  export type FactUpsert = z.infer<typeof FactUpsertSchema>;
330
397
  export type FactRemove = z.infer<typeof FactRemoveSchema>;
package/dist/facts.js CHANGED
@@ -67,10 +67,35 @@ export const WaitFactSchema = z.object({
67
67
  since: Time,
68
68
  extra: Extra,
69
69
  });
70
+ /**
71
+ * An agent's final report. One the secret scan matched, and its owner hasn't released, is
72
+ * `withheld`: its `text` then only says so, and the report follows once the owner releases it by
73
+ * `withheld.id`, a random id for this one text. A newer report of the same agent gets a new id.
74
+ */
70
75
  export const ReportFactSchema = z.object({
71
76
  agent: z.string().min(1),
72
77
  at: Time,
73
78
  text: z.string(),
79
+ withheld: z.object({ id: z.string().min(1) }).optional(),
80
+ extra: Extra,
81
+ });
82
+ /**
83
+ * A question an agent asked its owner, open until it is answered, so the floor can show it and the
84
+ * owner can answer it there. One of the named cases of session-derived text leaving a machine: the
85
+ * server keeps it only for the retention period. `id` is the tool call's own id.
86
+ */
87
+ export const QuestionFactSchema = z.object({
88
+ id: z.string().min(1),
89
+ agent: z.string().min(1),
90
+ at: Time,
91
+ questions: z
92
+ .array(z.object({
93
+ question: z.string().min(1),
94
+ header: z.string(),
95
+ options: z.array(z.object({ label: z.string().min(1), description: z.string() })),
96
+ multiSelect: z.boolean(),
97
+ }))
98
+ .min(1),
74
99
  extra: Extra,
75
100
  });
76
101
  export const FactsSchema = z.object({
@@ -80,6 +105,8 @@ export const FactsSchema = z.object({
80
105
  reads: z.array(FileFactSchema),
81
106
  waits: z.array(WaitFactSchema),
82
107
  reports: z.array(ReportFactSchema),
108
+ /** Absent from a data layer that doesn't report questions, which is the same as none. */
109
+ questions: z.array(QuestionFactSchema).optional(),
83
110
  });
84
111
  /** The records that changed, each replacing the one with the same key. */
85
112
  export const FactUpsertSchema = z.object({
@@ -89,11 +116,13 @@ export const FactUpsertSchema = z.object({
89
116
  reads: z.array(FileFactSchema).optional(),
90
117
  waits: z.array(WaitFactSchema).optional(),
91
118
  reports: z.array(ReportFactSchema).optional(),
119
+ questions: z.array(QuestionFactSchema).optional(),
92
120
  });
93
121
  const FileKey = FileFactSchema.pick({ agent: true, file: true });
94
122
  /**
95
123
  * The keys of records that went away: an agent by its id, an edit or read by agent and file, a
96
- * wait by waiter and on, a report by its agent. The session itself goes with the connection.
124
+ * wait by waiter and on, a report by its agent, a question by its id. The session itself goes with
125
+ * the connection.
97
126
  */
98
127
  export const FactRemoveSchema = z.object({
99
128
  agents: z.array(z.string().min(1)).optional(),
@@ -101,5 +130,6 @@ export const FactRemoveSchema = z.object({
101
130
  reads: z.array(FileKey).optional(),
102
131
  waits: z.array(WaitFactSchema.pick({ waiter: true, on: true })).optional(),
103
132
  reports: z.array(z.string().min(1)).optional(),
133
+ questions: z.array(z.string().min(1)).optional(),
104
134
  });
105
135
  //# sourceMappingURL=facts.js.map
package/dist/facts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"facts.js","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,28 @@ export declare const ProjectSchema: z.ZodObject<{
8
8
  id: z.ZodString;
9
9
  name: z.ZodString;
10
10
  }, z.core.$strip>;
11
+ /**
12
+ * One repo a handoff pushed: its path in the session's folder (`.` for the folder itself), remote,
13
+ * branch and commit. A handoff drives git on the receiver's machine, so the path stays inside the
14
+ * folder and the remote can't name a transport helper such as `ext::`, which runs a command.
15
+ */
16
+ export declare const HandoffRepoSchema: z.ZodObject<{
17
+ path: z.ZodString;
18
+ remote: z.ZodString;
19
+ branch: z.ZodString;
20
+ commit: z.ZodString;
21
+ }, z.core.$strip>;
22
+ /** What the receiver gets: the brief, and every repo pushed for it, each on the handoff's own branch. */
23
+ export declare const HandoffSchema: z.ZodObject<{
24
+ id: z.ZodString;
25
+ brief: z.ZodString;
26
+ repos: z.ZodArray<z.ZodObject<{
27
+ path: z.ZodString;
28
+ remote: z.ZodString;
29
+ branch: z.ZodString;
30
+ commit: z.ZodString;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
11
33
  /** The first message on a connection: who is reporting, from where, about which session. */
12
34
  export declare const HelloMessageSchema: z.ZodObject<{
13
35
  type: z.ZodLiteral<"hello">;
@@ -28,6 +50,18 @@ export declare const HelloMessageSchema: z.ZodObject<{
28
50
  name: z.ZodString;
29
51
  }, z.core.$strip>;
30
52
  }, z.core.$strip>;
53
+ /** The first message on a runner's link: the one link per machine that answers requests for its rooms. */
54
+ export declare const RunnerHelloMessageSchema: z.ZodObject<{
55
+ type: z.ZodLiteral<"runner">;
56
+ v: z.ZodLiteral<1>;
57
+ account: z.ZodObject<{
58
+ id: z.ZodString;
59
+ name: z.ZodString;
60
+ }, z.core.$strip>;
61
+ machine: z.ZodObject<{
62
+ name: z.ZodString;
63
+ }, z.core.$strip>;
64
+ }, z.core.$strip>;
31
65
  /** All of the session's facts. Sent on connect and on repair. */
32
66
  export declare const FullMessageSchema: z.ZodObject<{
33
67
  type: z.ZodLiteral<"full">;
@@ -131,8 +165,26 @@ export declare const FullMessageSchema: z.ZodObject<{
131
165
  agent: z.ZodString;
132
166
  at: z.ZodISODateTime;
133
167
  text: z.ZodString;
168
+ withheld: z.ZodOptional<z.ZodObject<{
169
+ id: z.ZodString;
170
+ }, z.core.$strip>>;
134
171
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
135
172
  }, z.core.$strip>>;
173
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
174
+ id: z.ZodString;
175
+ agent: z.ZodString;
176
+ at: z.ZodISODateTime;
177
+ questions: z.ZodArray<z.ZodObject<{
178
+ question: z.ZodString;
179
+ header: z.ZodString;
180
+ options: z.ZodArray<z.ZodObject<{
181
+ label: z.ZodString;
182
+ description: z.ZodString;
183
+ }, z.core.$strip>>;
184
+ multiSelect: z.ZodBoolean;
185
+ }, z.core.$strip>>;
186
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
187
+ }, z.core.$strip>>>;
136
188
  }, z.core.$strip>;
137
189
  }, z.core.$strip>;
138
190
  /** What changed since the last message. `seq` goes up by one per message, so a gap shows. */
@@ -238,6 +290,24 @@ export declare const ChangesMessageSchema: z.ZodObject<{
238
290
  agent: z.ZodString;
239
291
  at: z.ZodISODateTime;
240
292
  text: z.ZodString;
293
+ withheld: z.ZodOptional<z.ZodObject<{
294
+ id: z.ZodString;
295
+ }, z.core.$strip>>;
296
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
297
+ }, z.core.$strip>>>;
298
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
299
+ id: z.ZodString;
300
+ agent: z.ZodString;
301
+ at: z.ZodISODateTime;
302
+ questions: z.ZodArray<z.ZodObject<{
303
+ question: z.ZodString;
304
+ header: z.ZodString;
305
+ options: z.ZodArray<z.ZodObject<{
306
+ label: z.ZodString;
307
+ description: z.ZodString;
308
+ }, z.core.$strip>>;
309
+ multiSelect: z.ZodBoolean;
310
+ }, z.core.$strip>>;
241
311
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
242
312
  }, z.core.$strip>>>;
243
313
  }, z.core.$strip>;
@@ -256,8 +326,125 @@ export declare const ChangesMessageSchema: z.ZodObject<{
256
326
  on: z.ZodString;
257
327
  }, z.core.$strip>>>;
258
328
  reports: z.ZodOptional<z.ZodArray<z.ZodString>>;
329
+ questions: z.ZodOptional<z.ZodArray<z.ZodString>>;
259
330
  }, z.core.$strip>;
260
331
  }, z.core.$strip>;
332
+ /** The answer to a request, carrying the request's id and kind. */
333
+ export declare const ReplyMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
334
+ type: z.ZodLiteral<"reply">;
335
+ v: z.ZodLiteral<1>;
336
+ id: z.ZodString;
337
+ kind: z.ZodLiteral<"answer-question">;
338
+ answer: z.ZodString;
339
+ }, z.core.$strip>, z.ZodObject<{
340
+ type: z.ZodLiteral<"reply">;
341
+ v: z.ZodLiteral<1>;
342
+ id: z.ZodString;
343
+ kind: z.ZodLiteral<"write-brief">;
344
+ handoff: z.ZodObject<{
345
+ id: z.ZodString;
346
+ brief: z.ZodString;
347
+ repos: z.ZodArray<z.ZodObject<{
348
+ path: z.ZodString;
349
+ remote: z.ZodString;
350
+ branch: z.ZodString;
351
+ commit: z.ZodString;
352
+ }, z.core.$strip>>;
353
+ }, z.core.$strip>;
354
+ fallback: z.ZodOptional<z.ZodLiteral<true>>;
355
+ }, z.core.$strip>, z.ZodObject<{
356
+ type: z.ZodLiteral<"reply">;
357
+ v: z.ZodLiteral<1>;
358
+ id: z.ZodString;
359
+ kind: z.ZodLiteral<"owner-answer">;
360
+ }, z.core.$strip>], "kind">;
361
+ /**
362
+ * A request the machine won't answer, sent in place of its reply. `over-cap` names the cap it would
363
+ * go over. `withheld` means the secret scan matched; the reply follows if the owner releases it.
364
+ * `unavailable` is anything else that stops the room answering now, such as its checkout being gone,
365
+ * its lead being mid-turn or a push being rejected.
366
+ */
367
+ export declare const RefusalMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
368
+ type: z.ZodLiteral<"refusal">;
369
+ v: z.ZodLiteral<1>;
370
+ id: z.ZodString;
371
+ reason: z.ZodLiteral<"over-cap">;
372
+ cap: z.ZodEnum<{
373
+ "owner-day": "owner-day";
374
+ "owner-tokens": "owner-tokens";
375
+ "room-hour": "room-hour";
376
+ }>;
377
+ }, z.core.$strip>, z.ZodObject<{
378
+ type: z.ZodLiteral<"refusal">;
379
+ v: z.ZodLiteral<1>;
380
+ id: z.ZodString;
381
+ reason: z.ZodLiteral<"withheld">;
382
+ file: z.ZodOptional<z.ZodString>;
383
+ unchecked: z.ZodOptional<z.ZodArray<z.ZodString>>;
384
+ }, z.core.$strip>, z.ZodObject<{
385
+ type: z.ZodLiteral<"refusal">;
386
+ v: z.ZodLiteral<1>;
387
+ id: z.ZodString;
388
+ reason: z.ZodLiteral<"unavailable">;
389
+ detail: z.ZodString;
390
+ }, z.core.$strip>], "reason">;
391
+ /**
392
+ * The sender's session handed its room over with the command: its agent wrote the brief and pushed.
393
+ * `to` is the receiver as the sender named them, for the server to find in the office.
394
+ */
395
+ export declare const HandOverMessageSchema: z.ZodObject<{
396
+ type: z.ZodLiteral<"hand-over">;
397
+ v: z.ZodLiteral<1>;
398
+ to: z.ZodString;
399
+ handoff: z.ZodObject<{
400
+ id: z.ZodString;
401
+ brief: z.ZodString;
402
+ repos: z.ZodArray<z.ZodObject<{
403
+ path: z.ZodString;
404
+ remote: z.ZodString;
405
+ branch: z.ZodString;
406
+ commit: z.ZodString;
407
+ }, z.core.$strip>>;
408
+ }, z.core.$strip>;
409
+ }, z.core.$strip>;
410
+ /**
411
+ * The sender's session asks, before it pushes, whether a hand-over with this id to `to` would be
412
+ * taken: the server answers hand-over-ready, or an error saying why not.
413
+ */
414
+ export declare const HandOverCheckMessageSchema: z.ZodObject<{
415
+ type: z.ZodLiteral<"hand-over-check">;
416
+ v: z.ZodLiteral<1>;
417
+ to: z.ZodString;
418
+ handoff: z.ZodString;
419
+ }, z.core.$strip>;
420
+ /** The receiver's session asks for the handoff a take code stands for. */
421
+ export declare const TakeMessageSchema: z.ZodObject<{
422
+ type: z.ZodLiteral<"take">;
423
+ v: z.ZodLiteral<1>;
424
+ code: z.ZodString;
425
+ }, z.core.$strip>;
426
+ /**
427
+ * The receiver took the handoff and joins its room. Each step that failed is listed with the repo it
428
+ * was for and the end of its output; a failed setup step doesn't stop the session opening. From a runner, `session` is the
429
+ * session it opened, which joins the room; without one no session opened (no clone to work in, or
430
+ * no terminal), so the handoff is still there to take. From a session, the session itself joins.
431
+ */
432
+ export declare const TakenMessageSchema: z.ZodObject<{
433
+ type: z.ZodLiteral<"taken">;
434
+ v: z.ZodLiteral<1>;
435
+ handoff: z.ZodString;
436
+ session: z.ZodOptional<z.ZodString>;
437
+ failures: z.ZodArray<z.ZodObject<{
438
+ step: z.ZodEnum<{
439
+ checkout: "checkout";
440
+ open: "open";
441
+ setup: "setup";
442
+ worktree: "worktree";
443
+ }>;
444
+ repo: z.ZodOptional<z.ZodString>;
445
+ output: z.ZodString;
446
+ }, z.core.$strip>>;
447
+ }, z.core.$strip>;
261
448
  export declare const DataLayerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
262
449
  type: z.ZodLiteral<"hello">;
263
450
  v: z.ZodLiteral<1>;
@@ -276,6 +463,16 @@ export declare const DataLayerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
276
463
  id: z.ZodString;
277
464
  name: z.ZodString;
278
465
  }, z.core.$strip>;
466
+ }, z.core.$strip>, z.ZodObject<{
467
+ type: z.ZodLiteral<"runner">;
468
+ v: z.ZodLiteral<1>;
469
+ account: z.ZodObject<{
470
+ id: z.ZodString;
471
+ name: z.ZodString;
472
+ }, z.core.$strip>;
473
+ machine: z.ZodObject<{
474
+ name: z.ZodString;
475
+ }, z.core.$strip>;
279
476
  }, z.core.$strip>, z.ZodObject<{
280
477
  type: z.ZodLiteral<"full">;
281
478
  v: z.ZodLiteral<1>;
@@ -378,8 +575,26 @@ export declare const DataLayerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
378
575
  agent: z.ZodString;
379
576
  at: z.ZodISODateTime;
380
577
  text: z.ZodString;
578
+ withheld: z.ZodOptional<z.ZodObject<{
579
+ id: z.ZodString;
580
+ }, z.core.$strip>>;
381
581
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
382
582
  }, z.core.$strip>>;
583
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
584
+ id: z.ZodString;
585
+ agent: z.ZodString;
586
+ at: z.ZodISODateTime;
587
+ questions: z.ZodArray<z.ZodObject<{
588
+ question: z.ZodString;
589
+ header: z.ZodString;
590
+ options: z.ZodArray<z.ZodObject<{
591
+ label: z.ZodString;
592
+ description: z.ZodString;
593
+ }, z.core.$strip>>;
594
+ multiSelect: z.ZodBoolean;
595
+ }, z.core.$strip>>;
596
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
597
+ }, z.core.$strip>>>;
383
598
  }, z.core.$strip>;
384
599
  }, z.core.$strip>, z.ZodObject<{
385
600
  type: z.ZodLiteral<"changes">;
@@ -483,6 +698,24 @@ export declare const DataLayerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
483
698
  agent: z.ZodString;
484
699
  at: z.ZodISODateTime;
485
700
  text: z.ZodString;
701
+ withheld: z.ZodOptional<z.ZodObject<{
702
+ id: z.ZodString;
703
+ }, z.core.$strip>>;
704
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
705
+ }, z.core.$strip>>>;
706
+ questions: z.ZodOptional<z.ZodArray<z.ZodObject<{
707
+ id: z.ZodString;
708
+ agent: z.ZodString;
709
+ at: z.ZodISODateTime;
710
+ questions: z.ZodArray<z.ZodObject<{
711
+ question: z.ZodString;
712
+ header: z.ZodString;
713
+ options: z.ZodArray<z.ZodObject<{
714
+ label: z.ZodString;
715
+ description: z.ZodString;
716
+ }, z.core.$strip>>;
717
+ multiSelect: z.ZodBoolean;
718
+ }, z.core.$strip>>;
486
719
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
487
720
  }, z.core.$strip>>>;
488
721
  }, z.core.$strip>;
@@ -501,7 +734,96 @@ export declare const DataLayerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
501
734
  on: z.ZodString;
502
735
  }, z.core.$strip>>>;
503
736
  reports: z.ZodOptional<z.ZodArray<z.ZodString>>;
737
+ questions: z.ZodOptional<z.ZodArray<z.ZodString>>;
504
738
  }, z.core.$strip>;
739
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
740
+ type: z.ZodLiteral<"reply">;
741
+ v: z.ZodLiteral<1>;
742
+ id: z.ZodString;
743
+ kind: z.ZodLiteral<"answer-question">;
744
+ answer: z.ZodString;
745
+ }, z.core.$strip>, z.ZodObject<{
746
+ type: z.ZodLiteral<"reply">;
747
+ v: z.ZodLiteral<1>;
748
+ id: z.ZodString;
749
+ kind: z.ZodLiteral<"write-brief">;
750
+ handoff: z.ZodObject<{
751
+ id: z.ZodString;
752
+ brief: z.ZodString;
753
+ repos: z.ZodArray<z.ZodObject<{
754
+ path: z.ZodString;
755
+ remote: z.ZodString;
756
+ branch: z.ZodString;
757
+ commit: z.ZodString;
758
+ }, z.core.$strip>>;
759
+ }, z.core.$strip>;
760
+ fallback: z.ZodOptional<z.ZodLiteral<true>>;
761
+ }, z.core.$strip>, z.ZodObject<{
762
+ type: z.ZodLiteral<"reply">;
763
+ v: z.ZodLiteral<1>;
764
+ id: z.ZodString;
765
+ kind: z.ZodLiteral<"owner-answer">;
766
+ }, z.core.$strip>], "kind">, z.ZodDiscriminatedUnion<[z.ZodObject<{
767
+ type: z.ZodLiteral<"refusal">;
768
+ v: z.ZodLiteral<1>;
769
+ id: z.ZodString;
770
+ reason: z.ZodLiteral<"over-cap">;
771
+ cap: z.ZodEnum<{
772
+ "owner-day": "owner-day";
773
+ "owner-tokens": "owner-tokens";
774
+ "room-hour": "room-hour";
775
+ }>;
776
+ }, z.core.$strip>, z.ZodObject<{
777
+ type: z.ZodLiteral<"refusal">;
778
+ v: z.ZodLiteral<1>;
779
+ id: z.ZodString;
780
+ reason: z.ZodLiteral<"withheld">;
781
+ file: z.ZodOptional<z.ZodString>;
782
+ unchecked: z.ZodOptional<z.ZodArray<z.ZodString>>;
783
+ }, z.core.$strip>, z.ZodObject<{
784
+ type: z.ZodLiteral<"refusal">;
785
+ v: z.ZodLiteral<1>;
786
+ id: z.ZodString;
787
+ reason: z.ZodLiteral<"unavailable">;
788
+ detail: z.ZodString;
789
+ }, z.core.$strip>], "reason">, z.ZodObject<{
790
+ type: z.ZodLiteral<"hand-over">;
791
+ v: z.ZodLiteral<1>;
792
+ to: z.ZodString;
793
+ handoff: z.ZodObject<{
794
+ id: z.ZodString;
795
+ brief: z.ZodString;
796
+ repos: z.ZodArray<z.ZodObject<{
797
+ path: z.ZodString;
798
+ remote: z.ZodString;
799
+ branch: z.ZodString;
800
+ commit: z.ZodString;
801
+ }, z.core.$strip>>;
802
+ }, z.core.$strip>;
803
+ }, z.core.$strip>, z.ZodObject<{
804
+ type: z.ZodLiteral<"hand-over-check">;
805
+ v: z.ZodLiteral<1>;
806
+ to: z.ZodString;
807
+ handoff: z.ZodString;
808
+ }, z.core.$strip>, z.ZodObject<{
809
+ type: z.ZodLiteral<"take">;
810
+ v: z.ZodLiteral<1>;
811
+ code: z.ZodString;
812
+ }, z.core.$strip>, z.ZodObject<{
813
+ type: z.ZodLiteral<"taken">;
814
+ v: z.ZodLiteral<1>;
815
+ handoff: z.ZodString;
816
+ session: z.ZodOptional<z.ZodString>;
817
+ failures: z.ZodArray<z.ZodObject<{
818
+ step: z.ZodEnum<{
819
+ checkout: "checkout";
820
+ open: "open";
821
+ setup: "setup";
822
+ worktree: "worktree";
823
+ }>;
824
+ repo: z.ZodOptional<z.ZodString>;
825
+ output: z.ZodString;
826
+ }, z.core.$strip>>;
505
827
  }, z.core.$strip>], "type">;
506
828
  /** Asks the data layer to send its facts in full. */
507
829
  export declare const RepairMessageSchema: z.ZodObject<{
@@ -524,6 +846,106 @@ export declare const ErrorMessageSchema: z.ZodObject<{
524
846
  code: z.ZodString;
525
847
  message: z.ZodString;
526
848
  }, z.core.$strip>;
849
+ /**
850
+ * Something for the machine to answer, with a reply or a refusal carrying the same id. `session` is
851
+ * the session it concerns: the lead whose fork answers or writes the brief, or the session whose
852
+ * agent asked its owner. `room` is the room the caps count against.
853
+ */
854
+ export declare const RequestMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
855
+ type: z.ZodLiteral<"request">;
856
+ v: z.ZodLiteral<1>;
857
+ id: z.ZodString;
858
+ kind: z.ZodLiteral<"answer-question">;
859
+ session: z.ZodString;
860
+ room: z.ZodString;
861
+ from: z.ZodObject<{
862
+ id: z.ZodString;
863
+ name: z.ZodString;
864
+ }, z.core.$strip>;
865
+ question: z.ZodString;
866
+ }, z.core.$strip>, z.ZodObject<{
867
+ type: z.ZodLiteral<"request">;
868
+ v: z.ZodLiteral<1>;
869
+ id: z.ZodString;
870
+ kind: z.ZodLiteral<"write-brief">;
871
+ session: z.ZodString;
872
+ room: z.ZodString;
873
+ handoff: z.ZodString;
874
+ to: z.ZodObject<{
875
+ id: z.ZodString;
876
+ name: z.ZodString;
877
+ }, z.core.$strip>;
878
+ }, z.core.$strip>, z.ZodObject<{
879
+ type: z.ZodLiteral<"request">;
880
+ v: z.ZodLiteral<1>;
881
+ id: z.ZodString;
882
+ kind: z.ZodLiteral<"owner-answer">;
883
+ session: z.ZodString;
884
+ question: z.ZodString;
885
+ answers: z.ZodRecord<z.ZodString, z.ZodString>;
886
+ }, z.core.$strip>], "kind">;
887
+ /**
888
+ * The request is over (its handoff was cancelled, dismissed or replaced): the machine drops what it
889
+ * holds for it, and doesn't send or push what it was still writing.
890
+ */
891
+ export declare const DropMessageSchema: z.ZodObject<{
892
+ type: z.ZodLiteral<"drop">;
893
+ v: z.ZodLiteral<1>;
894
+ id: z.ZodString;
895
+ }, z.core.$strip>;
896
+ /**
897
+ * The owner released what the secret scan withheld, so the machine sends it now. On the runner's
898
+ * link `id` is the request whose reply was withheld; on a session's link it is the withheld
899
+ * report's `withheld.id`, and only that exact report is released.
900
+ */
901
+ export declare const ReleaseMessageSchema: z.ZodObject<{
902
+ type: z.ZodLiteral<"release">;
903
+ v: z.ZodLiteral<1>;
904
+ id: z.ZodString;
905
+ }, z.core.$strip>;
906
+ /**
907
+ * A handoff for the receiver to take: sent to their runner when they take it from the floor, or to
908
+ * their session in answer to a take code.
909
+ */
910
+ export declare const HandoffMessageSchema: z.ZodObject<{
911
+ type: z.ZodLiteral<"handoff">;
912
+ v: z.ZodLiteral<1>;
913
+ handoff: z.ZodObject<{
914
+ id: z.ZodString;
915
+ brief: z.ZodString;
916
+ repos: z.ZodArray<z.ZodObject<{
917
+ path: z.ZodString;
918
+ remote: z.ZodString;
919
+ branch: z.ZodString;
920
+ commit: z.ZodString;
921
+ }, z.core.$strip>>;
922
+ }, z.core.$strip>;
923
+ mode: z.ZodOptional<z.ZodEnum<{
924
+ headless: "headless";
925
+ terminal: "terminal";
926
+ }>>;
927
+ session: z.ZodOptional<z.ZodString>;
928
+ }, z.core.$strip>;
929
+ /** A hand-over-check passed: `to` is the receiver the server found for the name given. */
930
+ export declare const HandOverReadyMessageSchema: z.ZodObject<{
931
+ type: z.ZodLiteral<"hand-over-ready">;
932
+ v: z.ZodLiteral<1>;
933
+ handoff: z.ZodString;
934
+ to: z.ZodObject<{
935
+ id: z.ZodString;
936
+ name: z.ZodString;
937
+ }, z.core.$strip>;
938
+ }, z.core.$strip>;
939
+ /** The sender's hand-over reached the room: `to` is the receiver the server found for the name given. */
940
+ export declare const HandedOverMessageSchema: z.ZodObject<{
941
+ type: z.ZodLiteral<"handed-over">;
942
+ v: z.ZodLiteral<1>;
943
+ handoff: z.ZodString;
944
+ to: z.ZodObject<{
945
+ id: z.ZodString;
946
+ name: z.ZodString;
947
+ }, z.core.$strip>;
948
+ }, z.core.$strip>;
527
949
  export declare const OfficeServerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
528
950
  type: z.ZodLiteral<"repair">;
529
951
  v: z.ZodLiteral<1>;
@@ -539,15 +961,105 @@ export declare const OfficeServerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodOb
539
961
  v: z.ZodLiteral<1>;
540
962
  code: z.ZodString;
541
963
  message: z.ZodString;
964
+ }, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
965
+ type: z.ZodLiteral<"request">;
966
+ v: z.ZodLiteral<1>;
967
+ id: z.ZodString;
968
+ kind: z.ZodLiteral<"answer-question">;
969
+ session: z.ZodString;
970
+ room: z.ZodString;
971
+ from: z.ZodObject<{
972
+ id: z.ZodString;
973
+ name: z.ZodString;
974
+ }, z.core.$strip>;
975
+ question: z.ZodString;
976
+ }, z.core.$strip>, z.ZodObject<{
977
+ type: z.ZodLiteral<"request">;
978
+ v: z.ZodLiteral<1>;
979
+ id: z.ZodString;
980
+ kind: z.ZodLiteral<"write-brief">;
981
+ session: z.ZodString;
982
+ room: z.ZodString;
983
+ handoff: z.ZodString;
984
+ to: z.ZodObject<{
985
+ id: z.ZodString;
986
+ name: z.ZodString;
987
+ }, z.core.$strip>;
988
+ }, z.core.$strip>, z.ZodObject<{
989
+ type: z.ZodLiteral<"request">;
990
+ v: z.ZodLiteral<1>;
991
+ id: z.ZodString;
992
+ kind: z.ZodLiteral<"owner-answer">;
993
+ session: z.ZodString;
994
+ question: z.ZodString;
995
+ answers: z.ZodRecord<z.ZodString, z.ZodString>;
996
+ }, z.core.$strip>], "kind">, z.ZodObject<{
997
+ type: z.ZodLiteral<"release">;
998
+ v: z.ZodLiteral<1>;
999
+ id: z.ZodString;
1000
+ }, z.core.$strip>, z.ZodObject<{
1001
+ type: z.ZodLiteral<"handoff">;
1002
+ v: z.ZodLiteral<1>;
1003
+ handoff: z.ZodObject<{
1004
+ id: z.ZodString;
1005
+ brief: z.ZodString;
1006
+ repos: z.ZodArray<z.ZodObject<{
1007
+ path: z.ZodString;
1008
+ remote: z.ZodString;
1009
+ branch: z.ZodString;
1010
+ commit: z.ZodString;
1011
+ }, z.core.$strip>>;
1012
+ }, z.core.$strip>;
1013
+ mode: z.ZodOptional<z.ZodEnum<{
1014
+ headless: "headless";
1015
+ terminal: "terminal";
1016
+ }>>;
1017
+ session: z.ZodOptional<z.ZodString>;
1018
+ }, z.core.$strip>, z.ZodObject<{
1019
+ type: z.ZodLiteral<"handed-over">;
1020
+ v: z.ZodLiteral<1>;
1021
+ handoff: z.ZodString;
1022
+ to: z.ZodObject<{
1023
+ id: z.ZodString;
1024
+ name: z.ZodString;
1025
+ }, z.core.$strip>;
1026
+ }, z.core.$strip>, z.ZodObject<{
1027
+ type: z.ZodLiteral<"hand-over-ready">;
1028
+ v: z.ZodLiteral<1>;
1029
+ handoff: z.ZodString;
1030
+ to: z.ZodObject<{
1031
+ id: z.ZodString;
1032
+ name: z.ZodString;
1033
+ }, z.core.$strip>;
1034
+ }, z.core.$strip>, z.ZodObject<{
1035
+ type: z.ZodLiteral<"drop">;
1036
+ v: z.ZodLiteral<1>;
1037
+ id: z.ZodString;
542
1038
  }, z.core.$strip>], "type">;
543
1039
  export type Project = z.infer<typeof ProjectSchema>;
1040
+ export type HandoffRepo = z.infer<typeof HandoffRepoSchema>;
1041
+ export type Handoff = z.infer<typeof HandoffSchema>;
544
1042
  export type HelloMessage = z.infer<typeof HelloMessageSchema>;
1043
+ export type RunnerHelloMessage = z.infer<typeof RunnerHelloMessageSchema>;
545
1044
  export type FullMessage = z.infer<typeof FullMessageSchema>;
546
1045
  export type ChangesMessage = z.infer<typeof ChangesMessageSchema>;
1046
+ export type ReplyMessage = z.infer<typeof ReplyMessageSchema>;
1047
+ export type RefusalMessage = z.infer<typeof RefusalMessageSchema>;
1048
+ export type HandOverMessage = z.infer<typeof HandOverMessageSchema>;
1049
+ export type TakeMessage = z.infer<typeof TakeMessageSchema>;
1050
+ export type TakenMessage = z.infer<typeof TakenMessageSchema>;
547
1051
  export type DataLayerMessage = z.infer<typeof DataLayerMessageSchema>;
548
1052
  export type RepairMessage = z.infer<typeof RepairMessageSchema>;
549
1053
  export type ConflictMessage = z.infer<typeof ConflictMessageSchema>;
550
1054
  export type ErrorMessage = z.infer<typeof ErrorMessageSchema>;
1055
+ export type RequestMessage = z.infer<typeof RequestMessageSchema>;
1056
+ export type RequestKind = RequestMessage["kind"];
1057
+ export type ReleaseMessage = z.infer<typeof ReleaseMessageSchema>;
1058
+ export type HandoffMessage = z.infer<typeof HandoffMessageSchema>;
1059
+ export type HandedOverMessage = z.infer<typeof HandedOverMessageSchema>;
1060
+ export type HandOverCheckMessage = z.infer<typeof HandOverCheckMessageSchema>;
1061
+ export type HandOverReadyMessage = z.infer<typeof HandOverReadyMessageSchema>;
1062
+ export type DropMessage = z.infer<typeof DropMessageSchema>;
551
1063
  export type OfficeServerMessage = z.infer<typeof OfficeServerMessageSchema>;
552
1064
  /**
553
1065
  * A parsed message, or why it was refused: `unsupported-version` when it carries a protocol
package/dist/messages.js CHANGED
@@ -11,17 +11,67 @@ export const ProjectSchema = z.object({
11
11
  id: z.string().min(1),
12
12
  name: z.string().min(1),
13
13
  });
14
+ const Account = z.object({ id: z.string().min(1), name: z.string() });
15
+ const Machine = z.object({ name: z.string().min(1) });
16
+ /** Matches a request with its reply or refusal. */
17
+ const RequestId = z.string().min(1);
18
+ /** A handoff's id. It names the handoff's branch, `isoplan/handoff/<id>`, so it keeps to safe characters. */
19
+ const HandoffId = z
20
+ .string()
21
+ .max(64)
22
+ .regex(/^[a-z0-9][a-z0-9-]*$/, "lowercase letters, digits and dashes");
23
+ /**
24
+ * One repo a handoff pushed: its path in the session's folder (`.` for the folder itself), remote,
25
+ * branch and commit. A handoff drives git on the receiver's machine, so the path stays inside the
26
+ * folder and the remote can't name a transport helper such as `ext::`, which runs a command.
27
+ */
28
+ export const HandoffRepoSchema = z.object({
29
+ path: z
30
+ .string()
31
+ .min(1)
32
+ .refine((path) => !/^([\\/]|[A-Za-z]:)/.test(path), "a path relative to the session's folder")
33
+ .refine((path) => !path.split(/[\\/]/).includes(".."), "a path inside the session's folder, with no `..`")
34
+ .refine((path) => !path.startsWith("-"), "a path that doesn't start with `-`, which git would read as an option"),
35
+ remote: z
36
+ .string()
37
+ .min(1)
38
+ .refine((remote) => !/^[A-Za-z0-9+.-]+::/.test(remote), "a remote with no transport helper (`<transport>::`)")
39
+ .refine((remote) => !remote.startsWith("-"), "a remote that doesn't start with `-`, which git would read as an option"),
40
+ branch: z.string().min(1),
41
+ commit: z.string().regex(/^([0-9a-f]{40}|[0-9a-f]{64})$/, "a full commit hash"),
42
+ });
43
+ /** What the receiver gets: the brief, and every repo pushed for it, each on the handoff's own branch. */
44
+ export const HandoffSchema = z
45
+ .object({
46
+ id: HandoffId,
47
+ brief: z.string().min(1),
48
+ repos: z.array(HandoffRepoSchema).min(1),
49
+ })
50
+ .superRefine((handoff, context) => {
51
+ handoff.repos.forEach((repo, i) => {
52
+ if (repo.branch !== `isoplan/handoff/${handoff.id}`) {
53
+ context.addIssue({ code: "custom", path: ["repos", i, "branch"], message: `the handoff's branch, isoplan/handoff/${handoff.id}` });
54
+ }
55
+ });
56
+ });
14
57
  // Data layer → office server.
15
58
  /** The first message on a connection: who is reporting, from where, about which session. */
16
59
  export const HelloMessageSchema = z.object({
17
60
  type: z.literal("hello"),
18
61
  v: Version,
19
62
  source: SourceSchema,
20
- account: z.object({ id: z.string().min(1), name: z.string() }),
21
- machine: z.object({ name: z.string().min(1) }),
63
+ account: Account,
64
+ machine: Machine,
22
65
  session: z.string().min(1),
23
66
  project: ProjectSchema,
24
67
  });
68
+ /** The first message on a runner's link: the one link per machine that answers requests for its rooms. */
69
+ export const RunnerHelloMessageSchema = z.object({
70
+ type: z.literal("runner"),
71
+ v: Version,
72
+ account: Account,
73
+ machine: Machine,
74
+ });
25
75
  /** All of the session's facts. Sent on connect and on repair. */
26
76
  export const FullMessageSchema = z.object({
27
77
  type: z.literal("full"),
@@ -37,10 +87,96 @@ export const ChangesMessageSchema = z.object({
37
87
  upsert: FactUpsertSchema,
38
88
  remove: FactRemoveSchema,
39
89
  });
90
+ /** The answer to a request, carrying the request's id and kind. */
91
+ export const ReplyMessageSchema = z.discriminatedUnion("kind", [
92
+ z.object({ type: z.literal("reply"), v: Version, id: RequestId, kind: z.literal("answer-question"), answer: z.string().min(1) }),
93
+ // `fallback`: the fork couldn't write the brief, so `brief` is only the runner's note of what was
94
+ // pushed, and the server writes the rest from the room's feed. The branch is pushed either way.
95
+ z.object({ type: z.literal("reply"), v: Version, id: RequestId, kind: z.literal("write-brief"), handoff: HandoffSchema, fallback: z.literal(true).optional() }),
96
+ // The owner's answer reached the question that was waiting for it.
97
+ z.object({ type: z.literal("reply"), v: Version, id: RequestId, kind: z.literal("owner-answer") }),
98
+ ]);
99
+ /**
100
+ * A request the machine won't answer, sent in place of its reply. `over-cap` names the cap it would
101
+ * go over. `withheld` means the secret scan matched; the reply follows if the owner releases it.
102
+ * `unavailable` is anything else that stops the room answering now, such as its checkout being gone,
103
+ * its lead being mid-turn or a push being rejected.
104
+ */
105
+ export const RefusalMessageSchema = z.discriminatedUnion("reason", [
106
+ z.object({
107
+ type: z.literal("refusal"),
108
+ v: Version,
109
+ id: RequestId,
110
+ reason: z.literal("over-cap"),
111
+ cap: z.enum(["room-hour", "owner-day", "owner-tokens"]),
112
+ }),
113
+ // `file`: what was withheld is the handoff's commit, whose added lines in that file matched (the
114
+ // pattern itself stays on the machine); without it, the brief or answer.
115
+ // `unchecked`: files the commit adds that the scan can't read (binary), named so the owner knows.
116
+ z.object({
117
+ type: z.literal("refusal"),
118
+ v: Version,
119
+ id: RequestId,
120
+ reason: z.literal("withheld"),
121
+ file: z.string().min(1).optional(),
122
+ unchecked: z.array(z.string().min(1)).optional(),
123
+ }),
124
+ z.object({ type: z.literal("refusal"), v: Version, id: RequestId, reason: z.literal("unavailable"), detail: z.string().min(1) }),
125
+ ]);
126
+ /**
127
+ * The sender's session handed its room over with the command: its agent wrote the brief and pushed.
128
+ * `to` is the receiver as the sender named them, for the server to find in the office.
129
+ */
130
+ export const HandOverMessageSchema = z.object({
131
+ type: z.literal("hand-over"),
132
+ v: Version,
133
+ to: z.string().min(1),
134
+ handoff: HandoffSchema,
135
+ });
136
+ /**
137
+ * The sender's session asks, before it pushes, whether a hand-over with this id to `to` would be
138
+ * taken: the server answers hand-over-ready, or an error saying why not.
139
+ */
140
+ export const HandOverCheckMessageSchema = z.object({
141
+ type: z.literal("hand-over-check"),
142
+ v: Version,
143
+ to: z.string().min(1),
144
+ handoff: HandoffId,
145
+ });
146
+ /** The receiver's session asks for the handoff a take code stands for. */
147
+ export const TakeMessageSchema = z.object({
148
+ type: z.literal("take"),
149
+ v: Version,
150
+ code: z.string().min(1),
151
+ });
152
+ /**
153
+ * The receiver took the handoff and joins its room. Each step that failed is listed with the repo it
154
+ * was for and the end of its output; a failed setup step doesn't stop the session opening. From a runner, `session` is the
155
+ * session it opened, which joins the room; without one no session opened (no clone to work in, or
156
+ * no terminal), so the handoff is still there to take. From a session, the session itself joins.
157
+ */
158
+ export const TakenMessageSchema = z.object({
159
+ type: z.literal("taken"),
160
+ v: Version,
161
+ handoff: HandoffId,
162
+ session: z.string().min(1).optional(),
163
+ failures: z.array(z.object({
164
+ step: z.enum(["worktree", "setup", "checkout", "open"]),
165
+ repo: z.string().min(1).optional(),
166
+ output: z.string(),
167
+ })),
168
+ });
40
169
  export const DataLayerMessageSchema = z.discriminatedUnion("type", [
41
170
  HelloMessageSchema,
171
+ RunnerHelloMessageSchema,
42
172
  FullMessageSchema,
43
173
  ChangesMessageSchema,
174
+ ReplyMessageSchema,
175
+ RefusalMessageSchema,
176
+ HandOverMessageSchema,
177
+ HandOverCheckMessageSchema,
178
+ TakeMessageSchema,
179
+ TakenMessageSchema,
44
180
  ]);
45
181
  // Office server → data layer.
46
182
  /** Asks the data layer to send its facts in full. */
@@ -64,10 +200,102 @@ export const ErrorMessageSchema = z.object({
64
200
  code: z.string().min(1),
65
201
  message: z.string(),
66
202
  });
203
+ /**
204
+ * Something for the machine to answer, with a reply or a refusal carrying the same id. `session` is
205
+ * the session it concerns: the lead whose fork answers or writes the brief, or the session whose
206
+ * agent asked its owner. `room` is the room the caps count against.
207
+ */
208
+ export const RequestMessageSchema = z.discriminatedUnion("kind", [
209
+ // Someone the room was handed to asks it a question.
210
+ z.object({
211
+ type: z.literal("request"),
212
+ v: Version,
213
+ id: RequestId,
214
+ kind: z.literal("answer-question"),
215
+ session: z.string().min(1),
216
+ room: z.string().min(1),
217
+ from: Account,
218
+ question: z.string().min(1),
219
+ }),
220
+ // The sender handed the room over from the floor: write the brief and push, for this handoff.
221
+ z.object({
222
+ type: z.literal("request"),
223
+ v: Version,
224
+ id: RequestId,
225
+ kind: z.literal("write-brief"),
226
+ session: z.string().min(1),
227
+ room: z.string().min(1),
228
+ handoff: HandoffId,
229
+ to: Account,
230
+ }),
231
+ // The owner answered their agent's question from the floor. `question` is the question fact's id,
232
+ // and `answers` maps each question's text to its answer.
233
+ z.object({
234
+ type: z.literal("request"),
235
+ v: Version,
236
+ id: RequestId,
237
+ kind: z.literal("owner-answer"),
238
+ session: z.string().min(1),
239
+ question: z.string().min(1),
240
+ answers: z.record(z.string(), z.string()),
241
+ }),
242
+ ]);
243
+ /**
244
+ * The request is over (its handoff was cancelled, dismissed or replaced): the machine drops what it
245
+ * holds for it, and doesn't send or push what it was still writing.
246
+ */
247
+ export const DropMessageSchema = z.object({
248
+ type: z.literal("drop"),
249
+ v: Version,
250
+ id: RequestId,
251
+ });
252
+ /**
253
+ * The owner released what the secret scan withheld, so the machine sends it now. On the runner's
254
+ * link `id` is the request whose reply was withheld; on a session's link it is the withheld
255
+ * report's `withheld.id`, and only that exact report is released.
256
+ */
257
+ export const ReleaseMessageSchema = z.object({
258
+ type: z.literal("release"),
259
+ v: Version,
260
+ id: RequestId,
261
+ });
262
+ /**
263
+ * A handoff for the receiver to take: sent to their runner when they take it from the floor, or to
264
+ * their session in answer to a take code.
265
+ */
266
+ export const HandoffMessageSchema = z.object({
267
+ type: z.literal("handoff"),
268
+ v: Version,
269
+ handoff: HandoffSchema,
270
+ // To a runner: how to open the session (a terminal, by default, or headless, with no window), and
271
+ // the session id to open it under, which is the one the server will let join the room.
272
+ mode: z.enum(["terminal", "headless"]).optional(),
273
+ session: z.string().uuid().optional(),
274
+ });
275
+ /** A hand-over-check passed: `to` is the receiver the server found for the name given. */
276
+ export const HandOverReadyMessageSchema = z.object({
277
+ type: z.literal("hand-over-ready"),
278
+ v: Version,
279
+ handoff: HandoffId,
280
+ to: Account,
281
+ });
282
+ /** The sender's hand-over reached the room: `to` is the receiver the server found for the name given. */
283
+ export const HandedOverMessageSchema = z.object({
284
+ type: z.literal("handed-over"),
285
+ v: Version,
286
+ handoff: HandoffId,
287
+ to: Account,
288
+ });
67
289
  export const OfficeServerMessageSchema = z.discriminatedUnion("type", [
68
290
  RepairMessageSchema,
69
291
  ConflictMessageSchema,
70
292
  ErrorMessageSchema,
293
+ RequestMessageSchema,
294
+ ReleaseMessageSchema,
295
+ HandoffMessageSchema,
296
+ HandedOverMessageSchema,
297
+ HandOverReadyMessageSchema,
298
+ DropMessageSchema,
71
299
  ]);
72
300
  /** Validates a message an office server received from a data layer. */
73
301
  export function parseDataLayerMessage(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isoplan/protocol",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "The wire protocol between Isoplan's Claude Code plugin and an office server: message and fact types, with zod parsers.",
5
5
  "license": "MIT",
6
6
  "repository": {