@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 D}from"zod";var So="1.0.0",vo="1.0.0",Hs={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"},V=D.string().trim().min(1),ai=D.string().datetime({offset:!0}),C=D.string().regex(/^sha256:[a-f0-9]{64}$/),y=D.object({ref:V,digest:C}).strict(),_=y.extend({revision:D.number().int().positive()}).strict(),O=D.object({tenantRef:V,workspaceRef:V.optional(),spaceRef:V.optional(),subjectRef:V}).strict(),ri=D.object({schemaVersion:D.literal(So),profileRef:V,revision:D.number().int().positive(),agentRef:V,applicationRef:V,scope:O,routeBindings:D.array(_),connectionRefs:D.array(V),preferenceSet:_,policyRefs:D.array(V).min(1),evidenceRefs:D.array(V).min(1),createdAt:ai,updatedAt:ai,profileDigest:C}).strict().superRefine((e,t)=>{for(let o of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[o]).size!==e[o].length)t.addIssue({code:D.ZodIssueCode.custom,path:[o],message:`${o} must be unique`});let n=e.routeBindings.map((o)=>o.ref);if(new Set(n).size!==n.length)t.addIssue({code:D.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),Re=D.object({schemaVersion:D.literal(vo),linkRef:V,profile:_,agentRef:V,applicationRef:V,scope:O,runRef:V.optional(),taskRef:V.optional(),helpRequestRef:V.optional(),approvalRequestRef:V.optional(),backgroundResultRef:V.optional(),canonicalConversation:y.optional(),session:_.optional(),correlationRef:V,evidenceRefs:D.array(V).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:D.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)t.addIssue({code:D.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 si(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(!R(e.profile.scope,e.lifecycleLink.scope))t.push("Lifecycle scope does not match the agent profile");return t}function ci(e){let{intent:t,progress:n}=e,o=[];if(n.deliveryRef!==t.deliveryRef||n.intent.ref!==t.deliveryRef||n.intent.digest!==t.deliveryDigest)o.push("Progress delivery does not match the intent");if(!R(n.scope,t.scope))o.push("Progress scope does not match the intent");if(n.recipientRef!==t.recipientRefs[0])o.push("Progress recipient does not match the intent");let s=t.requestedRoutes.find((u)=>u.ref===n.route.ref);if(!s||s.revision!==n.route.revision||s.digest!==n.route.digest)o.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))o.push("Progress occurred outside the intent validity window");return o}import{z as de}from"zod";var Oo="1.0.0",yn=de.string().trim().min(1),bo=de.string().datetime({offset:!0}),Ro=de.enum(["queued","running","waiting_for_help","waiting_for_approval","blocked","completed","failed","cancelled"]),$s=de.object({schemaVersion:de.literal(Oo),projectionRef:yn,projectionDigest:C,scope:O,lifecycleLink:Re,status:Ro,checkpoint:y,canonicalConversation:y.optional(),helpRequest:y.optional(),approvalRequest:y.optional(),progressSummaryRef:yn,occurredAt:bo,evidenceRefs:de.array(yn).min(1),effectAuthority:de.literal("none")}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:de.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(e.status==="waiting_for_help"!==Boolean(e.helpRequest))t.addIssue({code:de.ZodIssueCode.custom,path:["helpRequest"],message:"help binding is required only while waiting for help"});if(e.status==="waiting_for_approval"!==Boolean(e.approvalRequest))t.addIssue({code:de.ZodIssueCode.custom,path:["approvalRequest"],message:"approval binding is required only while waiting for approval"})});function Io(e){let t=[],{projection:n,helpRequest:o}=e;if(n.canonicalConversation&&(n.canonicalConversation.ref!==n.lifecycleLink.canonicalConversation?.ref||n.canonicalConversation.digest!==n.lifecycleLink.canonicalConversation?.digest))t.push("Lifecycle projection conversation does not match its link");if(n.status==="waiting_for_help"&&!o)t.push("Waiting-for-help projection requires the durable help request");if(!R(n.scope,n.lifecycleLink.scope))t.push("Projection scope does not match the lifecycle link");if(o&&(n.lifecycleLink.runRef!==o.runRef||n.lifecycleLink.helpRequestRef!==o.id))t.push("Help request does not match the lifecycle link");if(o&&n.helpRequest?.ref!==o.id)t.push("Projection help binding does not match the help request");if(o&&n.checkpoint.ref!==o.checkpointRef)t.push("Projection checkpoint does not match the help request");if(n.approvalRequest?.ref!==n.lifecycleLink.approvalRequestRef)t.push("Projection approval binding does not match the lifecycle link");return t}function Ys(e){let{projection:t}=e;if(!t.canonicalConversation)return["Lifecycle projection requires a canonical conversation"];if(!t.lifecycleLink.session)return["Lifecycle projection requires a canonical session"];return Io(e)}import{z as v}from"zod";async function ee(e){let t=new TextEncoder().encode(gn(e)),n=new Uint8Array(t.byteLength);n.set(t);let o=await crypto.subtle.digest("SHA-256",n.buffer),s=Array.from(new Uint8Array(o),(u)=>u.toString(16).padStart(2,"0")).join("");return C.parse(`sha256:${s}`)}function gn(e){if(Array.isArray(e))return`[${e.map(gn).join(",")}]`;if(e&&typeof e==="object")return`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${gn(n)}`).join(",")}}`;return JSON.stringify(e)}var _o="communication.agent-surface-control.v1",xo="communication.agent-surface-control-result.v1",je=v.string().trim().min(1),Z=y,ko=v.discriminatedUnion("kind",[v.object({kind:v.literal("help_response"),helpRequest:Z,response:Z}).strict(),v.object({kind:v.literal("approval_decision"),approvalRequest:Z,decision:v.enum(["approved","rejected"]),effect:Z}).strict(),v.object({kind:v.literal("steer"),instruction:Z}).strict(),v.object({kind:v.literal("queue"),instruction:Z}).strict(),v.object({kind:v.literal("pause"),reasonRef:je}).strict(),v.object({kind:v.literal("cancel"),reasonRef:je}).strict(),v.object({kind:v.literal("branch"),branchRequest:Z}).strict()]),ac=v.object({schemaVersion:v.literal(_o),controlRef:je,controlDigest:C,scope:O,canonicalConversation:y,lifecycleLink:Re,actorPrincipalRef:je,actorIdentityEvidence:Z,authorityDecision:Z,payload:ko,idempotencyKey:je,createdAt:v.string().datetime({offset:!0}),expiresAt:v.string().datetime({offset:!0}),effectAuthority:v.literal("none")}).strict().superRefine((e,t)=>{if(Date.parse(e.expiresAt)<=Date.parse(e.createdAt))t.addIssue({code:v.ZodIssueCode.custom,path:["expiresAt"],message:"control expiry must follow creation"})}),rc=v.object({schemaVersion:v.literal(xo),resultRef:je,resultDigest:C,control:Z,scope:O,canonicalConversation:Z,authorityDecision:Z,outcome:v.enum(["applied","duplicate","denied","expired"]),executionReceipt:Z.optional(),decidedAt:v.string().datetime({offset:!0}),evidenceRefs:v.array(je).min(1),effectAuthority:v.literal("none")}).strict().superRefine((e,t)=>{if((e.outcome==="applied"||e.outcome==="duplicate")!==Boolean(e.executionReceipt))t.addIssue({code:v.ZodIssueCode.custom,path:["executionReceipt"],message:"executed controls require an execution receipt"})});async function Ao(e){return ee(e)}async function sc(e){let{controlDigest:t,...n}=e;return t===await Ao(n)}async function Vo(e){return ee(e)}async function cc(e){let{resultDigest:t,...n}=e;return t===await Vo(n)}function uc(e){let t=[];if(!R(e.scope,e.lifecycleLink.scope))t.push("Agent surface control scope does not match lifecycle scope");if(e.lifecycleLink.canonicalConversation?.ref!==e.canonicalConversation.ref||e.lifecycleLink.canonicalConversation?.digest!==e.canonicalConversation.digest)t.push("Agent surface control conversation does not match lifecycle link");if(!e.lifecycleLink.runRef)t.push("Agent surface control requires a run-bound lifecycle link");if(e.payload.kind==="help_response"&&e.payload.helpRequest.ref!==e.lifecycleLink.helpRequestRef)t.push("Help response does not match the lifecycle help request");if(e.payload.kind==="approval_decision"&&e.payload.approvalRequest.ref!==e.lifecycleLink.approvalRequestRef)t.push("Approval decision does not match the lifecycle approval request");return t}function pc(e){let t=[];if(e.result.control.ref!==e.control.controlRef||e.result.control.digest!==e.control.controlDigest)t.push("Agent surface result control binding does not match");if(!R(e.result.scope,e.control.scope))t.push("Agent surface result scope does not match");if(e.result.canonicalConversation.ref!==e.control.canonicalConversation.ref||e.result.canonicalConversation.digest!==e.control.canonicalConversation.digest)t.push("Agent surface result conversation does not match");if(e.result.authorityDecision.ref!==e.control.authorityDecision.ref||e.result.authorityDecision.digest!==e.control.authorityDecision.digest)t.push("Agent surface result authority decision does not match");return t}import{z as Q}from"zod";var Do="communication.canonical-agent-conversation.v1",Ft=Q.string().trim().min(1),yc=Q.object({schemaVersion:Q.literal(Do),conversationRef:Ft,conversationDigest:C,revision:Q.number().int().positive(),scope:O,roomRef:Ft,session:_,origin:Q.enum(["interactive","scheduled","background","recovery","replay","branch"]),parentConversation:y.optional(),participantRefs:Q.array(Ft).min(1),channelIdentityRefs:Q.array(Ft),createdAt:Q.string().datetime({offset:!0}),updatedAt:Q.string().datetime({offset:!0}),effectAuthority:Q.literal("none")}).strict().superRefine((e,t)=>{for(let n of["participantRefs","channelIdentityRefs"])if(new Set(e[n]).size!==e[n].length)t.addIssue({code:Q.ZodIssueCode.custom,path:[n],message:`${n} must be unique`});if(e.origin==="branch"!==Boolean(e.parentConversation))t.addIssue({code:Q.ZodIssueCode.custom,path:["parentConversation"],message:"parentConversation is required only for branch origin"});if(Date.parse(e.updatedAt)<Date.parse(e.createdAt))t.addIssue({code:Q.ZodIssueCode.custom,path:["updatedAt"],message:"updatedAt cannot precede createdAt"})});async function Eo(e){return ee(e)}async function gc(e){let{conversationDigest:t,...n}=e;return t===await Eo(n)}function hc(e){return R(e.conversation.scope,e.scope)?[]:["Canonical conversation scope does not match"]}import{z as d}from"zod";import{z as te}from"zod";var wo="1.0.0",To=["email","calendar","sms","slack","teams","discord","telegram","whatsapp","matrix","in_app","push","webhook","web_chat","internal_chat"],yt=te.string().trim().min(1),Oc=te.enum(To),gt=te.enum(["communication","calendar_event"]),ft=te.string().trim().min(1),hn=te.object({schemaVersion:te.literal(wo),routeRef:ft,revision:te.number().int().positive(),scope:O,channel:yt,destinationRef:ft,connectionRef:ft.optional(),semantic:gt,deliveryMode:te.enum(["direct","durable_in_app"]),capabilityRefs:te.array(ft),evidenceRefs:te.array(ft).min(1),routeDigest:C}).strict().superRefine((e,t)=>{if(e.channel==="calendar"!==(e.semantic==="calendar_event"))t.addIssue({code:te.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:te.ZodIssueCode.custom,path:[n],message:`${n} must be unique`})});import{z as q}from"zod";var Po="1.0.0",Mo="communication:preference-target:platform-default",_c=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],xc=q.enum(["event","automation","feature","application","product","space","person","platform_default"]),Ye=q.string().trim().min(1);function Be(e){return q.object({kind:q.literal(e),ref:Ye}).strict()}var Gt=q.discriminatedUnion("kind",[Be("event"),Be("automation"),Be("feature"),Be("application"),Be("product"),Be("space"),Be("person"),q.object({kind:q.literal("platform_default"),ref:q.literal(Mo)}).strict()]),qo=q.object({preferenceSetRef:Ye,revision:q.number().int().positive(),digest:C,target:Gt}).strict(),pi=q.object({schemaVersion:q.literal(Po),resolutionRef:Ye,scope:O,subjectRef:Ye,evaluatedPreferenceSets:q.array(qo).min(1),winningPreferenceSetRef:Ye,winningTarget:Gt,authority:q.literal("preference_only"),effectAuthority:q.literal("none"),resolvedAt:q.string().datetime({offset:!0}),evidenceRefs:q.array(Ye).min(1),resolutionDigest:C}).strict().superRefine((e,t)=>{let n=e.evaluatedPreferenceSets.map((s)=>s.preferenceSetRef);if(new Set(n).size!==n.length)$e(t,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)$e(t,"evidenceRefs","evidenceRefs must be unique");for(let s=1;s<e.evaluatedPreferenceSets.length;s+=1){let u=e.evaluatedPreferenceSets[s-1],h=e.evaluatedPreferenceSets[s];if(u&&h&&ui(u.target.kind)>ui(h.target.kind)){$e(t,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let o=e.evaluatedPreferenceSets.find((s)=>s.preferenceSetRef===e.winningPreferenceSetRef);if(!o)$e(t,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(o.preferenceSetRef!==e.evaluatedPreferenceSets[0]?.preferenceSetRef)$e(t,"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)$e(t,"winningTarget","winning target must match the winning preference set")});function ui(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 $e(e,t,n){e.addIssue({code:q.ZodIssueCode.custom,path:[t],message:n})}function Kt(e){let{preferenceResolution:t,preferenceSet:n}=e,o=[];if(t.subjectRef!==n.scope.subjectRef||t.winningPreferenceSetRef!==n.preferenceSetRef)o.push("Preference resolution does not match its subject and set");if(!R(t.scope,n.scope))o.push("Preference resolution scope does not match its preference set");let s=t.evaluatedPreferenceSets.find((u)=>u.preferenceSetRef===n.preferenceSetRef);if(!s||s.revision!==n.revision||s.digest!==n.preferenceSetDigest)o.push("Preference resolution binding is stale");if(t.winningTarget.kind!==n.target.kind||t.winningTarget.ref!==n.target.ref)o.push("Preference resolution target does not match its preference set");return o}var No="1.0.0",ze=d.string().trim().min(1),Lo=d.string().datetime({offset:!0}),Cn=d.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),jo=d.object({start:Cn,end:Cn,timezone:d.string().trim().min(1)}).strict(),Bo=d.object({enabled:d.boolean(),frequency:d.enum(["immediate","daily","weekly"]),deliveryTime:Cn.optional()}).strict().superRefine((e,t)=>{if(e.frequency==="immediate"&&e.deliveryTime)t.addIssue({code:d.ZodIssueCode.custom,path:["deliveryTime"],message:"immediate digest frequency cannot carry a delivery time"});if(e.enabled&&e.frequency!=="immediate"&&!e.deliveryTime)t.addIssue({code:d.ZodIssueCode.custom,path:["deliveryTime"],message:"enabled daily or weekly digest requires a delivery time"})}),zo=d.object({routeRef:ze,channel:yt,enabled:d.boolean(),priority:d.number().int().positive(),consentRef:ze.optional(),quietHours:jo.optional(),digest:Bo.optional()}).strict(),Fo=d.object({enabled:d.boolean(),orderedRouteRefs:d.array(ze),terminalRouteRef:ze.optional()}).strict().superRefine((e,t)=>{if(new Set(e.orderedRouteRefs).size!==e.orderedRouteRefs.length)t.addIssue({code:d.ZodIssueCode.custom,path:["orderedRouteRefs"],message:"fallback routes must be unique"});if(e.enabled&&e.orderedRouteRefs.length===0)t.addIssue({code:d.ZodIssueCode.custom,path:["orderedRouteRefs"],message:"enabled fallback requires at least one route"})}),mi=d.object({schemaVersion:d.literal(No),preferenceSetRef:ze,revision:d.number().int().positive(),scope:O,target:Gt,parentPreferenceSetRefs:d.array(ze),authority:d.literal("preference_only"),globalEnabled:d.boolean(),routePreferences:d.array(zo),fallback:Fo,updatedAt:Lo,evidenceRefs:d.array(ze).min(1),preferenceSetDigest:C}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:d.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(new Set(e.parentPreferenceSetRefs).size!==e.parentPreferenceSetRefs.length)t.addIssue({code:d.ZodIssueCode.custom,path:["parentPreferenceSetRefs"],message:"parent preference sets must be unique"});if(e.parentPreferenceSetRefs.includes(e.preferenceSetRef))t.addIssue({code:d.ZodIssueCode.custom,path:["parentPreferenceSetRefs"],message:"a preference set cannot inherit from itself"});let n=e.routePreferences.map((u)=>u.routeRef);if(new Set(n).size!==n.length)t.addIssue({code:d.ZodIssueCode.custom,path:["routePreferences"],message:"route preferences must be unique"});let o=e.routePreferences.map((u)=>u.priority);if(new Set(o).size!==o.length)t.addIssue({code:d.ZodIssueCode.custom,path:["routePreferences"],message:"route preference priorities must be unique"});let s=new Set(n);for(let u of e.fallback.orderedRouteRefs)if(!s.has(u))t.addIssue({code:d.ZodIssueCode.custom,path:["fallback","orderedRouteRefs"],message:`fallback route ${u} has no route preference`});if(e.fallback.terminalRouteRef&&!s.has(e.fallback.terminalRouteRef))t.addIssue({code:d.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:d.ZodIssueCode.custom,path:["fallback","terminalRouteRef"],message:"terminal route must be part of the fallback order"})});import{z as E}from"zod";var Mc="communication.support.customer-live-chat.grant",qc="communication.support.customer-live-chat.verify",Nc=["messages:list","messages:send","realtime:ticket"],J=E.string().trim().min(1).max(300),Sn=E.object({bindingRef:J,spaceRef:J,sessionRef:J,sessionRevision:E.number().int().positive(),caseRef:J,caseRevision:E.number().int().nonnegative(),conversationRef:J,roomRef:J,channel:E.enum(["messenger","portal"])}).strict(),Lc=Sn.extend({expiresAt:E.string().datetime({offset:!0}),evidenceRefs:E.array(J).min(1).max(20)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:E.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"})}),Go=Sn.omit({bindingRef:!0}).strict(),jc=Go.extend({conversationRevision:E.number().int().positive(),evidenceRef:J,verifiedAt:E.string().datetime({offset:!0})}).strict(),Ko=E.object({tenantId:J,workspaceId:J,spaceId:J}).strict(),Bc=E.object({grantRef:J,accessToken:E.string().min(16).max(8192),realtimeTicket:E.string().min(16).max(8192),principalRef:J,scope:Ko,binding:Sn,inputDigest:E.string().regex(/^sha256:[a-f0-9]{64}$/),expiresAt:E.string().datetime({offset:!0}),capabilities:E.tuple([E.literal("messages:list"),E.literal("messages:send"),E.literal("realtime:ticket")])}).strict();function zc(e){return ee(e)}function Fc(e){return ee(e)}import{z as N}from"zod";var Uo="1.0.0",Fe=N.string().trim().min(1),li=N.string().datetime({offset:!0}),Wo=N.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"]),Ho=N.object({checkRef:Fe,category:Wo,status:N.enum(["passed","failed","unknown","not_applicable"]),reasonCodes:N.array(Fe).min(1),evidenceRefs:N.array(Fe).min(1)}).strict().superRefine((e,t)=>{for(let n of["reasonCodes","evidenceRefs"])if(new Set(e[n]).size!==e[n].length)t.addIssue({code:N.ZodIssueCode.custom,path:[n],message:`${n} must be unique`})}),Hc=N.object({schemaVersion:N.literal(Uo),eligibilityRef:Fe,eligibilityDigest:C,deliveryRef:Fe,intent:y,scope:O,recipientRef:Fe,route:_,channel:yt,semantic:gt,checks:N.array(Ho).min(1),result:N.enum(["eligible","ineligible","unknown"]),effectAuthority:N.literal("none"),evaluatedAt:li,expiresAt:li,evidenceRefs:N.array(Fe).min(1)}).strict().superRefine((e,t)=>{let n=e.checks.map((u)=>u.checkRef),o=e.checks.map((u)=>u.category);for(let[u,h]of[["checks",n],["checks",o],["evidenceRefs",e.evidenceRefs]])if(new Set(h).size!==h.length)t.addIssue({code:N.ZodIssueCode.custom,path:[u],message:`${u} must be unique`});let s=e.checks.some((u)=>u.status==="failed")?"ineligible":e.checks.some((u)=>u.status==="unknown")?"unknown":"eligible";if(e.result!==s)t.addIssue({code:N.ZodIssueCode.custom,path:["result"],message:"result must be derived from all eligibility checks"});if(e.checks.every((u)=>u.status==="not_applicable"))t.addIssue({code:N.ZodIssueCode.custom,path:["checks"],message:"at least one eligibility check must be applicable"});if(Date.parse(e.expiresAt)<=Date.parse(e.evaluatedAt))t.addIssue({code:N.ZodIssueCode.custom,path:["expiresAt"],message:"expiresAt must be later than evaluatedAt"})});function Zc(e){let{decision:t,intent:n,route:o}=e,s=[];if(t.deliveryRef!==n.deliveryRef||t.intent.ref!==n.deliveryRef||t.intent.digest!==n.deliveryDigest)s.push("Eligibility decision does not bind the delivery intent");if(t.route.ref!==o.routeRef||t.route.revision!==o.revision||t.route.digest!==o.routeDigest||!n.requestedRoutes.some((u)=>u.ref===o.routeRef&&u.revision===o.revision&&u.digest===o.routeDigest))s.push("Eligibility decision does not bind a requested route");if(!R(t.scope,n.scope)||!R(t.scope,o.scope))s.push("Eligibility scope does not match the intent and route");if(t.recipientRef!==n.recipientRefs[0]||t.channel!==o.channel||t.semantic!==o.semantic||t.semantic!==n.semantic)s.push("Eligibility recipient or route semantics do not match");if(Date.parse(t.evaluatedAt)<Date.parse(n.createdAt)||Date.parse(t.expiresAt)>Date.parse(n.expiresAt))s.push("Eligibility decision is outside the intent validity window");return s}import{z as w}from"zod";function di(e){let t=[],n=new Map(e.eligibilityDecisions.map((o)=>[o.eligibilityRef,o]));for(let o of e.decision.consideredRoutes){let s=n.get(o.eligibilityDecision.ref);if(!s||s.eligibilityDigest!==o.eligibilityDecision.digest||s.result!==o.eligibility)t.push(`Fallback eligibility result is stale: ${o.route.ref}`)}return t}function fi(e){let{decision:t,priorProgress:n}=e,o=[];if(t.priorOutcome!=="not_attempted"!==Boolean(n))o.push("Fallback prior outcome and progress presence do not match");if(!n)return o;if(t.priorAttemptRef!==n.attemptRef)o.push("Fallback prior attempt does not match progress");if(t.priorProgress?.ref!==n.progressRef||t.priorProgress?.digest!==n.progressDigest)o.push("Fallback prior progress binding does not match");let s=t.priorOutcome==="definitive_failure"?"failed":"ambiguous";if(n.status!==s)o.push("Fallback prior outcome does not match progress status");if((t.priorOutcome==="ambiguous"||t.priorOutcome==="reconciled_failure")&&(n.reconciliation?.ref!==t.reconciliation.binding?.ref||n.reconciliation?.digest!==t.reconciliation.binding?.digest))o.push("Fallback reconciliation does not match ambiguous progress");return o}function yi(e){let t=[],n=new Map(e.decision.eligibilityDecisions.map((o)=>[o.ref,o.digest]));if(n.size!==e.decision.consideredRoutes.length||e.decision.consideredRoutes.some((o)=>n.get(o.eligibilityDecision.ref)!==o.eligibilityDecision.digest))t.push("Fallback eligibility evidence must exactly match considerations");for(let[o,s]of e.decision.consideredRoutes.entries())if(n.get(s.eligibilityDecision.ref)!==s.eligibilityDecision.digest)t.push(`Fallback route ${s.route.ref} lacks eligibility evidence`);else if(e.orderedRouteRefs[o]!==s.route.ref){t.push("Fallback considerations do not follow the configured order");break}return t}function Zo(e){let{decision:t,intent:n,priorProgress:o,preferenceResolution:s,preferenceSet:u}=e,h=[];if(t.deliveryRef!==n.deliveryRef||t.intent.ref!==n.deliveryRef||t.intent.digest!==n.deliveryDigest)h.push("Fallback delivery does not match the intent");if(!R(t.scope,n.scope))h.push("Fallback scope does not match the intent");if(t.preferenceSet.ref!==n.preferenceSet.ref||t.preferenceSet.revision!==n.preferenceSet.revision||t.preferenceSet.digest!==n.preferenceSet.digest||t.preferenceSet.ref!==u.preferenceSetRef||t.preferenceSet.revision!==u.revision||t.preferenceSet.digest!==u.preferenceSetDigest)h.push("Fallback preferences do not match the intent and resolution");if(h.push(...Kt({preferenceResolution:s,preferenceSet:u})),e.eligibilityDecisions)h.push(...di({decision:t,eligibilityDecisions:e.eligibilityDecisions}));if(n.preferenceResolution.ref!==s.resolutionRef||n.preferenceResolution.digest!==s.resolutionDigest)h.push("Fallback preference resolution does not match the intent");let Ne=new Map(e.routes.map((j)=>[j.routeRef,j]));for(let j of t.consideredRoutes){let S=Ne.get(j.route.ref);if(!S||j.route.revision!==S.revision||j.route.digest!==S.routeDigest||!R(t.scope,S.scope))h.push(`Fallback route binding is stale: ${j.route.ref}`)}if(!R(t.scope,u.scope))h.push("Fallback scope does not match the preference set");if(h.push(...fi({decision:t,priorProgress:o}),...yi({decision:t,orderedRouteRefs:n.requestedRoutes.map((j)=>j.ref)})),o)h.push(...ci({intent:n,progress:o}));if(t.recipientRef!==n.recipientRefs[0])h.push("Fallback recipient does not match the intent");if(Qo(e,h),t.policyRefs.some((j)=>!n.policyRefs.includes(j)))h.push("Fallback policy is not bound to the delivery intent");return h}function Qo(e,t){let{decision:n,intent:o,preferenceSet:s,priorProgress:u}=e;if(n.state!=="selected"||!n.selectedRoute)return;let h=n.selectedRoute.ref,Ne=o.requestedRoutes.map((X)=>X.ref),j=Ne.indexOf(h),S=s.routePreferences.find((X)=>X.routeRef===h),M=e.routes.find((X)=>X.routeRef===h),Le=o.requestedRoutes.find((X)=>X.ref===h),dt=u?Ne.indexOf(u.route.ref):-1,dn=n.consideredRoutes.find((X)=>{let oi=e.routes.find((fn)=>fn.routeRef===X.route.ref),ho=s.routePreferences.find((fn)=>fn.routeRef===X.route.ref),Co=o.noticeClass==="mandatory_notice"&&oi?.channel==="in_app"&&oi.deliveryMode==="durable_in_app";return X.eligibility==="eligible"&&Ne.indexOf(X.route.ref)>dt&&(s.globalEnabled&&ho?.enabled||Co)}),ii=o.noticeClass==="mandatory_notice"&&M?.channel==="in_app"&&M?.deliveryMode==="durable_in_app";if(!s.globalEnabled&&!ii||!s.fallback.enabled||j<0||!s.fallback.orderedRouteRefs.includes(h)||!Le||!S?.enabled&&!ii||!M||M?.channel!==S?.channel||M.semantic!==o.semantic)t.push("Selected fallback route is not requested and eligible by configuration");if(n.selectedRoute.revision!==M?.revision||n.selectedRoute.digest!==M?.routeDigest||Le?.revision!==M?.revision||Le?.digest!==M?.routeDigest)t.push("Selected fallback route binding is stale");if(S?.consentRef&&!o.consentRefs.includes(S.consentRef))t.push("Selected fallback route lacks required consent");if(dn?.route.ref!==h||n.consideredRoutes.length!==j+1)t.push("Selected fallback route is not the first eligible ordered route");if(u&&dt>=j)t.push("Selected fallback route does not follow the prior attempt")}var Jo="1.0.0",Xe=w.string().trim().min(1),$o=w.object({route:_,eligibility:w.enum(["eligible","ineligible","unknown"]),eligibilityDecision:y,reasonCodes:w.array(w.string().trim().min(1)).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.reasonCodes).size!==e.reasonCodes.length)ne(t,"reasonCodes","reason codes must be unique")}),Yo=w.object({status:w.enum(["not_required","pending","resolved"]),binding:y.optional()}).strict().superRefine((e,t)=>{if(e.status==="not_required"&&e.binding)t.addIssue({code:w.ZodIssueCode.custom,path:["binding"],message:"not_required reconciliation cannot carry a ref"});if(e.status!=="not_required"&&!e.binding)t.addIssue({code:w.ZodIssueCode.custom,path:["binding"],message:"pending or resolved reconciliation requires a ref"})}),iu=w.object({schemaVersion:w.literal(Jo),decisionRef:Xe,fallbackDecisionDigest:C,deliveryRef:Xe,intent:y,scope:O,recipientRef:Xe,priorAttemptRef:Xe.optional(),priorProgress:y.optional(),priorOutcome:w.enum(["not_attempted","definitive_failure","ambiguous","reconciled_failure"]),state:w.enum(["selected","fail_closed","not_required"]),consideredRoutes:w.array($o).min(1),selectedRoute:_.optional(),preferenceSet:_,eligibilityDecisions:w.array(y).min(1),policyRefs:w.array(Xe).min(1),reconciliation:Yo,effectAuthority:w.literal("none"),decidedAt:w.string().datetime({offset:!0}),evidenceRefs:w.array(Xe).min(1)}).strict().superRefine((e,t)=>{if(e.priorOutcome==="not_attempted"&&(e.priorAttemptRef||e.priorProgress))ne(t,"priorAttemptRef","not-attempted fallback cannot reference a prior attempt");if(e.priorOutcome!=="not_attempted"&&(!e.priorAttemptRef||!e.priorProgress))ne(t,"priorAttemptRef","attempted fallback outcomes require prior attempt and progress bindings");let n=e.consideredRoutes.map((s)=>s.route.ref);if(new Set(n).size!==n.length)ne(t,"consideredRoutes","considered routes must be unique");for(let s of["policyRefs","evidenceRefs"])if(new Set(e[s]).size!==e[s].length)ne(t,s,`${s} must be unique`);let o=e.eligibilityDecisions.map((s)=>s.ref);if(new Set(o).size!==o.length)ne(t,"eligibilityDecisions","eligibility decisions must be unique");if(e.priorOutcome==="ambiguous"&&(e.state!=="fail_closed"||e.selectedRoute||e.reconciliation.status!=="pending"))ne(t,"state","ambiguous delivery must remain fail closed until reclassified as a reconciled failure");if(e.priorOutcome==="reconciled_failure"&&e.reconciliation.status!=="resolved")ne(t,"reconciliation","reconciled failure requires resolved reconciliation evidence");if((e.priorOutcome==="not_attempted"||e.priorOutcome==="definitive_failure")&&e.reconciliation.status!=="not_required")ne(t,"reconciliation","non-ambiguous fallback must not carry reconciliation state");if(e.state==="selected"){let s=e.selectedRoute;if(!s)ne(t,"selectedRoute","selected fallback requires a route");else if(!e.consideredRoutes.some((u)=>u.route.ref===s.ref&&u.route.revision===s.revision&&u.route.digest===s.digest&&u.eligibility==="eligible"))ne(t,"selectedRoute","selected fallback route requires an explicit eligibility decision")}else if(e.selectedRoute)ne(t,"selectedRoute","non-selected fallback decisions cannot carry a selected route")});function ne(e,t,n){e.addIssue({code:w.ZodIssueCode.custom,path:[t],message:n})}import{z as T}from"zod";import{z as x}from"zod";var B=x.string().min(1),On=x.string().datetime({offset:!0}),su="1.0.0",cu="communication.sequence-intent.v1|sequence,action-packet,recipient,content-proof,channel,side-effect,schedule,expiry,approval,policy|approval-bound,provider-neutral",uu="sha256:7ef776396727b0e7ee015935d8f7d5f4605a08b815f6493aa737411490edc633",Xo="1.0.0",pu="communicationSequenceApprovalTarget",mu="communicationSequenceApprovalFingerprint",ea="communication-sequence-approval:",Ut=x.object({contentRef:B,sha256:x.string().regex(/^[a-f0-9]{64}$/)}),ta=x.object({body:x.string(),subject:x.string().optional(),htmlBody:x.string().optional(),replyToExternalMessageId:x.string().optional()}),gi=x.object({notBefore:On,maxAttempts:x.number().int().positive(),retryDelayMs:x.number().int().nonnegative()}),hi=x.object({policyRefs:x.array(B).min(1),consentRef:B,killSwitchRef:B}),na=x.object({schemaVersion:x.literal(Xo),sequenceRef:B,sequenceVersion:B,tenantRef:B,recipientRefs:x.array(B).min(1),contentProof:Ut,channel:B,sideEffect:x.literal("send_reply"),schedulePolicyVersion:B,schedulePolicy:gi,policyVersion:B,policy:hi,expiresAt:On}).superRefine((e,t)=>{if(new Set(e.recipientRefs).size!==e.recipientRefs.length)t.addIssue({code:x.ZodIssueCode.custom,message:"recipientRefs must be unique",path:["recipientRefs"]});if(Date.parse(e.expiresAt)<=Date.parse(e.schedulePolicy.notBefore))t.addIssue({code:x.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});function vn(e){if(Array.isArray(e))return`[${e.map(vn).join(",")}]`;if(e&&typeof e==="object")return`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${vn(n)}`).join(",")}}`;return JSON.stringify(e)}async function Ci(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(vn(e)));return Array.from(new Uint8Array(t),(n)=>n.toString(16).padStart(2,"0")).join("")}async function lu(e){let t=ta.parse(e);return Ci({body:t.body,htmlBody:t.htmlBody??null,replyToExternalMessageId:t.replyToExternalMessageId??null,subject:t.subject??null})}async function du(e){let t=na.parse(e);return`sha256:${await Ci(t)}`}function fu(e){return`${ea}${e}`}var yu=x.object({sequenceRef:B,actionPacketRef:B,recipientRef:B,contentProof:Ut,channel:B,sideEffect:x.literal("send_reply"),schedulePolicy:gi,expiresAt:On,approvalRequestId:B,approvalFingerprint:B,policy:hi}).superRefine((e,t)=>{if(Date.parse(e.expiresAt)<=Date.parse(e.schedulePolicy.notBefore))t.addIssue({code:x.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});function ia(e){let{intent:t,profile:n,preferenceSet:o,preferenceResolution:s}=e,u=[];if(!R(t.scope,n.scope))u.push("Intent scope does not match the agent profile");if(!R(t.scope,o.scope))u.push("Intent scope does not match the preference set");if(t.lifecycleLink){if(u.push(...si({profile:n,lifecycleLink:t.lifecycleLink})),!R(t.scope,t.lifecycleLink.scope))u.push("Intent scope does not match the lifecycle link")}if(t.profile.ref!==n.profileRef||t.profile.revision!==n.revision||t.profile.digest!==n.profileDigest)u.push("Intent profile binding is stale");if(t.preferenceSet.ref!==o.preferenceSetRef||t.preferenceSet.revision!==o.revision||t.preferenceSet.digest!==o.preferenceSetDigest)u.push("Intent preference set does not match its preferences");let h=s.evaluatedPreferenceSets.find((S)=>S.preferenceSetRef===n.preferenceSet.ref);if(!h||h.revision!==n.preferenceSet.revision||h.digest!==n.preferenceSet.digest)u.push("Agent profile preference set was not evaluated");if(u.push(...Kt({preferenceResolution:s,preferenceSet:o})),t.preferenceResolution.ref!==s.resolutionRef||t.preferenceResolution.digest!==s.resolutionDigest)u.push("Intent preference resolution binding is stale");if(s.subjectRef!==t.scope.subjectRef)u.push("Preference resolution does not bind the intent subject");if(t.classificationRefs.applicationRef&&t.classificationRefs.applicationRef!==n.applicationRef)u.push("Intent application classification does not match the profile");if(t.policyRefs.some((S)=>!n.policyRefs.includes(S)))u.push("Intent policy is not bound to the agent profile");let Ne=new Map(e.routes.map((S)=>[S.routeRef,S])),j=new Map(o.routePreferences.map((S)=>[S.routeRef,S]));for(let S of t.requestedRoutes){let M=Ne.get(S.ref),Le=n.routeBindings.find((dn)=>dn.ref===S.ref),dt=j.get(S.ref);if(!M||!Le){u.push(`Requested route ${S.ref} is not bound to the profile`);continue}if(S.revision!==M.revision||S.digest!==M.routeDigest||Le.revision!==M.revision||Le.digest!==M.routeDigest)u.push(`Requested route ${S.ref} binding is stale`);if(!R(t.scope,M.scope))u.push(`Requested route ${S.ref} scope does not match`);if(M.semantic!==t.semantic)u.push(`Requested route ${S.ref} has incompatible semantics`);if(!dt||dt.channel!==M.channel)u.push(`Requested route ${S.ref} is not configured by preferences`)}if(!o.globalEnabled&&t.noticeClass!=="mandatory_notice")u.push("Intent preference set is globally disabled");return u}var oa="1.0.0",W=T.string().trim().min(1),Si=T.string().datetime({offset:!0}),aa=Ut.extend({contentRef:W}).strict(),ra=T.object({eventRef:W.optional(),automationRef:W.optional(),featureRef:W.optional(),applicationRef:W.optional(),productRef:W.optional()}).strict().superRefine((e,t)=>{if(!Object.values(e).some(Boolean))t.addIssue({code:T.ZodIssueCode.custom,message:"at least one delivery classification ref is required"})}),sa=T.object({kind:T.enum(["agent","notification","automation","system"]),sourceRef:W}).strict(),ca=T.enum(["user_selected","mandatory_notice"]),Iu=T.object({schemaVersion:T.literal(oa),deliveryRef:W,deliveryDigest:C,scope:O,source:sa,noticeClass:ca.optional(),profile:_,semantic:gt,classificationRefs:ra,lifecycleLink:Re.optional(),recipientRefs:T.array(W).length(1),contentProof:aa,requestedRoutes:T.array(_).min(1),preferenceSet:_,preferenceResolution:y,consentRefs:T.array(W),policyRefs:T.array(W).min(1),approvalRequestRef:W.optional(),idempotencyKey:W,effectAuthority:T.literal("none"),createdAt:Si,expiresAt:Si,evidenceRefs:T.array(W).min(1)}).strict().superRefine((e,t)=>{if(e.source.kind==="agent"&&!e.lifecycleLink)t.addIssue({code:T.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)t.addIssue({code:T.ZodIssueCode.custom,path:[o],message:`${o} must be unique`});let n=e.requestedRoutes.map((o)=>o.ref);if(new Set(n).size!==n.length)t.addIssue({code:T.ZodIssueCode.custom,path:["requestedRoutes"],message:"requested routes must be unique"});if(e.recipientRefs[0]!==e.scope.subjectRef)t.addIssue({code:T.ZodIssueCode.custom,path:["recipientRefs"],message:"V1 delivery requires exactly the scoped recipient"});if(Date.parse(e.expiresAt)<=Date.parse(e.createdAt))t.addIssue({code:T.ZodIssueCode.custom,path:["expiresAt"],message:"expiresAt must be later than createdAt"})});import{z as ge}from"zod";var ua="1.0.0",pa=ge.enum(["queued","dispatched","provider_accepted","delivered","read","failed","ambiguous","cancelled","policy_blocked"]),Ie=ge.string().trim().min(1),Vu=ge.object({schemaVersion:ge.literal(ua),progressRef:Ie,progressDigest:C,deliveryRef:Ie,intent:y,scope:O,recipientRef:Ie,attemptRef:Ie,route:_,status:pa,providerReceiptRef:Ie.optional(),deliveryReceiptRef:Ie.optional(),readReceiptRef:Ie.optional(),reconciliation:y.optional(),failureCode:ge.string().trim().min(1).optional(),effectAuthority:ge.literal("none"),occurredAt:ge.string().datetime({offset:!0}),evidenceRefs:ge.array(Ie).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)_e(t,"evidenceRefs","evidenceRefs must be unique");if(e.status==="provider_accepted"){if(!e.providerReceiptRef)_e(t,"providerReceiptRef","provider acceptance requires a receipt");if(e.deliveryReceiptRef||e.readReceiptRef)_e(t,"deliveryReceiptRef","provider acceptance is not delivery or read confirmation")}if(e.status==="delivered"&&!e.deliveryReceiptRef)_e(t,"deliveryReceiptRef","delivery requires a delivery receipt");if(e.deliveryReceiptRef&&e.status!=="delivered"&&e.status!=="read")_e(t,"deliveryReceiptRef","delivery receipt is valid only for delivered or read progress");if(e.readReceiptRef&&e.status!=="read")_e(t,"readReceiptRef","read receipt is valid only for read progress");if(e.status==="read"&&(!e.deliveryReceiptRef||!e.readReceiptRef))_e(t,"readReceiptRef","read requires delivery and read receipts");if(e.status==="ambiguous"&&!e.reconciliation)_e(t,"reconciliation","ambiguous progress requires a reconciliation ref")});function _e(e,t,n){e.addIssue({code:ge.ZodIssueCode.custom,path:[t],message:n})}import{defineEvent as ht,docId as la}from"@lssm/lib.contracts-spec";import{defineSchemaModel as da,ScalarTypeEnum as tt}from"@lssm/lib.schema";import{z as r}from"zod";var et={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"},vi=r.enum(["staff","managed-community"]),ma=r.enum(["pending","active","degraded","revoked"]),wu=r.object({id:r.string().min(1),tenantId:r.string().min(1),workspaceId:r.string().min(1),spaceId:r.string().min(1),network:r.literal("discord"),guildId:r.string().min(1),name:r.string().min(1),specialtyKeys:r.array(r.string().min(1)),trustZone:vi,status:ma,policyRef:r.string().min(1),retentionPolicyRef:r.string().min(1),createdAt:r.string().datetime(),updatedAt:r.string().datetime()}).strict(),Tu=r.object({id:r.string().min(1),sourceId:r.string().min(1),guildId:r.string().min(1),applicationId:r.string().min(1),botUserId:r.string().min(1),credentialRef:r.string().min(1),declaredIntents:r.array(r.string().min(1)),verifiedPermissions:r.array(r.string().min(1)),allowedChannelIds:r.array(r.string().min(1)),excludedChannelIds:r.array(r.string().min(1)),backfillDays:r.number().int().min(0).max(90),health:r.enum(["pending","healthy","degraded","offline","revoked"]),installationEvidenceRefs:r.array(r.string().min(1)).min(1),lastVerifiedAt:r.string().datetime().optional()}).strict(),Pu=r.object({id:r.string().min(1),tenantId:r.string().min(1),provider:r.literal("discord"),providerUserId:r.string().min(1),canonicalPrincipalRef:r.string().min(1).optional(),guildMemberships:r.array(r.object({guildId:r.string().min(1),roleIds:r.array(r.string().min(1)),state:r.enum(["active","left","banned"]),observedAt:r.string().datetime()}).strict()),mergeEvidence:r.array(r.object({providerUserId:r.string().min(1),decision:r.literal("approved"),decidedByPrincipalRef:r.string().min(1),evidenceRef:r.string().min(1),decidedAt:r.string().datetime()}).strict())}).strict(),Mu=r.object({id:r.string().min(1),schemaVersion:r.literal("2.0.0"),sourceId:r.string().min(1),trustZone:vi,guildId:r.string().min(1),channelId:r.string().min(1).optional(),threadId:r.string().min(1).optional(),actorProviderUserId:r.string().min(1).optional(),eventKind:r.string().min(1),gatewaySessionId:r.string().min(1).optional(),gatewaySequence:r.number().int().nonnegative().optional(),providerEventId:r.string().min(1),occurredAt:r.string().datetime(),protectedContent:r.object({ciphertextRef:r.string().min(1),digest:r.string().min(1),redactionStatus:r.enum(["pending","applied","not_required"])}).strict().optional(),metadata:r.record(r.string(),r.string()),evidenceRefs:r.array(r.string().min(1)).min(1)}).strict(),bn=r.object({sourceIds:r.array(r.string().min(1)).min(1),windowStart:r.string().datetime(),windowEnd:r.string().datetime(),confidence:r.number().min(0).max(1),evidenceRefs:r.array(r.string().min(1)).min(1)}).strict(),qu=bn.extend({id:r.string().min(1),kind:r.enum(["recurring_question","pain_point","friction_trend","emerging_topic","response_gap","moderation_pattern"]),title:r.string().min(1),summary:r.string().min(1),specialtyKeys:r.array(r.string().min(1)),metricValue:r.number().optional()}).strict(),Nu=bn.extend({id:r.string().min(1),staffPrincipalRef:r.string().min(1),visibility:r.literal("authorized_manager"),metrics:r.record(r.string(),r.number()),coachingObservations:r.array(r.string().min(1))}).strict(),Lu=bn.extend({id:r.string().min(1),status:r.enum(["draft","published"]),insightRefs:r.array(r.string().min(1)),changes:r.array(r.string().min(1)),suggestedExperiments:r.array(r.string().min(1)),generatedAt:r.string().datetime()}).strict();var Oi=[la(et.id)],Wt=(e,t,n)=>({key:e,version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...n],description:t,docId:Oi}),fa=(e,t,n)=>({key:e,version:"2.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...n],description:t,docId:Oi}),Ct=da({name:"CommunicationDiscordCommunityEventV1Payload",fields:{sourceRef:{type:tt.String_unsecure(),isOptional:!1},guildId:{type:tt.String_unsecure(),isOptional:!1},trustZone:{type:tt.String_unsecure(),isOptional:!1},entityRef:{type:tt.String_unsecure(),isOptional:!1},evidenceRefs:{type:tt.String_unsecure(),isArray:!0,isOptional:!1},occurredAt:{type:tt.DateTime(),isOptional:!1}}}),Gu=ht({meta:Wt("communication.discord-installation.authorized","A read-only Discord guild installation was authorized and evidenced",["installation","authorized"]),payload:Ct}),Ku=ht({meta:Wt("communication.discord-installation.health-changed","Permissions, intents, connectivity, or capture coverage changed",["installation","health"]),payload:Ct}),Uu=ht({meta:fa("communication.provider-event.ingested","A protected non-message provider event entered the typed journal",["provider-event","ingestion"]),payload:Ct}),Wu=ht({meta:Wt("communication.community-insight.published","A policy-approved, evidence-backed community insight was published",["insight","published"]),payload:Ct}),Hu=ht({meta:Wt("communication.community-kaizen-digest.published","An evidence-backed Kaizen digest was published",["kaizen","digest","published"]),payload:Ct});import{defineCommand as _n,defineQuery as bi,docId as Sa}from"@lssm/lib.contracts-spec";import{defineEnum as va,defineSchemaModel as Ge,ScalarTypeEnum as l}from"@lssm/lib.schema";import{defineQuery as St,docId as ya}from"@lssm/lib.contracts-spec";import{defineSchemaModel as vt,ScalarTypeEnum as L}from"@lssm/lib.schema";var ga=[ya(et.id)],Ot=(e,t,n)=>({key:e,version:"1.0.0",stability:"experimental",owners:["platform.communication-os"],tags:["communication","discord",...n],description:t,goal:"Provide governed, evidence-backed multi-guild community intelligence",context:"Tenant, workspace, actor, and trust-zone authority are derived by the server",docId:ga}),Ht=vt({name:"DiscordCommunityWindowQueryV1",fields:{sourceRefs:{type:L.String_unsecure(),isArray:!0,isOptional:!0},windowStart:{type:L.DateTime(),isOptional:!0},windowEnd:{type:L.DateTime(),isOptional:!0},limit:{type:L.Int_unsecure(),isOptional:!0}}}),Rn=vt({name:"CommunityIntelligenceProjectionV1",fields:{id:{type:L.String_unsecure(),isOptional:!1},sourceId:{type:L.String_unsecure(),isOptional:!0},trustZone:{type:L.String_unsecure(),isOptional:!1},kind:{type:L.String_unsecure(),isOptional:!1},subjectRef:{type:L.String_unsecure(),isOptional:!0},windowStart:{type:L.DateTime(),isOptional:!1},windowEnd:{type:L.DateTime(),isOptional:!1},confidence:{type:L.Float_unsecure(),isOptional:!1},evidenceRefs:{type:L.String_unsecure(),isArray:!0,isOptional:!1},payload:{type:L.JSONObject(),isOptional:!1},policyVersion:{type:L.String_unsecure(),isOptional:!1},createdAt:{type:L.DateTime(),isOptional:!1}}}),In=vt({name:"DiscordCommunityEvidenceProjectionListV1",fields:{items:{type:Rn,isArray:!0,isOptional:!1}}}),ha=vt({name:"CommunityStaffScorecardQueryV1",fields:{...Ht.config.fields,staffPrincipalRef:{type:L.String_unsecure(),isOptional:!1}}}),Ca=vt({name:"CommunityKaizenDigestDetailQueryV1",fields:{digestRef:{type:L.String_unsecure(),isOptional:!1}}}),Yu=St({meta:Ot("communication.discord-community.coverage","Read evidenced capture completeness for selected guild sources",["coverage","query"]),io:{input:Ht,output:In},policy:{auth:"user"}}),Xu=St({meta:Ot("communication.community-insight.list","List policy-approved guild or portfolio insights",["insight","query"]),io:{input:Ht,output:In},policy:{auth:"user"}}),ep=St({meta:Ot("communication.community-staff-scorecard.get","Read an evidence-backed individual coaching scorecard",["staff","scorecard"]),io:{input:ha,output:Rn},policy:{auth:"admin"}}),tp=St({meta:Ot("communication.community-kaizen-digest.list","List evidence-backed Kaizen digests",["kaizen","digest"]),io:{input:Ht,output:In},policy:{auth:"user"}}),np=St({meta:Ot("communication.community-kaizen-digest.get","Read one evidence-backed Kaizen digest",["kaizen","digest","detail"]),io:{input:Ca,output:Rn},policy:{auth:"user"}});var Oa=["platform.communication-os"],ba=[Sa(et.id)],bt=(e,t,n)=>({key:e,version:"1.0.0",stability:"experimental",owners:[...Oa],tags:["communication","discord",...n],description:t,goal:"Provide governed, evidence-backed multi-guild community intelligence",context:"Tenant, workspace, actor, and trust-zone authority are derived by the server",docId:ba}),Ri=va("DiscordCommunityTrustZone",["staff","managed-community"]),Rt=Ge({name:"DiscordGuildInstallationProjectionV1",fields:{id:{type:l.String_unsecure(),isOptional:!1},sourceId:{type:l.String_unsecure(),isOptional:!1},guildId:{type:l.String_unsecure(),isOptional:!1},applicationId:{type:l.String_unsecure(),isOptional:!1},botUserId:{type:l.String_unsecure(),isOptional:!1},specialtyKeys:{type:l.String_unsecure(),isArray:!0,isOptional:!1},trustZone:{type:Ri,isOptional:!1},health:{type:l.String_unsecure(),isOptional:!1},verifiedPermissions:{type:l.String_unsecure(),isArray:!0,isOptional:!1},declaredIntents:{type:l.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:l.Int_unsecure(),isOptional:!1},policyRef:{type:l.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:l.String_unsecure(),isOptional:!1},installationEvidenceRefs:{type:l.String_unsecure(),isArray:!0,isOptional:!1},lastVerifiedAt:{type:l.DateTime(),isOptional:!0},updatedAt:{type:l.DateTime(),isOptional:!1}}}),It={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"}},Ra=Ge({name:"AuthorizeDiscordGuildInstallationV1Input",fields:{guildId:{type:l.String_unsecure(),isOptional:!1},credentialRef:{type:l.String_unsecure(),isOptional:!1},trustZone:{type:Ri,isOptional:!1},specialtyKeys:{type:l.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:l.Int_unsecure(),isOptional:!1},policyRef:{type:l.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:l.String_unsecure(),isOptional:!1},idempotencyKey:{type:l.String_unsecure(),isOptional:!1}}}),sp=_n({meta:bt("communication.discord-installation.authorize","Authorize one read-only Discord guild installation",["installation","authorize"]),io:{input:Ra,output:Rt,errors:It},policy:{auth:"admin"}}),Ii=Ge({name:"DiscordGuildInstallationTargetV1",fields:{installationId:{type:l.String_unsecure(),isOptional:!1}}}),Ia=Ge({name:"ListDiscordGuildInstallationsV1Input",fields:{}}),_a=Ge({name:"ListDiscordGuildInstallationsV1Output",fields:{installations:{type:Rt,isArray:!0,isOptional:!1}}}),cp=bi({meta:bt("communication.discord-installation.list","List authorized Discord guild installations",["installation","list"]),io:{input:Ia,output:_a,errors:It},policy:{auth:"user"}}),up=bi({meta:bt("communication.discord-installation.health","Read permission, intent, sequence-gap, and reconciliation health",["installation","health"]),io:{input:Ii,output:Rt,errors:It},policy:{auth:"admin"}}),xa=Ge({name:"UpdateDiscordCommunityPolicyV1Input",fields:{installationId:{type:l.String_unsecure(),isOptional:!1},policyRef:{type:l.String_unsecure(),isOptional:!1},retentionPolicyRef:{type:l.String_unsecure(),isOptional:!1},specialtyKeys:{type:l.String_unsecure(),isArray:!0,isOptional:!1},allowedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},excludedChannelIds:{type:l.String_unsecure(),isArray:!0,isOptional:!1},backfillDays:{type:l.Int_unsecure(),isOptional:!1},idempotencyKey:{type:l.String_unsecure(),isOptional:!1}}}),pp=_n({meta:bt("communication.discord-community.policy-update","Update monitored channels, specialty, and policy references",["policy","update"]),io:{input:xa,output:Rt,errors:It},policy:{auth:"admin"}}),ka=Ge({name:"RevokeDiscordGuildInstallationV1Input",fields:{...Ii.config.fields,idempotencyKey:{type:l.String_unsecure(),isOptional:!1}}}),mp=_n({meta:bt("communication.discord-installation.revoke","Revoke ingestion authority for one Discord guild installation",["installation","revoke"]),io:{input:ka,output:Rt,errors:It},policy:{auth:"admin"}});import{defineCommand as Ta,defineQuery as Pa,docId as xi}from"@lssm/lib.contracts-spec";import{defineSchemaModel as Dn,ScalarTypeEnum as ie}from"@lssm/lib.schema";import{defineEnum as xe,defineSchemaModel as he,ScalarTypeEnum as c}from"@lssm/lib.schema";var Aa=xe("CommunicationSpaceKind",["personal","organization"]),Va=xe("CommunicationPrincipalKind",["human","agent","system"]),xn=xe("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),Zt=xe("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),Da=xe("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),Ea=xe("CommunicationMembershipState",["active","revoked"]),_i=xe("CommunicationReceiptKind",["delivered","read"]),wa=xe("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),F={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"},ke=he({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1}}}),nt=he({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},name:{type:c.String_unsecure(),isOptional:!1},kind:{type:Aa,isOptional:!1},encryptionMode:{type:Da,isOptional:!1},createdAt:{type:c.DateTime(),isOptional:!1}}}),yp=he({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:c.String_unsecure(),isOptional:!1},kind:{type:Va,isOptional:!1},displayName:{type:c.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:c.String_unsecure(),isOptional:!0},createdAt:{type:c.DateTime(),isOptional:!1}}}),Ke=he({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1},name:{type:c.String_unsecure(),isOptional:!0},roomKind:{type:c.String_unsecure(),isOptional:!1},connectionIds:{type:c.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:c.DateTime(),isOptional:!1},updatedAt:{type:c.DateTime(),isOptional:!1}}}),kn=he({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1},roomId:{type:c.String_unsecure(),isOptional:!1},principalId:{type:c.String_unsecure(),isOptional:!1},role:{type:c.String_unsecure(),isOptional:!1},state:{type:Ea,isOptional:!1},capabilities:{type:c.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:c.DateTime(),isOptional:!0},revokedAt:{type:c.DateTime(),isOptional:!0},createdAt:{type:c.DateTime(),isOptional:!1}}}),An=he({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1},network:{type:c.String_unsecure(),isOptional:!1},placement:{type:xn,isOptional:!1},externalAccountRef:{type:c.String_unsecure(),isOptional:!1},credentialRef:{type:c.String_unsecure(),isOptional:!1},health:{type:wa,isOptional:!1},capabilities:{type:c.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:c.DateTime(),isOptional:!1},updatedAt:{type:c.DateTime(),isOptional:!1}}}),Qt=he({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:c.String_unsecure(),isOptional:!1},name:{type:c.String_unsecure(),isOptional:!1},mimeType:{type:c.String_unsecure(),isOptional:!1},sizeBytes:{type:c.Int_unsecure(),isOptional:!1},sha256:{type:c.String_unsecure(),isOptional:!1},createdAt:{type:c.DateTime(),isOptional:!1}}}),Ue=he({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1},roomId:{type:c.String_unsecure(),isOptional:!1},authorPrincipalId:{type:c.String_unsecure(),isOptional:!1},connectionId:{type:c.String_unsecure(),isOptional:!0},externalMessageId:{type:c.String_unsecure(),isOptional:!0},body:{type:c.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:c.JSONObject(),isOptional:!0},attachments:{type:Qt,isArray:!0,isOptional:!0},replyToMessageId:{type:c.String_unsecure(),isOptional:!0},revision:{type:c.Int_unsecure(),isOptional:!1},deletedAt:{type:c.DateTime(),isOptional:!0},createdAt:{type:c.DateTime(),isOptional:!1},updatedAt:{type:c.DateTime(),isOptional:!1}}}),Vn=he({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:c.String_unsecure(),isOptional:!1},tenantId:{type:c.String_unsecure(),isOptional:!1},workspaceId:{type:c.String_unsecure(),isOptional:!1},spaceId:{type:c.String_unsecure(),isOptional:!1},roomId:{type:c.String_unsecure(),isOptional:!0},connectionId:{type:c.String_unsecure(),isOptional:!0},principalId:{type:c.String_unsecure(),isOptional:!1},capabilities:{type:c.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:c.String_unsecure(),isOptional:!1},expiresAt:{type:c.DateTime(),isOptional:!0},revokedAt:{type:c.DateTime(),isOptional:!0},createdAt:{type:c.DateTime(),isOptional:!1}}});var ki={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"},Ai={tenantId:{type:ie.String_unsecure(),isOptional:!1},workspaceId:{type:ie.String_unsecure(),isOptional:!1},spaceId:{type:ie.String_unsecure(),isOptional:!1},roomId:{type:ie.String_unsecure(),isOptional:!1},principalId:{type:ie.String_unsecure(),isOptional:!1}},Ma=Dn({name:"UploadCommunicationAttachmentV1Input",fields:{...Ai,name:{type:ie.String_unsecure(),isOptional:!1},mimeType:{type:ie.String_unsecure(),isOptional:!1},sizeBytes:{type:ie.Int_unsecure(),isOptional:!1},sha256:{type:ie.String_unsecure(),isOptional:!1},contentBase64:{type:ie.String_unsecure(),isOptional:!1}}}),qa=Dn({name:"DownloadCommunicationAttachmentV1Input",fields:{...Ai,attachmentId:{type:ie.String_unsecure(),isOptional:!1}}}),Na=Dn({name:"DownloadCommunicationAttachmentV1Output",fields:{attachment:{type:Qt,isOptional:!1},contentBase64:{type:ie.String_unsecure(),isOptional:!1}}}),Vi={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."}},vp=Ta({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:[xi(ki.id)]},io:{input:Ma,output:Qt,errors:Vi},policy:{auth:"user"}}),Op=Pa({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:[xi(ki.id)]},io:{input:qa,output:Na,errors:Vi},policy:{auth:"user"}});import{defineCommand as _t,docId as La}from"@lssm/lib.contracts-spec";import{defineSchemaModel as fe,ScalarTypeEnum as k}from"@lssm/lib.schema";var xt=["platform.communication-os"],kt=[La(F.id)],At={tenantId:{type:k.String_unsecure(),isOptional:!1},workspaceId:{type:k.String_unsecure(),isOptional:!1},spaceId:{type:k.String_unsecure(),isOptional:!1}},ja=fe({name:"ExchangeCommunicationHostSessionV2Input",description:"Server-to-server exchange of a verified host assertion for a scoped CommunicationOS token",fields:{issuer:{type:k.String_unsecure(),isOptional:!1},assertion:{type:k.String_unsecure(),isOptional:!1},...At}}),Ba=fe({name:"ExchangeCommunicationHostSessionV2Output",fields:{accessToken:{type:k.String_unsecure(),isOptional:!1},principalId:{type:k.String_unsecure(),isOptional:!1},expiresAt:{type:k.DateTime(),isOptional:!1},...At}}),xp=_t({meta:{key:"communication.auth.host-session.exchange",version:"2.0.0",stability:"experimental",owners:[...xt],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:kt},io:{input:ja,output:Ba},policy:{auth:"admin"}}),za=fe({name:"ExchangeCommunicationDirectSessionV2Input",description:"Exchange the current first-party AuthOS cookie or native bearer session for its server-derived personal CommunicationOS scope",fields:{}}),Fa=fe({name:"ExchangeCommunicationDirectSessionV2Output",fields:{accessToken:{type:k.String_unsecure(),isOptional:!1},principalId:{type:k.String_unsecure(),isOptional:!1},expiresAt:{type:k.DateTime(),isOptional:!1},...At}}),kp=_t({meta:{key:"communication.auth.direct-session.exchange",version:"2.0.0",stability:"experimental",owners:[...xt],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:kt},io:{input:za,output:Fa},policy:{auth:"user"}}),Ga=fe({name:"CreateCommunicationRealtimeTicketV2Input",description:"Authorized space scope for one short-lived realtime ticket",fields:At}),Ka=fe({name:"CreateCommunicationRealtimeTicketV2Output",fields:{ticket:{type:k.String_unsecure(),isOptional:!1},expiresAt:{type:k.DateTime(),isOptional:!1}}}),Ap=_t({meta:{key:"communication.auth.realtime-ticket.create",version:"2.0.0",stability:"experimental",owners:[...xt],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:kt},io:{input:Ga,output:Ka},policy:{auth:"user"}}),Ua=fe({name:"StartCommunicationProviderOAuthV2Input",description:"Authenticated request for a scope-bound, short-lived provider OAuth authorization flow",fields:{...At,network:{type:Zt,isOptional:!1},providerKey:{type:k.String_unsecure(),isOptional:!0},placement:{type:xn,isOptional:!1},returnPath:{type:k.String_unsecure(),isOptional:!0}}}),Wa=fe({name:"StartCommunicationProviderOAuthV2Output",description:"Opaque provider authorization URL with no raw credential or PKCE verifier exposure",fields:{authorizationUrl:{type:k.String_unsecure(),isOptional:!1},expiresAt:{type:k.DateTime(),isOptional:!1}}}),Vp=_t({meta:{key:"communication.oauth.start",version:"3.0.0",stability:"experimental",owners:[...xt],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:kt},io:{input:Ua,output:Wa,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"}}),Ha=fe({name:"CompleteCommunicationProviderOAuthV2Input",description:"Provider callback carrying opaque one-time state and either an authorization code or provider error",fields:{network:{type:Zt,isOptional:!1},state:{type:k.String_unsecure(),isOptional:!1},code:{type:k.String_unsecure(),isOptional:!0},providerError:{type:k.String_unsecure(),isOptional:!0}}}),Za=fe({name:"CompleteCommunicationProviderOAuthV2Output",description:"Connected provider projection after one-time state consumption and credential-vault storage",fields:{connectionId:{type:k.String_unsecure(),isOptional:!1},network:{type:Zt,isOptional:!1},returnPath:{type:k.String_unsecure(),isOptional:!1},returnOrigin:{type:k.String_unsecure(),isOptional:!1}}}),Dp=_t({meta:{key:"communication.oauth.complete",version:"3.0.0",stability:"experimental",owners:[...xt],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:kt},io:{input:Ha,output:Za,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"}});import{defineCommand as Qa,defineQuery as Ja,docId as $a}from"@lssm/lib.contracts-spec";import{defineEnum as Ya,defineSchemaModel as wn,ScalarTypeEnum as z}from"@lssm/lib.schema";var Di=["platform.communication-os"],Ei=[$a(F.id)],Xa=Ya("CommunicationBindingDirection",["inbound","outbound","bidirectional"]),En=wn({name:"CommunicationRoomChannelBindingV2",description:"Scoped mapping between one canonical room and one external provider conversation",fields:{id:{type:z.String_unsecure(),isOptional:!1},tenantId:{type:z.String_unsecure(),isOptional:!1},workspaceId:{type:z.String_unsecure(),isOptional:!1},spaceId:{type:z.String_unsecure(),isOptional:!1},roomId:{type:z.String_unsecure(),isOptional:!1},connectionId:{type:z.String_unsecure(),isOptional:!1},externalConversationId:{type:z.String_unsecure(),isOptional:!1},externalThreadId:{type:z.String_unsecure(),isOptional:!0},direction:{type:Xa,isOptional:!1},active:{type:z.Boolean(),isOptional:!1},createdAt:{type:z.DateTime(),isOptional:!1},updatedAt:{type:z.DateTime(),isOptional:!1}}}),Mp=Qa({meta:{key:"communication.room-channel-binding.set",version:"2.0.0",stability:"experimental",owners:[...Di],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:Ei},io:{input:En,output:En},policy:{auth:"admin"}}),er=wn({name:"ListCommunicationRoomChannelBindingsV2Input",fields:{tenantId:{type:z.String_unsecure(),isOptional:!1},workspaceId:{type:z.String_unsecure(),isOptional:!1},spaceId:{type:z.String_unsecure(),isOptional:!1},roomId:{type:z.String_unsecure(),isOptional:!0},connectionId:{type:z.String_unsecure(),isOptional:!0},activeOnly:{type:z.Boolean(),isOptional:!0}}}),tr=wn({name:"ListCommunicationRoomChannelBindingsV2Output",fields:{bindings:{type:En,isArray:!0,isOptional:!1}}}),qp=Ja({meta:{key:"communication.room-channel-binding.list",version:"2.0.0",stability:"experimental",owners:[...Di],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:Ei},io:{input:er,output:tr},policy:{auth:"user"}});import{defineEvent as Jt,docId as sr}from"@lssm/lib.contracts-spec";import{defineEvent as oe,docId as nr}from"@lssm/lib.contracts-spec";import{defineSchemaModel as Vt,ScalarTypeEnum as m}from"@lssm/lib.schema";var ir=["platform.communication-os"],or=[nr(F.id)];function ae(e,t,n){return{key:e,version:"2.0.0",description:t,stability:"experimental",owners:[...ir],tags:["communication","ecosystem-messaging",...n],docId:or}}var Tn=Vt({name:"CommunicationScopedEntityV2Payload",fields:{tenantId:{type:m.String_unsecure(),isOptional:!1},workspaceId:{type:m.String_unsecure(),isOptional:!1},spaceId:{type:m.String_unsecure(),isOptional:!1},entityId:{type:m.String_unsecure(),isOptional:!1},actorPrincipalId:{type:m.String_unsecure(),isOptional:!1},occurredAt:{type:m.DateTime(),isOptional:!1}}}),zp=oe({meta:ae("communication.space.created","Emitted when an isolated messaging space is created",["space","created"]),payload:Tn}),Fp=oe({meta:ae("communication.room.created","Emitted when a room or direct-message projection is created",["room","created"]),payload:Tn}),ar=Vt({name:"CommunicationMembershipChangedV2Payload",fields:{tenantId:{type:m.String_unsecure(),isOptional:!1},workspaceId:{type:m.String_unsecure(),isOptional:!1},spaceId:{type:m.String_unsecure(),isOptional:!1},roomId:{type:m.String_unsecure(),isOptional:!1},membershipId:{type:m.String_unsecure(),isOptional:!1},principalId:{type:m.String_unsecure(),isOptional:!1},state:{type:m.String_unsecure(),isOptional:!1},changedBy:{type:m.String_unsecure(),isOptional:!1},occurredAt:{type:m.DateTime(),isOptional:!1}}}),Gp=oe({meta:ae("communication.membership.changed","Emitted when a human, agent, or system membership changes",["membership","authority"]),payload:ar}),Kp=oe({meta:ae("communication.authority.changed","Emitted when a principal authority grant is added, changed, expired, or revoked",["agent","authority","revocation"]),payload:Tn}),Pn=Vt({name:"CommunicationMessageEventV2Payload",fields:{tenantId:{type:m.String_unsecure(),isOptional:!1},workspaceId:{type:m.String_unsecure(),isOptional:!1},spaceId:{type:m.String_unsecure(),isOptional:!1},roomId:{type:m.String_unsecure(),isOptional:!1},messageId:{type:m.String_unsecure(),isOptional:!1},authorPrincipalId:{type:m.String_unsecure(),isOptional:!1},connectionId:{type:m.String_unsecure(),isOptional:!0},providerReceiptRef:{type:m.String_unsecure(),isOptional:!0},revision:{type:m.Int_unsecure(),isOptional:!1},occurredAt:{type:m.DateTime(),isOptional:!1}}}),Up=oe({meta:ae("communication.message.sent","Emitted after provider acceptance or canonical local delivery of a v2 message",["message","sent"]),payload:Pn}),Wp=oe({meta:ae("communication.message.edited","Emitted when a new message revision is accepted",["message","edited"]),payload:Pn}),Hp=oe({meta:ae("communication.message.deleted","Emitted when message content is deleted or provider retention is documented",["message","deleted","erasure"]),payload:Pn}),Ae=Vt({name:"CommunicationConnectionEventV2Payload",fields:{tenantId:{type:m.String_unsecure(),isOptional:!1},workspaceId:{type:m.String_unsecure(),isOptional:!1},spaceId:{type:m.String_unsecure(),isOptional:!1},connectionId:{type:m.String_unsecure(),isOptional:!1},network:{type:m.String_unsecure(),isOptional:!1},placement:{type:m.String_unsecure(),isOptional:!1},health:{type:m.String_unsecure(),isOptional:!1},cursor:{type:m.String_unsecure(),isOptional:!0},invalidationRef:{type:m.String_unsecure(),isOptional:!0},subscriptionRef:{type:m.String_unsecure(),isOptional:!0},targetExpiresAt:{type:m.DateTime(),isOptional:!0},expiresAt:{type:m.DateTime(),isOptional:!0},workOrderDigest:{type:m.String_unsecure(),isOptional:!0},idempotencyKey:{type:m.String_unsecure(),isOptional:!0},providerReceiptRef:{type:m.String_unsecure(),isOptional:!0},evidenceRefs:{type:m.String_unsecure(),isArray:!0,isOptional:!0},failureCode:{type:m.String_unsecure(),isOptional:!0},retryable:{type:m.Boolean(),isOptional:!0},retryAt:{type:m.DateTime(),isOptional:!0},occurredAt:{type:m.DateTime(),isOptional:!1}}}),Zp=oe({meta:ae("communication.connection.health.changed","Emitted when a local or server connection health state changes",["connection","health"]),payload:Ae}),Qp=oe({meta:ae("communication.connection.sync.advanced","Emitted after a connection cursor advances durably",["connection","sync","cursor"]),payload:Ae}),Jp=oe({meta:ae("communication.connection.sync.invalidated","Emitted after an authenticated provider callback durably requests synchronization",["connection","sync","invalidation"]),payload:Ae}),rr=Vt({name:"CommunicationRealtimeStateV2Payload",fields:{tenantId:{type:m.String_unsecure(),isOptional:!1},workspaceId:{type:m.String_unsecure(),isOptional:!1},spaceId:{type:m.String_unsecure(),isOptional:!1},roomId:{type:m.String_unsecure(),isOptional:!1},principalId:{type:m.String_unsecure(),isOptional:!1},stateKind:{type:m.String_unsecure(),isOptional:!1},messageId:{type:m.String_unsecure(),isOptional:!0},occurredAt:{type:m.DateTime(),isOptional:!1}}}),$p=oe({meta:ae("communication.realtime-state.changed","Emitted for reaction, receipt, presence, typing, and inbox-state projection updates",["realtime","receipt","presence","reaction"]),payload:rr});var $t=(e,t,n)=>({key:e,version:"2.0.0",description:t,stability:"experimental",owners:["platform.communication-os"],tags:["communication","connection","subscription",n],docId:[sr(F.id)]}),nm=Jt({meta:$t("communication.connection.subscription.requested","Emitted before Runtime Node receives an idempotent subscription create or renewal request","requested"),payload:Ae}),im=Jt({meta:$t("communication.connection.subscription.active","Emitted after a Runtime Node receipt proves a provider subscription is active","active"),payload:Ae}),om=Jt({meta:$t("communication.connection.subscription.failed","Emitted after a definitive Runtime Node subscription failure","failed"),payload:Ae}),am=Jt({meta:$t("communication.connection.subscription.indeterminate","Emitted when subscription effect custody is indeterminate and must reconcile before retry","indeterminate"),payload:Ae});import{defineCommand as wi,defineQuery as cr,docId as ur}from"@lssm/lib.contracts-spec";import{defineEnum as Ti,defineSchemaModel as Mn,ScalarTypeEnum as re}from"@lssm/lib.schema";var qn=["platform.communication-os"],Nn={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"},Ln=[ur(Nn.id)],Yt=Ti("CommunicationGovernedWorkKind",["identity_review","draft","action","handoff","escalation","triage","summary","agent","consent","retention","policy"]),Pi=Ti("CommunicationGovernedWorkStatus",["pending","approved","rejected","blocked","resolved","revoked"]),Ve=Mn({name:"CommunicationGovernedWorkV1",fields:{id:{type:re.String_unsecure(),isOptional:!1},kind:{type:Yt,isOptional:!1},status:{type:Pi,isOptional:!1},title:{type:re.String_unsecure(),isOptional:!1},threadId:{type:re.String_unsecure(),isOptional:!0},details:{type:re.JSONObject(),isOptional:!1},revision:{type:re.Int_unsecure(),isOptional:!1},createdBy:{type:re.String_unsecure(),isOptional:!1},createdAt:{type:re.DateTime(),isOptional:!1},updatedBy:{type:re.String_unsecure(),isOptional:!1},updatedAt:{type:re.DateTime(),isOptional:!1}}}),pm=cr({meta:{key:"communication.governed_work.list",version:"1.0.0",stability:"experimental",owners:[...qn],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:Ln},io:{input:ke,output:Mn({name:"ListCommunicationGovernedWorkV1Output",fields:{items:{type:Ve,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),mm=wi({meta:{key:"communication.governed_work.create",version:"1.0.0",stability:"experimental",owners:[...qn],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:Ln},io:{input:Ve,output:Ve},policy:{auth:"user"}}),lm=wi({meta:{key:"communication.governed_work.transition",version:"1.0.0",stability:"experimental",owners:[...qn],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:Ln},io:{input:Mn({name:"TransitionCommunicationGovernedWorkV1Input",fields:{workId:{type:re.String_unsecure(),isOptional:!1},status:{type:Pi,isOptional:!1},reason:{type:re.String_unsecure(),isOptional:!0}}}),output:Ve},policy:{auth:"user"}});import{defineCommand as Mi,defineQuery as pr,docId as mr}from"@lssm/lib.contracts-spec";import{defineEnum as lr,defineSchemaModel as Xt,ScalarTypeEnum as We}from"@lssm/lib.schema";var dr=["platform.communication-os"],fr=[mr(Nn.id)],jn={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."}},yr=lr("CommunicationGovernedWorkDecisionStatusV2",["approved","rejected","blocked","resolved","revoked"]),gr=Xt({name:"ListCommunicationGovernedWorkV2Input",fields:{kind:{type:Yt,isOptional:!0}}}),hr=Xt({name:"CreateCommunicationGovernedWorkV2Input",fields:{kind:{type:Yt,isOptional:!1},title:{type:We.String_unsecure(),isOptional:!1},threadId:{type:We.String_unsecure(),isOptional:!0},details:{type:We.JSONObject(),isOptional:!0},idempotencyKey:{type:We.String_unsecure(),isOptional:!1}}}),Cr=Xt({name:"TransitionCommunicationGovernedWorkV2Input",fields:{workId:{type:We.String_unsecure(),isOptional:!1},status:{type:yr,isOptional:!1},reason:{type:We.String_unsecure(),isOptional:!0},idempotencyKey:{type:We.String_unsecure(),isOptional:!1}}}),Sr=Xt({name:"ListCommunicationGovernedWorkV2Output",fields:{items:{type:Ve,isArray:!0,isOptional:!1}}}),hm=pr({meta:Bn("communication.governed_work.list","List governed work from the authenticated journal partition"),io:{input:gr,output:Sr,errors:jn},policy:{auth:"user"}}),Cm=Mi({meta:Bn("communication.governed_work.create","Create governed work from replay-safe client intent"),io:{input:hr,output:Ve,errors:jn},policy:{auth:"user"}}),Sm=Mi({meta:Bn("communication.governed_work.transition","Apply one authorized governed-work lifecycle transition"),io:{input:Cr,output:Ve,errors:jn},policy:{auth:"user"}});function Bn(e,t){return{key:e,version:"2.0.0",stability:"experimental",owners:[...dr],tags:["communication","governance","authority","server-scope"],description:t,goal:"Keep scope, principal, lifecycle state, revision, and evidence server-owned",context:"The authenticated server context is the only tenant and principal authority.",docId:fr}}import{defineCommand as vr,defineQuery as Ni,docId as Or}from"@lssm/lib.contracts-spec";import{defineEnum as br,defineSchemaModel as it,ScalarTypeEnum as G}from"@lssm/lib.schema";var zn=["platform.communication-os"],Fn={id:"communication-os.identity-resolution.v1",title:"CommunicationOS identity resolution contracts",body:"Scope-isolated account and contact projections plus a human-reviewed identity merge or rejection lifecycle. Provider credentials and raw identity evidence never enter public outputs.",kind:"reference",route:"/docs/communication-os/identity-resolution-v1",visibility:"public"},Gn=[Or(Fn.id)],qi=br("CommunicationIdentityReviewStatus",["pending","merged","rejected"]),Kn=it({name:"CommunicationAccountV2",description:"Public-safe provider account projection in one authorized space",fields:{id:{type:G.String_unsecure(),isOptional:!1},network:{type:G.String_unsecure(),isOptional:!1},externalAccountRef:{type:G.String_unsecure(),isOptional:!1},placement:{type:G.String_unsecure(),isOptional:!1},health:{type:G.String_unsecure(),isOptional:!1},createdAt:{type:G.DateTime(),isOptional:!1},updatedAt:{type:G.DateTime(),isOptional:!1}}}),Un=it({name:"CommunicationContactV2",description:"Participant projection derived from persisted scoped messages",fields:{principalId:{type:G.String_unsecure(),isOptional:!1},displayName:{type:G.String_unsecure(),isOptional:!0},roomIds:{type:G.String_unsecure(),isArray:!0,isOptional:!1},messageCount:{type:G.Int_unsecure(),isOptional:!1},lastSeenAt:{type:G.DateTime(),isOptional:!1}}}),Rr=it({name:"ListCommunicationAccountsV2Output",fields:{accounts:{type:Kn,isArray:!0,isOptional:!1}}}),Ir=it({name:"ListCommunicationContactsV2Output",fields:{contacts:{type:Un,isArray:!0,isOptional:!1}}}),Im=Ni({meta:{key:"communication.account.list",version:"2.0.0",stability:"experimental",owners:[...zn],tags:["communication","account","identity"],description:"List public-safe provider accounts in one authorized space",goal:"Expose account readiness without leaking credential references",context:"Authority is derived by the server from the authenticated scope",docId:Gn},io:{input:ke,output:Rr},policy:{auth:"user"}}),_m=Ni({meta:{key:"communication.contact.list",version:"2.0.0",stability:"experimental",owners:[...zn],tags:["communication","contact","identity"],description:"List persisted participant projections in one authorized space",goal:"Provide a real scoped contact index without provider identity leakage",context:"Contacts are replayable projections, never transient UI inference",docId:Gn},io:{input:ke,output:Ir},policy:{auth:"user"}}),xm=vr({meta:{key:"communication.identity.decide",version:"1.0.0",stability:"experimental",owners:[...zn],tags:["communication","identity","review","governance"],description:"Merge or reject one pending identity review",goal:"Require an auditable human decision before cross-channel identity linkage",context:"Only authorized managers may decide and each review is single-transition",docId:Gn},io:{input:it({name:"DecideCommunicationIdentityV1Input",fields:{reviewId:{type:G.String_unsecure(),isOptional:!1},decision:{type:qi,isOptional:!1},reason:{type:G.String_unsecure(),isOptional:!0}}}),output:it({name:"DecideCommunicationIdentityV1Output",fields:{reviewId:{type:G.String_unsecure(),isOptional:!1},status:{type:qi,isOptional:!1},revision:{type:G.Int_unsecure(),isOptional:!1}}})},policy:{auth:"admin"}});import{defineQuery as Bi,docId as Pr}from"@lssm/lib.contracts-spec";import{defineSchemaModel as zi}from"@lssm/lib.schema";import{defineCommand as _r,defineQuery as ji,docId as xr}from"@lssm/lib.contracts-spec";import{defineEnum as kr,defineSchemaModel as en,ScalarTypeEnum as Li}from"@lssm/lib.schema";var Ar=["platform.communication-os"],Vr=[xr(F.id)],Wn={VALIDATION_FAILED:{description:"The room intent or replay key is invalid.",http:422,when:"The request is malformed, blank, or exceeds a declared limit."},FORBIDDEN:{description:"The authenticated principal cannot access this scope.",http:403,when:"The server-derived membership or room authority is absent."},SERVICE_UNAVAILABLE:{description:"The scoped messaging projection is unavailable.",http:503,when:"The durable journal cannot safely answer the operation."}},Dr=kr("CommunicationRoomKindV3",["direct","group"]),Dt=en({name:"CommunicationNavigationV3Input",fields:{}}),Er=en({name:"CreateCommunicationRoomV3Input",fields:{name:{type:Li.String_unsecure(),isOptional:!1},roomKind:{type:Dr,isOptional:!1},idempotencyKey:{type:Li.String_unsecure(),isOptional:!1}}}),wr=en({name:"ListCommunicationSpacesV3Output",fields:{spaces:{type:nt,isArray:!0,isOptional:!1}}}),Tr=en({name:"ListCommunicationRoomsV3Output",fields:{rooms:{type:Ke,isArray:!0,isOptional:!1}}}),Em=ji({meta:Hn("communication.space.list","List server-authorized messaging spaces","Drive space switching without accepting browser scope authority"),io:{input:Dt,output:wr,errors:Wn},policy:{auth:"user"}}),wm=ji({meta:Hn("communication.room.list","List rooms in the server-selected messaging space","Drive room navigation from one authenticated journal partition"),io:{input:Dt,output:Tr,errors:Wn},policy:{auth:"user"}}),Tm=_r({meta:Hn("communication.room.create","Create a room from replay-safe client intent","Keep scope, principal, identifiers, and timestamps server-owned"),io:{input:Er,output:Ke,errors:Wn},policy:{auth:"user"}});function Hn(e,t,n){return{key:e,version:"3.0.0",stability:"experimental",owners:[...Ar],tags:["communication","navigation","authority","server-scope"],description:t,goal:n,context:"The runtime derives tenant, workspace, space, and principal from the authenticated server context.",docId:Vr}}var Mr=["platform.communication-os"],qr=[Pr(Fn.id)],Fi={FORBIDDEN:{description:"The authenticated principal cannot inspect this scope.",http:403,when:"The server-derived workspace or space membership is absent."},SERVICE_UNAVAILABLE:{description:"The scoped identity projection is unavailable.",http:503,when:"The durable projection cannot safely answer the operation."}},Nr=zi({name:"ListCommunicationAccountsV3Output",fields:{accounts:{type:Kn,isArray:!0,isOptional:!1}}}),Lr=zi({name:"ListCommunicationContactsV3Output",fields:{contacts:{type:Un,isArray:!0,isOptional:!1}}}),jm=Bi({meta:Gi("communication.account.list","List public-safe provider accounts in the authenticated space"),io:{input:Dt,output:Nr,errors:Fi},policy:{auth:"user"}}),Bm=Bi({meta:Gi("communication.contact.list","List persisted contacts in the authenticated space"),io:{input:Dt,output:Lr,errors:Fi},policy:{auth:"user"}});function Gi(e,t){return{key:e,version:"3.0.0",stability:"experimental",owners:[...Mr],tags:["communication","identity","authority","server-scope"],description:t,goal:"Remove client-supplied tenant and space authority from identity reads",context:"The runtime derives tenant, workspace, space, and principal from the authenticated server context.",docId:qr}}import{defineCommand as He,defineQuery as Hi,docId as jr}from"@lssm/lib.contracts-spec";import{defineSchemaModel as De,ScalarTypeEnum as p}from"@lssm/lib.schema";var Ce=["platform.communication-os"],Se=[jr(F.id)],Zi={VALIDATION_FAILED:{description:"Message content, replay key, or attachment references are invalid.",http:422,when:"The request is malformed, empty, duplicated, or exceeds a declared limit."},FORBIDDEN:{description:"The authenticated principal cannot access or mutate the selected room.",http:403,when:"Workspace, space, room membership, connection binding, or send authority is absent."},SERVICE_UNAVAILABLE:{description:"The scoped messaging runtime or search projection is unavailable.",http:503,when:"A required durable runtime dependency cannot safely answer the operation."}},Um=He({meta:{key:"communication.message.send",version:"2.1.0",stability:"experimental",owners:[...Ce],tags:["communication","message","send","authority"],description:"Send a canonical room message as an explicitly attributed principal",goal:"Give authorized humans and agents the same audited messaging path",context:"The runtime must re-evaluate membership, authority, consent, encryption posture, and connection policy immediately before dispatch",docId:Se},io:{input:Ue,output:Ue},policy:{auth:"user"}}),Br=De({name:"SendCommunicationMessageV3Input",fields:{workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},roomId:{type:p.String_unsecure(),isOptional:!1},connectionId:{type:p.String_unsecure(),isOptional:!0},idempotencyKey:{type:p.String_unsecure(),isOptional:!1},body:{type:p.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:p.JSONObject(),isOptional:!0},attachmentIds:{type:p.String_unsecure(),isArray:!0,isOptional:!0},replyToMessageId:{type:p.String_unsecure(),isOptional:!0}}}),Wm=He({meta:{key:"communication.message.send",version:"3.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","send","authority","idempotency"],description:"Send a canonical room message from a JSON-safe, replay-safe client intent",goal:"Keep tenant, author, revision, identifiers, and timestamps server-owned",context:"The runtime derives tenant and author from the authenticated context, verifies workspace/space/room membership and attachment ownership, then applies the idempotency key before dispatch",docId:Se},io:{input:Br,output:Ue,errors:Zi},policy:{auth:"user"}}),Qi=De({name:"MutateCommunicationMessageV2Input",fields:{tenantId:{type:p.String_unsecure(),isOptional:!1},workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},roomId:{type:p.String_unsecure(),isOptional:!1},messageId:{type:p.String_unsecure(),isOptional:!1},actorPrincipalId:{type:p.String_unsecure(),isOptional:!1},body:{type:p.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:p.JSONObject(),isOptional:!0},expectedRevision:{type:p.Int_unsecure(),isOptional:!1}}}),Hm=He({meta:{key:"communication.message.edit",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","edit"],description:"Edit a message with optimistic revision protection",goal:"Preserve provider edits in the canonical event journal without rewriting history",context:"Unsupported provider edits must return an explicit capability error rather than silently diverge",docId:Se},io:{input:Qi,output:Ue},policy:{auth:"user"}}),Zm=He({meta:{key:"communication.message.delete",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","delete"],description:"Append an auditable message deletion or provider-retention marker",goal:"Represent local and provider deletion honestly across heterogeneous networks",context:"The event journal retains non-content evidence even when message content is erased",docId:Se},io:{input:Qi,output:Ue},policy:{auth:"user"}}),Ki=De({name:"CommunicationReactionV2Input",fields:{tenantId:{type:p.String_unsecure(),isOptional:!1},workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},roomId:{type:p.String_unsecure(),isOptional:!1},messageId:{type:p.String_unsecure(),isOptional:!1},principalId:{type:p.String_unsecure(),isOptional:!1},reaction:{type:p.String_unsecure(),isOptional:!1},active:{type:p.Boolean(),isOptional:!1}}}),Qm=He({meta:{key:"communication.reaction.set",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","reaction"],description:"Add or remove a reaction on a canonical message",goal:"Normalize lightweight acknowledgement across supported networks",context:"Adapters report unsupported reactions explicitly",docId:Se},io:{input:Ki,output:Ki},policy:{auth:"user"}}),Ui=De({name:"CommunicationReceiptV2Input",fields:{tenantId:{type:p.String_unsecure(),isOptional:!1},workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},roomId:{type:p.String_unsecure(),isOptional:!1},messageId:{type:p.String_unsecure(),isOptional:!1},principalId:{type:p.String_unsecure(),isOptional:!1},kind:{type:_i,isOptional:!1},occurredAt:{type:p.DateTime(),isOptional:!1}}}),Jm=He({meta:{key:"communication.receipt.record",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","receipt"],description:"Record a delivered or read receipt",goal:"Keep unread and delivery projections consistent across clients",context:"Privacy policy may suppress outbound read receipts per space or connection",docId:Se},io:{input:Ui,output:Ui},policy:{auth:"user"}}),Wi=De({name:"CommunicationInboxStateV2Input",fields:{tenantId:{type:p.String_unsecure(),isOptional:!1},workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},roomId:{type:p.String_unsecure(),isOptional:!1},principalId:{type:p.String_unsecure(),isOptional:!1},pinned:{type:p.Boolean(),isOptional:!1},archived:{type:p.Boolean(),isOptional:!1},snoozedUntil:{type:p.DateTime(),isOptional:!0},reminderAt:{type:p.DateTime(),isOptional:!0}}}),$m=He({meta:{key:"communication.inbox-state.set",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","inbox","pin","archive","snooze","reminder"],description:"Set one principal's pin, archive, snooze, and reminder state",goal:"Synchronize inbox organization without leaking message content",context:"Personal inbox state is principal-private even inside organization workspaces",docId:Se},io:{input:Wi,output:Wi},policy:{auth:"user"}}),zr=De({name:"SearchCommunicationMessagesV2Input",fields:{tenantId:{type:p.String_unsecure(),isOptional:!1},workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},query:{type:p.String_unsecure(),isOptional:!1},roomIds:{type:p.String_unsecure(),isArray:!0,isOptional:!0},limit:{type:p.Int_unsecure(),isOptional:!0}}}),Ji=De({name:"SearchCommunicationMessagesV2Output",fields:{messages:{type:Ue,isArray:!0,isOptional:!1},nextCursor:{type:p.String_unsecure(),isOptional:!0}}}),Ym=Hi({meta:{key:"communication.message.search",version:"2.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","search"],description:"Search messages within exactly one authorized space",goal:"Provide cross-network search without cross-space index leakage",context:"Client-encrypted spaces search a local decrypted projection; server-indexable spaces use governed indexes",docId:Se},io:{input:zr,output:Ji},policy:{auth:"user"}}),Fr=De({name:"SearchCommunicationMessagesV3Input",fields:{workspaceId:{type:p.String_unsecure(),isOptional:!1},spaceId:{type:p.String_unsecure(),isOptional:!1},query:{type:p.String_unsecure(),isOptional:!1},roomIds:{type:p.String_unsecure(),isArray:!0,isOptional:!0},limit:{type:p.Int_unsecure(),isOptional:!0}}}),Xm=Hi({meta:{key:"communication.message.search",version:"3.0.0",stability:"experimental",owners:[...Ce],tags:["communication","message","search","authority"],description:"Search messages inside the authenticated tenant and an authorized selected space",goal:"Remove client-supplied tenant authority from canonical search transport",context:"The runtime derives tenant from the authenticated context and verifies workspace, space, and optional room filters before querying any index",docId:Se},io:{input:Fr,output:Ji,errors:Zi},policy:{auth:"user"}}),el={key:"communication.message.replay-authority",version:"1.0.0",invariants:["Recheck current room membership and connection authority before returning a prior send result.","A request key cannot substitute principal, room, connection, text, subject, HTML, metadata, encryption envelope, reply target or attachment IDs.","Queued acceptance is not provider delivery.","Requested attachments require a complete resolved manifest; missing attachment support must not silently send an incomplete message."]},tl={key:"communication.message.queue-custody",version:"1.0.0",invariants:["An external send requires a durable journal-and-outbox adapter before it can be accepted.","Queued acceptance requires an exact persisted delivery record for the accepted message, connection and scope.","Outbox-key conflicts cannot silently drop provider delivery or report false success.","Message delivery uses delivery:<send idempotency key>; alternate delivery keys cannot duplicate a prior accepted message.","Message identity allocated by an atomic journal replay remains the delivery target; retries do not refer to discarded candidate IDs."]},nl={key:"communication.delivery.context-reproof",version:"1.0.0",invariants:["Resolve the current delivery context before adapter access and again after provider health checks immediately before send.","Changed recipient, connection, credential binding, content, reply, attachment or routing metadata invalidates the pending send.","Missing or changed context yields a definitive rejection without invoking provider.send.","Journal delivery resolution requires current active sender membership and applicable agent grants; revoked or deleted messages cannot resolve for sending.","Context reproof supplements canonical Runtime Node authority and does not replace its approval or effect fence."]};import{defineCommand as $i,docId as Gr}from"@lssm/lib.contracts-spec";import{defineEnum as Kr,defineSchemaModel as tn,ScalarTypeEnum as A}from"@lssm/lib.schema";var Yi=["platform.communication-os"],Xi=[Gr(F.id)],Ur=Kr("CommunicationProviderWebhookOutcome",["accepted","duplicate","ignored"]),Wr=tn({name:"CommunicationProviderWebhookIngressV2Input",description:"Authenticated provider delivery metadata after raw-body verification and before canonical journal ingestion",fields:{tenantId:{type:A.String_unsecure(),isOptional:!1},workspaceId:{type:A.String_unsecure(),isOptional:!1},spaceId:{type:A.String_unsecure(),isOptional:!1},connectionId:{type:A.String_unsecure(),isOptional:!1},network:{type:A.String_unsecure(),isOptional:!1},providerDeliveryId:{type:A.String_unsecure(),isOptional:!0},payloadSha256:{type:A.String_unsecure(),isOptional:!1},authenticationEvidenceRef:{type:A.String_unsecure(),isOptional:!1},receivedAt:{type:A.DateTime(),isOptional:!1}}}),Hr=tn({name:"CommunicationProviderWebhookIngressV2Output",description:"Replay-safe result of projecting authenticated provider events into the canonical communication journal",fields:{outcome:{type:Ur,isOptional:!1},acceptedEventCount:{type:A.Int_unsecure(),isOptional:!1},journalEventIds:{type:A.String_unsecure(),isArray:!0,isOptional:!1},replayRef:{type:A.String_unsecure(),isOptional:!1}}}),sl=$i({meta:{key:"communication.provider-webhook.ingest",version:"2.0.0",stability:"experimental",owners:[...Yi],tags:["communication","provider","webhook","ingest","replay"],description:"Ingest an authenticated provider webhook into the scoped append-only communication journal",goal:"Centralize provider callbacks without trusting raw payloads or permitting duplicate canonical effects",context:"Raw bytes and signature material remain adapter-private; this operation starts only after endpoint, network, and provider authentication succeed",docId:Xi},io:{input:Wr,output:Hr,errors:{WEBHOOK_AUTHENTICATION_FAILED:{description:"Provider authenticity could not be established",http:401,when:"The endpoint token, provider signature, timestamp, or secret token is absent or invalid"},WEBHOOK_CONNECTION_NOT_FOUND:{description:"The signed endpoint does not resolve to an active connection",http:404,when:"The scoped connection was removed, revoked, or never existed"},WEBHOOK_NETWORK_MISMATCH:{description:"The callback network differs from the connection network",http:409,when:"A valid endpoint token is replayed against another provider route"},WEBHOOK_PAYLOAD_INVALID:{description:"The authenticated payload cannot be normalized safely",http:422,when:"The provider payload is malformed or exceeds configured limits"},WEBHOOK_ADAPTER_UNAVAILABLE:{description:"The scoped provider adapter cannot be resolved",http:503,when:"Credential resolution or the configured provider adapter is unavailable"}}},policy:{auth:"admin"}}),Zr=tn({name:"CommunicationProviderWebhookEndpointV2",description:"One-time callback token projection for a scoped provider connection",fields:{connectionId:{type:A.String_unsecure(),isOptional:!1},network:{type:A.String_unsecure(),isOptional:!1},callbackUrl:{type:A.String_unsecure(),isOptional:!1},endpointToken:{type:A.String_unsecure(),isOptional:!1},tokenFingerprint:{type:A.String_unsecure(),isOptional:!1},issuedAt:{type:A.DateTime(),isOptional:!1}}}),cl=$i({meta:{key:"communication.provider-webhook-endpoint.issue",version:"2.0.0",stability:"experimental",owners:[...Yi],tags:["communication","provider","webhook","connection","secret"],description:"Issue a signed opaque callback endpoint for an authorized provider connection",goal:"Resolve webhook scope server-side without trusting tenant identifiers supplied by providers",context:"The endpoint token is returned once and must be treated as secret callback configuration; logs and analytics retain only its fingerprint",docId:Xi},io:{input:tn({name:"IssueCommunicationProviderWebhookEndpointV2Input",fields:{tenantId:{type:A.String_unsecure(),isOptional:!1},workspaceId:{type:A.String_unsecure(),isOptional:!1},spaceId:{type:A.String_unsecure(),isOptional:!1},connectionId:{type:A.String_unsecure(),isOptional:!1},network:{type:A.String_unsecure(),isOptional:!1}}}),output:Zr,errors:{WEBHOOK_CONNECTION_NOT_FOUND:{description:"The scoped connection does not exist or is revoked",http:404,when:"Current membership cannot resolve an active connection in the requested scope"},WEBHOOK_ENDPOINT_NOT_AUTHORIZED:{description:"The actor cannot manage provider callbacks",http:403,when:"Current policy or RoleMorph action boundaries deny connection administration"}}},policy:{auth:"admin"}});import{defineCommand as ot,defineQuery as eo,docId as Qr}from"@lssm/lib.contracts-spec";import{defineSchemaModel as nn,ScalarTypeEnum as ye}from"@lssm/lib.schema";var Ee=["platform.communication-os"],we=[Qr(F.id)],dl=ot({meta:{key:"communication.space.create",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","space","workspace"],description:"Create an isolated personal or organization messaging space",goal:"Keep messages, identities, agents, search, and policy inside one explicit boundary",context:"The caller must already have access to the containing tenant and workspace",docId:we},io:{input:nt,output:nt},policy:{auth:"user"}}),fl=ot({meta:{key:"communication.room.create",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","room","membership"],description:"Create a room or direct-message projection inside one space",goal:"Give humans and agents one canonical collaboration container",context:"Connection-backed rooms retain provider identifiers only through connection references",docId:we},io:{input:Ke,output:Ke},policy:{auth:"user"}}),Jr=nn({name:"ListCommunicationSpacesV2Output",fields:{spaces:{type:nt,isArray:!0,isOptional:!1}}}),yl=eo({meta:{key:"communication.space.list",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","space","workspace","query"],description:"List messaging spaces visible inside an authorized scope",goal:"Make space switching explicit without crossing an isolation boundary",context:"The authorization layer resolves accessible scopes; this query never widens the supplied scope",docId:we},io:{input:ke,output:Jr},policy:{auth:"user"}}),$r=nn({name:"ListCommunicationRoomsV2Output",fields:{rooms:{type:Ke,isArray:!0,isOptional:!1}}}),gl=eo({meta:{key:"communication.room.list",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","room","workspace","query"],description:"List canonical rooms inside one authorized messaging space",goal:"Drive inbox and room navigation from a replayable projection",context:"Rooms are projected only from the append-only journal partition selected by the supplied scope",docId:we},io:{input:ke,output:$r},policy:{auth:"user"}}),hl=ot({meta:{key:"communication.membership.set",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","membership","agent","authority"],description:"Add, update, or revoke a human, agent, or system room membership",goal:"Make every participant and its capabilities explicit and auditable",context:"Revocation takes effect before the next effect-bearing operation",docId:we},io:{input:kn,output:kn},policy:{auth:"admin"}}),Cl=ot({meta:{key:"communication.authority.set",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","agent","authority","revocation"],description:"Grant or revoke scoped messaging authority for one principal",goal:"Permit human-equivalent agents without implicit or unbounded send access",context:"The runtime re-evaluates active membership, grant scope, expiry, and channel policy immediately before dispatch",docId:we},io:{input:Vn,output:Vn},policy:{auth:"admin"}}),Sl=ot({meta:{key:"communication.connection.connect",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","connection","hybrid","credentials"],description:"Register a device, managed-cloud, or self-hosted channel connection",goal:"Use one provider-neutral connection contract across all clients and workers",context:"Only a secret-manager reference may be persisted; raw provider credentials are forbidden",docId:we},io:{input:An,output:An},policy:{auth:"user"}}),Yr=nn({name:"SyncCommunicationConnectionV2Input",fields:{tenantId:{type:ye.String_unsecure(),isOptional:!1},workspaceId:{type:ye.String_unsecure(),isOptional:!1},spaceId:{type:ye.String_unsecure(),isOptional:!1},connectionId:{type:ye.String_unsecure(),isOptional:!1},cursor:{type:ye.String_unsecure(),isOptional:!0},limit:{type:ye.Int_unsecure(),isOptional:!0}}}),Xr=nn({name:"SyncCommunicationConnectionV2Output",fields:{connectionId:{type:ye.String_unsecure(),isOptional:!1},nextCursor:{type:ye.String_unsecure(),isOptional:!0},acceptedEventIds:{type:ye.String_unsecure(),isArray:!0,isOptional:!1},hasMore:{type:ye.Boolean(),isOptional:!1}}}),vl=ot({meta:{key:"communication.connection.sync",version:"2.0.0",stability:"experimental",owners:[...Ee],tags:["communication","connection","sync","cursor"],description:"Advance an authenticated channel connection from a cursor",goal:"Provide deterministic, resumable synchronization across device and server workers",context:"Duplicate provider events must be suppressed by their connection-scoped idempotency key",docId:we},io:{input:Yr,output:Xr},policy:{auth:"user"}});import{defineEnum as ve}from"@lssm/lib.schema";var Oe=ve("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),Te=ve("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),at=ve("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),rt=ve("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),to=ve("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),Zn=ve("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),no=ve("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),on=ve("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),io=ve("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineEvent as se}from"@lssm/lib.contracts-spec/events";import{defineSchemaModel as ce,ScalarTypeEnum as f}from"@lssm/lib.schema";var es=["platform.communication-os"],ue=(e,t,n)=>({key:e,version:"1.0.0",description:t,stability:"experimental",owners:[...es],tags:["communication","event",...n]}),kl=se({meta:ue("communication.message.received","Emitted when a new message is accepted from a channel",["message","received"]),payload:ce({name:"MessageReceivedPayload",fields:{messageId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},channelType:{type:Oe,isOptional:!1}}})}),Al=se({meta:ue("communication.message.normalized","Emitted when a raw channel payload is normalized into a CommunicationMessage",["message","normalized"]),payload:ce({name:"MessageNormalizedPayload",fields:{messageId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},status:{type:at,isOptional:!1}}})}),Vl=se({meta:ue("communication.intent.classified","Emitted when a message or thread intent is classified",["intent","classified"]),payload:ce({name:"IntentClassifiedPayload",fields:{threadId:{type:f.String_unsecure(),isOptional:!1},messageId:{type:f.String_unsecure(),isOptional:!0},category:{type:f.String_unsecure(),isOptional:!1},confidence:{type:f.Float_unsecure(),isOptional:!1}}})}),Dl=se({meta:ue("communication.thread.linked","Emitted when a thread is linked to a business object",["thread","linked"]),payload:ce({name:"ThreadLinkedPayload",fields:{threadId:{type:f.String_unsecure(),isOptional:!1},objectType:{type:f.String_unsecure(),isOptional:!1},objectId:{type:f.String_unsecure(),isOptional:!1}}})}),El=se({meta:ue("communication.thread.status.changed","Emitted when a thread status changes",["thread","status"]),payload:ce({name:"ThreadStatusChangedPayload",fields:{threadId:{type:f.String_unsecure(),isOptional:!1},previousStatus:{type:Te,isOptional:!1},newStatus:{type:Te,isOptional:!1},changedBy:{type:f.String_unsecure(),isOptional:!0}}})}),wl=se({meta:ue("communication.reply.drafted","Emitted when a reply draft is created",["reply","drafted"]),payload:ce({name:"ReplyDraftedPayload",fields:{draftId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},status:{type:rt,isOptional:!1}}})}),Tl=se({meta:ue("communication.reply.blocked_by_policy","Emitted when a reply draft is blocked before send",["reply","blocked"]),payload:ce({name:"ReplyBlockedByPolicyPayload",fields:{draftId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},policyRef:{type:f.String_unsecure(),isOptional:!1},reason:{type:f.String_unsecure(),isOptional:!1}}})}),Pl=se({meta:ue("communication.reply.sent","Emitted when a reply is sent",["reply","sent"]),payload:ce({name:"ReplySentPayload",fields:{draftId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},sentAt:{type:f.DateTime(),isOptional:!1}}})}),Ml=se({meta:ue("communication.handoff.created","Emitted when a handoff packet is created",["handoff","created"]),payload:ce({name:"HandoffCreatedPayload",fields:{handoffId:{type:f.String_unsecure(),isOptional:!1},threadId:{type:f.String_unsecure(),isOptional:!1},fromOwner:{type:f.String_unsecure(),isOptional:!1},toOwner:{type:f.String_unsecure(),isOptional:!1}}})}),ql=se({meta:ue("communication.escalation.requested","Emitted when a thread is escalated for human attention",["escalation","requested"]),payload:ce({name:"EscalationRequestedPayload",fields:{threadId:{type:f.String_unsecure(),isOptional:!1},reason:{type:f.String_unsecure(),isOptional:!1},targetOwner:{type:f.String_unsecure(),isOptional:!0}}})}),Nl=se({meta:ue("communication.participant.linked","Emitted when a participant identity link is proposed or confirmed",["participant","identity"]),payload:ce({name:"ParticipantLinkedPayload",fields:{participantId:{type:f.String_unsecure(),isOptional:!1},linkedParticipantId:{type:f.String_unsecure(),isOptional:!1},linkType:{type:f.String_unsecure(),isOptional:!1},confidence:{type:f.Float_unsecure(),isOptional:!0}}})});import{CompanyOsTenantGovernanceEnvelopeSchema as ts}from"@lssm/lib.companyos-spec/types/tenant-governance-envelope";import{z as b}from"zod";var ns=b.string().min(1),is=b.enum(["inbound","outbound","internal"]),os=b.enum(["not_required","pending","applied","partially_applied"]),as=b.object({id:b.string().min(1),schemaVersion:b.literal("1.0.0"),channel:ns,direction:is,threadRef:b.string().min(1),messageRef:b.string().min(1),participantRefs:b.array(b.string().min(1)).min(1),observedAt:b.string().datetime(),bodyNormalized:b.string().min(1),consent:b.object({status:b.enum(["not_recorded","granted","withdrawn","expired"]),subjectConsentRef:b.string().min(1).optional(),legalBasisRef:b.string().min(1).optional()}).strict(),redaction:b.object({status:os,redactedFields:b.array(b.string().min(1)),decisionRef:b.string().min(1).optional()}).strict(),evidenceRefs:b.array(b.string().min(1)).min(1),source:b.object({adapterRef:b.string().min(1),externalRecordRef:b.string().min(1),networkAccessed:b.literal(!1)}).strict()}).strict(),zl=b.object({ingestion:as,governance:ts}).strict().superRefine((e,t)=>{if(e.governance.subjectRef.id!==e.ingestion.id)t.addIssue({code:"custom",path:["governance","subjectRef","id"],message:"governance subject must reference the normalized ingestion"});if(e.governance.subjectRef.type!=="communication.ingestion")t.addIssue({code:"custom",path:["governance","subjectRef","type"],message:"governance subject type must be communication.ingestion"})}),Fl={thread:"CommunicationThread",message:"CommunicationMessage",participant:"CommunicationParticipant",consent:"SubjectConsent"};import{z as I}from"zod";function oo(e){if(e.connectionState!=="active")return Et("connection_inactive");if(e.identityState==="revoked")return Et("identity_revoked");if(e.consentState!=="valid")return Et("consent_invalid");if(e.pairingState==="denied")return Et("pairing_denied");if(e.membershipState==="not_member")return Et("membership_denied");if(e.pairingState==="pending")return Qn("pairing_required");if(e.identityState!=="linked")return Qn("identity_unresolved");if(e.membershipState==="unknown")return Qn("membership_unresolved");if(e.conversationKind==="group"&&e.mentionPolicy==="required"&&!e.mentionDetected)return{status:"ignored",reason:"mention_required"};return{status:"admitted",reason:"eligible"}}function rs(e){let{receipt:t,context:n,decision:o}=e,s=ao({receipt:t,context:n});if(!R(t.scope,o.scope))s.push("Ingress decision scope does not match receipt");if(o.receipt.ref!==t.receiptRef||o.receipt.digest!==t.receiptDigest)s.push("Ingress decision receipt binding does not match");if(o.context.ref!==n.contextRef||o.context.digest!==n.contextDigest)s.push("Ingress decision context binding does not match");let u=oo(n);if(o.status!==u.status||o.reason!==u.reason)s.push("Ingress decision does not match deterministic admission policy");return s}function ao(e){let t=[];if(e.context.receipt.ref!==e.receipt.receiptRef||e.context.receipt.digest!==e.receipt.receiptDigest)t.push("Ingress context receipt binding does not match");if(!R(e.receipt.scope,e.context.scope))t.push("Ingress context scope does not match receipt");if(!ss(e.receipt.connection,e.context.connection))t.push("Ingress context connection does not match receipt");if(Date.parse(e.context.evaluatedAt)<Date.parse(e.receipt.receivedAt))t.push("Ingress context predates durable receipt");return t}function ss(e,t){return e.ref===t.ref&&e.revision===t.revision&&e.digest===t.digest}function Et(e){return{status:"blocked",reason:e}}function Qn(e){return{status:"quarantined",reason:e}}var cs="communication.ingress-receipt.v1",us="communication.ingress-admission-context.v1",ps="communication.ingress-admission-decision.v1",pe=I.string().trim().min(1),Jn=I.string().datetime({offset:!0}),Ql=I.object({schemaVersion:I.literal(cs),receiptRef:pe,receiptDigest:C,scope:O,connection:_,network:pe,providerDeliveryRef:pe.optional(),payloadDigest:C,authenticationEvidence:y,receivedAt:Jn,effectAuthority:I.literal("none")}).strict(),Jl=I.object({schemaVersion:I.literal(us),contextRef:pe,contextDigest:C,receipt:y,scope:O,connection:_,connectionState:I.enum(["active","revoked","unavailable"]),conversationKind:I.enum(["direct","group"]),channelIdentity:_,identityState:I.enum(["linked","pending","unknown","revoked"]),identityLink:_.optional(),resolvedPrincipalRef:pe.optional(),pairingState:I.enum(["not_required","confirmed","pending","denied"]),pairing:y.optional(),membershipState:I.enum(["member","not_member","unknown"]),membership:_.optional(),mentionPolicy:I.enum(["not_required","required"]),mentionDetected:I.boolean(),consentState:I.enum(["valid","missing","revoked","expired"]),policyRefs:I.array(pe).min(1),evidenceRefs:I.array(pe).min(1),evaluatedAt:Jn}).strict().superRefine((e,t)=>{for(let o of["policyRefs","evidenceRefs"])if(new Set(e[o]).size!==e[o].length)t.addIssue({code:I.ZodIssueCode.custom,path:[o],message:`${o} must be unique`});let n=e.identityState==="linked"||e.identityState==="revoked";if(n!==Boolean(e.identityLink))Ze(t,"identityLink","linked or revoked identity requires its exact identity link");if(n!==Boolean(e.resolvedPrincipalRef))Ze(t,"resolvedPrincipalRef","linked or revoked identity requires its resolved principal");if(e.pairingState!=="not_required"!==Boolean(e.pairing))Ze(t,"pairing","pairing state requires its exact evidence binding");if(e.membershipState!=="unknown"!==Boolean(e.membership))Ze(t,"membership","membership state requires its exact membership binding")}),ms=I.enum(["eligible","connection_inactive","identity_revoked","consent_invalid","pairing_denied","membership_denied","pairing_required","identity_unresolved","membership_unresolved","mention_required"]),$l=I.object({schemaVersion:I.literal(ps),decisionRef:pe,decisionDigest:C,receipt:y,context:y,scope:O,status:I.enum(["admitted","quarantined","ignored","blocked"]),reason:ms,canonicalConversation:y.optional(),normalizedIngestionRef:pe.optional(),quarantineRef:pe.optional(),decidedAt:Jn,evidenceRefs:I.array(pe).min(1),effectAuthority:I.literal("none")}).strict().superRefine((e,t)=>{let n=e.status==="admitted";if(n!==Boolean(e.canonicalConversation))Ze(t,"canonicalConversation","only admission binds a conversation");if(n!==Boolean(e.normalizedIngestionRef))Ze(t,"normalizedIngestionRef","only admission binds normalized ingestion");if(e.status==="quarantined"!==Boolean(e.quarantineRef))Ze(t,"quarantineRef","only quarantine requires a quarantine ref")});async function ls(e){return ee(e)}async function ds(e){return ee(e)}async function fs(e){return ee(e)}async function Yl(e){return await ys(e.receipt)&&await gs(e.context)&&await hs(e.decision)}async function ys(e){let{receiptDigest:t,...n}=e;return t===await ls(n)}async function gs(e){let{contextDigest:t,...n}=e;return t===await ds(n)}async function hs(e){let{decisionDigest:t,...n}=e;return t===await fs(n)}function Ze(e,t,n){e.addIssue({code:I.ZodIssueCode.custom,path:[t],message:n})}import{defineSchemaModel as H,ScalarTypeEnum as i}from"@lssm/lib.schema";var Cs=H({name:"ChannelAccount",description:"A channel account belonging to a participant",fields:{id:{type:i.String_unsecure(),isOptional:!1},participantId:{type:i.String_unsecure(),isOptional:!1},channelType:{type:Oe,isOptional:!1},externalId:{type:i.String_unsecure(),isOptional:!1},displayName:{type:i.String_unsecure(),isOptional:!0},metadata:{type:i.JSONObject(),isOptional:!0},isPrimary:{type:i.Boolean(),isOptional:!1,defaultValue:!1},createdAt:{type:i.DateTime(),isOptional:!1}}}),an=H({name:"IdentityLink",description:"Proposed or confirmed relationship between participant identities",fields:{id:{type:i.String_unsecure(),isOptional:!1},participantId:{type:i.String_unsecure(),isOptional:!1},candidateParticipantId:{type:i.String_unsecure(),isOptional:!1},status:{type:Zn,isOptional:!1,defaultValue:"generated"},confidence:{type:i.Float_unsecure(),isOptional:!1},reasoning:{type:i.String_unsecure(),isOptional:!0},reviewedBy:{type:i.String_unsecure(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1}}}),id=H({name:"CommunicationParticipant",description:"A person or system that participates in conversations",fields:{id:{type:i.String_unsecure(),isOptional:!1},name:{type:i.String_unsecure(),isOptional:!0},email:{type:i.EmailAddress(),isOptional:!0},accounts:{type:Cs,isArray:!0,isOptional:!1},identityLinks:{type:an,isArray:!0,isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),Ss=H({name:"Attachment",description:"A file or media attachment on a message",fields:{id:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!1},name:{type:i.String_unsecure(),isOptional:!1},mimeType:{type:i.String_unsecure(),isOptional:!0},sizeBytes:{type:i.Int_unsecure(),isOptional:!0},url:{type:i.URL(),isOptional:!0},metadata:{type:i.JSONObject(),isOptional:!0}}}),st=H({name:"ThreadLink",description:"Link between a thread and an external business object (V2: rich-reference objectRef replaces V1 objectType/objectId)",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},objectRef:{type:i.JSONObject(),isOptional:!1},relation:{type:i.String_unsecure(),isOptional:!0},confidence:{type:i.Float_unsecure(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1}}}),$n=H({name:"MessageIntent",description:"Classified message or thread intent with confidence and evidence",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!0},category:{type:no,isOptional:!1},confidence:{type:i.Float_unsecure(),isOptional:!1},reasoning:{type:i.String_unsecure(),isOptional:!0},evidenceMessageIds:{type:i.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1}}}),wt=H({name:"CommunicationMessage",description:"A single message within a communication thread",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},channelType:{type:Oe,isOptional:!1},channelAccountId:{type:i.String_unsecure(),isOptional:!1},participantId:{type:i.String_unsecure(),isOptional:!0},externalMessageId:{type:i.String_unsecure(),isOptional:!0},body:{type:i.String_unsecure(),isOptional:!1},bodyNormalized:{type:i.String_unsecure(),isOptional:!0},status:{type:at,isOptional:!1,defaultValue:"received"},intent:{type:$n,isOptional:!0},attachments:{type:Ss,isArray:!0,isOptional:!0},metadata:{type:i.JSONObject(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),od=H({name:"CommunicationFormIntake",description:"Declarative source reference for a communication message mapped into an entity-bound form intake result",fields:{id:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},channelType:{type:Oe,isOptional:!1},channelAccountId:{type:i.String_unsecure(),isOptional:!1},participantId:{type:i.String_unsecure(),isOptional:!0},entityKey:{type:i.String_unsecure(),isOptional:!1},projectionKind:{type:i.String_unsecure(),isOptional:!1},formKey:{type:i.String_unsecure(),isOptional:!0},formVersion:{type:i.String_unsecure(),isOptional:!0},completionProfileKey:{type:i.String_unsecure(),isOptional:!0},acceptedValues:{type:i.JSONObject(),isOptional:!1},completionDebt:{type:i.JSONObject(),isArray:!0,isOptional:!1},captureStatus:{type:i.String_unsecure(),isOptional:!1,defaultValue:"accepted"},completionStatus:{type:i.String_unsecure(),isOptional:!1},createdAt:{type:i.DateTime(),isOptional:!1}}}),Qe=H({name:"CommunicationThread",description:"A conversation thread spanning one or more channels",fields:{id:{type:i.String_unsecure(),isOptional:!1},title:{type:i.String_unsecure(),isOptional:!0},status:{type:Te,isOptional:!1,defaultValue:"open"},participantIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:Oe,isArray:!0,isOptional:!1},links:{type:st,isArray:!0,isOptional:!0},assignedTo:{type:i.String_unsecure(),isOptional:!0},priority:{type:i.String_unsecure(),isOptional:!0},tags:{type:i.String_unsecure(),isArray:!0,isOptional:!0},metadata:{type:i.JSONObject(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),rn=H({name:"CommunicationAction",description:"Structured action extracted from a conversation",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},title:{type:i.String_unsecure(),isOptional:!1},owner:{type:i.String_unsecure(),isOptional:!0},deadline:{type:i.DateTime(),isOptional:!0},blockers:{type:i.String_unsecure(),isArray:!0,isOptional:!0},sourceMessageIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},safetyMode:{type:on,isOptional:!1,defaultValue:"draft_only"}}}),Yn=H({name:"ReplyDraft",description:"An AI-generated or human-authored reply draft",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!0},body:{type:i.String_unsecure(),isOptional:!1},status:{type:rt,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:i.String_unsecure(),isOptional:!0},modelName:{type:i.String_unsecure(),isOptional:!0},promptVersion:{type:i.String_unsecure(),isOptional:!0},policyVersion:{type:i.String_unsecure(),isOptional:!0},reviewedBy:{type:i.String_unsecure(),isOptional:!0},reviewedAt:{type:i.DateTime(),isOptional:!0},metadata:{type:i.JSONObject(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),ro=H({name:"HandoffPacket",description:"A structured handoff between owners, teams, or systems",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},status:{type:to,isOptional:!1,defaultValue:"created"},fromOwner:{type:i.String_unsecure(),isOptional:!1},toOwner:{type:i.String_unsecure(),isOptional:!1},summary:{type:i.String_unsecure(),isOptional:!1},keyFacts:{type:i.String_unsecure(),isArray:!0,isOptional:!0},openQuestions:{type:i.String_unsecure(),isArray:!0,isOptional:!0},requiredActions:{type:rn,isArray:!0,isOptional:!0},evidenceLinks:{type:i.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),so=H({name:"CommunicationSummary",description:"AI-generated summary of a thread or message range",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},messageIds:{type:i.String_unsecure(),isArray:!0,isOptional:!0},content:{type:i.String_unsecure(),isOptional:!1},facts:{type:i.JSONObject(),isArray:!0,isOptional:!0},actions:{type:rn,isArray:!0,isOptional:!0},decisions:{type:i.JSONObject(),isArray:!0,isOptional:!0},risks:{type:i.JSONObject(),isArray:!0,isOptional:!0},modelName:{type:i.String_unsecure(),isOptional:!0},generatedAt:{type:i.DateTime(),isOptional:!1}}}),co=H({name:"AgentSuggestion",description:"An AI-generated suggestion attached to a thread or message",fields:{id:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!0},suggestionType:{type:i.String_unsecure(),isOptional:!1},content:{type:i.String_unsecure(),isOptional:!1},status:{type:Zn,isOptional:!1,defaultValue:"generated"},modelName:{type:i.String_unsecure(),isOptional:!0},confidence:{type:i.Float_unsecure(),isOptional:!0},policyVersion:{type:i.String_unsecure(),isOptional:!0},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}});import{defineCommand as Tt}from"@lssm/lib.contracts-spec";import{defineSchemaModel as Pe,ScalarTypeEnum as Y}from"@lssm/lib.schema";var Pt=["platform.communication-os"],pd=Tt({meta:{key:"communication.decision.extract",version:"1.0.0",stability:"experimental",owners:[...Pt],tags:["communication","decision","extract"],description:"Extract decisions and open questions from a thread",goal:"Make buried decisions reviewable with source references",context:"Read-only/draft-only operation for summaries and handoffs"},io:{input:Pe({name:"ExtractDecisionsInput",fields:{threadId:{type:Y.String_unsecure(),isOptional:!1}}}),output:Pe({name:"ExtractDecisionsOutput",fields:{decisions:{type:Y.JSONObject(),isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),md=Tt({meta:{key:"communication.risk.extract",version:"1.0.0",stability:"experimental",owners:[...Pt],tags:["communication","risk","blocker"],description:"Extract risks and blockers from a thread",goal:"Surface blockers, policy risks, and unresolved dependencies",context:"Read-only/draft-only operation for triage and escalation"},io:{input:Pe({name:"ExtractRisksInput",fields:{threadId:{type:Y.String_unsecure(),isOptional:!1}}}),output:Pe({name:"ExtractRisksOutput",fields:{risks:{type:Y.JSONObject(),isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),ld=Tt({meta:{key:"communication.reply.draft",version:"1.0.0",stability:"experimental",owners:[...Pt],tags:["communication","reply","draft"],description:"Draft a reply using thread context and policy",goal:"Generate a safe, context-aware reply draft",context:"Draft-only operation; policy may require review or block the draft"},io:{input:Pe({name:"DraftReplyInput",fields:{threadId:{type:Y.String_unsecure(),isOptional:!1},messageId:{type:Y.String_unsecure(),isOptional:!0},instruction:{type:Y.String_unsecure(),isOptional:!0}}}),output:Yn},policy:{auth:"user"}}),dd=Tt({meta:{key:"communication.reply.send",version:"1.0.0",stability:"experimental",owners:[...Pt],tags:["communication","reply","send"],description:"Send an approved reply through its channel",goal:"Deliver a reply only when policy allows",context:"Policy-executable operation; every sent reply must be auditable"},io:{input:Pe({name:"SendReplyInput",fields:{draftId:{type:Y.String_unsecure(),isOptional:!1}}}),output:Pe({name:"SendReplyOutput",fields:{draftId:{type:Y.String_unsecure(),isOptional:!1},status:{type:rt,isOptional:!1},sentAt:{type:Y.DateTime(),isOptional:!0}}})},policy:{auth:"user"}}),fd=Tt({meta:{key:"communication.reply.blockByPolicy",version:"1.0.0",stability:"experimental",owners:[...Pt],tags:["communication","reply","policy","blocked"],description:"Record that a reply was blocked by policy",goal:"Keep blocked reply decisions explicit and auditable",context:"Used by reply policy gates before any outbound side effect"},io:{input:Pe({name:"BlockReplyByPolicyInput",fields:{draftId:{type:Y.String_unsecure(),isOptional:!1},policyRef:{type:Y.String_unsecure(),isOptional:!1},reason:{type:Y.String_unsecure(),isOptional:!1}}}),output:Yn},policy:{auth:"admin"}});import{defineCommand as Mt}from"@lssm/lib.contracts-spec";import{defineSchemaModel as sn,ScalarTypeEnum as me}from"@lssm/lib.schema";var qt=["platform.communication-os"],vd=Mt({meta:{key:"communication.handoff.create",version:"1.0.0",stability:"experimental",owners:[...qt],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:sn({name:"CreateHandoffInput",fields:{threadId:{type:me.String_unsecure(),isOptional:!1},fromOwner:{type:me.String_unsecure(),isOptional:!1},toOwner:{type:me.String_unsecure(),isOptional:!1},reason:{type:me.String_unsecure(),isOptional:!0}}}),output:ro},policy:{auth:"user"}}),Od=Mt({meta:{key:"communication.threadLink.propose",version:"1.0.0",stability:"experimental",owners:[...qt],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:st,output:st},policy:{auth:"user"}}),bd=Mt({meta:{key:"communication.identityLink.propose",version:"1.0.0",stability:"experimental",owners:[...qt],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:an,output:an},policy:{auth:"user"}}),Rd=Mt({meta:{key:"communication.escalation.request",version:"1.0.0",stability:"experimental",owners:[...qt],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:sn({name:"EscalateToHumanInput",fields:{threadId:{type:me.String_unsecure(),isOptional:!1},reason:{type:me.String_unsecure(),isOptional:!1},targetOwner:{type:me.String_unsecure(),isOptional:!0}}}),output:co},policy:{auth:"user"}}),Id=Mt({meta:{key:"communication.feedback.record",version:"1.0.0",stability:"experimental",owners:[...qt],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:sn({name:"RecordHumanFeedbackInput",fields:{targetId:{type:me.String_unsecure(),isOptional:!1},targetType:{type:me.String_unsecure(),isOptional:!1},outcome:{type:io,isOptional:!1},notes:{type:me.String_unsecure(),isOptional:!0}}}),output:sn({name:"RecordHumanFeedbackOutput",fields:{feedbackId:{type:me.String_unsecure(),isOptional:!1},safetyMode:{type:on,isOptional:!1}}})},policy:{auth:"user"}});import{defineCommand as Rs,defineQuery as Is}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as pn,ScalarTypeEnum as U}from"@lssm/lib.schema";import{defineEnum as ct,defineSchemaModel as Xn,ScalarTypeEnum as K}from"@lssm/lib.schema";var vs=ct("ResidencyRegion",["eu","eu_fr","eu_de","us","uk","apac","self_managed"]),Os=ct("HostingMode",["saas","self_host","on_prem"]),cn=ct("DataClass",["message_body","participant_identity","channel_account","attachment","ai_derived","audit_evidence"]),un=ct("ConsentBasis",["consent","contract","legal_obligation","legitimate_interest"]),ei=ct("ConsentStatus",["granted","withdrawn","expired","not_recorded"]),bs=Xn({name:"RetentionWindow",description:"Documented retention window for a single governed data class.",fields:{dataClass:{type:cn,isOptional:!1},retentionDays:{type:K.Int_unsecure(),isOptional:!1},basis:{type:un,isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0}}}),kd=Xn({name:"SovereigntyProfile",description:"Residency, retention, sovereign LLM provider and hosting posture for a tenant.",fields:{id:{type:K.String_unsecure(),isOptional:!1},tenantId:{type:K.String_unsecure(),isOptional:!1},residencyRegion:{type:vs,isOptional:!1,defaultValue:"eu"},hostingMode:{type:Os,isOptional:!1,defaultValue:"saas"},llmProviderId:{type:K.String_unsecure(),isOptional:!1},retentionWindows:{type:bs,isArray:!0,isOptional:!1},dataResidencyEnforced:{type:K.Boolean(),isOptional:!1,defaultValue:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1}}}),Ad=Xn({name:"SubjectConsent",description:"Recorded RGPD consent decision for a single data subject.",fields:{id:{type:K.String_unsecure(),isOptional:!1},tenantId:{type:K.String_unsecure(),isOptional:!1},subjectId:{type:K.String_unsecure(),isOptional:!1},basis:{type:un,isOptional:!1},status:{type:ei,isOptional:!1,defaultValue:"not_recorded"},grantedAt:{type:K.DateTime(),isOptional:!0},withdrawnAt:{type:K.DateTime(),isOptional:!0},expiresAt:{type:K.DateTime(),isOptional:!0},evidenceRef:{type:K.String_unsecure(),isOptional:!0}}}),uo=ct("ErasureOutcome",["erased_local","erased_local_and_channel","erased_local_provider_retained_documented"]);var po=["platform.communication-os"],Td=Rs({meta:{key:"communication.subject.erase",version:"1.0.0",stability:"experimental",owners:[...po],tags:["communication","gdpr","rgpd","erasure","sovereignty"],description:"Erase a data subject across local persistence and channel providers",goal:"Honor a GDPR/RGPD right-to-erasure request with an auditable, three-state outcome that documents irrecoverable provider retention rather than failing closed",context:"Governed by ContractSpec Connect; handler emits a local delete descriptor plus ChannelAdapter.eraseSubject; provider-unrecallable channels (email/SMTP) resolve to a documented retention window from the Sovereignty Profile"},io:{input:pn({name:"EraseSubjectInput",description:"Right-to-erasure request for a single data subject.",fields:{tenantId:{type:U.String_unsecure(),isOptional:!1},subjectId:{type:U.String_unsecure(),isOptional:!1},requestedBy:{type:U.String_unsecure(),isOptional:!1},reason:{type:U.String_unsecure(),isOptional:!0},dataClasses:{type:cn,isArray:!0,isOptional:!0}}}),output:pn({name:"EraseSubjectOutput",description:"Three-state erasure outcome with optional documented provider retention.",fields:{subjectId:{type:U.String_unsecure(),isOptional:!1},outcome:{type:uo,isOptional:!1},localDeleted:{type:U.Boolean(),isOptional:!1},channelErased:{type:U.Boolean(),isOptional:!1},providerRetainedDataClass:{type:cn,isOptional:!0},providerRetentionDays:{type:U.Int_unsecure(),isOptional:!0},retentionWindowRef:{type:U.String_unsecure(),isOptional:!0},auditEventRef:{type:U.String_unsecure(),isOptional:!1},erasedAt:{type:U.DateTime(),isOptional:!1}}}),errors:{SUBJECT_NOT_FOUND:{description:"No data subject exists for the provided subjectId",http:404,when:"subjectId does not resolve to any local persistence record"},SOVEREIGNTY_PROFILE_MISSING:{description:"No Sovereignty Profile is configured for the tenant; retention window cannot be documented",http:422,when:"A provider cannot recall data but no documented retention window exists to reference"},CHANNEL_ADAPTER_UNAVAILABLE:{description:"The channel adapter required to attempt provider erasure could not be reached",http:503,when:"ChannelAdapter.eraseSubject cannot be invoked; erasure fails closed rather than reporting an unverified outcome"},ERASURE_NOT_AUTHORIZED:{description:"The requesting actor is not authorized to erase this subject",http:403,when:"Policy gate denies the erasure request for the actor/tenant"}}},policy:{auth:"admin"}}),Pd=Is({meta:{key:"communication.subject.consent.check",version:"1.0.0",stability:"experimental",owners:[...po],tags:["communication","gdpr","rgpd","consent"],description:"Check the recorded RGPD consent state for a data subject",goal:"Let runtime gate processing on a subject lawful basis before side effects",context:"Read-only; returns the recorded consent status and lawful basis, never mutates consent"},io:{input:pn({name:"CheckSubjectConsentInput",fields:{tenantId:{type:U.String_unsecure(),isOptional:!1},subjectId:{type:U.String_unsecure(),isOptional:!1}}}),output:pn({name:"CheckSubjectConsentOutput",fields:{subjectId:{type:U.String_unsecure(),isOptional:!1},status:{type:ei,isOptional:!1},basis:{type:un,isOptional:!0},mayProcess:{type:U.Boolean(),isOptional:!1}}})},policy:{auth:"admin"}});import{defineCommand as _s,defineQuery as ti}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as Je,ScalarTypeEnum as le}from"@lssm/lib.schema";var mn=["platform.communication-os"],Bd=_s({meta:{key:"communication.thread.updateStatus",version:"1.0.0",stability:"experimental",owners:[...mn],tags:["communication","thread","status"],description:"Update a thread lifecycle status",goal:"Move operational conversations through explicit lifecycle states",context:"Runtime must enforce valid transitions from lifecycle definitions"},io:{input:Je({name:"UpdateThreadStatusInput",fields:{threadId:{type:le.String_unsecure(),isOptional:!1},status:{type:Te,isOptional:!1},reason:{type:le.String_unsecure(),isOptional:!0}}}),output:Qe},policy:{auth:"user"}}),zd=ti({meta:{key:"communication.thread.get",version:"1.0.0",stability:"experimental",owners:[...mn],tags:["communication","thread","get"],description:"Get a thread by ID with messages and links",goal:"Retrieve full thread context",context:"Read-only operation for inbox views, detail views, and agent context"},io:{input:Je({name:"GetThreadInput",fields:{threadId:{type:le.String_unsecure(),isOptional:!1}}}),output:Je({name:"GetThreadOutput",fields:{thread:{type:Qe,isOptional:!1},messages:{type:wt,isArray:!0,isOptional:!1},links:{type:st,isArray:!0,isOptional:!0}}})},policy:{auth:"user"}}),Fd=ti({meta:{key:"communication.thread.search",version:"1.0.0",stability:"experimental",owners:[...mn],tags:["communication","thread","search"],description:"Search threads by status, participant, channel, or linked object",goal:"Find relevant conversations quickly",context:"Read-only operation for operational inboxes, agent search, and dashboards"},io:{input:Je({name:"SearchThreadsInput",fields:{status:{type:Te,isOptional:!0},participantId:{type:le.String_unsecure(),isOptional:!0},channelType:{type:Oe,isOptional:!0},linkedKindId:{type:le.String_unsecure(),isOptional:!0},linkedInstanceId:{type:le.String_unsecure(),isOptional:!0},assignedTo:{type:le.String_unsecure(),isOptional:!0},limit:{type:le.Int_unsecure(),isOptional:!0,defaultValue:20}}}),output:Je({name:"SearchThreadsOutput",fields:{threads:{type:Qe,isArray:!0,isOptional:!1},total:{type:le.Int_unsecure(),isOptional:!1},hasMore:{type:le.Boolean(),isOptional:!1}}})},policy:{auth:"user"}}),Gd=ti({meta:{key:"communication.message.list",version:"1.0.0",stability:"experimental",owners:[...mn],tags:["communication","message","list"],description:"List messages for a thread",goal:"Provide ordered message context without loading unrelated operational state",context:"Read-only operation for inboxes, agent context, and handoff evidence"},io:{input:Je({name:"ListMessagesInput",fields:{threadId:{type:le.String_unsecure(),isOptional:!1}}}),output:Je({name:"ListMessagesOutput",fields:{messages:{type:wt,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});import{defineCommand as Lt}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as Nt,ScalarTypeEnum as Me}from"@lssm/lib.schema";var jt=["platform.communication-os"],Qd=Lt({meta:{key:"communication.thread.create",version:"1.0.0",stability:"experimental",owners:[...jt],tags:["communication","thread","create"],description:"Create a communication thread from normalized input",goal:"Persist a reusable conversation container before downstream work binds to it",context:"Used by ingest flows and generic operational inbox consumers"},io:{input:Qe,output:Qe},policy:{auth:"admin"}}),Jd=Lt({meta:{key:"communication.message.ingest",version:"1.0.0",stability:"experimental",owners:[...jt],tags:["communication","message","ingest"],description:"Ingest an inbound message from a channel adapter",goal:"Normalize and store an inbound message for triage",context:"Called by channel adapters after webhook verification and deduplication"},io:{input:wt,output:Nt({name:"IngestMessageOutput",fields:{messageId:{type:Me.String_unsecure(),isOptional:!1},threadId:{type:Me.String_unsecure(),isOptional:!1},status:{type:at,isOptional:!1}}})},policy:{auth:"admin"}}),$d=Lt({meta:{key:"communication.intent.classify",version:"1.0.0",stability:"experimental",owners:[...jt],tags:["communication","intent","classify"],description:"Classify the intent of a message or thread",goal:"Route and triage based on intent category and confidence",context:"Read-only AI operation; returns suggestion state, not canonical truth"},io:{input:Nt({name:"ClassifyIntentInput",fields:{threadId:{type:Me.String_unsecure(),isOptional:!1},messageId:{type:Me.String_unsecure(),isOptional:!0}}}),output:$n},policy:{auth:"admin"}}),Yd=Lt({meta:{key:"communication.summary.generate",version:"1.0.0",stability:"experimental",owners:[...jt],tags:["communication","summary"],description:"Generate a summary of a thread",goal:"Produce a concise summary with facts, actions, decisions, risks, and source references",context:"Draft-only AI operation used for handoffs, inbox views, and agent context"},io:{input:Nt({name:"GenerateSummaryInput",fields:{threadId:{type:Me.String_unsecure(),isOptional:!1},messageIds:{type:Me.String_unsecure(),isArray:!0,isOptional:!0}}}),output:so},policy:{auth:"user"}}),Xd=Lt({meta:{key:"communication.action.extract",version:"1.0.0",stability:"experimental",owners:[...jt],tags:["communication","action","extract"],description:"Extract implied actions from a thread",goal:"Turn conversation text into structured work candidates with evidence",context:"Draft-only AI operation; does not mutate external work items"},io:{input:Nt({name:"ExtractActionsInput",fields:{threadId:{type:Me.String_unsecure(),isOptional:!1},messageIds:{type:Me.String_unsecure(),isArray:!0,isOptional:!0}}}),output:Nt({name:"ExtractActionsOutput",fields:{actions:{type:rn,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});import{defineEntity as be,field as a,index as g}from"@lssm/lib.schema";var xs=be({name:"CommunicationThreadPersistence",description:"Portable CommunicationOS thread persistence record owned by communication domain commands.",schema:"communication_os",map:"communication_thread",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Thread identifier emitted by the domain command."}),status:a.string({description:"Thread lifecycle status."}),participantIds:a.json({description:"Participant identifiers preserved as portable JSON."}),channelTypes:a.json({description:"Channel types represented without provider-specific adapters."}),links:a.json({isOptional:!0,description:"Business-object links proposed by communication commands."}),assignedTo:a.string({isOptional:!0}),metadata:a.json({isOptional:!0}),domainCommandRef:a.string({description:"Owning CommunicationOS command that authorized this write."}),idempotencyKey:a.string({description:"Command idempotency key."}),auditEventRefs:a.json({description:"Audit evidence refs for replay."}),createdAt:a.createdAt(),updatedAt:a.updatedAt()},indexes:[g.unique(["id"]),g.on(["status"]),g.on(["assignedTo"]),g.unique(["idempotencyKey"])]}),ks=be({name:"CommunicationMessagePersistence",description:"Portable CommunicationOS message persistence record produced by ingest commands.",schema:"communication_os",map:"communication_message",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Message identifier emitted by ingest."}),threadId:a.string({description:"Owning thread identifier."}),channelType:a.string({description:"Backend-neutral channel type."}),channelAccountId:a.string({description:"Channel account ref; no provider credential material."}),participantId:a.string({isOptional:!0}),externalMessageId:a.string({isOptional:!0}),body:a.string({description:"Original normalized-safe message body."}),bodyNormalized:a.string({description:"Runtime normalized body."}),status:a.string({description:"Message lifecycle status."}),metadata:a.json({isOptional:!0}),domainCommandRef:a.string({description:"Owning CommunicationOS command that authorized this write."}),idempotencyKey:a.string({description:"Adapter dedupe/idempotency key."}),auditEventRefs:a.json({description:"Audit evidence refs for replay."}),createdAt:a.createdAt(),updatedAt:a.updatedAt()},indexes:[g.unique(["id"]),g.on(["threadId"]),g.on(["channelType"]),g.unique(["idempotencyKey"])]}),As=be({name:"CommunicationDomainCommandOutbox",description:"Replayable CommunicationOS domain-command outbox for governed database mutation execution.",schema:"communication_os",map:"communication_domain_command_outbox",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Outbox record identifier."}),tenantId:a.string({isOptional:!0,map:"tenant_id"}),workspaceId:a.string({isOptional:!0}),spaceId:a.string({isOptional:!0}),domainCommandRef:a.string({description:"CommunicationOS command that remains the write authority."}),mutationPlanRef:a.string({description:"Portable mutation plan ref."}),policyDecisionRef:a.string({description:"Policy gate evidence."}),idempotencyKey:a.string({description:"Execution idempotency key."}),replayRef:a.string({description:"Replay checkpoint reference."}),correlationRef:a.string({description:"Cross-system correlation ref."}),deploymentMode:a.string({description:"Managed or BYOK execution mode; local is not an ownership mode."}),status:a.string({description:"Outbox lifecycle status."}),attempt:a.int({isOptional:!0}),leaseVersion:a.int({isOptional:!0}),leaseOwner:a.string({isOptional:!0}),leaseExpiresAt:a.dateTime({isOptional:!0}),nextAttemptAt:a.dateTime({isOptional:!0}),providerDeliveryId:a.string({isOptional:!0}),lastErrorCode:a.string({isOptional:!0}),reconciliationWorkOrderDigest:a.string({isOptional:!0}),reconciliationEvidenceRefs:a.json({isOptional:!0,description:"Evidence refs that bind an indeterminate provider outcome to durable reconciliation custody."}),reconciliationObservationRef:a.string({isOptional:!0}),reconciliationObservationDigest:a.string({isOptional:!0}),reconciliationObservedAt:a.dateTime({isOptional:!0}),payload:a.json({description:"Portable mutation descriptor payload."}),createdAt:a.createdAt(),updatedAt:a.updatedAt()},indexes:[g.unique(["id"]),g.on(["domainCommandRef"]),g.unique(["idempotencyKey"]),g.on(["status"]),g.on(["tenantId","workspaceId","spaceId","status"])]}),Vs=be({name:"CommunicationJournalCursor",description:"Atomic, scope-local sequence allocator for the append-only journal.",schema:"communication_os",map:"communication_journal_cursor",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Stable tenant/workspace/space scope key."}),tenantId:a.string({map:"tenant_id"}),workspaceId:a.string(),spaceId:a.string(),sequence:a.bigInt(),updatedAt:a.updatedAt()},indexes:[g.unique(["id"]),g.unique(["tenantId","workspaceId","spaceId"])]}),Ds=be({name:"CommunicationJournalEvent",description:"Canonical append-only event used to rebuild CommunicationOS projections.",schema:"communication_os",map:"communication_journal_event",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Globally unique journal event identifier."}),tenantId:a.string({map:"tenant_id"}),workspaceId:a.string(),spaceId:a.string(),sequence:a.bigInt(),kind:a.string(),entityId:a.string(),roomId:a.string({isOptional:!0}),actorPrincipalId:a.string(),idempotencyKey:a.string(),payload:a.json(),occurredAt:a.dateTime(),createdAt:a.createdAt()},indexes:[g.unique(["id"]),g.unique(["tenantId","workspaceId","spaceId","sequence"]),g.unique(["tenantId","workspaceId","spaceId","idempotencyKey"]),g.on(["tenantId","workspaceId","spaceId","roomId"])]}),Es=be({name:"CommunicationAttachmentPersistence",description:"Scope-bound opaque attachment bytes and integrity metadata; never projected with a storage location.",schema:"communication_os",map:"communication_attachment",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Opaque attachment identifier."}),tenantId:a.string({map:"tenant_id"}),workspaceId:a.string(),spaceId:a.string(),roomId:a.string(),messageId:a.string({isOptional:!0}),name:a.string(),mimeType:a.string(),sizeBytes:a.int(),sha256:a.string(),content:a.bytes(),createdBy:a.string(),idempotencyKey:a.string(),createdAt:a.createdAt()},indexes:[g.unique(["id"]),g.unique(["tenantId","workspaceId","spaceId","idempotencyKey"]),g.on(["tenantId","workspaceId","spaceId","roomId"]),g.on(["messageId"])]}),ws=be({name:"CommunicationSupportInternalNote",description:"Immutable encrypted private Support note content and redacted evidence owned by CommunicationOS.",schema:"communication_os",map:"communication_support_internal_note",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"Opaque note reference."}),tenantId:a.string({map:"tenant_id"}),workspaceId:a.string(),caseRef:a.string(),evidenceRef:a.string(),actorRef:a.string(),visibility:a.string(),bodyEnvelope:a.json({description:"Versioned authenticated ciphertext; never a public projection."}),bodyFingerprint:a.string({description:"Keyed digest used only for idempotency conflict detection."}),idempotencyKey:a.string(),requestDigest:a.string(),createdAt:a.createdAt()},indexes:[g.unique(["id"]),g.unique(["tenantId","workspaceId","evidenceRef"]),g.unique(["tenantId","workspaceId","idempotencyKey"]),g.on(["tenantId","workspaceId","caseRef","createdAt"])]}),Ts=be({name:"CommunicationOAuthState",description:"Global replay guard for opaque encrypted OAuth state; scope, principal, PKCE verifier, and credentials are never stored in this table.",schema:"communication_os",map:"communication_oauth_state",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"SHA-256 fingerprint of opaque OAuth state."}),network:a.string(),expiresAt:a.dateTime(),consumedAt:a.dateTime({isOptional:!0}),createdAt:a.createdAt()},indexes:[g.unique(["id"]),g.on(["network","expiresAt"]),g.on(["consumedAt"])]}),Ps=be({name:"CommunicationCredentialSecret",description:"Portable server-only credential vault record containing only an authenticated encrypted envelope; raw references, provider tokens, and the external master key are never persisted.",schema:"communication_os",map:"communication_credential_secret",module:"@lssm/lib.communication-spec",fields:{id:a.id({description:"SHA-256 fingerprint of the opaque credential reference."}),envelope:a.string({description:"Base64url AES-GCM IV plus authenticated ciphertext."}),contentType:a.string({isOptional:!0}),labels:a.json({isOptional:!0}),version:a.int(),createdAt:a.createdAt(),updatedAt:a.updatedAt()},indexes:[g.unique(["id"]),g.on(["updatedAt"])]}),Ms=[xs,ks,As,Vs,Ds,Es,ws,Ts,Ps],uf={moduleId:"@lssm/lib.communication-spec",entities:[...Ms]},pf={createThread:{domainCommandRef:"communication.thread.create@1.0.0",resource:{kind:"table",schema:"communication_os",name:"communication_thread"},operation:"insert",managedByokRequired:!0,writeAuthority:"domain-command",expectedWriteSet:[{table:"communication_os.communication_thread",action:"insert"}]},ingestMessage:{domainCommandRef:"communication.message.ingest@1.0.0",resource:{kind:"table",schema:"communication_os",name:"communication_message"},operation:"insert",managedByokRequired:!0,writeAuthority:"domain-command",expectedWriteSet:[{table:"communication_os.communication_message",action:"insert"}]},updateThreadStatus:{domainCommandRef:"communication.thread.updateStatus@1.0.0",resource:{kind:"table",schema:"communication_os",name:"communication_thread"},operation:"update",managedByokRequired:!0,writeAuthority:"domain-command",expectedWriteSet:[{table:"communication_os.communication_thread",action:"update"}]}};function mf(e){if(e.auditEventRefs.length===0)throw Error("CommunicationOS persistence requires auditEventRefs.");if(e.deploymentMode!=="managed"&&e.deploymentMode!=="byok")throw Error("CommunicationOS persistence requires managed or BYOK mode.");return{operationRef:{key:"database.mutation.execute",version:"2.0.0"},mutationPlanRef:e.mutationPlanRef,resource:e.plan.resource,operation:e.plan.operation,values:{...e.values,domainCommandRef:e.plan.domainCommandRef,idempotencyKey:e.idempotencyKey},where:e.where,actorRef:e.actorRef,tenantRef:e.tenantRef,domainCommandRef:e.plan.domainCommandRef,policyDecisionRef:e.policyDecisionRef,idempotencyKey:e.idempotencyKey,transactionBoundary:"transaction",expectedWriteSet:e.plan.expectedWriteSet,auditEventRefs:e.auditEventRefs,replayRef:e.replayRef,correlationRef:e.correlationRef,deploymentMode:e.deploymentMode}}import{defineCommand as mo,defineEvent as lo,defineQuery as qs,docId as Ns}from"@lssm/lib.contracts-spec";import{defineEnum as fo,defineSchemaModel as ut,ScalarTypeEnum as P}from"@lssm/lib.schema";var Bt=["platform.communication-os","platform.support-os"],Ls={id:"communication-os.support-internal-note.v1",title:"CommunicationOS private Support note authority",body:"CommunicationOS owns private note content and immutable evidence. SupportOS stores only opaque note and evidence references. Service requests derive tenant, workspace, actor, audience, and capabilities from a short-lived AuthOS grant; verification is redacted and never returns note content.",kind:"reference",route:"/docs/communication-os/support-internal-notes-v1",visibility:"public"},zt=[Ns(Ls.id)],yo=fo("CommunicationSupportInternalNoteVisibility",["internal"]),js=ut({name:"CommunicationSupportInternalNoteCreateV1Input",fields:{caseRef:{type:P.String_unsecure(),isOptional:!1},body:{type:P.String_unsecure(),isOptional:!1},idempotencyKey:{type:P.String_unsecure(),isOptional:!1}}}),Bs=ut({name:"CommunicationSupportInternalNoteCreateForIntentV1Input",fields:{caseRef:{type:P.String_unsecure(),isOptional:!1},intentRef:{type:P.String_unsecure(),isOptional:!1},body:{type:P.String_unsecure(),isOptional:!1},idempotencyKey:{type:P.String_unsecure(),isOptional:!1}}}),ni=ut({name:"CommunicationSupportInternalNoteEvidenceV1",fields:{noteRef:{type:P.String_unsecure(),isOptional:!1},caseRef:{type:P.String_unsecure(),isOptional:!1},evidenceRef:{type:P.String_unsecure(),isOptional:!1},visibility:{type:yo,isOptional:!1},createdAt:{type:P.DateTime(),isOptional:!1}}}),go=ut({name:"CommunicationSupportInternalNoteIntentEvidenceV1",fields:{...ni.config.fields,intentRef:{type:P.String_unsecure(),isOptional:!1},deliveryRef:{type:P.String_unsecure(),isOptional:!1},grantEvidenceRef:{type:P.String_unsecure(),isOptional:!1}}}),zs=ut({name:"CommunicationSupportInternalNoteVerifyV1Input",fields:{caseRef:{type:P.String_unsecure(),isOptional:!1},noteRef:{type:P.String_unsecure(),isOptional:!1},evidenceRef:{type:P.String_unsecure(),isOptional:!1}}}),Fs=ut({name:"CommunicationSupportInternalNoteVerificationV1",fields:{status:{type:fo("CommunicationSupportInternalNoteVerificationStatus",["verified"]),isOptional:!1},caseRef:{type:P.String_unsecure(),isOptional:!1},noteRef:{type:P.String_unsecure(),isOptional:!1},evidenceRef:{type:P.String_unsecure(),isOptional:!1},visibility:{type:yo,isOptional:!1}}}),yf=mo({meta:{key:"communication.support.internal-note.create",version:"1.0.0",stability:"experimental",owners:[...Bt],tags:["communication","support","internal-note","private"],description:"Create one encrypted private Support note in CommunicationOS",goal:"Keep note content in CommunicationOS while SupportOS stores opaque evidence",context:"Server scope and actor come only from a short-lived AuthOS downstream grant",docId:zt},io:{input:js,output:ni},policy:{auth:"admin"}}),gf=mo({meta:{key:"communication.support.internal-note.create-for-intent",version:"1.0.0",stability:"experimental",owners:[...Bt],tags:["communication","support","internal-note","private","reconciliation"],description:"Create an encrypted Support note bound to a body-free SupportOS intent",goal:"Make cross-service note attachment replayable without copying content",context:"The short-lived AuthOS grant binds scope and actor; the intent is opaque, redacted correlation metadata",docId:zt},io:{input:Bs,output:go},policy:{auth:"admin"}}),hf=qs({meta:{key:"communication.support.internal-note.verify",version:"1.0.0",stability:"experimental",owners:[...Bt],tags:["communication","support","internal-note","verify"],description:"Verify exact private-note evidence without returning content",goal:"Let SupportOS validate its opaque note reference at the authority boundary",context:"The query requires exact tenant, workspace, case, note, evidence, audience, and capability binding",docId:zt},io:{input:zs,output:Fs},policy:{auth:"admin"}}),Cf=lo({meta:{key:"communication.support.internal-note.created",version:"1.0.0",stability:"experimental",owners:[...Bt],tags:["communication","support","internal-note","event"],description:"Immutable redacted evidence that a private Support note was created",docId:zt},payload:ni}),Sf=lo({meta:{key:"communication.support.internal-note.reconciliation-ready",version:"1.0.0",stability:"experimental",owners:[...Bt],tags:["communication","support","internal-note","reconciliation"],description:"Redacted durable delivery evidence for a SupportOS note intent",docId:zt},payload:go}),vf={create:"communication.support.internal-note.create",createForIntent:"communication.support.internal-note.create-for-intent",verify:"communication.support.internal-note.verify"};import{defineReferenceKind as Gs}from"@lssm/lib.contracts-spec/rich-reference/define-kind";import{z as ln}from"zod";var Ks=ln.object({domain:ln.string().min(1),id:ln.string().min(1),label:ln.string().optional()}),If=Gs({id:"communication.thread-linked-object",schema:Ks,sensitiveFields:[],defaultPreview:"inline-chip",defaultPanel:"popover",icon:"link"});var lt={tenantRef:"tenant:northwind",workspaceRef:"workspace:support",subjectRef:"person:42"},qe=`sha256:${"a".repeat(64)}`,Us=[hn.parse({schemaVersion:"1.0.0",routeRef:"route:email-primary",revision:1,scope:lt,channel:"email",destinationRef:"destination:person-42-email",connectionRef:"connection:workspace-email",semantic:"communication",deliveryMode:"direct",capabilityRefs:["capability:email.transactional"],evidenceRefs:["evidence:route-email-primary"],routeDigest:qe}),hn.parse({schemaVersion:"1.0.0",routeRef:"route:in-app-durable",revision:1,scope:lt,channel:"in_app",destinationRef:"destination:person-42-inbox",semantic:"communication",deliveryMode:"durable_in_app",capabilityRefs:["capability:in-app.durable"],evidenceRefs:["evidence:route-in-app-durable"],routeDigest:qe})],mt=ri.parse({schemaVersion:"1.0.0",profileRef:"communication-profile:agent-support-v1",revision:1,agentRef:"agent:support-v1",applicationRef:"application:companyos-support",scope:lt,routeBindings:Us.map((e)=>({ref:e.routeRef,revision:e.revision,digest:e.routeDigest})),connectionRefs:["connection:workspace-email"],preferenceSet:{ref:"preference-set:person-42-v1",revision:1,digest:qe},policyRefs:["policy:communication-outbound-v1"],evidenceRefs:["evidence:agent-profile-v1"],createdAt:"2026-08-12T08:00:00.000Z",updatedAt:"2026-08-12T08:00:00.000Z",profileDigest:qe}),hy=Re.parse({schemaVersion:"1.0.0",linkRef:"communication-link:run-42-task-7",profile:{ref:mt.profileRef,revision:mt.revision,digest:mt.profileDigest},agentRef:mt.agentRef,applicationRef:mt.applicationRef,scope:lt,runRef:"agent-run:42",taskRef:"agent-task:7",canonicalConversation:{ref:"conversation:agent-run-42",digest:qe},session:{ref:"session:agent-run-42",revision:1,digest:qe},correlationRef:"correlation:agent-run-42",evidenceRefs:["evidence:agent-run-42-task-7"]}),pt=mi.parse({schemaVersion:"1.0.0",preferenceSetRef:mt.preferenceSet.ref,revision:1,scope:lt,target:{kind:"person",ref:"person:42"},parentPreferenceSetRefs:["preference-set:platform-default-v1"],authority:"preference_only",globalEnabled:!0,routePreferences:[{routeRef:"route:email-primary",channel:"email",enabled:!0,priority:1,consentRef:"consent:person-42-email",quietHours:{start:"20:00",end:"08:00",timezone:"Europe/Paris"}},{routeRef:"route:in-app-durable",channel:"in_app",enabled:!0,priority:2}],fallback:{enabled:!0,orderedRouteRefs:["route:email-primary","route:in-app-durable"],terminalRouteRef:"route:in-app-durable"},updatedAt:"2026-08-12T08:00:00.000Z",evidenceRefs:["evidence:preference-set-person-42-v1"],preferenceSetDigest:qe}),Cy=pi.parse({schemaVersion:"1.0.0",resolutionRef:"preference-resolution:person-42-agent-update",scope:lt,subjectRef:"person:42",evaluatedPreferenceSets:[{preferenceSetRef:pt.preferenceSetRef,revision:pt.revision,digest:pt.preferenceSetDigest,target:pt.target}],winningPreferenceSetRef:pt.preferenceSetRef,winningTarget:pt.target,authority:"preference_only",effectAuthority:"none",resolvedAt:"2026-08-12T08:04:00.000Z",evidenceRefs:["evidence:preference-resolution-person-42-agent-update"],resolutionDigest:qe});export{hy as communicationAgentLifecycleLinkFixture,mt as communicationAgentProfileFixture,Us as communicationDeliveryRoutesFixture,Cy as communicationPreferenceResolutionFixture,pt as communicationPreferenceSetFixture,lt as communicationScopeFixture};