@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,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";import{defineEnum as i}from"@lssm/lib.schema";var n=i("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),s=i("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),r=i("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),o=i("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),p=i("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),a=i("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),u=i("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),l=i("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),S=i("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);var d=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:n,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}}}),y=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:a,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}}}),I=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:d,isArray:!0,isOptional:!1},identityLinks:{type:y,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),O=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}}}),m=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}}}),f=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:u,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}}}),T=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:n,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:r,isOptional:!1,defaultValue:"received"},intent:{type:f,isOptional:!0},attachments:{type:O,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),b=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:n,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}}}),x=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:s,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:n,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=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:l,isOptional:!1,defaultValue:"draft_only"}}}),M=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:o,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:p,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}}}),k=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: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}}}),w=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:a,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}}});export{w as AgentSuggestionModel,O as AttachmentModel,d as ChannelAccountModel,c as CommunicationActionModel,b as CommunicationFormIntakeModel,T as CommunicationMessageModel,I as CommunicationParticipantModel,k as CommunicationSummaryModel,x as CommunicationThreadModel,D as HandoffPacketModel,y as IdentityLinkModel,f as MessageIntentModel,M as ReplyDraftModel,m as ThreadLinkModel};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
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,353 @@
|
|
|
1
|
+
import type { ModuleSchemaContribution } from '@lssm/lib.schema';
|
|
2
|
+
export type CommunicationOsPersistenceMode = 'managed' | 'byok';
|
|
3
|
+
export type CommunicationOsDomainCommandRef = 'communication.thread.create@1.0.0' | 'communication.message.ingest@1.0.0' | 'communication.thread.updateStatus@1.0.0' | 'communication.threadLink.propose@1.0.0' | 'communication.handoff.create@1.0.0';
|
|
4
|
+
export interface CommunicationOsPersistencePlan {
|
|
5
|
+
domainCommandRef: CommunicationOsDomainCommandRef;
|
|
6
|
+
resource: {
|
|
7
|
+
kind: 'table';
|
|
8
|
+
schema: 'communication_os';
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
operation: 'insert' | 'update';
|
|
12
|
+
managedByokRequired: true;
|
|
13
|
+
writeAuthority: 'domain-command';
|
|
14
|
+
expectedWriteSet: readonly {
|
|
15
|
+
table: string;
|
|
16
|
+
action: 'insert' | 'update';
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
export interface CommunicationOsGovernedMutationDescriptor {
|
|
20
|
+
operationRef: {
|
|
21
|
+
key: 'database.mutation.execute';
|
|
22
|
+
version: '2.0.0';
|
|
23
|
+
};
|
|
24
|
+
mutationPlanRef: string;
|
|
25
|
+
resource: CommunicationOsPersistencePlan['resource'];
|
|
26
|
+
operation: CommunicationOsPersistencePlan['operation'];
|
|
27
|
+
values: Record<string, string | number | boolean | null>;
|
|
28
|
+
where?: Record<string, string | number | boolean | null>;
|
|
29
|
+
actorRef: string;
|
|
30
|
+
tenantRef: string;
|
|
31
|
+
domainCommandRef: CommunicationOsDomainCommandRef;
|
|
32
|
+
policyDecisionRef: string;
|
|
33
|
+
idempotencyKey: string;
|
|
34
|
+
transactionBoundary: 'transaction';
|
|
35
|
+
expectedWriteSet: CommunicationOsPersistencePlan['expectedWriteSet'];
|
|
36
|
+
auditEventRefs: readonly string[];
|
|
37
|
+
replayRef: string;
|
|
38
|
+
correlationRef: string;
|
|
39
|
+
deploymentMode: CommunicationOsPersistenceMode;
|
|
40
|
+
}
|
|
41
|
+
export interface CommunicationOsMutationDescriptorInput {
|
|
42
|
+
plan: CommunicationOsPersistencePlan;
|
|
43
|
+
deploymentMode: CommunicationOsPersistenceMode;
|
|
44
|
+
mutationPlanRef: string;
|
|
45
|
+
actorRef: string;
|
|
46
|
+
tenantRef: string;
|
|
47
|
+
policyDecisionRef: string;
|
|
48
|
+
idempotencyKey: string;
|
|
49
|
+
auditEventRefs: readonly string[];
|
|
50
|
+
replayRef: string;
|
|
51
|
+
correlationRef: string;
|
|
52
|
+
values: CommunicationOsGovernedMutationDescriptor['values'];
|
|
53
|
+
where?: CommunicationOsGovernedMutationDescriptor['where'];
|
|
54
|
+
}
|
|
55
|
+
export declare const CommunicationThreadPersistenceEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
56
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
57
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
58
|
+
participantIds: import("@lssm/lib.schema").EntityScalarField;
|
|
59
|
+
channelTypes: import("@lssm/lib.schema").EntityScalarField;
|
|
60
|
+
links: import("@lssm/lib.schema").EntityScalarField;
|
|
61
|
+
assignedTo: import("@lssm/lib.schema").EntityScalarField;
|
|
62
|
+
metadata: import("@lssm/lib.schema").EntityScalarField;
|
|
63
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
64
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
65
|
+
auditEventRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
66
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
67
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
68
|
+
}>;
|
|
69
|
+
export declare const CommunicationMessagePersistenceEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
70
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
71
|
+
threadId: import("@lssm/lib.schema").EntityScalarField;
|
|
72
|
+
channelType: import("@lssm/lib.schema").EntityScalarField;
|
|
73
|
+
channelAccountId: import("@lssm/lib.schema").EntityScalarField;
|
|
74
|
+
participantId: import("@lssm/lib.schema").EntityScalarField;
|
|
75
|
+
externalMessageId: import("@lssm/lib.schema").EntityScalarField;
|
|
76
|
+
body: import("@lssm/lib.schema").EntityScalarField;
|
|
77
|
+
bodyNormalized: import("@lssm/lib.schema").EntityScalarField;
|
|
78
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
79
|
+
metadata: import("@lssm/lib.schema").EntityScalarField;
|
|
80
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
81
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
82
|
+
auditEventRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
83
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
84
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
85
|
+
}>;
|
|
86
|
+
export declare const CommunicationDomainCommandOutboxEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
87
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
88
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
89
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
90
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
91
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
92
|
+
mutationPlanRef: import("@lssm/lib.schema").EntityScalarField;
|
|
93
|
+
policyDecisionRef: import("@lssm/lib.schema").EntityScalarField;
|
|
94
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
95
|
+
replayRef: import("@lssm/lib.schema").EntityScalarField;
|
|
96
|
+
correlationRef: import("@lssm/lib.schema").EntityScalarField;
|
|
97
|
+
deploymentMode: import("@lssm/lib.schema").EntityScalarField;
|
|
98
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
99
|
+
attempt: import("@lssm/lib.schema").EntityScalarField;
|
|
100
|
+
leaseVersion: import("@lssm/lib.schema").EntityScalarField;
|
|
101
|
+
leaseOwner: import("@lssm/lib.schema").EntityScalarField;
|
|
102
|
+
leaseExpiresAt: import("@lssm/lib.schema").EntityScalarField;
|
|
103
|
+
nextAttemptAt: import("@lssm/lib.schema").EntityScalarField;
|
|
104
|
+
providerDeliveryId: import("@lssm/lib.schema").EntityScalarField;
|
|
105
|
+
lastErrorCode: import("@lssm/lib.schema").EntityScalarField;
|
|
106
|
+
reconciliationWorkOrderDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
107
|
+
reconciliationEvidenceRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
108
|
+
reconciliationObservationRef: import("@lssm/lib.schema").EntityScalarField;
|
|
109
|
+
reconciliationObservationDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
110
|
+
reconciliationObservedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
111
|
+
payload: import("@lssm/lib.schema").EntityScalarField;
|
|
112
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
113
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
114
|
+
}>;
|
|
115
|
+
export declare const CommunicationJournalCursorEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
116
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
117
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
118
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
119
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
120
|
+
sequence: import("@lssm/lib.schema").EntityScalarField;
|
|
121
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
122
|
+
}>;
|
|
123
|
+
export declare const CommunicationJournalEventEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
124
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
125
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
126
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
127
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
128
|
+
sequence: import("@lssm/lib.schema").EntityScalarField;
|
|
129
|
+
kind: import("@lssm/lib.schema").EntityScalarField;
|
|
130
|
+
entityId: import("@lssm/lib.schema").EntityScalarField;
|
|
131
|
+
roomId: import("@lssm/lib.schema").EntityScalarField;
|
|
132
|
+
actorPrincipalId: import("@lssm/lib.schema").EntityScalarField;
|
|
133
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
134
|
+
payload: import("@lssm/lib.schema").EntityScalarField;
|
|
135
|
+
occurredAt: import("@lssm/lib.schema").EntityScalarField;
|
|
136
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
137
|
+
}>;
|
|
138
|
+
export declare const CommunicationAttachmentPersistenceEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
139
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
140
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
141
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
142
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
143
|
+
roomId: import("@lssm/lib.schema").EntityScalarField;
|
|
144
|
+
messageId: import("@lssm/lib.schema").EntityScalarField;
|
|
145
|
+
name: import("@lssm/lib.schema").EntityScalarField;
|
|
146
|
+
mimeType: import("@lssm/lib.schema").EntityScalarField;
|
|
147
|
+
sizeBytes: import("@lssm/lib.schema").EntityScalarField;
|
|
148
|
+
sha256: import("@lssm/lib.schema").EntityScalarField;
|
|
149
|
+
content: import("@lssm/lib.schema").EntityScalarField;
|
|
150
|
+
createdBy: import("@lssm/lib.schema").EntityScalarField;
|
|
151
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
152
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
153
|
+
}>;
|
|
154
|
+
export declare const CommunicationSupportInternalNoteEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
155
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
156
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
157
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
158
|
+
caseRef: import("@lssm/lib.schema").EntityScalarField;
|
|
159
|
+
evidenceRef: import("@lssm/lib.schema").EntityScalarField;
|
|
160
|
+
actorRef: import("@lssm/lib.schema").EntityScalarField;
|
|
161
|
+
visibility: import("@lssm/lib.schema").EntityScalarField;
|
|
162
|
+
bodyEnvelope: import("@lssm/lib.schema").EntityScalarField;
|
|
163
|
+
bodyFingerprint: import("@lssm/lib.schema").EntityScalarField;
|
|
164
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
165
|
+
requestDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
166
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
167
|
+
}>;
|
|
168
|
+
export declare const CommunicationOAuthStateEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
169
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
170
|
+
network: import("@lssm/lib.schema").EntityScalarField;
|
|
171
|
+
expiresAt: import("@lssm/lib.schema").EntityScalarField;
|
|
172
|
+
consumedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
173
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
174
|
+
}>;
|
|
175
|
+
export declare const CommunicationCredentialSecretEntity: import("@lssm/lib.schema").EntitySpec<{
|
|
176
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
177
|
+
envelope: import("@lssm/lib.schema").EntityScalarField;
|
|
178
|
+
contentType: import("@lssm/lib.schema").EntityScalarField;
|
|
179
|
+
labels: import("@lssm/lib.schema").EntityScalarField;
|
|
180
|
+
version: import("@lssm/lib.schema").EntityScalarField;
|
|
181
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
182
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
183
|
+
}>;
|
|
184
|
+
export declare const communicationOsPersistenceEntities: readonly [import("@lssm/lib.schema").EntitySpec<{
|
|
185
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
186
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
187
|
+
participantIds: import("@lssm/lib.schema").EntityScalarField;
|
|
188
|
+
channelTypes: import("@lssm/lib.schema").EntityScalarField;
|
|
189
|
+
links: import("@lssm/lib.schema").EntityScalarField;
|
|
190
|
+
assignedTo: import("@lssm/lib.schema").EntityScalarField;
|
|
191
|
+
metadata: import("@lssm/lib.schema").EntityScalarField;
|
|
192
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
193
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
194
|
+
auditEventRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
195
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
196
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
197
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
198
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
199
|
+
threadId: import("@lssm/lib.schema").EntityScalarField;
|
|
200
|
+
channelType: import("@lssm/lib.schema").EntityScalarField;
|
|
201
|
+
channelAccountId: import("@lssm/lib.schema").EntityScalarField;
|
|
202
|
+
participantId: import("@lssm/lib.schema").EntityScalarField;
|
|
203
|
+
externalMessageId: import("@lssm/lib.schema").EntityScalarField;
|
|
204
|
+
body: import("@lssm/lib.schema").EntityScalarField;
|
|
205
|
+
bodyNormalized: import("@lssm/lib.schema").EntityScalarField;
|
|
206
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
207
|
+
metadata: import("@lssm/lib.schema").EntityScalarField;
|
|
208
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
209
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
210
|
+
auditEventRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
211
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
212
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
213
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
214
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
215
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
216
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
217
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
218
|
+
domainCommandRef: import("@lssm/lib.schema").EntityScalarField;
|
|
219
|
+
mutationPlanRef: import("@lssm/lib.schema").EntityScalarField;
|
|
220
|
+
policyDecisionRef: import("@lssm/lib.schema").EntityScalarField;
|
|
221
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
222
|
+
replayRef: import("@lssm/lib.schema").EntityScalarField;
|
|
223
|
+
correlationRef: import("@lssm/lib.schema").EntityScalarField;
|
|
224
|
+
deploymentMode: import("@lssm/lib.schema").EntityScalarField;
|
|
225
|
+
status: import("@lssm/lib.schema").EntityScalarField;
|
|
226
|
+
attempt: import("@lssm/lib.schema").EntityScalarField;
|
|
227
|
+
leaseVersion: import("@lssm/lib.schema").EntityScalarField;
|
|
228
|
+
leaseOwner: import("@lssm/lib.schema").EntityScalarField;
|
|
229
|
+
leaseExpiresAt: import("@lssm/lib.schema").EntityScalarField;
|
|
230
|
+
nextAttemptAt: import("@lssm/lib.schema").EntityScalarField;
|
|
231
|
+
providerDeliveryId: import("@lssm/lib.schema").EntityScalarField;
|
|
232
|
+
lastErrorCode: import("@lssm/lib.schema").EntityScalarField;
|
|
233
|
+
reconciliationWorkOrderDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
234
|
+
reconciliationEvidenceRefs: import("@lssm/lib.schema").EntityScalarField;
|
|
235
|
+
reconciliationObservationRef: import("@lssm/lib.schema").EntityScalarField;
|
|
236
|
+
reconciliationObservationDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
237
|
+
reconciliationObservedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
238
|
+
payload: import("@lssm/lib.schema").EntityScalarField;
|
|
239
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
240
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
241
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
242
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
243
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
244
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
245
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
246
|
+
sequence: import("@lssm/lib.schema").EntityScalarField;
|
|
247
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
248
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
249
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
250
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
251
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
252
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
253
|
+
sequence: import("@lssm/lib.schema").EntityScalarField;
|
|
254
|
+
kind: import("@lssm/lib.schema").EntityScalarField;
|
|
255
|
+
entityId: import("@lssm/lib.schema").EntityScalarField;
|
|
256
|
+
roomId: import("@lssm/lib.schema").EntityScalarField;
|
|
257
|
+
actorPrincipalId: import("@lssm/lib.schema").EntityScalarField;
|
|
258
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
259
|
+
payload: import("@lssm/lib.schema").EntityScalarField;
|
|
260
|
+
occurredAt: import("@lssm/lib.schema").EntityScalarField;
|
|
261
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
262
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
263
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
264
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
265
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
266
|
+
spaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
267
|
+
roomId: import("@lssm/lib.schema").EntityScalarField;
|
|
268
|
+
messageId: import("@lssm/lib.schema").EntityScalarField;
|
|
269
|
+
name: import("@lssm/lib.schema").EntityScalarField;
|
|
270
|
+
mimeType: import("@lssm/lib.schema").EntityScalarField;
|
|
271
|
+
sizeBytes: import("@lssm/lib.schema").EntityScalarField;
|
|
272
|
+
sha256: import("@lssm/lib.schema").EntityScalarField;
|
|
273
|
+
content: import("@lssm/lib.schema").EntityScalarField;
|
|
274
|
+
createdBy: import("@lssm/lib.schema").EntityScalarField;
|
|
275
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
276
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
277
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
278
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
279
|
+
tenantId: import("@lssm/lib.schema").EntityScalarField;
|
|
280
|
+
workspaceId: import("@lssm/lib.schema").EntityScalarField;
|
|
281
|
+
caseRef: import("@lssm/lib.schema").EntityScalarField;
|
|
282
|
+
evidenceRef: import("@lssm/lib.schema").EntityScalarField;
|
|
283
|
+
actorRef: import("@lssm/lib.schema").EntityScalarField;
|
|
284
|
+
visibility: import("@lssm/lib.schema").EntityScalarField;
|
|
285
|
+
bodyEnvelope: import("@lssm/lib.schema").EntityScalarField;
|
|
286
|
+
bodyFingerprint: import("@lssm/lib.schema").EntityScalarField;
|
|
287
|
+
idempotencyKey: import("@lssm/lib.schema").EntityScalarField;
|
|
288
|
+
requestDigest: import("@lssm/lib.schema").EntityScalarField;
|
|
289
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
290
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
291
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
292
|
+
network: import("@lssm/lib.schema").EntityScalarField;
|
|
293
|
+
expiresAt: import("@lssm/lib.schema").EntityScalarField;
|
|
294
|
+
consumedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
295
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
296
|
+
}>, import("@lssm/lib.schema").EntitySpec<{
|
|
297
|
+
id: import("@lssm/lib.schema").EntityScalarField;
|
|
298
|
+
envelope: import("@lssm/lib.schema").EntityScalarField;
|
|
299
|
+
contentType: import("@lssm/lib.schema").EntityScalarField;
|
|
300
|
+
labels: import("@lssm/lib.schema").EntityScalarField;
|
|
301
|
+
version: import("@lssm/lib.schema").EntityScalarField;
|
|
302
|
+
createdAt: import("@lssm/lib.schema").EntityScalarField;
|
|
303
|
+
updatedAt: import("@lssm/lib.schema").EntityScalarField;
|
|
304
|
+
}>];
|
|
305
|
+
export declare const communicationOsSchemaContribution: ModuleSchemaContribution;
|
|
306
|
+
export declare const communicationOsPersistencePlans: {
|
|
307
|
+
readonly createThread: {
|
|
308
|
+
readonly domainCommandRef: 'communication.thread.create@1.0.0';
|
|
309
|
+
readonly resource: {
|
|
310
|
+
readonly kind: 'table';
|
|
311
|
+
readonly schema: 'communication_os';
|
|
312
|
+
readonly name: 'communication_thread';
|
|
313
|
+
};
|
|
314
|
+
readonly operation: 'insert';
|
|
315
|
+
readonly managedByokRequired: true;
|
|
316
|
+
readonly writeAuthority: 'domain-command';
|
|
317
|
+
readonly expectedWriteSet: readonly [{
|
|
318
|
+
readonly table: 'communication_os.communication_thread';
|
|
319
|
+
readonly action: 'insert';
|
|
320
|
+
}];
|
|
321
|
+
};
|
|
322
|
+
readonly ingestMessage: {
|
|
323
|
+
readonly domainCommandRef: 'communication.message.ingest@1.0.0';
|
|
324
|
+
readonly resource: {
|
|
325
|
+
readonly kind: 'table';
|
|
326
|
+
readonly schema: 'communication_os';
|
|
327
|
+
readonly name: 'communication_message';
|
|
328
|
+
};
|
|
329
|
+
readonly operation: 'insert';
|
|
330
|
+
readonly managedByokRequired: true;
|
|
331
|
+
readonly writeAuthority: 'domain-command';
|
|
332
|
+
readonly expectedWriteSet: readonly [{
|
|
333
|
+
readonly table: 'communication_os.communication_message';
|
|
334
|
+
readonly action: 'insert';
|
|
335
|
+
}];
|
|
336
|
+
};
|
|
337
|
+
readonly updateThreadStatus: {
|
|
338
|
+
readonly domainCommandRef: 'communication.thread.updateStatus@1.0.0';
|
|
339
|
+
readonly resource: {
|
|
340
|
+
readonly kind: 'table';
|
|
341
|
+
readonly schema: 'communication_os';
|
|
342
|
+
readonly name: 'communication_thread';
|
|
343
|
+
};
|
|
344
|
+
readonly operation: 'update';
|
|
345
|
+
readonly managedByokRequired: true;
|
|
346
|
+
readonly writeAuthority: 'domain-command';
|
|
347
|
+
readonly expectedWriteSet: readonly [{
|
|
348
|
+
readonly table: 'communication_os.communication_thread';
|
|
349
|
+
readonly action: 'update';
|
|
350
|
+
}];
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
export declare function createCommunicationOsMutationDescriptor(input: CommunicationOsMutationDescriptorInput): CommunicationOsGovernedMutationDescriptor;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
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
|
+
export {};
|