@lssm/lib.communication-spec 3.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 (309) hide show
  1. package/README.md +201 -0
  2. package/dist/browser/capabilities/comms-ai.capabilities.js +1 -0
  3. package/dist/browser/capabilities/communication-os.capability-ids.js +1 -0
  4. package/dist/browser/capabilities/ecosystem-messaging.capabilities.js +1 -0
  5. package/dist/browser/capabilities/index.js +1 -0
  6. package/dist/browser/commands/comms-ai.commands.js +1 -0
  7. package/dist/browser/commands/index.js +1 -0
  8. package/dist/browser/contracts/agent-communication.js +1 -0
  9. package/dist/browser/contracts/agent-lifecycle-projection.js +1 -0
  10. package/dist/browser/contracts/agent-surface-control.js +1 -0
  11. package/dist/browser/contracts/ai-assistance.operations.js +1 -0
  12. package/dist/browser/contracts/artifact-digest.js +1 -0
  13. package/dist/browser/contracts/canonical-agent-conversation.js +1 -0
  14. package/dist/browser/contracts/channel-preferences.js +1 -0
  15. package/dist/browser/contracts/channel-routing.js +1 -0
  16. package/dist/browser/contracts/collaboration.operations.js +1 -0
  17. package/dist/browser/contracts/customer-live-chat-grant.operations.js +1 -0
  18. package/dist/browser/contracts/delivery-eligibility.js +1 -0
  19. package/dist/browser/contracts/delivery-fallback-eligibility-validation.js +1 -0
  20. package/dist/browser/contracts/delivery-fallback-validation.js +1 -0
  21. package/dist/browser/contracts/delivery-fallback.js +1 -0
  22. package/dist/browser/contracts/delivery-intent-validation.js +1 -0
  23. package/dist/browser/contracts/delivery-intent.js +1 -0
  24. package/dist/browser/contracts/delivery-progress.js +1 -0
  25. package/dist/browser/contracts/discord-community-intelligence.operations.js +1 -0
  26. package/dist/browser/contracts/discord-community.events.js +1 -0
  27. package/dist/browser/contracts/discord-community.models.js +1 -0
  28. package/dist/browser/contracts/discord-community.operations.js +1 -0
  29. package/dist/browser/contracts/ecosystem-attachment.operations.js +1 -0
  30. package/dist/browser/contracts/ecosystem-auth.operations.js +1 -0
  31. package/dist/browser/contracts/ecosystem-binding.operations.js +1 -0
  32. package/dist/browser/contracts/ecosystem-connection-subscription.events.js +1 -0
  33. package/dist/browser/contracts/ecosystem-governed-work-v2.operations.js +1 -0
  34. package/dist/browser/contracts/ecosystem-governed-work.operations.js +1 -0
  35. package/dist/browser/contracts/ecosystem-identity-v3.operations.js +1 -0
  36. package/dist/browser/contracts/ecosystem-identity.operations.js +1 -0
  37. package/dist/browser/contracts/ecosystem-message.operations.js +1 -0
  38. package/dist/browser/contracts/ecosystem-messaging.dtos.js +0 -0
  39. package/dist/browser/contracts/ecosystem-messaging.events.js +1 -0
  40. package/dist/browser/contracts/ecosystem-messaging.models.js +1 -0
  41. package/dist/browser/contracts/ecosystem-navigation-v3.operations.js +1 -0
  42. package/dist/browser/contracts/ecosystem-webhook.operations.js +1 -0
  43. package/dist/browser/contracts/ecosystem-workspace.operations.js +1 -0
  44. package/dist/browser/contracts/enums.js +1 -0
  45. package/dist/browser/contracts/erasure.operations.js +1 -0
  46. package/dist/browser/contracts/events.js +1 -0
  47. package/dist/browser/contracts/index.js +1 -0
  48. package/dist/browser/contracts/ingestion.js +1 -0
  49. package/dist/browser/contracts/ingress-admission-policy.js +1 -0
  50. package/dist/browser/contracts/ingress-admission.js +1 -0
  51. package/dist/browser/contracts/models.js +1 -0
  52. package/dist/browser/contracts/operations.js +1 -0
  53. package/dist/browser/contracts/persistence.js +1 -0
  54. package/dist/browser/contracts/preference-resolution.js +1 -0
  55. package/dist/browser/contracts/query.operations.js +1 -0
  56. package/dist/browser/contracts/sequence-intent.js +1 -0
  57. package/dist/browser/contracts/sovereignty.js +1 -0
  58. package/dist/browser/contracts/support-internal-note.operations.js +1 -0
  59. package/dist/browser/contracts/thread-link-kind.js +1 -0
  60. package/dist/browser/contracts/thread-message.operations.js +1 -0
  61. package/dist/browser/events/index.js +1 -0
  62. package/dist/browser/fixtures/agent-omnichannel-primitives.js +1 -0
  63. package/dist/browser/fixtures/agent-omnichannel.js +1 -0
  64. package/dist/browser/fixtures/gtm-learning-loop-neutral.parts.js +1 -0
  65. package/dist/browser/fixtures/index.js +1 -0
  66. package/dist/browser/fixtures/normalized-ingestion.js +1 -0
  67. package/dist/browser/index.js +1 -0
  68. package/dist/browser/queries/index.js +1 -0
  69. package/dist/browser/types/domain-command.js +0 -0
  70. package/dist/browser/types/index.js +1 -0
  71. package/dist/browser/validation/domain-command.js +1 -0
  72. package/dist/browser/validation/index.js +1 -0
  73. package/dist/capabilities/comms-ai.capabilities.d.ts +72 -0
  74. package/dist/capabilities/comms-ai.capabilities.js +2 -0
  75. package/dist/capabilities/communication-os-capability-boundary.test.d.ts +1 -0
  76. package/dist/capabilities/communication-os.capability-ids.d.ts +39 -0
  77. package/dist/capabilities/communication-os.capability-ids.js +2 -0
  78. package/dist/capabilities/communication-os.capability-ids.test.d.ts +1 -0
  79. package/dist/capabilities/ecosystem-messaging.capabilities.d.ts +9 -0
  80. package/dist/capabilities/ecosystem-messaging.capabilities.js +2 -0
  81. package/dist/capabilities/index.d.ts +4 -0
  82. package/dist/capabilities/index.js +2 -0
  83. package/dist/commands/comms-ai.commands.d.ts +272 -0
  84. package/dist/commands/comms-ai.commands.js +2 -0
  85. package/dist/commands/index.d.ts +10 -0
  86. package/dist/commands/index.js +2 -0
  87. package/dist/contracts/agent-communication.d.ts +108 -0
  88. package/dist/contracts/agent-communication.js +2 -0
  89. package/dist/contracts/agent-communication.test.d.ts +1 -0
  90. package/dist/contracts/agent-lifecycle-projection.d.ts +98 -0
  91. package/dist/contracts/agent-lifecycle-projection.js +2 -0
  92. package/dist/contracts/agent-lifecycle-projection.test.d.ts +1 -0
  93. package/dist/contracts/agent-surface-control.d.ts +210 -0
  94. package/dist/contracts/agent-surface-control.js +2 -0
  95. package/dist/contracts/agent-surface-control.test.d.ts +1 -0
  96. package/dist/contracts/ai-assistance.operations.d.ts +187 -0
  97. package/dist/contracts/ai-assistance.operations.js +2 -0
  98. package/dist/contracts/artifact-digest.d.ts +3 -0
  99. package/dist/contracts/artifact-digest.js +2 -0
  100. package/dist/contracts/canonical-agent-conversation.d.ts +46 -0
  101. package/dist/contracts/canonical-agent-conversation.js +2 -0
  102. package/dist/contracts/canonical-agent-conversation.test.d.ts +1 -0
  103. package/dist/contracts/channel-preferences.d.ts +115 -0
  104. package/dist/contracts/channel-preferences.js +2 -0
  105. package/dist/contracts/channel-routing.d.ts +58 -0
  106. package/dist/contracts/channel-routing.js +2 -0
  107. package/dist/contracts/channel-routing.test.d.ts +1 -0
  108. package/dist/contracts/collaboration.operations.d.ts +315 -0
  109. package/dist/contracts/collaboration.operations.js +2 -0
  110. package/dist/contracts/customer-live-chat-grant.operations.d.ts +132 -0
  111. package/dist/contracts/customer-live-chat-grant.operations.js +2 -0
  112. package/dist/contracts/delivery-contracts.test.d.ts +1 -0
  113. package/dist/contracts/delivery-eligibility.d.ts +126 -0
  114. package/dist/contracts/delivery-eligibility.js +2 -0
  115. package/dist/contracts/delivery-eligibility.test.d.ts +1 -0
  116. package/dist/contracts/delivery-fallback-eligibility-validation.d.ts +6 -0
  117. package/dist/contracts/delivery-fallback-eligibility-validation.js +2 -0
  118. package/dist/contracts/delivery-fallback-validation.d.ts +24 -0
  119. package/dist/contracts/delivery-fallback-validation.js +2 -0
  120. package/dist/contracts/delivery-fallback.d.ts +117 -0
  121. package/dist/contracts/delivery-fallback.js +2 -0
  122. package/dist/contracts/delivery-intent-validation.d.ts +13 -0
  123. package/dist/contracts/delivery-intent-validation.js +2 -0
  124. package/dist/contracts/delivery-intent.d.ts +137 -0
  125. package/dist/contracts/delivery-intent.js +2 -0
  126. package/dist/contracts/delivery-progress.d.ts +61 -0
  127. package/dist/contracts/delivery-progress.js +2 -0
  128. package/dist/contracts/discord-community-intelligence.operations.d.ts +405 -0
  129. package/dist/contracts/discord-community-intelligence.operations.js +2 -0
  130. package/dist/contracts/discord-community.events.d.ts +162 -0
  131. package/dist/contracts/discord-community.events.js +2 -0
  132. package/dist/contracts/discord-community.models.d.ts +167 -0
  133. package/dist/contracts/discord-community.models.js +2 -0
  134. package/dist/contracts/discord-community.operations.d.ts +663 -0
  135. package/dist/contracts/discord-community.operations.js +2 -0
  136. package/dist/contracts/discord-community.test.d.ts +1 -0
  137. package/dist/contracts/ecosystem-attachment.operations.d.ts +129 -0
  138. package/dist/contracts/ecosystem-attachment.operations.js +2 -0
  139. package/dist/contracts/ecosystem-auth.operations.d.ts +345 -0
  140. package/dist/contracts/ecosystem-auth.operations.js +2 -0
  141. package/dist/contracts/ecosystem-binding.operations.d.ts +231 -0
  142. package/dist/contracts/ecosystem-binding.operations.js +2 -0
  143. package/dist/contracts/ecosystem-connection-subscription.events.d.ts +332 -0
  144. package/dist/contracts/ecosystem-connection-subscription.events.js +2 -0
  145. package/dist/contracts/ecosystem-governed-work-v2.operations.d.ts +234 -0
  146. package/dist/contracts/ecosystem-governed-work-v2.operations.js +2 -0
  147. package/dist/contracts/ecosystem-governed-work.operations.d.ts +265 -0
  148. package/dist/contracts/ecosystem-governed-work.operations.js +2 -0
  149. package/dist/contracts/ecosystem-governed-work.operations.test.d.ts +1 -0
  150. package/dist/contracts/ecosystem-identity-v3.operations.d.ts +65 -0
  151. package/dist/contracts/ecosystem-identity-v3.operations.js +2 -0
  152. package/dist/contracts/ecosystem-identity.operations.d.ts +174 -0
  153. package/dist/contracts/ecosystem-identity.operations.js +2 -0
  154. package/dist/contracts/ecosystem-identity.operations.test.d.ts +1 -0
  155. package/dist/contracts/ecosystem-message.operations.d.ts +1092 -0
  156. package/dist/contracts/ecosystem-message.operations.js +2 -0
  157. package/dist/contracts/ecosystem-messaging.dtos.d.ts +68 -0
  158. package/dist/contracts/ecosystem-messaging.dtos.js +1 -0
  159. package/dist/contracts/ecosystem-messaging.dtos.test.d.ts +1 -0
  160. package/dist/contracts/ecosystem-messaging.events.d.ts +608 -0
  161. package/dist/contracts/ecosystem-messaging.events.js +2 -0
  162. package/dist/contracts/ecosystem-messaging.models.d.ts +386 -0
  163. package/dist/contracts/ecosystem-messaging.models.js +2 -0
  164. package/dist/contracts/ecosystem-messaging.test.d.ts +1 -0
  165. package/dist/contracts/ecosystem-navigation-v3.operations.d.ts +149 -0
  166. package/dist/contracts/ecosystem-navigation-v3.operations.js +2 -0
  167. package/dist/contracts/ecosystem-webhook.operations.d.ts +187 -0
  168. package/dist/contracts/ecosystem-webhook.operations.js +2 -0
  169. package/dist/contracts/ecosystem-workspace.operations.d.ts +590 -0
  170. package/dist/contracts/ecosystem-workspace.operations.js +2 -0
  171. package/dist/contracts/enums.d.ts +9 -0
  172. package/dist/contracts/enums.js +2 -0
  173. package/dist/contracts/erasure.operations.d.ts +114 -0
  174. package/dist/contracts/erasure.operations.js +2 -0
  175. package/dist/contracts/erasure.test.d.ts +1 -0
  176. package/dist/contracts/events.d.ts +174 -0
  177. package/dist/contracts/events.js +2 -0
  178. package/dist/contracts/index.d.ts +43 -0
  179. package/dist/contracts/index.js +2 -0
  180. package/dist/contracts/ingestion.d.ts +169 -0
  181. package/dist/contracts/ingestion.js +2 -0
  182. package/dist/contracts/ingress-admission-policy.d.ts +14 -0
  183. package/dist/contracts/ingress-admission-policy.js +2 -0
  184. package/dist/contracts/ingress-admission.d.ts +184 -0
  185. package/dist/contracts/ingress-admission.js +2 -0
  186. package/dist/contracts/ingress-admission.test.d.ts +1 -0
  187. package/dist/contracts/models.d.ts +851 -0
  188. package/dist/contracts/models.js +2 -0
  189. package/dist/contracts/operations.d.ts +5 -0
  190. package/dist/contracts/operations.js +2 -0
  191. package/dist/contracts/persistence.d.ts +353 -0
  192. package/dist/contracts/persistence.js +2 -0
  193. package/dist/contracts/persistence.test.d.ts +1 -0
  194. package/dist/contracts/preference-resolution.d.ts +154 -0
  195. package/dist/contracts/preference-resolution.js +2 -0
  196. package/dist/contracts/preference-resolution.test.d.ts +1 -0
  197. package/dist/contracts/query.operations.d.ts +600 -0
  198. package/dist/contracts/query.operations.js +2 -0
  199. package/dist/contracts/sequence-intent.d.ts +103 -0
  200. package/dist/contracts/sequence-intent.js +2 -0
  201. package/dist/contracts/sequence-intent.test.d.ts +1 -0
  202. package/dist/contracts/sovereignty.d.ts +164 -0
  203. package/dist/contracts/sovereignty.js +2 -0
  204. package/dist/contracts/support-internal-note.operations.d.ts +309 -0
  205. package/dist/contracts/support-internal-note.operations.js +2 -0
  206. package/dist/contracts/support-internal-note.operations.test.d.ts +1 -0
  207. package/dist/contracts/thread-link-kind.d.ts +20 -0
  208. package/dist/contracts/thread-link-kind.js +2 -0
  209. package/dist/contracts/thread-message.operations.d.ts +485 -0
  210. package/dist/contracts/thread-message.operations.js +2 -0
  211. package/dist/events/index.d.ts +4 -0
  212. package/dist/events/index.js +2 -0
  213. package/dist/fixtures/agent-omnichannel-primitives.d.ts +240 -0
  214. package/dist/fixtures/agent-omnichannel-primitives.js +2 -0
  215. package/dist/fixtures/agent-omnichannel.d.ts +682 -0
  216. package/dist/fixtures/agent-omnichannel.js +2 -0
  217. package/dist/fixtures/agent-omnichannel.test.d.ts +1 -0
  218. package/dist/fixtures/gtm-learning-loop-neutral.parts.d.ts +20 -0
  219. package/dist/fixtures/gtm-learning-loop-neutral.parts.js +2 -0
  220. package/dist/fixtures/index.d.ts +3 -0
  221. package/dist/fixtures/index.js +2 -0
  222. package/dist/fixtures/normalized-ingestion.d.ts +102 -0
  223. package/dist/fixtures/normalized-ingestion.js +2 -0
  224. package/dist/fixtures/normalized-ingestion.test.d.ts +1 -0
  225. package/dist/index.d.ts +7 -0
  226. package/dist/index.js +2 -0
  227. package/dist/node/capabilities/comms-ai.capabilities.js +1 -0
  228. package/dist/node/capabilities/communication-os.capability-ids.js +1 -0
  229. package/dist/node/capabilities/ecosystem-messaging.capabilities.js +1 -0
  230. package/dist/node/capabilities/index.js +1 -0
  231. package/dist/node/commands/comms-ai.commands.js +1 -0
  232. package/dist/node/commands/index.js +1 -0
  233. package/dist/node/contracts/agent-communication.js +1 -0
  234. package/dist/node/contracts/agent-lifecycle-projection.js +1 -0
  235. package/dist/node/contracts/agent-surface-control.js +1 -0
  236. package/dist/node/contracts/ai-assistance.operations.js +1 -0
  237. package/dist/node/contracts/artifact-digest.js +1 -0
  238. package/dist/node/contracts/canonical-agent-conversation.js +1 -0
  239. package/dist/node/contracts/channel-preferences.js +1 -0
  240. package/dist/node/contracts/channel-routing.js +1 -0
  241. package/dist/node/contracts/collaboration.operations.js +1 -0
  242. package/dist/node/contracts/customer-live-chat-grant.operations.js +1 -0
  243. package/dist/node/contracts/delivery-eligibility.js +1 -0
  244. package/dist/node/contracts/delivery-fallback-eligibility-validation.js +1 -0
  245. package/dist/node/contracts/delivery-fallback-validation.js +1 -0
  246. package/dist/node/contracts/delivery-fallback.js +1 -0
  247. package/dist/node/contracts/delivery-intent-validation.js +1 -0
  248. package/dist/node/contracts/delivery-intent.js +1 -0
  249. package/dist/node/contracts/delivery-progress.js +1 -0
  250. package/dist/node/contracts/discord-community-intelligence.operations.js +1 -0
  251. package/dist/node/contracts/discord-community.events.js +1 -0
  252. package/dist/node/contracts/discord-community.models.js +1 -0
  253. package/dist/node/contracts/discord-community.operations.js +1 -0
  254. package/dist/node/contracts/ecosystem-attachment.operations.js +1 -0
  255. package/dist/node/contracts/ecosystem-auth.operations.js +1 -0
  256. package/dist/node/contracts/ecosystem-binding.operations.js +1 -0
  257. package/dist/node/contracts/ecosystem-connection-subscription.events.js +1 -0
  258. package/dist/node/contracts/ecosystem-governed-work-v2.operations.js +1 -0
  259. package/dist/node/contracts/ecosystem-governed-work.operations.js +1 -0
  260. package/dist/node/contracts/ecosystem-identity-v3.operations.js +1 -0
  261. package/dist/node/contracts/ecosystem-identity.operations.js +1 -0
  262. package/dist/node/contracts/ecosystem-message.operations.js +1 -0
  263. package/dist/node/contracts/ecosystem-messaging.dtos.js +0 -0
  264. package/dist/node/contracts/ecosystem-messaging.events.js +1 -0
  265. package/dist/node/contracts/ecosystem-messaging.models.js +1 -0
  266. package/dist/node/contracts/ecosystem-navigation-v3.operations.js +1 -0
  267. package/dist/node/contracts/ecosystem-webhook.operations.js +1 -0
  268. package/dist/node/contracts/ecosystem-workspace.operations.js +1 -0
  269. package/dist/node/contracts/enums.js +1 -0
  270. package/dist/node/contracts/erasure.operations.js +1 -0
  271. package/dist/node/contracts/events.js +1 -0
  272. package/dist/node/contracts/index.js +1 -0
  273. package/dist/node/contracts/ingestion.js +1 -0
  274. package/dist/node/contracts/ingress-admission-policy.js +1 -0
  275. package/dist/node/contracts/ingress-admission.js +1 -0
  276. package/dist/node/contracts/models.js +1 -0
  277. package/dist/node/contracts/operations.js +1 -0
  278. package/dist/node/contracts/persistence.js +1 -0
  279. package/dist/node/contracts/preference-resolution.js +1 -0
  280. package/dist/node/contracts/query.operations.js +1 -0
  281. package/dist/node/contracts/sequence-intent.js +1 -0
  282. package/dist/node/contracts/sovereignty.js +1 -0
  283. package/dist/node/contracts/support-internal-note.operations.js +1 -0
  284. package/dist/node/contracts/thread-link-kind.js +1 -0
  285. package/dist/node/contracts/thread-message.operations.js +1 -0
  286. package/dist/node/events/index.js +1 -0
  287. package/dist/node/fixtures/agent-omnichannel-primitives.js +1 -0
  288. package/dist/node/fixtures/agent-omnichannel.js +1 -0
  289. package/dist/node/fixtures/gtm-learning-loop-neutral.parts.js +1 -0
  290. package/dist/node/fixtures/index.js +1 -0
  291. package/dist/node/fixtures/normalized-ingestion.js +1 -0
  292. package/dist/node/index.js +1 -0
  293. package/dist/node/queries/index.js +1 -0
  294. package/dist/node/types/domain-command.js +0 -0
  295. package/dist/node/types/index.js +1 -0
  296. package/dist/node/validation/domain-command.js +1 -0
  297. package/dist/node/validation/index.js +1 -0
  298. package/dist/package-exports.test.d.ts +1 -0
  299. package/dist/queries/index.d.ts +4 -0
  300. package/dist/queries/index.js +2 -0
  301. package/dist/types/domain-command.d.ts +54 -0
  302. package/dist/types/domain-command.js +1 -0
  303. package/dist/types/index.d.ts +3 -0
  304. package/dist/types/index.js +2 -0
  305. package/dist/validation/domain-command.d.ts +3 -0
  306. package/dist/validation/domain-command.js +2 -0
  307. package/dist/validation/index.d.ts +53 -0
  308. package/dist/validation/index.js +2 -0
  309. package/package.json +1227 -0
@@ -0,0 +1 @@
1
+ import{z as r}from"zod";import{z as i}from"zod";var h="1.0.0",R="1.0.0",S={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},o=i.string().trim().min(1),C=i.string().datetime({offset:!0}),c=i.string().regex(/^sha256:[a-f0-9]{64}$/),f=i.object({ref:o,digest:c}).strict(),a=f.extend({revision:i.number().int().positive()}).strict(),p=i.object({tenantRef:o,workspaceRef:o.optional(),spaceRef:o.optional(),subjectRef:o}).strict(),b=i.object({schemaVersion:i.literal(h),profileRef:o,revision:i.number().int().positive(),agentRef:o,applicationRef:o,scope:p,routeBindings:i.array(a),connectionRefs:i.array(o),preferenceSet:a,policyRefs:i.array(o).min(1),evidenceRefs:i.array(o).min(1),createdAt:C,updatedAt:C,profileDigest:c}).strict().superRefine((e,n)=>{for(let s of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[s]).size!==e[s].length)n.addIssue({code:i.ZodIssueCode.custom,path:[s],message:`${s} must be unique`});let t=e.routeBindings.map((s)=>s.ref);if(new Set(t).size!==t.length)n.addIssue({code:i.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),I=i.object({schemaVersion:i.literal(R),linkRef:o,profile:a,agentRef:o,applicationRef:o,scope:p,runRef:o.optional(),taskRef:o.optional(),helpRequestRef:o.optional(),approvalRequestRef:o.optional(),backgroundResultRef:o.optional(),canonicalConversation:f.optional(),session:a.optional(),correlationRef:o,evidenceRefs:i.array(o).min(1)}).strict().superRefine((e,n)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)n.addIssue({code:i.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)n.addIssue({code:i.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function u(e,n){return e.tenantRef===n.tenantRef&&e.workspaceRef===n.workspaceRef&&e.spaceRef===n.spaceRef&&e.subjectRef===n.subjectRef}function k(e){let n=[];for(let t of["agentRef","applicationRef"])if(e.profile[t]!==e.lifecycleLink[t])n.push(`Lifecycle ${t} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)n.push("Lifecycle profile binding does not match the agent profile");if(!u(e.profile.scope,e.lifecycleLink.scope))n.push("Lifecycle scope does not match the agent profile");return n}function x(e){let{intent:n,progress:t}=e,s=[];if(t.deliveryRef!==n.deliveryRef||t.intent.ref!==n.deliveryRef||t.intent.digest!==n.deliveryDigest)s.push("Progress delivery does not match the intent");if(!u(t.scope,n.scope))s.push("Progress scope does not match the intent");if(t.recipientRef!==n.recipientRefs[0])s.push("Progress recipient does not match the intent");let m=n.requestedRoutes.find((l)=>l.ref===t.route.ref);if(!m||m.revision!==t.route.revision||m.digest!==t.route.digest)s.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(n.createdAt)||Date.parse(t.occurredAt)>Date.parse(n.expiresAt))s.push("Progress occurred outside the intent validity window");return s}async function y(e){let n=new TextEncoder().encode(g(e)),t=new Uint8Array(n.byteLength);t.set(n);let s=await crypto.subtle.digest("SHA-256",t.buffer),m=Array.from(new Uint8Array(s),(l)=>l.toString(16).padStart(2,"0")).join("");return c.parse(`sha256:${m}`)}function g(e){if(Array.isArray(e))return`[${e.map(g).join(",")}]`;if(e&&typeof e==="object")return`{${Object.entries(e).sort(([n],[t])=>n.localeCompare(t)).map(([n,t])=>`${JSON.stringify(n)}:${g(t)}`).join(",")}}`;return JSON.stringify(e)}var A="communication.canonical-agent-conversation.v1",d=r.string().trim().min(1),w=r.object({schemaVersion:r.literal(A),conversationRef:d,conversationDigest:c,revision:r.number().int().positive(),scope:p,roomRef:d,session:a,origin:r.enum(["interactive","scheduled","background","recovery","replay","branch"]),parentConversation:f.optional(),participantRefs:r.array(d).min(1),channelIdentityRefs:r.array(d),createdAt:r.string().datetime({offset:!0}),updatedAt:r.string().datetime({offset:!0}),effectAuthority:r.literal("none")}).strict().superRefine((e,n)=>{for(let t of["participantRefs","channelIdentityRefs"])if(new Set(e[t]).size!==e[t].length)n.addIssue({code:r.ZodIssueCode.custom,path:[t],message:`${t} must be unique`});if(e.origin==="branch"!==Boolean(e.parentConversation))n.addIssue({code:r.ZodIssueCode.custom,path:["parentConversation"],message:"parentConversation is required only for branch origin"});if(Date.parse(e.updatedAt)<Date.parse(e.createdAt))n.addIssue({code:r.ZodIssueCode.custom,path:["updatedAt"],message:"updatedAt cannot precede createdAt"})});async function V(e){return y(e)}async function P(e){let{conversationDigest:n,...t}=e;return n===await V(t)}function E(e){return u(e.conversation.scope,e.scope)?[]:["Canonical conversation scope does not match"]}export{A as COMMUNICATION_CANONICAL_AGENT_CONVERSATION_V1,w as CommunicationCanonicalAgentConversationV1Schema,V as digestCommunicationCanonicalAgentConversationV1,E as validateCanonicalConversationScopeV1,P as verifyCommunicationCanonicalAgentConversationV1};
@@ -0,0 +1 @@
1
+ import{z as o}from"zod";import{z as a}from"zod";var E="1.0.0",_="1.0.0",K={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},r=a.string().trim().min(1),V=a.string().datetime({offset:!0}),u=a.string().regex(/^sha256:[a-f0-9]{64}$/),I=a.object({ref:r,digest:u}).strict(),S=I.extend({revision:a.number().int().positive()}).strict(),d=a.object({tenantRef:r,workspaceRef:r.optional(),spaceRef:r.optional(),subjectRef:r}).strict(),Z=a.object({schemaVersion:a.literal(E),profileRef:r,revision:a.number().int().positive(),agentRef:r,applicationRef:r,scope:d,routeBindings:a.array(S),connectionRefs:a.array(r),preferenceSet:S,policyRefs:a.array(r).min(1),evidenceRefs:a.array(r).min(1),createdAt:V,updatedAt:V,profileDigest:u}).strict().superRefine((e,t)=>{for(let i of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[i]).size!==e[i].length)t.addIssue({code:a.ZodIssueCode.custom,path:[i],message:`${i} must be unique`});let n=e.routeBindings.map((i)=>i.ref);if(new Set(n).size!==n.length)t.addIssue({code:a.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),U=a.object({schemaVersion:a.literal(_),linkRef:r,profile:S,agentRef:r,applicationRef:r,scope:d,runRef:r.optional(),taskRef:r.optional(),helpRequestRef:r.optional(),approvalRequestRef:r.optional(),backgroundResultRef:r.optional(),canonicalConversation:I.optional(),session:S.optional(),correlationRef:r,evidenceRefs:a.array(r).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:a.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)t.addIssue({code:a.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function C(e,t){return e.tenantRef===t.tenantRef&&e.workspaceRef===t.workspaceRef&&e.spaceRef===t.spaceRef&&e.subjectRef===t.subjectRef}function F(e){let t=[];for(let n of["agentRef","applicationRef"])if(e.profile[n]!==e.lifecycleLink[n])t.push(`Lifecycle ${n} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)t.push("Lifecycle profile binding does not match the agent profile");if(!C(e.profile.scope,e.lifecycleLink.scope))t.push("Lifecycle scope does not match the agent profile");return t}function H(e){let{intent:t,progress:n}=e,i=[];if(n.deliveryRef!==t.deliveryRef||n.intent.ref!==t.deliveryRef||n.intent.digest!==t.deliveryDigest)i.push("Progress delivery does not match the intent");if(!C(n.scope,t.scope))i.push("Progress scope does not match the intent");if(n.recipientRef!==t.recipientRefs[0])i.push("Progress recipient does not match the intent");let s=t.requestedRoutes.find((m)=>m.ref===n.route.ref);if(!s||s.revision!==n.route.revision||s.digest!==n.route.digest)i.push("Progress route was not requested by the intent");if(Date.parse(n.occurredAt)<Date.parse(t.createdAt)||Date.parse(n.occurredAt)>Date.parse(t.expiresAt))i.push("Progress occurred outside the intent validity window");return i}import{z as f}from"zod";var w="1.0.0",A=["email","calendar","sms","slack","teams","discord","telegram","whatsapp","matrix","in_app","push","webhook","web_chat","internal_chat"],v=f.string().trim().min(1),Y=f.enum(A),T=f.enum(["communication","calendar_event"]),h=f.string().trim().min(1),J=f.object({schemaVersion:f.literal(w),routeRef:h,revision:f.number().int().positive(),scope:d,channel:v,destinationRef:h,connectionRef:h.optional(),semantic:T,deliveryMode:f.enum(["direct","durable_in_app"]),capabilityRefs:f.array(h),evidenceRefs:f.array(h).min(1),routeDigest:u}).strict().superRefine((e,t)=>{if(e.channel==="calendar"!==(e.semantic==="calendar_event"))t.addIssue({code:f.ZodIssueCode.custom,path:["semantic"],message:"calendar routes require calendar_event semantics and calendar_event routes require the calendar channel"});for(let n of["capabilityRefs","evidenceRefs"])if(new Set(e[n]).size!==e[n].length)t.addIssue({code:f.ZodIssueCode.custom,path:[n],message:`${n} must be unique`})});import{z as c}from"zod";var x="1.0.0",N="communication:preference-target:platform-default",ne=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],oe=c.enum(["event","automation","feature","application","product","space","person","platform_default"]),g=c.string().trim().min(1);function p(e){return c.object({kind:c.literal(e),ref:g}).strict()}var y=c.discriminatedUnion("kind",[p("event"),p("automation"),p("feature"),p("application"),p("product"),p("space"),p("person"),c.object({kind:c.literal("platform_default"),ref:c.literal(N)}).strict()]),z=c.object({preferenceSetRef:g,revision:c.number().int().positive(),digest:u,target:y}).strict(),ie=c.object({schemaVersion:c.literal(x),resolutionRef:g,scope:d,subjectRef:g,evaluatedPreferenceSets:c.array(z).min(1),winningPreferenceSetRef:g,winningTarget:y,authority:c.literal("preference_only"),effectAuthority:c.literal("none"),resolvedAt:c.string().datetime({offset:!0}),evidenceRefs:c.array(g).min(1),resolutionDigest:u}).strict().superRefine((e,t)=>{let n=e.evaluatedPreferenceSets.map((s)=>s.preferenceSetRef);if(new Set(n).size!==n.length)R(t,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)R(t,"evidenceRefs","evidenceRefs must be unique");for(let s=1;s<e.evaluatedPreferenceSets.length;s+=1){let m=e.evaluatedPreferenceSets[s-1],P=e.evaluatedPreferenceSets[s];if(m&&P&&k(m.target.kind)>k(P.target.kind)){R(t,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let i=e.evaluatedPreferenceSets.find((s)=>s.preferenceSetRef===e.winningPreferenceSetRef);if(!i)R(t,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(i.preferenceSetRef!==e.evaluatedPreferenceSets[0]?.preferenceSetRef)R(t,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(i.target.kind!==e.winningTarget.kind||i.target.ref!==e.winningTarget.ref)R(t,"winningTarget","winning target must match the winning preference set")});function k(e){switch(e){case"event":case"automation":return 0;case"feature":case"application":return 1;case"product":return 2;case"space":case"person":return 3;case"platform_default":return 4}}function R(e,t,n){e.addIssue({code:c.ZodIssueCode.custom,path:[t],message:n})}function re(e){let{preferenceResolution:t,preferenceSet:n}=e,i=[];if(t.subjectRef!==n.scope.subjectRef||t.winningPreferenceSetRef!==n.preferenceSetRef)i.push("Preference resolution does not match its subject and set");if(!C(t.scope,n.scope))i.push("Preference resolution scope does not match its preference set");let s=t.evaluatedPreferenceSets.find((m)=>m.preferenceSetRef===n.preferenceSetRef);if(!s||s.revision!==n.revision||s.digest!==n.preferenceSetDigest)i.push("Preference resolution binding is stale");if(t.winningTarget.kind!==n.target.kind||t.winningTarget.ref!==n.target.ref)i.push("Preference resolution target does not match its preference set");return i}var q="1.0.0",l=o.string().trim().min(1),D=o.string().datetime({offset:!0}),b=o.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),L=o.object({start:b,end:b,timezone:o.string().trim().min(1)}).strict(),O=o.object({enabled:o.boolean(),frequency:o.enum(["immediate","daily","weekly"]),deliveryTime:b.optional()}).strict().superRefine((e,t)=>{if(e.frequency==="immediate"&&e.deliveryTime)t.addIssue({code:o.ZodIssueCode.custom,path:["deliveryTime"],message:"immediate digest frequency cannot carry a delivery time"});if(e.enabled&&e.frequency!=="immediate"&&!e.deliveryTime)t.addIssue({code:o.ZodIssueCode.custom,path:["deliveryTime"],message:"enabled daily or weekly digest requires a delivery time"})}),B=o.object({routeRef:l,channel:v,enabled:o.boolean(),priority:o.number().int().positive(),consentRef:l.optional(),quietHours:L.optional(),digest:O.optional()}).strict(),M=o.object({enabled:o.boolean(),orderedRouteRefs:o.array(l),terminalRouteRef:l.optional()}).strict().superRefine((e,t)=>{if(new Set(e.orderedRouteRefs).size!==e.orderedRouteRefs.length)t.addIssue({code:o.ZodIssueCode.custom,path:["orderedRouteRefs"],message:"fallback routes must be unique"});if(e.enabled&&e.orderedRouteRefs.length===0)t.addIssue({code:o.ZodIssueCode.custom,path:["orderedRouteRefs"],message:"enabled fallback requires at least one route"})}),ue=o.object({schemaVersion:o.literal(q),preferenceSetRef:l,revision:o.number().int().positive(),scope:d,target:y,parentPreferenceSetRefs:o.array(l),authority:o.literal("preference_only"),globalEnabled:o.boolean(),routePreferences:o.array(B),fallback:M,updatedAt:D,evidenceRefs:o.array(l).min(1),preferenceSetDigest:u}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:o.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(new Set(e.parentPreferenceSetRefs).size!==e.parentPreferenceSetRefs.length)t.addIssue({code:o.ZodIssueCode.custom,path:["parentPreferenceSetRefs"],message:"parent preference sets must be unique"});if(e.parentPreferenceSetRefs.includes(e.preferenceSetRef))t.addIssue({code:o.ZodIssueCode.custom,path:["parentPreferenceSetRefs"],message:"a preference set cannot inherit from itself"});let n=e.routePreferences.map((m)=>m.routeRef);if(new Set(n).size!==n.length)t.addIssue({code:o.ZodIssueCode.custom,path:["routePreferences"],message:"route preferences must be unique"});let i=e.routePreferences.map((m)=>m.priority);if(new Set(i).size!==i.length)t.addIssue({code:o.ZodIssueCode.custom,path:["routePreferences"],message:"route preference priorities must be unique"});let s=new Set(n);for(let m of e.fallback.orderedRouteRefs)if(!s.has(m))t.addIssue({code:o.ZodIssueCode.custom,path:["fallback","orderedRouteRefs"],message:`fallback route ${m} has no route preference`});if(e.fallback.terminalRouteRef&&!s.has(e.fallback.terminalRouteRef))t.addIssue({code:o.ZodIssueCode.custom,path:["fallback","terminalRouteRef"],message:"terminal route has no route preference"});if(e.fallback.enabled&&e.fallback.terminalRouteRef&&!e.fallback.orderedRouteRefs.includes(e.fallback.terminalRouteRef))t.addIssue({code:o.ZodIssueCode.custom,path:["fallback","terminalRouteRef"],message:"terminal route must be part of the fallback order"})});export{q as COMMUNICATION_PREFERENCE_SET_SCHEMA_VERSION,O as CommunicationDigestPreferenceV1Schema,M as CommunicationFallbackPreferenceV1Schema,ue as CommunicationPreferenceSetV1Schema,L as CommunicationQuietHoursV1Schema,B as CommunicationRoutePreferenceV1Schema};
@@ -0,0 +1 @@
1
+ import{z as c}from"zod";import{z as o}from"zod";var h="1.0.0",y="1.0.0",b={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},t=o.string().trim().min(1),u=o.string().datetime({offset:!0}),m=o.string().regex(/^sha256:[a-f0-9]{64}$/),l=o.object({ref:t,digest:m}).strict(),a=l.extend({revision:o.number().int().positive()}).strict(),f=o.object({tenantRef:t,workspaceRef:t.optional(),spaceRef:t.optional(),subjectRef:t}).strict(),A=o.object({schemaVersion:o.literal(h),profileRef:t,revision:o.number().int().positive(),agentRef:t,applicationRef:t,scope:f,routeBindings:o.array(a),connectionRefs:o.array(t),preferenceSet:a,policyRefs:o.array(t).min(1),evidenceRefs:o.array(t).min(1),createdAt:u,updatedAt:u,profileDigest:m}).strict().superRefine((e,n)=>{for(let s of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[s]).size!==e[s].length)n.addIssue({code:o.ZodIssueCode.custom,path:[s],message:`${s} must be unique`});let i=e.routeBindings.map((s)=>s.ref);if(new Set(i).size!==i.length)n.addIssue({code:o.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),I=o.object({schemaVersion:o.literal(y),linkRef:t,profile:a,agentRef:t,applicationRef:t,scope:f,runRef:t.optional(),taskRef:t.optional(),helpRequestRef:t.optional(),approvalRequestRef:t.optional(),backgroundResultRef:t.optional(),canonicalConversation:l.optional(),session:a.optional(),correlationRef:t,evidenceRefs:o.array(t).min(1)}).strict().superRefine((e,n)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)n.addIssue({code:o.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)n.addIssue({code:o.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function d(e,n){return e.tenantRef===n.tenantRef&&e.workspaceRef===n.workspaceRef&&e.spaceRef===n.spaceRef&&e.subjectRef===n.subjectRef}function x(e){let n=[];for(let i of["agentRef","applicationRef"])if(e.profile[i]!==e.lifecycleLink[i])n.push(`Lifecycle ${i} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)n.push("Lifecycle profile binding does not match the agent profile");if(!d(e.profile.scope,e.lifecycleLink.scope))n.push("Lifecycle scope does not match the agent profile");return n}function k(e){let{intent:n,progress:i}=e,s=[];if(i.deliveryRef!==n.deliveryRef||i.intent.ref!==n.deliveryRef||i.intent.digest!==n.deliveryDigest)s.push("Progress delivery does not match the intent");if(!d(i.scope,n.scope))s.push("Progress scope does not match the intent");if(i.recipientRef!==n.recipientRefs[0])s.push("Progress recipient does not match the intent");let p=n.requestedRoutes.find((g)=>g.ref===i.route.ref);if(!p||p.revision!==i.route.revision||p.digest!==i.route.digest)s.push("Progress route was not requested by the intent");if(Date.parse(i.occurredAt)<Date.parse(n.createdAt)||Date.parse(i.occurredAt)>Date.parse(n.expiresAt))s.push("Progress occurred outside the intent validity window");return s}var R="1.0.0",C=["email","calendar","sms","slack","teams","discord","telegram","whatsapp","matrix","in_app","push","webhook","web_chat","internal_chat"],v=c.string().trim().min(1),N=c.enum(C),S=c.enum(["communication","calendar_event"]),r=c.string().trim().min(1),B=c.object({schemaVersion:c.literal(R),routeRef:r,revision:c.number().int().positive(),scope:f,channel:v,destinationRef:r,connectionRef:r.optional(),semantic:S,deliveryMode:c.enum(["direct","durable_in_app"]),capabilityRefs:c.array(r),evidenceRefs:c.array(r).min(1),routeDigest:m}).strict().superRefine((e,n)=>{if(e.channel==="calendar"!==(e.semantic==="calendar_event"))n.addIssue({code:c.ZodIssueCode.custom,path:["semantic"],message:"calendar routes require calendar_event semantics and calendar_event routes require the calendar channel"});for(let i of["capabilityRefs","evidenceRefs"])if(new Set(e[i]).size!==e[i].length)n.addIssue({code:c.ZodIssueCode.custom,path:[i],message:`${i} must be unique`})});export{R as COMMUNICATION_CHANNEL_ROUTING_SCHEMA_VERSION,C as COMMUNICATION_WELL_KNOWN_CHANNEL_KEYS,v as CommunicationChannelKeySchema,B as CommunicationDeliveryRouteV1Schema,S as CommunicationDeliverySemanticSchema,N as CommunicationWellKnownChannelKeySchema};
@@ -0,0 +1 @@
1
+ import{defineCommand as s}from"@lssm/lib.contracts-spec";import{defineSchemaModel as l,ScalarTypeEnum as i}from"@lssm/lib.schema";import{defineEnum as n}from"@lssm/lib.schema";var a=n("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),d=n("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),y=n("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),m=n("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),f=n("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),c=n("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),g=n("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),o=n("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),O=n("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var A=t({name:"ChannelAccount",description:"A channel account belonging to a participant",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},externalId:{type:e.String_unsecure(),isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},isPrimary:{type:e.Boolean(),isOptional:!1,defaultValue:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),p=t({name:"IdentityLink",description:"Proposed or confirmed relationship between participant identities",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},candidateParticipantId:{type:e.String_unsecure(),isOptional:!1},status:{type:c,isOptional:!1,defaultValue:"generated"},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),M=t({name:"CommunicationParticipant",description:"A person or system that participates in conversations",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},email:{type:e.EmailAddress(),isOptional:!0},accounts:{type:A,isArray:!0,isOptional:!1},identityLinks:{type:p,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),b=t({name:"Attachment",description:"A file or media attachment on a message",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!0},sizeBytes:{type:e.Int_unsecure(),isOptional:!0},url:{type:e.URL(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0}}}),u=t({name:"ThreadLink",description:"Link between a thread and an external business object (V2: rich-reference objectRef replaces V1 objectType/objectId)",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},objectRef:{type:e.JSONObject(),isOptional:!1},relation:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),k=t({name:"MessageIntent",description:"Classified message or thread intent with confidence and evidence",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},category:{type:g,isOptional:!1},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},evidenceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),v=t({name:"CommunicationMessage",description:"A single message within a communication thread",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},bodyNormalized:{type:e.String_unsecure(),isOptional:!0},status:{type:y,isOptional:!1,defaultValue:"received"},intent:{type:k,isOptional:!0},attachments:{type:b,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),C=t({name:"CommunicationFormIntake",description:"Declarative source reference for a communication message mapped into an entity-bound form intake result",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},entityKey:{type:e.String_unsecure(),isOptional:!1},projectionKind:{type:e.String_unsecure(),isOptional:!1},formKey:{type:e.String_unsecure(),isOptional:!0},formVersion:{type:e.String_unsecure(),isOptional:!0},completionProfileKey:{type:e.String_unsecure(),isOptional:!0},acceptedValues:{type:e.JSONObject(),isOptional:!1},completionDebt:{type:e.JSONObject(),isArray:!0,isOptional:!1},captureStatus:{type:e.String_unsecure(),isOptional:!1,defaultValue:"accepted"},completionStatus:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),D=t({name:"CommunicationThread",description:"A conversation thread spanning one or more channels",fields:{id:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!0},status:{type:d,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:a,isArray:!0,isOptional:!1},links:{type:u,isArray:!0,isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0},priority:{type:e.String_unsecure(),isOptional:!0},tags:{type:e.String_unsecure(),isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),S=t({name:"CommunicationAction",description:"Structured action extracted from a conversation",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},owner:{type:e.String_unsecure(),isOptional:!0},deadline:{type:e.DateTime(),isOptional:!0},blockers:{type:e.String_unsecure(),isArray:!0,isOptional:!0},sourceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},safetyMode:{type:o,isOptional:!1,defaultValue:"draft_only"}}}),E=t({name:"ReplyDraft",description:"An AI-generated or human-authored reply draft",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},status:{type:m,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:e.String_unsecure(),isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},promptVersion:{type:e.String_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},reviewedAt:{type:e.DateTime(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),_=t({name:"HandoffPacket",description:"A structured handoff between owners, teams, or systems",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},status:{type:f,isOptional:!1,defaultValue:"created"},fromOwner:{type:e.String_unsecure(),isOptional:!1},toOwner:{type:e.String_unsecure(),isOptional:!1},summary:{type:e.String_unsecure(),isOptional:!1},keyFacts:{type:e.String_unsecure(),isArray:!0,isOptional:!0},openQuestions:{type:e.String_unsecure(),isArray:!0,isOptional:!0},requiredActions:{type:S,isArray:!0,isOptional:!0},evidenceLinks:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),j=t({name:"CommunicationSummary",description:"AI-generated summary of a thread or message range",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},content:{type:e.String_unsecure(),isOptional:!1},facts:{type:e.JSONObject(),isArray:!0,isOptional:!0},actions:{type:S,isArray:!0,isOptional:!0},decisions:{type:e.JSONObject(),isArray:!0,isOptional:!0},risks:{type:e.JSONObject(),isArray:!0,isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},generatedAt:{type:e.DateTime(),isOptional:!1}}}),h=t({name:"AgentSuggestion",description:"An AI-generated suggestion attached to a thread or message",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},suggestionType:{type:e.String_unsecure(),isOptional:!1},content:{type:e.String_unsecure(),isOptional:!1},status:{type:c,isOptional:!1,defaultValue:"generated"},modelName:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}});var r=["platform.communication-os"],F=s({meta:{key:"communication.handoff.create",version:"1.0.0",stability:"experimental",owners:[...r],tags:["communication","handoff"],description:"Create a handoff packet for a thread",goal:"Transfer context safely between owners or systems",context:"Requires evidence links and does not close source thread automatically"},io:{input:l({name:"CreateHandoffInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},fromOwner:{type:i.String_unsecure(),isOptional:!1},toOwner:{type:i.String_unsecure(),isOptional:!1},reason:{type:i.String_unsecure(),isOptional:!0}}}),output:_},policy:{auth:"user"}}),H=s({meta:{key:"communication.threadLink.propose",version:"1.0.0",stability:"experimental",owners:[...r],tags:["communication","thread-link","propose"],description:"Propose a link between a thread and a business object",goal:"Let future vertical consumers bind domain objects without changing the core",context:"Draft-only operation; domain packs own object semantics"},io:{input:u,output:u},policy:{auth:"user"}}),J=s({meta:{key:"communication.identityLink.propose",version:"1.0.0",stability:"experimental",owners:[...r],tags:["communication","identity","propose"],description:"Propose a participant identity link",goal:"Resolve cross-channel identities without reckless auto-merge",context:"Draft-only operation; high-impact merges require human review"},io:{input:p,output:p},policy:{auth:"user"}}),q=s({meta:{key:"communication.escalation.request",version:"1.0.0",stability:"experimental",owners:[...r],tags:["communication","escalation"],description:"Request human escalation for a thread",goal:"Surface high-risk, blocked, or unresolved conversations to a human owner",context:"Policy-executable operation that emits escalation evidence"},io:{input:l({name:"EscalateToHumanInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},reason:{type:i.String_unsecure(),isOptional:!1},targetOwner:{type:i.String_unsecure(),isOptional:!0}}}),output:h},policy:{auth:"user"}}),B=s({meta:{key:"communication.feedback.record",version:"1.0.0",stability:"experimental",owners:[...r],tags:["communication","feedback"],description:"Record human feedback on a suggestion, draft, or extraction",goal:"Make AI correction signals auditable and replayable",context:"Used by review surfaces and future evaluation runs"},io:{input:l({name:"RecordHumanFeedbackInput",fields:{targetId:{type:i.String_unsecure(),isOptional:!1},targetType:{type:i.String_unsecure(),isOptional:!1},outcome:{type:O,isOptional:!1},notes:{type:i.String_unsecure(),isOptional:!0}}}),output:l({name:"RecordHumanFeedbackOutput",fields:{feedbackId:{type:i.String_unsecure(),isOptional:!1},safetyMode:{type:o,isOptional:!1}}})},policy:{auth:"user"}});export{F as CreateHandoffCommand,q as EscalateToHumanCommand,J as ProposeIdentityLinkCommand,H as ProposeThreadLinkCommand,B as RecordHumanFeedbackCommand};
@@ -0,0 +1 @@
1
+ import{z as s}from"zod";import{z as o}from"zod";var y="1.0.0",v="1.0.0",V={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},n=o.string().trim().min(1),l=o.string().datetime({offset:!0}),u=o.string().regex(/^sha256:[a-f0-9]{64}$/),g=o.object({ref:n,digest:u}).strict(),m=g.extend({revision:o.number().int().positive()}).strict(),h=o.object({tenantRef:n,workspaceRef:n.optional(),spaceRef:n.optional(),subjectRef:n}).strict(),x=o.object({schemaVersion:o.literal(y),profileRef:n,revision:o.number().int().positive(),agentRef:n,applicationRef:n,scope:h,routeBindings:o.array(m),connectionRefs:o.array(n),preferenceSet:m,policyRefs:o.array(n).min(1),evidenceRefs:o.array(n).min(1),createdAt:l,updatedAt:l,profileDigest:u}).strict().superRefine((e,t)=>{for(let r of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[r]).size!==e[r].length)t.addIssue({code:o.ZodIssueCode.custom,path:[r],message:`${r} must be unique`});let i=e.routeBindings.map((r)=>r.ref);if(new Set(i).size!==i.length)t.addIssue({code:o.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),I=o.object({schemaVersion:o.literal(v),linkRef:n,profile:m,agentRef:n,applicationRef:n,scope:h,runRef:n.optional(),taskRef:n.optional(),helpRequestRef:n.optional(),approvalRequestRef:n.optional(),backgroundResultRef:n.optional(),canonicalConversation:g.optional(),session:m.optional(),correlationRef:n,evidenceRefs:o.array(n).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:o.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)t.addIssue({code:o.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function R(e,t){return e.tenantRef===t.tenantRef&&e.workspaceRef===t.workspaceRef&&e.spaceRef===t.spaceRef&&e.subjectRef===t.subjectRef}function b(e){let t=[];for(let i of["agentRef","applicationRef"])if(e.profile[i]!==e.lifecycleLink[i])t.push(`Lifecycle ${i} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)t.push("Lifecycle profile binding does not match the agent profile");if(!R(e.profile.scope,e.lifecycleLink.scope))t.push("Lifecycle scope does not match the agent profile");return t}function k(e){let{intent:t,progress:i}=e,r=[];if(i.deliveryRef!==t.deliveryRef||i.intent.ref!==t.deliveryRef||i.intent.digest!==t.deliveryDigest)r.push("Progress delivery does not match the intent");if(!R(i.scope,t.scope))r.push("Progress scope does not match the intent");if(i.recipientRef!==t.recipientRefs[0])r.push("Progress recipient does not match the intent");let c=t.requestedRoutes.find((p)=>p.ref===i.route.ref);if(!c||c.revision!==i.route.revision||c.digest!==i.route.digest)r.push("Progress route was not requested by the intent");if(Date.parse(i.occurredAt)<Date.parse(t.createdAt)||Date.parse(i.occurredAt)>Date.parse(t.expiresAt))r.push("Progress occurred outside the intent validity window");return r}async function C(e){let t=new TextEncoder().encode(f(e)),i=new Uint8Array(t.byteLength);i.set(t);let r=await crypto.subtle.digest("SHA-256",i.buffer),c=Array.from(new Uint8Array(r),(p)=>p.toString(16).padStart(2,"0")).join("");return u.parse(`sha256:${c}`)}function f(e){if(Array.isArray(e))return`[${e.map(f).join(",")}]`;if(e&&typeof e==="object")return`{${Object.entries(e).sort(([t],[i])=>t.localeCompare(i)).map(([t,i])=>`${JSON.stringify(t)}:${f(i)}`).join(",")}}`;return JSON.stringify(e)}var P="communication.support.customer-live-chat.grant",D="communication.support.customer-live-chat.verify",E=["messages:list","messages:send","realtime:ticket"],a=s.string().trim().min(1).max(300),d=s.object({bindingRef:a,spaceRef:a,sessionRef:a,sessionRevision:s.number().int().positive(),caseRef:a,caseRevision:s.number().int().nonnegative(),conversationRef:a,roomRef:a,channel:s.enum(["messenger","portal"])}).strict(),G=d.extend({expiresAt:s.string().datetime({offset:!0}),evidenceRefs:s.array(a).min(1).max(20)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:s.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"})}),L=d.omit({bindingRef:!0}).strict(),N=L.extend({conversationRevision:s.number().int().positive(),evidenceRef:a,verifiedAt:s.string().datetime({offset:!0})}).strict(),S=s.object({tenantId:a,workspaceId:a,spaceId:a}).strict(),z=s.object({grantRef:a,accessToken:s.string().min(16).max(8192),realtimeTicket:s.string().min(16).max(8192),principalRef:a,scope:S,binding:d,inputDigest:s.string().regex(/^sha256:[a-f0-9]{64}$/),expiresAt:s.string().datetime({offset:!0}),capabilities:s.tuple([s.literal("messages:list"),s.literal("messages:send"),s.literal("realtime:ticket")])}).strict();function M(e){return C(e)}function w(e){return C(e)}export{E as COMMUNICATION_CUSTOMER_LIVE_CHAT_CAPABILITIES,P as COMMUNICATION_CUSTOMER_LIVE_CHAT_GRANT_CAPABILITY,D as COMMUNICATION_CUSTOMER_LIVE_CHAT_VERIFY_CAPABILITY,d as CommunicationCustomerLiveChatBindingSchema,G as CommunicationCustomerLiveChatGrantRequestSchema,z as CommunicationCustomerLiveChatGrantResponseSchema,S as CommunicationCustomerLiveChatGrantScopeSchema,L as CommunicationCustomerLiveChatVerificationRequestSchema,N as CommunicationCustomerLiveChatVerificationResponseSchema,M as digestCommunicationCustomerLiveChatGrantInput,w as digestCommunicationCustomerLiveChatVerificationInput};
@@ -0,0 +1 @@
1
+ import{z as a}from"zod";import{z as s}from"zod";var S="1.0.0",V="1.0.0",x={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},o=s.string().trim().min(1),v=s.string().datetime({offset:!0}),p=s.string().regex(/^sha256:[a-f0-9]{64}$/),h=s.object({ref:o,digest:p}).strict(),u=h.extend({revision:s.number().int().positive()}).strict(),f=s.object({tenantRef:o,workspaceRef:o.optional(),spaceRef:o.optional(),subjectRef:o}).strict(),L=s.object({schemaVersion:s.literal(S),profileRef:o,revision:s.number().int().positive(),agentRef:o,applicationRef:o,scope:f,routeBindings:s.array(u),connectionRefs:s.array(o),preferenceSet:u,policyRefs:s.array(o).min(1),evidenceRefs:s.array(o).min(1),createdAt:v,updatedAt:v,profileDigest:p}).strict().superRefine((e,i)=>{for(let n of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[n]).size!==e[n].length)i.addIssue({code:s.ZodIssueCode.custom,path:[n],message:`${n} must be unique`});let t=e.routeBindings.map((n)=>n.ref);if(new Set(t).size!==t.length)i.addIssue({code:s.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),w=s.object({schemaVersion:s.literal(V),linkRef:o,profile:u,agentRef:o,applicationRef:o,scope:f,runRef:o.optional(),taskRef:o.optional(),helpRequestRef:o.optional(),approvalRequestRef:o.optional(),backgroundResultRef:o.optional(),canonicalConversation:h.optional(),session:u.optional(),correlationRef:o,evidenceRefs:s.array(o).min(1)}).strict().superRefine((e,i)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)i.addIssue({code:s.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)i.addIssue({code:s.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function d(e,i){return e.tenantRef===i.tenantRef&&e.workspaceRef===i.workspaceRef&&e.spaceRef===i.spaceRef&&e.subjectRef===i.subjectRef}function B(e){let i=[];for(let t of["agentRef","applicationRef"])if(e.profile[t]!==e.lifecycleLink[t])i.push(`Lifecycle ${t} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)i.push("Lifecycle profile binding does not match the agent profile");if(!d(e.profile.scope,e.lifecycleLink.scope))i.push("Lifecycle scope does not match the agent profile");return i}function N(e){let{intent:i,progress:t}=e,n=[];if(t.deliveryRef!==i.deliveryRef||t.intent.ref!==i.deliveryRef||t.intent.digest!==i.deliveryDigest)n.push("Progress delivery does not match the intent");if(!d(t.scope,i.scope))n.push("Progress scope does not match the intent");if(t.recipientRef!==i.recipientRefs[0])n.push("Progress recipient does not match the intent");let r=i.requestedRoutes.find((c)=>c.ref===t.route.ref);if(!r||r.revision!==t.route.revision||r.digest!==t.route.digest)n.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(i.createdAt)||Date.parse(t.occurredAt)>Date.parse(i.expiresAt))n.push("Progress occurred outside the intent validity window");return n}import{z as m}from"zod";var D="1.0.0",I=["email","calendar","sms","slack","teams","discord","telegram","whatsapp","matrix","in_app","push","webhook","web_chat","internal_chat"],g=m.string().trim().min(1),M=m.enum(I),C=m.enum(["communication","calendar_event"]),y=m.string().trim().min(1),P=m.object({schemaVersion:m.literal(D),routeRef:y,revision:m.number().int().positive(),scope:f,channel:g,destinationRef:y,connectionRef:y.optional(),semantic:C,deliveryMode:m.enum(["direct","durable_in_app"]),capabilityRefs:m.array(y),evidenceRefs:m.array(y).min(1),routeDigest:p}).strict().superRefine((e,i)=>{if(e.channel==="calendar"!==(e.semantic==="calendar_event"))i.addIssue({code:m.ZodIssueCode.custom,path:["semantic"],message:"calendar routes require calendar_event semantics and calendar_event routes require the calendar channel"});for(let t of["capabilityRefs","evidenceRefs"])if(new Set(e[t]).size!==e[t].length)i.addIssue({code:m.ZodIssueCode.custom,path:[t],message:`${t} must be unique`})});var A="1.0.0",l=a.string().trim().min(1),b=a.string().datetime({offset:!0}),k=a.enum(["connection","consent","policy","grant","quiet_hours","rate_limit","provider_health","whatsapp_service_window","whatsapp_template","telegram_first_contact","installation_membership","sms_opt_out","email_suppression","push_device","calendar_permission","cost"]),_=a.object({checkRef:l,category:k,status:a.enum(["passed","failed","unknown","not_applicable"]),reasonCodes:a.array(l).min(1),evidenceRefs:a.array(l).min(1)}).strict().superRefine((e,i)=>{for(let t of["reasonCodes","evidenceRefs"])if(new Set(e[t]).size!==e[t].length)i.addIssue({code:a.ZodIssueCode.custom,path:[t],message:`${t} must be unique`})}),H=a.object({schemaVersion:a.literal(A),eligibilityRef:l,eligibilityDigest:p,deliveryRef:l,intent:h,scope:f,recipientRef:l,route:u,channel:g,semantic:C,checks:a.array(_).min(1),result:a.enum(["eligible","ineligible","unknown"]),effectAuthority:a.literal("none"),evaluatedAt:b,expiresAt:b,evidenceRefs:a.array(l).min(1)}).strict().superRefine((e,i)=>{let t=e.checks.map((c)=>c.checkRef),n=e.checks.map((c)=>c.category);for(let[c,R]of[["checks",t],["checks",n],["evidenceRefs",e.evidenceRefs]])if(new Set(R).size!==R.length)i.addIssue({code:a.ZodIssueCode.custom,path:[c],message:`${c} must be unique`});let r=e.checks.some((c)=>c.status==="failed")?"ineligible":e.checks.some((c)=>c.status==="unknown")?"unknown":"eligible";if(e.result!==r)i.addIssue({code:a.ZodIssueCode.custom,path:["result"],message:"result must be derived from all eligibility checks"});if(e.checks.every((c)=>c.status==="not_applicable"))i.addIssue({code:a.ZodIssueCode.custom,path:["checks"],message:"at least one eligibility check must be applicable"});if(Date.parse(e.expiresAt)<=Date.parse(e.evaluatedAt))i.addIssue({code:a.ZodIssueCode.custom,path:["expiresAt"],message:"expiresAt must be later than evaluatedAt"})});function U(e){let{decision:i,intent:t,route:n}=e,r=[];if(i.deliveryRef!==t.deliveryRef||i.intent.ref!==t.deliveryRef||i.intent.digest!==t.deliveryDigest)r.push("Eligibility decision does not bind the delivery intent");if(i.route.ref!==n.routeRef||i.route.revision!==n.revision||i.route.digest!==n.routeDigest||!t.requestedRoutes.some((c)=>c.ref===n.routeRef&&c.revision===n.revision&&c.digest===n.routeDigest))r.push("Eligibility decision does not bind a requested route");if(!d(i.scope,t.scope)||!d(i.scope,n.scope))r.push("Eligibility scope does not match the intent and route");if(i.recipientRef!==t.recipientRefs[0]||i.channel!==n.channel||i.semantic!==n.semantic||i.semantic!==t.semantic)r.push("Eligibility recipient or route semantics do not match");if(Date.parse(i.evaluatedAt)<Date.parse(t.createdAt)||Date.parse(i.expiresAt)>Date.parse(t.expiresAt))r.push("Eligibility decision is outside the intent validity window");return r}export{A as COMMUNICATION_DELIVERY_ELIGIBILITY_SCHEMA_VERSION,k as CommunicationDeliveryEligibilityCategoryV1Schema,_ as CommunicationDeliveryEligibilityCheckV1Schema,H as CommunicationDeliveryEligibilityDecisionV1Schema,U as validateCommunicationDeliveryEligibilityBindingV1};
@@ -0,0 +1 @@
1
+ function s(l){let t=[],o=new Map(l.eligibilityDecisions.map((i)=>[i.eligibilityRef,i]));for(let i of l.decision.consideredRoutes){let e=o.get(i.eligibilityDecision.ref);if(!e||e.eligibilityDigest!==i.eligibilityDecision.digest||e.result!==i.eligibility)t.push(`Fallback eligibility result is stale: ${i.route.ref}`)}return t}export{s as validateCommunicationFallbackEligibilityResultsV1};
@@ -0,0 +1 @@
1
+ import{z as c}from"zod";var q="1.0.0",L="1.0.0",G={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},s=c.string().trim().min(1),E=c.string().datetime({offset:!0}),b=c.string().regex(/^sha256:[a-f0-9]{64}$/),x=c.object({ref:s,digest:b}).strict(),v=x.extend({revision:c.number().int().positive()}).strict(),S=c.object({tenantRef:s,workspaceRef:s.optional(),spaceRef:s.optional(),subjectRef:s}).strict(),H=c.object({schemaVersion:c.literal(q),profileRef:s,revision:c.number().int().positive(),agentRef:s,applicationRef:s,scope:S,routeBindings:c.array(v),connectionRefs:c.array(s),preferenceSet:v,policyRefs:c.array(s).min(1),evidenceRefs:c.array(s).min(1),createdAt:E,updatedAt:E,profileDigest:b}).strict().superRefine((i,e)=>{for(let n of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(i[n]).size!==i[n].length)e.addIssue({code:c.ZodIssueCode.custom,path:[n],message:`${n} must be unique`});let t=i.routeBindings.map((n)=>n.ref);if(new Set(t).size!==t.length)e.addIssue({code:c.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),Y=c.object({schemaVersion:c.literal(L),linkRef:s,profile:v,agentRef:s,applicationRef:s,scope:S,runRef:s.optional(),taskRef:s.optional(),helpRequestRef:s.optional(),approvalRequestRef:s.optional(),backgroundResultRef:s.optional(),canonicalConversation:x.optional(),session:v.optional(),correlationRef:s,evidenceRefs:c.array(s).min(1)}).strict().superRefine((i,e)=>{if(new Set(i.evidenceRefs).size!==i.evidenceRefs.length)e.addIssue({code:c.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!i.runRef&&!i.taskRef&&!i.helpRequestRef&&!i.approvalRequestRef&&!i.backgroundResultRef)e.addIssue({code:c.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function m(i,e){return i.tenantRef===e.tenantRef&&i.workspaceRef===e.workspaceRef&&i.spaceRef===e.spaceRef&&i.subjectRef===e.subjectRef}function J(i){let e=[];for(let t of["agentRef","applicationRef"])if(i.profile[t]!==i.lifecycleLink[t])e.push(`Lifecycle ${t} does not match the agent profile`);if(i.lifecycleLink.profile.ref!==i.profile.profileRef||i.lifecycleLink.profile.revision!==i.profile.revision||i.lifecycleLink.profile.digest!==i.profile.profileDigest)e.push("Lifecycle profile binding does not match the agent profile");if(!m(i.profile.scope,i.lifecycleLink.scope))e.push("Lifecycle scope does not match the agent profile");return e}function A(i){let{intent:e,progress:t}=i,n=[];if(t.deliveryRef!==e.deliveryRef||t.intent.ref!==e.deliveryRef||t.intent.digest!==e.deliveryDigest)n.push("Progress delivery does not match the intent");if(!m(t.scope,e.scope))n.push("Progress scope does not match the intent");if(t.recipientRef!==e.recipientRefs[0])n.push("Progress recipient does not match the intent");let o=e.requestedRoutes.find((f)=>f.ref===t.route.ref);if(!o||o.revision!==t.route.revision||o.digest!==t.route.digest)n.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(e.createdAt)||Date.parse(t.occurredAt)>Date.parse(e.expiresAt))n.push("Progress occurred outside the intent validity window");return n}function I(i){let e=[],t=new Map(i.eligibilityDecisions.map((n)=>[n.eligibilityRef,n]));for(let n of i.decision.consideredRoutes){let o=t.get(n.eligibilityDecision.ref);if(!o||o.eligibilityDigest!==n.eligibilityDecision.digest||o.result!==n.eligibility)e.push(`Fallback eligibility result is stale: ${n.route.ref}`)}return e}import{z as a}from"zod";var N="1.0.0",z="communication:preference-target:platform-default",ie=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],te=a.enum(["event","automation","feature","application","product","space","person","platform_default"]),y=a.string().trim().min(1);function g(i){return a.object({kind:a.literal(i),ref:y}).strict()}var F=a.discriminatedUnion("kind",[g("event"),g("automation"),g("feature"),g("application"),g("product"),g("space"),g("person"),a.object({kind:a.literal("platform_default"),ref:a.literal(z)}).strict()]),M=a.object({preferenceSetRef:y,revision:a.number().int().positive(),digest:b,target:F}).strict(),ne=a.object({schemaVersion:a.literal(N),resolutionRef:y,scope:S,subjectRef:y,evaluatedPreferenceSets:a.array(M).min(1),winningPreferenceSetRef:y,winningTarget:F,authority:a.literal("preference_only"),effectAuthority:a.literal("none"),resolvedAt:a.string().datetime({offset:!0}),evidenceRefs:a.array(y).min(1),resolutionDigest:b}).strict().superRefine((i,e)=>{let t=i.evaluatedPreferenceSets.map((o)=>o.preferenceSetRef);if(new Set(t).size!==t.length)R(e,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(i.evidenceRefs).size!==i.evidenceRefs.length)R(e,"evidenceRefs","evidenceRefs must be unique");for(let o=1;o<i.evaluatedPreferenceSets.length;o+=1){let f=i.evaluatedPreferenceSets[o-1],r=i.evaluatedPreferenceSets[o];if(f&&r&&_(f.target.kind)>_(r.target.kind)){R(e,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let n=i.evaluatedPreferenceSets.find((o)=>o.preferenceSetRef===i.winningPreferenceSetRef);if(!n)R(e,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(n.preferenceSetRef!==i.evaluatedPreferenceSets[0]?.preferenceSetRef)R(e,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(n.target.kind!==i.winningTarget.kind||n.target.ref!==i.winningTarget.ref)R(e,"winningTarget","winning target must match the winning preference set")});function _(i){switch(i){case"event":case"automation":return 0;case"feature":case"application":return 1;case"product":return 2;case"space":case"person":return 3;case"platform_default":return 4}}function R(i,e,t){i.addIssue({code:a.ZodIssueCode.custom,path:[e],message:t})}function w(i){let{preferenceResolution:e,preferenceSet:t}=i,n=[];if(e.subjectRef!==t.scope.subjectRef||e.winningPreferenceSetRef!==t.preferenceSetRef)n.push("Preference resolution does not match its subject and set");if(!m(e.scope,t.scope))n.push("Preference resolution scope does not match its preference set");let o=e.evaluatedPreferenceSets.find((f)=>f.preferenceSetRef===t.preferenceSetRef);if(!o||o.revision!==t.revision||o.digest!==t.preferenceSetDigest)n.push("Preference resolution binding is stale");if(e.winningTarget.kind!==t.target.kind||e.winningTarget.ref!==t.target.ref)n.push("Preference resolution target does not match its preference set");return n}function j(i){let{decision:e,priorProgress:t}=i,n=[];if(e.priorOutcome!=="not_attempted"!==Boolean(t))n.push("Fallback prior outcome and progress presence do not match");if(!t)return n;if(e.priorAttemptRef!==t.attemptRef)n.push("Fallback prior attempt does not match progress");if(e.priorProgress?.ref!==t.progressRef||e.priorProgress?.digest!==t.progressDigest)n.push("Fallback prior progress binding does not match");let o=e.priorOutcome==="definitive_failure"?"failed":"ambiguous";if(t.status!==o)n.push("Fallback prior outcome does not match progress status");if((e.priorOutcome==="ambiguous"||e.priorOutcome==="reconciled_failure")&&(t.reconciliation?.ref!==e.reconciliation.binding?.ref||t.reconciliation?.digest!==e.reconciliation.binding?.digest))n.push("Fallback reconciliation does not match ambiguous progress");return n}function U(i){let e=[],t=new Map(i.decision.eligibilityDecisions.map((n)=>[n.ref,n.digest]));if(t.size!==i.decision.consideredRoutes.length||i.decision.consideredRoutes.some((n)=>t.get(n.eligibilityDecision.ref)!==n.eligibilityDecision.digest))e.push("Fallback eligibility evidence must exactly match considerations");for(let[n,o]of i.decision.consideredRoutes.entries())if(t.get(o.eligibilityDecision.ref)!==o.eligibilityDecision.digest)e.push(`Fallback route ${o.route.ref} lacks eligibility evidence`);else if(i.orderedRouteRefs[n]!==o.route.ref){e.push("Fallback considerations do not follow the configured order");break}return e}function ae(i){let{decision:e,intent:t,priorProgress:n,preferenceResolution:o,preferenceSet:f}=i,r=[];if(e.deliveryRef!==t.deliveryRef||e.intent.ref!==t.deliveryRef||e.intent.digest!==t.deliveryDigest)r.push("Fallback delivery does not match the intent");if(!m(e.scope,t.scope))r.push("Fallback scope does not match the intent");if(e.preferenceSet.ref!==t.preferenceSet.ref||e.preferenceSet.revision!==t.preferenceSet.revision||e.preferenceSet.digest!==t.preferenceSet.digest||e.preferenceSet.ref!==f.preferenceSetRef||e.preferenceSet.revision!==f.revision||e.preferenceSet.digest!==f.preferenceSetDigest)r.push("Fallback preferences do not match the intent and resolution");if(r.push(...w({preferenceResolution:o,preferenceSet:f})),i.eligibilityDecisions)r.push(...I({decision:e,eligibilityDecisions:i.eligibilityDecisions}));if(t.preferenceResolution.ref!==o.resolutionRef||t.preferenceResolution.digest!==o.resolutionDigest)r.push("Fallback preference resolution does not match the intent");let h=new Map(i.routes.map((l)=>[l.routeRef,l]));for(let l of e.consideredRoutes){let d=h.get(l.route.ref);if(!d||l.route.revision!==d.revision||l.route.digest!==d.routeDigest||!m(e.scope,d.scope))r.push(`Fallback route binding is stale: ${l.route.ref}`)}if(!m(e.scope,f.scope))r.push("Fallback scope does not match the preference set");if(r.push(...j({decision:e,priorProgress:n}),...U({decision:e,orderedRouteRefs:t.requestedRoutes.map((l)=>l.ref)})),n)r.push(...A({intent:t,progress:n}));if(e.recipientRef!==t.recipientRefs[0])r.push("Fallback recipient does not match the intent");if(K(i,r),e.policyRefs.some((l)=>!t.policyRefs.includes(l)))r.push("Fallback policy is not bound to the delivery intent");return r}function K(i,e){let{decision:t,intent:n,preferenceSet:o,priorProgress:f}=i;if(t.state!=="selected"||!t.selectedRoute)return;let r=t.selectedRoute.ref,h=n.requestedRoutes.map((u)=>u.ref),l=h.indexOf(r),d=o.routePreferences.find((u)=>u.routeRef===r),p=i.routes.find((u)=>u.routeRef===r),C=n.requestedRoutes.find((u)=>u.ref===r),P=f?h.indexOf(f.route.ref):-1,T=t.consideredRoutes.find((u)=>{let D=i.routes.find((V)=>V.routeRef===u.route.ref),B=o.routePreferences.find((V)=>V.routeRef===u.route.ref),O=n.noticeClass==="mandatory_notice"&&D?.channel==="in_app"&&D.deliveryMode==="durable_in_app";return u.eligibility==="eligible"&&h.indexOf(u.route.ref)>P&&(o.globalEnabled&&B?.enabled||O)}),k=n.noticeClass==="mandatory_notice"&&p?.channel==="in_app"&&p?.deliveryMode==="durable_in_app";if(!o.globalEnabled&&!k||!o.fallback.enabled||l<0||!o.fallback.orderedRouteRefs.includes(r)||!C||!d?.enabled&&!k||!p||p?.channel!==d?.channel||p.semantic!==n.semantic)e.push("Selected fallback route is not requested and eligible by configuration");if(t.selectedRoute.revision!==p?.revision||t.selectedRoute.digest!==p?.routeDigest||C?.revision!==p?.revision||C?.digest!==p?.routeDigest)e.push("Selected fallback route binding is stale");if(d?.consentRef&&!n.consentRefs.includes(d.consentRef))e.push("Selected fallback route lacks required consent");if(T?.route.ref!==r||t.consideredRoutes.length!==l+1)e.push("Selected fallback route is not the first eligible ordered route");if(f&&P>=l)e.push("Selected fallback route does not follow the prior attempt")}export{ae as validateCommunicationFallbackBindingV1,U as validateCommunicationFallbackConsiderationsV1,j as validateCommunicationFallbackPriorOutcomeBindingV1};
@@ -0,0 +1 @@
1
+ import{z as l}from"zod";import{z as a}from"zod";var j="1.0.0",U="1.0.0",ee={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},c=a.string().trim().min(1),I=a.string().datetime({offset:!0}),h=a.string().regex(/^sha256:[a-f0-9]{64}$/),y=a.object({ref:c,digest:h}).strict(),R=y.extend({revision:a.number().int().positive()}).strict(),C=a.object({tenantRef:c,workspaceRef:c.optional(),spaceRef:c.optional(),subjectRef:c}).strict(),ie=a.object({schemaVersion:a.literal(j),profileRef:c,revision:a.number().int().positive(),agentRef:c,applicationRef:c,scope:C,routeBindings:a.array(R),connectionRefs:a.array(c),preferenceSet:R,policyRefs:a.array(c).min(1),evidenceRefs:a.array(c).min(1),createdAt:I,updatedAt:I,profileDigest:h}).strict().superRefine((e,i)=>{for(let n of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[n]).size!==e[n].length)i.addIssue({code:a.ZodIssueCode.custom,path:[n],message:`${n} must be unique`});let t=e.routeBindings.map((n)=>n.ref);if(new Set(t).size!==t.length)i.addIssue({code:a.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),te=a.object({schemaVersion:a.literal(U),linkRef:c,profile:R,agentRef:c,applicationRef:c,scope:C,runRef:c.optional(),taskRef:c.optional(),helpRequestRef:c.optional(),approvalRequestRef:c.optional(),backgroundResultRef:c.optional(),canonicalConversation:y.optional(),session:R.optional(),correlationRef:c,evidenceRefs:a.array(c).min(1)}).strict().superRefine((e,i)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)i.addIssue({code:a.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)i.addIssue({code:a.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function b(e,i){return e.tenantRef===i.tenantRef&&e.workspaceRef===i.workspaceRef&&e.spaceRef===i.spaceRef&&e.subjectRef===i.subjectRef}function ne(e){let i=[];for(let t of["agentRef","applicationRef"])if(e.profile[t]!==e.lifecycleLink[t])i.push(`Lifecycle ${t} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)i.push("Lifecycle profile binding does not match the agent profile");if(!b(e.profile.scope,e.lifecycleLink.scope))i.push("Lifecycle scope does not match the agent profile");return i}function q(e){let{intent:i,progress:t}=e,n=[];if(t.deliveryRef!==i.deliveryRef||t.intent.ref!==i.deliveryRef||t.intent.digest!==i.deliveryDigest)n.push("Progress delivery does not match the intent");if(!b(t.scope,i.scope))n.push("Progress scope does not match the intent");if(t.recipientRef!==i.recipientRefs[0])n.push("Progress recipient does not match the intent");let o=i.requestedRoutes.find((s)=>s.ref===t.route.ref);if(!o||o.revision!==t.route.revision||o.digest!==t.route.digest)n.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(i.createdAt)||Date.parse(t.occurredAt)>Date.parse(i.expiresAt))n.push("Progress occurred outside the intent validity window");return n}function x(e){let i=[],t=new Map(e.eligibilityDecisions.map((n)=>[n.eligibilityRef,n]));for(let n of e.decision.consideredRoutes){let o=t.get(n.eligibilityDecision.ref);if(!o||o.eligibilityDigest!==n.eligibilityDecision.digest||o.result!==n.eligibility)i.push(`Fallback eligibility result is stale: ${n.route.ref}`)}return i}import{z as f}from"zod";var K="1.0.0",Z="communication:preference-target:platform-default",ae=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],le=f.enum(["event","automation","feature","application","product","space","person","platform_default"]),V=f.string().trim().min(1);function v(e){return f.object({kind:f.literal(e),ref:V}).strict()}var w=f.discriminatedUnion("kind",[v("event"),v("automation"),v("feature"),v("application"),v("product"),v("space"),v("person"),f.object({kind:f.literal("platform_default"),ref:f.literal(Z)}).strict()]),H=f.object({preferenceSetRef:V,revision:f.number().int().positive(),digest:h,target:w}).strict(),fe=f.object({schemaVersion:f.literal(K),resolutionRef:V,scope:C,subjectRef:V,evaluatedPreferenceSets:f.array(H).min(1),winningPreferenceSetRef:V,winningTarget:w,authority:f.literal("preference_only"),effectAuthority:f.literal("none"),resolvedAt:f.string().datetime({offset:!0}),evidenceRefs:f.array(V).min(1),resolutionDigest:h}).strict().superRefine((e,i)=>{let t=e.evaluatedPreferenceSets.map((o)=>o.preferenceSetRef);if(new Set(t).size!==t.length)S(i,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)S(i,"evidenceRefs","evidenceRefs must be unique");for(let o=1;o<e.evaluatedPreferenceSets.length;o+=1){let s=e.evaluatedPreferenceSets[o-1],r=e.evaluatedPreferenceSets[o];if(s&&r&&O(s.target.kind)>O(r.target.kind)){S(i,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let n=e.evaluatedPreferenceSets.find((o)=>o.preferenceSetRef===e.winningPreferenceSetRef);if(!n)S(i,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(n.preferenceSetRef!==e.evaluatedPreferenceSets[0]?.preferenceSetRef)S(i,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(n.target.kind!==e.winningTarget.kind||n.target.ref!==e.winningTarget.ref)S(i,"winningTarget","winning target must match the winning preference set")});function O(e){switch(e){case"event":case"automation":return 0;case"feature":case"application":return 1;case"product":return 2;case"space":case"person":return 3;case"platform_default":return 4}}function S(e,i,t){e.addIssue({code:f.ZodIssueCode.custom,path:[i],message:t})}function B(e){let{preferenceResolution:i,preferenceSet:t}=e,n=[];if(i.subjectRef!==t.scope.subjectRef||i.winningPreferenceSetRef!==t.preferenceSetRef)n.push("Preference resolution does not match its subject and set");if(!b(i.scope,t.scope))n.push("Preference resolution scope does not match its preference set");let o=i.evaluatedPreferenceSets.find((s)=>s.preferenceSetRef===t.preferenceSetRef);if(!o||o.revision!==t.revision||o.digest!==t.preferenceSetDigest)n.push("Preference resolution binding is stale");if(i.winningTarget.kind!==t.target.kind||i.winningTarget.ref!==t.target.ref)n.push("Preference resolution target does not match its preference set");return n}function T(e){let{decision:i,priorProgress:t}=e,n=[];if(i.priorOutcome!=="not_attempted"!==Boolean(t))n.push("Fallback prior outcome and progress presence do not match");if(!t)return n;if(i.priorAttemptRef!==t.attemptRef)n.push("Fallback prior attempt does not match progress");if(i.priorProgress?.ref!==t.progressRef||i.priorProgress?.digest!==t.progressDigest)n.push("Fallback prior progress binding does not match");let o=i.priorOutcome==="definitive_failure"?"failed":"ambiguous";if(t.status!==o)n.push("Fallback prior outcome does not match progress status");if((i.priorOutcome==="ambiguous"||i.priorOutcome==="reconciled_failure")&&(t.reconciliation?.ref!==i.reconciliation.binding?.ref||t.reconciliation?.digest!==i.reconciliation.binding?.digest))n.push("Fallback reconciliation does not match ambiguous progress");return n}function z(e){let i=[],t=new Map(e.decision.eligibilityDecisions.map((n)=>[n.ref,n.digest]));if(t.size!==e.decision.consideredRoutes.length||e.decision.consideredRoutes.some((n)=>t.get(n.eligibilityDecision.ref)!==n.eligibilityDecision.digest))i.push("Fallback eligibility evidence must exactly match considerations");for(let[n,o]of e.decision.consideredRoutes.entries())if(t.get(o.eligibilityDecision.ref)!==o.eligibilityDecision.digest)i.push(`Fallback route ${o.route.ref} lacks eligibility evidence`);else if(e.orderedRouteRefs[n]!==o.route.ref){i.push("Fallback considerations do not follow the configured order");break}return i}function G(e){let{decision:i,intent:t,priorProgress:n,preferenceResolution:o,preferenceSet:s}=e,r=[];if(i.deliveryRef!==t.deliveryRef||i.intent.ref!==t.deliveryRef||i.intent.digest!==t.deliveryDigest)r.push("Fallback delivery does not match the intent");if(!b(i.scope,t.scope))r.push("Fallback scope does not match the intent");if(i.preferenceSet.ref!==t.preferenceSet.ref||i.preferenceSet.revision!==t.preferenceSet.revision||i.preferenceSet.digest!==t.preferenceSet.digest||i.preferenceSet.ref!==s.preferenceSetRef||i.preferenceSet.revision!==s.revision||i.preferenceSet.digest!==s.preferenceSetDigest)r.push("Fallback preferences do not match the intent and resolution");if(r.push(...B({preferenceResolution:o,preferenceSet:s})),e.eligibilityDecisions)r.push(...x({decision:i,eligibilityDecisions:e.eligibilityDecisions}));if(t.preferenceResolution.ref!==o.resolutionRef||t.preferenceResolution.digest!==o.resolutionDigest)r.push("Fallback preference resolution does not match the intent");let P=new Map(e.routes.map((u)=>[u.routeRef,u]));for(let u of i.consideredRoutes){let p=P.get(u.route.ref);if(!p||u.route.revision!==p.revision||u.route.digest!==p.routeDigest||!b(i.scope,p.scope))r.push(`Fallback route binding is stale: ${u.route.ref}`)}if(!b(i.scope,s.scope))r.push("Fallback scope does not match the preference set");if(r.push(...T({decision:i,priorProgress:n}),...z({decision:i,orderedRouteRefs:t.requestedRoutes.map((u)=>u.ref)})),n)r.push(...q({intent:t,progress:n}));if(i.recipientRef!==t.recipientRefs[0])r.push("Fallback recipient does not match the intent");if(Y(e,r),i.policyRefs.some((u)=>!t.policyRefs.includes(u)))r.push("Fallback policy is not bound to the delivery intent");return r}function Y(e,i){let{decision:t,intent:n,preferenceSet:o,priorProgress:s}=e;if(t.state!=="selected"||!t.selectedRoute)return;let r=t.selectedRoute.ref,P=n.requestedRoutes.map((m)=>m.ref),u=P.indexOf(r),p=o.routePreferences.find((m)=>m.routeRef===r),g=e.routes.find((m)=>m.routeRef===r),D=n.requestedRoutes.find((m)=>m.ref===r),A=s?P.indexOf(s.route.ref):-1,L=t.consideredRoutes.find((m)=>{let F=e.routes.find((_)=>_.routeRef===m.route.ref),N=o.routePreferences.find((_)=>_.routeRef===m.route.ref),M=n.noticeClass==="mandatory_notice"&&F?.channel==="in_app"&&F.deliveryMode==="durable_in_app";return m.eligibility==="eligible"&&P.indexOf(m.route.ref)>A&&(o.globalEnabled&&N?.enabled||M)}),E=n.noticeClass==="mandatory_notice"&&g?.channel==="in_app"&&g?.deliveryMode==="durable_in_app";if(!o.globalEnabled&&!E||!o.fallback.enabled||u<0||!o.fallback.orderedRouteRefs.includes(r)||!D||!p?.enabled&&!E||!g||g?.channel!==p?.channel||g.semantic!==n.semantic)i.push("Selected fallback route is not requested and eligible by configuration");if(t.selectedRoute.revision!==g?.revision||t.selectedRoute.digest!==g?.routeDigest||D?.revision!==g?.revision||D?.digest!==g?.routeDigest)i.push("Selected fallback route binding is stale");if(p?.consentRef&&!n.consentRefs.includes(p.consentRef))i.push("Selected fallback route lacks required consent");if(L?.route.ref!==r||t.consideredRoutes.length!==u+1)i.push("Selected fallback route is not the first eligible ordered route");if(s&&A>=u)i.push("Selected fallback route does not follow the prior attempt")}var J="1.0.0",k=l.string().trim().min(1),Q=l.object({route:R,eligibility:l.enum(["eligible","ineligible","unknown"]),eligibilityDecision:y,reasonCodes:l.array(l.string().trim().min(1)).min(1)}).strict().superRefine((e,i)=>{if(new Set(e.reasonCodes).size!==e.reasonCodes.length)d(i,"reasonCodes","reason codes must be unique")}),W=l.object({status:l.enum(["not_required","pending","resolved"]),binding:y.optional()}).strict().superRefine((e,i)=>{if(e.status==="not_required"&&e.binding)i.addIssue({code:l.ZodIssueCode.custom,path:["binding"],message:"not_required reconciliation cannot carry a ref"});if(e.status!=="not_required"&&!e.binding)i.addIssue({code:l.ZodIssueCode.custom,path:["binding"],message:"pending or resolved reconciliation requires a ref"})}),be=l.object({schemaVersion:l.literal(J),decisionRef:k,fallbackDecisionDigest:h,deliveryRef:k,intent:y,scope:C,recipientRef:k,priorAttemptRef:k.optional(),priorProgress:y.optional(),priorOutcome:l.enum(["not_attempted","definitive_failure","ambiguous","reconciled_failure"]),state:l.enum(["selected","fail_closed","not_required"]),consideredRoutes:l.array(Q).min(1),selectedRoute:R.optional(),preferenceSet:R,eligibilityDecisions:l.array(y).min(1),policyRefs:l.array(k).min(1),reconciliation:W,effectAuthority:l.literal("none"),decidedAt:l.string().datetime({offset:!0}),evidenceRefs:l.array(k).min(1)}).strict().superRefine((e,i)=>{if(e.priorOutcome==="not_attempted"&&(e.priorAttemptRef||e.priorProgress))d(i,"priorAttemptRef","not-attempted fallback cannot reference a prior attempt");if(e.priorOutcome!=="not_attempted"&&(!e.priorAttemptRef||!e.priorProgress))d(i,"priorAttemptRef","attempted fallback outcomes require prior attempt and progress bindings");let t=e.consideredRoutes.map((o)=>o.route.ref);if(new Set(t).size!==t.length)d(i,"consideredRoutes","considered routes must be unique");for(let o of["policyRefs","evidenceRefs"])if(new Set(e[o]).size!==e[o].length)d(i,o,`${o} must be unique`);let n=e.eligibilityDecisions.map((o)=>o.ref);if(new Set(n).size!==n.length)d(i,"eligibilityDecisions","eligibility decisions must be unique");if(e.priorOutcome==="ambiguous"&&(e.state!=="fail_closed"||e.selectedRoute||e.reconciliation.status!=="pending"))d(i,"state","ambiguous delivery must remain fail closed until reclassified as a reconciled failure");if(e.priorOutcome==="reconciled_failure"&&e.reconciliation.status!=="resolved")d(i,"reconciliation","reconciled failure requires resolved reconciliation evidence");if((e.priorOutcome==="not_attempted"||e.priorOutcome==="definitive_failure")&&e.reconciliation.status!=="not_required")d(i,"reconciliation","non-ambiguous fallback must not carry reconciliation state");if(e.state==="selected"){let o=e.selectedRoute;if(!o)d(i,"selectedRoute","selected fallback requires a route");else if(!e.consideredRoutes.some((s)=>s.route.ref===o.ref&&s.route.revision===o.revision&&s.route.digest===o.digest&&s.eligibility==="eligible"))d(i,"selectedRoute","selected fallback route requires an explicit eligibility decision")}else if(e.selectedRoute)d(i,"selectedRoute","non-selected fallback decisions cannot carry a selected route")});function d(e,i,t){e.addIssue({code:l.ZodIssueCode.custom,path:[i],message:t})}export{J as COMMUNICATION_FALLBACK_DECISION_SCHEMA_VERSION,be as CommunicationFallbackDecisionV1Schema,W as CommunicationFallbackReconciliationV1Schema,Q as CommunicationFallbackRouteConsiderationV1Schema,G as validateCommunicationFallbackBindingV1,z as validateCommunicationFallbackConsiderationsV1,T as validateCommunicationFallbackPriorOutcomeBindingV1};
@@ -0,0 +1 @@
1
+ import{z as a}from"zod";var x="1.0.0",L="1.0.0",q={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},s=a.string().trim().min(1),C=a.string().datetime({offset:!0}),R=a.string().regex(/^sha256:[a-f0-9]{64}$/),P=a.object({ref:s,digest:R}).strict(),h=P.extend({revision:a.number().int().positive()}).strict(),S=a.object({tenantRef:s,workspaceRef:s.optional(),spaceRef:s.optional(),subjectRef:s}).strict(),N=a.object({schemaVersion:a.literal(x),profileRef:s,revision:a.number().int().positive(),agentRef:s,applicationRef:s,scope:S,routeBindings:a.array(h),connectionRefs:a.array(s),preferenceSet:h,policyRefs:a.array(s).min(1),evidenceRefs:a.array(s).min(1),createdAt:C,updatedAt:C,profileDigest:R}).strict().superRefine((n,e)=>{for(let i of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(n[i]).size!==n[i].length)e.addIssue({code:a.ZodIssueCode.custom,path:[i],message:`${i} must be unique`});let t=n.routeBindings.map((i)=>i.ref);if(new Set(t).size!==t.length)e.addIssue({code:a.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),O=a.object({schemaVersion:a.literal(L),linkRef:s,profile:h,agentRef:s,applicationRef:s,scope:S,runRef:s.optional(),taskRef:s.optional(),helpRequestRef:s.optional(),approvalRequestRef:s.optional(),backgroundResultRef:s.optional(),canonicalConversation:P.optional(),session:h.optional(),correlationRef:s,evidenceRefs:a.array(s).min(1)}).strict().superRefine((n,e)=>{if(new Set(n.evidenceRefs).size!==n.evidenceRefs.length)e.addIssue({code:a.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!n.runRef&&!n.taskRef&&!n.helpRequestRef&&!n.approvalRequestRef&&!n.backgroundResultRef)e.addIssue({code:a.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function p(n,e){return n.tenantRef===e.tenantRef&&n.workspaceRef===e.workspaceRef&&n.spaceRef===e.spaceRef&&n.subjectRef===e.subjectRef}function V(n){let e=[];for(let t of["agentRef","applicationRef"])if(n.profile[t]!==n.lifecycleLink[t])e.push(`Lifecycle ${t} does not match the agent profile`);if(n.lifecycleLink.profile.ref!==n.profile.profileRef||n.lifecycleLink.profile.revision!==n.profile.revision||n.lifecycleLink.profile.digest!==n.profile.profileDigest)e.push("Lifecycle profile binding does not match the agent profile");if(!p(n.profile.scope,n.lifecycleLink.scope))e.push("Lifecycle scope does not match the agent profile");return e}function z(n){let{intent:e,progress:t}=n,i=[];if(t.deliveryRef!==e.deliveryRef||t.intent.ref!==e.deliveryRef||t.intent.digest!==e.deliveryDigest)i.push("Progress delivery does not match the intent");if(!p(t.scope,e.scope))i.push("Progress scope does not match the intent");if(t.recipientRef!==e.recipientRefs[0])i.push("Progress recipient does not match the intent");let r=e.requestedRoutes.find((o)=>o.ref===t.route.ref);if(!r||r.revision!==t.route.revision||r.digest!==t.route.digest)i.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(e.createdAt)||Date.parse(t.occurredAt)>Date.parse(e.expiresAt))i.push("Progress occurred outside the intent validity window");return i}import{z as f}from"zod";var T="1.0.0",D="communication:preference-target:platform-default",F=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],K=f.enum(["event","automation","feature","application","product","space","person","platform_default"]),g=f.string().trim().min(1);function m(n){return f.object({kind:f.literal(n),ref:g}).strict()}var I=f.discriminatedUnion("kind",[m("event"),m("automation"),m("feature"),m("application"),m("product"),m("space"),m("person"),f.object({kind:f.literal("platform_default"),ref:f.literal(D)}).strict()]),B=f.object({preferenceSetRef:g,revision:f.number().int().positive(),digest:R,target:I}).strict(),Z=f.object({schemaVersion:f.literal(T),resolutionRef:g,scope:S,subjectRef:g,evaluatedPreferenceSets:f.array(B).min(1),winningPreferenceSetRef:g,winningTarget:I,authority:f.literal("preference_only"),effectAuthority:f.literal("none"),resolvedAt:f.string().datetime({offset:!0}),evidenceRefs:f.array(g).min(1),resolutionDigest:R}).strict().superRefine((n,e)=>{let t=n.evaluatedPreferenceSets.map((r)=>r.preferenceSetRef);if(new Set(t).size!==t.length)d(e,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(n.evidenceRefs).size!==n.evidenceRefs.length)d(e,"evidenceRefs","evidenceRefs must be unique");for(let r=1;r<n.evaluatedPreferenceSets.length;r+=1){let o=n.evaluatedPreferenceSets[r-1],l=n.evaluatedPreferenceSets[r];if(o&&l&&b(o.target.kind)>b(l.target.kind)){d(e,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let i=n.evaluatedPreferenceSets.find((r)=>r.preferenceSetRef===n.winningPreferenceSetRef);if(!i)d(e,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(i.preferenceSetRef!==n.evaluatedPreferenceSets[0]?.preferenceSetRef)d(e,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(i.target.kind!==n.winningTarget.kind||i.target.ref!==n.winningTarget.ref)d(e,"winningTarget","winning target must match the winning preference set")});function b(n){switch(n){case"event":case"automation":return 0;case"feature":case"application":return 1;case"product":return 2;case"space":case"person":return 3;case"platform_default":return 4}}function d(n,e,t){n.addIssue({code:f.ZodIssueCode.custom,path:[e],message:t})}function A(n){let{preferenceResolution:e,preferenceSet:t}=n,i=[];if(e.subjectRef!==t.scope.subjectRef||e.winningPreferenceSetRef!==t.preferenceSetRef)i.push("Preference resolution does not match its subject and set");if(!p(e.scope,t.scope))i.push("Preference resolution scope does not match its preference set");let r=e.evaluatedPreferenceSets.find((o)=>o.preferenceSetRef===t.preferenceSetRef);if(!r||r.revision!==t.revision||r.digest!==t.preferenceSetDigest)i.push("Preference resolution binding is stale");if(e.winningTarget.kind!==t.target.kind||e.winningTarget.ref!==t.target.ref)i.push("Preference resolution target does not match its preference set");return i}function J(n){let{intent:e,profile:t,preferenceSet:i,preferenceResolution:r}=n,o=[];if(!p(e.scope,t.scope))o.push("Intent scope does not match the agent profile");if(!p(e.scope,i.scope))o.push("Intent scope does not match the preference set");if(e.lifecycleLink){if(o.push(...V({profile:t,lifecycleLink:e.lifecycleLink})),!p(e.scope,e.lifecycleLink.scope))o.push("Intent scope does not match the lifecycle link")}if(e.profile.ref!==t.profileRef||e.profile.revision!==t.revision||e.profile.digest!==t.profileDigest)o.push("Intent profile binding is stale");if(e.preferenceSet.ref!==i.preferenceSetRef||e.preferenceSet.revision!==i.revision||e.preferenceSet.digest!==i.preferenceSetDigest)o.push("Intent preference set does not match its preferences");let l=r.evaluatedPreferenceSets.find((c)=>c.preferenceSetRef===t.preferenceSet.ref);if(!l||l.revision!==t.preferenceSet.revision||l.digest!==t.preferenceSet.digest)o.push("Agent profile preference set was not evaluated");if(o.push(...A({preferenceResolution:r,preferenceSet:i})),e.preferenceResolution.ref!==r.resolutionRef||e.preferenceResolution.digest!==r.resolutionDigest)o.push("Intent preference resolution binding is stale");if(r.subjectRef!==e.scope.subjectRef)o.push("Preference resolution does not bind the intent subject");if(e.classificationRefs.applicationRef&&e.classificationRefs.applicationRef!==t.applicationRef)o.push("Intent application classification does not match the profile");if(e.policyRefs.some((c)=>!t.policyRefs.includes(c)))o.push("Intent policy is not bound to the agent profile");let E=new Map(n.routes.map((c)=>[c.routeRef,c])),k=new Map(i.routePreferences.map((c)=>[c.routeRef,c]));for(let c of e.requestedRoutes){let u=E.get(c.ref),y=t.routeBindings.find((w)=>w.ref===c.ref),v=k.get(c.ref);if(!u||!y){o.push(`Requested route ${c.ref} is not bound to the profile`);continue}if(c.revision!==u.revision||c.digest!==u.routeDigest||y.revision!==u.revision||y.digest!==u.routeDigest)o.push(`Requested route ${c.ref} binding is stale`);if(!p(e.scope,u.scope))o.push(`Requested route ${c.ref} scope does not match`);if(u.semantic!==e.semantic)o.push(`Requested route ${c.ref} has incompatible semantics`);if(!v||v.channel!==u.channel)o.push(`Requested route ${c.ref} is not configured by preferences`)}if(!i.globalEnabled&&e.noticeClass!=="mandatory_notice")o.push("Intent preference set is globally disabled");return o}export{J as validateCommunicationDeliveryIntentBindingV1};
@@ -0,0 +1 @@
1
+ import{z as m}from"zod";import{z as f}from"zod";var F="1.0.0",H="1.0.0",ue={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},s=f.string().trim().min(1),T=f.string().datetime({offset:!0}),g=f.string().regex(/^sha256:[a-f0-9]{64}$/),A=f.object({ref:s,digest:g}).strict(),h=A.extend({revision:f.number().int().positive()}).strict(),C=f.object({tenantRef:s,workspaceRef:s.optional(),spaceRef:s.optional(),subjectRef:s}).strict(),pe=f.object({schemaVersion:f.literal(F),profileRef:s,revision:f.number().int().positive(),agentRef:s,applicationRef:s,scope:C,routeBindings:f.array(h),connectionRefs:f.array(s),preferenceSet:h,policyRefs:f.array(s).min(1),evidenceRefs:f.array(s).min(1),createdAt:T,updatedAt:T,profileDigest:g}).strict().superRefine((e,n)=>{for(let o of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[o]).size!==e[o].length)n.addIssue({code:f.ZodIssueCode.custom,path:[o],message:`${o} must be unique`});let t=e.routeBindings.map((o)=>o.ref);if(new Set(t).size!==t.length)n.addIssue({code:f.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),D=f.object({schemaVersion:f.literal(H),linkRef:s,profile:h,agentRef:s,applicationRef:s,scope:C,runRef:s.optional(),taskRef:s.optional(),helpRequestRef:s.optional(),approvalRequestRef:s.optional(),backgroundResultRef:s.optional(),canonicalConversation:A.optional(),session:h.optional(),correlationRef:s,evidenceRefs:f.array(s).min(1)}).strict().superRefine((e,n)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)n.addIssue({code:f.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)n.addIssue({code:f.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function R(e,n){return e.tenantRef===n.tenantRef&&e.workspaceRef===n.workspaceRef&&e.spaceRef===n.spaceRef&&e.subjectRef===n.subjectRef}function O(e){let n=[];for(let t of["agentRef","applicationRef"])if(e.profile[t]!==e.lifecycleLink[t])n.push(`Lifecycle ${t} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)n.push("Lifecycle profile binding does not match the agent profile");if(!R(e.profile.scope,e.lifecycleLink.scope))n.push("Lifecycle scope does not match the agent profile");return n}function le(e){let{intent:n,progress:t}=e,o=[];if(t.deliveryRef!==n.deliveryRef||t.intent.ref!==n.deliveryRef||t.intent.digest!==n.deliveryDigest)o.push("Progress delivery does not match the intent");if(!R(t.scope,n.scope))o.push("Progress scope does not match the intent");if(t.recipientRef!==n.recipientRefs[0])o.push("Progress recipient does not match the intent");let c=n.requestedRoutes.find((i)=>i.ref===t.route.ref);if(!c||c.revision!==t.route.revision||c.digest!==t.route.digest)o.push("Progress route was not requested by the intent");if(Date.parse(t.occurredAt)<Date.parse(n.createdAt)||Date.parse(t.occurredAt)>Date.parse(n.expiresAt))o.push("Progress occurred outside the intent validity window");return o}import{z as d}from"zod";var G="1.0.0",Y=["email","calendar","sms","slack","teams","discord","telegram","whatsapp","matrix","in_app","push","webhook","web_chat","internal_chat"],Q=d.string().trim().min(1),ye=d.enum(Y),x=d.enum(["communication","calendar_event"]),P=d.string().trim().min(1),he=d.object({schemaVersion:d.literal(G),routeRef:P,revision:d.number().int().positive(),scope:C,channel:Q,destinationRef:P,connectionRef:P.optional(),semantic:x,deliveryMode:d.enum(["direct","durable_in_app"]),capabilityRefs:d.array(P),evidenceRefs:d.array(P).min(1),routeDigest:g}).strict().superRefine((e,n)=>{if(e.channel==="calendar"!==(e.semantic==="calendar_event"))n.addIssue({code:d.ZodIssueCode.custom,path:["semantic"],message:"calendar routes require calendar_event semantics and calendar_event routes require the calendar channel"});for(let t of["capabilityRefs","evidenceRefs"])if(new Set(e[t]).size!==e[t].length)n.addIssue({code:d.ZodIssueCode.custom,path:[t],message:`${t} must be unique`})});import{z as r}from"zod";var p=r.string().min(1),_=r.string().datetime({offset:!0}),ve="1.0.0",Ie="communication.sequence-intent.v1|sequence,action-packet,recipient,content-proof,channel,side-effect,schedule,expiry,approval,policy|approval-bound,provider-neutral",Ve="sha256:7ef776396727b0e7ee015935d8f7d5f4605a08b815f6493aa737411490edc633",W="1.0.0",Pe="communicationSequenceApprovalTarget",Ae="communicationSequenceApprovalFingerprint",J="communication-sequence-approval:",b=r.object({contentRef:p,sha256:r.string().regex(/^[a-f0-9]{64}$/)}),X=r.object({body:r.string(),subject:r.string().optional(),htmlBody:r.string().optional(),replyToExternalMessageId:r.string().optional()}),k=r.object({notBefore:_,maxAttempts:r.number().int().positive(),retryDelayMs:r.number().int().nonnegative()}),w=r.object({policyRefs:r.array(p).min(1),consentRef:p,killSwitchRef:p}),ee=r.object({schemaVersion:r.literal(W),sequenceRef:p,sequenceVersion:p,tenantRef:p,recipientRefs:r.array(p).min(1),contentProof:b,channel:p,sideEffect:r.literal("send_reply"),schedulePolicyVersion:p,schedulePolicy:k,policyVersion:p,policy:w,expiresAt:_}).superRefine((e,n)=>{if(new Set(e.recipientRefs).size!==e.recipientRefs.length)n.addIssue({code:r.ZodIssueCode.custom,message:"recipientRefs must be unique",path:["recipientRefs"]});if(Date.parse(e.expiresAt)<=Date.parse(e.schedulePolicy.notBefore))n.addIssue({code:r.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});function N(e){if(Array.isArray(e))return`[${e.map(N).join(",")}]`;if(e&&typeof e==="object")return`{${Object.entries(e).sort(([n],[t])=>n.localeCompare(t)).map(([n,t])=>`${JSON.stringify(n)}:${N(t)}`).join(",")}}`;return JSON.stringify(e)}async function L(e){let n=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(N(e)));return Array.from(new Uint8Array(n),(t)=>t.toString(16).padStart(2,"0")).join("")}async function be(e){let n=X.parse(e);return L({body:n.body,htmlBody:n.htmlBody??null,replyToExternalMessageId:n.replyToExternalMessageId??null,subject:n.subject??null})}async function Ee(e){let n=ee.parse(e);return`sha256:${await L(n)}`}function xe(e){return`${J}${e}`}var Ne=r.object({sequenceRef:p,actionPacketRef:p,recipientRef:p,contentProof:b,channel:p,sideEffect:r.literal("send_reply"),schedulePolicy:k,expiresAt:_,approvalRequestId:p,approvalFingerprint:p,policy:w}).superRefine((e,n)=>{if(Date.parse(e.expiresAt)<=Date.parse(e.schedulePolicy.notBefore))n.addIssue({code:r.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});import{z as u}from"zod";var ne="1.0.0",te="communication:preference-target:platform-default",De=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],Oe=u.enum(["event","automation","feature","application","product","space","person","platform_default"]),V=u.string().trim().min(1);function S(e){return u.object({kind:u.literal(e),ref:V}).strict()}var B=u.discriminatedUnion("kind",[S("event"),S("automation"),S("feature"),S("application"),S("product"),S("space"),S("person"),u.object({kind:u.literal("platform_default"),ref:u.literal(te)}).strict()]),oe=u.object({preferenceSetRef:V,revision:u.number().int().positive(),digest:g,target:B}).strict(),ke=u.object({schemaVersion:u.literal(ne),resolutionRef:V,scope:C,subjectRef:V,evaluatedPreferenceSets:u.array(oe).min(1),winningPreferenceSetRef:V,winningTarget:B,authority:u.literal("preference_only"),effectAuthority:u.literal("none"),resolvedAt:u.string().datetime({offset:!0}),evidenceRefs:u.array(V).min(1),resolutionDigest:g}).strict().superRefine((e,n)=>{let t=e.evaluatedPreferenceSets.map((c)=>c.preferenceSetRef);if(new Set(t).size!==t.length)I(n,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)I(n,"evidenceRefs","evidenceRefs must be unique");for(let c=1;c<e.evaluatedPreferenceSets.length;c+=1){let i=e.evaluatedPreferenceSets[c-1],v=e.evaluatedPreferenceSets[c];if(i&&v&&M(i.target.kind)>M(v.target.kind)){I(n,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let o=e.evaluatedPreferenceSets.find((c)=>c.preferenceSetRef===e.winningPreferenceSetRef);if(!o)I(n,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(o.preferenceSetRef!==e.evaluatedPreferenceSets[0]?.preferenceSetRef)I(n,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(o.target.kind!==e.winningTarget.kind||o.target.ref!==e.winningTarget.ref)I(n,"winningTarget","winning target must match the winning preference set")});function M(e){switch(e){case"event":case"automation":return 0;case"feature":case"application":return 1;case"product":return 2;case"space":case"person":return 3;case"platform_default":return 4}}function I(e,n,t){e.addIssue({code:u.ZodIssueCode.custom,path:[n],message:t})}function z(e){let{preferenceResolution:n,preferenceSet:t}=e,o=[];if(n.subjectRef!==t.scope.subjectRef||n.winningPreferenceSetRef!==t.preferenceSetRef)o.push("Preference resolution does not match its subject and set");if(!R(n.scope,t.scope))o.push("Preference resolution scope does not match its preference set");let c=n.evaluatedPreferenceSets.find((i)=>i.preferenceSetRef===t.preferenceSetRef);if(!c||c.revision!==t.revision||c.digest!==t.preferenceSetDigest)o.push("Preference resolution binding is stale");if(n.winningTarget.kind!==t.target.kind||n.winningTarget.ref!==t.target.ref)o.push("Preference resolution target does not match its preference set");return o}function ie(e){let{intent:n,profile:t,preferenceSet:o,preferenceResolution:c}=e,i=[];if(!R(n.scope,t.scope))i.push("Intent scope does not match the agent profile");if(!R(n.scope,o.scope))i.push("Intent scope does not match the preference set");if(n.lifecycleLink){if(i.push(...O({profile:t,lifecycleLink:n.lifecycleLink})),!R(n.scope,n.lifecycleLink.scope))i.push("Intent scope does not match the lifecycle link")}if(n.profile.ref!==t.profileRef||n.profile.revision!==t.revision||n.profile.digest!==t.profileDigest)i.push("Intent profile binding is stale");if(n.preferenceSet.ref!==o.preferenceSetRef||n.preferenceSet.revision!==o.revision||n.preferenceSet.digest!==o.preferenceSetDigest)i.push("Intent preference set does not match its preferences");let v=c.evaluatedPreferenceSets.find((a)=>a.preferenceSetRef===t.preferenceSet.ref);if(!v||v.revision!==t.preferenceSet.revision||v.digest!==t.preferenceSet.digest)i.push("Agent profile preference set was not evaluated");if(i.push(...z({preferenceResolution:c,preferenceSet:o})),n.preferenceResolution.ref!==c.resolutionRef||n.preferenceResolution.digest!==c.resolutionDigest)i.push("Intent preference resolution binding is stale");if(c.subjectRef!==n.scope.subjectRef)i.push("Preference resolution does not bind the intent subject");if(n.classificationRefs.applicationRef&&n.classificationRefs.applicationRef!==t.applicationRef)i.push("Intent application classification does not match the profile");if(n.policyRefs.some((a)=>!t.policyRefs.includes(a)))i.push("Intent policy is not bound to the agent profile");let U=new Map(e.routes.map((a)=>[a.routeRef,a])),K=new Map(o.routePreferences.map((a)=>[a.routeRef,a]));for(let a of n.requestedRoutes){let y=U.get(a.ref),E=t.routeBindings.find((Z)=>Z.ref===a.ref),q=K.get(a.ref);if(!y||!E){i.push(`Requested route ${a.ref} is not bound to the profile`);continue}if(a.revision!==y.revision||a.digest!==y.routeDigest||E.revision!==y.revision||E.digest!==y.routeDigest)i.push(`Requested route ${a.ref} binding is stale`);if(!R(n.scope,y.scope))i.push(`Requested route ${a.ref} scope does not match`);if(y.semantic!==n.semantic)i.push(`Requested route ${a.ref} has incompatible semantics`);if(!q||q.channel!==y.channel)i.push(`Requested route ${a.ref} is not configured by preferences`)}if(!o.globalEnabled&&n.noticeClass!=="mandatory_notice")i.push("Intent preference set is globally disabled");return i}var re="1.0.0",l=m.string().trim().min(1),j=m.string().datetime({offset:!0}),ce=b.extend({contentRef:l}).strict(),se=m.object({eventRef:l.optional(),automationRef:l.optional(),featureRef:l.optional(),applicationRef:l.optional(),productRef:l.optional()}).strict().superRefine((e,n)=>{if(!Object.values(e).some(Boolean))n.addIssue({code:m.ZodIssueCode.custom,message:"at least one delivery classification ref is required"})}),ae=m.object({kind:m.enum(["agent","notification","automation","system"]),sourceRef:l}).strict(),fe=m.enum(["user_selected","mandatory_notice"]),$e=m.object({schemaVersion:m.literal(re),deliveryRef:l,deliveryDigest:g,scope:C,source:ae,noticeClass:fe.optional(),profile:h,semantic:x,classificationRefs:se,lifecycleLink:D.optional(),recipientRefs:m.array(l).length(1),contentProof:ce,requestedRoutes:m.array(h).min(1),preferenceSet:h,preferenceResolution:A,consentRefs:m.array(l),policyRefs:m.array(l).min(1),approvalRequestRef:l.optional(),idempotencyKey:l,effectAuthority:m.literal("none"),createdAt:j,expiresAt:j,evidenceRefs:m.array(l).min(1)}).strict().superRefine((e,n)=>{if(e.source.kind==="agent"&&!e.lifecycleLink)n.addIssue({code:m.ZodIssueCode.custom,path:["lifecycleLink"],message:"agent delivery requires an agent lifecycle link"});for(let o of["recipientRefs","consentRefs","policyRefs","evidenceRefs"])if(new Set(e[o]).size!==e[o].length)n.addIssue({code:m.ZodIssueCode.custom,path:[o],message:`${o} must be unique`});let t=e.requestedRoutes.map((o)=>o.ref);if(new Set(t).size!==t.length)n.addIssue({code:m.ZodIssueCode.custom,path:["requestedRoutes"],message:"requested routes must be unique"});if(e.recipientRefs[0]!==e.scope.subjectRef)n.addIssue({code:m.ZodIssueCode.custom,path:["recipientRefs"],message:"V1 delivery requires exactly the scoped recipient"});if(Date.parse(e.expiresAt)<=Date.parse(e.createdAt))n.addIssue({code:m.ZodIssueCode.custom,path:["expiresAt"],message:"expiresAt must be later than createdAt"})});export{re as COMMUNICATION_DELIVERY_INTENT_SCHEMA_VERSION,se as CommunicationDeliveryClassificationRefsV1Schema,ce as CommunicationDeliveryContentProofV1Schema,$e as CommunicationDeliveryIntentV1Schema,fe as CommunicationDeliveryNoticeClassV1Schema,ae as CommunicationDeliverySourceV1Schema,ie as validateCommunicationDeliveryIntentBindingV1};
@@ -0,0 +1 @@
1
+ import{z as c}from"zod";import{z as o}from"zod";var g="1.0.0",v="1.0.0",V={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},t=o.string().trim().min(1),l=o.string().datetime({offset:!0}),d=o.string().regex(/^sha256:[a-f0-9]{64}$/),p=o.object({ref:t,digest:d}).strict(),f=p.extend({revision:o.number().int().positive()}).strict(),m=o.object({tenantRef:t,workspaceRef:t.optional(),spaceRef:t.optional(),subjectRef:t}).strict(),A=o.object({schemaVersion:o.literal(g),profileRef:t,revision:o.number().int().positive(),agentRef:t,applicationRef:t,scope:m,routeBindings:o.array(f),connectionRefs:o.array(t),preferenceSet:f,policyRefs:o.array(t).min(1),evidenceRefs:o.array(t).min(1),createdAt:l,updatedAt:l,profileDigest:d}).strict().superRefine((e,i)=>{for(let r of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[r]).size!==e[r].length)i.addIssue({code:o.ZodIssueCode.custom,path:[r],message:`${r} must be unique`});let n=e.routeBindings.map((r)=>r.ref);if(new Set(n).size!==n.length)i.addIssue({code:o.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),b=o.object({schemaVersion:o.literal(v),linkRef:t,profile:f,agentRef:t,applicationRef:t,scope:m,runRef:t.optional(),taskRef:t.optional(),helpRequestRef:t.optional(),approvalRequestRef:t.optional(),backgroundResultRef:t.optional(),canonicalConversation:p.optional(),session:f.optional(),correlationRef:t,evidenceRefs:o.array(t).min(1)}).strict().superRefine((e,i)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)i.addIssue({code:o.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)i.addIssue({code:o.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function R(e,i){return e.tenantRef===i.tenantRef&&e.workspaceRef===i.workspaceRef&&e.spaceRef===i.spaceRef&&e.subjectRef===i.subjectRef}function I(e){let i=[];for(let n of["agentRef","applicationRef"])if(e.profile[n]!==e.lifecycleLink[n])i.push(`Lifecycle ${n} does not match the agent profile`);if(e.lifecycleLink.profile.ref!==e.profile.profileRef||e.lifecycleLink.profile.revision!==e.profile.revision||e.lifecycleLink.profile.digest!==e.profile.profileDigest)i.push("Lifecycle profile binding does not match the agent profile");if(!R(e.profile.scope,e.lifecycleLink.scope))i.push("Lifecycle scope does not match the agent profile");return i}function D(e){let{intent:i,progress:n}=e,r=[];if(n.deliveryRef!==i.deliveryRef||n.intent.ref!==i.deliveryRef||n.intent.digest!==i.deliveryDigest)r.push("Progress delivery does not match the intent");if(!R(n.scope,i.scope))r.push("Progress scope does not match the intent");if(n.recipientRef!==i.recipientRefs[0])r.push("Progress recipient does not match the intent");let u=i.requestedRoutes.find((y)=>y.ref===n.route.ref);if(!u||u.revision!==n.route.revision||u.digest!==n.route.digest)r.push("Progress route was not requested by the intent");if(Date.parse(n.occurredAt)<Date.parse(i.createdAt)||Date.parse(n.occurredAt)>Date.parse(i.expiresAt))r.push("Progress occurred outside the intent validity window");return r}var h="1.0.0",C=c.enum(["queued","dispatched","provider_accepted","delivered","read","failed","ambiguous","cancelled","policy_blocked"]),s=c.string().trim().min(1),q=c.object({schemaVersion:c.literal(h),progressRef:s,progressDigest:d,deliveryRef:s,intent:p,scope:m,recipientRef:s,attemptRef:s,route:f,status:C,providerReceiptRef:s.optional(),deliveryReceiptRef:s.optional(),readReceiptRef:s.optional(),reconciliation:p.optional(),failureCode:c.string().trim().min(1).optional(),effectAuthority:c.literal("none"),occurredAt:c.string().datetime({offset:!0}),evidenceRefs:c.array(s).min(1)}).strict().superRefine((e,i)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)a(i,"evidenceRefs","evidenceRefs must be unique");if(e.status==="provider_accepted"){if(!e.providerReceiptRef)a(i,"providerReceiptRef","provider acceptance requires a receipt");if(e.deliveryReceiptRef||e.readReceiptRef)a(i,"deliveryReceiptRef","provider acceptance is not delivery or read confirmation")}if(e.status==="delivered"&&!e.deliveryReceiptRef)a(i,"deliveryReceiptRef","delivery requires a delivery receipt");if(e.deliveryReceiptRef&&e.status!=="delivered"&&e.status!=="read")a(i,"deliveryReceiptRef","delivery receipt is valid only for delivered or read progress");if(e.readReceiptRef&&e.status!=="read")a(i,"readReceiptRef","read receipt is valid only for read progress");if(e.status==="read"&&(!e.deliveryReceiptRef||!e.readReceiptRef))a(i,"readReceiptRef","read requires delivery and read receipts");if(e.status==="ambiguous"&&!e.reconciliation)a(i,"reconciliation","ambiguous progress requires a reconciliation ref")});function a(e,i,n){e.addIssue({code:c.ZodIssueCode.custom,path:[i],message:n})}export{h as COMMUNICATION_DELIVERY_PROGRESS_SCHEMA_VERSION,C as CommunicationDeliveryProgressStatusSchema,q as CommunicationDeliveryProgressV1Schema};
@@ -0,0 +1 @@
1
+ import{defineQuery as t,docId as y}from"@lssm/lib.contracts-spec";import{defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";import{z as i}from"zod";var m={id:"communication-os.discord-community-intelligence.v1",title:"Multi-guild Discord community intelligence",body:"Additive contracts for policy-scoped Discord guild monitoring, protected provider events, governed identity correlation, evidence-backed community insights, coaching scorecards, and Kaizen digests. Raw staff content never enters cross-guild projections.",kind:"reference",route:"/docs/communication-os/discord-community-intelligence-v1",visibility:"public"},d=i.enum(["staff","managed-community"]),g=i.enum(["pending","active","degraded","revoked"]),C=i.object({id:i.string().min(1),tenantId:i.string().min(1),workspaceId:i.string().min(1),spaceId:i.string().min(1),network:i.literal("discord"),guildId:i.string().min(1),name:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),trustZone:d,status:g,policyRef:i.string().min(1),retentionPolicyRef:i.string().min(1),createdAt:i.string().datetime(),updatedAt:i.string().datetime()}).strict(),I=i.object({id:i.string().min(1),sourceId:i.string().min(1),guildId:i.string().min(1),applicationId:i.string().min(1),botUserId:i.string().min(1),credentialRef:i.string().min(1),declaredIntents:i.array(i.string().min(1)),verifiedPermissions:i.array(i.string().min(1)),allowedChannelIds:i.array(i.string().min(1)),excludedChannelIds:i.array(i.string().min(1)),backfillDays:i.number().int().min(0).max(90),health:i.enum(["pending","healthy","degraded","offline","revoked"]),installationEvidenceRefs:i.array(i.string().min(1)).min(1),lastVerifiedAt:i.string().datetime().optional()}).strict(),V=i.object({id:i.string().min(1),tenantId:i.string().min(1),provider:i.literal("discord"),providerUserId:i.string().min(1),canonicalPrincipalRef:i.string().min(1).optional(),guildMemberships:i.array(i.object({guildId:i.string().min(1),roleIds:i.array(i.string().min(1)),state:i.enum(["active","left","banned"]),observedAt:i.string().datetime()}).strict()),mergeEvidence:i.array(i.object({providerUserId:i.string().min(1),decision:i.literal("approved"),decidedByPrincipalRef:i.string().min(1),evidenceRef:i.string().min(1),decidedAt:i.string().datetime()}).strict())}).strict(),b=i.object({id:i.string().min(1),schemaVersion:i.literal("2.0.0"),sourceId:i.string().min(1),trustZone:d,guildId:i.string().min(1),channelId:i.string().min(1).optional(),threadId:i.string().min(1).optional(),actorProviderUserId:i.string().min(1).optional(),eventKind:i.string().min(1),gatewaySessionId:i.string().min(1).optional(),gatewaySequence:i.number().int().nonnegative().optional(),providerEventId:i.string().min(1),occurredAt:i.string().datetime(),protectedContent:i.object({ciphertextRef:i.string().min(1),digest:i.string().min(1),redactionStatus:i.enum(["pending","applied","not_required"])}).strict().optional(),metadata:i.record(i.string(),i.string()),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),s=i.object({sourceIds:i.array(i.string().min(1)).min(1),windowStart:i.string().datetime(),windowEnd:i.string().datetime(),confidence:i.number().min(0).max(1),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),x=s.extend({id:i.string().min(1),kind:i.enum(["recurring_question","pain_point","friction_trend","emerging_topic","response_gap","moderation_pattern"]),title:i.string().min(1),summary:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),metricValue:i.number().optional()}).strict(),D=s.extend({id:i.string().min(1),staffPrincipalRef:i.string().min(1),visibility:i.literal("authorized_manager"),metrics:i.record(i.string(),i.number()),coachingObservations:i.array(i.string().min(1))}).strict(),z=s.extend({id:i.string().min(1),status:i.enum(["draft","published"]),insightRefs:i.array(i.string().min(1)),changes:i.array(i.string().min(1)),suggestedExperiments:i.array(i.string().min(1)),generatedAt:i.string().datetime()}).strict();var f=[y(m.id)],r=(u,l,p)=>({key:u,version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...p],description:l,goal:"Provide governed, evidence-backed multi-guild community intelligence",context:"Tenant, workspace, actor, and trust-zone authority are derived by the server",docId:f}),o=n({name:"DiscordCommunityWindowQueryV1",fields:{sourceRefs:{type:e.String_unsecure(),isArray:!0,isOptional:!0},windowStart:{type:e.DateTime(),isOptional:!0},windowEnd:{type:e.DateTime(),isOptional:!0},limit:{type:e.Int_unsecure(),isOptional:!0}}}),a=n({name:"CommunityIntelligenceProjectionV1",fields:{id:{type:e.String_unsecure(),isOptional:!1},sourceId:{type:e.String_unsecure(),isOptional:!0},trustZone:{type:e.String_unsecure(),isOptional:!1},kind:{type:e.String_unsecure(),isOptional:!1},subjectRef:{type:e.String_unsecure(),isOptional:!0},windowStart:{type:e.DateTime(),isOptional:!1},windowEnd:{type:e.DateTime(),isOptional:!1},confidence:{type:e.Float_unsecure(),isOptional:!1},evidenceRefs:{type:e.String_unsecure(),isArray:!0,isOptional:!1},payload:{type:e.JSONObject(),isOptional:!1},policyVersion:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),c=n({name:"DiscordCommunityEvidenceProjectionListV1",fields:{items:{type:a,isArray:!0,isOptional:!1}}}),v=n({name:"CommunityStaffScorecardQueryV1",fields:{...o.config.fields,staffPrincipalRef:{type:e.String_unsecure(),isOptional:!1}}}),S=n({name:"CommunityKaizenDigestDetailQueryV1",fields:{digestRef:{type:e.String_unsecure(),isOptional:!1}}}),_=t({meta:r("communication.discord-community.coverage","Read evidenced capture completeness for selected guild sources",["coverage","query"]),io:{input:o,output:c},policy:{auth:"user"}}),P=t({meta:r("communication.community-insight.list","List policy-approved guild or portfolio insights",["insight","query"]),io:{input:o,output:c},policy:{auth:"user"}}),j=t({meta:r("communication.community-staff-scorecard.get","Read an evidence-backed individual coaching scorecard",["staff","scorecard"]),io:{input:v,output:a},policy:{auth:"admin"}}),E=t({meta:r("communication.community-kaizen-digest.list","List evidence-backed Kaizen digests",["kaizen","digest"]),io:{input:o,output:c},policy:{auth:"user"}}),A=t({meta:r("communication.community-kaizen-digest.get","Read one evidence-backed Kaizen digest",["kaizen","digest","detail"]),io:{input:S,output:a},policy:{auth:"user"}});export{a as CommunityIntelligenceProjectionV1Model,A as GetCommunityKaizenDigestV1Query,j as GetCommunityStaffScorecardV1Query,_ as GetDiscordGuildCoverageV1Query,P as ListCommunityInsightsV1Query,E as ListCommunityKaizenDigestsV1Query};
@@ -0,0 +1 @@
1
+ import{defineEvent as n,docId as u}from"@lssm/lib.contracts-spec";import{defineSchemaModel as p,ScalarTypeEnum as t}from"@lssm/lib.schema";import{z as i}from"zod";var c={id:"communication-os.discord-community-intelligence.v1",title:"Multi-guild Discord community intelligence",body:"Additive contracts for policy-scoped Discord guild monitoring, protected provider events, governed identity correlation, evidence-backed community insights, coaching scorecards, and Kaizen digests. Raw staff content never enters cross-guild projections.",kind:"reference",route:"/docs/communication-os/discord-community-intelligence-v1",visibility:"public"},d=i.enum(["staff","managed-community"]),g=i.enum(["pending","active","degraded","revoked"]),v=i.object({id:i.string().min(1),tenantId:i.string().min(1),workspaceId:i.string().min(1),spaceId:i.string().min(1),network:i.literal("discord"),guildId:i.string().min(1),name:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),trustZone:d,status:g,policyRef:i.string().min(1),retentionPolicyRef:i.string().min(1),createdAt:i.string().datetime(),updatedAt:i.string().datetime()}).strict(),h=i.object({id:i.string().min(1),sourceId:i.string().min(1),guildId:i.string().min(1),applicationId:i.string().min(1),botUserId:i.string().min(1),credentialRef:i.string().min(1),declaredIntents:i.array(i.string().min(1)),verifiedPermissions:i.array(i.string().min(1)),allowedChannelIds:i.array(i.string().min(1)),excludedChannelIds:i.array(i.string().min(1)),backfillDays:i.number().int().min(0).max(90),health:i.enum(["pending","healthy","degraded","offline","revoked"]),installationEvidenceRefs:i.array(i.string().min(1)).min(1),lastVerifiedAt:i.string().datetime().optional()}).strict(),C=i.object({id:i.string().min(1),tenantId:i.string().min(1),provider:i.literal("discord"),providerUserId:i.string().min(1),canonicalPrincipalRef:i.string().min(1).optional(),guildMemberships:i.array(i.object({guildId:i.string().min(1),roleIds:i.array(i.string().min(1)),state:i.enum(["active","left","banned"]),observedAt:i.string().datetime()}).strict()),mergeEvidence:i.array(i.object({providerUserId:i.string().min(1),decision:i.literal("approved"),decidedByPrincipalRef:i.string().min(1),evidenceRef:i.string().min(1),decidedAt:i.string().datetime()}).strict())}).strict(),I=i.object({id:i.string().min(1),schemaVersion:i.literal("2.0.0"),sourceId:i.string().min(1),trustZone:d,guildId:i.string().min(1),channelId:i.string().min(1).optional(),threadId:i.string().min(1).optional(),actorProviderUserId:i.string().min(1).optional(),eventKind:i.string().min(1),gatewaySessionId:i.string().min(1).optional(),gatewaySequence:i.number().int().nonnegative().optional(),providerEventId:i.string().min(1),occurredAt:i.string().datetime(),protectedContent:i.object({ciphertextRef:i.string().min(1),digest:i.string().min(1),redactionStatus:i.enum(["pending","applied","not_required"])}).strict().optional(),metadata:i.record(i.string(),i.string()),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),m=i.object({sourceIds:i.array(i.string().min(1)).min(1),windowStart:i.string().datetime(),windowEnd:i.string().datetime(),confidence:i.number().min(0).max(1),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),S=m.extend({id:i.string().min(1),kind:i.enum(["recurring_question","pain_point","friction_trend","emerging_topic","response_gap","moderation_pattern"]),title:i.string().min(1),summary:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),metricValue:i.number().optional()}).strict(),b=m.extend({id:i.string().min(1),staffPrincipalRef:i.string().min(1),visibility:i.literal("authorized_manager"),metrics:i.record(i.string(),i.number()),coachingObservations:i.array(i.string().min(1))}).strict(),x=m.extend({id:i.string().min(1),status:i.enum(["draft","published"]),insightRefs:i.array(i.string().min(1)),changes:i.array(i.string().min(1)),suggestedExperiments:i.array(i.string().min(1)),generatedAt:i.string().datetime()}).strict();var l=[u(c.id)],o=(r,a,s)=>({key:r,version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...s],description:a,docId:l}),y=(r,a,s)=>({key:r,version:"2.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...s],description:a,docId:l}),e=p({name:"CommunicationDiscordCommunityEventV1Payload",fields:{sourceRef:{type:t.String_unsecure(),isOptional:!1},guildId:{type:t.String_unsecure(),isOptional:!1},trustZone:{type:t.String_unsecure(),isOptional:!1},entityRef:{type:t.String_unsecure(),isOptional:!1},evidenceRefs:{type:t.String_unsecure(),isArray:!0,isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),P=n({meta:o("communication.discord-installation.authorized","A read-only Discord guild installation was authorized and evidenced",["installation","authorized"]),payload:e}),k=n({meta:o("communication.discord-installation.health-changed","Permissions, intents, connectivity, or capture coverage changed",["installation","health"]),payload:e}),w=n({meta:y("communication.provider-event.ingested","A protected non-message provider event entered the typed journal",["provider-event","ingestion"]),payload:e}),R=n({meta:o("communication.community-insight.published","A policy-approved, evidence-backed community insight was published",["insight","published"]),payload:e}),A=n({meta:o("communication.community-kaizen-digest.published","An evidence-backed Kaizen digest was published",["kaizen","digest","published"]),payload:e});export{R as CommunicationCommunityInsightPublishedV1Event,A as CommunicationCommunityKaizenDigestPublishedV1Event,e as CommunicationDiscordCommunityEventV1PayloadModel,P as CommunicationDiscordInstallationAuthorizedV1Event,k as CommunicationDiscordInstallationHealthChangedV1Event,w as CommunicationDiscordProviderEventIngestedV2Event};
@@ -0,0 +1 @@
1
+ import{z as i}from"zod";var o={id:"communication-os.discord-community-intelligence.v1",title:"Multi-guild Discord community intelligence",body:"Additive contracts for policy-scoped Discord guild monitoring, protected provider events, governed identity correlation, evidence-backed community insights, coaching scorecards, and Kaizen digests. Raw staff content never enters cross-guild projections.",kind:"reference",route:"/docs/communication-os/discord-community-intelligence-v1",visibility:"public"},n=i.enum(["staff","managed-community"]),e=i.enum(["pending","active","degraded","revoked"]),m=i.object({id:i.string().min(1),tenantId:i.string().min(1),workspaceId:i.string().min(1),spaceId:i.string().min(1),network:i.literal("discord"),guildId:i.string().min(1),name:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),trustZone:n,status:e,policyRef:i.string().min(1),retentionPolicyRef:i.string().min(1),createdAt:i.string().datetime(),updatedAt:i.string().datetime()}).strict(),s=i.object({id:i.string().min(1),sourceId:i.string().min(1),guildId:i.string().min(1),applicationId:i.string().min(1),botUserId:i.string().min(1),credentialRef:i.string().min(1),declaredIntents:i.array(i.string().min(1)),verifiedPermissions:i.array(i.string().min(1)),allowedChannelIds:i.array(i.string().min(1)),excludedChannelIds:i.array(i.string().min(1)),backfillDays:i.number().int().min(0).max(90),health:i.enum(["pending","healthy","degraded","offline","revoked"]),installationEvidenceRefs:i.array(i.string().min(1)).min(1),lastVerifiedAt:i.string().datetime().optional()}).strict(),a=i.object({id:i.string().min(1),tenantId:i.string().min(1),provider:i.literal("discord"),providerUserId:i.string().min(1),canonicalPrincipalRef:i.string().min(1).optional(),guildMemberships:i.array(i.object({guildId:i.string().min(1),roleIds:i.array(i.string().min(1)),state:i.enum(["active","left","banned"]),observedAt:i.string().datetime()}).strict()),mergeEvidence:i.array(i.object({providerUserId:i.string().min(1),decision:i.literal("approved"),decidedByPrincipalRef:i.string().min(1),evidenceRef:i.string().min(1),decidedAt:i.string().datetime()}).strict())}).strict(),c=i.object({id:i.string().min(1),schemaVersion:i.literal("2.0.0"),sourceId:i.string().min(1),trustZone:n,guildId:i.string().min(1),channelId:i.string().min(1).optional(),threadId:i.string().min(1).optional(),actorProviderUserId:i.string().min(1).optional(),eventKind:i.string().min(1),gatewaySessionId:i.string().min(1).optional(),gatewaySequence:i.number().int().nonnegative().optional(),providerEventId:i.string().min(1),occurredAt:i.string().datetime(),protectedContent:i.object({ciphertextRef:i.string().min(1),digest:i.string().min(1),redactionStatus:i.enum(["pending","applied","not_required"])}).strict().optional(),metadata:i.record(i.string(),i.string()),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),t=i.object({sourceIds:i.array(i.string().min(1)).min(1),windowStart:i.string().datetime(),windowEnd:i.string().datetime(),confidence:i.number().min(0).max(1),evidenceRefs:i.array(i.string().min(1)).min(1)}).strict(),d=t.extend({id:i.string().min(1),kind:i.enum(["recurring_question","pain_point","friction_trend","emerging_topic","response_gap","moderation_pattern"]),title:i.string().min(1),summary:i.string().min(1),specialtyKeys:i.array(i.string().min(1)),metricValue:i.number().optional()}).strict(),g=t.extend({id:i.string().min(1),staffPrincipalRef:i.string().min(1),visibility:i.literal("authorized_manager"),metrics:i.record(i.string(),i.number()),coachingObservations:i.array(i.string().min(1))}).strict(),l=t.extend({id:i.string().min(1),status:i.enum(["draft","published"]),insightRefs:i.array(i.string().min(1)),changes:i.array(i.string().min(1)),suggestedExperiments:i.array(i.string().min(1)),generatedAt:i.string().datetime()}).strict();export{e as CommunicationCommunitySourceStatusSchema,m as CommunicationCommunitySourceV1Schema,n as CommunicationCommunityTrustZoneSchema,c as CommunicationNormalizedProviderEventV2Schema,a as CommunicationProviderIdentityV1Schema,d as CommunityInsightV1Schema,l as CommunityKaizenDigestV1Schema,g as CommunityStaffScorecardV1Schema,o as DiscordCommunityIntelligenceDocBlock,s as DiscordGuildInstallationV1Schema};
@@ -0,0 +1 @@
1
+ import{defineCommand as h,defineQuery as v,docId as A}from"@lssm/lib.contracts-spec";import{defineEnum as R,defineSchemaModel as n,ScalarTypeEnum as i}from"@lssm/lib.schema";import{z as e}from"zod";var d={id:"communication-os.discord-community-intelligence.v1",title:"Multi-guild Discord community intelligence",body:"Additive contracts for policy-scoped Discord guild monitoring, protected provider events, governed identity correlation, evidence-backed community insights, coaching scorecards, and Kaizen digests. Raw staff content never enters cross-guild projections.",kind:"reference",route:"/docs/communication-os/discord-community-intelligence-v1",visibility:"public"},S=e.enum(["staff","managed-community"]),C=e.enum(["pending","active","degraded","revoked"]),M=e.object({id:e.string().min(1),tenantId:e.string().min(1),workspaceId:e.string().min(1),spaceId:e.string().min(1),network:e.literal("discord"),guildId:e.string().min(1),name:e.string().min(1),specialtyKeys:e.array(e.string().min(1)),trustZone:S,status:C,policyRef:e.string().min(1),retentionPolicyRef:e.string().min(1),createdAt:e.string().datetime(),updatedAt:e.string().datetime()}).strict(),K=e.object({id:e.string().min(1),sourceId:e.string().min(1),guildId:e.string().min(1),applicationId:e.string().min(1),botUserId:e.string().min(1),credentialRef:e.string().min(1),declaredIntents:e.array(e.string().min(1)),verifiedPermissions:e.array(e.string().min(1)),allowedChannelIds:e.array(e.string().min(1)),excludedChannelIds:e.array(e.string().min(1)),backfillDays:e.number().int().min(0).max(90),health:e.enum(["pending","healthy","degraded","offline","revoked"]),installationEvidenceRefs:e.array(e.string().min(1)).min(1),lastVerifiedAt:e.string().datetime().optional()}).strict(),j=e.object({id:e.string().min(1),tenantId:e.string().min(1),provider:e.literal("discord"),providerUserId:e.string().min(1),canonicalPrincipalRef:e.string().min(1).optional(),guildMemberships:e.array(e.object({guildId:e.string().min(1),roleIds:e.array(e.string().min(1)),state:e.enum(["active","left","banned"]),observedAt:e.string().datetime()}).strict()),mergeEvidence:e.array(e.object({providerUserId:e.string().min(1),decision:e.literal("approved"),decidedByPrincipalRef:e.string().min(1),evidenceRef:e.string().min(1),decidedAt:e.string().datetime()}).strict())}).strict(),N=e.object({id:e.string().min(1),schemaVersion:e.literal("2.0.0"),sourceId:e.string().min(1),trustZone:S,guildId:e.string().min(1),channelId:e.string().min(1).optional(),threadId:e.string().min(1).optional(),actorProviderUserId:e.string().min(1).optional(),eventKind:e.string().min(1),gatewaySessionId:e.string().min(1).optional(),gatewaySequence:e.number().int().nonnegative().optional(),providerEventId:e.string().min(1),occurredAt:e.string().datetime(),protectedContent:e.object({ciphertextRef:e.string().min(1),digest:e.string().min(1),redactionStatus:e.enum(["pending","applied","not_required"])}).strict().optional(),metadata:e.record(e.string(),e.string()),evidenceRefs:e.array(e.string().min(1)).min(1)}).strict(),g=e.object({sourceIds:e.array(e.string().min(1)).min(1),windowStart:e.string().datetime(),windowEnd:e.string().datetime(),confidence:e.number().min(0).max(1),evidenceRefs:e.array(e.string().min(1)).min(1)}).strict(),Q=g.extend({id:e.string().min(1),kind:e.enum(["recurring_question","pain_point","friction_trend","emerging_topic","response_gap","moderation_pattern"]),title:e.string().min(1),summary:e.string().min(1),specialtyKeys:e.array(e.string().min(1)),metricValue:e.number().optional()}).strict(),U=g.extend({id:e.string().min(1),staffPrincipalRef:e.string().min(1),visibility:e.literal("authorized_manager"),metrics:e.record(e.string(),e.number()),coachingObservations:e.array(e.string().min(1))}).strict(),Z=g.extend({id:e.string().min(1),status:e.enum(["draft","published"]),insightRefs:e.array(e.string().min(1)),changes:e.array(e.string().min(1)),suggestedExperiments:e.array(e.string().min(1)),generatedAt:e.string().datetime()}).strict();import{defineQuery as o,docId as _}from"@lssm/lib.contracts-spec";import{defineSchemaModel as r,ScalarTypeEnum as t}from"@lssm/lib.schema";var V=[_(d.id)],s=(m,p,y)=>({key:m,version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...y],description:p,goal:"Provide governed, evidence-backed multi-guild community intelligence",context:"Tenant, workspace, actor, and trust-zone authority are derived by the server",docId:V}),u=r({name:"DiscordCommunityWindowQueryV1",fields:{sourceRefs:{type:t.String_unsecure(),isArray:!0,isOptional:!0},windowStart:{type:t.DateTime(),isOptional:!0},windowEnd:{type:t.DateTime(),isOptional:!0},limit:{type:t.Int_unsecure(),isOptional:!0}}}),f=r({name:"CommunityIntelligenceProjectionV1",fields:{id:{type:t.String_unsecure(),isOptional:!1},sourceId:{type:t.String_unsecure(),isOptional:!0},trustZone:{type:t.String_unsecure(),isOptional:!1},kind:{type:t.String_unsecure(),isOptional:!1},subjectRef:{type:t.String_unsecure(),isOptional:!0},windowStart:{type:t.DateTime(),isOptional:!1},windowEnd:{type:t.DateTime(),isOptional:!1},confidence:{type:t.Float_unsecure(),isOptional:!1},evidenceRefs:{type:t.String_unsecure(),isArray:!0,isOptional:!1},payload:{type:t.JSONObject(),isOptional:!1},policyVersion:{type:t.String_unsecure(),isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1}}}),I=r({name:"DiscordCommunityEvidenceProjectionListV1",fields:{items:{type:f,isArray:!0,isOptional:!1}}}),x=r({name:"CommunityStaffScorecardQueryV1",fields:{...u.config.fields,staffPrincipalRef:{type:t.String_unsecure(),isOptional:!1}}}),b=r({name:"CommunityKaizenDigestDetailQueryV1",fields:{digestRef:{type:t.String_unsecure(),isOptional:!1}}}),H=o({meta:s("communication.discord-community.coverage","Read evidenced capture completeness for selected guild sources",["coverage","query"]),io:{input:u,output:I},policy:{auth:"user"}}),J=o({meta:s("communication.community-insight.list","List policy-approved guild or portfolio insights",["insight","query"]),io:{input:u,output:I},policy:{auth:"user"}}),Y=o({meta:s("communication.community-staff-scorecard.get","Read an evidence-backed individual coaching scorecard",["staff","scorecard"]),io:{input:x,output:f},policy:{auth:"admin"}}),X=o({meta:s("communication.community-kaizen-digest.list","List evidence-backed Kaizen digests",["kaizen","digest"]),io:{input:u,output:I},policy:{auth:"user"}}),ee=o({meta:s("communication.community-kaizen-digest.get","Read one evidence-backed Kaizen digest",["kaizen","digest","detail"]),io:{input:b,output:f},policy:{auth:"user"}});var k=["platform.communication-os"],z=[A(d.id)],a=(m,p,y)=>({key:m,version:"1.0.0",stability:"experimental",owners:[...k],tags:["communication","discord",...y],description:p,goal:"Provide governed, evidence-backed multi-guild community intelligence",context:"Tenant, workspace, actor, and trust-zone authority are derived by the server",docId:z}),O=R("DiscordCommunityTrustZone",["staff","managed-community"]),c=n({name:"DiscordGuildInstallationProjectionV1",fields:{id:{type:i.String_unsecure(),isOptional:!1},sourceId:{type:i.String_unsecure(),isOptional:!1},guildId:{type:i.String_unsecure(),isOptional:!1},applicationId:{type:i.String_unsecure(),isOptional:!1},botUserId:{type:i.String_unsecure(),isOptional:!1},specialtyKeys:{type:i.String_unsecure(),isArray:!0,isOptional:!1},trustZone:{type:O,isOptional:!1},health:{type:i.String_unsecure(),isOptional:!1},verifiedPermissions:{type:i.String_unsecure(),isArray:!0,isOptional:!1},declaredIntents:{type:i.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:i.Int_unsecure(),isOptional:!1},policyRef:{type:i.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:i.String_unsecure(),isOptional:!1},installationEvidenceRefs:{type:i.String_unsecure(),isArray:!0,isOptional:!1},lastVerifiedAt:{type:i.DateTime(),isOptional:!0},updatedAt:{type:i.DateTime(),isOptional:!1}}}),l={INSTALLATION_NOT_FOUND:{description:"The scoped Discord installation does not exist",http:404,when:"The installation reference is absent from the authenticated workspace"},IDEMPOTENCY_CONFLICT:{description:"The idempotency key was reused for different intent",http:409,when:"An existing mutation evidence record has another operation or request digest"},INSTALLATION_VERIFICATION_FAILED:{description:"Discord authority could not be verified",http:422,when:"The credential, intents, permissions, or guild binding is invalid"}},w=n({name:"AuthorizeDiscordGuildInstallationV1Input",fields:{guildId:{type:i.String_unsecure(),isOptional:!1},credentialRef:{type:i.String_unsecure(),isOptional:!1},trustZone:{type:O,isOptional:!1},specialtyKeys:{type:i.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:i.Int_unsecure(),isOptional:!1},policyRef:{type:i.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:i.String_unsecure(),isOptional:!1},idempotencyKey:{type:i.String_unsecure(),isOptional:!1}}}),re=h({meta:a("communication.discord-installation.authorize","Authorize one read-only Discord guild installation",["installation","authorize"]),io:{input:w,output:c,errors:l},policy:{auth:"admin"}}),D=n({name:"DiscordGuildInstallationTargetV1",fields:{installationId:{type:i.String_unsecure(),isOptional:!1}}}),T=n({name:"ListDiscordGuildInstallationsV1Input",fields:{}}),P=n({name:"ListDiscordGuildInstallationsV1Output",fields:{installations:{type:c,isArray:!0,isOptional:!1}}}),se=v({meta:a("communication.discord-installation.list","List authorized Discord guild installations",["installation","list"]),io:{input:T,output:P,errors:l},policy:{auth:"user"}}),ae=v({meta:a("communication.discord-installation.health","Read permission, intent, sequence-gap, and reconciliation health",["installation","health"]),io:{input:D,output:c,errors:l},policy:{auth:"admin"}}),E=n({name:"UpdateDiscordCommunityPolicyV1Input",fields:{installationId:{type:i.String_unsecure(),isOptional:!1},policyRef:{type:i.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:i.String_unsecure(),isOptional:!1},specialtyKeys:{type:i.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:i.Int_unsecure(),isOptional:!1},idempotencyKey:{type:i.String_unsecure(),isOptional:!1}}}),ce=h({meta:a("communication.discord-community.policy-update","Update monitored channels, specialty, and policy references",["policy","update"]),io:{input:E,output:c,errors:l},policy:{auth:"admin"}}),G=n({name:"RevokeDiscordGuildInstallationV1Input",fields:{...D.config.fields,idempotencyKey:{type:i.String_unsecure(),isOptional:!1}}}),le=h({meta:a("communication.discord-installation.revoke","Revoke ingestion authority for one Discord guild installation",["installation","revoke"]),io:{input:G,output:c,errors:l},policy:{auth:"admin"}});export{re as AuthorizeDiscordGuildInstallationV1Command,w as AuthorizeDiscordGuildInstallationV1InputModel,f as CommunityIntelligenceProjectionV1Model,c as DiscordGuildInstallationProjectionV1Model,ee as GetCommunityKaizenDigestV1Query,Y as GetCommunityStaffScorecardV1Query,H as GetDiscordGuildCoverageV1Query,ae as GetDiscordGuildInstallationHealthV1Query,J as ListCommunityInsightsV1Query,X as ListCommunityKaizenDigestsV1Query,se as ListDiscordGuildInstallationsV1Query,le as RevokeDiscordGuildInstallationV1Command,ce as UpdateDiscordCommunityPolicyV1Command,E as UpdateDiscordCommunityPolicyV1InputModel};
@@ -0,0 +1 @@
1
+ import{defineCommand as g,defineQuery as O,docId as s}from"@lssm/lib.contracts-spec";import{defineSchemaModel as o,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as i,defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";var l=i("CommunicationSpaceKind",["personal","organization"]),u=i("CommunicationPrincipalKind",["human","agent","system"]),m=i("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),I=i("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),d=i("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),y=i("CommunicationMembershipState",["active","revoked"]),A=i("CommunicationReceiptKind",["delivered","read"]),f=i("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),b={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},x=n({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),D=n({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:l,isOptional:!1},encryptionMode:{type:d,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),T=n({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:u,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),v=n({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),w=n({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:y,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),k=n({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:m,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:f,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),a=n({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),M=n({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:a,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),V=n({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var r={id:"communication-os.ecosystem-attachments.v1",title:"CommunicationOS scoped message attachments",body:"Uploads and downloads small message attachments through authenticated, room-authorized operations. Bytes are stored behind opaque identifiers; public message projections expose only name, MIME type, size, digest, and creation time. Runtime limits, digest verification, tenant isolation, and message-reference validation fail closed.",kind:"reference",route:"/docs/communication-os/ecosystem-attachments-v1",visibility:"public"},c={tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1}},h=o({name:"UploadCommunicationAttachmentV1Input",fields:{...c,name:{type:t.String_unsecure(),isOptional:!1},mimeType:{type:t.String_unsecure(),isOptional:!1},sizeBytes:{type:t.Int_unsecure(),isOptional:!1},sha256:{type:t.String_unsecure(),isOptional:!1},contentBase64:{type:t.String_unsecure(),isOptional:!1}}}),S=o({name:"DownloadCommunicationAttachmentV1Input",fields:{...c,attachmentId:{type:t.String_unsecure(),isOptional:!1}}}),_=o({name:"DownloadCommunicationAttachmentV1Output",fields:{attachment:{type:a,isOptional:!1},contentBase64:{type:t.String_unsecure(),isOptional:!1}}}),p={VALIDATION_FAILED:{description:"Attachment metadata, digest, encoding, or size is invalid.",http:422,when:"The request is malformed, exceeds the runtime limit, or its digest differs from the decoded bytes."},AUTHORITY_DENIED:{description:"The principal cannot access attachments in this room.",http:403,when:"Active room membership or attachment capability is absent."},ATTACHMENT_NOT_FOUND:{description:"No attachment exists in the selected authorized scope.",http:404,when:"The opaque identifier is absent or belongs to another scope."}},N=g({meta:{key:"communication.attachment.upload",version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","message","attachment","upload"],description:"Upload one small, digest-verified message attachment",goal:"Let authorized participants attach files without exposing storage locations",context:"Scope and principal authority are derived by protected adapters; bytes are limited and stored behind an opaque identifier",docId:[s(r.id)]},io:{input:h,output:a,errors:p},policy:{auth:"user"}}),P=O({meta:{key:"communication.attachment.download",version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","message","attachment","download"],description:"Download one attachment from an authorized room scope",goal:"Return bytes only after current room authority is revalidated",context:"Opaque identifiers never widen the server-derived tenant, workspace, space, or room scope",docId:[s(r.id)]},io:{input:S,output:_,errors:p},policy:{auth:"user"}});export{r as CommunicationAttachmentDocBlock,P as DownloadCommunicationAttachmentV1Query,N as UploadCommunicationAttachmentV1Command};
@@ -0,0 +1 @@
1
+ import{defineCommand as a,docId as f}from"@lssm/lib.contracts-spec";import{defineSchemaModel as i,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as o,defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";var m=o("CommunicationSpaceKind",["personal","organization"]),d=o("CommunicationPrincipalKind",["human","agent","system"]),u=o("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),p=o("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),y=o("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),h=o("CommunicationMembershipState",["active","revoked"]),E=o("CommunicationReceiptKind",["delivered","read"]),g=o("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),l={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},V=n({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),D=n({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:m,isOptional:!1},encryptionMode:{type:y,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),P=n({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:d,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),M=n({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),R=n({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:h,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),z=n({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:u,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:g,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),O=n({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),H=n({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:O,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),N=n({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var s=["platform.communication-os"],r=[f(l.id)],c={tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1}},S=i({name:"ExchangeCommunicationHostSessionV2Input",description:"Server-to-server exchange of a verified host assertion for a scoped CommunicationOS token",fields:{issuer:{type:t.String_unsecure(),isOptional:!1},assertion:{type:t.String_unsecure(),isOptional:!1},...c}}),C=i({name:"ExchangeCommunicationHostSessionV2Output",fields:{accessToken:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!1},...c}}),j=a({meta:{key:"communication.auth.host-session.exchange",version:"2.0.0",stability:"experimental",owners:[...s],tags:["communication","auth","host-exchange","isolation"],description:"Exchange a CompanyOS, Pactena, or approved host session for a short-lived scoped token",goal:"Embed CommunicationOS without sharing host cookies or bypassing its own authorization",context:"The server verifies issuer and assertion, maps issuer plus subject to one canonical principal, and evaluates membership independently; email matching never links identities",docId:r},io:{input:S,output:C},policy:{auth:"admin"}}),_=i({name:"ExchangeCommunicationDirectSessionV2Input",description:"Exchange the current first-party AuthOS cookie or native bearer session for its server-derived personal CommunicationOS scope",fields:{}}),v=i({name:"ExchangeCommunicationDirectSessionV2Output",fields:{accessToken:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!1},...c}}),q=a({meta:{key:"communication.auth.direct-session.exchange",version:"2.0.0",stability:"experimental",owners:[...s],tags:["communication","auth","standalone","isolation"],description:"Exchange a first-party AuthOS session for a short-lived scoped CommunicationOS token",goal:"Let standalone clients authenticate without sharing host sessions",context:"The server accepts the first-party web cookie or a device-vault-backed AuthOS bearer session, then derives both canonical principal and personal scope from the AuthOS issuer and immutable user id; email and client-provided scope are never identity authority",docId:r},io:{input:_,output:v},policy:{auth:"user"}}),x=i({name:"CreateCommunicationRealtimeTicketV2Input",description:"Authorized space scope for one short-lived realtime ticket",fields:c}),k=i({name:"CreateCommunicationRealtimeTicketV2Output",fields:{ticket:{type:t.String_unsecure(),isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!1}}}),G=a({meta:{key:"communication.auth.realtime-ticket.create",version:"2.0.0",stability:"experimental",owners:[...s],tags:["communication","auth","realtime","ticket"],description:"Mint a single-purpose, short-lived ticket for the realtime gateway",goal:"Authenticate WebSocket upgrades without exposing bearer tokens in URLs",context:"The ticket is audience-bound, space-scoped, expiring, and must be consumed or rejected by the realtime gateway",docId:r},io:{input:x,output:k},policy:{auth:"user"}}),A=i({name:"StartCommunicationProviderOAuthV2Input",description:"Authenticated request for a scope-bound, short-lived provider OAuth authorization flow",fields:{...c,network:{type:p,isOptional:!1},providerKey:{type:t.String_unsecure(),isOptional:!0},placement:{type:u,isOptional:!1},returnPath:{type:t.String_unsecure(),isOptional:!0}}}),b=i({name:"StartCommunicationProviderOAuthV2Output",description:"Opaque provider authorization URL with no raw credential or PKCE verifier exposure",fields:{authorizationUrl:{type:t.String_unsecure(),isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!1}}}),W=a({meta:{key:"communication.oauth.start",version:"3.0.0",stability:"experimental",owners:[...s],tags:["communication","provider","oauth","pkce","connection"],description:"Start a provider OAuth flow bound to the authenticated principal and exact CommunicationOS scope",goal:"Connect managed provider accounts without exposing credentials or permitting cross-space callback replay",context:"The server creates one-time state and provider-supported PKCE material, stores it with a short expiry, derives an allowlisted host return origin from the authenticated issuer, and accepts only relative return paths; raw verifier and provider tokens never enter browser projections",docId:r},io:{input:A,output:b,errors:{OAUTH_NETWORK_UNSUPPORTED:{description:"The requested network has no configured OAuth provider",http:422,when:"The network uses another connection method or is not enabled"},OAUTH_NOT_AUTHORIZED:{description:"The actor cannot manage connections in this scope",http:403,when:"Membership, policy, or RoleMorph boundaries deny connection administration"},OAUTH_STATE_UNAVAILABLE:{description:"OAuth state could not be stored durably",http:503,when:"The one-time state store is unavailable"}}},policy:{auth:"user"}}),I=i({name:"CompleteCommunicationProviderOAuthV2Input",description:"Provider callback carrying opaque one-time state and either an authorization code or provider error",fields:{network:{type:p,isOptional:!1},state:{type:t.String_unsecure(),isOptional:!1},code:{type:t.String_unsecure(),isOptional:!0},providerError:{type:t.String_unsecure(),isOptional:!0}}}),T=i({name:"CompleteCommunicationProviderOAuthV2Output",description:"Connected provider projection after one-time state consumption and credential-vault storage",fields:{connectionId:{type:t.String_unsecure(),isOptional:!1},network:{type:p,isOptional:!1},returnPath:{type:t.String_unsecure(),isOptional:!1},returnOrigin:{type:t.String_unsecure(),isOptional:!1}}}),F=a({meta:{key:"communication.oauth.complete",version:"3.0.0",stability:"experimental",owners:[...s],tags:["communication","provider","oauth","callback","replay"],description:"Consume a provider OAuth callback once, vault credentials, and create the scoped connection",goal:"Finish provider onboarding without trusting callback scope or persisting browser-visible tokens",context:"Tenant, workspace, space, principal, placement, provider proof material, allowlisted host return origin, and relative return path are recovered only from atomically consumed state; reused, expired, mismatched, or provider-denied callbacks fail closed",docId:r},io:{input:I,output:T,errors:{OAUTH_STATE_INVALID:{description:"OAuth state is missing, expired, mismatched, or already consumed",http:401,when:"The callback cannot atomically recover its exact scoped authorization intent"},OAUTH_PROVIDER_DENIED:{description:"The provider denied or failed the authorization request",http:422,when:"The callback contains an OAuth error or no authorization code"},OAUTH_EXCHANGE_FAILED:{description:"The authorization code could not be exchanged safely",http:502,when:"Provider token exchange, identity discovery, or credential vault storage fails"}}},policy:{auth:"anonymous"}});export{F as CompleteCommunicationProviderOAuthV2Command,I as CompleteCommunicationProviderOAuthV2Input,T as CompleteCommunicationProviderOAuthV2Output,G as CreateCommunicationRealtimeTicketV2Command,x as CreateCommunicationRealtimeTicketV2Input,k as CreateCommunicationRealtimeTicketV2Output,q as ExchangeCommunicationDirectSessionV2Command,_ as ExchangeCommunicationDirectSessionV2Input,v as ExchangeCommunicationDirectSessionV2Output,j as ExchangeCommunicationHostSessionV2Command,S as ExchangeCommunicationHostSessionV2Input,C as ExchangeCommunicationHostSessionV2Output,W as StartCommunicationProviderOAuthV2Command,A as StartCommunicationProviderOAuthV2Input,b as StartCommunicationProviderOAuthV2Output};
@@ -0,0 +1 @@
1
+ import{defineCommand as f,defineQuery as O,docId as S}from"@lssm/lib.contracts-spec";import{defineEnum as _,defineSchemaModel as a,ScalarTypeEnum as n}from"@lssm/lib.schema";import{defineEnum as i,defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var p=i("CommunicationSpaceKind",["personal","organization"]),l=i("CommunicationPrincipalKind",["human","agent","system"]),u=i("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),x=i("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),m=i("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),d=i("CommunicationMembershipState",["active","revoked"]),v=i("CommunicationReceiptKind",["delivered","read"]),y=i("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),s={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},k=t({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),A=t({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:p,isOptional:!1},encryptionMode:{type:m,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),D=t({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:l,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),M=t({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),V=t({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:d,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),T=t({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:u,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:y,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),g=t({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),w=t({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:g,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),E=t({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var r=["platform.communication-os"],c=[S(s.id)],C=_("CommunicationBindingDirection",["inbound","outbound","bidirectional"]),o=a({name:"CommunicationRoomChannelBindingV2",description:"Scoped mapping between one canonical room and one external provider conversation",fields:{id:{type:n.String_unsecure(),isOptional:!1},tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},connectionId:{type:n.String_unsecure(),isOptional:!1},externalConversationId:{type:n.String_unsecure(),isOptional:!1},externalThreadId:{type:n.String_unsecure(),isOptional:!0},direction:{type:C,isOptional:!1},active:{type:n.Boolean(),isOptional:!1},createdAt:{type:n.DateTime(),isOptional:!1},updatedAt:{type:n.DateTime(),isOptional:!1}}}),K=f({meta:{key:"communication.room-channel-binding.set",version:"2.0.0",stability:"experimental",owners:[...r],tags:["communication","room","connection","binding"],description:"Create, update, or revoke the provider conversation bound to a canonical room",goal:"Route synchronization and delivery without treating provider accounts as rooms",context:"The room, connection, and binding must share exactly one tenant, workspace, and space scope",docId:c},io:{input:o,output:o},policy:{auth:"admin"}}),h=a({name:"ListCommunicationRoomChannelBindingsV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!0},connectionId:{type:n.String_unsecure(),isOptional:!0},activeOnly:{type:n.Boolean(),isOptional:!0}}}),I=a({name:"ListCommunicationRoomChannelBindingsV2Output",fields:{bindings:{type:o,isArray:!0,isOptional:!1}}}),L=O({meta:{key:"communication.room-channel-binding.list",version:"2.0.0",stability:"experimental",owners:[...r],tags:["communication","room","connection","binding","query"],description:"List authorized room-to-provider conversation bindings",goal:"Make routing, audit, and recovery projections explicit and replayable",context:"Inactive bindings remain visible to audit readers",docId:c},io:{input:h,output:I},policy:{auth:"user"}});export{C as CommunicationBindingDirectionEnum,o as CommunicationRoomChannelBindingV2Model,L as ListCommunicationRoomChannelBindingsV2Query,K as SetCommunicationRoomChannelBindingV2Command};
@@ -0,0 +1 @@
1
+ import{defineEvent as p,docId as A}from"@lssm/lib.contracts-spec";import{defineEvent as n,docId as I}from"@lssm/lib.contracts-spec";import{defineSchemaModel as r,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as o,defineSchemaModel as a,ScalarTypeEnum as e}from"@lssm/lib.schema";var f=o("CommunicationSpaceKind",["personal","organization"]),O=o("CommunicationPrincipalKind",["human","agent","system"]),S=o("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),w=o("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),_=o("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),C=o("CommunicationMembershipState",["active","revoked"]),D=o("CommunicationReceiptKind",["delivered","read"]),h=o("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),c={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},M=a({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),T=a({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:f,isOptional:!1},encryptionMode:{type:_,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),R=a({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:O,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),P=a({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),B=a({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:C,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),K=a({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:S,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:h,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),v=a({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),N=a({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:v,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),q=a({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var E=["platform.communication-os"],b=[I(c.id)];function i(u,m,d){return{key:u,version:"2.0.0",description:m,stability:"experimental",owners:[...E],tags:["communication","ecosystem-messaging",...d],docId:b}}var y=r({name:"CommunicationScopedEntityV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},entityId:{type:t.String_unsecure(),isOptional:!1},actorPrincipalId:{type:t.String_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),F=n({meta:i("communication.space.created","Emitted when an isolated messaging space is created",["space","created"]),payload:y}),J=n({meta:i("communication.room.created","Emitted when a room or direct-message projection is created",["room","created"]),payload:y}),x=r({name:"CommunicationMembershipChangedV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},membershipId:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},state:{type:t.String_unsecure(),isOptional:!1},changedBy:{type:t.String_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),W=n({meta:i("communication.membership.changed","Emitted when a human, agent, or system membership changes",["membership","authority"]),payload:x}),L=n({meta:i("communication.authority.changed","Emitted when a principal authority grant is added, changed, expired, or revoked",["agent","authority","revocation"]),payload:y}),g=r({name:"CommunicationMessageEventV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},messageId:{type:t.String_unsecure(),isOptional:!1},authorPrincipalId:{type:t.String_unsecure(),isOptional:!1},connectionId:{type:t.String_unsecure(),isOptional:!0},providerReceiptRef:{type:t.String_unsecure(),isOptional:!0},revision:{type:t.Int_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),Q=n({meta:i("communication.message.sent","Emitted after provider acceptance or canonical local delivery of a v2 message",["message","sent"]),payload:g}),U=n({meta:i("communication.message.edited","Emitted when a new message revision is accepted",["message","edited"]),payload:g}),X=n({meta:i("communication.message.deleted","Emitted when message content is deleted or provider retention is documented",["message","deleted","erasure"]),payload:g}),s=r({name:"CommunicationConnectionEventV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},connectionId:{type:t.String_unsecure(),isOptional:!1},network:{type:t.String_unsecure(),isOptional:!1},placement:{type:t.String_unsecure(),isOptional:!1},health:{type:t.String_unsecure(),isOptional:!1},cursor:{type:t.String_unsecure(),isOptional:!0},invalidationRef:{type:t.String_unsecure(),isOptional:!0},subscriptionRef:{type:t.String_unsecure(),isOptional:!0},targetExpiresAt:{type:t.DateTime(),isOptional:!0},expiresAt:{type:t.DateTime(),isOptional:!0},workOrderDigest:{type:t.String_unsecure(),isOptional:!0},idempotencyKey:{type:t.String_unsecure(),isOptional:!0},providerReceiptRef:{type:t.String_unsecure(),isOptional:!0},evidenceRefs:{type:t.String_unsecure(),isArray:!0,isOptional:!0},failureCode:{type:t.String_unsecure(),isOptional:!0},retryable:{type:t.Boolean(),isOptional:!0},retryAt:{type:t.DateTime(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!1}}}),Y=n({meta:i("communication.connection.health.changed","Emitted when a local or server connection health state changes",["connection","health"]),payload:s}),Z=n({meta:i("communication.connection.sync.advanced","Emitted after a connection cursor advances durably",["connection","sync","cursor"]),payload:s}),ee=n({meta:i("communication.connection.sync.invalidated","Emitted after an authenticated provider callback durably requests synchronization",["connection","sync","invalidation"]),payload:s}),V=r({name:"CommunicationRealtimeStateV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},stateKind:{type:t.String_unsecure(),isOptional:!1},messageId:{type:t.String_unsecure(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!1}}}),te=n({meta:i("communication.realtime-state.changed","Emitted for reaction, receipt, presence, typing, and inbox-state projection updates",["realtime","receipt","presence","reaction"]),payload:V});var l=(u,m,d)=>({key:u,version:"2.0.0",description:m,stability:"experimental",owners:["platform.communication-os"],tags:["communication","connection","subscription",d],docId:[A(c.id)]}),se=p({meta:l("communication.connection.subscription.requested","Emitted before Runtime Node receives an idempotent subscription create or renewal request","requested"),payload:s}),re=p({meta:l("communication.connection.subscription.active","Emitted after a Runtime Node receipt proves a provider subscription is active","active"),payload:s}),ce=p({meta:l("communication.connection.subscription.failed","Emitted after a definitive Runtime Node subscription failure","failed"),payload:s}),pe=p({meta:l("communication.connection.subscription.indeterminate","Emitted when subscription effect custody is indeterminate and must reconcile before retry","indeterminate"),payload:s});export{re as CommunicationConnectionSubscriptionActiveV2Event,ce as CommunicationConnectionSubscriptionFailedV2Event,pe as CommunicationConnectionSubscriptionIndeterminateV2Event,se as CommunicationConnectionSubscriptionRequestedV2Event};
@@ -0,0 +1 @@
1
+ import{defineCommand as v,defineQuery as A,docId as D}from"@lssm/lib.contracts-spec";import{defineEnum as E,defineSchemaModel as s,ScalarTypeEnum as a}from"@lssm/lib.schema";import{defineCommand as f,defineQuery as V,docId as T}from"@lssm/lib.contracts-spec";import{defineEnum as g,defineSchemaModel as c,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as i,defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";var C=i("CommunicationSpaceKind",["personal","organization"]),h=i("CommunicationPrincipalKind",["human","agent","system"]),_=i("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),P=i("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),I=i("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),w=i("CommunicationMembershipState",["active","revoked"]),j=i("CommunicationReceiptKind",["delivered","read"]),x=i("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),q={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},y=n({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),z=n({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:C,isOptional:!1},encryptionMode:{type:I,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),F=n({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:h,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),Q=n({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),J=n({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:w,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),H=n({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:_,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:x,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),b=n({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),U=n({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:b,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),X=n({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var p=["platform.communication-os"],u={id:"communication-os.governed-work.v1",title:"CommunicationOS governed work contracts",body:"Persisted, scope-isolated reviews for identity, drafts, actions, handoffs, escalations, triage, summaries, agents, consent, retention, and policy. Managed decisions require current manager authority and every transition appends evidence.",kind:"reference",route:"/docs/communication-os/governed-work-v1",visibility:"public"},l=[T(u.id)],r=g("CommunicationGovernedWorkKind",["identity_review","draft","action","handoff","escalation","triage","summary","agent","consent","retention","policy"]),O=g("CommunicationGovernedWorkStatus",["pending","approved","rejected","blocked","resolved","revoked"]),o=c({name:"CommunicationGovernedWorkV1",fields:{id:{type:t.String_unsecure(),isOptional:!1},kind:{type:r,isOptional:!1},status:{type:O,isOptional:!1},title:{type:t.String_unsecure(),isOptional:!1},threadId:{type:t.String_unsecure(),isOptional:!0},details:{type:t.JSONObject(),isOptional:!1},revision:{type:t.Int_unsecure(),isOptional:!1},createdBy:{type:t.String_unsecure(),isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1},updatedBy:{type:t.String_unsecure(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),ne=V({meta:{key:"communication.governed_work.list",version:"1.0.0",stability:"experimental",owners:[...p],tags:["communication","governance","work","query"],description:"List governed work in one authorized messaging space",goal:"Drive review queues from replayable state rather than fixtures",context:"The server derives scope and filters optional kinds",docId:l},io:{input:y,output:c({name:"ListCommunicationGovernedWorkV1Output",fields:{items:{type:o,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),ie=f({meta:{key:"communication.governed_work.create",version:"1.0.0",stability:"experimental",owners:[...p],tags:["communication","governance","work","create"],description:"Create one idempotent governed work item",goal:"Start an accountable review from a real user or runtime action",context:"Client-supplied tenant or principal authority is rejected",docId:l},io:{input:o,output:o},policy:{auth:"user"}}),oe=f({meta:{key:"communication.governed_work.transition",version:"1.0.0",stability:"experimental",owners:[...p],tags:["communication","governance","work","transition"],description:"Apply one policy-valid governed work transition",goal:"Record approval, denial, resolution, blocking, or revocation evidence",context:"Managed kinds require current manager authority and terminal transitions fail closed",docId:l},io:{input:c({name:"TransitionCommunicationGovernedWorkV1Input",fields:{workId:{type:t.String_unsecure(),isOptional:!1},status:{type:O,isOptional:!1},reason:{type:t.String_unsecure(),isOptional:!0}}}),output:o},policy:{auth:"user"}});var G=["platform.communication-os"],M=[D(u.id)],m={VALIDATION_FAILED:{description:"The governed-work intent is invalid.",http:422,when:"Required intent is blank, malformed, or exceeds a declared limit."},FORBIDDEN:{description:"The principal cannot manage this governed-work kind.",http:403,when:"The server-derived role lacks the required management authority."},NOT_FOUND:{description:"The governed-work item does not exist in this scope.",http:404,when:"No item is visible in the authenticated journal partition."},CONFLICT:{description:"The requested lifecycle transition is not permitted.",http:409,when:"The current persisted status cannot transition to the requested status."},SERVICE_UNAVAILABLE:{description:"The governed-work journal is unavailable.",http:503,when:"The durable runtime cannot safely answer the operation."}},W=E("CommunicationGovernedWorkDecisionStatusV2",["approved","rejected","blocked","resolved","revoked"]),R=s({name:"ListCommunicationGovernedWorkV2Input",fields:{kind:{type:r,isOptional:!0}}}),N=s({name:"CreateCommunicationGovernedWorkV2Input",fields:{kind:{type:r,isOptional:!1},title:{type:a.String_unsecure(),isOptional:!1},threadId:{type:a.String_unsecure(),isOptional:!0},details:{type:a.JSONObject(),isOptional:!0},idempotencyKey:{type:a.String_unsecure(),isOptional:!1}}}),B=s({name:"TransitionCommunicationGovernedWorkV2Input",fields:{workId:{type:a.String_unsecure(),isOptional:!1},status:{type:W,isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!0},idempotencyKey:{type:a.String_unsecure(),isOptional:!1}}}),L=s({name:"ListCommunicationGovernedWorkV2Output",fields:{items:{type:o,isArray:!0,isOptional:!1}}}),pe=A({meta:d("communication.governed_work.list","List governed work from the authenticated journal partition"),io:{input:R,output:L,errors:m},policy:{auth:"user"}}),ue=v({meta:d("communication.governed_work.create","Create governed work from replay-safe client intent"),io:{input:N,output:o,errors:m},policy:{auth:"user"}}),le=v({meta:d("communication.governed_work.transition","Apply one authorized governed-work lifecycle transition"),io:{input:B,output:o,errors:m},policy:{auth:"user"}});function d(S,k){return{key:S,version:"2.0.0",stability:"experimental",owners:[...G],tags:["communication","governance","authority","server-scope"],description:k,goal:"Keep scope, principal, lifecycle state, revision, and evidence server-owned",context:"The authenticated server context is the only tenant and principal authority.",docId:M}}export{W as CommunicationGovernedWorkDecisionStatusV2Enum,ue as CreateCommunicationGovernedWorkV2Command,N as CreateCommunicationGovernedWorkV2Input,R as ListCommunicationGovernedWorkV2Input,pe as ListCommunicationGovernedWorkV2Query,le as TransitionCommunicationGovernedWorkV2Command,B as TransitionCommunicationGovernedWorkV2Input};
@@ -0,0 +1 @@
1
+ import{defineCommand as p,defineQuery as _,docId as C}from"@lssm/lib.contracts-spec";import{defineEnum as l,defineSchemaModel as a,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as i,defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";var m=i("CommunicationSpaceKind",["personal","organization"]),d=i("CommunicationPrincipalKind",["human","agent","system"]),y=i("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),I=i("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),f=i("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),g=i("CommunicationMembershipState",["active","revoked"]),x=i("CommunicationReceiptKind",["delivered","read"]),O=i("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),b={id:"communication-os.ecosystem-messaging.v2",title:"CommunicationOS ecosystem messaging contracts",body:"Versioned, workspace-scoped contracts for personal and organization spaces, rooms, human and agent membership, hybrid channel connections, synchronized messages, and revocable outbound authority. CommunicationSpec remains canonical; provider protocols are adapters. V1 thread and draft-only operations remain unchanged.",kind:"reference",route:"/docs/communication-os/ecosystem-messaging-v2",visibility:"public"},c=n({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),w=n({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:m,isOptional:!1},encryptionMode:{type:f,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),A=n({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:d,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),D=n({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),V=n({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:g,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),M=n({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:y,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:O,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),S=n({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),T=n({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:S,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),E=n({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var s=["platform.communication-os"],v={id:"communication-os.governed-work.v1",title:"CommunicationOS governed work contracts",body:"Persisted, scope-isolated reviews for identity, drafts, actions, handoffs, escalations, triage, summaries, agents, consent, retention, and policy. Managed decisions require current manager authority and every transition appends evidence.",kind:"reference",route:"/docs/communication-os/governed-work-v1",visibility:"public"},r=[C(v.id)],k=l("CommunicationGovernedWorkKind",["identity_review","draft","action","handoff","escalation","triage","summary","agent","consent","retention","policy"]),u=l("CommunicationGovernedWorkStatus",["pending","approved","rejected","blocked","resolved","revoked"]),o=a({name:"CommunicationGovernedWorkV1",fields:{id:{type:t.String_unsecure(),isOptional:!1},kind:{type:k,isOptional:!1},status:{type:u,isOptional:!1},title:{type:t.String_unsecure(),isOptional:!1},threadId:{type:t.String_unsecure(),isOptional:!0},details:{type:t.JSONObject(),isOptional:!1},revision:{type:t.Int_unsecure(),isOptional:!1},createdBy:{type:t.String_unsecure(),isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1},updatedBy:{type:t.String_unsecure(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),P=_({meta:{key:"communication.governed_work.list",version:"1.0.0",stability:"experimental",owners:[...s],tags:["communication","governance","work","query"],description:"List governed work in one authorized messaging space",goal:"Drive review queues from replayable state rather than fixtures",context:"The server derives scope and filters optional kinds",docId:r},io:{input:c,output:a({name:"ListCommunicationGovernedWorkV1Output",fields:{items:{type:o,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),K=p({meta:{key:"communication.governed_work.create",version:"1.0.0",stability:"experimental",owners:[...s],tags:["communication","governance","work","create"],description:"Create one idempotent governed work item",goal:"Start an accountable review from a real user or runtime action",context:"Client-supplied tenant or principal authority is rejected",docId:r},io:{input:o,output:o},policy:{auth:"user"}}),z=p({meta:{key:"communication.governed_work.transition",version:"1.0.0",stability:"experimental",owners:[...s],tags:["communication","governance","work","transition"],description:"Apply one policy-valid governed work transition",goal:"Record approval, denial, resolution, blocking, or revocation evidence",context:"Managed kinds require current manager authority and terminal transitions fail closed",docId:r},io:{input:a({name:"TransitionCommunicationGovernedWorkV1Input",fields:{workId:{type:t.String_unsecure(),isOptional:!1},status:{type:u,isOptional:!1},reason:{type:t.String_unsecure(),isOptional:!0}}}),output:o},policy:{auth:"user"}});export{v as CommunicationGovernedWorkDocBlock,k as CommunicationGovernedWorkKindEnum,u as CommunicationGovernedWorkStatusEnum,o as CommunicationGovernedWorkV1Model,K as CreateCommunicationGovernedWorkV1Command,P as ListCommunicationGovernedWorkV1Query,z as TransitionCommunicationGovernedWorkV1Command};