@chipschat/protocol 0.0.0-stage → 1.0.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.
Files changed (371) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -2
  3. package/dist/generated/types.d.ts +4052 -0
  4. package/dist/generated/types.d.ts.map +1 -0
  5. package/dist/generated/types.js +7 -0
  6. package/dist/generated/types.js.map +1 -0
  7. package/dist/src/address.d.ts +106 -0
  8. package/dist/src/address.d.ts.map +1 -0
  9. package/dist/src/address.js +141 -0
  10. package/dist/src/address.js.map +1 -0
  11. package/dist/src/agent-context-windows.d.ts +235 -0
  12. package/dist/src/agent-context-windows.d.ts.map +1 -0
  13. package/dist/src/agent-context-windows.js +213 -0
  14. package/dist/src/agent-context-windows.js.map +1 -0
  15. package/dist/src/agent-heartbeats.d.ts +106 -0
  16. package/dist/src/agent-heartbeats.d.ts.map +1 -0
  17. package/dist/src/agent-heartbeats.js +111 -0
  18. package/dist/src/agent-heartbeats.js.map +1 -0
  19. package/dist/src/agent-models.d.ts +158 -0
  20. package/dist/src/agent-models.d.ts.map +1 -0
  21. package/dist/src/agent-models.js +171 -0
  22. package/dist/src/agent-models.js.map +1 -0
  23. package/dist/src/agent-place.d.ts +76 -0
  24. package/dist/src/agent-place.d.ts.map +1 -0
  25. package/dist/src/agent-place.js +80 -0
  26. package/dist/src/agent-place.js.map +1 -0
  27. package/dist/src/agents.d.ts +24 -0
  28. package/dist/src/agents.d.ts.map +1 -0
  29. package/dist/src/agents.js +58 -0
  30. package/dist/src/agents.js.map +1 -0
  31. package/dist/src/capabilities.d.ts +121 -0
  32. package/dist/src/capabilities.d.ts.map +1 -0
  33. package/dist/src/capabilities.js +120 -0
  34. package/dist/src/capabilities.js.map +1 -0
  35. package/dist/src/checklist.d.ts +19 -0
  36. package/dist/src/checklist.d.ts.map +1 -0
  37. package/dist/src/checklist.js +22 -0
  38. package/dist/src/checklist.js.map +1 -0
  39. package/dist/src/commands.d.ts +50 -0
  40. package/dist/src/commands.d.ts.map +1 -0
  41. package/dist/src/commands.js +274 -0
  42. package/dist/src/commands.js.map +1 -0
  43. package/dist/src/connectors.d.ts +90 -0
  44. package/dist/src/connectors.d.ts.map +1 -0
  45. package/dist/src/connectors.js +119 -0
  46. package/dist/src/connectors.js.map +1 -0
  47. package/dist/src/context-files.d.ts +304 -0
  48. package/dist/src/context-files.d.ts.map +1 -0
  49. package/dist/src/context-files.js +247 -0
  50. package/dist/src/context-files.js.map +1 -0
  51. package/dist/src/context.d.ts +369 -0
  52. package/dist/src/context.d.ts.map +1 -0
  53. package/dist/src/context.js +526 -0
  54. package/dist/src/context.js.map +1 -0
  55. package/dist/src/direct-asks.d.ts +36 -0
  56. package/dist/src/direct-asks.d.ts.map +1 -0
  57. package/dist/src/direct-asks.js +43 -0
  58. package/dist/src/direct-asks.js.map +1 -0
  59. package/dist/src/envelope.d.ts +70 -0
  60. package/dist/src/envelope.d.ts.map +1 -0
  61. package/dist/src/envelope.js +46 -0
  62. package/dist/src/envelope.js.map +1 -0
  63. package/dist/src/events/catalogue.d.ts +50 -0
  64. package/dist/src/events/catalogue.d.ts.map +1 -0
  65. package/dist/src/events/catalogue.js +70 -0
  66. package/dist/src/events/catalogue.js.map +1 -0
  67. package/dist/src/events/chips-to-harness.d.ts +37 -0
  68. package/dist/src/events/chips-to-harness.d.ts.map +1 -0
  69. package/dist/src/events/chips-to-harness.js +511 -0
  70. package/dist/src/events/chips-to-harness.js.map +1 -0
  71. package/dist/src/events/harness-to-chips.d.ts +38 -0
  72. package/dist/src/events/harness-to-chips.d.ts.map +1 -0
  73. package/dist/src/events/harness-to-chips.js +593 -0
  74. package/dist/src/events/harness-to-chips.js.map +1 -0
  75. package/dist/src/events/index.d.ts +6 -0
  76. package/dist/src/events/index.d.ts.map +1 -0
  77. package/dist/src/events/index.js +5 -0
  78. package/dist/src/events/index.js.map +1 -0
  79. package/dist/src/events/workspace.d.ts +222 -0
  80. package/dist/src/events/workspace.d.ts.map +1 -0
  81. package/dist/src/events/workspace.js +1039 -0
  82. package/dist/src/events/workspace.js.map +1 -0
  83. package/dist/src/exchange.d.ts +262 -0
  84. package/dist/src/exchange.d.ts.map +1 -0
  85. package/dist/src/exchange.js +413 -0
  86. package/dist/src/exchange.js.map +1 -0
  87. package/dist/src/first-names.d.ts +29 -0
  88. package/dist/src/first-names.d.ts.map +1 -0
  89. package/dist/src/first-names.js +80 -0
  90. package/dist/src/first-names.js.map +1 -0
  91. package/dist/src/frames.d.ts +526 -0
  92. package/dist/src/frames.d.ts.map +1 -0
  93. package/dist/src/frames.js +346 -0
  94. package/dist/src/frames.js.map +1 -0
  95. package/dist/src/harness-jobs.d.ts +313 -0
  96. package/dist/src/harness-jobs.d.ts.map +1 -0
  97. package/dist/src/harness-jobs.js +210 -0
  98. package/dist/src/harness-jobs.js.map +1 -0
  99. package/dist/src/ids/index.d.ts +3 -0
  100. package/dist/src/ids/index.d.ts.map +1 -0
  101. package/dist/src/ids/index.js +2 -0
  102. package/dist/src/ids/index.js.map +1 -0
  103. package/dist/src/ids/ulid.d.ts +96 -0
  104. package/dist/src/ids/ulid.d.ts.map +1 -0
  105. package/dist/src/ids/ulid.js +212 -0
  106. package/dist/src/ids/ulid.js.map +1 -0
  107. package/dist/src/index.d.ts +81 -0
  108. package/dist/src/index.d.ts.map +1 -0
  109. package/dist/src/index.js +47 -0
  110. package/dist/src/index.js.map +1 -0
  111. package/dist/src/invite-link.d.ts +64 -0
  112. package/dist/src/invite-link.d.ts.map +1 -0
  113. package/dist/src/invite-link.js +99 -0
  114. package/dist/src/invite-link.js.map +1 -0
  115. package/dist/src/join.d.ts +188 -0
  116. package/dist/src/join.d.ts.map +1 -0
  117. package/dist/src/join.js +190 -0
  118. package/dist/src/join.js.map +1 -0
  119. package/dist/src/limits.d.ts +50 -0
  120. package/dist/src/limits.d.ts.map +1 -0
  121. package/dist/src/limits.js +106 -0
  122. package/dist/src/limits.js.map +1 -0
  123. package/dist/src/matters.d.ts +22 -0
  124. package/dist/src/matters.d.ts.map +1 -0
  125. package/dist/src/matters.js +26 -0
  126. package/dist/src/matters.js.map +1 -0
  127. package/dist/src/mentions.d.ts +63 -0
  128. package/dist/src/mentions.d.ts.map +1 -0
  129. package/dist/src/mentions.js +129 -0
  130. package/dist/src/mentions.js.map +1 -0
  131. package/dist/src/names.d.ts +58 -0
  132. package/dist/src/names.d.ts.map +1 -0
  133. package/dist/src/names.js +192 -0
  134. package/dist/src/names.js.map +1 -0
  135. package/dist/src/no-reply.d.ts +17 -0
  136. package/dist/src/no-reply.d.ts.map +1 -0
  137. package/dist/src/no-reply.js +48 -0
  138. package/dist/src/no-reply.js.map +1 -0
  139. package/dist/src/notifications.d.ts +81 -0
  140. package/dist/src/notifications.d.ts.map +1 -0
  141. package/dist/src/notifications.js +65 -0
  142. package/dist/src/notifications.js.map +1 -0
  143. package/dist/src/pages.d.ts +32 -0
  144. package/dist/src/pages.d.ts.map +1 -0
  145. package/dist/src/pages.js +32 -0
  146. package/dist/src/pages.js.map +1 -0
  147. package/dist/src/pairing.d.ts +99 -0
  148. package/dist/src/pairing.d.ts.map +1 -0
  149. package/dist/src/pairing.js +163 -0
  150. package/dist/src/pairing.js.map +1 -0
  151. package/dist/src/primitives.d.ts +267 -0
  152. package/dist/src/primitives.d.ts.map +1 -0
  153. package/dist/src/primitives.js +279 -0
  154. package/dist/src/primitives.js.map +1 -0
  155. package/dist/src/project.d.ts +335 -0
  156. package/dist/src/project.d.ts.map +1 -0
  157. package/dist/src/project.js +499 -0
  158. package/dist/src/project.js.map +1 -0
  159. package/dist/src/ranges.d.ts +31 -0
  160. package/dist/src/ranges.d.ts.map +1 -0
  161. package/dist/src/ranges.js +51 -0
  162. package/dist/src/ranges.js.map +1 -0
  163. package/dist/src/relay.d.ts +177 -0
  164. package/dist/src/relay.d.ts.map +1 -0
  165. package/dist/src/relay.js +147 -0
  166. package/dist/src/relay.js.map +1 -0
  167. package/dist/src/room-files.d.ts +146 -0
  168. package/dist/src/room-files.d.ts.map +1 -0
  169. package/dist/src/room-files.js +135 -0
  170. package/dist/src/room-files.js.map +1 -0
  171. package/dist/src/room-note.d.ts +213 -0
  172. package/dist/src/room-note.d.ts.map +1 -0
  173. package/dist/src/room-note.js +457 -0
  174. package/dist/src/room-note.js.map +1 -0
  175. package/dist/src/space-icons.d.ts +68 -0
  176. package/dist/src/space-icons.d.ts.map +1 -0
  177. package/dist/src/space-icons.js +142 -0
  178. package/dist/src/space-icons.js.map +1 -0
  179. package/dist/src/spend.d.ts +57 -0
  180. package/dist/src/spend.d.ts.map +1 -0
  181. package/dist/src/spend.js +94 -0
  182. package/dist/src/spend.js.map +1 -0
  183. package/dist/src/visibility.d.ts +170 -0
  184. package/dist/src/visibility.d.ts.map +1 -0
  185. package/dist/src/visibility.js +218 -0
  186. package/dist/src/visibility.js.map +1 -0
  187. package/fixtures/agent.asked.json +15 -0
  188. package/fixtures/agent.attached.json +15 -0
  189. package/fixtures/agent.deleted.json +16 -0
  190. package/fixtures/agent.fork.json +14 -0
  191. package/fixtures/agent.lock_set.json +13 -0
  192. package/fixtures/agent.registered.json +17 -0
  193. package/fixtures/agent.released.json +16 -0
  194. package/fixtures/agent.updated.json +14 -0
  195. package/fixtures/approval.executed.json +16 -0
  196. package/fixtures/approval.request.json +45 -0
  197. package/fixtures/approval.resolved.json +20 -0
  198. package/fixtures/approval.routed.json +20 -0
  199. package/fixtures/artifact.create.json +18 -0
  200. package/fixtures/attachment.fetched.json +15 -0
  201. package/fixtures/attachment.limits_set.json +15 -0
  202. package/fixtures/budget.warning.json +20 -0
  203. package/fixtures/checkpoint.json +16 -0
  204. package/fixtures/context.compacted.json +16 -0
  205. package/fixtures/context.usage.json +17 -0
  206. package/fixtures/exchange.limits_set.json +15 -0
  207. package/fixtures/exchange.set.json +13 -0
  208. package/fixtures/feedback.json +21 -0
  209. package/fixtures/frames/ack.json +6 -0
  210. package/fixtures/frames/context.edit.json +11 -0
  211. package/fixtures/frames/context_window.change.json +9 -0
  212. package/fixtures/frames/context_window.compact.json +8 -0
  213. package/fixtures/frames/error.json +6 -0
  214. package/fixtures/frames/event.json +20 -0
  215. package/fixtures/frames/events.json +39 -0
  216. package/fixtures/frames/folder.open.json +6 -0
  217. package/fixtures/frames/folder.open.page.json +7 -0
  218. package/fixtures/frames/folder.run.json +8 -0
  219. package/fixtures/frames/folder.run_state.json +12 -0
  220. package/fixtures/frames/heartbeat.change.json +10 -0
  221. package/fixtures/frames/hello.json +18 -0
  222. package/fixtures/frames/job.change.json +9 -0
  223. package/fixtures/frames/join.json +19 -0
  224. package/fixtures/frames/model.change.json +10 -0
  225. package/fixtures/frames/ping.json +4 -0
  226. package/fixtures/frames/pong.json +4 -0
  227. package/fixtures/frames/presence.json +12 -0
  228. package/fixtures/frames/receipt.json +5 -0
  229. package/fixtures/frames/restart.json +5 -0
  230. package/fixtures/frames/subscribe.json +6 -0
  231. package/fixtures/handoff.json +20 -0
  232. package/fixtures/harness.removed.json +15 -0
  233. package/fixtures/harness.transferred.json +15 -0
  234. package/fixtures/hello.json +61 -0
  235. package/fixtures/join.allowed.json +20 -0
  236. package/fixtures/join.denied.json +17 -0
  237. package/fixtures/lane.updated.json +17 -0
  238. package/fixtures/membership.added.json +16 -0
  239. package/fixtures/membership.removed.json +14 -0
  240. package/fixtures/membership.replaced.json +15 -0
  241. package/fixtures/message.deleted.json +15 -0
  242. package/fixtures/message.edited.json +15 -0
  243. package/fixtures/message.handed.json +14 -0
  244. package/fixtures/message.heard.json +14 -0
  245. package/fixtures/message.held.json +14 -0
  246. package/fixtures/message.hidden.json +14 -0
  247. package/fixtures/message.new.json +96 -0
  248. package/fixtures/message.overheard.json +22 -0
  249. package/fixtures/message.pinned.json +14 -0
  250. package/fixtures/message.post.json +14 -0
  251. package/fixtures/message.shown.json +14 -0
  252. package/fixtures/message.unpinned.json +14 -0
  253. package/fixtures/person.face_set.json +17 -0
  254. package/fixtures/person.joined.json +16 -0
  255. package/fixtures/person.removed.json +16 -0
  256. package/fixtures/person.renamed.json +14 -0
  257. package/fixtures/policy.updated.json +30 -0
  258. package/fixtures/project.changed.json +21 -0
  259. package/fixtures/question.answered.json +23 -0
  260. package/fixtures/question.ask.json +37 -0
  261. package/fixtures/receipt.json +15 -0
  262. package/fixtures/relay.set.json +12 -0
  263. package/fixtures/role.changed.json +15 -0
  264. package/fixtures/run.cancel.json +15 -0
  265. package/fixtures/run.completed.json +20 -0
  266. package/fixtures/run.failed.json +20 -0
  267. package/fixtures/run.pause.json +15 -0
  268. package/fixtures/run.plan.json +24 -0
  269. package/fixtures/run.requested.json +34 -0
  270. package/fixtures/run.resume.json +15 -0
  271. package/fixtures/run.started.json +33 -0
  272. package/fixtures/run.status.json +17 -0
  273. package/fixtures/run.steer.json +21 -0
  274. package/fixtures/session.ended.json +15 -0
  275. package/fixtures/session.renamed.json +15 -0
  276. package/fixtures/session.started.json +17 -0
  277. package/fixtures/space.claimed.json +15 -0
  278. package/fixtures/space.created.json +14 -0
  279. package/fixtures/space.erased.json +13 -0
  280. package/fixtures/space.lead_set.json +13 -0
  281. package/fixtures/space.lock_set.json +13 -0
  282. package/fixtures/space.spend_ceiling_set.json +13 -0
  283. package/fixtures/space.updated.json +14 -0
  284. package/fixtures/step.log.json +26 -0
  285. package/fixtures/task.json +22 -0
  286. package/fixtures/turn.passed.json +14 -0
  287. package/fixtures/usage.json +21 -0
  288. package/fixtures/workspace.renamed.json +13 -0
  289. package/generated/agent-connect.json +13966 -0
  290. package/generated/schema/agent.asked.json +114 -0
  291. package/generated/schema/agent.attached.json +465 -0
  292. package/generated/schema/agent.deleted.json +127 -0
  293. package/generated/schema/agent.fork.json +107 -0
  294. package/generated/schema/agent.lock_set.json +105 -0
  295. package/generated/schema/agent.registered.json +130 -0
  296. package/generated/schema/agent.released.json +129 -0
  297. package/generated/schema/agent.updated.json +151 -0
  298. package/generated/schema/approval.executed.json +125 -0
  299. package/generated/schema/approval.request.json +279 -0
  300. package/generated/schema/approval.resolved.json +162 -0
  301. package/generated/schema/approval.routed.json +185 -0
  302. package/generated/schema/artifact.create.json +206 -0
  303. package/generated/schema/attachment.fetched.json +114 -0
  304. package/generated/schema/attachment.limits_set.json +136 -0
  305. package/generated/schema/budget.warning.json +152 -0
  306. package/generated/schema/checkpoint.json +111 -0
  307. package/generated/schema/context.compacted.json +124 -0
  308. package/generated/schema/context.usage.json +120 -0
  309. package/generated/schema/exchange.limits_set.json +127 -0
  310. package/generated/schema/exchange.set.json +144 -0
  311. package/generated/schema/feedback.json +173 -0
  312. package/generated/schema/handoff.json +122 -0
  313. package/generated/schema/harness.removed.json +122 -0
  314. package/generated/schema/harness.transferred.json +117 -0
  315. package/generated/schema/hello.json +509 -0
  316. package/generated/schema/join.allowed.json +176 -0
  317. package/generated/schema/join.denied.json +150 -0
  318. package/generated/schema/lane.updated.json +223 -0
  319. package/generated/schema/membership.added.json +153 -0
  320. package/generated/schema/membership.removed.json +126 -0
  321. package/generated/schema/membership.replaced.json +106 -0
  322. package/generated/schema/message.deleted.json +105 -0
  323. package/generated/schema/message.edited.json +107 -0
  324. package/generated/schema/message.handed.json +111 -0
  325. package/generated/schema/message.heard.json +100 -0
  326. package/generated/schema/message.held.json +181 -0
  327. package/generated/schema/message.hidden.json +100 -0
  328. package/generated/schema/message.new.json +1369 -0
  329. package/generated/schema/message.overheard.json +701 -0
  330. package/generated/schema/message.pinned.json +100 -0
  331. package/generated/schema/message.post.json +290 -0
  332. package/generated/schema/message.shown.json +100 -0
  333. package/generated/schema/message.unpinned.json +100 -0
  334. package/generated/schema/person.face_set.json +134 -0
  335. package/generated/schema/person.joined.json +128 -0
  336. package/generated/schema/person.removed.json +133 -0
  337. package/generated/schema/person.renamed.json +114 -0
  338. package/generated/schema/policy.updated.json +277 -0
  339. package/generated/schema/project.changed.json +199 -0
  340. package/generated/schema/question.answered.json +154 -0
  341. package/generated/schema/question.ask.json +194 -0
  342. package/generated/schema/receipt.json +109 -0
  343. package/generated/schema/relay.set.json +99 -0
  344. package/generated/schema/role.changed.json +116 -0
  345. package/generated/schema/run.cancel.json +106 -0
  346. package/generated/schema/run.completed.json +139 -0
  347. package/generated/schema/run.failed.json +135 -0
  348. package/generated/schema/run.pause.json +106 -0
  349. package/generated/schema/run.plan.json +128 -0
  350. package/generated/schema/run.requested.json +309 -0
  351. package/generated/schema/run.resume.json +106 -0
  352. package/generated/schema/run.started.json +142 -0
  353. package/generated/schema/run.status.json +120 -0
  354. package/generated/schema/run.steer.json +163 -0
  355. package/generated/schema/session.ended.json +106 -0
  356. package/generated/schema/session.renamed.json +108 -0
  357. package/generated/schema/session.started.json +116 -0
  358. package/generated/schema/space.claimed.json +107 -0
  359. package/generated/schema/space.created.json +148 -0
  360. package/generated/schema/space.erased.json +129 -0
  361. package/generated/schema/space.lead_set.json +108 -0
  362. package/generated/schema/space.lock_set.json +99 -0
  363. package/generated/schema/space.spend_ceiling_set.json +102 -0
  364. package/generated/schema/space.updated.json +112 -0
  365. package/generated/schema/step.log.json +187 -0
  366. package/generated/schema/task.json +268 -0
  367. package/generated/schema/turn.passed.json +99 -0
  368. package/generated/schema/usage.json +155 -0
  369. package/generated/schema/workspace.renamed.json +107 -0
  370. package/generated/types.ts +4178 -0
  371. package/package.json +38 -3
@@ -0,0 +1,526 @@
1
+ /**
2
+ * What a harness is handed with a question (ADR 0088): the room's lines since it last spoke there.
3
+ *
4
+ * Chips keeps the room's conversation, the harness keeps its own memory. What joins them is this
5
+ * block, sent on `message.new` and read back through `GET /v1/spaces/:id/context`. The server that
6
+ * builds it, the conformance fake that plays the server and the SDK that renders it have to hand
7
+ * over the same lines, so the rule lives here, with the schemas, as `address.ts` does.
8
+ *
9
+ * Three steps, each pure:
10
+ * - `linesOf` turns a room's events into lines: what was said, as it reads now, and who came, went
11
+ * or took a new name, and when the room was put away or brought back.
12
+ * - `contextLines` keeps the newest that fit a budget, oldest first, and cuts a line longer than
13
+ * the whole budget rather than dropping it.
14
+ * - `renderContext` writes them as the adapters always have: "Said in this room since you last
15
+ * spoke:", then `Name: words`, one per line; then the room's files, one per line (ADR 0099).
16
+ *
17
+ * A reply hands over the message it answers in the same shape (`replyingTo`, ADR 0219), and
18
+ * `renderReplyingTo` writes it for the turn.
19
+ */
20
+ import { z } from "zod";
21
+ import { messageIdOf } from "./ids/index.js";
22
+ import { agentId, id, isoTimestamp, MAX_TRANSCRIPT_LENGTH } from "./primitives.js";
23
+ import { ROOM_FILES_IN_CONTEXT, renderRoomFiles, roomFiles } from "./room-files.js";
24
+ import { MONTHS } from "./room-note.js";
25
+ import { jobSpend } from "./spend.js";
26
+ /**
27
+ * What a harness is handed when it says nothing. It was the first adapters' own numbers, 20 lines
28
+ * and 4,000 characters, until agents shared rooms: their answers run to 2,000 characters, and in a
29
+ * room of four on 30 October 2026 the lead was handed two of the four introductions and another
30
+ * agent three (ADR 0249).
31
+ */
32
+ export const CONTEXT_BUDGET = { lines: 40, chars: 16_000 };
33
+ /** The most Chips hands over with one message. More is the pull route's, a page at a time. */
34
+ export const CONTEXT_CEILING = { lines: 200, chars: 32_000 };
35
+ /** The heading the plain form opens with. */
36
+ export const CONTEXT_HEADING = "Said in this space since you last spoke:";
37
+ export const contextBudget = z
38
+ .object({
39
+ lines: z
40
+ .int()
41
+ .nonnegative()
42
+ .optional()
43
+ .describe("The most lines to be handed, 40 when absent. Chips hands over 200 at most, and none when this is 0."),
44
+ chars: z
45
+ .int()
46
+ .nonnegative()
47
+ .optional()
48
+ .describe("The most characters those lines may run to, as `Name: words` one per line, 16,000 when absent. Chips hands over 32,000 at most."),
49
+ })
50
+ .describe("How much of the room a harness is handed with a message for it (ADR 0088). Its own to say: a budget promises nothing to anybody else.");
51
+ /** A budget as Chips applies it: what was asked, filled in and kept under the ceiling. */
52
+ export function budgetOf(asked) {
53
+ return {
54
+ lines: Math.min(asked?.lines ?? CONTEXT_BUDGET.lines, CONTEXT_CEILING.lines),
55
+ chars: Math.min(asked?.chars ?? CONTEXT_BUDGET.chars, CONTEXT_CEILING.chars),
56
+ };
57
+ }
58
+ export const contextLine = z
59
+ .object({
60
+ seq: z.int().positive().describe("Where in the log it happened."),
61
+ at: isoTimestamp.describe("When."),
62
+ kind: z
63
+ .enum(["said", "joined", "left", "renamed", "archived", "unarchived"])
64
+ .describe("`said`: a message, addressed to this harness or not. `joined` and `left`: somebody came into the room or went. `renamed`: somebody took a new name, or the room a new title. `archived` and `unarchived`: the room was put away or brought back."),
65
+ from: z
66
+ .object({
67
+ id: z.string().min(1).max(120).describe("Their participant id, or `system`."),
68
+ kind: z.enum(["person", "harness", "agent", "system"]),
69
+ name: z.string().min(1).max(120).describe("What they go by now."),
70
+ role: z
71
+ .enum(["owner", "member", "guest"])
72
+ .optional()
73
+ .describe("Their standing in this room, when they are in it (SEC-15)."),
74
+ workspace_role: z
75
+ .enum(["owner", "admin", "member", "guest"])
76
+ .optional()
77
+ .describe("A person's standing in the workspace (SEC-15): the plain form says it after the name, so a guest's line reads as a guest's. Absent for an agent or a harness."),
78
+ })
79
+ .describe("Who: the one who said it, came, went or took the new name; for the room's own lines, who retitled, archived or unarchived it."),
80
+ message_id: id("message").optional().describe("On `said`: the message."),
81
+ text: z
82
+ .string()
83
+ .max(64_000)
84
+ .optional()
85
+ .describe("On `said`: the words as they read now, so an edited message reads edited; a deleted one is not a line. Cut with an ellipsis when the one line is longer than the whole budget."),
86
+ transcript: z
87
+ .string()
88
+ .max(MAX_TRANSCRIPT_LENGTH)
89
+ .optional()
90
+ .describe("On `said`: what a voice note said, as the server heard it (ADR 0054)."),
91
+ files: z
92
+ .array(z.string().min(1).max(255))
93
+ .max(20)
94
+ .optional()
95
+ .describe("On `said`: the names of the files it carried."),
96
+ addressed_to: z
97
+ .array(agentId)
98
+ .max(64)
99
+ .optional()
100
+ .describe("On `said`: the agents it was for (ADR 0081, ADR 0087), so a harness can leave out a line one of its agents already took a turn on. Absent on a message from before Chips said so."),
101
+ held: z
102
+ .literal(true)
103
+ .optional()
104
+ .describe("On `said`: the guard held it (ADR 0081), so it was for nobody."),
105
+ name: z
106
+ .string()
107
+ .min(1)
108
+ .max(120)
109
+ .optional()
110
+ .describe("On `renamed`, for a participant: the name they took."),
111
+ previous: z
112
+ .string()
113
+ .min(1)
114
+ .max(120)
115
+ .optional()
116
+ .describe("On `renamed`, for a participant: the name they went by until then."),
117
+ title: z
118
+ .string()
119
+ .min(1)
120
+ .max(200)
121
+ .optional()
122
+ .describe("On `renamed`, for the room: its new title."),
123
+ })
124
+ .describe("One line of a room: something said, or something that happened to who is in it.");
125
+ export const roomContext = z
126
+ .object({
127
+ lines: z
128
+ .array(contextLine)
129
+ .max(CONTEXT_CEILING.lines)
130
+ .describe("Oldest first, the newest that fit the budget."),
131
+ since_seq: z
132
+ .int()
133
+ .nonnegative()
134
+ .describe("Where they start: after this `seq`. With a message, where the turn that said the harness's own last message in the room began (ADR 0105), else its joining; from the pull route, 0."),
135
+ truncated: z
136
+ .boolean()
137
+ .describe("Whether older lines after `since_seq` were left out to fit the budget."),
138
+ before: z
139
+ .int()
140
+ .positive()
141
+ .describe("A cursor: `GET /v1/spaces/:id/context?before=` this reads what came before these lines."),
142
+ files: roomFiles
143
+ .max(ROOM_FILES_IN_CONTEXT)
144
+ .optional()
145
+ .describe("The room's files at their current version, newest first, the 20 newest (ADR 0099): with a message, as of it, its own files included; from the pull route, as of now. Each with a URL for this harness. Absent from a Chips before files, and when the room has none."),
146
+ spend: jobSpend
147
+ .optional()
148
+ .describe("What the room's job has spent, as of the message (for one Chips held, as of its hand-over, when a new job began), against what the room allows a job (ADR 0117). With a message only; the room note says it in words. Absent from a Chips before it."),
149
+ })
150
+ .describe("What was said in a room since the harness last spoke there (ADR 0088). Every line is from a room it is in now.");
151
+ /** As much of a quoted message's words as a reply hands over (ADR 0219), on a budget of its own. */
152
+ export const REPLY_QUOTE_CHARS = 2000;
153
+ /** The lines said just before a quoted message older than the turn's context (ADR 0219). */
154
+ export const REPLY_BEFORE_LINES = 3;
155
+ export const replyingTo = contextLine
156
+ .extend({
157
+ kind: z.literal("said"),
158
+ message_id: id("message").describe("The message the reply answers: its `reply_to`."),
159
+ edited: z
160
+ .literal(true)
161
+ .optional()
162
+ .describe("Its author changed its words since: `text` is how it reads now."),
163
+ deleted: z
164
+ .literal(true)
165
+ .optional()
166
+ .describe("Taken back since it was answered: no words, no files, only who and when."),
167
+ before: z
168
+ .array(contextLine)
169
+ .max(REPLY_BEFORE_LINES)
170
+ .optional()
171
+ .describe("Up to three lines said just before it, oldest first, so the turn has what it was about. Only with a turn, and only when the message is older than the lines `context` hands over."),
172
+ })
173
+ .describe("The message a reply answers, as the room reads it now (ADR 0219): one line in the context's shape, its words cut at 2,000 characters, said before the agent joined the room or not. It never names a message in another room.");
174
+ /**
175
+ * A message as a reply quotes it: its words cut to `REPLY_QUOTE_CHARS`, and a deleted one's words
176
+ * and files gone. Both the server and the conformance fake shape it here.
177
+ */
178
+ export function quoteOf(line, changed, before) {
179
+ const { text, transcript, files, ...who } = line;
180
+ const kept = changed.deleted === true
181
+ ? {}
182
+ : {
183
+ text: quoted(text ?? ""),
184
+ ...(transcript === undefined ? {} : { transcript }),
185
+ ...(files === undefined ? {} : { files }),
186
+ };
187
+ return {
188
+ ...who,
189
+ kind: "said",
190
+ ...kept,
191
+ ...(changed.edited === true && changed.deleted !== true ? { edited: true } : {}),
192
+ ...(changed.deleted === true ? { deleted: true } : {}),
193
+ ...(before === undefined || before.length === 0 ? {} : { before: [...before] }),
194
+ };
195
+ }
196
+ function quoted(text) {
197
+ return text.length <= REPLY_QUOTE_CHARS
198
+ ? text
199
+ : `${text.slice(0, REPLY_QUOTE_CHARS - 1).trimEnd()}…`;
200
+ }
201
+ /**
202
+ * Whether a quoted message is older than the lines a turn was handed, so the lines before it come
203
+ * too (ADR 0219): at or before where they start, or before the first of them when older ones were
204
+ * left out to fit. No context, no lines before it: a harness that asked for none gets none.
205
+ */
206
+ export function quotesBefore(seq, handed) {
207
+ if (handed === undefined)
208
+ return false;
209
+ if (seq <= handed.since_seq)
210
+ return true;
211
+ const first = handed.lines[0]?.seq;
212
+ return handed.truncated && first !== undefined && seq < first;
213
+ }
214
+ function fromOf(who, participantId, kind) {
215
+ if (participantId === "system")
216
+ return { id: "system", kind: "system", name: "Chips" };
217
+ const known = who(participantId);
218
+ const said = known?.kind ?? (typeof kind === "string" ? kind : undefined);
219
+ return {
220
+ id: participantId,
221
+ kind: said === "person" || said === "system" || said === "agent" ? said : "harness",
222
+ name: (known?.name ?? participantId).slice(0, 120) || participantId,
223
+ ...(known?.role === undefined ? {} : { role: known.role }),
224
+ ...(known?.workspace_role === undefined ? {} : { workspace_role: known.workspace_role }),
225
+ };
226
+ }
227
+ /**
228
+ * A person's name with their standing in the workspace after it, "Priya (guest)", for the words a
229
+ * model reads (SEC-15): a guest's "delete the old branches" read exactly as the owner's would. The
230
+ * room's role is not said: a room's "owner" is whoever opened it, which a member can, and would
231
+ * read as the workspace's. An agent's or a harness's name is itself.
232
+ */
233
+ export function withRole(name, from) {
234
+ if (from.kind !== "person" || from.workspace_role === undefined)
235
+ return name;
236
+ return `${name} (${from.workspace_role})`;
237
+ }
238
+ function str(value) {
239
+ return typeof value === "string" && value !== "" ? value : undefined;
240
+ }
241
+ /** A message's words and what it carried: text as given, voice notes heard, files by name. */
242
+ function saidFields(payload) {
243
+ const files = Array.isArray(payload["attachments"])
244
+ ? payload["attachments"]
245
+ : [];
246
+ const heard = files.map((file) => str(file["transcript"])).filter((each) => each !== undefined);
247
+ const names = files.map((file) => str(file["filename"])).filter((each) => each !== undefined);
248
+ const addressed = payload["addressed_to"];
249
+ return {
250
+ text: typeof payload["text"] === "string" ? payload["text"] : "",
251
+ ...(heard.length === 0 ? {} : { transcript: heard.join(" ").slice(0, MAX_TRANSCRIPT_LENGTH) }),
252
+ ...(names.length === 0 ? {} : { files: names.slice(0, 20) }),
253
+ ...(Array.isArray(addressed) ? { addressed_to: addressed } : {}),
254
+ ...(payload["held"] === true ? { held: true } : {}),
255
+ };
256
+ }
257
+ /** The room's own line for a `space.updated`: archived, unarchived or retitled, or none. */
258
+ function roomLine(event, base) {
259
+ const { state, title } = event.payload;
260
+ if (state === "closed")
261
+ return { ...base, kind: "archived" };
262
+ if (state === "open")
263
+ return { ...base, kind: "unarchived" };
264
+ const named = str(title);
265
+ return named === undefined ? undefined : { ...base, kind: "renamed", title: named };
266
+ }
267
+ /** One event as a line, or nothing for an event that is not one. */
268
+ function lineOf(event, who) {
269
+ const at = { seq: event.seq, at: event.ts };
270
+ const p = event.payload;
271
+ const subject = str(p["participant_id"]);
272
+ switch (event.type) {
273
+ case "message.post":
274
+ return {
275
+ ...at,
276
+ kind: "said",
277
+ from: fromOf(who, event.actor.id, event.actor.kind),
278
+ message_id: messageIdOf(event.id),
279
+ ...saidFields(p),
280
+ };
281
+ case "membership.added":
282
+ case "membership.removed":
283
+ if (subject === undefined)
284
+ return undefined;
285
+ return {
286
+ ...at,
287
+ kind: event.type === "membership.added" ? "joined" : "left",
288
+ from: fromOf(who, subject, p["participant_kind"]),
289
+ };
290
+ case "person.renamed":
291
+ if (subject === undefined)
292
+ return undefined;
293
+ return {
294
+ ...at,
295
+ kind: "renamed",
296
+ from: fromOf(who, subject, "person"),
297
+ ...(str(p["display_name"]) === undefined ? {} : { name: str(p["display_name"]) }),
298
+ ...(str(p["previous_name"]) === undefined ? {} : { previous: str(p["previous_name"]) }),
299
+ };
300
+ case "space.updated":
301
+ return roomLine(event, { ...at, from: fromOf(who, event.actor.id, event.actor.kind) });
302
+ default:
303
+ return undefined;
304
+ }
305
+ }
306
+ /**
307
+ * A room's events as lines, in the order given. A message edited among them reads edited, and
308
+ * one deleted among them is left out: what a harness is handed is the room as it reads now. A
309
+ * caller that already holds the words as they read now (the server's projection) passes the
310
+ * messages with them, and no edits.
311
+ */
312
+ export function linesOf(events, who) {
313
+ const { edited, deleted } = changesIn(events);
314
+ const lines = [];
315
+ for (const event of events) {
316
+ const line = lineOf(event, who);
317
+ const message = line?.message_id;
318
+ if (line === undefined || (message !== undefined && deleted.has(message)))
319
+ continue;
320
+ const text = message === undefined ? undefined : edited.get(message);
321
+ lines.push(text === undefined ? line : { ...line, text });
322
+ }
323
+ return lines;
324
+ }
325
+ /** The latest words of each message edited among the events, and those deleted. */
326
+ function changesIn(events) {
327
+ const edited = new Map();
328
+ const deleted = new Set();
329
+ for (const event of events) {
330
+ const target = str(event.payload["message_id"]);
331
+ const text = event.payload["text"];
332
+ if (target === undefined)
333
+ continue;
334
+ if (event.type === "message.deleted")
335
+ deleted.add(target);
336
+ else if (event.type === "message.edited" && typeof text === "string")
337
+ edited.set(target, text);
338
+ }
339
+ return { edited, deleted };
340
+ }
341
+ /** A line's words, on one line: newlines become spaces, as the adapters have always written them. */
342
+ function flat(text) {
343
+ return text.replace(/\s*\n\s*/g, " ").trim();
344
+ }
345
+ /** What a message said: its words, what a voice note said, what it carried. */
346
+ function wordsOf(line) {
347
+ const text = flat(line.text ?? "");
348
+ const heard = line.transcript === undefined ? "" : flat(line.transcript);
349
+ const parts = [text];
350
+ if (heard !== "")
351
+ parts.push(text === "" ? `(voice note) ${heard}` : `(voice note: ${heard})`);
352
+ if (heard === "" && line.files !== undefined)
353
+ parts.push(`(sent ${line.files.join(", ")})`);
354
+ if (line.held === true)
355
+ parts.push("(held by Chips until a person acts)");
356
+ return parts.filter((part) => part !== "").join(" ");
357
+ }
358
+ /** One line in the plain form; what was said is said under the name with its standing (SEC-15). */
359
+ export function renderLine(line) {
360
+ const name = line.from.name;
361
+ switch (line.kind) {
362
+ case "said":
363
+ return `${withRole(name, line.from)}: ${wordsOf(line)}`;
364
+ case "joined":
365
+ return `(${name} joined the space)`;
366
+ case "left":
367
+ return `(${name} left the space)`;
368
+ case "renamed":
369
+ if (line.title !== undefined)
370
+ return `(${name} renamed the space "${line.title}")`;
371
+ return `(${line.previous ?? name} is now called ${line.name ?? name})`;
372
+ case "archived":
373
+ return `(${name} archived the space)`;
374
+ default:
375
+ return `(${name} unarchived the space)`;
376
+ }
377
+ }
378
+ /** A line cut to fit `chars` in the plain form: its words first, then what a voice note said. */
379
+ function cut(line, chars) {
380
+ let clipped = line;
381
+ for (const field of ["text", "transcript"]) {
382
+ const over = renderLine(clipped).length - chars;
383
+ const value = clipped[field];
384
+ if (over <= 0)
385
+ return clipped;
386
+ if (value === undefined || value === "")
387
+ continue;
388
+ const keep = Math.max(0, value.length - over - 1);
389
+ clipped = { ...clipped, [field]: `${value.slice(0, keep).trimEnd()}…` };
390
+ }
391
+ return clipped;
392
+ }
393
+ /**
394
+ * The newest lines that fit a budget, oldest first. Counted as the plain form's lines joined by
395
+ * newlines, heading aside, as the adapters counted. The oldest goes first until the rest fit, and
396
+ * one line longer than the whole budget is cut to it rather than dropped, so the newest line is
397
+ * always there. `more` says there were older lines in the window than the caller passed.
398
+ */
399
+ export function contextLines(lines, budget, window) {
400
+ const kept = [];
401
+ let used = 0;
402
+ for (let at = lines.length - 1; at >= 0 && kept.length < budget.lines; at -= 1) {
403
+ const line = lines[at];
404
+ const cost = renderLine(line).length + (kept.length === 0 ? 0 : 1);
405
+ if (kept.length > 0 && used + cost > budget.chars)
406
+ break;
407
+ kept.unshift(kept.length === 0 ? cut(line, budget.chars) : line);
408
+ used += Math.min(cost, budget.chars);
409
+ }
410
+ return {
411
+ lines: kept,
412
+ since_seq: window.since,
413
+ truncated: kept.length < lines.length || window.more === true,
414
+ before: kept[0]?.seq ?? window.before,
415
+ };
416
+ }
417
+ /**
418
+ * The plain form: the heading, then one line each, oldest first; then the room's files, one each
419
+ * (ADR 0099). Nothing at all when there are neither, so a harness can put it ahead of a turn's
420
+ * words unconditionally.
421
+ */
422
+ export function renderContext(context) {
423
+ if (context === undefined)
424
+ return "";
425
+ const said = context.lines.length === 0
426
+ ? ""
427
+ : [CONTEXT_HEADING, ...context.lines.map(renderLine)].join("\n");
428
+ return [said, renderRoomFiles(context.files)].filter((part) => part !== "").join("\n\n");
429
+ }
430
+ /** A file a message carried, as a line a model can read: the turn's own and a quote's (ADR 0219). */
431
+ export function renderAttachment(file) {
432
+ const heard = file.transcript === undefined ? "" : `, which says: "${file.transcript}"`;
433
+ return `(attached: ${file.filename}, ${file.mime_type}${heard})`;
434
+ }
435
+ export const REPLY_BEFORE_HEADING = "Said just before it:";
436
+ /**
437
+ * The plain form of the message a reply answers (ADR 0219), for the turn between what was said
438
+ * since and the words: whose message and when, the lines said just before it when they came, and
439
+ * the message quoted with `> `. A deleted one is only who and when. Nothing when it answers none.
440
+ * Both names carry a person's standing, as every other line does (SEC-49).
441
+ */
442
+ export function renderReplyingTo(replying, reading) {
443
+ if (replying === undefined)
444
+ return "";
445
+ const author = replying.from.id;
446
+ const whose = author === reading.taker
447
+ ? "your message"
448
+ : author === reading.sender.id
449
+ ? "their own message"
450
+ : `${withRole(replying.from.name, replying.from)}'s message`;
451
+ const gone = replying.deleted === true ? ", which has since been deleted" : "";
452
+ const replier = withRole(reading.sender.name, reading.sender);
453
+ const said = [
454
+ `${replier} is replying to ${whose} from ${saidWhen(replying.at, reading)}${gone}.`,
455
+ ];
456
+ if (replying.before !== undefined && replying.before.length > 0) {
457
+ said.push(REPLY_BEFORE_HEADING, ...replying.before.map(renderLine));
458
+ }
459
+ if (replying.deleted === true)
460
+ return said.join("\n");
461
+ const edited = replying.edited === true ? " (edited)" : "";
462
+ said.push(`${whose[0]?.toUpperCase()}${whose.slice(1)}${edited}:`, ...quoteLines(replying));
463
+ return said.join("\n");
464
+ }
465
+ /** The quoted message's words, what a voice note said and its files, each line under `> `. */
466
+ function quoteLines(replying) {
467
+ const text = replying.text ?? "";
468
+ const body = text === "" ? [] : text.split("\n");
469
+ const files = replying.attachments ?? [];
470
+ if (files.length > 0)
471
+ body.push(...files.map(renderAttachment));
472
+ else {
473
+ if (replying.transcript !== undefined && replying.transcript !== "") {
474
+ body.push(`(voice note: ${flat(replying.transcript)})`);
475
+ }
476
+ if (replying.files !== undefined && replying.files.length > 0) {
477
+ body.push(`(sent ${replying.files.join(", ")})`);
478
+ }
479
+ }
480
+ return body.map((line) => (line === "" ? ">" : `> ${line}`));
481
+ }
482
+ const DAY_MS = 86_400_000;
483
+ /**
484
+ * When a quoted message was said, from the reply's day: "today at 9:12 AM", "yesterday at …", a
485
+ * weekday within the week, else the date, with the year when it was another.
486
+ */
487
+ function saidWhen(at, reading) {
488
+ const then = dayIn(new Date(at), reading.zone);
489
+ const today = dayIn(reading.at === undefined ? new Date() : new Date(reading.at), reading.zone);
490
+ const ago = Math.round((today.utc - then.utc) / DAY_MS);
491
+ const day = ago <= 0
492
+ ? "today"
493
+ : ago === 1
494
+ ? "yesterday"
495
+ : ago < 7
496
+ ? then.weekday
497
+ : `${then.day} ${MONTHS[then.month - 1]}${then.year === today.year ? "" : ` ${then.year}`}`;
498
+ return `${day} at ${then.clock}`;
499
+ }
500
+ /** An instant's calendar day and wall clock in a zone, the host's when the zone is not known. */
501
+ function dayIn(instant, zone) {
502
+ let format;
503
+ try {
504
+ format = new Intl.DateTimeFormat("en-US", {
505
+ ...(zone === undefined ? {} : { timeZone: zone }),
506
+ year: "numeric",
507
+ month: "numeric",
508
+ day: "numeric",
509
+ hour: "numeric",
510
+ minute: "numeric",
511
+ hourCycle: "h23",
512
+ weekday: "long",
513
+ });
514
+ }
515
+ catch {
516
+ return dayIn(instant, undefined);
517
+ }
518
+ const parts = format.formatToParts(instant);
519
+ const part = (type) => parts.find((each) => each.type === type)?.value ?? "";
520
+ const [year, month, day] = [Number(part("year")), Number(part("month")), Number(part("day"))];
521
+ const [hour, minute] = [Number(part("hour")) % 24, Number(part("minute"))];
522
+ const twelve = hour % 12 === 0 ? 12 : hour % 12;
523
+ const clock = `${twelve}:${String(minute).padStart(2, "0")} ${hour < 12 ? "AM" : "PM"}`;
524
+ return { utc: Date.UTC(year, month - 1, day), year, month, day, weekday: part("weekday"), clock };
525
+ }
526
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Direct asks (ADR 0211, Phase 3): a guest asks the owners to share the server's machine with
3
+ * them in Tailscale, and an owner answers with Tailscale's share link.
4
+ *
5
+ * The link is what an owner pastes and what the guest is handed. Only Tailscale's own, on https,
6
+ * so a guest is never sent somewhere else by a slip of the paste. The server refuses anything
7
+ * else; the apps hold Send until the field holds one. Read with a pattern rather than `new URL`,
8
+ * whose host React Native does not always give.
9
+ */
10
+ import { z } from "zod";
11
+ export declare const directAskState: z.ZodEnum<{
12
+ direct: "direct";
13
+ asked: "asked";
14
+ shared: "shared";
15
+ }>;
16
+ export declare const directAskView: z.ZodObject<{
17
+ ask_id: z.ZodString;
18
+ participant_id: z.ZodString;
19
+ state: z.ZodEnum<{
20
+ direct: "direct";
21
+ asked: "asked";
22
+ shared: "shared";
23
+ }>;
24
+ trip_ms: z.ZodNullable<z.ZodInt>;
25
+ link: z.ZodNullable<z.ZodString>;
26
+ shared_by: z.ZodNullable<z.ZodString>;
27
+ asked_at: z.ZodISODateTime;
28
+ shared_at: z.ZodNullable<z.ZodISODateTime>;
29
+ direct_at: z.ZodNullable<z.ZodISODateTime>;
30
+ }, z.core.$strip>;
31
+ export type DirectAskView = z.infer<typeof directAskView>;
32
+ /** The longest link taken. */
33
+ export declare const SHARE_LINK_MAX = 2048;
34
+ /** The link, trimmed, or nothing when it is not Tailscale's. */
35
+ export declare function shareLinkOf(text: string): string | undefined;
36
+ //# sourceMappingURL=direct-asks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-asks.d.ts","sourceRoot":"","sources":["../../src/direct-asks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc;;;;EAIxB,CAAC;AAEJ,eAAO,MAAM,aAAa;;;;;;;;;;;;;;iBAgB8C,CAAC;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAK1D,8BAA8B;AAC9B,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI5D"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Direct asks (ADR 0211, Phase 3): a guest asks the owners to share the server's machine with
3
+ * them in Tailscale, and an owner answers with Tailscale's share link.
4
+ *
5
+ * The link is what an owner pastes and what the guest is handed. Only Tailscale's own, on https,
6
+ * so a guest is never sent somewhere else by a slip of the paste. The server refuses anything
7
+ * else; the apps hold Send until the field holds one. Read with a pattern rather than `new URL`,
8
+ * whose host React Native does not always give.
9
+ */
10
+ import { z } from "zod";
11
+ import { id, isoTimestamp } from "./primitives.js";
12
+ export const directAskState = z
13
+ .enum(["asked", "shared", "direct"])
14
+ .describe("Asked and waiting for an owner; shared, the link sent; direct, the guest's socket arrived other than through the relay.");
15
+ export const directAskView = z
16
+ .object({
17
+ ask_id: id("direct"),
18
+ participant_id: id("person").describe("Who asked."),
19
+ state: directAskState,
20
+ trip_ms: z
21
+ .int()
22
+ .nonnegative()
23
+ .nullable()
24
+ .describe("Their round trip through the relay when they asked, in milliseconds."),
25
+ link: z.string().max(2048).nullable().describe("Tailscale's share link, once shared."),
26
+ shared_by: id("person").nullable().describe("The owner who answered."),
27
+ asked_at: isoTimestamp,
28
+ shared_at: isoTimestamp.nullable(),
29
+ direct_at: isoTimestamp.nullable(),
30
+ })
31
+ .describe("A guest's ask to go direct, as `/v1/direct-asks` says it.");
32
+ /** https, a host that is tailscale.com or one of its names, then a path or nothing. */
33
+ const SHARE_LINK = /^https:\/\/(?:[a-z0-9-]+\.)*tailscale\.com(?:[/?#]\S*)?$/i;
34
+ /** The longest link taken. */
35
+ export const SHARE_LINK_MAX = 2048;
36
+ /** The link, trimmed, or nothing when it is not Tailscale's. */
37
+ export function shareLinkOf(text) {
38
+ const trimmed = text.trim();
39
+ if (trimmed.length > SHARE_LINK_MAX)
40
+ return undefined;
41
+ return SHARE_LINK.test(trimmed) ? trimmed : undefined;
42
+ }
43
+ //# sourceMappingURL=direct-asks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-asks.js","sourceRoot":"","sources":["../../src/direct-asks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACnC,QAAQ,CACP,yHAAyH,CAC1H,CAAC;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC;IACpB,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,CAAC;SACP,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACtF,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACtE,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,QAAQ,CAAC,2DAA2D,CAAC,CAAC;AAGzE,uFAAuF;AACvF,MAAM,UAAU,GAAG,2DAA2D,CAAC;AAE/E,8BAA8B;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,cAAc;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC"}