@agent-native/scheduling 0.1.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 (653) hide show
  1. package/README.md +58 -0
  2. package/dist/actions/_helpers.d.ts +12 -0
  3. package/dist/actions/_helpers.d.ts.map +1 -0
  4. package/dist/actions/_helpers.js +49 -0
  5. package/dist/actions/_helpers.js.map +1 -0
  6. package/dist/actions/accept-team-invite.d.ts +3 -0
  7. package/dist/actions/accept-team-invite.d.ts.map +1 -0
  8. package/dist/actions/accept-team-invite.js +27 -0
  9. package/dist/actions/accept-team-invite.js.map +1 -0
  10. package/dist/actions/add-booking-attendee.d.ts +3 -0
  11. package/dist/actions/add-booking-attendee.d.ts.map +1 -0
  12. package/dist/actions/add-booking-attendee.js +33 -0
  13. package/dist/actions/add-booking-attendee.js.map +1 -0
  14. package/dist/actions/add-booking-note.d.ts +3 -0
  15. package/dist/actions/add-booking-note.d.ts.map +1 -0
  16. package/dist/actions/add-booking-note.js +26 -0
  17. package/dist/actions/add-booking-note.js.map +1 -0
  18. package/dist/actions/add-date-override.d.ts +3 -0
  19. package/dist/actions/add-date-override.d.ts.map +1 -0
  20. package/dist/actions/add-date-override.js +16 -0
  21. package/dist/actions/add-date-override.js.map +1 -0
  22. package/dist/actions/add-private-link.d.ts +3 -0
  23. package/dist/actions/add-private-link.d.ts.map +1 -0
  24. package/dist/actions/add-private-link.js +31 -0
  25. package/dist/actions/add-private-link.js.map +1 -0
  26. package/dist/actions/assign-round-robin-host.d.ts +3 -0
  27. package/dist/actions/assign-round-robin-host.d.ts.map +1 -0
  28. package/dist/actions/assign-round-robin-host.js +48 -0
  29. package/dist/actions/assign-round-robin-host.js.map +1 -0
  30. package/dist/actions/cancel-booking.d.ts +3 -0
  31. package/dist/actions/cancel-booking.d.ts.map +1 -0
  32. package/dist/actions/cancel-booking.js +34 -0
  33. package/dist/actions/cancel-booking.js.map +1 -0
  34. package/dist/actions/check-availability.d.ts +3 -0
  35. package/dist/actions/check-availability.d.ts.map +1 -0
  36. package/dist/actions/check-availability.js +43 -0
  37. package/dist/actions/check-availability.js.map +1 -0
  38. package/dist/actions/confirm-booking.d.ts +3 -0
  39. package/dist/actions/confirm-booking.d.ts.map +1 -0
  40. package/dist/actions/confirm-booking.js +12 -0
  41. package/dist/actions/confirm-booking.js.map +1 -0
  42. package/dist/actions/connect-calendar.d.ts +3 -0
  43. package/dist/actions/connect-calendar.d.ts.map +1 -0
  44. package/dist/actions/connect-calendar.js +26 -0
  45. package/dist/actions/connect-calendar.js.map +1 -0
  46. package/dist/actions/connect-video.d.ts +3 -0
  47. package/dist/actions/connect-video.d.ts.map +1 -0
  48. package/dist/actions/connect-video.js +54 -0
  49. package/dist/actions/connect-video.js.map +1 -0
  50. package/dist/actions/create-booking.d.ts +3 -0
  51. package/dist/actions/create-booking.d.ts.map +1 -0
  52. package/dist/actions/create-booking.js +60 -0
  53. package/dist/actions/create-booking.js.map +1 -0
  54. package/dist/actions/create-event-type.d.ts +3 -0
  55. package/dist/actions/create-event-type.d.ts.map +1 -0
  56. package/dist/actions/create-event-type.js +45 -0
  57. package/dist/actions/create-event-type.js.map +1 -0
  58. package/dist/actions/create-host-group.d.ts +3 -0
  59. package/dist/actions/create-host-group.d.ts.map +1 -0
  60. package/dist/actions/create-host-group.js +25 -0
  61. package/dist/actions/create-host-group.js.map +1 -0
  62. package/dist/actions/create-routing-form.d.ts +3 -0
  63. package/dist/actions/create-routing-form.d.ts.map +1 -0
  64. package/dist/actions/create-routing-form.js +39 -0
  65. package/dist/actions/create-routing-form.js.map +1 -0
  66. package/dist/actions/create-schedule.d.ts +3 -0
  67. package/dist/actions/create-schedule.d.ts.map +1 -0
  68. package/dist/actions/create-schedule.js +32 -0
  69. package/dist/actions/create-schedule.js.map +1 -0
  70. package/dist/actions/create-team.d.ts +3 -0
  71. package/dist/actions/create-team.d.ts.map +1 -0
  72. package/dist/actions/create-team.js +44 -0
  73. package/dist/actions/create-team.js.map +1 -0
  74. package/dist/actions/create-workflow.d.ts +3 -0
  75. package/dist/actions/create-workflow.d.ts.map +1 -0
  76. package/dist/actions/create-workflow.js +81 -0
  77. package/dist/actions/create-workflow.js.map +1 -0
  78. package/dist/actions/delete-event-type.d.ts +3 -0
  79. package/dist/actions/delete-event-type.d.ts.map +1 -0
  80. package/dist/actions/delete-event-type.js +14 -0
  81. package/dist/actions/delete-event-type.js.map +1 -0
  82. package/dist/actions/delete-routing-form.d.ts +3 -0
  83. package/dist/actions/delete-routing-form.d.ts.map +1 -0
  84. package/dist/actions/delete-routing-form.js +21 -0
  85. package/dist/actions/delete-routing-form.js.map +1 -0
  86. package/dist/actions/delete-schedule.d.ts +3 -0
  87. package/dist/actions/delete-schedule.d.ts.map +1 -0
  88. package/dist/actions/delete-schedule.js +14 -0
  89. package/dist/actions/delete-schedule.js.map +1 -0
  90. package/dist/actions/delete-workflow.d.ts +3 -0
  91. package/dist/actions/delete-workflow.d.ts.map +1 -0
  92. package/dist/actions/delete-workflow.js +21 -0
  93. package/dist/actions/delete-workflow.js.map +1 -0
  94. package/dist/actions/disconnect-calendar.d.ts +3 -0
  95. package/dist/actions/disconnect-calendar.d.ts.map +1 -0
  96. package/dist/actions/disconnect-calendar.js +22 -0
  97. package/dist/actions/disconnect-calendar.js.map +1 -0
  98. package/dist/actions/duplicate-event-type.d.ts +3 -0
  99. package/dist/actions/duplicate-event-type.d.ts.map +1 -0
  100. package/dist/actions/duplicate-event-type.js +34 -0
  101. package/dist/actions/duplicate-event-type.js.map +1 -0
  102. package/dist/actions/export-bookings-csv.d.ts +3 -0
  103. package/dist/actions/export-bookings-csv.d.ts.map +1 -0
  104. package/dist/actions/export-bookings-csv.js +53 -0
  105. package/dist/actions/export-bookings-csv.js.map +1 -0
  106. package/dist/actions/find-available-slot.d.ts +3 -0
  107. package/dist/actions/find-available-slot.d.ts.map +1 -0
  108. package/dist/actions/find-available-slot.js +39 -0
  109. package/dist/actions/find-available-slot.js.map +1 -0
  110. package/dist/actions/get-availability.d.ts +3 -0
  111. package/dist/actions/get-availability.d.ts.map +1 -0
  112. package/dist/actions/get-availability.js +20 -0
  113. package/dist/actions/get-availability.js.map +1 -0
  114. package/dist/actions/get-booking.d.ts +3 -0
  115. package/dist/actions/get-booking.d.ts.map +1 -0
  116. package/dist/actions/get-booking.js +9 -0
  117. package/dist/actions/get-booking.js.map +1 -0
  118. package/dist/actions/get-event-type.d.ts +3 -0
  119. package/dist/actions/get-event-type.d.ts.map +1 -0
  120. package/dist/actions/get-event-type.js +27 -0
  121. package/dist/actions/get-event-type.js.map +1 -0
  122. package/dist/actions/install-conferencing-app.d.ts +3 -0
  123. package/dist/actions/install-conferencing-app.d.ts.map +1 -0
  124. package/dist/actions/install-conferencing-app.js +28 -0
  125. package/dist/actions/install-conferencing-app.js.map +1 -0
  126. package/dist/actions/invite-team-member.d.ts +3 -0
  127. package/dist/actions/invite-team-member.d.ts.map +1 -0
  128. package/dist/actions/invite-team-member.js +30 -0
  129. package/dist/actions/invite-team-member.js.map +1 -0
  130. package/dist/actions/list-bookings.d.ts +3 -0
  131. package/dist/actions/list-bookings.d.ts.map +1 -0
  132. package/dist/actions/list-bookings.js +35 -0
  133. package/dist/actions/list-bookings.js.map +1 -0
  134. package/dist/actions/list-calendar-integrations.d.ts +3 -0
  135. package/dist/actions/list-calendar-integrations.d.ts.map +1 -0
  136. package/dist/actions/list-calendar-integrations.js +26 -0
  137. package/dist/actions/list-calendar-integrations.js.map +1 -0
  138. package/dist/actions/list-event-types.d.ts +3 -0
  139. package/dist/actions/list-event-types.d.ts.map +1 -0
  140. package/dist/actions/list-event-types.js +31 -0
  141. package/dist/actions/list-event-types.js.map +1 -0
  142. package/dist/actions/list-routing-form-responses.d.ts +3 -0
  143. package/dist/actions/list-routing-form-responses.d.ts.map +1 -0
  144. package/dist/actions/list-routing-form-responses.js +24 -0
  145. package/dist/actions/list-routing-form-responses.js.map +1 -0
  146. package/dist/actions/list-routing-forms.d.ts +3 -0
  147. package/dist/actions/list-routing-forms.d.ts.map +1 -0
  148. package/dist/actions/list-routing-forms.js +29 -0
  149. package/dist/actions/list-routing-forms.js.map +1 -0
  150. package/dist/actions/list-schedules.d.ts +3 -0
  151. package/dist/actions/list-schedules.d.ts.map +1 -0
  152. package/dist/actions/list-schedules.js +16 -0
  153. package/dist/actions/list-schedules.js.map +1 -0
  154. package/dist/actions/list-selected-calendars.d.ts +3 -0
  155. package/dist/actions/list-selected-calendars.d.ts.map +1 -0
  156. package/dist/actions/list-selected-calendars.js +42 -0
  157. package/dist/actions/list-selected-calendars.js.map +1 -0
  158. package/dist/actions/list-workflows.d.ts +3 -0
  159. package/dist/actions/list-workflows.d.ts.map +1 -0
  160. package/dist/actions/list-workflows.js +29 -0
  161. package/dist/actions/list-workflows.js.map +1 -0
  162. package/dist/actions/mark-no-show.d.ts +3 -0
  163. package/dist/actions/mark-no-show.d.ts.map +1 -0
  164. package/dist/actions/mark-no-show.js +15 -0
  165. package/dist/actions/mark-no-show.js.map +1 -0
  166. package/dist/actions/refresh-busy-times.d.ts +3 -0
  167. package/dist/actions/refresh-busy-times.d.ts.map +1 -0
  168. package/dist/actions/refresh-busy-times.js +25 -0
  169. package/dist/actions/refresh-busy-times.js.map +1 -0
  170. package/dist/actions/remove-booking-attendee.d.ts +3 -0
  171. package/dist/actions/remove-booking-attendee.d.ts.map +1 -0
  172. package/dist/actions/remove-booking-attendee.js +20 -0
  173. package/dist/actions/remove-booking-attendee.js.map +1 -0
  174. package/dist/actions/remove-date-override.d.ts +3 -0
  175. package/dist/actions/remove-date-override.d.ts.map +1 -0
  176. package/dist/actions/remove-date-override.js +15 -0
  177. package/dist/actions/remove-date-override.js.map +1 -0
  178. package/dist/actions/remove-team-member.d.ts +3 -0
  179. package/dist/actions/remove-team-member.d.ts.map +1 -0
  180. package/dist/actions/remove-team-member.js +18 -0
  181. package/dist/actions/remove-team-member.js.map +1 -0
  182. package/dist/actions/reorder-event-types.d.ts +3 -0
  183. package/dist/actions/reorder-event-types.d.ts.map +1 -0
  184. package/dist/actions/reorder-event-types.js +18 -0
  185. package/dist/actions/reorder-event-types.js.map +1 -0
  186. package/dist/actions/reschedule-booking.d.ts +3 -0
  187. package/dist/actions/reschedule-booking.d.ts.map +1 -0
  188. package/dist/actions/reschedule-booking.js +38 -0
  189. package/dist/actions/reschedule-booking.js.map +1 -0
  190. package/dist/actions/revoke-private-link.d.ts +3 -0
  191. package/dist/actions/revoke-private-link.d.ts.map +1 -0
  192. package/dist/actions/revoke-private-link.js +16 -0
  193. package/dist/actions/revoke-private-link.js.map +1 -0
  194. package/dist/actions/send-reschedule-link.d.ts +3 -0
  195. package/dist/actions/send-reschedule-link.d.ts.map +1 -0
  196. package/dist/actions/send-reschedule-link.js +18 -0
  197. package/dist/actions/send-reschedule-link.js.map +1 -0
  198. package/dist/actions/set-appearance.d.ts +3 -0
  199. package/dist/actions/set-appearance.d.ts.map +1 -0
  200. package/dist/actions/set-appearance.js +23 -0
  201. package/dist/actions/set-appearance.js.map +1 -0
  202. package/dist/actions/set-default-conferencing-app.d.ts +3 -0
  203. package/dist/actions/set-default-conferencing-app.d.ts.map +1 -0
  204. package/dist/actions/set-default-conferencing-app.js +25 -0
  205. package/dist/actions/set-default-conferencing-app.js.map +1 -0
  206. package/dist/actions/set-default-schedule.d.ts +3 -0
  207. package/dist/actions/set-default-schedule.d.ts.map +1 -0
  208. package/dist/actions/set-default-schedule.js +15 -0
  209. package/dist/actions/set-default-schedule.js.map +1 -0
  210. package/dist/actions/set-destination-calendar.d.ts +3 -0
  211. package/dist/actions/set-destination-calendar.d.ts.map +1 -0
  212. package/dist/actions/set-destination-calendar.js +39 -0
  213. package/dist/actions/set-destination-calendar.js.map +1 -0
  214. package/dist/actions/set-event-type-hosts.d.ts +3 -0
  215. package/dist/actions/set-event-type-hosts.d.ts.map +1 -0
  216. package/dist/actions/set-event-type-hosts.js +41 -0
  217. package/dist/actions/set-event-type-hosts.js.map +1 -0
  218. package/dist/actions/set-event-type-location.d.ts +3 -0
  219. package/dist/actions/set-event-type-location.d.ts.map +1 -0
  220. package/dist/actions/set-event-type-location.js +18 -0
  221. package/dist/actions/set-event-type-location.js.map +1 -0
  222. package/dist/actions/set-host-availability-override.d.ts +3 -0
  223. package/dist/actions/set-host-availability-override.d.ts.map +1 -0
  224. package/dist/actions/set-host-availability-override.js +21 -0
  225. package/dist/actions/set-host-availability-override.js.map +1 -0
  226. package/dist/actions/set-team-branding.d.ts +3 -0
  227. package/dist/actions/set-team-branding.d.ts.map +1 -0
  228. package/dist/actions/set-team-branding.js +28 -0
  229. package/dist/actions/set-team-branding.js.map +1 -0
  230. package/dist/actions/submit-routing-form-response.d.ts +3 -0
  231. package/dist/actions/submit-routing-form-response.d.ts.map +1 -0
  232. package/dist/actions/submit-routing-form-response.js +46 -0
  233. package/dist/actions/submit-routing-form-response.js.map +1 -0
  234. package/dist/actions/toggle-event-type-hidden.d.ts +3 -0
  235. package/dist/actions/toggle-event-type-hidden.d.ts.map +1 -0
  236. package/dist/actions/toggle-event-type-hidden.js +19 -0
  237. package/dist/actions/toggle-event-type-hidden.js.map +1 -0
  238. package/dist/actions/toggle-selected-calendar.d.ts +3 -0
  239. package/dist/actions/toggle-selected-calendar.d.ts.map +1 -0
  240. package/dist/actions/toggle-selected-calendar.js +40 -0
  241. package/dist/actions/toggle-selected-calendar.js.map +1 -0
  242. package/dist/actions/toggle-workflow.d.ts +3 -0
  243. package/dist/actions/toggle-workflow.d.ts.map +1 -0
  244. package/dist/actions/toggle-workflow.js +26 -0
  245. package/dist/actions/toggle-workflow.js.map +1 -0
  246. package/dist/actions/update-event-type.d.ts +3 -0
  247. package/dist/actions/update-event-type.d.ts.map +1 -0
  248. package/dist/actions/update-event-type.js +54 -0
  249. package/dist/actions/update-event-type.js.map +1 -0
  250. package/dist/actions/update-member-role.d.ts +3 -0
  251. package/dist/actions/update-member-role.d.ts.map +1 -0
  252. package/dist/actions/update-member-role.js +23 -0
  253. package/dist/actions/update-member-role.js.map +1 -0
  254. package/dist/actions/update-profile.d.ts +3 -0
  255. package/dist/actions/update-profile.d.ts.map +1 -0
  256. package/dist/actions/update-profile.js +34 -0
  257. package/dist/actions/update-profile.js.map +1 -0
  258. package/dist/actions/update-routing-form.d.ts +3 -0
  259. package/dist/actions/update-routing-form.d.ts.map +1 -0
  260. package/dist/actions/update-routing-form.js +40 -0
  261. package/dist/actions/update-routing-form.js.map +1 -0
  262. package/dist/actions/update-schedule.d.ts +3 -0
  263. package/dist/actions/update-schedule.d.ts.map +1 -0
  264. package/dist/actions/update-schedule.js +44 -0
  265. package/dist/actions/update-schedule.js.map +1 -0
  266. package/dist/actions/update-workflow.d.ts +3 -0
  267. package/dist/actions/update-workflow.d.ts.map +1 -0
  268. package/dist/actions/update-workflow.js +89 -0
  269. package/dist/actions/update-workflow.js.map +1 -0
  270. package/dist/core/buffers.d.ts +25 -0
  271. package/dist/core/buffers.d.ts.map +1 -0
  272. package/dist/core/buffers.js +21 -0
  273. package/dist/core/buffers.js.map +1 -0
  274. package/dist/core/conflicts.d.ts +11 -0
  275. package/dist/core/conflicts.d.ts.map +1 -0
  276. package/dist/core/conflicts.js +42 -0
  277. package/dist/core/conflicts.js.map +1 -0
  278. package/dist/core/index.d.ts +9 -0
  279. package/dist/core/index.d.ts.map +1 -0
  280. package/dist/core/index.js +9 -0
  281. package/dist/core/index.js.map +1 -0
  282. package/dist/core/limits.d.ts +23 -0
  283. package/dist/core/limits.d.ts.map +1 -0
  284. package/dist/core/limits.js +28 -0
  285. package/dist/core/limits.js.map +1 -0
  286. package/dist/core/round-robin.d.ts +31 -0
  287. package/dist/core/round-robin.d.ts.map +1 -0
  288. package/dist/core/round-robin.js +57 -0
  289. package/dist/core/round-robin.js.map +1 -0
  290. package/dist/core/rrule.d.ts +2 -0
  291. package/dist/core/rrule.d.ts.map +1 -0
  292. package/dist/core/rrule.js +14 -0
  293. package/dist/core/rrule.js.map +1 -0
  294. package/dist/core/rules.d.ts +26 -0
  295. package/dist/core/rules.d.ts.map +1 -0
  296. package/dist/core/rules.js +40 -0
  297. package/dist/core/rules.js.map +1 -0
  298. package/dist/core/slots.d.ts +58 -0
  299. package/dist/core/slots.d.ts.map +1 -0
  300. package/dist/core/slots.js +98 -0
  301. package/dist/core/slots.js.map +1 -0
  302. package/dist/core/time.d.ts +52 -0
  303. package/dist/core/time.d.ts.map +1 -0
  304. package/dist/core/time.js +109 -0
  305. package/dist/core/time.js.map +1 -0
  306. package/dist/index.d.ts +14 -0
  307. package/dist/index.d.ts.map +1 -0
  308. package/dist/index.js +14 -0
  309. package/dist/index.js.map +1 -0
  310. package/dist/manifest.d.ts +28 -0
  311. package/dist/manifest.d.ts.map +1 -0
  312. package/dist/manifest.js +160 -0
  313. package/dist/manifest.js.map +1 -0
  314. package/dist/react/components/SlotPicker.d.ts +21 -0
  315. package/dist/react/components/SlotPicker.d.ts.map +1 -0
  316. package/dist/react/components/SlotPicker.js +15 -0
  317. package/dist/react/components/SlotPicker.js.map +1 -0
  318. package/dist/react/components/TimezoneSelect.d.ts +7 -0
  319. package/dist/react/components/TimezoneSelect.d.ts.map +1 -0
  320. package/dist/react/components/TimezoneSelect.js +31 -0
  321. package/dist/react/components/TimezoneSelect.js.map +1 -0
  322. package/dist/react/components/booking-links/AvailabilityEditor.d.ts +21 -0
  323. package/dist/react/components/booking-links/AvailabilityEditor.d.ts.map +1 -0
  324. package/dist/react/components/booking-links/AvailabilityEditor.js +102 -0
  325. package/dist/react/components/booking-links/AvailabilityEditor.js.map +1 -0
  326. package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts +22 -0
  327. package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts.map +1 -0
  328. package/dist/react/components/booking-links/BookingLinkCreateDialog.js +75 -0
  329. package/dist/react/components/booking-links/BookingLinkCreateDialog.js.map +1 -0
  330. package/dist/react/components/booking-links/ConferencingSelector.d.ts +19 -0
  331. package/dist/react/components/booking-links/ConferencingSelector.d.ts.map +1 -0
  332. package/dist/react/components/booking-links/ConferencingSelector.js +87 -0
  333. package/dist/react/components/booking-links/ConferencingSelector.js.map +1 -0
  334. package/dist/react/components/booking-links/CustomFieldsEditor.d.ts +19 -0
  335. package/dist/react/components/booking-links/CustomFieldsEditor.d.ts.map +1 -0
  336. package/dist/react/components/booking-links/CustomFieldsEditor.js +117 -0
  337. package/dist/react/components/booking-links/CustomFieldsEditor.js.map +1 -0
  338. package/dist/react/components/booking-links/DurationPicker.d.ts +9 -0
  339. package/dist/react/components/booking-links/DurationPicker.d.ts.map +1 -0
  340. package/dist/react/components/booking-links/DurationPicker.js +56 -0
  341. package/dist/react/components/booking-links/DurationPicker.js.map +1 -0
  342. package/dist/react/components/booking-links/SlugEditor.d.ts +15 -0
  343. package/dist/react/components/booking-links/SlugEditor.d.ts.map +1 -0
  344. package/dist/react/components/booking-links/SlugEditor.js +64 -0
  345. package/dist/react/components/booking-links/SlugEditor.js.map +1 -0
  346. package/dist/react/components/booking-links/index.d.ts +16 -0
  347. package/dist/react/components/booking-links/index.d.ts.map +1 -0
  348. package/dist/react/components/booking-links/index.js +16 -0
  349. package/dist/react/components/booking-links/index.js.map +1 -0
  350. package/dist/react/components/index.d.ts +14 -0
  351. package/dist/react/components/index.d.ts.map +1 -0
  352. package/dist/react/components/index.js +14 -0
  353. package/dist/react/components/index.js.map +1 -0
  354. package/dist/react/hooks/useBookingFlow.d.ts +33 -0
  355. package/dist/react/hooks/useBookingFlow.d.ts.map +1 -0
  356. package/dist/react/hooks/useBookingFlow.js +51 -0
  357. package/dist/react/hooks/useBookingFlow.js.map +1 -0
  358. package/dist/react/hooks/useEventType.d.ts +21 -0
  359. package/dist/react/hooks/useEventType.d.ts.map +1 -0
  360. package/dist/react/hooks/useEventType.js +38 -0
  361. package/dist/react/hooks/useEventType.js.map +1 -0
  362. package/dist/react/hooks/useReschedule.d.ts +13 -0
  363. package/dist/react/hooks/useReschedule.d.ts.map +1 -0
  364. package/dist/react/hooks/useReschedule.js +33 -0
  365. package/dist/react/hooks/useReschedule.js.map +1 -0
  366. package/dist/react/hooks/useSlots.d.ts +32 -0
  367. package/dist/react/hooks/useSlots.d.ts.map +1 -0
  368. package/dist/react/hooks/useSlots.js +59 -0
  369. package/dist/react/hooks/useSlots.js.map +1 -0
  370. package/dist/react/hooks/useTimezone.d.ts +3 -0
  371. package/dist/react/hooks/useTimezone.d.ts.map +1 -0
  372. package/dist/react/hooks/useTimezone.js +30 -0
  373. package/dist/react/hooks/useTimezone.js.map +1 -0
  374. package/dist/react/index.d.ts +11 -0
  375. package/dist/react/index.d.ts.map +1 -0
  376. package/dist/react/index.js +11 -0
  377. package/dist/react/index.js.map +1 -0
  378. package/dist/schema/bookings.d.ts +1201 -0
  379. package/dist/schema/bookings.d.ts.map +1 -0
  380. package/dist/schema/bookings.js +100 -0
  381. package/dist/schema/bookings.js.map +1 -0
  382. package/dist/schema/calendar-cache.d.ts +160 -0
  383. package/dist/schema/calendar-cache.d.ts.map +1 -0
  384. package/dist/schema/calendar-cache.js +23 -0
  385. package/dist/schema/calendar-cache.js.map +1 -0
  386. package/dist/schema/credentials.d.ts +743 -0
  387. package/dist/schema/credentials.d.ts.map +1 -0
  388. package/dist/schema/credentials.js +79 -0
  389. package/dist/schema/credentials.js.map +1 -0
  390. package/dist/schema/event-types.d.ts +1292 -0
  391. package/dist/schema/event-types.d.ts.map +1 -0
  392. package/dist/schema/event-types.js +131 -0
  393. package/dist/schema/event-types.js.map +1 -0
  394. package/dist/schema/index.d.ts +20 -0
  395. package/dist/schema/index.d.ts.map +1 -0
  396. package/dist/schema/index.js +20 -0
  397. package/dist/schema/index.js.map +1 -0
  398. package/dist/schema/routing-forms.d.ts +571 -0
  399. package/dist/schema/routing-forms.d.ts.map +1 -0
  400. package/dist/schema/routing-forms.js +44 -0
  401. package/dist/schema/routing-forms.js.map +1 -0
  402. package/dist/schema/schedules.d.ts +830 -0
  403. package/dist/schema/schedules.d.ts.map +1 -0
  404. package/dist/schema/schedules.js +72 -0
  405. package/dist/schema/schedules.js.map +1 -0
  406. package/dist/schema/teams.d.ts +569 -0
  407. package/dist/schema/teams.d.ts.map +1 -0
  408. package/dist/schema/teams.js +38 -0
  409. package/dist/schema/teams.js.map +1 -0
  410. package/dist/schema/workflows.d.ts +1367 -0
  411. package/dist/schema/workflows.d.ts.map +1 -0
  412. package/dist/schema/workflows.js +116 -0
  413. package/dist/schema/workflows.js.map +1 -0
  414. package/dist/server/availability-engine.d.ts +21 -0
  415. package/dist/server/availability-engine.d.ts.map +1 -0
  416. package/dist/server/availability-engine.js +135 -0
  417. package/dist/server/availability-engine.js.map +1 -0
  418. package/dist/server/booking-service.d.ts +46 -0
  419. package/dist/server/booking-service.d.ts.map +1 -0
  420. package/dist/server/booking-service.js +198 -0
  421. package/dist/server/booking-service.js.map +1 -0
  422. package/dist/server/bookings-repo.d.ts +48 -0
  423. package/dist/server/bookings-repo.d.ts.map +1 -0
  424. package/dist/server/bookings-repo.js +244 -0
  425. package/dist/server/bookings-repo.js.map +1 -0
  426. package/dist/server/context.d.ts +33 -0
  427. package/dist/server/context.d.ts.map +1 -0
  428. package/dist/server/context.js +11 -0
  429. package/dist/server/context.js.map +1 -0
  430. package/dist/server/db-types.d.ts +15 -0
  431. package/dist/server/db-types.d.ts.map +1 -0
  432. package/dist/server/db-types.js +2 -0
  433. package/dist/server/db-types.js.map +1 -0
  434. package/dist/server/event-types-repo.d.ts +46 -0
  435. package/dist/server/event-types-repo.d.ts.map +1 -0
  436. package/dist/server/event-types-repo.js +320 -0
  437. package/dist/server/event-types-repo.js.map +1 -0
  438. package/dist/server/hooks.d.ts +6 -0
  439. package/dist/server/hooks.d.ts.map +1 -0
  440. package/dist/server/hooks.js +173 -0
  441. package/dist/server/hooks.js.map +1 -0
  442. package/dist/server/ics.d.ts +12 -0
  443. package/dist/server/ics.d.ts.map +1 -0
  444. package/dist/server/ics.js +81 -0
  445. package/dist/server/ics.js.map +1 -0
  446. package/dist/server/index.d.ts +12 -0
  447. package/dist/server/index.d.ts.map +1 -0
  448. package/dist/server/index.js +12 -0
  449. package/dist/server/index.js.map +1 -0
  450. package/dist/server/providers/builtin-video.d.ts +12 -0
  451. package/dist/server/providers/builtin-video.d.ts.map +1 -0
  452. package/dist/server/providers/builtin-video.js +50 -0
  453. package/dist/server/providers/builtin-video.js.map +1 -0
  454. package/dist/server/providers/cal-video.d.ts +12 -0
  455. package/dist/server/providers/cal-video.d.ts.map +1 -0
  456. package/dist/server/providers/cal-video.js +50 -0
  457. package/dist/server/providers/cal-video.js.map +1 -0
  458. package/dist/server/providers/google-calendar.d.ts +28 -0
  459. package/dist/server/providers/google-calendar.d.ts.map +1 -0
  460. package/dist/server/providers/google-calendar.js +163 -0
  461. package/dist/server/providers/google-calendar.js.map +1 -0
  462. package/dist/server/providers/google-meet.d.ts +10 -0
  463. package/dist/server/providers/google-meet.d.ts.map +1 -0
  464. package/dist/server/providers/google-meet.js +14 -0
  465. package/dist/server/providers/google-meet.js.map +1 -0
  466. package/dist/server/providers/index.d.ts +8 -0
  467. package/dist/server/providers/index.d.ts.map +1 -0
  468. package/dist/server/providers/index.js +8 -0
  469. package/dist/server/providers/index.js.map +1 -0
  470. package/dist/server/providers/office365.d.ts +21 -0
  471. package/dist/server/providers/office365.d.ts.map +1 -0
  472. package/dist/server/providers/office365.js +146 -0
  473. package/dist/server/providers/office365.js.map +1 -0
  474. package/dist/server/providers/registry.d.ts +14 -0
  475. package/dist/server/providers/registry.d.ts.map +1 -0
  476. package/dist/server/providers/registry.js +28 -0
  477. package/dist/server/providers/registry.js.map +1 -0
  478. package/dist/server/providers/types.d.ts +133 -0
  479. package/dist/server/providers/types.d.ts.map +1 -0
  480. package/dist/server/providers/types.js +2 -0
  481. package/dist/server/providers/types.js.map +1 -0
  482. package/dist/server/providers/zoom.d.ts +34 -0
  483. package/dist/server/providers/zoom.d.ts.map +1 -0
  484. package/dist/server/providers/zoom.js +111 -0
  485. package/dist/server/providers/zoom.js.map +1 -0
  486. package/dist/server/schedules-repo.d.ts +26 -0
  487. package/dist/server/schedules-repo.d.ts.map +1 -0
  488. package/dist/server/schedules-repo.js +223 -0
  489. package/dist/server/schedules-repo.js.map +1 -0
  490. package/dist/server/video-oauth-state.d.ts +28 -0
  491. package/dist/server/video-oauth-state.d.ts.map +1 -0
  492. package/dist/server/video-oauth-state.js +101 -0
  493. package/dist/server/video-oauth-state.js.map +1 -0
  494. package/dist/server/video-oauth.d.ts +18 -0
  495. package/dist/server/video-oauth.d.ts.map +1 -0
  496. package/dist/server/video-oauth.js +82 -0
  497. package/dist/server/video-oauth.js.map +1 -0
  498. package/dist/shared/index.d.ts +298 -0
  499. package/dist/shared/index.d.ts.map +1 -0
  500. package/dist/shared/index.js +6 -0
  501. package/dist/shared/index.js.map +1 -0
  502. package/dist/version.d.ts +2 -0
  503. package/dist/version.d.ts.map +1 -0
  504. package/dist/version.js +2 -0
  505. package/dist/version.js.map +1 -0
  506. package/docs/UI_UNIFICATION.md +78 -0
  507. package/docs/actions.md +64 -0
  508. package/docs/eject.md +18 -0
  509. package/docs/llms-full.txt +1022 -0
  510. package/docs/llms.txt +89 -0
  511. package/docs/providers.md +68 -0
  512. package/docs/schema.md +86 -0
  513. package/docs/skills/availability/SKILL.md +44 -0
  514. package/docs/skills/booker/SKILL.md +51 -0
  515. package/docs/skills/bookings/SKILL.md +43 -0
  516. package/docs/skills/embeds/SKILL.md +49 -0
  517. package/docs/skills/event-types/SKILL.md +40 -0
  518. package/docs/skills/integrations/SKILL.md +52 -0
  519. package/docs/skills/routing-forms/SKILL.md +39 -0
  520. package/docs/skills/scheduling-basics/SKILL.md +51 -0
  521. package/docs/skills/slot-engine/SKILL.md +52 -0
  522. package/docs/skills/team-scheduling/SKILL.md +54 -0
  523. package/docs/skills/workflows/SKILL.md +55 -0
  524. package/package.json +87 -0
  525. package/src/actions/_helpers.ts +62 -0
  526. package/src/actions/accept-team-invite.ts +26 -0
  527. package/src/actions/add-booking-attendee.ts +32 -0
  528. package/src/actions/add-booking-note.ts +25 -0
  529. package/src/actions/add-date-override.ts +23 -0
  530. package/src/actions/add-private-link.ts +31 -0
  531. package/src/actions/assign-round-robin-host.ts +54 -0
  532. package/src/actions/cancel-booking.ts +39 -0
  533. package/src/actions/check-availability.ts +46 -0
  534. package/src/actions/confirm-booking.ts +15 -0
  535. package/src/actions/connect-calendar.ts +27 -0
  536. package/src/actions/connect-video.ts +57 -0
  537. package/src/actions/create-booking.ts +62 -0
  538. package/src/actions/create-event-type.ts +45 -0
  539. package/src/actions/create-host-group.ts +25 -0
  540. package/src/actions/create-routing-form.ts +39 -0
  541. package/src/actions/create-schedule.ts +36 -0
  542. package/src/actions/create-team.ts +44 -0
  543. package/src/actions/create-workflow.ts +83 -0
  544. package/src/actions/delete-event-type.ts +14 -0
  545. package/src/actions/delete-routing-form.ts +21 -0
  546. package/src/actions/delete-schedule.ts +14 -0
  547. package/src/actions/delete-workflow.ts +21 -0
  548. package/src/actions/disconnect-calendar.ts +22 -0
  549. package/src/actions/duplicate-event-type.ts +36 -0
  550. package/src/actions/export-bookings-csv.ts +54 -0
  551. package/src/actions/find-available-slot.ts +40 -0
  552. package/src/actions/get-availability.ts +20 -0
  553. package/src/actions/get-booking.ts +9 -0
  554. package/src/actions/get-event-type.ts +29 -0
  555. package/src/actions/install-conferencing-app.ts +29 -0
  556. package/src/actions/invite-team-member.ts +30 -0
  557. package/src/actions/list-bookings.ts +36 -0
  558. package/src/actions/list-calendar-integrations.ts +26 -0
  559. package/src/actions/list-event-types.ts +31 -0
  560. package/src/actions/list-routing-form-responses.ts +24 -0
  561. package/src/actions/list-routing-forms.ts +34 -0
  562. package/src/actions/list-schedules.ts +16 -0
  563. package/src/actions/list-selected-calendars.ts +41 -0
  564. package/src/actions/list-workflows.ts +34 -0
  565. package/src/actions/mark-no-show.ts +15 -0
  566. package/src/actions/refresh-busy-times.ts +26 -0
  567. package/src/actions/remove-booking-attendee.ts +24 -0
  568. package/src/actions/remove-date-override.ts +15 -0
  569. package/src/actions/remove-team-member.ts +23 -0
  570. package/src/actions/reorder-event-types.ts +18 -0
  571. package/src/actions/reschedule-booking.ts +45 -0
  572. package/src/actions/revoke-private-link.ts +16 -0
  573. package/src/actions/send-reschedule-link.ts +18 -0
  574. package/src/actions/set-appearance.ts +24 -0
  575. package/src/actions/set-default-conferencing-app.ts +25 -0
  576. package/src/actions/set-default-schedule.ts +15 -0
  577. package/src/actions/set-destination-calendar.ts +39 -0
  578. package/src/actions/set-event-type-hosts.ts +43 -0
  579. package/src/actions/set-event-type-location.ts +18 -0
  580. package/src/actions/set-host-availability-override.ts +27 -0
  581. package/src/actions/set-team-branding.ts +28 -0
  582. package/src/actions/submit-routing-form-response.ts +47 -0
  583. package/src/actions/toggle-event-type-hidden.ts +21 -0
  584. package/src/actions/toggle-selected-calendar.ts +43 -0
  585. package/src/actions/toggle-workflow.ts +25 -0
  586. package/src/actions/update-event-type.ts +54 -0
  587. package/src/actions/update-member-role.ts +28 -0
  588. package/src/actions/update-profile.ts +36 -0
  589. package/src/actions/update-routing-form.ts +36 -0
  590. package/src/actions/update-schedule.ts +53 -0
  591. package/src/actions/update-workflow.ts +89 -0
  592. package/src/core/buffers.ts +46 -0
  593. package/src/core/conflicts.ts +49 -0
  594. package/src/core/index.ts +8 -0
  595. package/src/core/limits.ts +60 -0
  596. package/src/core/round-robin.test.ts +95 -0
  597. package/src/core/round-robin.ts +103 -0
  598. package/src/core/rrule.ts +20 -0
  599. package/src/core/rules.ts +66 -0
  600. package/src/core/slots.test.ts +246 -0
  601. package/src/core/slots.ts +223 -0
  602. package/src/core/time.ts +136 -0
  603. package/src/index.ts +14 -0
  604. package/src/manifest.ts +174 -0
  605. package/src/react/components/SlotPicker.tsx +72 -0
  606. package/src/react/components/TimezoneSelect.tsx +55 -0
  607. package/src/react/components/_shadcn-shims.d.ts +251 -0
  608. package/src/react/components/booking-links/AvailabilityEditor.tsx +177 -0
  609. package/src/react/components/booking-links/BookingLinkCreateDialog.tsx +189 -0
  610. package/src/react/components/booking-links/ConferencingSelector.tsx +255 -0
  611. package/src/react/components/booking-links/CustomFieldsEditor.tsx +420 -0
  612. package/src/react/components/booking-links/DurationPicker.tsx +115 -0
  613. package/src/react/components/booking-links/SlugEditor.tsx +149 -0
  614. package/src/react/components/booking-links/index.ts +15 -0
  615. package/src/react/components/index.ts +13 -0
  616. package/src/react/hooks/useBookingFlow.ts +113 -0
  617. package/src/react/hooks/useEventType.ts +52 -0
  618. package/src/react/hooks/useReschedule.ts +39 -0
  619. package/src/react/hooks/useSlots.ts +88 -0
  620. package/src/react/hooks/useTimezone.ts +29 -0
  621. package/src/react/index.ts +10 -0
  622. package/src/schema/bookings.ts +124 -0
  623. package/src/schema/calendar-cache.ts +23 -0
  624. package/src/schema/credentials.ts +83 -0
  625. package/src/schema/event-types.ts +154 -0
  626. package/src/schema/index.ts +19 -0
  627. package/src/schema/routing-forms.ts +52 -0
  628. package/src/schema/schedules.ts +83 -0
  629. package/src/schema/teams.ts +46 -0
  630. package/src/schema/workflows.ts +128 -0
  631. package/src/server/availability-engine.ts +193 -0
  632. package/src/server/booking-service.ts +264 -0
  633. package/src/server/bookings-repo.ts +330 -0
  634. package/src/server/context.ts +49 -0
  635. package/src/server/db-types.ts +16 -0
  636. package/src/server/event-types-repo.ts +385 -0
  637. package/src/server/hooks.ts +213 -0
  638. package/src/server/ics.ts +99 -0
  639. package/src/server/index.ts +11 -0
  640. package/src/server/providers/builtin-video.ts +62 -0
  641. package/src/server/providers/google-calendar.ts +237 -0
  642. package/src/server/providers/google-meet.ts +22 -0
  643. package/src/server/providers/index.ts +7 -0
  644. package/src/server/providers/office365.ts +208 -0
  645. package/src/server/providers/registry.ts +43 -0
  646. package/src/server/providers/types.ts +126 -0
  647. package/src/server/providers/zoom.ts +173 -0
  648. package/src/server/schedules-repo.ts +279 -0
  649. package/src/server/video-oauth-state.test.ts +120 -0
  650. package/src/server/video-oauth-state.ts +116 -0
  651. package/src/server/video-oauth.ts +99 -0
  652. package/src/shared/index.ts +366 -0
  653. package/src/version.ts +1 -0
@@ -0,0 +1,1022 @@
1
+ # @agent-native/scheduling — Full Documentation Bundle
2
+
3
+ Generated by scripts/build-llms-full.mjs. Includes every markdown doc
4
+ and skill. For a curated index, see llms.txt.
5
+
6
+
7
+ ---
8
+ ## UI_UNIFICATION.md
9
+
10
+ # UI Unification — booking-link / event-type editor
11
+
12
+ As of 0.1.x the `@agent-native/scheduling` package ships a small set of
13
+ shared React components the `calendar` and `scheduling` templates both
14
+ consume so the two apps keep visual parity without duplicating logic.
15
+
16
+ Exported from `@agent-native/scheduling/react/components`:
17
+
18
+ | Component | Purpose |
19
+ | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
20
+ | `ConferencingSelector` | 2x2 grid of "No conferencing / Google Meet / Zoom / Custom link"; includes a "Connect Zoom" affordance that starts real OAuth |
21
+ | `SlugEditor` | Inline-editable URL preview (`host/prefix/username/slug`) with click-to-edit segments |
22
+ | `CustomFieldsEditor` | Add / edit / reorder / remove custom booking-form fields, with presets (LinkedIn, Company, Phone, Website) |
23
+ | `DurationPicker` | Multi-select pills (15 / 30 / 45 / 60 + custom) for per-event-type durations |
24
+ | `BookingLinkCreateDialog` | Modal prompting for Title / URL / Duration / Description when creating a new event type |
25
+ | `AvailabilityEditor` | Weekly schedule grid with toggles + start/end time pickers; `summarizeAvailability(ws)` helper for list subtitles |
26
+
27
+ The existing `SlotPicker` and `TimezoneSelect` continue to live alongside
28
+ these.
29
+
30
+ ## Shadcn primitives required in the consumer
31
+
32
+ Every component in this package imports shadcn primitives via the
33
+ standard `@/components/ui/*` alias (resolved by the consumer's bundler).
34
+ The package ships type shims for them in
35
+ `react/components/_shadcn-shims.d.ts` so it compiles cleanly on its own.
36
+
37
+ Add these to your template's `app/components/ui/` before importing any
38
+ of the shared components:
39
+
40
+ | Component required | Used by |
41
+ | ------------------ | ----------------------------------------------------------------------------------------------------- |
42
+ | `button` | ConferencingSelector, BookingLinkCreateDialog, DurationPicker |
43
+ | `input` | ConferencingSelector, CustomFieldsEditor, DurationPicker, BookingLinkCreateDialog, AvailabilityEditor |
44
+ | `label` | ConferencingSelector, CustomFieldsEditor, SlugEditor, BookingLinkCreateDialog, AvailabilityEditor |
45
+ | `textarea` | CustomFieldsEditor, BookingLinkCreateDialog |
46
+ | `switch` | CustomFieldsEditor, AvailabilityEditor |
47
+ | `badge` | ConferencingSelector |
48
+ | `dialog` | BookingLinkCreateDialog |
49
+
50
+ Icons come from `@tabler/icons-react` (not bundled; each template already
51
+ depends on it).
52
+
53
+ ## What moved where
54
+
55
+ | Old home (calendar template) | New home |
56
+ | ---------------------------------------- | --------------------------------------------------------------------- |
57
+ | `ConferencingEditor` in BookingLinksPage | `ConferencingSelector` in `@agent-native/scheduling/react/components` |
58
+ | `EditableBookingUrl` in BookingLinksPage | `SlugEditor` in the package |
59
+ | `CustomFieldsEditor` in BookingLinksPage | `CustomFieldsEditor` in the package |
60
+
61
+ | Old home (scheduling template) | New home |
62
+ | ------------------------------------------ | --------------------------------------------------------------------------- |
63
+ | `DurationsEditor` in event-type editor | `DurationPicker` in the package |
64
+ | `LocationEditor` + `AppsGrid` (two places) | `ConferencingSelector` in the package (Apps tab removed — it was redundant) |
65
+ | Inline create dialog in `_index` | `BookingLinkCreateDialog` in the package |
66
+
67
+ ## Zoom became real OAuth
68
+
69
+ Previously the calendar template's Zoom option asked the user to paste a
70
+ personal meeting URL. The scheduling template had no OAuth-based Zoom at
71
+ all (only the `zoom_video` "app install" placeholder).
72
+
73
+ Both now use real Zoom OAuth via the provider's new optional
74
+ `startOAuth` / `completeOAuth` methods on `VideoProvider`. Consumers:
75
+
76
+ - **Scheduling template** — calls the package's `connect-video` action
77
+ for `zoom_video`, callback lands at
78
+ `/_agent-native/oauth/zoom/callback.get.ts`, tokens stored via
79
+ `completeVideoOAuth()`.
80
+ - **Calendar template** — ships a lightweight `server/lib/zoom.ts` that
81
+ uses the package's `createZoomProvider` but stores tokens directly in
82
+ core's `oauth_tokens` keyed by Zoom user id + owner email. The
83
+ booking-create handler calls `createZoomMeeting()` when the booking
84
+ link's conferencing type is `zoom`.
85
+
86
+ Both flows auto-refresh the Zoom access token when it's within 60s of
87
+ expiry and mark credentials invalid if Zoom returns 401/403.
88
+
89
+
90
+ ---
91
+ ## actions.md
92
+
93
+ # Actions
94
+
95
+ Every action is a `defineAction` module you can re-export into your
96
+ template's `actions/` folder:
97
+
98
+ ```ts
99
+ // actions/create-booking.ts
100
+ export { default } from "@agent-native/scheduling/actions/create-booking";
101
+ ```
102
+
103
+ The action scaffolder can do this for you. Full list:
104
+
105
+ ## Event types
106
+
107
+ - list-event-types, get-event-type, create-event-type, update-event-type,
108
+ delete-event-type, duplicate-event-type, toggle-event-type-hidden,
109
+ reorder-event-types, set-event-type-location, add-private-link,
110
+ revoke-private-link
111
+
112
+ ## Availability
113
+
114
+ - list-schedules, create-schedule, update-schedule, delete-schedule,
115
+ set-default-schedule, add-date-override, remove-date-override,
116
+ get-availability, check-availability, find-available-slot
117
+
118
+ ## Bookings
119
+
120
+ - list-bookings, get-booking, create-booking, reschedule-booking,
121
+ cancel-booking, confirm-booking, mark-no-show, add-booking-attendee,
122
+ remove-booking-attendee, send-reschedule-link, add-booking-note,
123
+ export-bookings-csv
124
+
125
+ ## Integrations
126
+
127
+ - list-calendar-integrations, connect-calendar, disconnect-calendar,
128
+ list-selected-calendars, toggle-selected-calendar, set-destination-calendar,
129
+ refresh-busy-times, install-conferencing-app
130
+
131
+ ## Team
132
+
133
+ - create-team, invite-team-member, accept-team-invite, remove-team-member,
134
+ update-member-role, set-team-branding
135
+
136
+ ## Round-robin & hosts
137
+
138
+ - assign-round-robin-host, set-event-type-hosts,
139
+ set-host-availability-override, create-host-group
140
+
141
+ ## Settings
142
+
143
+ - update-profile, set-appearance, set-default-conferencing-app
144
+
145
+ ## Workflows
146
+
147
+ - list-workflows, create-workflow, update-workflow, delete-workflow,
148
+ toggle-workflow
149
+
150
+ ## Routing forms
151
+
152
+ - list-routing-forms, create-routing-form, update-routing-form,
153
+ delete-routing-form, list-routing-form-responses
154
+
155
+ All actions respect the framework sharing system — if a resource is not
156
+ owned by or shared with the current user, read/write actions throw.
157
+
158
+
159
+ ---
160
+ ## eject.md
161
+
162
+ # Ejecting `@agent-native/scheduling`
163
+
164
+ For full customization, you can move the package source into your own repo.
165
+
166
+ **Planned for v0.2:** `agent-native eject @agent-native/scheduling`.
167
+
168
+ **Today (v0.1)** — do it manually:
169
+
170
+ 1. `cp -r node_modules/@agent-native/scheduling/src packages/scheduling-local/src`
171
+ 2. Add `packages/scheduling-local/` to your workspaces.
172
+ 3. Replace `"@agent-native/scheduling": "^0.1"` in dependencies with
173
+ `"@local/scheduling": "workspace:*"` (or similar).
174
+ 4. Run a find/replace across your repo from `@agent-native/scheduling` to
175
+ `@local/scheduling`.
176
+ 5. Install: `pnpm install`.
177
+
178
+ Now you own the code and can modify freely. Upstream updates are available via
179
+ `npm view @agent-native/scheduling versions` — you can selectively port changes.
180
+
181
+
182
+ ---
183
+ ## llms.txt
184
+
185
+ # @agent-native/scheduling
186
+
187
+ Scheduling primitives for agent-native apps — event types, availability,
188
+ bookings, team scheduling, workflows, routing forms. A self-hosted,
189
+ locally-owned scheduling stack, not an API wrapper.
190
+
191
+ ## What this package provides
192
+
193
+ - **Drizzle schemas** (`/schema`) — event_types, schedules, availability,
194
+ date_overrides, bookings, booking_attendees, booking_references, teams,
195
+ team_members, credentials, calendar_cache, selected_calendars,
196
+ destination_calendars, hashed_links, workflows, workflow_steps,
197
+ scheduled_reminders, webhooks, routing_forms, routing_form_responses,
198
+ api_keys, out_of_office_entries, travel_schedules.
199
+ - **Pure helpers** (`/core`) — DST-safe slot computation, timezone math,
200
+ availability rule evaluation, round-robin host selection, buffer
201
+ application, booking-limit bucketing, recurring-event expansion.
202
+ - **Server layer** (`/server`) — DB repos, availability engine, booking
203
+ service, pluggable calendar + video providers (Google Calendar, Outlook,
204
+ Zoom, Google Meet, built-in video), iCal generator, lifecycle hooks →
205
+ workflows.
206
+ - **Actions** (`/actions/*`) — ~55 `defineAction` modules covering every
207
+ operation in the product (event type CRUD, availability edit, booking
208
+ lifecycle, calendar connect, team ops, round-robin, workflows, routing
209
+ forms). Re-export from a consumer template's `actions/` folder for
210
+ zero-boilerplate adoption.
211
+ - **React primitives** (`/react`, `/react/components`) — headless hooks for
212
+ timezone, slots, booking flow; minimal unstyled primitives (SlotPicker,
213
+ TimezoneSelect).
214
+ - **Skill docs** (`/skills/*`) — drop-in agent skills for scheduling
215
+ concepts: `scheduling-basics`, `event-types`, `availability`, `bookings`,
216
+ `booker`, `slot-engine`, `team-scheduling`, `integrations`, `embeds`,
217
+ `workflows`, `routing-forms`.
218
+
219
+ ## Quick start
220
+
221
+ ```ts
222
+ // server/db/schema.ts
223
+ export * from "@agent-native/scheduling/schema";
224
+
225
+ // server/bootstrap.ts
226
+ import { setSchedulingContext } from "@agent-native/scheduling/server";
227
+ import {
228
+ registerCalendarProvider,
229
+ registerVideoProvider,
230
+ createGoogleCalendarProvider,
231
+ createDailyVideoProvider,
232
+ } from "@agent-native/scheduling/server/providers";
233
+ import { getDb, schema } from "./db/index.js";
234
+
235
+ setSchedulingContext({
236
+ getDb,
237
+ schema,
238
+ getCurrentUserEmail: () => getRequestUserEmail(),
239
+ getCurrentOrgId: () => getRequestOrgId(),
240
+ publicBaseUrl: process.env.PUBLIC_URL,
241
+ });
242
+
243
+ registerCalendarProvider(createGoogleCalendarProvider({
244
+ clientId: process.env.GOOGLE_CLIENT_ID!,
245
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
246
+ getAccessToken: fetchGoogleToken, // your implementation
247
+ }));
248
+
249
+ registerVideoProvider(createDailyVideoProvider({
250
+ apiKey: process.env.DAILY_API_KEY!,
251
+ }));
252
+ ```
253
+
254
+ ## Full documentation
255
+
256
+ For the full bundled docs (every .md file concatenated), see
257
+ `llms-full.txt` in this folder.
258
+
259
+ ## Individual skills
260
+
261
+ - skills/scheduling-basics/SKILL.md — Core concepts, terminology.
262
+ - skills/event-types/SKILL.md — Event type model, tabs, scheduling types.
263
+ - skills/availability/SKILL.md — Schedules, date overrides, timezone rules.
264
+ - skills/bookings/SKILL.md — Lifecycle, reschedule, cancel, no-show.
265
+ - skills/booker/SKILL.md — Public booking flow, state machine.
266
+ - skills/slot-engine/SKILL.md — The pure slot-computation function and
267
+ invariants.
268
+ - skills/team-scheduling/SKILL.md — Team event types, round-robin,
269
+ collective.
270
+ - skills/integrations/SKILL.md — Calendar + video provider integrations.
271
+ - skills/embeds/SKILL.md — Inline/popup/floating-button embeds.
272
+ - skills/workflows/SKILL.md — Trigger-based automations.
273
+ - skills/routing-forms/SKILL.md — Pre-booking routing forms.
274
+
275
+
276
+ ---
277
+ ## providers.md
278
+
279
+ # Writing a custom provider
280
+
281
+ Scheduling needs two kinds of providers:
282
+
283
+ - **CalendarProvider** — reads busy intervals + writes events.
284
+ - **VideoProvider** — creates meeting rooms when a booking is confirmed.
285
+
286
+ Built-ins: Google Calendar, Office 365, Zoom, built-in video (Daily.co), Google
287
+ Meet (piggy-backs on Google Calendar).
288
+
289
+ ## CalendarProvider
290
+
291
+ ```ts
292
+ import { registerCalendarProvider } from "@agent-native/scheduling/server/providers";
293
+
294
+ registerCalendarProvider({
295
+ kind: "my_calendar",
296
+ label: "My Calendar",
297
+ async startOAuth({ redirectUri, state }) {
298
+ /* return { authUrl } */
299
+ },
300
+ async completeOAuth({ code, credentialId, userEmail, redirectUri }) {
301
+ /* exchange code, persist tokens, return externalEmail + calendars */
302
+ },
303
+ async listCalendars({ credentialId }) {
304
+ /* ... */
305
+ },
306
+ async getBusy({ credentialId, calendarExternalIds, start, end }) {
307
+ /* ... */
308
+ },
309
+ async createEvent({
310
+ credentialId,
311
+ calendarExternalId,
312
+ booking,
313
+ includeConference,
314
+ }) {
315
+ /* ... */
316
+ },
317
+ async updateEvent({ credentialId, externalId, booking }) {
318
+ /* ... */
319
+ },
320
+ async deleteEvent({ credentialId, externalId }) {
321
+ /* ... */
322
+ },
323
+ });
324
+ ```
325
+
326
+ All methods receive a `credentialId` — use it to look up the OAuth token via
327
+ your token store. The package's `setSchedulingContext()` doesn't touch
328
+ tokens; consumers typically use core's `oauth_tokens` and pass a
329
+ `getAccessToken(credentialId)` callback.
330
+
331
+ ## VideoProvider
332
+
333
+ ```ts
334
+ registerVideoProvider({
335
+ kind: "my_video",
336
+ label: "My Video",
337
+ async createMeeting({ credentialId, booking }) {
338
+ return { meetingUrl, meetingId, meetingPassword? };
339
+ },
340
+ async deleteMeeting?({ credentialId, meetingId }) { /* ... */ },
341
+ });
342
+ ```
343
+
344
+ Video providers are invoked by the booking service when a booking's location
345
+ is `builtin-video`, `zoom`, `google-meet`, or `teams`. Meeting URLs land in
346
+ `booking_references`.
347
+
348
+
349
+ ---
350
+ ## schema.md
351
+
352
+ # Schema reference
353
+
354
+ All tables use dialect-agnostic helpers from `@agent-native/core/db/schema`
355
+ and compose with `ownableColumns()` + `createSharesTable()` for framework-
356
+ wide sharing.
357
+
358
+ ## event_types
359
+
360
+ The primary bookable resource. Duration, location options, custom fields,
361
+ buffers, limits, period (rolling/range/unlimited), scheduling type
362
+ (personal/collective/round-robin/managed), optional team assignment,
363
+ hashed-link support.
364
+
365
+ ## event_type_hosts
366
+
367
+ Join between event types and users for collective / round-robin. Each host
368
+ has `isFixed`, `weight`, `priority`, optional per-host `scheduleId` override.
369
+
370
+ ## hashed_links
371
+
372
+ Private booking links: `/d/:hash/:slug`. Optional `expiresAt` and
373
+ `isSingleUse`.
374
+
375
+ ## event_type_slug_redirects
376
+
377
+ Rename history so old URLs keep working.
378
+
379
+ ## schedules / schedule_availability / date_overrides
380
+
381
+ Named availability presets. `schedules` is the header (name, timezone,
382
+ isDefault). `schedule_availability` rows are one weekly interval per day.
383
+ `date_overrides` replaces the weekly rule for a specific date (empty =
384
+ fully blocked).
385
+
386
+ ## travel_schedules / out_of_office_entries
387
+
388
+ Per-user timezone overrides for trips; OOO windows that block bookings and
389
+ optionally redirect.
390
+
391
+ ## bookings / booking_attendees / booking_references / booking_seats /
392
+
393
+ ## booking_notes
394
+
395
+ Bookings are the materialized appointments. Attendees are N per booking.
396
+ References are external IDs (Google event id, Zoom meeting id). Seats are
397
+ reservation tokens for seated events. Notes are host-only.
398
+
399
+ ## teams / team_members
400
+
401
+ Teams group users. `team_members.role` ∈ owner|admin|member.
402
+
403
+ ## scheduling_credentials / selected_calendars / destination_calendars
404
+
405
+ `scheduling_credentials` is a view over OAuth tokens (with display metadata
406
+ and `invalid` flag). Selected calendars are read for busy-time. Destination
407
+ calendar is where new events get written.
408
+
409
+ ## calendar_cache
410
+
411
+ Short-TTL cache of busy intervals. Busted on booking write.
412
+
413
+ ## workflows / workflow_steps / scheduled_reminders
414
+
415
+ Trigger-based automations. `workflows` is the rule; `workflow_steps` are
416
+ ordered actions; `scheduled_reminders` are materialized sends waiting to
417
+ fire (drained by a recurring job).
418
+
419
+ ## webhooks / webhook_deliveries / api_keys
420
+
421
+ Developer-facing surface: outgoing webhooks with HMAC-signed payloads, and
422
+ API keys for programmatic access.
423
+
424
+ ## routing_forms / routing_form_responses
425
+
426
+ ChiliPiper-style routing forms. Fields + rules → either an event type,
427
+ external URL, or custom message.
428
+
429
+ ## verified_emails / verified_numbers
430
+
431
+ Verified sender addresses / numbers used by workflows.
432
+
433
+ ## Shares tables
434
+
435
+ For every ownable resource: `event_type_shares`, `schedule_shares`,
436
+ `team_shares`, `workflow_shares`, `routing_form_shares`, `booking_shares`.
437
+ Use `share-resource` / `set-resource-visibility` framework actions.
438
+
439
+
440
+ ---
441
+ ## skills/availability/SKILL.md
442
+
443
+ ---
444
+ name: availability
445
+ description: How schedules, weekly rules, date overrides, travel schedules, and out-of-office entries combine to determine when someone is bookable.
446
+ ---
447
+
448
+ # Availability
449
+
450
+ ## Schedule
451
+
452
+ A named set of rules (e.g. "Working Hours"). Each user has ≥1 schedule and
453
+ marks one as `isDefault`. Event types either use the user's default or
454
+ reference a specific schedule.
455
+
456
+ Timezone is set on the schedule, not the user — lets you have a "Europe
457
+ hours" schedule and a "US hours" schedule for the same person.
458
+
459
+ ## Weekly availability
460
+
461
+ Rows in `schedule_availability`: (day 0-6, startTime "HH:MM", endTime
462
+ "HH:MM"). You can have multiple intervals per day — e.g. Mon 9-12 and 1-5.
463
+
464
+ ## Date overrides
465
+
466
+ Rows in `date_overrides`: (date "YYYY-MM-DD", intervals JSON).
467
+ - `intervals: []` → day fully blocked.
468
+ - `intervals: [{start, end}]` → only those times available on that date.
469
+
470
+ ## Travel schedules
471
+
472
+ `travel_schedules` overrides the user's default timezone for a date range.
473
+
474
+ ## Out of office
475
+
476
+ `out_of_office_entries` blocks bookings across a range, optionally with a
477
+ redirect to another team member.
478
+
479
+ ## Common tasks
480
+
481
+ | User request | Action |
482
+ |---|---|
483
+ | "I'm unavailable next Friday" | `add-date-override --scheduleId <id> --date 2026-04-10 --intervals []` |
484
+ | "I take lunch 12-1 weekdays" | `update-schedule --weeklyAvailability [...9-12, 13-17...]` |
485
+ | "Create evenings schedule" | `create-schedule --name Evenings --weeklyAvailability [...]` |
486
+ | "Going to Tokyo next week" | Insert a `travel_schedules` row (no dedicated action yet) |
487
+
488
+
489
+ ---
490
+ ## skills/booker/SKILL.md
491
+
492
+ ---
493
+ name: booker
494
+ description: Public booking flow — the state machine, animations, and URL/app-state sync.
495
+ ---
496
+
497
+ # Booker
498
+
499
+ ## Stages
500
+
501
+ 1. **pick-date** — month grid shows days with availability
502
+ 2. **pick-slot** — available slots on the selected day
503
+ 3. **fill-form** — attendee form (name, email, custom fields)
504
+ 4. **success** — confirmation with add-to-calendar buttons
505
+
506
+ Plus **reschedule** mode — prefilled from existing booking uid.
507
+
508
+ ## Animations
509
+
510
+ Use motion (`motion/react`) `AnimatePresence` with `fadeInLeft` variants. The outer
511
+ container animates its width across stages: narrow (calendar only) → wider
512
+ (calendar + slots) → widest (form).
513
+
514
+ ## Timezone + 12/24h
515
+
516
+ - Detect browser timezone at mount; let user override via dropdown.
517
+ - Persist choice to localStorage key `scheduling.timezone`.
518
+ - 12/24h toggle near slot column; persist to user settings.
519
+
520
+ ## URL + application-state sync
521
+
522
+ Selected date, slot, timezone, and duration are mirrored to URL query
523
+ params AND `application_state.booker-state` so:
524
+ - Page refresh preserves selection.
525
+ - Agent can read the user's current pick.
526
+
527
+ ## Copy-link affordance
528
+
529
+ Every event-type row has a "copy link" button. On click, write to clipboard
530
+ and toast "Copied!" with Sonner. Works on mobile Safari too.
531
+
532
+ ## Accessibility
533
+
534
+ - Month grid is ARIA `grid` + `gridcell` with arrow-key nav.
535
+ - Slot buttons are keyboard-focusable, with `aria-pressed`.
536
+ - Focus returns to trigger on modal close.
537
+ - Toast content announced via `aria-live=polite`.
538
+
539
+ ## Mobile
540
+
541
+ `< 768px`: stack vertically. Calendar full-width, slot list below, form
542
+ slides in as full-screen sheet.
543
+
544
+
545
+ ---
546
+ ## skills/bookings/SKILL.md
547
+
548
+ ---
549
+ name: bookings
550
+ description: Booking lifecycle — pending, confirmed, rescheduled, cancelled — plus attendees, references, no-shows, and reminders.
551
+ ---
552
+
553
+ # Bookings
554
+
555
+ ## Lifecycle
556
+
557
+ - **pending** — requires-confirmation event types start here
558
+ - **confirmed** — normal state
559
+ - **rescheduled** — the old booking after a reschedule (the new one is
560
+ confirmed; `from_reschedule` links them)
561
+ - **cancelled** — either party cancelled
562
+ - **rejected** — pending was declined
563
+
564
+ ## Reschedule vs cancel+rebook
565
+
566
+ The `reschedule-booking` action creates a new booking with a link back to
567
+ the old via `fromReschedule`. iCalUID is preserved across the reschedule
568
+ chain (RFC 5545), and `iCalSequence` is bumped.
569
+
570
+ ## No-show
571
+
572
+ `mark-no-show` sets `noShow: true` on an attendee. Round-robin calibration
573
+ uses this to penalize hosts whose attendees no-show frequently.
574
+
575
+ ## Cancel / reschedule tokens
576
+
577
+ Every booking has a `cancelToken` and `rescheduleToken` used in public
578
+ magic links sent to attendees. These let them manage the booking without
579
+ logging in.
580
+
581
+ ## References
582
+
583
+ External system IDs: Google Calendar event id, Zoom meeting id, Daily.co
584
+ room name. Stored in `booking_references`, used during cancel/reschedule to
585
+ propagate changes back to the source system.
586
+
587
+ ## ICS
588
+
589
+ `/booking/:uid.ics` returns the RFC 5545 calendar file. Used for
590
+ confirmation-email attachments and "Add to calendar" buttons.
591
+
592
+
593
+ ---
594
+ ## skills/embeds/SKILL.md
595
+
596
+ ---
597
+ name: embeds
598
+ description: Inline, popup, and floating-button embeds — snippet generation and theming.
599
+ ---
600
+
601
+ # Embeds
602
+
603
+ ## Modes
604
+
605
+ - **inline** — iframe embedded in the page
606
+ - **popup** — trigger opens modal overlay with iframe
607
+ - **element-click / floating-button** — fixed-position trigger anywhere on
608
+ the page
609
+
610
+ ## URL
611
+
612
+ Embed page: `/:user/:slug/embed` — same Booker, no chrome, theme honored
613
+ via query params.
614
+
615
+ ## Snippet
616
+
617
+ ```html
618
+ <script src="https://<host>/embed.js" async></script>
619
+ <div id="cal-inline-embed"></div>
620
+ <script>
621
+ Cal("init", { origin: "https://<host>" });
622
+ Cal("inline", {
623
+ elementOrSelector: "#cal-inline-embed",
624
+ calLink: "my-user/intro",
625
+ config: { theme: "light" }
626
+ });
627
+ </script>
628
+ ```
629
+
630
+ ## Theming
631
+
632
+ Query params on the embed URL:
633
+ - `theme=light|dark`
634
+ - `primaryColor=<hex>`
635
+ - `locale=en|es|...`
636
+ - `timeZone=America/Los_Angeles`
637
+
638
+ These override the event type's defaults for the embedded session only.
639
+
640
+ ## Message passing
641
+
642
+ The iframe posts messages to the parent on lifecycle events:
643
+ `__cal.init`, `__cal.booking-successful`, `__cal.booking-cancelled`,
644
+ `__cal.booking-rescheduled`.
645
+
646
+
647
+ ---
648
+ ## skills/event-types/SKILL.md
649
+
650
+ ---
651
+ name: event-types
652
+ description: How event types work — fields, scheduling types, tabs in the editor, and the full set of configurable options.
653
+ ---
654
+
655
+ # Event types
656
+
657
+ ## Editor tabs
658
+ - **Setup** — title, slug, duration(s), description, default location
659
+ - **Availability** — pick a schedule or override per-event-type
660
+ - **Limits** — buffers, min notice, booking window (rolling/range), caps
661
+ (perDay/perWeek/perMonth/perYear), slot interval
662
+ - **Advanced** — event name template, lock timezone, require confirmation,
663
+ disable guests, redirect URL, private hashed links, seats
664
+ - **Apps** — connect per-event location types (Zoom, Meet, etc.)
665
+ - **Workflows** — attach workflows to run on booking lifecycle events
666
+
667
+ ## Scheduling types
668
+
669
+ | Type | Meaning |
670
+ |---|---|
671
+ | `personal` | Owned by a user, only they host |
672
+ | `collective` | Team event; all selected hosts must be free |
673
+ | `round-robin` | Team event; assign to one host by rotation |
674
+ | `managed` | Parent event pushed to child event types across members |
675
+
676
+ ## Location kinds
677
+
678
+ `builtin-video`, `zoom`, `google-meet`, `teams`, `phone`, `in-person`,
679
+ `custom-link`, `attendee-phone`, `organizer-phone`, `attendee-choice`.
680
+
681
+ ## Custom fields
682
+
683
+ Text, textarea, number, email, phone, select, multiselect, boolean, radio.
684
+ Stored on the event type; responses stored on the booking.
685
+
686
+ ## Hashed links
687
+
688
+ Private booking URLs at `/d/:hash/:slug`. Create via `add-private-link`,
689
+ optionally with `expiresAt` and `isSingleUse`.
690
+
691
+
692
+ ---
693
+ ## skills/integrations/SKILL.md
694
+
695
+ ---
696
+ name: integrations
697
+ description: Calendar + video provider integrations — Google Calendar, Office 365, Zoom, built-in video, Google Meet — and how to write new ones.
698
+ ---
699
+
700
+ # Integrations
701
+
702
+ ## Calendar providers
703
+
704
+ - **google_calendar** — OAuth; read freeBusy + write events; optionally
705
+ create Google Meet conference via `includeConference=true`.
706
+ - **office365_calendar** — Microsoft Graph; read freeBusy + write events.
707
+ - **caldav** (planned) — generic CalDAV for Apple iCloud, Fastmail, etc.
708
+
709
+ ## Video providers
710
+
711
+ - **builtin_video** — Daily.co-backed; zero OAuth; server-to-server API key.
712
+ - **zoom_video** — OAuth; create meetings via Zoom REST API.
713
+ - **google_meet** — piggy-backs on Google Calendar credential.
714
+ - **teams_video** (planned) — Microsoft Teams.
715
+
716
+ ## Credential lifecycle
717
+
718
+ 1. User clicks "Connect" → `connect-calendar` returns `authUrl` + `state`
719
+ 2. Redirect to provider → consent → provider redirects to our callback
720
+ 3. Server exchanges code → writes `scheduling_credentials` row +
721
+ core `oauth_tokens` entry
722
+ 4. We fetch calendar list, let user pick "checked" + "destination"
723
+ 5. Token expires → refresh flow runs silently; on failure, set
724
+ `invalid: true` and show re-connect banner
725
+
726
+ ## Busy-time aggregation
727
+
728
+ `aggregateBusy({userEmail, rangeStart, rangeEnd})` merges:
729
+ - Confirmed bookings hosted by the user
730
+ - External busy from each `selected_calendars` entry via the provider
731
+
732
+ Cached in `calendar_cache` (short TTL, default 5 min). Busted on any
733
+ booking write for that host.
734
+
735
+ ## Writing a new provider
736
+
737
+ See `docs/providers.md` for the full interface.
738
+
739
+ ## Common tasks
740
+
741
+ | User | Action |
742
+ |---|---|
743
+ | "Connect Google Calendar" | `connect-calendar --kind google_calendar --redirectUri ...` → redirect to returned `authUrl` |
744
+ | "Stop checking my vacation calendar" | `toggle-selected-calendar --include false` for that externalId |
745
+ | "Default to Zoom for new bookings" | `set-default-conferencing-app --credentialId <zoom-cred>` |
746
+ | "Refresh calendar cache" | `refresh-busy-times` |
747
+
748
+
749
+ ---
750
+ ## skills/routing-forms/SKILL.md
751
+
752
+ ---
753
+ name: routing-forms
754
+ description: ChiliPiper-style pre-booking forms that route prospects to the right event type based on their answers.
755
+ ---
756
+
757
+ # Routing forms
758
+
759
+ ## Shape
760
+
761
+ - **Fields** — text, email, phone, number, select, multi
762
+ - **Rules** — ordered list of `{conditions, action}`
763
+ - **Fallback** — action taken when no rule matches
764
+
765
+ ## Rule conditions
766
+
767
+ `conditions: [{fieldId, op, value}, …]` — all ANDed together. Ops:
768
+ - `equals`, `not-equals`, `contains`, `starts-with`, `in` (value is array)
769
+
770
+ ## Rule actions
771
+
772
+ - `{kind: "event-type", eventTypeId, teamId?}` → redirect to Booker
773
+ - `{kind: "external-url", url}` → redirect off-site
774
+ - `{kind: "custom-message", message}` → render message, no booking
775
+
776
+ ## Public URL
777
+
778
+ `/forms/:formId` renders the form. On submit:
779
+ 1. Walk rules in order; first match wins.
780
+ 2. If none match, use `fallback`.
781
+ 3. Record the response in `routing_form_responses` with `matchedRuleId`.
782
+ 4. If the action is `event-type`, redirect to Booker with prefilled
783
+ `name` / `email` / custom-field values from the form answers.
784
+
785
+ ## Common tasks
786
+
787
+ | User | Action |
788
+ |---|---|
789
+ | "Route enterprise prospects to Bob" | `create-routing-form` with a rule matching company size → Bob's event type |
790
+ | "See submissions" | `list-routing-form-responses --formId <id>` |
791
+
792
+
793
+ ---
794
+ ## skills/scheduling-basics/SKILL.md
795
+
796
+ ---
797
+ name: scheduling-basics
798
+ description: Core concepts of the scheduling package — event types, schedules, bookings, hosts, teams, and how they compose.
799
+ ---
800
+
801
+ # Scheduling basics
802
+
803
+ The mental model:
804
+
805
+ - **Event Type** — a definition of "a bookable thing" (30-minute intro call,
806
+ 45-minute demo). Lives at `/:user/:slug` or `/team/:teamSlug/:slug`.
807
+ - **Schedule** — a named set of availability rules ("Working Hours",
808
+ "Evenings"). Weekly intervals plus date-specific overrides. Each user
809
+ has a default schedule; event types can pick any.
810
+ - **Booking** — the materialized appointment. Has attendees, references to
811
+ external systems (Google Calendar event, Zoom meeting), and a stable
812
+ iCalUID across reschedules.
813
+ - **Host** — a user assigned to an event type. Hosts have weights and
814
+ priorities for round-robin.
815
+ - **Team** — a group of users who can co-host event types.
816
+ - **Location** — where the meeting happens. Video (built-in, Zoom, Meet,
817
+ Teams), phone, in-person, or custom link.
818
+
819
+ ## Workflows and routing forms
820
+
821
+ - **Workflow** — trigger + ordered steps. "Email attendee 1h before event."
822
+ - **Routing Form** — pre-booking form with rules that route to the right
823
+ event type based on answers. Like ChiliPiper.
824
+
825
+ ## Public URLs
826
+
827
+ - `/:user` — user profile with event type list
828
+ - `/:user/:slug` — Booker for a personal event type
829
+ - `/:user/:slug/embed` — chromeless for iframe embedding
830
+ - `/team/:teamSlug` — team profile
831
+ - `/team/:teamSlug/:slug` — Booker for team event type (round-robin or collective)
832
+ - `/d/:hash/:slug` — private hashed-link Booker
833
+ - `/booking/:uid` — booking detail / manage
834
+ - `/reschedule/:uid` — reschedule Booker
835
+ - `/forms/:formId` — public routing form
836
+
837
+ ## Common tasks
838
+
839
+ | User request | Action(s) |
840
+ |---|---|
841
+ | "Create a 30-minute intro meeting" | `create-event-type --title "Intro" --slug intro --length 30` |
842
+ | "What's my availability tomorrow?" | `check-availability --slug <slug> --from ... --to ...` |
843
+ | "Cancel my 3pm with Alex" | `list-bookings --status upcoming`, then `cancel-booking --uid ...` |
844
+ | "Block next Friday" | `add-date-override --scheduleId <id> --date 2026-04-10 --intervals []` |
845
+ | "Connect Google Calendar" | `connect-calendar --kind google_calendar --redirectUri ...` |
846
+ | "Make a team event rotating between Alice and Bob" | `create-event-type --schedulingType round-robin --teamId ...`, then `set-event-type-hosts` |
847
+
848
+
849
+ ---
850
+ ## skills/slot-engine/SKILL.md
851
+
852
+ ---
853
+ name: slot-engine
854
+ description: The pure `computeAvailableSlots` function — inputs, outputs, invariants, and debugging guide.
855
+ ---
856
+
857
+ # Slot engine
858
+
859
+ `import { computeAvailableSlots } from "@agent-native/scheduling/core"`
860
+
861
+ ## Inputs
862
+ - Event type config (duration, buffers, minimum notice, period, limits,
863
+ slot interval)
864
+ - Schedule (timezone + weekly availability + date overrides)
865
+ - Busy intervals (UTC, aggregated from external calendars + existing
866
+ bookings)
867
+ - Booking counts by bucket (day/week/month/year) for limit enforcement
868
+ - Time range to compute over
869
+ - Optional seats-per-slot + seats-taken map
870
+ - Viewer timezone (for limit bucketing, if it differs from the schedule)
871
+
872
+ ## Output
873
+ - Array of `Slot { start: ISO, end: ISO, available: boolean, seatsRemaining?, hostEmail? }`
874
+
875
+ ## Invariants
876
+
877
+ The function guarantees, in order:
878
+
879
+ 1. No slot falls in the past (`now + minimumBookingNotice` is the floor).
880
+ 2. No slot overlaps a busy interval (with buffers applied).
881
+ 3. No slot falls outside the schedule's available intervals for that day.
882
+ 4. No slot exceeds a booking limit.
883
+ 5. No slot falls outside the event's period (rolling/range).
884
+ 6. DST-safe: we convert to UTC using the schedule's timezone before doing
885
+ any interval arithmetic.
886
+
887
+ ## Debugging
888
+
889
+ If a slot is unexpectedly missing:
890
+ 1. Check the schedule's weekly availability for that day-of-week in the
891
+ schedule's timezone (not UTC — weekends can shift across the date line).
892
+ 2. Check date overrides for that local date (empty intervals = fully
893
+ blocked).
894
+ 3. Check merged busy intervals for overlap, *including* the before/after
895
+ buffer expansion.
896
+ 4. Check booking limits: a single existing booking can close a day.
897
+ 5. Check period caps: rolling periods restrict how far in the future slots
898
+ appear.
899
+
900
+ If a slot is unexpectedly present:
901
+ 1. Check that `now` is being passed correctly (defaults to `new Date()`).
902
+ 2. Check that busy intervals from providers are in UTC.
903
+ 3. Confirm slot interval matches what you expect (default = duration).
904
+
905
+
906
+ ---
907
+ ## skills/team-scheduling/SKILL.md
908
+
909
+ ---
910
+ name: team-scheduling
911
+ description: Team event types, round-robin assignment, collective bookings, host weights, and no-show calibration.
912
+ ---
913
+
914
+ # Team scheduling
915
+
916
+ ## Scheduling types
917
+
918
+ - **Collective** — all selected team members must be free; booking lists
919
+ all as organizers.
920
+ - **Round-robin** — one team member is chosen per booking by a rotation
921
+ strategy.
922
+ - **Managed** — parent event type pushed to member-level children (advanced;
923
+ stub in v1).
924
+
925
+ ## Round-robin strategies
926
+
927
+ | Strategy | How |
928
+ |---|---|
929
+ | `lowest-recent-bookings` | (Default) host with fewest bookings in past 30d wins; tiebreak by priority, then weight, then email |
930
+ | `weighted` | Weighted random pick; deterministic given the same seed |
931
+ | `calibrated` | Weighted with no-show penalty (hosts with high no-show rates get fewer) |
932
+
933
+ ## Hosts
934
+
935
+ Rows in `event_type_hosts`: `{userEmail, isFixed, weight, priority,
936
+ scheduleId?}`. Fixed hosts always attend (like collective within a
937
+ round-robin set). Weight scales the relative share. Priority (lower =
938
+ higher) breaks ties.
939
+
940
+ ## Host schedule override
941
+
942
+ Normally each host's default schedule is used for their slots. A
943
+ per-event-type-per-host override is possible via
944
+ `set-host-availability-override`.
945
+
946
+ ## Out-of-office
947
+
948
+ OOO hosts are auto-excluded from round-robin for the duration of the OOO
949
+ window. Bookings can redirect to the OOO's `redirectUserEmail`.
950
+
951
+ ## Host groups
952
+
953
+ `event_type_host_groups` lets you split hosts into groups — useful for
954
+ "collective within each group, round-robin across groups".
955
+
956
+ ## Common tasks
957
+
958
+ | User | Action |
959
+ |---|---|
960
+ | "Make a sales demo that rotates Alice / Bob / Carol" | `create-event-type --schedulingType round-robin --teamId ...`, then `set-event-type-hosts` |
961
+ | "Add Dave as a fixed host" | `set-event-type-hosts` with Dave as `isFixed: true` |
962
+ | "Stop routing to Alice while she's on PTO" | Insert an `out_of_office_entries` row for Alice's range |
963
+
964
+
965
+ ---
966
+ ## skills/workflows/SKILL.md
967
+
968
+ ---
969
+ name: workflows
970
+ description: Trigger-based automations — reminders, follow-ups, webhooks — across the booking lifecycle.
971
+ ---
972
+
973
+ # Workflows
974
+
975
+ ## Triggers
976
+
977
+ - `new-booking` — fires when a booking is created
978
+ - `before-event` — offset minutes BEFORE `startTime`
979
+ - `after-event` — offset minutes AFTER `endTime`
980
+ - `reschedule` — booking rescheduled
981
+ - `cancellation` — booking cancelled
982
+ - `no-show` — a host marked an attendee as no-show
983
+
984
+ ## Steps
985
+
986
+ | Action | Sends |
987
+ |---|---|
988
+ | `email-host` | Email to the organizer |
989
+ | `email-attendee` | Email to the attendee |
990
+ | `email-address` | Email to a fixed address (e.g. ops@example.com) |
991
+ | `sms-attendee` | SMS to the attendee's phone (requires attendee `phone` custom field) |
992
+ | `sms-host` | SMS to the host |
993
+ | `sms-number` | SMS to a fixed number |
994
+ | `webhook` | HTTP POST to a URL |
995
+
996
+ Step `offsetMinutes` is relative to the trigger time. For `before-event`
997
+ use positive values (we apply them with a minus sign internally).
998
+
999
+ ## Template variables
1000
+
1001
+ In email subjects / bodies and SMS bodies:
1002
+ - `{eventName}` — event type title
1003
+ - `{attendeeName}`, `{attendeeEmail}` — first attendee
1004
+ - `{hostName}`, `{hostEmail}` — organizer
1005
+ - `{startTime}`, `{endTime}` — formatted in host's timezone
1006
+ - `{location}` — meeting URL or address
1007
+ - `{cancelUrl}`, `{rescheduleUrl}` — public magic links
1008
+
1009
+ ## Firing
1010
+
1011
+ When a booking fires a trigger, the hook dispatcher materializes rows in
1012
+ `scheduled_reminders`. A recurring job processes due rows and fires the
1013
+ actual emails/SMS/webhooks. Framework-side recurring jobs handle the
1014
+ polling.
1015
+
1016
+ ## Common tasks
1017
+
1018
+ | User | Action |
1019
+ |---|---|
1020
+ | "Email attendees 24h before the meeting" | `create-workflow --trigger before-event --steps '[{action: email-attendee, offsetMinutes: 1440}]'` |
1021
+ | "Text me when someone books" | `create-workflow --trigger new-booking --steps '[{action: sms-host, ...}]'` |
1022
+ | "Stop all reminders on an event type" | `toggle-workflow` to disable |