@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.
- package/README.md +201 -0
- package/dist/browser/capabilities/comms-ai.capabilities.js +1 -0
- package/dist/browser/capabilities/communication-os.capability-ids.js +1 -0
- package/dist/browser/capabilities/ecosystem-messaging.capabilities.js +1 -0
- package/dist/browser/capabilities/index.js +1 -0
- package/dist/browser/commands/comms-ai.commands.js +1 -0
- package/dist/browser/commands/index.js +1 -0
- package/dist/browser/contracts/agent-communication.js +1 -0
- package/dist/browser/contracts/agent-lifecycle-projection.js +1 -0
- package/dist/browser/contracts/agent-surface-control.js +1 -0
- package/dist/browser/contracts/ai-assistance.operations.js +1 -0
- package/dist/browser/contracts/artifact-digest.js +1 -0
- package/dist/browser/contracts/canonical-agent-conversation.js +1 -0
- package/dist/browser/contracts/channel-preferences.js +1 -0
- package/dist/browser/contracts/channel-routing.js +1 -0
- package/dist/browser/contracts/collaboration.operations.js +1 -0
- package/dist/browser/contracts/customer-live-chat-grant.operations.js +1 -0
- package/dist/browser/contracts/delivery-eligibility.js +1 -0
- package/dist/browser/contracts/delivery-fallback-eligibility-validation.js +1 -0
- package/dist/browser/contracts/delivery-fallback-validation.js +1 -0
- package/dist/browser/contracts/delivery-fallback.js +1 -0
- package/dist/browser/contracts/delivery-intent-validation.js +1 -0
- package/dist/browser/contracts/delivery-intent.js +1 -0
- package/dist/browser/contracts/delivery-progress.js +1 -0
- package/dist/browser/contracts/discord-community-intelligence.operations.js +1 -0
- package/dist/browser/contracts/discord-community.events.js +1 -0
- package/dist/browser/contracts/discord-community.models.js +1 -0
- package/dist/browser/contracts/discord-community.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-attachment.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-auth.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-binding.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-connection-subscription.events.js +1 -0
- package/dist/browser/contracts/ecosystem-governed-work-v2.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-governed-work.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-identity-v3.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-identity.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-message.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-messaging.dtos.js +0 -0
- package/dist/browser/contracts/ecosystem-messaging.events.js +1 -0
- package/dist/browser/contracts/ecosystem-messaging.models.js +1 -0
- package/dist/browser/contracts/ecosystem-navigation-v3.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-webhook.operations.js +1 -0
- package/dist/browser/contracts/ecosystem-workspace.operations.js +1 -0
- package/dist/browser/contracts/enums.js +1 -0
- package/dist/browser/contracts/erasure.operations.js +1 -0
- package/dist/browser/contracts/events.js +1 -0
- package/dist/browser/contracts/index.js +1 -0
- package/dist/browser/contracts/ingestion.js +1 -0
- package/dist/browser/contracts/ingress-admission-policy.js +1 -0
- package/dist/browser/contracts/ingress-admission.js +1 -0
- package/dist/browser/contracts/models.js +1 -0
- package/dist/browser/contracts/operations.js +1 -0
- package/dist/browser/contracts/persistence.js +1 -0
- package/dist/browser/contracts/preference-resolution.js +1 -0
- package/dist/browser/contracts/query.operations.js +1 -0
- package/dist/browser/contracts/sequence-intent.js +1 -0
- package/dist/browser/contracts/sovereignty.js +1 -0
- package/dist/browser/contracts/support-internal-note.operations.js +1 -0
- package/dist/browser/contracts/thread-link-kind.js +1 -0
- package/dist/browser/contracts/thread-message.operations.js +1 -0
- package/dist/browser/events/index.js +1 -0
- package/dist/browser/fixtures/agent-omnichannel-primitives.js +1 -0
- package/dist/browser/fixtures/agent-omnichannel.js +1 -0
- package/dist/browser/fixtures/gtm-learning-loop-neutral.parts.js +1 -0
- package/dist/browser/fixtures/index.js +1 -0
- package/dist/browser/fixtures/normalized-ingestion.js +1 -0
- package/dist/browser/index.js +1 -0
- package/dist/browser/queries/index.js +1 -0
- package/dist/browser/types/domain-command.js +0 -0
- package/dist/browser/types/index.js +1 -0
- package/dist/browser/validation/domain-command.js +1 -0
- package/dist/browser/validation/index.js +1 -0
- package/dist/capabilities/comms-ai.capabilities.d.ts +72 -0
- package/dist/capabilities/comms-ai.capabilities.js +2 -0
- package/dist/capabilities/communication-os-capability-boundary.test.d.ts +1 -0
- package/dist/capabilities/communication-os.capability-ids.d.ts +39 -0
- package/dist/capabilities/communication-os.capability-ids.js +2 -0
- package/dist/capabilities/communication-os.capability-ids.test.d.ts +1 -0
- package/dist/capabilities/ecosystem-messaging.capabilities.d.ts +9 -0
- package/dist/capabilities/ecosystem-messaging.capabilities.js +2 -0
- package/dist/capabilities/index.d.ts +4 -0
- package/dist/capabilities/index.js +2 -0
- package/dist/commands/comms-ai.commands.d.ts +272 -0
- package/dist/commands/comms-ai.commands.js +2 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.js +2 -0
- package/dist/contracts/agent-communication.d.ts +108 -0
- package/dist/contracts/agent-communication.js +2 -0
- package/dist/contracts/agent-communication.test.d.ts +1 -0
- package/dist/contracts/agent-lifecycle-projection.d.ts +98 -0
- package/dist/contracts/agent-lifecycle-projection.js +2 -0
- package/dist/contracts/agent-lifecycle-projection.test.d.ts +1 -0
- package/dist/contracts/agent-surface-control.d.ts +210 -0
- package/dist/contracts/agent-surface-control.js +2 -0
- package/dist/contracts/agent-surface-control.test.d.ts +1 -0
- package/dist/contracts/ai-assistance.operations.d.ts +187 -0
- package/dist/contracts/ai-assistance.operations.js +2 -0
- package/dist/contracts/artifact-digest.d.ts +3 -0
- package/dist/contracts/artifact-digest.js +2 -0
- package/dist/contracts/canonical-agent-conversation.d.ts +46 -0
- package/dist/contracts/canonical-agent-conversation.js +2 -0
- package/dist/contracts/canonical-agent-conversation.test.d.ts +1 -0
- package/dist/contracts/channel-preferences.d.ts +115 -0
- package/dist/contracts/channel-preferences.js +2 -0
- package/dist/contracts/channel-routing.d.ts +58 -0
- package/dist/contracts/channel-routing.js +2 -0
- package/dist/contracts/channel-routing.test.d.ts +1 -0
- package/dist/contracts/collaboration.operations.d.ts +315 -0
- package/dist/contracts/collaboration.operations.js +2 -0
- package/dist/contracts/customer-live-chat-grant.operations.d.ts +132 -0
- package/dist/contracts/customer-live-chat-grant.operations.js +2 -0
- package/dist/contracts/delivery-contracts.test.d.ts +1 -0
- package/dist/contracts/delivery-eligibility.d.ts +126 -0
- package/dist/contracts/delivery-eligibility.js +2 -0
- package/dist/contracts/delivery-eligibility.test.d.ts +1 -0
- package/dist/contracts/delivery-fallback-eligibility-validation.d.ts +6 -0
- package/dist/contracts/delivery-fallback-eligibility-validation.js +2 -0
- package/dist/contracts/delivery-fallback-validation.d.ts +24 -0
- package/dist/contracts/delivery-fallback-validation.js +2 -0
- package/dist/contracts/delivery-fallback.d.ts +117 -0
- package/dist/contracts/delivery-fallback.js +2 -0
- package/dist/contracts/delivery-intent-validation.d.ts +13 -0
- package/dist/contracts/delivery-intent-validation.js +2 -0
- package/dist/contracts/delivery-intent.d.ts +137 -0
- package/dist/contracts/delivery-intent.js +2 -0
- package/dist/contracts/delivery-progress.d.ts +61 -0
- package/dist/contracts/delivery-progress.js +2 -0
- package/dist/contracts/discord-community-intelligence.operations.d.ts +405 -0
- package/dist/contracts/discord-community-intelligence.operations.js +2 -0
- package/dist/contracts/discord-community.events.d.ts +162 -0
- package/dist/contracts/discord-community.events.js +2 -0
- package/dist/contracts/discord-community.models.d.ts +167 -0
- package/dist/contracts/discord-community.models.js +2 -0
- package/dist/contracts/discord-community.operations.d.ts +663 -0
- package/dist/contracts/discord-community.operations.js +2 -0
- package/dist/contracts/discord-community.test.d.ts +1 -0
- package/dist/contracts/ecosystem-attachment.operations.d.ts +129 -0
- package/dist/contracts/ecosystem-attachment.operations.js +2 -0
- package/dist/contracts/ecosystem-auth.operations.d.ts +345 -0
- package/dist/contracts/ecosystem-auth.operations.js +2 -0
- package/dist/contracts/ecosystem-binding.operations.d.ts +231 -0
- package/dist/contracts/ecosystem-binding.operations.js +2 -0
- package/dist/contracts/ecosystem-connection-subscription.events.d.ts +332 -0
- package/dist/contracts/ecosystem-connection-subscription.events.js +2 -0
- package/dist/contracts/ecosystem-governed-work-v2.operations.d.ts +234 -0
- package/dist/contracts/ecosystem-governed-work-v2.operations.js +2 -0
- package/dist/contracts/ecosystem-governed-work.operations.d.ts +265 -0
- package/dist/contracts/ecosystem-governed-work.operations.js +2 -0
- package/dist/contracts/ecosystem-governed-work.operations.test.d.ts +1 -0
- package/dist/contracts/ecosystem-identity-v3.operations.d.ts +65 -0
- package/dist/contracts/ecosystem-identity-v3.operations.js +2 -0
- package/dist/contracts/ecosystem-identity.operations.d.ts +174 -0
- package/dist/contracts/ecosystem-identity.operations.js +2 -0
- package/dist/contracts/ecosystem-identity.operations.test.d.ts +1 -0
- package/dist/contracts/ecosystem-message.operations.d.ts +1092 -0
- package/dist/contracts/ecosystem-message.operations.js +2 -0
- package/dist/contracts/ecosystem-messaging.dtos.d.ts +68 -0
- package/dist/contracts/ecosystem-messaging.dtos.js +1 -0
- package/dist/contracts/ecosystem-messaging.dtos.test.d.ts +1 -0
- package/dist/contracts/ecosystem-messaging.events.d.ts +608 -0
- package/dist/contracts/ecosystem-messaging.events.js +2 -0
- package/dist/contracts/ecosystem-messaging.models.d.ts +386 -0
- package/dist/contracts/ecosystem-messaging.models.js +2 -0
- package/dist/contracts/ecosystem-messaging.test.d.ts +1 -0
- package/dist/contracts/ecosystem-navigation-v3.operations.d.ts +149 -0
- package/dist/contracts/ecosystem-navigation-v3.operations.js +2 -0
- package/dist/contracts/ecosystem-webhook.operations.d.ts +187 -0
- package/dist/contracts/ecosystem-webhook.operations.js +2 -0
- package/dist/contracts/ecosystem-workspace.operations.d.ts +590 -0
- package/dist/contracts/ecosystem-workspace.operations.js +2 -0
- package/dist/contracts/enums.d.ts +9 -0
- package/dist/contracts/enums.js +2 -0
- package/dist/contracts/erasure.operations.d.ts +114 -0
- package/dist/contracts/erasure.operations.js +2 -0
- package/dist/contracts/erasure.test.d.ts +1 -0
- package/dist/contracts/events.d.ts +174 -0
- package/dist/contracts/events.js +2 -0
- package/dist/contracts/index.d.ts +43 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/ingestion.d.ts +169 -0
- package/dist/contracts/ingestion.js +2 -0
- package/dist/contracts/ingress-admission-policy.d.ts +14 -0
- package/dist/contracts/ingress-admission-policy.js +2 -0
- package/dist/contracts/ingress-admission.d.ts +184 -0
- package/dist/contracts/ingress-admission.js +2 -0
- package/dist/contracts/ingress-admission.test.d.ts +1 -0
- package/dist/contracts/models.d.ts +851 -0
- package/dist/contracts/models.js +2 -0
- package/dist/contracts/operations.d.ts +5 -0
- package/dist/contracts/operations.js +2 -0
- package/dist/contracts/persistence.d.ts +353 -0
- package/dist/contracts/persistence.js +2 -0
- package/dist/contracts/persistence.test.d.ts +1 -0
- package/dist/contracts/preference-resolution.d.ts +154 -0
- package/dist/contracts/preference-resolution.js +2 -0
- package/dist/contracts/preference-resolution.test.d.ts +1 -0
- package/dist/contracts/query.operations.d.ts +600 -0
- package/dist/contracts/query.operations.js +2 -0
- package/dist/contracts/sequence-intent.d.ts +103 -0
- package/dist/contracts/sequence-intent.js +2 -0
- package/dist/contracts/sequence-intent.test.d.ts +1 -0
- package/dist/contracts/sovereignty.d.ts +164 -0
- package/dist/contracts/sovereignty.js +2 -0
- package/dist/contracts/support-internal-note.operations.d.ts +309 -0
- package/dist/contracts/support-internal-note.operations.js +2 -0
- package/dist/contracts/support-internal-note.operations.test.d.ts +1 -0
- package/dist/contracts/thread-link-kind.d.ts +20 -0
- package/dist/contracts/thread-link-kind.js +2 -0
- package/dist/contracts/thread-message.operations.d.ts +485 -0
- package/dist/contracts/thread-message.operations.js +2 -0
- package/dist/events/index.d.ts +4 -0
- package/dist/events/index.js +2 -0
- package/dist/fixtures/agent-omnichannel-primitives.d.ts +240 -0
- package/dist/fixtures/agent-omnichannel-primitives.js +2 -0
- package/dist/fixtures/agent-omnichannel.d.ts +682 -0
- package/dist/fixtures/agent-omnichannel.js +2 -0
- package/dist/fixtures/agent-omnichannel.test.d.ts +1 -0
- package/dist/fixtures/gtm-learning-loop-neutral.parts.d.ts +20 -0
- package/dist/fixtures/gtm-learning-loop-neutral.parts.js +2 -0
- package/dist/fixtures/index.d.ts +3 -0
- package/dist/fixtures/index.js +2 -0
- package/dist/fixtures/normalized-ingestion.d.ts +102 -0
- package/dist/fixtures/normalized-ingestion.js +2 -0
- package/dist/fixtures/normalized-ingestion.test.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +2 -0
- package/dist/node/capabilities/comms-ai.capabilities.js +1 -0
- package/dist/node/capabilities/communication-os.capability-ids.js +1 -0
- package/dist/node/capabilities/ecosystem-messaging.capabilities.js +1 -0
- package/dist/node/capabilities/index.js +1 -0
- package/dist/node/commands/comms-ai.commands.js +1 -0
- package/dist/node/commands/index.js +1 -0
- package/dist/node/contracts/agent-communication.js +1 -0
- package/dist/node/contracts/agent-lifecycle-projection.js +1 -0
- package/dist/node/contracts/agent-surface-control.js +1 -0
- package/dist/node/contracts/ai-assistance.operations.js +1 -0
- package/dist/node/contracts/artifact-digest.js +1 -0
- package/dist/node/contracts/canonical-agent-conversation.js +1 -0
- package/dist/node/contracts/channel-preferences.js +1 -0
- package/dist/node/contracts/channel-routing.js +1 -0
- package/dist/node/contracts/collaboration.operations.js +1 -0
- package/dist/node/contracts/customer-live-chat-grant.operations.js +1 -0
- package/dist/node/contracts/delivery-eligibility.js +1 -0
- package/dist/node/contracts/delivery-fallback-eligibility-validation.js +1 -0
- package/dist/node/contracts/delivery-fallback-validation.js +1 -0
- package/dist/node/contracts/delivery-fallback.js +1 -0
- package/dist/node/contracts/delivery-intent-validation.js +1 -0
- package/dist/node/contracts/delivery-intent.js +1 -0
- package/dist/node/contracts/delivery-progress.js +1 -0
- package/dist/node/contracts/discord-community-intelligence.operations.js +1 -0
- package/dist/node/contracts/discord-community.events.js +1 -0
- package/dist/node/contracts/discord-community.models.js +1 -0
- package/dist/node/contracts/discord-community.operations.js +1 -0
- package/dist/node/contracts/ecosystem-attachment.operations.js +1 -0
- package/dist/node/contracts/ecosystem-auth.operations.js +1 -0
- package/dist/node/contracts/ecosystem-binding.operations.js +1 -0
- package/dist/node/contracts/ecosystem-connection-subscription.events.js +1 -0
- package/dist/node/contracts/ecosystem-governed-work-v2.operations.js +1 -0
- package/dist/node/contracts/ecosystem-governed-work.operations.js +1 -0
- package/dist/node/contracts/ecosystem-identity-v3.operations.js +1 -0
- package/dist/node/contracts/ecosystem-identity.operations.js +1 -0
- package/dist/node/contracts/ecosystem-message.operations.js +1 -0
- package/dist/node/contracts/ecosystem-messaging.dtos.js +0 -0
- package/dist/node/contracts/ecosystem-messaging.events.js +1 -0
- package/dist/node/contracts/ecosystem-messaging.models.js +1 -0
- package/dist/node/contracts/ecosystem-navigation-v3.operations.js +1 -0
- package/dist/node/contracts/ecosystem-webhook.operations.js +1 -0
- package/dist/node/contracts/ecosystem-workspace.operations.js +1 -0
- package/dist/node/contracts/enums.js +1 -0
- package/dist/node/contracts/erasure.operations.js +1 -0
- package/dist/node/contracts/events.js +1 -0
- package/dist/node/contracts/index.js +1 -0
- package/dist/node/contracts/ingestion.js +1 -0
- package/dist/node/contracts/ingress-admission-policy.js +1 -0
- package/dist/node/contracts/ingress-admission.js +1 -0
- package/dist/node/contracts/models.js +1 -0
- package/dist/node/contracts/operations.js +1 -0
- package/dist/node/contracts/persistence.js +1 -0
- package/dist/node/contracts/preference-resolution.js +1 -0
- package/dist/node/contracts/query.operations.js +1 -0
- package/dist/node/contracts/sequence-intent.js +1 -0
- package/dist/node/contracts/sovereignty.js +1 -0
- package/dist/node/contracts/support-internal-note.operations.js +1 -0
- package/dist/node/contracts/thread-link-kind.js +1 -0
- package/dist/node/contracts/thread-message.operations.js +1 -0
- package/dist/node/events/index.js +1 -0
- package/dist/node/fixtures/agent-omnichannel-primitives.js +1 -0
- package/dist/node/fixtures/agent-omnichannel.js +1 -0
- package/dist/node/fixtures/gtm-learning-loop-neutral.parts.js +1 -0
- package/dist/node/fixtures/index.js +1 -0
- package/dist/node/fixtures/normalized-ingestion.js +1 -0
- package/dist/node/index.js +1 -0
- package/dist/node/queries/index.js +1 -0
- package/dist/node/types/domain-command.js +0 -0
- package/dist/node/types/index.js +1 -0
- package/dist/node/validation/domain-command.js +1 -0
- package/dist/node/validation/index.js +1 -0
- package/dist/package-exports.test.d.ts +1 -0
- package/dist/queries/index.d.ts +4 -0
- package/dist/queries/index.js +2 -0
- package/dist/types/domain-command.d.ts +54 -0
- package/dist/types/domain-command.js +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +2 -0
- package/dist/validation/domain-command.d.ts +3 -0
- package/dist/validation/domain-command.js +2 -0
- package/dist/validation/index.d.ts +53 -0
- package/dist/validation/index.js +2 -0
- package/package.json +1227 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineCommand as O}from"@lssm/lib.contracts-spec";import{defineSchemaModel as u,ScalarTypeEnum as a}from"@lssm/lib.schema";import{defineEnum as r}from"@lssm/lib.schema";var l=r("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),f=r("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),k=r("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),A=r("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),q=r("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),j=r("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),H=r("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),v=r("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),F=r("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as i,ScalarTypeEnum as e}from"@lssm/lib.schema";var z=i({name:"ChannelAccount",description:"A channel account belonging to a participant",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:l,isOptional:!1},externalId:{type:e.String_unsecure(),isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},isPrimary:{type:e.Boolean(),isOptional:!1,defaultValue:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),w=i({name:"IdentityLink",description:"Proposed or confirmed relationship between participant identities",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},candidateParticipantId:{type:e.String_unsecure(),isOptional:!1},status:{type:j,isOptional:!1,defaultValue:"generated"},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),re=i({name:"CommunicationParticipant",description:"A person or system that participates in conversations",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},email:{type:e.EmailAddress(),isOptional:!0},accounts:{type:z,isArray:!0,isOptional:!1},identityLinks:{type:w,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),K=i({name:"Attachment",description:"A file or media attachment on a message",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!0},sizeBytes:{type:e.Int_unsecure(),isOptional:!0},url:{type:e.URL(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0}}}),m=i({name:"ThreadLink",description:"Link between a thread and an external business object (V2: rich-reference objectRef replaces V1 objectType/objectId)",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},objectRef:{type:e.JSONObject(),isOptional:!1},relation:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),P=i({name:"MessageIntent",description:"Classified message or thread intent with confidence and evidence",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},category:{type:H,isOptional:!1},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},evidenceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),g=i({name:"CommunicationMessage",description:"A single message within a communication thread",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:l,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},bodyNormalized:{type:e.String_unsecure(),isOptional:!0},status:{type:k,isOptional:!1,defaultValue:"received"},intent:{type:P,isOptional:!0},attachments:{type:K,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),ue=i({name:"CommunicationFormIntake",description:"Declarative source reference for a communication message mapped into an entity-bound form intake result",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:l,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},entityKey:{type:e.String_unsecure(),isOptional:!1},projectionKind:{type:e.String_unsecure(),isOptional:!1},formKey:{type:e.String_unsecure(),isOptional:!0},formVersion:{type:e.String_unsecure(),isOptional:!0},completionProfileKey:{type:e.String_unsecure(),isOptional:!0},acceptedValues:{type:e.JSONObject(),isOptional:!1},completionDebt:{type:e.JSONObject(),isArray:!0,isOptional:!1},captureStatus:{type:e.String_unsecure(),isOptional:!1,defaultValue:"accepted"},completionStatus:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),c=i({name:"CommunicationThread",description:"A conversation thread spanning one or more channels",fields:{id:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!0},status:{type:f,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:l,isArray:!0,isOptional:!1},links:{type:m,isArray:!0,isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0},priority:{type:e.String_unsecure(),isOptional:!0},tags:{type:e.String_unsecure(),isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),C=i({name:"CommunicationAction",description:"Structured action extracted from a conversation",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},owner:{type:e.String_unsecure(),isOptional:!0},deadline:{type:e.DateTime(),isOptional:!0},blockers:{type:e.String_unsecure(),isArray:!0,isOptional:!0},sourceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},safetyMode:{type:v,isOptional:!1,defaultValue:"draft_only"}}}),N=i({name:"ReplyDraft",description:"An AI-generated or human-authored reply draft",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},status:{type:A,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:e.String_unsecure(),isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},promptVersion:{type:e.String_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},reviewedAt:{type:e.DateTime(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),G=i({name:"HandoffPacket",description:"A structured handoff between owners, teams, or systems",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},status:{type:q,isOptional:!1,defaultValue:"created"},fromOwner:{type:e.String_unsecure(),isOptional:!1},toOwner:{type:e.String_unsecure(),isOptional:!1},summary:{type:e.String_unsecure(),isOptional:!1},keyFacts:{type:e.String_unsecure(),isArray:!0,isOptional:!0},openQuestions:{type:e.String_unsecure(),isArray:!0,isOptional:!0},requiredActions:{type:C,isArray:!0,isOptional:!0},evidenceLinks:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),J=i({name:"CommunicationSummary",description:"AI-generated summary of a thread or message range",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},content:{type:e.String_unsecure(),isOptional:!1},facts:{type:e.JSONObject(),isArray:!0,isOptional:!0},actions:{type:C,isArray:!0,isOptional:!0},decisions:{type:e.JSONObject(),isArray:!0,isOptional:!0},risks:{type:e.JSONObject(),isArray:!0,isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},generatedAt:{type:e.DateTime(),isOptional:!1}}}),U=i({name:"AgentSuggestion",description:"An AI-generated suggestion attached to a thread or message",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},suggestionType:{type:e.String_unsecure(),isOptional:!1},content:{type:e.String_unsecure(),isOptional:!1},status:{type:j,isOptional:!1,defaultValue:"generated"},modelName:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}});var S=["platform.communication-os"],ye=O({meta:{key:"communication.decision.extract",version:"1.0.0",stability:"experimental",owners:[...S],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:u({name:"ExtractDecisionsInput",fields:{threadId:{type:a.String_unsecure(),isOptional:!1}}}),output:u({name:"ExtractDecisionsOutput",fields:{decisions:{type:a.JSONObject(),isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),fe=O({meta:{key:"communication.risk.extract",version:"1.0.0",stability:"experimental",owners:[...S],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:u({name:"ExtractRisksInput",fields:{threadId:{type:a.String_unsecure(),isOptional:!1}}}),output:u({name:"ExtractRisksOutput",fields:{risks:{type:a.JSONObject(),isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),ge=O({meta:{key:"communication.reply.draft",version:"1.0.0",stability:"experimental",owners:[...S],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:u({name:"DraftReplyInput",fields:{threadId:{type:a.String_unsecure(),isOptional:!1},messageId:{type:a.String_unsecure(),isOptional:!0},instruction:{type:a.String_unsecure(),isOptional:!0}}}),output:N},policy:{auth:"user"}}),Oe=O({meta:{key:"communication.reply.send",version:"1.0.0",stability:"experimental",owners:[...S],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:u({name:"SendReplyInput",fields:{draftId:{type:a.String_unsecure(),isOptional:!1}}}),output:u({name:"SendReplyOutput",fields:{draftId:{type:a.String_unsecure(),isOptional:!1},status:{type:A,isOptional:!1},sentAt:{type:a.DateTime(),isOptional:!0}}})},policy:{auth:"user"}}),Se=O({meta:{key:"communication.reply.blockByPolicy",version:"1.0.0",stability:"experimental",owners:[...S],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:u({name:"BlockReplyByPolicyInput",fields:{draftId:{type:a.String_unsecure(),isOptional:!1},policyRef:{type:a.String_unsecure(),isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!1}}}),output:N},policy:{auth:"admin"}});import{defineCommand as h}from"@lssm/lib.contracts-spec";import{defineSchemaModel as T,ScalarTypeEnum as s}from"@lssm/lib.schema";var _=["platform.communication-os"],ke=h({meta:{key:"communication.handoff.create",version:"1.0.0",stability:"experimental",owners:[..._],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:T({name:"CreateHandoffInput",fields:{threadId:{type:s.String_unsecure(),isOptional:!1},fromOwner:{type:s.String_unsecure(),isOptional:!1},toOwner:{type:s.String_unsecure(),isOptional:!1},reason:{type:s.String_unsecure(),isOptional:!0}}}),output:G},policy:{auth:"user"}}),Ae=h({meta:{key:"communication.threadLink.propose",version:"1.0.0",stability:"experimental",owners:[..._],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:m,output:m},policy:{auth:"user"}}),ve=h({meta:{key:"communication.identityLink.propose",version:"1.0.0",stability:"experimental",owners:[..._],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:w,output:w},policy:{auth:"user"}}),we=h({meta:{key:"communication.escalation.request",version:"1.0.0",stability:"experimental",owners:[..._],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:T({name:"EscalateToHumanInput",fields:{threadId:{type:s.String_unsecure(),isOptional:!1},reason:{type:s.String_unsecure(),isOptional:!1},targetOwner:{type:s.String_unsecure(),isOptional:!0}}}),output:U},policy:{auth:"user"}}),Ce=h({meta:{key:"communication.feedback.record",version:"1.0.0",stability:"experimental",owners:[..._],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:T({name:"RecordHumanFeedbackInput",fields:{targetId:{type:s.String_unsecure(),isOptional:!1},targetType:{type:s.String_unsecure(),isOptional:!1},outcome:{type:F,isOptional:!1},notes:{type:s.String_unsecure(),isOptional:!0}}}),output:T({name:"RecordHumanFeedbackOutput",fields:{feedbackId:{type:s.String_unsecure(),isOptional:!1},safetyMode:{type:v,isOptional:!1}}})},policy:{auth:"user"}});import{defineCommand as ee,defineQuery as te}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as R,ScalarTypeEnum as n}from"@lssm/lib.schema";import{defineEnum as y,defineSchemaModel as L,ScalarTypeEnum as t}from"@lssm/lib.schema";var Y=y("ResidencyRegion",["eu","eu_fr","eu_de","us","uk","apac","self_managed"]),Z=y("HostingMode",["saas","self_host","on_prem"]),E=y("DataClass",["message_body","participant_identity","channel_account","attachment","ai_derived","audit_evidence"]),M=y("ConsentBasis",["consent","contract","legal_obligation","legitimate_interest"]),V=y("ConsentStatus",["granted","withdrawn","expired","not_recorded"]),X=L({name:"RetentionWindow",description:"Documented retention window for a single governed data class.",fields:{dataClass:{type:E,isOptional:!1},retentionDays:{type:t.Int_unsecure(),isOptional:!1},basis:{type:M,isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0}}}),Me=L({name:"SovereigntyProfile",description:"Residency, retention, sovereign LLM provider and hosting posture for a tenant.",fields:{id:{type:t.String_unsecure(),isOptional:!1},tenantId:{type:t.String_unsecure(),isOptional:!1},residencyRegion:{type:Y,isOptional:!1,defaultValue:"eu"},hostingMode:{type:Z,isOptional:!1,defaultValue:"saas"},llmProviderId:{type:t.String_unsecure(),isOptional:!1},retentionWindows:{type:X,isArray:!0,isOptional:!1},dataResidencyEnforced:{type:t.Boolean(),isOptional:!1,defaultValue:!0},createdAt:{type:t.DateTime(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),Re=L({name:"SubjectConsent",description:"Recorded RGPD consent decision for a single data subject.",fields:{id:{type:t.String_unsecure(),isOptional:!1},tenantId:{type:t.String_unsecure(),isOptional:!1},subjectId:{type:t.String_unsecure(),isOptional:!1},basis:{type:M,isOptional:!1},status:{type:V,isOptional:!1,defaultValue:"not_recorded"},grantedAt:{type:t.DateTime(),isOptional:!0},withdrawnAt:{type:t.DateTime(),isOptional:!0},expiresAt:{type:t.DateTime(),isOptional:!0},evidenceRef:{type:t.String_unsecure(),isOptional:!0}}}),W=y("ErasureOutcome",["erased_local","erased_local_and_channel","erased_local_provider_retained_documented"]);var Q=["platform.communication-os"],Le=ee({meta:{key:"communication.subject.erase",version:"1.0.0",stability:"experimental",owners:[...Q],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:R({name:"EraseSubjectInput",description:"Right-to-erasure request for a single data subject.",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},subjectId:{type:n.String_unsecure(),isOptional:!1},requestedBy:{type:n.String_unsecure(),isOptional:!1},reason:{type:n.String_unsecure(),isOptional:!0},dataClasses:{type:E,isArray:!0,isOptional:!0}}}),output:R({name:"EraseSubjectOutput",description:"Three-state erasure outcome with optional documented provider retention.",fields:{subjectId:{type:n.String_unsecure(),isOptional:!1},outcome:{type:W,isOptional:!1},localDeleted:{type:n.Boolean(),isOptional:!1},channelErased:{type:n.Boolean(),isOptional:!1},providerRetainedDataClass:{type:E,isOptional:!0},providerRetentionDays:{type:n.Int_unsecure(),isOptional:!0},retentionWindowRef:{type:n.String_unsecure(),isOptional:!0},auditEventRef:{type:n.String_unsecure(),isOptional:!1},erasedAt:{type:n.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"}}),Ve=te({meta:{key:"communication.subject.consent.check",version:"1.0.0",stability:"experimental",owners:[...Q],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:R({name:"CheckSubjectConsentInput",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},subjectId:{type:n.String_unsecure(),isOptional:!1}}}),output:R({name:"CheckSubjectConsentOutput",fields:{subjectId:{type:n.String_unsecure(),isOptional:!1},status:{type:V,isOptional:!1},basis:{type:M,isOptional:!0},mayProcess:{type:n.Boolean(),isOptional:!1}}})},policy:{auth:"admin"}});import{defineCommand as ne,defineQuery as B}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as d,ScalarTypeEnum as o}from"@lssm/lib.schema";var D=["platform.communication-os"],Je=ne({meta:{key:"communication.thread.updateStatus",version:"1.0.0",stability:"experimental",owners:[...D],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:d({name:"UpdateThreadStatusInput",fields:{threadId:{type:o.String_unsecure(),isOptional:!1},status:{type:f,isOptional:!1},reason:{type:o.String_unsecure(),isOptional:!0}}}),output:c},policy:{auth:"user"}}),Ue=B({meta:{key:"communication.thread.get",version:"1.0.0",stability:"experimental",owners:[...D],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:d({name:"GetThreadInput",fields:{threadId:{type:o.String_unsecure(),isOptional:!1}}}),output:d({name:"GetThreadOutput",fields:{thread:{type:c,isOptional:!1},messages:{type:g,isArray:!0,isOptional:!1},links:{type:m,isArray:!0,isOptional:!0}}})},policy:{auth:"user"}}),We=B({meta:{key:"communication.thread.search",version:"1.0.0",stability:"experimental",owners:[...D],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:d({name:"SearchThreadsInput",fields:{status:{type:f,isOptional:!0},participantId:{type:o.String_unsecure(),isOptional:!0},channelType:{type:l,isOptional:!0},linkedKindId:{type:o.String_unsecure(),isOptional:!0},linkedInstanceId:{type:o.String_unsecure(),isOptional:!0},assignedTo:{type:o.String_unsecure(),isOptional:!0},limit:{type:o.Int_unsecure(),isOptional:!0,defaultValue:20}}}),output:d({name:"SearchThreadsOutput",fields:{threads:{type:c,isArray:!0,isOptional:!1},total:{type:o.Int_unsecure(),isOptional:!1},hasMore:{type:o.Boolean(),isOptional:!1}}})},policy:{auth:"user"}}),Qe=B({meta:{key:"communication.message.list",version:"1.0.0",stability:"experimental",owners:[...D],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:d({name:"ListMessagesInput",fields:{threadId:{type:o.String_unsecure(),isOptional:!1}}}),output:d({name:"ListMessagesOutput",fields:{messages:{type:g,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});import{defineCommand as x}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as b,ScalarTypeEnum as p}from"@lssm/lib.schema";var I=["platform.communication-os"],$e=x({meta:{key:"communication.thread.create",version:"1.0.0",stability:"experimental",owners:[...I],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:c,output:c},policy:{auth:"admin"}}),et=x({meta:{key:"communication.message.ingest",version:"1.0.0",stability:"experimental",owners:[...I],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:g,output:b({name:"IngestMessageOutput",fields:{messageId:{type:p.String_unsecure(),isOptional:!1},threadId:{type:p.String_unsecure(),isOptional:!1},status:{type:k,isOptional:!1}}})},policy:{auth:"admin"}}),tt=x({meta:{key:"communication.intent.classify",version:"1.0.0",stability:"experimental",owners:[...I],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:b({name:"ClassifyIntentInput",fields:{threadId:{type:p.String_unsecure(),isOptional:!1},messageId:{type:p.String_unsecure(),isOptional:!0}}}),output:P},policy:{auth:"admin"}}),nt=x({meta:{key:"communication.summary.generate",version:"1.0.0",stability:"experimental",owners:[...I],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:b({name:"GenerateSummaryInput",fields:{threadId:{type:p.String_unsecure(),isOptional:!1},messageIds:{type:p.String_unsecure(),isArray:!0,isOptional:!0}}}),output:J},policy:{auth:"user"}}),it=x({meta:{key:"communication.action.extract",version:"1.0.0",stability:"experimental",owners:[...I],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:b({name:"ExtractActionsInput",fields:{threadId:{type:p.String_unsecure(),isOptional:!1},messageIds:{type:p.String_unsecure(),isArray:!0,isOptional:!0}}}),output:b({name:"ExtractActionsOutput",fields:{actions:{type:C,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});export{Se as BlockReplyByPolicyCommand,Ve as CheckSubjectConsentQuery,tt as ClassifyIntentCommand,ke as CreateHandoffCommand,$e as CreateThreadCommand,ge as DraftReplyCommand,Le as EraseSubjectCommand,we as EscalateToHumanCommand,it as ExtractActionsCommand,ye as ExtractDecisionsCommand,fe as ExtractRisksCommand,nt as GenerateSummaryCommand,Ue as GetThreadQuery,et as IngestMessageCommand,Qe as ListMessagesQuery,ve as ProposeIdentityLinkCommand,Ae as ProposeThreadLinkCommand,Ce as RecordHumanFeedbackCommand,We as SearchThreadsQuery,Oe as SendReplyCommand,Je as UpdateThreadStatusCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEntity as i,field as e,index as t}from"@lssm/lib.schema";var o=i({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:e.id({description:"Thread identifier emitted by the domain command."}),status:e.string({description:"Thread lifecycle status."}),participantIds:e.json({description:"Participant identifiers preserved as portable JSON."}),channelTypes:e.json({description:"Channel types represented without provider-specific adapters."}),links:e.json({isOptional:!0,description:"Business-object links proposed by communication commands."}),assignedTo:e.string({isOptional:!0}),metadata:e.json({isOptional:!0}),domainCommandRef:e.string({description:"Owning CommunicationOS command that authorized this write."}),idempotencyKey:e.string({description:"Command idempotency key."}),auditEventRefs:e.json({description:"Audit evidence refs for replay."}),createdAt:e.createdAt(),updatedAt:e.updatedAt()},indexes:[t.unique(["id"]),t.on(["status"]),t.on(["assignedTo"]),t.unique(["idempotencyKey"])]}),a=i({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:e.id({description:"Message identifier emitted by ingest."}),threadId:e.string({description:"Owning thread identifier."}),channelType:e.string({description:"Backend-neutral channel type."}),channelAccountId:e.string({description:"Channel account ref; no provider credential material."}),participantId:e.string({isOptional:!0}),externalMessageId:e.string({isOptional:!0}),body:e.string({description:"Original normalized-safe message body."}),bodyNormalized:e.string({description:"Runtime normalized body."}),status:e.string({description:"Message lifecycle status."}),metadata:e.json({isOptional:!0}),domainCommandRef:e.string({description:"Owning CommunicationOS command that authorized this write."}),idempotencyKey:e.string({description:"Adapter dedupe/idempotency key."}),auditEventRefs:e.json({description:"Audit evidence refs for replay."}),createdAt:e.createdAt(),updatedAt:e.updatedAt()},indexes:[t.unique(["id"]),t.on(["threadId"]),t.on(["channelType"]),t.unique(["idempotencyKey"])]}),r=i({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:e.id({description:"Outbox record identifier."}),tenantId:e.string({isOptional:!0,map:"tenant_id"}),workspaceId:e.string({isOptional:!0}),spaceId:e.string({isOptional:!0}),domainCommandRef:e.string({description:"CommunicationOS command that remains the write authority."}),mutationPlanRef:e.string({description:"Portable mutation plan ref."}),policyDecisionRef:e.string({description:"Policy gate evidence."}),idempotencyKey:e.string({description:"Execution idempotency key."}),replayRef:e.string({description:"Replay checkpoint reference."}),correlationRef:e.string({description:"Cross-system correlation ref."}),deploymentMode:e.string({description:"Managed or BYOK execution mode; local is not an ownership mode."}),status:e.string({description:"Outbox lifecycle status."}),attempt:e.int({isOptional:!0}),leaseVersion:e.int({isOptional:!0}),leaseOwner:e.string({isOptional:!0}),leaseExpiresAt:e.dateTime({isOptional:!0}),nextAttemptAt:e.dateTime({isOptional:!0}),providerDeliveryId:e.string({isOptional:!0}),lastErrorCode:e.string({isOptional:!0}),reconciliationWorkOrderDigest:e.string({isOptional:!0}),reconciliationEvidenceRefs:e.json({isOptional:!0,description:"Evidence refs that bind an indeterminate provider outcome to durable reconciliation custody."}),reconciliationObservationRef:e.string({isOptional:!0}),reconciliationObservationDigest:e.string({isOptional:!0}),reconciliationObservedAt:e.dateTime({isOptional:!0}),payload:e.json({description:"Portable mutation descriptor payload."}),createdAt:e.createdAt(),updatedAt:e.updatedAt()},indexes:[t.unique(["id"]),t.on(["domainCommandRef"]),t.unique(["idempotencyKey"]),t.on(["status"]),t.on(["tenantId","workspaceId","spaceId","status"])]}),s=i({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:e.id({description:"Stable tenant/workspace/space scope key."}),tenantId:e.string({map:"tenant_id"}),workspaceId:e.string(),spaceId:e.string(),sequence:e.bigInt(),updatedAt:e.updatedAt()},indexes:[t.unique(["id"]),t.unique(["tenantId","workspaceId","spaceId"])]}),c=i({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:e.id({description:"Globally unique journal event identifier."}),tenantId:e.string({map:"tenant_id"}),workspaceId:e.string(),spaceId:e.string(),sequence:e.bigInt(),kind:e.string(),entityId:e.string(),roomId:e.string({isOptional:!0}),actorPrincipalId:e.string(),idempotencyKey:e.string(),payload:e.json(),occurredAt:e.dateTime(),createdAt:e.createdAt()},indexes:[t.unique(["id"]),t.unique(["tenantId","workspaceId","spaceId","sequence"]),t.unique(["tenantId","workspaceId","spaceId","idempotencyKey"]),t.on(["tenantId","workspaceId","spaceId","roomId"])]}),d=i({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:e.id({description:"Opaque attachment identifier."}),tenantId:e.string({map:"tenant_id"}),workspaceId:e.string(),spaceId:e.string(),roomId:e.string(),messageId:e.string({isOptional:!0}),name:e.string(),mimeType:e.string(),sizeBytes:e.int(),sha256:e.string(),content:e.bytes(),createdBy:e.string(),idempotencyKey:e.string(),createdAt:e.createdAt()},indexes:[t.unique(["id"]),t.unique(["tenantId","workspaceId","spaceId","idempotencyKey"]),t.on(["tenantId","workspaceId","spaceId","roomId"]),t.on(["messageId"])]}),m=i({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:e.id({description:"Opaque note reference."}),tenantId:e.string({map:"tenant_id"}),workspaceId:e.string(),caseRef:e.string(),evidenceRef:e.string(),actorRef:e.string(),visibility:e.string(),bodyEnvelope:e.json({description:"Versioned authenticated ciphertext; never a public projection."}),bodyFingerprint:e.string({description:"Keyed digest used only for idempotency conflict detection."}),idempotencyKey:e.string(),requestDigest:e.string(),createdAt:e.createdAt()},indexes:[t.unique(["id"]),t.unique(["tenantId","workspaceId","evidenceRef"]),t.unique(["tenantId","workspaceId","idempotencyKey"]),t.on(["tenantId","workspaceId","caseRef","createdAt"])]}),u=i({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:e.id({description:"SHA-256 fingerprint of opaque OAuth state."}),network:e.string(),expiresAt:e.dateTime(),consumedAt:e.dateTime({isOptional:!0}),createdAt:e.createdAt()},indexes:[t.unique(["id"]),t.on(["network","expiresAt"]),t.on(["consumedAt"])]}),p=i({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:e.id({description:"SHA-256 fingerprint of the opaque credential reference."}),envelope:e.string({description:"Base64url AES-GCM IV plus authenticated ciphertext."}),contentType:e.string({isOptional:!0}),labels:e.json({isOptional:!0}),version:e.int(),createdAt:e.createdAt(),updatedAt:e.updatedAt()},indexes:[t.unique(["id"]),t.on(["updatedAt"])]}),l=[o,a,r,s,c,d,m,u,p],g={moduleId:"@lssm/lib.communication-spec",entities:[...l]},f={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 h(n){if(n.auditEventRefs.length===0)throw Error("CommunicationOS persistence requires auditEventRefs.");if(n.deploymentMode!=="managed"&&n.deploymentMode!=="byok")throw Error("CommunicationOS persistence requires managed or BYOK mode.");return{operationRef:{key:"database.mutation.execute",version:"2.0.0"},mutationPlanRef:n.mutationPlanRef,resource:n.plan.resource,operation:n.plan.operation,values:{...n.values,domainCommandRef:n.plan.domainCommandRef,idempotencyKey:n.idempotencyKey},where:n.where,actorRef:n.actorRef,tenantRef:n.tenantRef,domainCommandRef:n.plan.domainCommandRef,policyDecisionRef:n.policyDecisionRef,idempotencyKey:n.idempotencyKey,transactionBoundary:"transaction",expectedWriteSet:n.plan.expectedWriteSet,auditEventRefs:n.auditEventRefs,replayRef:n.replayRef,correlationRef:n.correlationRef,deploymentMode:n.deploymentMode}}export{d as CommunicationAttachmentPersistenceEntity,p as CommunicationCredentialSecretEntity,r as CommunicationDomainCommandOutboxEntity,s as CommunicationJournalCursorEntity,c as CommunicationJournalEventEntity,a as CommunicationMessagePersistenceEntity,u as CommunicationOAuthStateEntity,m as CommunicationSupportInternalNoteEntity,o as CommunicationThreadPersistenceEntity,l as communicationOsPersistenceEntities,f as communicationOsPersistencePlans,g as communicationOsSchemaContribution,h as createCommunicationOsMutationDescriptor};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as c}from"zod";import{z as r}from"zod";var C="1.0.0",P="1.0.0",I={id:"communication-os.agent-omnichannel.v1",title:"CommunicationOS agent omnichannel contracts",body:"Provider-neutral agent profiles and lifecycle links bind applications, runs, tasks, help requests, background results, routes, preferences, policies, and evidence through opaque references. They grant no provider access or effect authority.",kind:"reference",route:"/docs/communication-os/agent-omnichannel-v1",visibility:"public"},o=r.string().trim().min(1),h=r.string().datetime({offset:!0}),m=r.string().regex(/^sha256:[a-f0-9]{64}$/),S=r.object({ref:o,digest:m}).strict(),l=S.extend({revision:r.number().int().positive()}).strict(),d=r.object({tenantRef:o,workspaceRef:o.optional(),spaceRef:o.optional(),subjectRef:o}).strict(),k=r.object({schemaVersion:r.literal(C),profileRef:o,revision:r.number().int().positive(),agentRef:o,applicationRef:o,scope:d,routeBindings:r.array(l),connectionRefs:r.array(o),preferenceSet:l,policyRefs:r.array(o).min(1),evidenceRefs:r.array(o).min(1),createdAt:h,updatedAt:h,profileDigest:m}).strict().superRefine((e,t)=>{for(let i of["connectionRefs","policyRefs","evidenceRefs"])if(new Set(e[i]).size!==e[i].length)t.addIssue({code:r.ZodIssueCode.custom,path:[i],message:`${i} must be unique`});let n=e.routeBindings.map((i)=>i.ref);if(new Set(n).size!==n.length)t.addIssue({code:r.ZodIssueCode.custom,path:["routeBindings"],message:"route bindings must be unique"})}),T=r.object({schemaVersion:r.literal(P),linkRef:o,profile:l,agentRef:o,applicationRef:o,scope:d,runRef:o.optional(),taskRef:o.optional(),helpRequestRef:o.optional(),approvalRequestRef:o.optional(),backgroundResultRef:o.optional(),canonicalConversation:S.optional(),session:l.optional(),correlationRef:o,evidenceRefs:r.array(o).min(1)}).strict().superRefine((e,t)=>{if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)t.addIssue({code:r.ZodIssueCode.custom,path:["evidenceRefs"],message:"evidenceRefs must be unique"});if(!e.runRef&&!e.taskRef&&!e.helpRequestRef&&!e.approvalRequestRef&&!e.backgroundResultRef)t.addIssue({code:r.ZodIssueCode.custom,path:["runRef"],message:"at least one run, task, help request, approval request, or background result ref is required"})});function g(e,t){return e.tenantRef===t.tenantRef&&e.workspaceRef===t.workspaceRef&&e.spaceRef===t.spaceRef&&e.subjectRef===t.subjectRef}function w(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(!g(e.profile.scope,e.lifecycleLink.scope))t.push("Lifecycle scope does not match the agent profile");return t}function x(e){let{intent:t,progress:n}=e,i=[];if(n.deliveryRef!==t.deliveryRef||n.intent.ref!==t.deliveryRef||n.intent.digest!==t.deliveryDigest)i.push("Progress delivery does not match the intent");if(!g(n.scope,t.scope))i.push("Progress scope does not match the intent");if(n.recipientRef!==t.recipientRefs[0])i.push("Progress recipient does not match the intent");let s=t.requestedRoutes.find((f)=>f.ref===n.route.ref);if(!s||s.revision!==n.route.revision||s.digest!==n.route.digest)i.push("Progress route was not requested by the intent");if(Date.parse(n.occurredAt)<Date.parse(t.createdAt)||Date.parse(n.occurredAt)>Date.parse(t.expiresAt))i.push("Progress occurred outside the intent validity window");return i}var V="1.0.0",b="communication:preference-target:platform-default",N=[["event","automation"],["feature","application"],["product"],["space","person"],["platform_default"]],O=c.enum(["event","automation","feature","application","product","space","person","platform_default"]),p=c.string().trim().min(1);function a(e){return c.object({kind:c.literal(e),ref:p}).strict()}var y=c.discriminatedUnion("kind",[a("event"),a("automation"),a("feature"),a("application"),a("product"),a("space"),a("person"),c.object({kind:c.literal("platform_default"),ref:c.literal(b)}).strict()]),A=c.object({preferenceSetRef:p,revision:c.number().int().positive(),digest:m,target:y}).strict(),D=c.object({schemaVersion:c.literal(V),resolutionRef:p,scope:d,subjectRef:p,evaluatedPreferenceSets:c.array(A).min(1),winningPreferenceSetRef:p,winningTarget:y,authority:c.literal("preference_only"),effectAuthority:c.literal("none"),resolvedAt:c.string().datetime({offset:!0}),evidenceRefs:c.array(p).min(1),resolutionDigest:m}).strict().superRefine((e,t)=>{let n=e.evaluatedPreferenceSets.map((s)=>s.preferenceSetRef);if(new Set(n).size!==n.length)u(t,"evaluatedPreferenceSets","evaluated sets must be unique");if(new Set(e.evidenceRefs).size!==e.evidenceRefs.length)u(t,"evidenceRefs","evidenceRefs must be unique");for(let s=1;s<e.evaluatedPreferenceSets.length;s+=1){let f=e.evaluatedPreferenceSets[s-1],R=e.evaluatedPreferenceSets[s];if(f&&R&&v(f.target.kind)>v(R.target.kind)){u(t,"evaluatedPreferenceSets","evaluated sets must follow the preference resolution hierarchy");break}}let i=e.evaluatedPreferenceSets.find((s)=>s.preferenceSetRef===e.winningPreferenceSetRef);if(!i)u(t,"winningPreferenceSetRef","winning preference set must have been evaluated");else if(i.preferenceSetRef!==e.evaluatedPreferenceSets[0]?.preferenceSetRef)u(t,"winningPreferenceSetRef","winning preference set must be the most specific evaluated set");else if(i.target.kind!==e.winningTarget.kind||i.target.ref!==e.winningTarget.ref)u(t,"winningTarget","winning target must match the winning preference set")});function v(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 u(e,t,n){e.addIssue({code:c.ZodIssueCode.custom,path:[t],message:n})}function q(e){let{preferenceResolution:t,preferenceSet:n}=e,i=[];if(t.subjectRef!==n.scope.subjectRef||t.winningPreferenceSetRef!==n.preferenceSetRef)i.push("Preference resolution does not match its subject and set");if(!g(t.scope,n.scope))i.push("Preference resolution scope does not match its preference set");let s=t.evaluatedPreferenceSets.find((f)=>f.preferenceSetRef===n.preferenceSetRef);if(!s||s.revision!==n.revision||s.digest!==n.preferenceSetDigest)i.push("Preference resolution binding is stale");if(t.winningTarget.kind!==n.target.kind||t.winningTarget.ref!==n.target.ref)i.push("Preference resolution target does not match its preference set");return i}export{b as COMMUNICATION_PLATFORM_DEFAULT_PREFERENCE_TARGET_REF,V as COMMUNICATION_PREFERENCE_RESOLUTION_SCHEMA_VERSION,N as COMMUNICATION_PREFERENCE_RESOLUTION_TIERS,A as CommunicationEvaluatedPreferenceSetV1Schema,D as CommunicationPreferenceResolutionResultV1Schema,O as CommunicationPreferenceResolutionTargetKindSchema,y as CommunicationPreferenceResolutionTargetV1Schema,q as validateCommunicationPreferenceResolutionBindingV1};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineCommand as T,defineQuery as d}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as s,ScalarTypeEnum as i}from"@lssm/lib.schema";import{defineEnum as n}from"@lssm/lib.schema";var a=n("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),r=n("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),y=n("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),m=n("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),f=n("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),u=n("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),O=n("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),g=n("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),b=n("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var _=t({name:"ChannelAccount",description:"A channel account belonging to a participant",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},externalId:{type:e.String_unsecure(),isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},isPrimary:{type:e.Boolean(),isOptional:!1,defaultValue:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),h=t({name:"IdentityLink",description:"Proposed or confirmed relationship between participant identities",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},candidateParticipantId:{type:e.String_unsecure(),isOptional:!1},status:{type:u,isOptional:!1,defaultValue:"generated"},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),w=t({name:"CommunicationParticipant",description:"A person or system that participates in conversations",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},email:{type:e.EmailAddress(),isOptional:!0},accounts:{type:_,isArray:!0,isOptional:!1},identityLinks:{type:h,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),A=t({name:"Attachment",description:"A file or media attachment on a message",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!0},sizeBytes:{type:e.Int_unsecure(),isOptional:!0},url:{type:e.URL(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0}}}),l=t({name:"ThreadLink",description:"Link between a thread and an external business object (V2: rich-reference objectRef replaces V1 objectType/objectId)",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},objectRef:{type:e.JSONObject(),isOptional:!1},relation:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),I=t({name:"MessageIntent",description:"Classified message or thread intent with confidence and evidence",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},category:{type:O,isOptional:!1},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},evidenceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),c=t({name:"CommunicationMessage",description:"A single message within a communication thread",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},bodyNormalized:{type:e.String_unsecure(),isOptional:!0},status:{type:y,isOptional:!1,defaultValue:"received"},intent:{type:I,isOptional:!0},attachments:{type:A,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),C=t({name:"CommunicationFormIntake",description:"Declarative source reference for a communication message mapped into an entity-bound form intake result",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},entityKey:{type:e.String_unsecure(),isOptional:!1},projectionKind:{type:e.String_unsecure(),isOptional:!1},formKey:{type:e.String_unsecure(),isOptional:!0},formVersion:{type:e.String_unsecure(),isOptional:!0},completionProfileKey:{type:e.String_unsecure(),isOptional:!0},acceptedValues:{type:e.JSONObject(),isOptional:!1},completionDebt:{type:e.JSONObject(),isArray:!0,isOptional:!1},captureStatus:{type:e.String_unsecure(),isOptional:!1,defaultValue:"accepted"},completionStatus:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),o=t({name:"CommunicationThread",description:"A conversation thread spanning one or more channels",fields:{id:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!0},status:{type:r,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:a,isArray:!0,isOptional:!1},links:{type:l,isArray:!0,isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0},priority:{type:e.String_unsecure(),isOptional:!0},tags:{type:e.String_unsecure(),isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),S=t({name:"CommunicationAction",description:"Structured action extracted from a conversation",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},owner:{type:e.String_unsecure(),isOptional:!0},deadline:{type:e.DateTime(),isOptional:!0},blockers:{type:e.String_unsecure(),isArray:!0,isOptional:!0},sourceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},safetyMode:{type:g,isOptional:!1,defaultValue:"draft_only"}}}),D=t({name:"ReplyDraft",description:"An AI-generated or human-authored reply draft",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},status:{type:m,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:e.String_unsecure(),isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},promptVersion:{type:e.String_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},reviewedAt:{type:e.DateTime(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),E=t({name:"HandoffPacket",description:"A structured handoff between owners, teams, or systems",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},status:{type:f,isOptional:!1,defaultValue:"created"},fromOwner:{type:e.String_unsecure(),isOptional:!1},toOwner:{type:e.String_unsecure(),isOptional:!1},summary:{type:e.String_unsecure(),isOptional:!1},keyFacts:{type:e.String_unsecure(),isArray:!0,isOptional:!0},openQuestions:{type:e.String_unsecure(),isArray:!0,isOptional:!0},requiredActions:{type:S,isArray:!0,isOptional:!0},evidenceLinks:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),j=t({name:"CommunicationSummary",description:"AI-generated summary of a thread or message range",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},content:{type:e.String_unsecure(),isOptional:!1},facts:{type:e.JSONObject(),isArray:!0,isOptional:!0},actions:{type:S,isArray:!0,isOptional:!0},decisions:{type:e.JSONObject(),isArray:!0,isOptional:!0},risks:{type:e.JSONObject(),isArray:!0,isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},generatedAt:{type:e.DateTime(),isOptional:!1}}}),N=t({name:"AgentSuggestion",description:"An AI-generated suggestion attached to a thread or message",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},suggestionType:{type:e.String_unsecure(),isOptional:!1},content:{type:e.String_unsecure(),isOptional:!1},status:{type:u,isOptional:!1,defaultValue:"generated"},modelName:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}});var p=["platform.communication-os"],P=T({meta:{key:"communication.thread.updateStatus",version:"1.0.0",stability:"experimental",owners:[...p],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:s({name:"UpdateThreadStatusInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},status:{type:r,isOptional:!1},reason:{type:i.String_unsecure(),isOptional:!0}}}),output:o},policy:{auth:"user"}}),q=d({meta:{key:"communication.thread.get",version:"1.0.0",stability:"experimental",owners:[...p],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:s({name:"GetThreadInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1}}}),output:s({name:"GetThreadOutput",fields:{thread:{type:o,isOptional:!1},messages:{type:c,isArray:!0,isOptional:!1},links:{type:l,isArray:!0,isOptional:!0}}})},policy:{auth:"user"}}),B=d({meta:{key:"communication.thread.search",version:"1.0.0",stability:"experimental",owners:[...p],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:s({name:"SearchThreadsInput",fields:{status:{type:r,isOptional:!0},participantId:{type:i.String_unsecure(),isOptional:!0},channelType:{type:a,isOptional:!0},linkedKindId:{type:i.String_unsecure(),isOptional:!0},linkedInstanceId:{type:i.String_unsecure(),isOptional:!0},assignedTo:{type:i.String_unsecure(),isOptional:!0},limit:{type:i.Int_unsecure(),isOptional:!0,defaultValue:20}}}),output:s({name:"SearchThreadsOutput",fields:{threads:{type:o,isArray:!0,isOptional:!1},total:{type:i.Int_unsecure(),isOptional:!1},hasMore:{type:i.Boolean(),isOptional:!1}}})},policy:{auth:"user"}}),H=d({meta:{key:"communication.message.list",version:"1.0.0",stability:"experimental",owners:[...p],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:s({name:"ListMessagesInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1}}}),output:s({name:"ListMessagesOutput",fields:{messages:{type:c,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});export{q as GetThreadQuery,H as ListMessagesQuery,B as SearchThreadsQuery,P as UpdateThreadStatusCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as e}from"zod";var o=e.string().min(1),r=e.string().datetime({offset:!0}),C="1.0.0",y="communication.sequence-intent.v1|sequence,action-packet,recipient,content-proof,channel,side-effect,schedule,expiry,approval,policy|approval-bound,provider-neutral",E="sha256:7ef776396727b0e7ee015935d8f7d5f4605a08b815f6493aa737411490edc633",m="1.0.0",A="communicationSequenceApprovalTarget",h="communicationSequenceApprovalFingerprint",l="communication-sequence-approval:",s=e.object({contentRef:o,sha256:e.string().regex(/^[a-f0-9]{64}$/)}),f=e.object({body:e.string(),subject:e.string().optional(),htmlBody:e.string().optional(),replyToExternalMessageId:e.string().optional()}),a=e.object({notBefore:r,maxAttempts:e.number().int().positive(),retryDelayMs:e.number().int().nonnegative()}),p=e.object({policyRefs:e.array(o).min(1),consentRef:o,killSwitchRef:o}),S=e.object({schemaVersion:e.literal(m),sequenceRef:o,sequenceVersion:o,tenantRef:o,recipientRefs:e.array(o).min(1),contentProof:s,channel:o,sideEffect:e.literal("send_reply"),schedulePolicyVersion:o,schedulePolicy:a,policyVersion:o,policy:p,expiresAt:r}).superRefine((n,t)=>{if(new Set(n.recipientRefs).size!==n.recipientRefs.length)t.addIssue({code:e.ZodIssueCode.custom,message:"recipientRefs must be unique",path:["recipientRefs"]});if(Date.parse(n.expiresAt)<=Date.parse(n.schedulePolicy.notBefore))t.addIssue({code:e.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});function i(n){if(Array.isArray(n))return`[${n.map(i).join(",")}]`;if(n&&typeof n==="object")return`{${Object.entries(n).sort(([t],[c])=>t.localeCompare(c)).map(([t,c])=>`${JSON.stringify(t)}:${i(c)}`).join(",")}}`;return JSON.stringify(n)}async function u(n){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i(n)));return Array.from(new Uint8Array(t),(c)=>c.toString(16).padStart(2,"0")).join("")}async function I(n){let t=f.parse(n);return u({body:t.body,htmlBody:t.htmlBody??null,replyToExternalMessageId:t.replyToExternalMessageId??null,subject:t.subject??null})}async function x(n){let t=S.parse(n);return`sha256:${await u(t)}`}function N(n){return`${l}${n}`}var P=e.object({sequenceRef:o,actionPacketRef:o,recipientRef:o,contentProof:s,channel:o,sideEffect:e.literal("send_reply"),schedulePolicy:a,expiresAt:r,approvalRequestId:o,approvalFingerprint:o,policy:p}).superRefine((n,t)=>{if(Date.parse(n.expiresAt)<=Date.parse(n.schedulePolicy.notBefore))t.addIssue({code:e.ZodIssueCode.custom,message:"expiresAt must be later than schedulePolicy.notBefore",path:["expiresAt"]})});export{l as COMMUNICATION_SEQUENCE_APPROVAL_EVIDENCE_PREFIX,h as COMMUNICATION_SEQUENCE_APPROVAL_FINGERPRINT_PAYLOAD_KEY,A as COMMUNICATION_SEQUENCE_APPROVAL_TARGET_PAYLOAD_KEY,m as COMMUNICATION_SEQUENCE_APPROVAL_TARGET_VERSION,E as COMMUNICATION_SEQUENCE_INTENT_SCHEMA_FINGERPRINT,y as COMMUNICATION_SEQUENCE_INTENT_SCHEMA_IDENTITY,C as COMMUNICATION_SEQUENCE_INTENT_SCHEMA_VERSION,S as CommunicationSequenceApprovalTargetSchema,s as CommunicationSequenceContentProofSchema,P as CommunicationSequenceIntentSchema,f as CommunicationSequenceOutboundContentSchema,p as CommunicationSequencePolicySchema,a as CommunicationSequenceSchedulePolicySchema,N as communicationSequenceApprovalEvidenceRef,x as fingerprintCommunicationSequenceApprovalTarget,I as fingerprintCommunicationSequenceOutboundContent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEnum as t,defineSchemaModel as n,ScalarTypeEnum as e}from"@lssm/lib.schema";var a=t("ResidencyRegion",["eu","eu_fr","eu_de","us","uk","apac","self_managed"]),s=t("HostingMode",["saas","self_host","on_prem"]),o=t("DataClass",["message_body","participant_identity","channel_account","attachment","ai_derived","audit_evidence"]),i=t("ConsentBasis",["consent","contract","legal_obligation","legitimate_interest"]),r=t("ConsentStatus",["granted","withdrawn","expired","not_recorded"]),l=n({name:"RetentionWindow",description:"Documented retention window for a single governed data class.",fields:{dataClass:{type:o,isOptional:!1},retentionDays:{type:e.Int_unsecure(),isOptional:!1},basis:{type:i,isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0}}}),p=n({name:"SovereigntyProfile",description:"Residency, retention, sovereign LLM provider and hosting posture for a tenant.",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},residencyRegion:{type:a,isOptional:!1,defaultValue:"eu"},hostingMode:{type:s,isOptional:!1,defaultValue:"saas"},llmProviderId:{type:e.String_unsecure(),isOptional:!1},retentionWindows:{type:l,isArray:!0,isOptional:!1},dataResidencyEnforced:{type:e.Boolean(),isOptional:!1,defaultValue:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),u=n({name:"SubjectConsent",description:"Recorded RGPD consent decision for a single data subject.",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},subjectId:{type:e.String_unsecure(),isOptional:!1},basis:{type:i,isOptional:!1},status:{type:r,isOptional:!1,defaultValue:"not_recorded"},grantedAt:{type:e.DateTime(),isOptional:!0},withdrawnAt:{type:e.DateTime(),isOptional:!0},expiresAt:{type:e.DateTime(),isOptional:!0},evidenceRef:{type:e.String_unsecure(),isOptional:!0}}}),c=t("ErasureOutcome",["erased_local","erased_local_and_channel","erased_local_provider_retained_documented"]);export{i as ConsentBasisEnum,r as ConsentStatusEnum,o as DataClassEnum,c as ErasureOutcomeEnum,s as HostingModeEnum,a as ResidencyRegionEnum,l as RetentionWindowModel,p as SovereigntyProfileModel,u as SubjectConsentModel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineCommand as a,defineEvent as r,defineQuery as u,docId as l}from"@lssm/lib.contracts-spec";import{defineEnum as p,defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var n=["platform.communication-os","platform.support-os"],m={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"},o=[l(m.id)],c=p("CommunicationSupportInternalNoteVisibility",["internal"]),d=t({name:"CommunicationSupportInternalNoteCreateV1Input",fields:{caseRef:{type:e.String_unsecure(),isOptional:!1},body:{type:e.String_unsecure(),isOptional:!1},idempotencyKey:{type:e.String_unsecure(),isOptional:!1}}}),y=t({name:"CommunicationSupportInternalNoteCreateForIntentV1Input",fields:{caseRef:{type:e.String_unsecure(),isOptional:!1},intentRef:{type:e.String_unsecure(),isOptional:!1},body:{type:e.String_unsecure(),isOptional:!1},idempotencyKey:{type:e.String_unsecure(),isOptional:!1}}}),i=t({name:"CommunicationSupportInternalNoteEvidenceV1",fields:{noteRef:{type:e.String_unsecure(),isOptional:!1},caseRef:{type:e.String_unsecure(),isOptional:!1},evidenceRef:{type:e.String_unsecure(),isOptional:!1},visibility:{type:c,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),s=t({name:"CommunicationSupportInternalNoteIntentEvidenceV1",fields:{...i.config.fields,intentRef:{type:e.String_unsecure(),isOptional:!1},deliveryRef:{type:e.String_unsecure(),isOptional:!1},grantEvidenceRef:{type:e.String_unsecure(),isOptional:!1}}}),f=t({name:"CommunicationSupportInternalNoteVerifyV1Input",fields:{caseRef:{type:e.String_unsecure(),isOptional:!1},noteRef:{type:e.String_unsecure(),isOptional:!1},evidenceRef:{type:e.String_unsecure(),isOptional:!1}}}),S=t({name:"CommunicationSupportInternalNoteVerificationV1",fields:{status:{type:p("CommunicationSupportInternalNoteVerificationStatus",["verified"]),isOptional:!1},caseRef:{type:e.String_unsecure(),isOptional:!1},noteRef:{type:e.String_unsecure(),isOptional:!1},evidenceRef:{type:e.String_unsecure(),isOptional:!1},visibility:{type:c,isOptional:!1}}}),C=a({meta:{key:"communication.support.internal-note.create",version:"1.0.0",stability:"experimental",owners:[...n],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:o},io:{input:d,output:i},policy:{auth:"admin"}}),O=a({meta:{key:"communication.support.internal-note.create-for-intent",version:"1.0.0",stability:"experimental",owners:[...n],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:o},io:{input:y,output:s},policy:{auth:"admin"}}),g=u({meta:{key:"communication.support.internal-note.verify",version:"1.0.0",stability:"experimental",owners:[...n],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:o},io:{input:f,output:S},policy:{auth:"admin"}}),N=r({meta:{key:"communication.support.internal-note.created",version:"1.0.0",stability:"experimental",owners:[...n],tags:["communication","support","internal-note","event"],description:"Immutable redacted evidence that a private Support note was created",docId:o},payload:i}),V=r({meta:{key:"communication.support.internal-note.reconciliation-ready",version:"1.0.0",stability:"experimental",owners:[...n],tags:["communication","support","internal-note","reconciliation"],description:"Redacted durable delivery evidence for a SupportOS note intent",docId:o},payload:s}),b={create:"communication.support.internal-note.create",createForIntent:"communication.support.internal-note.create-for-intent",verify:"communication.support.internal-note.verify"};export{b as COMMUNICATION_SUPPORT_INTERNAL_NOTE_CAPABILITIES,y as CommunicationSupportInternalNoteCreateForIntentV1InputModel,d as CommunicationSupportInternalNoteCreateV1InputModel,N as CommunicationSupportInternalNoteCreatedV1Event,m as CommunicationSupportInternalNoteDocBlock,i as CommunicationSupportInternalNoteEvidenceV1Model,s as CommunicationSupportInternalNoteIntentEvidenceV1Model,V as CommunicationSupportInternalNoteReconciliationReadyV1Event,S as CommunicationSupportInternalNoteVerificationV1Model,f as CommunicationSupportInternalNoteVerifyV1InputModel,c as CommunicationSupportInternalNoteVisibilityEnum,O as CreateCommunicationSupportInternalNoteForIntentV1Command,C as CreateCommunicationSupportInternalNoteV1Command,g as VerifyCommunicationSupportInternalNoteV1Query};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineReferenceKind as i}from"@lssm/lib.contracts-spec/rich-reference/define-kind";import{z as e}from"zod";var n=e.object({domain:e.string().min(1),id:e.string().min(1),label:e.string().optional()}),a=i({id:"communication.thread-linked-object",schema:n,sensitiveFields:[],defaultPreview:"inline-chip",defaultPanel:"popover",icon:"link"});export{a as threadLinkedObjectKind};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineCommand as r}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as s,ScalarTypeEnum as i}from"@lssm/lib.schema";import{defineEnum as n}from"@lssm/lib.schema";var a=n("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),m=n("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),p=n("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),y=n("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),f=n("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),l=n("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),g=n("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),O=n("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),T=n("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var h=t({name:"ChannelAccount",description:"A channel account belonging to a participant",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},externalId:{type:e.String_unsecure(),isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},isPrimary:{type:e.Boolean(),isOptional:!1,defaultValue:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),A=t({name:"IdentityLink",description:"Proposed or confirmed relationship between participant identities",fields:{id:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!1},candidateParticipantId:{type:e.String_unsecure(),isOptional:!1},status:{type:l,isOptional:!1,defaultValue:"generated"},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),k=t({name:"CommunicationParticipant",description:"A person or system that participates in conversations",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},email:{type:e.EmailAddress(),isOptional:!0},accounts:{type:h,isArray:!0,isOptional:!1},identityLinks:{type:A,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),I=t({name:"Attachment",description:"A file or media attachment on a message",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!0},sizeBytes:{type:e.Int_unsecure(),isOptional:!0},url:{type:e.URL(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0}}}),x=t({name:"ThreadLink",description:"Link between a thread and an external business object (V2: rich-reference objectRef replaces V1 objectType/objectId)",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},objectRef:{type:e.JSONObject(),isOptional:!1},relation:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),c=t({name:"MessageIntent",description:"Classified message or thread intent with confidence and evidence",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},category:{type:g,isOptional:!1},confidence:{type:e.Float_unsecure(),isOptional:!1},reasoning:{type:e.String_unsecure(),isOptional:!0},evidenceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),S=t({name:"CommunicationMessage",description:"A single message within a communication thread",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},bodyNormalized:{type:e.String_unsecure(),isOptional:!0},status:{type:p,isOptional:!1,defaultValue:"received"},intent:{type:c,isOptional:!0},attachments:{type:I,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),v=t({name:"CommunicationFormIntake",description:"Declarative source reference for a communication message mapped into an entity-bound form intake result",fields:{id:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},channelType:{type:a,isOptional:!1},channelAccountId:{type:e.String_unsecure(),isOptional:!1},participantId:{type:e.String_unsecure(),isOptional:!0},entityKey:{type:e.String_unsecure(),isOptional:!1},projectionKind:{type:e.String_unsecure(),isOptional:!1},formKey:{type:e.String_unsecure(),isOptional:!0},formVersion:{type:e.String_unsecure(),isOptional:!0},completionProfileKey:{type:e.String_unsecure(),isOptional:!0},acceptedValues:{type:e.JSONObject(),isOptional:!1},completionDebt:{type:e.JSONObject(),isArray:!0,isOptional:!1},captureStatus:{type:e.String_unsecure(),isOptional:!1,defaultValue:"accepted"},completionStatus:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),d=t({name:"CommunicationThread",description:"A conversation thread spanning one or more channels",fields:{id:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!0},status:{type:m,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:a,isArray:!0,isOptional:!1},links:{type:x,isArray:!0,isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0},priority:{type:e.String_unsecure(),isOptional:!0},tags:{type:e.String_unsecure(),isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),u=t({name:"CommunicationAction",description:"Structured action extracted from a conversation",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},owner:{type:e.String_unsecure(),isOptional:!0},deadline:{type:e.DateTime(),isOptional:!0},blockers:{type:e.String_unsecure(),isArray:!0,isOptional:!0},sourceMessageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},safetyMode:{type:O,isOptional:!1,defaultValue:"draft_only"}}}),E=t({name:"ReplyDraft",description:"An AI-generated or human-authored reply draft",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!1},status:{type:y,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:e.String_unsecure(),isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},promptVersion:{type:e.String_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},reviewedAt:{type:e.DateTime(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),D=t({name:"HandoffPacket",description:"A structured handoff between owners, teams, or systems",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},status:{type:f,isOptional:!1,defaultValue:"created"},fromOwner:{type:e.String_unsecure(),isOptional:!1},toOwner:{type:e.String_unsecure(),isOptional:!1},summary:{type:e.String_unsecure(),isOptional:!1},keyFacts:{type:e.String_unsecure(),isArray:!0,isOptional:!0},openQuestions:{type:e.String_unsecure(),isArray:!0,isOptional:!0},requiredActions:{type:u,isArray:!0,isOptional:!0},evidenceLinks:{type:e.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),_=t({name:"CommunicationSummary",description:"AI-generated summary of a thread or message range",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},content:{type:e.String_unsecure(),isOptional:!1},facts:{type:e.JSONObject(),isArray:!0,isOptional:!0},actions:{type:u,isArray:!0,isOptional:!0},decisions:{type:e.JSONObject(),isArray:!0,isOptional:!0},risks:{type:e.JSONObject(),isArray:!0,isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},generatedAt:{type:e.DateTime(),isOptional:!1}}}),j=t({name:"AgentSuggestion",description:"An AI-generated suggestion attached to a thread or message",fields:{id:{type:e.String_unsecure(),isOptional:!1},threadId:{type:e.String_unsecure(),isOptional:!1},messageId:{type:e.String_unsecure(),isOptional:!0},suggestionType:{type:e.String_unsecure(),isOptional:!1},content:{type:e.String_unsecure(),isOptional:!1},status:{type:l,isOptional:!1,defaultValue:"generated"},modelName:{type:e.String_unsecure(),isOptional:!0},confidence:{type:e.Float_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}});var o=["platform.communication-os"],F=r({meta:{key:"communication.thread.create",version:"1.0.0",stability:"experimental",owners:[...o],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:d,output:d},policy:{auth:"admin"}}),L=r({meta:{key:"communication.message.ingest",version:"1.0.0",stability:"experimental",owners:[...o],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:S,output:s({name:"IngestMessageOutput",fields:{messageId:{type:i.String_unsecure(),isOptional:!1},threadId:{type:i.String_unsecure(),isOptional:!1},status:{type:p,isOptional:!1}}})},policy:{auth:"admin"}}),q=r({meta:{key:"communication.intent.classify",version:"1.0.0",stability:"experimental",owners:[...o],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:s({name:"ClassifyIntentInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},messageId:{type:i.String_unsecure(),isOptional:!0}}}),output:c},policy:{auth:"admin"}}),z=r({meta:{key:"communication.summary.generate",version:"1.0.0",stability:"experimental",owners:[...o],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:s({name:"GenerateSummaryInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},messageIds:{type:i.String_unsecure(),isArray:!0,isOptional:!0}}}),output:_},policy:{auth:"user"}}),B=r({meta:{key:"communication.action.extract",version:"1.0.0",stability:"experimental",owners:[...o],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:s({name:"ExtractActionsInput",fields:{threadId:{type:i.String_unsecure(),isOptional:!1},messageIds:{type:i.String_unsecure(),isArray:!0,isOptional:!0}}}),output:s({name:"ExtractActionsOutput",fields:{actions:{type:u,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});export{q as ClassifyIntentCommand,F as CreateThreadCommand,B as ExtractActionsCommand,z as GenerateSummaryCommand,L as IngestMessageCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEvent as v,docId as Q}from"@lssm/lib.contracts-spec";import{defineEvent as a,docId as F}from"@lssm/lib.contracts-spec";import{defineSchemaModel as S,ScalarTypeEnum as t}from"@lssm/lib.schema";import{defineEnum as u,defineSchemaModel as p,ScalarTypeEnum as e}from"@lssm/lib.schema";var P=u("CommunicationSpaceKind",["personal","organization"]),N=u("CommunicationPrincipalKind",["human","agent","system"]),q=u("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),se=u("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),B=u("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),z=u("CommunicationMembershipState",["active","revoked"]),re=u("CommunicationReceiptKind",["delivered","read"]),K=u("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),h={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"},ce=p({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),pe=p({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:P,isOptional:!1},encryptionMode:{type:B,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),le=p({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:N,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),ue=p({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),de=p({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:z,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),me=p({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:q,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:K,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),j=p({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),ye=p({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:j,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),fe=p({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var H=["platform.communication-os"],L=[F(h.id)];function o(y,f,g){return{key:y,version:"2.0.0",description:f,stability:"experimental",owners:[...H],tags:["communication","ecosystem-messaging",...g],docId:L}}var I=S({name:"CommunicationScopedEntityV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},entityId:{type:t.String_unsecure(),isOptional:!1},actorPrincipalId:{type:t.String_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),he=a({meta:o("communication.space.created","Emitted when an isolated messaging space is created",["space","created"]),payload:I}),ve=a({meta:o("communication.room.created","Emitted when a room or direct-message projection is created",["room","created"]),payload:I}),W=S({name:"CommunicationMembershipChangedV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},membershipId:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},state:{type:t.String_unsecure(),isOptional:!1},changedBy:{type:t.String_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),Ce=a({meta:o("communication.membership.changed","Emitted when a human, agent, or system membership changes",["membership","authority"]),payload:W}),Ie=a({meta:o("communication.authority.changed","Emitted when a principal authority grant is added, changed, expired, or revoked",["agent","authority","revocation"]),payload:I}),E=S({name:"CommunicationMessageEventV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},messageId:{type:t.String_unsecure(),isOptional:!1},authorPrincipalId:{type:t.String_unsecure(),isOptional:!1},connectionId:{type:t.String_unsecure(),isOptional:!0},providerReceiptRef:{type:t.String_unsecure(),isOptional:!0},revision:{type:t.Int_unsecure(),isOptional:!1},occurredAt:{type:t.DateTime(),isOptional:!1}}}),Ee=a({meta:o("communication.message.sent","Emitted after provider acceptance or canonical local delivery of a v2 message",["message","sent"]),payload:E}),be=a({meta:o("communication.message.edited","Emitted when a new message revision is accepted",["message","edited"]),payload:E}),xe=a({meta:o("communication.message.deleted","Emitted when message content is deleted or provider retention is documented",["message","deleted","erasure"]),payload:E}),d=S({name:"CommunicationConnectionEventV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},connectionId:{type:t.String_unsecure(),isOptional:!1},network:{type:t.String_unsecure(),isOptional:!1},placement:{type:t.String_unsecure(),isOptional:!1},health:{type:t.String_unsecure(),isOptional:!1},cursor:{type:t.String_unsecure(),isOptional:!0},invalidationRef:{type:t.String_unsecure(),isOptional:!0},subscriptionRef:{type:t.String_unsecure(),isOptional:!0},targetExpiresAt:{type:t.DateTime(),isOptional:!0},expiresAt:{type:t.DateTime(),isOptional:!0},workOrderDigest:{type:t.String_unsecure(),isOptional:!0},idempotencyKey:{type:t.String_unsecure(),isOptional:!0},providerReceiptRef:{type:t.String_unsecure(),isOptional:!0},evidenceRefs:{type:t.String_unsecure(),isArray:!0,isOptional:!0},failureCode:{type:t.String_unsecure(),isOptional:!0},retryable:{type:t.Boolean(),isOptional:!0},retryAt:{type:t.DateTime(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!1}}}),we=a({meta:o("communication.connection.health.changed","Emitted when a local or server connection health state changes",["connection","health"]),payload:d}),ke=a({meta:o("communication.connection.sync.advanced","Emitted after a connection cursor advances durably",["connection","sync","cursor"]),payload:d}),Ve=a({meta:o("communication.connection.sync.invalidated","Emitted after an authenticated provider callback durably requests synchronization",["connection","sync","invalidation"]),payload:d}),G=S({name:"CommunicationRealtimeStateV2Payload",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},roomId:{type:t.String_unsecure(),isOptional:!1},principalId:{type:t.String_unsecure(),isOptional:!1},stateKind:{type:t.String_unsecure(),isOptional:!1},messageId:{type:t.String_unsecure(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!1}}}),Re=a({meta:o("communication.realtime-state.changed","Emitted for reaction, receipt, presence, typing, and inbox-state projection updates",["realtime","receipt","presence","reaction"]),payload:G});var C=(y,f,g)=>({key:y,version:"2.0.0",description:f,stability:"experimental",owners:["platform.communication-os"],tags:["communication","connection","subscription",g],docId:[Q(h.id)]}),Pe=v({meta:C("communication.connection.subscription.requested","Emitted before Runtime Node receives an idempotent subscription create or renewal request","requested"),payload:d}),Ne=v({meta:C("communication.connection.subscription.active","Emitted after a Runtime Node receipt proves a provider subscription is active","active"),payload:d}),qe=v({meta:C("communication.connection.subscription.failed","Emitted after a definitive Runtime Node subscription failure","failed"),payload:d}),Be=v({meta:C("communication.connection.subscription.indeterminate","Emitted when subscription effect custody is indeterminate and must reconcile before retry","indeterminate"),payload:d});import{defineEvent as s}from"@lssm/lib.contracts-spec/events";import{defineSchemaModel as r,ScalarTypeEnum as n}from"@lssm/lib.schema";import{defineEnum as l}from"@lssm/lib.schema";var w=l("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),b=l("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),k=l("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),V=l("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),je=l("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),Fe=l("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),He=l("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),Le=l("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),We=l("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);var U=["platform.communication-os"],c=(y,f,g)=>({key:y,version:"1.0.0",description:f,stability:"experimental",owners:[...U],tags:["communication","event",...g]}),Xe=s({meta:c("communication.message.received","Emitted when a new message is accepted from a channel",["message","received"]),payload:r({name:"MessageReceivedPayload",fields:{messageId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},channelType:{type:w,isOptional:!1}}})}),Ye=s({meta:c("communication.message.normalized","Emitted when a raw channel payload is normalized into a CommunicationMessage",["message","normalized"]),payload:r({name:"MessageNormalizedPayload",fields:{messageId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},status:{type:k,isOptional:!1}}})}),Ze=s({meta:c("communication.intent.classified","Emitted when a message or thread intent is classified",["intent","classified"]),payload:r({name:"IntentClassifiedPayload",fields:{threadId:{type:n.String_unsecure(),isOptional:!1},messageId:{type:n.String_unsecure(),isOptional:!0},category:{type:n.String_unsecure(),isOptional:!1},confidence:{type:n.Float_unsecure(),isOptional:!1}}})}),$e=s({meta:c("communication.thread.linked","Emitted when a thread is linked to a business object",["thread","linked"]),payload:r({name:"ThreadLinkedPayload",fields:{threadId:{type:n.String_unsecure(),isOptional:!1},objectType:{type:n.String_unsecure(),isOptional:!1},objectId:{type:n.String_unsecure(),isOptional:!1}}})}),et=s({meta:c("communication.thread.status.changed","Emitted when a thread status changes",["thread","status"]),payload:r({name:"ThreadStatusChangedPayload",fields:{threadId:{type:n.String_unsecure(),isOptional:!1},previousStatus:{type:b,isOptional:!1},newStatus:{type:b,isOptional:!1},changedBy:{type:n.String_unsecure(),isOptional:!0}}})}),tt=s({meta:c("communication.reply.drafted","Emitted when a reply draft is created",["reply","drafted"]),payload:r({name:"ReplyDraftedPayload",fields:{draftId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},status:{type:V,isOptional:!1}}})}),nt=s({meta:c("communication.reply.blocked_by_policy","Emitted when a reply draft is blocked before send",["reply","blocked"]),payload:r({name:"ReplyBlockedByPolicyPayload",fields:{draftId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},policyRef:{type:n.String_unsecure(),isOptional:!1},reason:{type:n.String_unsecure(),isOptional:!1}}})}),it=s({meta:c("communication.reply.sent","Emitted when a reply is sent",["reply","sent"]),payload:r({name:"ReplySentPayload",fields:{draftId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},sentAt:{type:n.DateTime(),isOptional:!1}}})}),at=s({meta:c("communication.handoff.created","Emitted when a handoff packet is created",["handoff","created"]),payload:r({name:"HandoffCreatedPayload",fields:{handoffId:{type:n.String_unsecure(),isOptional:!1},threadId:{type:n.String_unsecure(),isOptional:!1},fromOwner:{type:n.String_unsecure(),isOptional:!1},toOwner:{type:n.String_unsecure(),isOptional:!1}}})}),ot=s({meta:c("communication.escalation.requested","Emitted when a thread is escalated for human attention",["escalation","requested"]),payload:r({name:"EscalationRequestedPayload",fields:{threadId:{type:n.String_unsecure(),isOptional:!1},reason:{type:n.String_unsecure(),isOptional:!1},targetOwner:{type:n.String_unsecure(),isOptional:!0}}})}),st=s({meta:c("communication.participant.linked","Emitted when a participant identity link is proposed or confirmed",["participant","identity"]),payload:r({name:"ParticipantLinkedPayload",fields:{participantId:{type:n.String_unsecure(),isOptional:!1},linkedParticipantId:{type:n.String_unsecure(),isOptional:!1},linkType:{type:n.String_unsecure(),isOptional:!1},confidence:{type:n.Float_unsecure(),isOptional:!0}}})});import{defineCommand as R,defineEvent as M,defineQuery as J,docId as X}from"@lssm/lib.contracts-spec";import{defineEnum as T,defineSchemaModel as m,ScalarTypeEnum as i}from"@lssm/lib.schema";var O=["platform.communication-os","platform.support-os"],Y={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"},_=[X(Y.id)],A=T("CommunicationSupportInternalNoteVisibility",["internal"]),Z=m({name:"CommunicationSupportInternalNoteCreateV1Input",fields:{caseRef:{type:i.String_unsecure(),isOptional:!1},body:{type:i.String_unsecure(),isOptional:!1},idempotencyKey:{type:i.String_unsecure(),isOptional:!1}}}),ee=m({name:"CommunicationSupportInternalNoteCreateForIntentV1Input",fields:{caseRef:{type:i.String_unsecure(),isOptional:!1},intentRef:{type:i.String_unsecure(),isOptional:!1},body:{type:i.String_unsecure(),isOptional:!1},idempotencyKey:{type:i.String_unsecure(),isOptional:!1}}}),x=m({name:"CommunicationSupportInternalNoteEvidenceV1",fields:{noteRef:{type:i.String_unsecure(),isOptional:!1},caseRef:{type:i.String_unsecure(),isOptional:!1},evidenceRef:{type:i.String_unsecure(),isOptional:!1},visibility:{type:A,isOptional:!1},createdAt:{type:i.DateTime(),isOptional:!1}}}),D=m({name:"CommunicationSupportInternalNoteIntentEvidenceV1",fields:{...x.config.fields,intentRef:{type:i.String_unsecure(),isOptional:!1},deliveryRef:{type:i.String_unsecure(),isOptional:!1},grantEvidenceRef:{type:i.String_unsecure(),isOptional:!1}}}),te=m({name:"CommunicationSupportInternalNoteVerifyV1Input",fields:{caseRef:{type:i.String_unsecure(),isOptional:!1},noteRef:{type:i.String_unsecure(),isOptional:!1},evidenceRef:{type:i.String_unsecure(),isOptional:!1}}}),ne=m({name:"CommunicationSupportInternalNoteVerificationV1",fields:{status:{type:T("CommunicationSupportInternalNoteVerificationStatus",["verified"]),isOptional:!1},caseRef:{type:i.String_unsecure(),isOptional:!1},noteRef:{type:i.String_unsecure(),isOptional:!1},evidenceRef:{type:i.String_unsecure(),isOptional:!1},visibility:{type:A,isOptional:!1}}}),lt=R({meta:{key:"communication.support.internal-note.create",version:"1.0.0",stability:"experimental",owners:[...O],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:_},io:{input:Z,output:x},policy:{auth:"admin"}}),ut=R({meta:{key:"communication.support.internal-note.create-for-intent",version:"1.0.0",stability:"experimental",owners:[...O],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:_},io:{input:ee,output:D},policy:{auth:"admin"}}),dt=J({meta:{key:"communication.support.internal-note.verify",version:"1.0.0",stability:"experimental",owners:[...O],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:_},io:{input:te,output:ne},policy:{auth:"admin"}}),ie=M({meta:{key:"communication.support.internal-note.created",version:"1.0.0",stability:"experimental",owners:[...O],tags:["communication","support","internal-note","event"],description:"Immutable redacted evidence that a private Support note was created",docId:_},payload:x}),ae=M({meta:{key:"communication.support.internal-note.reconciliation-ready",version:"1.0.0",stability:"experimental",owners:[...O],tags:["communication","support","internal-note","reconciliation"],description:"Redacted durable delivery evidence for a SupportOS note intent",docId:_},payload:D}),mt={create:"communication.support.internal-note.create",createForIntent:"communication.support.internal-note.create-for-intent",verify:"communication.support.internal-note.verify"};export{Ie as CommunicationAuthorityChangedV2Event,d as CommunicationConnectionEventV2Payload,we as CommunicationConnectionHealthChangedV2Event,Ne as CommunicationConnectionSubscriptionActiveV2Event,qe as CommunicationConnectionSubscriptionFailedV2Event,Be as CommunicationConnectionSubscriptionIndeterminateV2Event,Pe as CommunicationConnectionSubscriptionRequestedV2Event,ke as CommunicationConnectionSyncAdvancedV2Event,Ve as CommunicationConnectionSyncInvalidatedV2Event,Ce as CommunicationMembershipChangedV2Event,xe as CommunicationMessageDeletedV2Event,be as CommunicationMessageEditedV2Event,Ee as CommunicationMessageSentV2Event,Re as CommunicationRealtimeStateChangedV2Event,ve as CommunicationRoomCreatedV2Event,he as CommunicationSpaceCreatedV2Event,ie as CommunicationSupportInternalNoteCreatedV1Event,ae as CommunicationSupportInternalNoteReconciliationReadyV1Event,ot as EscalationRequestedEvent,at as HandoffCreatedEvent,Ze as IntentClassifiedEvent,Ye as MessageNormalizedEvent,Xe as MessageReceivedEvent,st as ParticipantLinkedEvent,nt as ReplyBlockedByPolicyEvent,tt as ReplyDraftedEvent,it as ReplySentEvent,$e as ThreadLinkedEvent,et as ThreadStatusChangedEvent};
|