@chipschat/protocol 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -2
  3. package/dist/envelope.d.ts +54 -0
  4. package/dist/envelope.d.ts.map +1 -0
  5. package/dist/envelope.js +48 -0
  6. package/dist/envelope.js.map +1 -0
  7. package/dist/events/agent-to-chips.d.ts +27 -0
  8. package/dist/events/agent-to-chips.d.ts.map +1 -0
  9. package/dist/events/agent-to-chips.js +392 -0
  10. package/dist/events/agent-to-chips.js.map +1 -0
  11. package/dist/events/catalogue.d.ts +48 -0
  12. package/dist/events/catalogue.d.ts.map +1 -0
  13. package/dist/events/catalogue.js +67 -0
  14. package/dist/events/catalogue.js.map +1 -0
  15. package/dist/events/chips-to-agent.d.ts +24 -0
  16. package/dist/events/chips-to-agent.d.ts.map +1 -0
  17. package/dist/events/chips-to-agent.js +324 -0
  18. package/dist/events/chips-to-agent.js.map +1 -0
  19. package/dist/events/chips-to-harness.d.ts +24 -0
  20. package/dist/events/chips-to-harness.d.ts.map +1 -0
  21. package/dist/events/chips-to-harness.js +324 -0
  22. package/dist/events/chips-to-harness.js.map +1 -0
  23. package/dist/events/harness-to-chips.d.ts +27 -0
  24. package/dist/events/harness-to-chips.d.ts.map +1 -0
  25. package/dist/events/harness-to-chips.js +390 -0
  26. package/dist/events/harness-to-chips.js.map +1 -0
  27. package/dist/events/index.d.ts +6 -0
  28. package/dist/events/index.d.ts.map +1 -0
  29. package/dist/events/index.js +5 -0
  30. package/dist/events/index.js.map +1 -0
  31. package/dist/events/workspace.d.ts +19 -0
  32. package/dist/events/workspace.d.ts.map +1 -0
  33. package/dist/events/workspace.js +79 -0
  34. package/dist/events/workspace.js.map +1 -0
  35. package/dist/frames.d.ts +175 -0
  36. package/dist/frames.d.ts.map +1 -0
  37. package/dist/frames.js +161 -0
  38. package/dist/frames.js.map +1 -0
  39. package/dist/generated/types.d.ts +4052 -0
  40. package/dist/generated/types.d.ts.map +1 -0
  41. package/dist/generated/types.js +7 -0
  42. package/dist/generated/types.js.map +1 -0
  43. package/dist/ids/index.d.ts +3 -0
  44. package/dist/ids/index.d.ts.map +1 -0
  45. package/dist/ids/index.js +2 -0
  46. package/dist/ids/index.js.map +1 -0
  47. package/dist/ids/ulid.d.ts +83 -0
  48. package/dist/ids/ulid.d.ts.map +1 -0
  49. package/dist/ids/ulid.js +199 -0
  50. package/dist/ids/ulid.js.map +1 -0
  51. package/dist/index.d.ts +18 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +13 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/primitives.d.ts +194 -0
  56. package/dist/primitives.d.ts.map +1 -0
  57. package/dist/primitives.js +193 -0
  58. package/dist/primitives.js.map +1 -0
  59. package/dist/src/address.d.ts +106 -0
  60. package/dist/src/address.d.ts.map +1 -0
  61. package/dist/src/address.js +141 -0
  62. package/dist/src/address.js.map +1 -0
  63. package/dist/src/agent-context-windows.d.ts +235 -0
  64. package/dist/src/agent-context-windows.d.ts.map +1 -0
  65. package/dist/src/agent-context-windows.js +213 -0
  66. package/dist/src/agent-context-windows.js.map +1 -0
  67. package/dist/src/agent-heartbeats.d.ts +106 -0
  68. package/dist/src/agent-heartbeats.d.ts.map +1 -0
  69. package/dist/src/agent-heartbeats.js +111 -0
  70. package/dist/src/agent-heartbeats.js.map +1 -0
  71. package/dist/src/agent-models.d.ts +158 -0
  72. package/dist/src/agent-models.d.ts.map +1 -0
  73. package/dist/src/agent-models.js +171 -0
  74. package/dist/src/agent-models.js.map +1 -0
  75. package/dist/src/agent-place.d.ts +76 -0
  76. package/dist/src/agent-place.d.ts.map +1 -0
  77. package/dist/src/agent-place.js +80 -0
  78. package/dist/src/agent-place.js.map +1 -0
  79. package/dist/src/agents.d.ts +24 -0
  80. package/dist/src/agents.d.ts.map +1 -0
  81. package/dist/src/agents.js +58 -0
  82. package/dist/src/agents.js.map +1 -0
  83. package/dist/src/capabilities.d.ts +121 -0
  84. package/dist/src/capabilities.d.ts.map +1 -0
  85. package/dist/src/capabilities.js +120 -0
  86. package/dist/src/capabilities.js.map +1 -0
  87. package/dist/src/checklist.d.ts +19 -0
  88. package/dist/src/checklist.d.ts.map +1 -0
  89. package/dist/src/checklist.js +22 -0
  90. package/dist/src/checklist.js.map +1 -0
  91. package/dist/src/commands.d.ts +50 -0
  92. package/dist/src/commands.d.ts.map +1 -0
  93. package/dist/src/commands.js +274 -0
  94. package/dist/src/commands.js.map +1 -0
  95. package/dist/src/connectors.d.ts +90 -0
  96. package/dist/src/connectors.d.ts.map +1 -0
  97. package/dist/src/connectors.js +119 -0
  98. package/dist/src/connectors.js.map +1 -0
  99. package/dist/src/context-files.d.ts +304 -0
  100. package/dist/src/context-files.d.ts.map +1 -0
  101. package/dist/src/context-files.js +247 -0
  102. package/dist/src/context-files.js.map +1 -0
  103. package/dist/src/context.d.ts +369 -0
  104. package/dist/src/context.d.ts.map +1 -0
  105. package/dist/src/context.js +526 -0
  106. package/dist/src/context.js.map +1 -0
  107. package/dist/src/direct-asks.d.ts +36 -0
  108. package/dist/src/direct-asks.d.ts.map +1 -0
  109. package/dist/src/direct-asks.js +43 -0
  110. package/dist/src/direct-asks.js.map +1 -0
  111. package/dist/src/envelope.d.ts +70 -0
  112. package/dist/src/envelope.d.ts.map +1 -0
  113. package/dist/src/envelope.js +46 -0
  114. package/dist/src/envelope.js.map +1 -0
  115. package/dist/src/events/catalogue.d.ts +50 -0
  116. package/dist/src/events/catalogue.d.ts.map +1 -0
  117. package/dist/src/events/catalogue.js +70 -0
  118. package/dist/src/events/catalogue.js.map +1 -0
  119. package/dist/src/events/chips-to-harness.d.ts +37 -0
  120. package/dist/src/events/chips-to-harness.d.ts.map +1 -0
  121. package/dist/src/events/chips-to-harness.js +511 -0
  122. package/dist/src/events/chips-to-harness.js.map +1 -0
  123. package/dist/src/events/harness-to-chips.d.ts +38 -0
  124. package/dist/src/events/harness-to-chips.d.ts.map +1 -0
  125. package/dist/src/events/harness-to-chips.js +593 -0
  126. package/dist/src/events/harness-to-chips.js.map +1 -0
  127. package/dist/src/events/index.d.ts +6 -0
  128. package/dist/src/events/index.d.ts.map +1 -0
  129. package/dist/src/events/index.js +5 -0
  130. package/dist/src/events/index.js.map +1 -0
  131. package/dist/src/events/workspace.d.ts +222 -0
  132. package/dist/src/events/workspace.d.ts.map +1 -0
  133. package/dist/src/events/workspace.js +1039 -0
  134. package/dist/src/events/workspace.js.map +1 -0
  135. package/dist/src/exchange.d.ts +262 -0
  136. package/dist/src/exchange.d.ts.map +1 -0
  137. package/dist/src/exchange.js +413 -0
  138. package/dist/src/exchange.js.map +1 -0
  139. package/dist/src/first-names.d.ts +29 -0
  140. package/dist/src/first-names.d.ts.map +1 -0
  141. package/dist/src/first-names.js +80 -0
  142. package/dist/src/first-names.js.map +1 -0
  143. package/dist/src/frames.d.ts +526 -0
  144. package/dist/src/frames.d.ts.map +1 -0
  145. package/dist/src/frames.js +346 -0
  146. package/dist/src/frames.js.map +1 -0
  147. package/dist/src/harness-jobs.d.ts +313 -0
  148. package/dist/src/harness-jobs.d.ts.map +1 -0
  149. package/dist/src/harness-jobs.js +210 -0
  150. package/dist/src/harness-jobs.js.map +1 -0
  151. package/dist/src/ids/index.d.ts +3 -0
  152. package/dist/src/ids/index.d.ts.map +1 -0
  153. package/dist/src/ids/index.js +2 -0
  154. package/dist/src/ids/index.js.map +1 -0
  155. package/dist/src/ids/ulid.d.ts +96 -0
  156. package/dist/src/ids/ulid.d.ts.map +1 -0
  157. package/dist/src/ids/ulid.js +212 -0
  158. package/dist/src/ids/ulid.js.map +1 -0
  159. package/dist/src/index.d.ts +81 -0
  160. package/dist/src/index.d.ts.map +1 -0
  161. package/dist/src/index.js +47 -0
  162. package/dist/src/index.js.map +1 -0
  163. package/dist/src/invite-link.d.ts +64 -0
  164. package/dist/src/invite-link.d.ts.map +1 -0
  165. package/dist/src/invite-link.js +99 -0
  166. package/dist/src/invite-link.js.map +1 -0
  167. package/dist/src/join.d.ts +188 -0
  168. package/dist/src/join.d.ts.map +1 -0
  169. package/dist/src/join.js +190 -0
  170. package/dist/src/join.js.map +1 -0
  171. package/dist/src/limits.d.ts +50 -0
  172. package/dist/src/limits.d.ts.map +1 -0
  173. package/dist/src/limits.js +106 -0
  174. package/dist/src/limits.js.map +1 -0
  175. package/dist/src/matters.d.ts +22 -0
  176. package/dist/src/matters.d.ts.map +1 -0
  177. package/dist/src/matters.js +26 -0
  178. package/dist/src/matters.js.map +1 -0
  179. package/dist/src/mentions.d.ts +63 -0
  180. package/dist/src/mentions.d.ts.map +1 -0
  181. package/dist/src/mentions.js +129 -0
  182. package/dist/src/mentions.js.map +1 -0
  183. package/dist/src/names.d.ts +58 -0
  184. package/dist/src/names.d.ts.map +1 -0
  185. package/dist/src/names.js +192 -0
  186. package/dist/src/names.js.map +1 -0
  187. package/dist/src/no-reply.d.ts +17 -0
  188. package/dist/src/no-reply.d.ts.map +1 -0
  189. package/dist/src/no-reply.js +48 -0
  190. package/dist/src/no-reply.js.map +1 -0
  191. package/dist/src/notifications.d.ts +81 -0
  192. package/dist/src/notifications.d.ts.map +1 -0
  193. package/dist/src/notifications.js +65 -0
  194. package/dist/src/notifications.js.map +1 -0
  195. package/dist/src/pages.d.ts +32 -0
  196. package/dist/src/pages.d.ts.map +1 -0
  197. package/dist/src/pages.js +32 -0
  198. package/dist/src/pages.js.map +1 -0
  199. package/dist/src/pairing.d.ts +99 -0
  200. package/dist/src/pairing.d.ts.map +1 -0
  201. package/dist/src/pairing.js +163 -0
  202. package/dist/src/pairing.js.map +1 -0
  203. package/dist/src/primitives.d.ts +267 -0
  204. package/dist/src/primitives.d.ts.map +1 -0
  205. package/dist/src/primitives.js +279 -0
  206. package/dist/src/primitives.js.map +1 -0
  207. package/dist/src/project.d.ts +335 -0
  208. package/dist/src/project.d.ts.map +1 -0
  209. package/dist/src/project.js +499 -0
  210. package/dist/src/project.js.map +1 -0
  211. package/dist/src/ranges.d.ts +31 -0
  212. package/dist/src/ranges.d.ts.map +1 -0
  213. package/dist/src/ranges.js +51 -0
  214. package/dist/src/ranges.js.map +1 -0
  215. package/dist/src/relay.d.ts +177 -0
  216. package/dist/src/relay.d.ts.map +1 -0
  217. package/dist/src/relay.js +147 -0
  218. package/dist/src/relay.js.map +1 -0
  219. package/dist/src/room-files.d.ts +146 -0
  220. package/dist/src/room-files.d.ts.map +1 -0
  221. package/dist/src/room-files.js +135 -0
  222. package/dist/src/room-files.js.map +1 -0
  223. package/dist/src/room-note.d.ts +213 -0
  224. package/dist/src/room-note.d.ts.map +1 -0
  225. package/dist/src/room-note.js +457 -0
  226. package/dist/src/room-note.js.map +1 -0
  227. package/dist/src/space-icons.d.ts +68 -0
  228. package/dist/src/space-icons.d.ts.map +1 -0
  229. package/dist/src/space-icons.js +142 -0
  230. package/dist/src/space-icons.js.map +1 -0
  231. package/dist/src/spend.d.ts +57 -0
  232. package/dist/src/spend.d.ts.map +1 -0
  233. package/dist/src/spend.js +94 -0
  234. package/dist/src/spend.js.map +1 -0
  235. package/dist/src/visibility.d.ts +170 -0
  236. package/dist/src/visibility.d.ts.map +1 -0
  237. package/dist/src/visibility.js +218 -0
  238. package/dist/src/visibility.js.map +1 -0
  239. package/fixtures/agent.asked.json +15 -0
  240. package/fixtures/agent.attached.json +15 -0
  241. package/fixtures/agent.deleted.json +16 -0
  242. package/fixtures/agent.fork.json +14 -0
  243. package/fixtures/agent.lock_set.json +13 -0
  244. package/fixtures/agent.registered.json +17 -0
  245. package/fixtures/agent.released.json +16 -0
  246. package/fixtures/agent.updated.json +14 -0
  247. package/fixtures/approval.executed.json +16 -0
  248. package/fixtures/approval.request.json +45 -0
  249. package/fixtures/approval.resolved.json +20 -0
  250. package/fixtures/approval.routed.json +20 -0
  251. package/fixtures/artifact.create.json +18 -0
  252. package/fixtures/attachment.fetched.json +15 -0
  253. package/fixtures/attachment.limits_set.json +15 -0
  254. package/fixtures/budget.warning.json +20 -0
  255. package/fixtures/checkpoint.json +16 -0
  256. package/fixtures/context.compacted.json +16 -0
  257. package/fixtures/context.usage.json +17 -0
  258. package/fixtures/exchange.limits_set.json +15 -0
  259. package/fixtures/exchange.set.json +13 -0
  260. package/fixtures/feedback.json +21 -0
  261. package/fixtures/frames/ack.json +6 -0
  262. package/fixtures/frames/context.edit.json +11 -0
  263. package/fixtures/frames/context_window.change.json +9 -0
  264. package/fixtures/frames/context_window.compact.json +8 -0
  265. package/fixtures/frames/error.json +6 -0
  266. package/fixtures/frames/event.json +20 -0
  267. package/fixtures/frames/events.json +39 -0
  268. package/fixtures/frames/folder.open.json +6 -0
  269. package/fixtures/frames/folder.open.page.json +7 -0
  270. package/fixtures/frames/folder.run.json +8 -0
  271. package/fixtures/frames/folder.run_state.json +12 -0
  272. package/fixtures/frames/heartbeat.change.json +10 -0
  273. package/fixtures/frames/hello.json +18 -0
  274. package/fixtures/frames/job.change.json +9 -0
  275. package/fixtures/frames/join.json +19 -0
  276. package/fixtures/frames/model.change.json +10 -0
  277. package/fixtures/frames/ping.json +4 -0
  278. package/fixtures/frames/pong.json +4 -0
  279. package/fixtures/frames/presence.json +12 -0
  280. package/fixtures/frames/receipt.json +5 -0
  281. package/fixtures/frames/restart.json +5 -0
  282. package/fixtures/frames/subscribe.json +6 -0
  283. package/fixtures/handoff.json +20 -0
  284. package/fixtures/harness.removed.json +15 -0
  285. package/fixtures/harness.transferred.json +15 -0
  286. package/fixtures/hello.json +61 -0
  287. package/fixtures/join.allowed.json +20 -0
  288. package/fixtures/join.denied.json +17 -0
  289. package/fixtures/lane.updated.json +17 -0
  290. package/fixtures/membership.added.json +16 -0
  291. package/fixtures/membership.removed.json +14 -0
  292. package/fixtures/membership.replaced.json +15 -0
  293. package/fixtures/message.deleted.json +15 -0
  294. package/fixtures/message.edited.json +15 -0
  295. package/fixtures/message.handed.json +14 -0
  296. package/fixtures/message.heard.json +14 -0
  297. package/fixtures/message.held.json +14 -0
  298. package/fixtures/message.hidden.json +14 -0
  299. package/fixtures/message.new.json +96 -0
  300. package/fixtures/message.overheard.json +22 -0
  301. package/fixtures/message.pinned.json +14 -0
  302. package/fixtures/message.post.json +14 -0
  303. package/fixtures/message.shown.json +14 -0
  304. package/fixtures/message.unpinned.json +14 -0
  305. package/fixtures/person.face_set.json +17 -0
  306. package/fixtures/person.joined.json +16 -0
  307. package/fixtures/person.removed.json +16 -0
  308. package/fixtures/person.renamed.json +14 -0
  309. package/fixtures/policy.updated.json +30 -0
  310. package/fixtures/project.changed.json +21 -0
  311. package/fixtures/question.answered.json +23 -0
  312. package/fixtures/question.ask.json +37 -0
  313. package/fixtures/receipt.json +15 -0
  314. package/fixtures/relay.set.json +12 -0
  315. package/fixtures/role.changed.json +15 -0
  316. package/fixtures/run.cancel.json +15 -0
  317. package/fixtures/run.completed.json +20 -0
  318. package/fixtures/run.failed.json +20 -0
  319. package/fixtures/run.pause.json +15 -0
  320. package/fixtures/run.plan.json +24 -0
  321. package/fixtures/run.requested.json +34 -0
  322. package/fixtures/run.resume.json +15 -0
  323. package/fixtures/run.started.json +33 -0
  324. package/fixtures/run.status.json +17 -0
  325. package/fixtures/run.steer.json +21 -0
  326. package/fixtures/session.ended.json +15 -0
  327. package/fixtures/session.renamed.json +15 -0
  328. package/fixtures/session.started.json +17 -0
  329. package/fixtures/space.claimed.json +15 -0
  330. package/fixtures/space.created.json +14 -0
  331. package/fixtures/space.erased.json +13 -0
  332. package/fixtures/space.lead_set.json +13 -0
  333. package/fixtures/space.lock_set.json +13 -0
  334. package/fixtures/space.spend_ceiling_set.json +13 -0
  335. package/fixtures/space.updated.json +14 -0
  336. package/fixtures/step.log.json +26 -0
  337. package/fixtures/task.json +22 -0
  338. package/fixtures/turn.passed.json +14 -0
  339. package/fixtures/usage.json +21 -0
  340. package/fixtures/workspace.renamed.json +13 -0
  341. package/generated/agent-connect.json +13966 -0
  342. package/generated/schema/agent.asked.json +114 -0
  343. package/generated/schema/agent.attached.json +465 -0
  344. package/generated/schema/agent.deleted.json +127 -0
  345. package/generated/schema/agent.fork.json +107 -0
  346. package/generated/schema/agent.lock_set.json +105 -0
  347. package/generated/schema/agent.registered.json +130 -0
  348. package/generated/schema/agent.released.json +129 -0
  349. package/generated/schema/agent.updated.json +151 -0
  350. package/generated/schema/approval.executed.json +125 -0
  351. package/generated/schema/approval.request.json +279 -0
  352. package/generated/schema/approval.resolved.json +162 -0
  353. package/generated/schema/approval.routed.json +185 -0
  354. package/generated/schema/artifact.create.json +206 -0
  355. package/generated/schema/attachment.fetched.json +114 -0
  356. package/generated/schema/attachment.limits_set.json +136 -0
  357. package/generated/schema/budget.warning.json +152 -0
  358. package/generated/schema/checkpoint.json +111 -0
  359. package/generated/schema/context.compacted.json +124 -0
  360. package/generated/schema/context.usage.json +120 -0
  361. package/generated/schema/exchange.limits_set.json +127 -0
  362. package/generated/schema/exchange.set.json +144 -0
  363. package/generated/schema/feedback.json +173 -0
  364. package/generated/schema/handoff.json +122 -0
  365. package/generated/schema/harness.removed.json +122 -0
  366. package/generated/schema/harness.transferred.json +117 -0
  367. package/generated/schema/hello.json +509 -0
  368. package/generated/schema/join.allowed.json +176 -0
  369. package/generated/schema/join.denied.json +150 -0
  370. package/generated/schema/lane.updated.json +223 -0
  371. package/generated/schema/membership.added.json +153 -0
  372. package/generated/schema/membership.removed.json +126 -0
  373. package/generated/schema/membership.replaced.json +106 -0
  374. package/generated/schema/message.deleted.json +105 -0
  375. package/generated/schema/message.edited.json +107 -0
  376. package/generated/schema/message.handed.json +111 -0
  377. package/generated/schema/message.heard.json +100 -0
  378. package/generated/schema/message.held.json +181 -0
  379. package/generated/schema/message.hidden.json +100 -0
  380. package/generated/schema/message.new.json +1369 -0
  381. package/generated/schema/message.overheard.json +701 -0
  382. package/generated/schema/message.pinned.json +100 -0
  383. package/generated/schema/message.post.json +290 -0
  384. package/generated/schema/message.shown.json +100 -0
  385. package/generated/schema/message.unpinned.json +100 -0
  386. package/generated/schema/person.face_set.json +134 -0
  387. package/generated/schema/person.joined.json +128 -0
  388. package/generated/schema/person.removed.json +133 -0
  389. package/generated/schema/person.renamed.json +114 -0
  390. package/generated/schema/policy.updated.json +277 -0
  391. package/generated/schema/project.changed.json +199 -0
  392. package/generated/schema/question.answered.json +154 -0
  393. package/generated/schema/question.ask.json +194 -0
  394. package/generated/schema/receipt.json +109 -0
  395. package/generated/schema/relay.set.json +99 -0
  396. package/generated/schema/role.changed.json +116 -0
  397. package/generated/schema/run.cancel.json +106 -0
  398. package/generated/schema/run.completed.json +139 -0
  399. package/generated/schema/run.failed.json +135 -0
  400. package/generated/schema/run.pause.json +106 -0
  401. package/generated/schema/run.plan.json +128 -0
  402. package/generated/schema/run.requested.json +309 -0
  403. package/generated/schema/run.resume.json +106 -0
  404. package/generated/schema/run.started.json +142 -0
  405. package/generated/schema/run.status.json +120 -0
  406. package/generated/schema/run.steer.json +163 -0
  407. package/generated/schema/session.ended.json +106 -0
  408. package/generated/schema/session.renamed.json +108 -0
  409. package/generated/schema/session.started.json +116 -0
  410. package/generated/schema/space.claimed.json +107 -0
  411. package/generated/schema/space.created.json +148 -0
  412. package/generated/schema/space.erased.json +129 -0
  413. package/generated/schema/space.lead_set.json +108 -0
  414. package/generated/schema/space.lock_set.json +99 -0
  415. package/generated/schema/space.spend_ceiling_set.json +102 -0
  416. package/generated/schema/space.updated.json +112 -0
  417. package/generated/schema/step.log.json +187 -0
  418. package/generated/schema/task.json +268 -0
  419. package/generated/schema/turn.passed.json +99 -0
  420. package/generated/schema/usage.json +155 -0
  421. package/generated/schema/workspace.renamed.json +107 -0
  422. package/generated/types.ts +4178 -0
  423. package/package.json +37 -3
@@ -0,0 +1,162 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "v": {
6
+ "type": "number",
7
+ "const": 1,
8
+ "description": "Protocol major version."
9
+ },
10
+ "type": {
11
+ "type": "string",
12
+ "const": "approval.resolved"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "pattern": "^evt_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
17
+ "description": "The event's own id. Stable across a retry of the same event."
18
+ },
19
+ "ts": {
20
+ "type": "string",
21
+ "format": "date-time",
22
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
23
+ "description": "When it happened, by Chips' clock. Stamped on the way in; a value the sender writes is replaced."
24
+ },
25
+ "workspace_id": {
26
+ "type": "string",
27
+ "pattern": "^ws_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
28
+ "description": "A workspace identifier: `ws_` followed by a ULID."
29
+ },
30
+ "space_id": {
31
+ "description": "The space, when the event belongs to one.",
32
+ "type": "string",
33
+ "pattern": "^spc_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
34
+ },
35
+ "run_id": {
36
+ "description": "The run, when the event belongs to one.",
37
+ "type": "string",
38
+ "pattern": "^run_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
39
+ },
40
+ "seq": {
41
+ "description": "Assigned by the server on append, monotonic per workspace. Absent on the way in.",
42
+ "type": "integer",
43
+ "exclusiveMinimum": 0,
44
+ "maximum": 9007199254740991
45
+ },
46
+ "idempotency_key": {
47
+ "description": "Required on every client-originated write. Sending the same key twice is a no-op.",
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 200
51
+ },
52
+ "actor": {
53
+ "type": "object",
54
+ "properties": {
55
+ "kind": {
56
+ "type": "string",
57
+ "enum": [
58
+ "person",
59
+ "harness",
60
+ "agent",
61
+ "system"
62
+ ],
63
+ "description": "Whether a person, a harness, one of a harness's agents or Chips itself acted."
64
+ },
65
+ "id": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "description": "The participant id, or `system` for Chips."
69
+ },
70
+ "harness_id": {
71
+ "description": "For an agent: the harness it speaks through, whose budget and runs are the agent's (ADR 0087). Filled in by Chips.",
72
+ "type": "string",
73
+ "pattern": "^hrn_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
74
+ }
75
+ },
76
+ "required": [
77
+ "kind",
78
+ "id"
79
+ ],
80
+ "description": "The participant an event is attributed to."
81
+ },
82
+ "approval_id": {
83
+ "type": "string",
84
+ "pattern": "^apr_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
85
+ "description": "A approval identifier: `apr_` followed by a ULID."
86
+ },
87
+ "decision": {
88
+ "type": "string",
89
+ "enum": [
90
+ "approved",
91
+ "edited",
92
+ "denied",
93
+ "expired"
94
+ ],
95
+ "description": "`expired` means nobody answered and the fallback applied."
96
+ },
97
+ "scope": {
98
+ "default": "once",
99
+ "description": "How far the answer reaches. `always` becomes a policy rule.",
100
+ "type": "string",
101
+ "enum": [
102
+ "once",
103
+ "session",
104
+ "always"
105
+ ]
106
+ },
107
+ "everywhere": {
108
+ "description": "With `always`: the rule is the harness's in every space, not only this one (ADR 0239). An owner or an admin only.",
109
+ "type": "boolean"
110
+ },
111
+ "updated_input": {
112
+ "description": "The edited action input, when the decision is `edited`."
113
+ },
114
+ "reason": {
115
+ "description": "Why. The harness gets to read this.",
116
+ "type": "string",
117
+ "maxLength": 4000
118
+ },
119
+ "resolved_by": {
120
+ "type": "string",
121
+ "minLength": 1,
122
+ "maxLength": 120,
123
+ "description": "The participant who answered, or `system` on expiry — a harness when it settles its own ask, answered in its own tools. Filled in by Chips from the credential that sent it; a value the sender writes is replaced."
124
+ },
125
+ "resolved_at": {
126
+ "type": "string",
127
+ "format": "date-time",
128
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
129
+ "description": "When it was answered. Stamped by Chips."
130
+ },
131
+ "resolved_elsewhere": {
132
+ "default": false,
133
+ "description": "True on the surfaces that did not answer first. First answer wins.",
134
+ "type": "boolean"
135
+ },
136
+ "approvers": {
137
+ "description": "Who could answer it, as ids, as they stood when it was decided. Written by Chips from the approval so that somebody named outside the room is sent the decision as well as the ask (ADR 0042); a value the sender writes is replaced.",
138
+ "maxItems": 64,
139
+ "type": "array",
140
+ "items": {
141
+ "type": "string",
142
+ "minLength": 1,
143
+ "maxLength": 120
144
+ }
145
+ }
146
+ },
147
+ "required": [
148
+ "v",
149
+ "type",
150
+ "id",
151
+ "ts",
152
+ "workspace_id",
153
+ "actor",
154
+ "approval_id",
155
+ "decision",
156
+ "resolved_by",
157
+ "resolved_at"
158
+ ],
159
+ "description": "A decision came back. More than yes or no: it carries a scope, optional edited input, and a reason.",
160
+ "$id": "https://chipschat.ai/schema/v1/approval.resolved.json",
161
+ "title": "ApprovalResolved"
162
+ }
@@ -0,0 +1,185 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "v": {
6
+ "type": "number",
7
+ "const": 1,
8
+ "description": "Protocol major version."
9
+ },
10
+ "type": {
11
+ "type": "string",
12
+ "const": "approval.routed"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "pattern": "^evt_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
17
+ "description": "The event's own id. Stable across a retry of the same event."
18
+ },
19
+ "ts": {
20
+ "type": "string",
21
+ "format": "date-time",
22
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
23
+ "description": "When it happened, by Chips' clock. Stamped on the way in; a value the sender writes is replaced."
24
+ },
25
+ "workspace_id": {
26
+ "type": "string",
27
+ "pattern": "^ws_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
28
+ "description": "A workspace identifier: `ws_` followed by a ULID."
29
+ },
30
+ "space_id": {
31
+ "description": "The space, when the event belongs to one.",
32
+ "type": "string",
33
+ "pattern": "^spc_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
34
+ },
35
+ "run_id": {
36
+ "description": "The run, when the event belongs to one.",
37
+ "type": "string",
38
+ "pattern": "^run_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
39
+ },
40
+ "seq": {
41
+ "description": "Assigned by the server on append, monotonic per workspace. Absent on the way in.",
42
+ "type": "integer",
43
+ "exclusiveMinimum": 0,
44
+ "maximum": 9007199254740991
45
+ },
46
+ "idempotency_key": {
47
+ "description": "Required on every client-originated write. Sending the same key twice is a no-op.",
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 200
51
+ },
52
+ "actor": {
53
+ "type": "object",
54
+ "properties": {
55
+ "kind": {
56
+ "type": "string",
57
+ "enum": [
58
+ "person",
59
+ "harness",
60
+ "agent",
61
+ "system"
62
+ ],
63
+ "description": "Whether a person, a harness, one of a harness's agents or Chips itself acted."
64
+ },
65
+ "id": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "description": "The participant id, or `system` for Chips."
69
+ },
70
+ "harness_id": {
71
+ "description": "For an agent: the harness it speaks through, whose budget and runs are the agent's (ADR 0087). Filled in by Chips.",
72
+ "type": "string",
73
+ "pattern": "^hrn_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
74
+ }
75
+ },
76
+ "required": [
77
+ "kind",
78
+ "id"
79
+ ],
80
+ "description": "The participant an event is attributed to."
81
+ },
82
+ "approval_id": {
83
+ "type": "string",
84
+ "pattern": "^apr_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
85
+ "description": "A approval identifier: `apr_` followed by a ULID."
86
+ },
87
+ "to": {
88
+ "minItems": 1,
89
+ "maxItems": 16,
90
+ "type": "array",
91
+ "items": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "maxLength": 120
95
+ },
96
+ "description": "Who should answer, as the router asks it: `owner`, `any`, `role:<name>`, `lead`, or a person id — the same words as `approvers` on the request."
97
+ },
98
+ "approvers": {
99
+ "description": "Who may answer now, as ids. Filled in by Chips from `to`; a value the sender writes is replaced.",
100
+ "maxItems": 64,
101
+ "type": "array",
102
+ "items": {
103
+ "type": "string",
104
+ "minLength": 1,
105
+ "maxLength": 120
106
+ }
107
+ },
108
+ "ask": {
109
+ "description": "What the ask is, written by Chips from the approval. Somebody handed an ask in a room they are not in never saw the request that raised it (ADR 0042), and this is what their card is drawn from; whoever is in the room has the request itself and ignores this.",
110
+ "type": "object",
111
+ "properties": {
112
+ "harness_id": {
113
+ "type": "string",
114
+ "minLength": 1,
115
+ "maxLength": 120,
116
+ "description": "The harness that asked."
117
+ },
118
+ "action": {
119
+ "type": "object",
120
+ "properties": {
121
+ "kind": {
122
+ "type": "string",
123
+ "minLength": 1,
124
+ "maxLength": 120
125
+ }
126
+ },
127
+ "required": [
128
+ "kind"
129
+ ],
130
+ "additionalProperties": {},
131
+ "description": "The action as the harness proposed it."
132
+ },
133
+ "risk": {
134
+ "description": "The risk classes it declared.",
135
+ "maxItems": 8,
136
+ "type": "array",
137
+ "items": {
138
+ "type": "string",
139
+ "maxLength": 60
140
+ }
141
+ },
142
+ "expires_at": {
143
+ "description": "When it expires, if it does.",
144
+ "type": "string",
145
+ "format": "date-time",
146
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
147
+ }
148
+ },
149
+ "required": [
150
+ "harness_id",
151
+ "action"
152
+ ]
153
+ },
154
+ "reason": {
155
+ "description": "Why it was handed on, for the card and the audit.",
156
+ "type": "string",
157
+ "maxLength": 4000
158
+ },
159
+ "routed_by": {
160
+ "description": "Who handed it on. Filled in by Chips from the credential.",
161
+ "type": "string",
162
+ "minLength": 1,
163
+ "maxLength": 120
164
+ },
165
+ "routed_at": {
166
+ "description": "When. Filled in by Chips from its clock.",
167
+ "type": "string",
168
+ "format": "date-time",
169
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
170
+ }
171
+ },
172
+ "required": [
173
+ "v",
174
+ "type",
175
+ "id",
176
+ "ts",
177
+ "workspace_id",
178
+ "actor",
179
+ "approval_id",
180
+ "to"
181
+ ],
182
+ "description": "A pending approval handed to somebody else to answer (M5.5): a teammate, a role, or the lane's lead. Chips resolves `to` to ids, as it does on the request.",
183
+ "$id": "https://chipschat.ai/schema/v1/approval.routed.json",
184
+ "title": "ApprovalRouted"
185
+ }
@@ -0,0 +1,206 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "v": {
6
+ "type": "number",
7
+ "const": 1,
8
+ "description": "Protocol major version."
9
+ },
10
+ "type": {
11
+ "type": "string",
12
+ "const": "artifact.create"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "pattern": "^evt_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
17
+ "description": "The event's own id. Stable across a retry of the same event."
18
+ },
19
+ "ts": {
20
+ "type": "string",
21
+ "format": "date-time",
22
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
23
+ "description": "When it happened, by Chips' clock. Stamped on the way in; a value the sender writes is replaced."
24
+ },
25
+ "workspace_id": {
26
+ "type": "string",
27
+ "pattern": "^ws_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
28
+ "description": "A workspace identifier: `ws_` followed by a ULID."
29
+ },
30
+ "space_id": {
31
+ "description": "The space, when the event belongs to one.",
32
+ "type": "string",
33
+ "pattern": "^spc_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
34
+ },
35
+ "run_id": {
36
+ "description": "The run, when the event belongs to one.",
37
+ "type": "string",
38
+ "pattern": "^run_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
39
+ },
40
+ "seq": {
41
+ "description": "Assigned by the server on append, monotonic per workspace. Absent on the way in.",
42
+ "type": "integer",
43
+ "exclusiveMinimum": 0,
44
+ "maximum": 9007199254740991
45
+ },
46
+ "idempotency_key": {
47
+ "description": "Required on every client-originated write. Sending the same key twice is a no-op.",
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 200
51
+ },
52
+ "actor": {
53
+ "type": "object",
54
+ "properties": {
55
+ "kind": {
56
+ "type": "string",
57
+ "enum": [
58
+ "person",
59
+ "harness",
60
+ "agent",
61
+ "system"
62
+ ],
63
+ "description": "Whether a person, a harness, one of a harness's agents or Chips itself acted."
64
+ },
65
+ "id": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "description": "The participant id, or `system` for Chips."
69
+ },
70
+ "harness_id": {
71
+ "description": "For an agent: the harness it speaks through, whose budget and runs are the agent's (ADR 0087). Filled in by Chips.",
72
+ "type": "string",
73
+ "pattern": "^hrn_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
74
+ }
75
+ },
76
+ "required": [
77
+ "kind",
78
+ "id"
79
+ ],
80
+ "description": "The participant an event is attributed to."
81
+ },
82
+ "artifact_id": {
83
+ "type": "string",
84
+ "pattern": "^att_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
85
+ "description": "Content-addressed, like every attachment."
86
+ },
87
+ "kind": {
88
+ "type": "string",
89
+ "enum": [
90
+ "file",
91
+ "document",
92
+ "code",
93
+ "image",
94
+ "table"
95
+ ],
96
+ "description": "How to render it."
97
+ },
98
+ "title": {
99
+ "type": "string",
100
+ "minLength": 1,
101
+ "maxLength": 300,
102
+ "description": "What to call it."
103
+ },
104
+ "version": {
105
+ "default": 1,
106
+ "description": "Bumped when the harness revises it.",
107
+ "type": "integer",
108
+ "exclusiveMinimum": 0,
109
+ "maximum": 9007199254740991
110
+ },
111
+ "attachment": {
112
+ "description": "The bytes, when the artifact is a file.",
113
+ "type": "object",
114
+ "properties": {
115
+ "attachment_id": {
116
+ "type": "string",
117
+ "pattern": "^att_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
118
+ "description": "A attachment identifier: `att_` followed by a ULID."
119
+ },
120
+ "filename": {
121
+ "type": "string",
122
+ "minLength": 1,
123
+ "maxLength": 255,
124
+ "description": "The name to show. Never trusted for its type."
125
+ },
126
+ "mime_type": {
127
+ "type": "string",
128
+ "minLength": 1,
129
+ "maxLength": 255,
130
+ "description": "Sniffed from the bytes on upload, not taken from the client."
131
+ },
132
+ "byte_size": {
133
+ "type": "integer",
134
+ "minimum": 0,
135
+ "maximum": 9007199254740991,
136
+ "description": "Size in bytes."
137
+ },
138
+ "sha256": {
139
+ "type": "string",
140
+ "pattern": "^[a-f0-9]{64}$",
141
+ "description": "Lowercase hex digest. The store is content-addressed."
142
+ },
143
+ "width": {
144
+ "description": "Pixels, for images and video.",
145
+ "type": "integer",
146
+ "exclusiveMinimum": 0,
147
+ "maximum": 9007199254740991
148
+ },
149
+ "height": {
150
+ "description": "Pixels, for images and video.",
151
+ "type": "integer",
152
+ "exclusiveMinimum": 0,
153
+ "maximum": 9007199254740991
154
+ },
155
+ "duration_ms": {
156
+ "description": "Milliseconds, for audio and video.",
157
+ "type": "integer",
158
+ "minimum": 0,
159
+ "maximum": 9007199254740991
160
+ },
161
+ "transcript": {
162
+ "description": "What was said, for a voice note the server transcribed when it arrived (ADR 0054). Machine-heard: the person's words as best the server could make them out.",
163
+ "type": "string",
164
+ "minLength": 1,
165
+ "maxLength": 50000
166
+ },
167
+ "replaces": {
168
+ "description": "The version of the room's file of this name that this one was made from (ADR 0099), from the post's `replaces`. Filled in by Chips; a value the sender writes is replaced.",
169
+ "type": "string",
170
+ "pattern": "^att_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
171
+ }
172
+ },
173
+ "required": [
174
+ "attachment_id",
175
+ "filename",
176
+ "mime_type",
177
+ "byte_size",
178
+ "sha256"
179
+ ]
180
+ },
181
+ "body": {
182
+ "description": "The content, when the artifact is text.",
183
+ "type": "string",
184
+ "maxLength": 1000000
185
+ },
186
+ "language": {
187
+ "description": "For code, the language to highlight.",
188
+ "type": "string",
189
+ "maxLength": 60
190
+ }
191
+ },
192
+ "required": [
193
+ "v",
194
+ "type",
195
+ "id",
196
+ "ts",
197
+ "workspace_id",
198
+ "actor",
199
+ "artifact_id",
200
+ "kind",
201
+ "title"
202
+ ],
203
+ "description": "A file, document, code, image or table the harness produced, with a version.",
204
+ "$id": "https://chipschat.ai/schema/v1/artifact.create.json",
205
+ "title": "ArtifactCreate"
206
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "v": {
6
+ "type": "number",
7
+ "const": 1,
8
+ "description": "Protocol major version."
9
+ },
10
+ "type": {
11
+ "type": "string",
12
+ "const": "attachment.fetched"
13
+ },
14
+ "id": {
15
+ "type": "string",
16
+ "pattern": "^evt_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
17
+ "description": "The event's own id. Stable across a retry of the same event."
18
+ },
19
+ "ts": {
20
+ "type": "string",
21
+ "format": "date-time",
22
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
23
+ "description": "When it happened, by Chips' clock. Stamped on the way in; a value the sender writes is replaced."
24
+ },
25
+ "workspace_id": {
26
+ "type": "string",
27
+ "pattern": "^ws_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
28
+ "description": "A workspace identifier: `ws_` followed by a ULID."
29
+ },
30
+ "space_id": {
31
+ "description": "The space, when the event belongs to one.",
32
+ "type": "string",
33
+ "pattern": "^spc_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
34
+ },
35
+ "run_id": {
36
+ "description": "The run, when the event belongs to one.",
37
+ "type": "string",
38
+ "pattern": "^run_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
39
+ },
40
+ "seq": {
41
+ "description": "Assigned by the server on append, monotonic per workspace. Absent on the way in.",
42
+ "type": "integer",
43
+ "exclusiveMinimum": 0,
44
+ "maximum": 9007199254740991
45
+ },
46
+ "idempotency_key": {
47
+ "description": "Required on every client-originated write. Sending the same key twice is a no-op.",
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 200
51
+ },
52
+ "actor": {
53
+ "type": "object",
54
+ "properties": {
55
+ "kind": {
56
+ "type": "string",
57
+ "enum": [
58
+ "person",
59
+ "harness",
60
+ "agent",
61
+ "system"
62
+ ],
63
+ "description": "Whether a person, a harness, one of a harness's agents or Chips itself acted."
64
+ },
65
+ "id": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "description": "The participant id, or `system` for Chips."
69
+ },
70
+ "harness_id": {
71
+ "description": "For an agent: the harness it speaks through, whose budget and runs are the agent's (ADR 0087). Filled in by Chips.",
72
+ "type": "string",
73
+ "pattern": "^hrn_[0-7][0-9A-HJKMNP-TV-Z]{25}$"
74
+ }
75
+ },
76
+ "required": [
77
+ "kind",
78
+ "id"
79
+ ],
80
+ "description": "The participant an event is attributed to."
81
+ },
82
+ "attachment_id": {
83
+ "type": "string",
84
+ "pattern": "^att_[0-7][0-9A-HJKMNP-TV-Z]{25}$",
85
+ "description": "A attachment identifier: `att_` followed by a ULID."
86
+ },
87
+ "filename": {
88
+ "type": "string",
89
+ "minLength": 1,
90
+ "maxLength": 255,
91
+ "description": "What the file was called when it was sent."
92
+ },
93
+ "by": {
94
+ "type": "string",
95
+ "minLength": 1,
96
+ "maxLength": 120,
97
+ "description": "The harness that fetched it. Recorded by Chips."
98
+ }
99
+ },
100
+ "required": [
101
+ "v",
102
+ "type",
103
+ "id",
104
+ "ts",
105
+ "workspace_id",
106
+ "actor",
107
+ "attachment_id",
108
+ "filename",
109
+ "by"
110
+ ],
111
+ "description": "A harness downloaded an attachment. Every fetch is an audit event: “Scout read IMG_2210.jpg”.",
112
+ "$id": "https://chipschat.ai/schema/v1/attachment.fetched.json",
113
+ "title": "AttachmentFetched"
114
+ }