@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 R,defineQuery as se,docId as re}from"@lssm/lib.contracts-spec";import{defineEnum as j,defineSchemaModel as C,ScalarTypeEnum as o}from"@lssm/lib.schema";import{defineEnum as l,defineSchemaModel as r,ScalarTypeEnum as t}from"@lssm/lib.schema";var Z=l("CommunicationSpaceKind",["personal","organization"]),ee=l("CommunicationPrincipalKind",["human","agent","system"]),te=l("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),De=l("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),ne=l("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),ie=l("CommunicationMembershipState",["active","revoked"]),D=l("CommunicationReceiptKind",["delivered","read"]),ae=l("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),E={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"},S=r({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1}}}),Ee=r({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:t.String_unsecure(),isOptional:!1},tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!1},kind:{type:Z,isOptional:!1},encryptionMode:{type:ne,isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1}}}),Re=r({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:t.String_unsecure(),isOptional:!1},kind:{type:ee,isOptional:!1},displayName:{type:t.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:t.String_unsecure(),isOptional:!0},createdAt:{type:t.DateTime(),isOptional:!1}}}),je=r({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:t.String_unsecure(),isOptional:!1},tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!0},roomKind:{type:t.String_unsecure(),isOptional:!1},connectionIds:{type:t.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),Ne=r({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:t.String_unsecure(),isOptional:!1},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},role:{type:t.String_unsecure(),isOptional:!1},state:{type:ie,isOptional:!1},capabilities:{type:t.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!0},revokedAt:{type:t.DateTime(),isOptional:!0},createdAt:{type:t.DateTime(),isOptional:!1}}}),Le=r({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:t.String_unsecure(),isOptional:!1},tenantId:{type:t.String_unsecure(),isOptional:!1},workspaceId:{type:t.String_unsecure(),isOptional:!1},spaceId:{type:t.String_unsecure(),isOptional:!1},network:{type:t.String_unsecure(),isOptional:!1},placement:{type:te,isOptional:!1},externalAccountRef:{type:t.String_unsecure(),isOptional:!1},credentialRef:{type:t.String_unsecure(),isOptional:!1},health:{type:ae,isOptional:!1},capabilities:{type:t.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),oe=r({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!1},mimeType:{type:t.String_unsecure(),isOptional:!1},sizeBytes:{type:t.Int_unsecure(),isOptional:!1},sha256:{type:t.String_unsecure(),isOptional:!1},createdAt:{type:t.DateTime(),isOptional:!1}}}),m=r({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:t.String_unsecure(),isOptional:!1},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},authorPrincipalId:{type:t.String_unsecure(),isOptional:!1},connectionId:{type:t.String_unsecure(),isOptional:!0},externalMessageId:{type:t.String_unsecure(),isOptional:!0},body:{type:t.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:t.JSONObject(),isOptional:!0},attachments:{type:oe,isArray:!0,isOptional:!0},replyToMessageId:{type:t.String_unsecure(),isOptional:!0},revision:{type:t.Int_unsecure(),isOptional:!1},deletedAt:{type:t.DateTime(),isOptional:!0},createdAt:{type:t.DateTime(),isOptional:!1},updatedAt:{type:t.DateTime(),isOptional:!1}}}),Pe=r({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:t.String_unsecure(),isOptional:!1},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:!0},connectionId:{type:t.String_unsecure(),isOptional:!0},principalId:{type:t.String_unsecure(),isOptional:!1},capabilities:{type:t.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:t.String_unsecure(),isOptional:!1},expiresAt:{type:t.DateTime(),isOptional:!0},revokedAt:{type:t.DateTime(),isOptional:!0},createdAt:{type:t.DateTime(),isOptional:!1}}});var x=["platform.communication-os"],ce={id:"communication-os.governed-work.v1",title:"CommunicationOS governed work contracts",body:"Persisted, scope-isolated reviews for identity, drafts, actions, handoffs, escalations, triage, summaries, agents, consent, retention, and policy. Managed decisions require current manager authority and every transition appends evidence.",kind:"reference",route:"/docs/communication-os/governed-work-v1",visibility:"public"},b=[re(ce.id)],pe=j("CommunicationGovernedWorkKind",["identity_review","draft","action","handoff","escalation","triage","summary","agent","consent","retention","policy"]),N=j("CommunicationGovernedWorkStatus",["pending","approved","rejected","blocked","resolved","revoked"]),_=C({name:"CommunicationGovernedWorkV1",fields:{id:{type:o.String_unsecure(),isOptional:!1},kind:{type:pe,isOptional:!1},status:{type:N,isOptional:!1},title:{type:o.String_unsecure(),isOptional:!1},threadId:{type:o.String_unsecure(),isOptional:!0},details:{type:o.JSONObject(),isOptional:!1},revision:{type:o.Int_unsecure(),isOptional:!1},createdBy:{type:o.String_unsecure(),isOptional:!1},createdAt:{type:o.DateTime(),isOptional:!1},updatedBy:{type:o.String_unsecure(),isOptional:!1},updatedAt:{type:o.DateTime(),isOptional:!1}}}),ue=se({meta:{key:"communication.governed_work.list",version:"1.0.0",stability:"experimental",owners:[...x],tags:["communication","governance","work","query"],description:"List governed work in one authorized messaging space",goal:"Drive review queues from replayable state rather than fixtures",context:"The server derives scope and filters optional kinds",docId:b},io:{input:S,output:C({name:"ListCommunicationGovernedWorkV1Output",fields:{items:{type:_,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}}),Qe=R({meta:{key:"communication.governed_work.create",version:"1.0.0",stability:"experimental",owners:[...x],tags:["communication","governance","work","create"],description:"Create one idempotent governed work item",goal:"Start an accountable review from a real user or runtime action",context:"Client-supplied tenant or principal authority is rejected",docId:b},io:{input:_,output:_},policy:{auth:"user"}}),Ke=R({meta:{key:"communication.governed_work.transition",version:"1.0.0",stability:"experimental",owners:[...x],tags:["communication","governance","work","transition"],description:"Apply one policy-valid governed work transition",goal:"Record approval, denial, resolution, blocking, or revocation evidence",context:"Managed kinds require current manager authority and terminal transitions fail closed",docId:b},io:{input:C({name:"TransitionCommunicationGovernedWorkV1Input",fields:{workId:{type:o.String_unsecure(),isOptional:!1},status:{type:N,isOptional:!1},reason:{type:o.String_unsecure(),isOptional:!0}}}),output:_},policy:{auth:"user"}});import{defineCommand as le,defineQuery as P,docId as de}from"@lssm/lib.contracts-spec";import{defineEnum as me,defineSchemaModel as O,ScalarTypeEnum as i}from"@lssm/lib.schema";var k=["platform.communication-os"],ye={id:"communication-os.identity-resolution.v1",title:"CommunicationOS identity resolution contracts",body:"Scope-isolated account and contact projections plus a human-reviewed identity merge or rejection lifecycle. Provider credentials and raw identity evidence never enter public outputs.",kind:"reference",route:"/docs/communication-os/identity-resolution-v1",visibility:"public"},A=[de(ye.id)],L=me("CommunicationIdentityReviewStatus",["pending","merged","rejected"]),ge=O({name:"CommunicationAccountV2",description:"Public-safe provider account projection in one authorized space",fields:{id:{type:i.String_unsecure(),isOptional:!1},network:{type:i.String_unsecure(),isOptional:!1},externalAccountRef:{type:i.String_unsecure(),isOptional:!1},placement:{type:i.String_unsecure(),isOptional:!1},health:{type:i.String_unsecure(),isOptional:!1},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1}}}),fe=O({name:"CommunicationContactV2",description:"Participant projection derived from persisted scoped messages",fields:{principalId:{type:i.String_unsecure(),isOptional:!1},displayName:{type:i.String_unsecure(),isOptional:!0},roomIds:{type:i.String_unsecure(),isArray:!0,isOptional:!1},messageCount:{type:i.Int_unsecure(),isOptional:!1},lastSeenAt:{type:i.DateTime(),isOptional:!1}}}),Oe=O({name:"ListCommunicationAccountsV2Output",fields:{accounts:{type:ge,isArray:!0,isOptional:!1}}}),Se=O({name:"ListCommunicationContactsV2Output",fields:{contacts:{type:fe,isArray:!0,isOptional:!1}}}),he=P({meta:{key:"communication.account.list",version:"2.0.0",stability:"experimental",owners:[...k],tags:["communication","account","identity"],description:"List public-safe provider accounts in one authorized space",goal:"Expose account readiness without leaking credential references",context:"Authority is derived by the server from the authenticated scope",docId:A},io:{input:S,output:Oe},policy:{auth:"user"}}),_e=P({meta:{key:"communication.contact.list",version:"2.0.0",stability:"experimental",owners:[...k],tags:["communication","contact","identity"],description:"List persisted participant projections in one authorized space",goal:"Provide a real scoped contact index without provider identity leakage",context:"Contacts are replayable projections, never transient UI inference",docId:A},io:{input:S,output:Se},policy:{auth:"user"}}),He=le({meta:{key:"communication.identity.decide",version:"1.0.0",stability:"experimental",owners:[...k],tags:["communication","identity","review","governance"],description:"Merge or reject one pending identity review",goal:"Require an auditable human decision before cross-channel identity linkage",context:"Only authorized managers may decide and each review is single-transition",docId:A},io:{input:O({name:"DecideCommunicationIdentityV1Input",fields:{reviewId:{type:i.String_unsecure(),isOptional:!1},decision:{type:L,isOptional:!1},reason:{type:i.String_unsecure(),isOptional:!0}}}),output:O({name:"DecideCommunicationIdentityV1Output",fields:{reviewId:{type:i.String_unsecure(),isOptional:!1},status:{type:L,isOptional:!1},revision:{type:i.Int_unsecure(),isOptional:!1}}})},policy:{auth:"admin"}});import{defineCommand as y,defineQuery as G,docId as ve}from"@lssm/lib.contracts-spec";import{defineSchemaModel as d,ScalarTypeEnum as n}from"@lssm/lib.schema";var c=["platform.communication-os"],p=[ve(E.id)],Q={VALIDATION_FAILED:{description:"Message content, replay key, or attachment references are invalid.",http:422,when:"The request is malformed, empty, duplicated, or exceeds a declared limit."},FORBIDDEN:{description:"The authenticated principal cannot access or mutate the selected room.",http:403,when:"Workspace, space, room membership, connection binding, or send authority is absent."},SERVICE_UNAVAILABLE:{description:"The scoped messaging runtime or search projection is unavailable.",http:503,when:"A required durable runtime dependency cannot safely answer the operation."}},et=y({meta:{key:"communication.message.send",version:"2.1.0",stability:"experimental",owners:[...c],tags:["communication","message","send","authority"],description:"Send a canonical room message as an explicitly attributed principal",goal:"Give authorized humans and agents the same audited messaging path",context:"The runtime must re-evaluate membership, authority, consent, encryption posture, and connection policy immediately before dispatch",docId:p},io:{input:m,output:m},policy:{auth:"user"}}),Ie=d({name:"SendCommunicationMessageV3Input",fields:{workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},connectionId:{type:n.String_unsecure(),isOptional:!0},idempotencyKey:{type:n.String_unsecure(),isOptional:!1},body:{type:n.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:n.JSONObject(),isOptional:!0},attachmentIds:{type:n.String_unsecure(),isArray:!0,isOptional:!0},replyToMessageId:{type:n.String_unsecure(),isOptional:!0}}}),tt=y({meta:{key:"communication.message.send",version:"3.0.0",stability:"experimental",owners:[...c],tags:["communication","message","send","authority","idempotency"],description:"Send a canonical room message from a JSON-safe, replay-safe client intent",goal:"Keep tenant, author, revision, identifiers, and timestamps server-owned",context:"The runtime derives tenant and author from the authenticated context, verifies workspace/space/room membership and attachment ownership, then applies the idempotency key before dispatch",docId:p},io:{input:Ie,output:m,errors:Q},policy:{auth:"user"}}),K=d({name:"MutateCommunicationMessageV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},messageId:{type:n.String_unsecure(),isOptional:!1},actorPrincipalId:{type:n.String_unsecure(),isOptional:!1},body:{type:n.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:n.JSONObject(),isOptional:!0},expectedRevision:{type:n.Int_unsecure(),isOptional:!1}}}),nt=y({meta:{key:"communication.message.edit",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","message","edit"],description:"Edit a message with optimistic revision protection",goal:"Preserve provider edits in the canonical event journal without rewriting history",context:"Unsupported provider edits must return an explicit capability error rather than silently diverge",docId:p},io:{input:K,output:m},policy:{auth:"user"}}),it=y({meta:{key:"communication.message.delete",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","message","delete"],description:"Append an auditable message deletion or provider-retention marker",goal:"Represent local and provider deletion honestly across heterogeneous networks",context:"The event journal retains non-content evidence even when message content is erased",docId:p},io:{input:K,output:m},policy:{auth:"user"}}),B=d({name:"CommunicationReactionV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},messageId:{type:n.String_unsecure(),isOptional:!1},principalId:{type:n.String_unsecure(),isOptional:!1},reaction:{type:n.String_unsecure(),isOptional:!1},active:{type:n.Boolean(),isOptional:!1}}}),at=y({meta:{key:"communication.reaction.set",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","message","reaction"],description:"Add or remove a reaction on a canonical message",goal:"Normalize lightweight acknowledgement across supported networks",context:"Adapters report unsupported reactions explicitly",docId:p},io:{input:B,output:B},policy:{auth:"user"}}),q=d({name:"CommunicationReceiptV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},messageId:{type:n.String_unsecure(),isOptional:!1},principalId:{type:n.String_unsecure(),isOptional:!1},kind:{type:D,isOptional:!1},occurredAt:{type:n.DateTime(),isOptional:!1}}}),ot=y({meta:{key:"communication.receipt.record",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","message","receipt"],description:"Record a delivered or read receipt",goal:"Keep unread and delivery projections consistent across clients",context:"Privacy policy may suppress outbound read receipts per space or connection",docId:p},io:{input:q,output:q},policy:{auth:"user"}}),z=d({name:"CommunicationInboxStateV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},roomId:{type:n.String_unsecure(),isOptional:!1},principalId:{type:n.String_unsecure(),isOptional:!1},pinned:{type:n.Boolean(),isOptional:!1},archived:{type:n.Boolean(),isOptional:!1},snoozedUntil:{type:n.DateTime(),isOptional:!0},reminderAt:{type:n.DateTime(),isOptional:!0}}}),st=y({meta:{key:"communication.inbox-state.set",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","inbox","pin","archive","snooze","reminder"],description:"Set one principal's pin, archive, snooze, and reminder state",goal:"Synchronize inbox organization without leaking message content",context:"Personal inbox state is principal-private even inside organization workspaces",docId:p},io:{input:z,output:z},policy:{auth:"user"}}),Ce=d({name:"SearchCommunicationMessagesV2Input",fields:{tenantId:{type:n.String_unsecure(),isOptional:!1},workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},query:{type:n.String_unsecure(),isOptional:!1},roomIds:{type:n.String_unsecure(),isArray:!0,isOptional:!0},limit:{type:n.Int_unsecure(),isOptional:!0}}}),W=d({name:"SearchCommunicationMessagesV2Output",fields:{messages:{type:m,isArray:!0,isOptional:!1},nextCursor:{type:n.String_unsecure(),isOptional:!0}}}),xe=G({meta:{key:"communication.message.search",version:"2.0.0",stability:"experimental",owners:[...c],tags:["communication","message","search"],description:"Search messages within exactly one authorized space",goal:"Provide cross-network search without cross-space index leakage",context:"Client-encrypted spaces search a local decrypted projection; server-indexable spaces use governed indexes",docId:p},io:{input:Ce,output:W},policy:{auth:"user"}}),be=d({name:"SearchCommunicationMessagesV3Input",fields:{workspaceId:{type:n.String_unsecure(),isOptional:!1},spaceId:{type:n.String_unsecure(),isOptional:!1},query:{type:n.String_unsecure(),isOptional:!1},roomIds:{type:n.String_unsecure(),isArray:!0,isOptional:!0},limit:{type:n.Int_unsecure(),isOptional:!0}}}),rt=G({meta:{key:"communication.message.search",version:"3.0.0",stability:"experimental",owners:[...c],tags:["communication","message","search","authority"],description:"Search messages inside the authenticated tenant and an authorized selected space",goal:"Remove client-supplied tenant authority from canonical search transport",context:"The runtime derives tenant from the authenticated context and verifies workspace, space, and optional room filters before querying any index",docId:p},io:{input:be,output:W,errors:Q},policy:{auth:"user"}}),ct={key:"communication.message.replay-authority",version:"1.0.0",invariants:["Recheck current room membership and connection authority before returning a prior send result.","A request key cannot substitute principal, room, connection, text, subject, HTML, metadata, encryption envelope, reply target or attachment IDs.","Queued acceptance is not provider delivery.","Requested attachments require a complete resolved manifest; missing attachment support must not silently send an incomplete message."]},pt={key:"communication.message.queue-custody",version:"1.0.0",invariants:["An external send requires a durable journal-and-outbox adapter before it can be accepted.","Queued acceptance requires an exact persisted delivery record for the accepted message, connection and scope.","Outbox-key conflicts cannot silently drop provider delivery or report false success.","Message delivery uses delivery:<send idempotency key>; alternate delivery keys cannot duplicate a prior accepted message.","Message identity allocated by an atomic journal replay remains the delivery target; retries do not refer to discarded candidate IDs."]},ut={key:"communication.delivery.context-reproof",version:"1.0.0",invariants:["Resolve the current delivery context before adapter access and again after provider health checks immediately before send.","Changed recipient, connection, credential binding, content, reply, attachment or routing metadata invalidates the pending send.","Missing or changed context yields a definitive rejection without invoking provider.send.","Journal delivery resolution requires current active sender membership and applicable agent grants; revoked or deleted messages cannot resolve for sending.","Context reproof supplements canonical Runtime Node authority and does not replace its approval or effect fence."]};import{defineCommand as Te,defineQuery as V}from"@lssm/lib.contracts-spec/operations";import{defineSchemaModel as f,ScalarTypeEnum as s}from"@lssm/lib.schema";import{defineEnum as u}from"@lssm/lib.schema";var g=u("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),h=u("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),J=u("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),U=u("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),F=u("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),w=u("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),H=u("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),Y=u("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),mt=u("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as a,ScalarTypeEnum as e}from"@lssm/lib.schema";var ke=a({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:g,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}}}),Ae=a({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:w,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}}}),Ot=a({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:ke,isArray:!0,isOptional:!1},identityLinks:{type:Ae,isArray:!0,isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),we=a({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=a({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}}}),Me=a({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}}}),T=a({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:g,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:J,isOptional:!1,defaultValue:"received"},intent:{type:Me,isOptional:!0},attachments:{type:we,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),St=a({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:g,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}}}),v=a({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:h,isOptional:!1,defaultValue:"open"},participantIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},channelTypes:{type:g,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}}}),X=a({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:Y,isOptional:!1,defaultValue:"draft_only"}}}),ht=a({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:U,isOptional:!1,defaultValue:"drafted"},generatedBy:{type:e.String_unsecure(),isOptional:!0},modelName:{type:e.String_unsecure(),isOptional:!0},promptVersion:{type:e.String_unsecure(),isOptional:!0},policyVersion:{type:e.String_unsecure(),isOptional:!0},reviewedBy:{type:e.String_unsecure(),isOptional:!0},reviewedAt:{type:e.DateTime(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),_t=a({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:X,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}}}),vt=a({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:X,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}}}),It=a({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:w,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 I=["platform.communication-os"],wt=Te({meta:{key:"communication.thread.updateStatus",version:"1.0.0",stability:"experimental",owners:[...I],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:f({name:"UpdateThreadStatusInput",fields:{threadId:{type:s.String_unsecure(),isOptional:!1},status:{type:h,isOptional:!1},reason:{type:s.String_unsecure(),isOptional:!0}}}),output:v},policy:{auth:"user"}}),Mt=V({meta:{key:"communication.thread.get",version:"1.0.0",stability:"experimental",owners:[...I],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:f({name:"GetThreadInput",fields:{threadId:{type:s.String_unsecure(),isOptional:!1}}}),output:f({name:"GetThreadOutput",fields:{thread:{type:v,isOptional:!1},messages:{type:T,isArray:!0,isOptional:!1},links:{type:M,isArray:!0,isOptional:!0}}})},policy:{auth:"user"}}),Tt=V({meta:{key:"communication.thread.search",version:"1.0.0",stability:"experimental",owners:[...I],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:f({name:"SearchThreadsInput",fields:{status:{type:h,isOptional:!0},participantId:{type:s.String_unsecure(),isOptional:!0},channelType:{type:g,isOptional:!0},linkedKindId:{type:s.String_unsecure(),isOptional:!0},linkedInstanceId:{type:s.String_unsecure(),isOptional:!0},assignedTo:{type:s.String_unsecure(),isOptional:!0},limit:{type:s.Int_unsecure(),isOptional:!0,defaultValue:20}}}),output:f({name:"SearchThreadsOutput",fields:{threads:{type:v,isArray:!0,isOptional:!1},total:{type:s.Int_unsecure(),isOptional:!1},hasMore:{type:s.Boolean(),isOptional:!1}}})},policy:{auth:"user"}}),Vt=V({meta:{key:"communication.message.list",version:"1.0.0",stability:"experimental",owners:[...I],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:f({name:"ListMessagesInput",fields:{threadId:{type:s.String_unsecure(),isOptional:!1}}}),output:f({name:"ListMessagesOutput",fields:{messages:{type:T,isArray:!0,isOptional:!1}}})},policy:{auth:"user"}});export{Mt as GetThreadQuery,he as ListCommunicationAccountsV2Query,_e as ListCommunicationContactsV2Query,ue as ListCommunicationGovernedWorkV1Query,Vt as ListMessagesQuery,xe as SearchCommunicationMessagesV2Query,Tt as SearchThreadsQuery,wt as UpdateThreadStatusCommand};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
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"]),r=i("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),s=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"]),_=i("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";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}}}),C=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}}}),m=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}}}),g=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}}}),I=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:s,isOptional:!1,defaultValue:"received"},intent:{type:f,isOptional:!0},attachments:{type:m,isArray:!0,isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),x=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}}}),b=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:n,isArray:!0,isOptional:!1},links:{type:g,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"}}}),T=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}}}),v=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}}}),M=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{l as ActionSafetyModeEnum,M as AgentSuggestionModel,m as AttachmentModel,d as ChannelAccountModel,n as ChannelTypeEnum,c as CommunicationActionModel,x as CommunicationFormIntakeModel,I as CommunicationMessageModel,C as CommunicationParticipantModel,k as CommunicationSummaryModel,b as CommunicationThreadModel,_ as FeedbackOutcomeEnum,v as HandoffPacketModel,p as HandoffStatusEnum,y as IdentityLinkModel,u as IntentCategoryEnum,f as MessageIntentModel,s as MessageStatusEnum,T as ReplyDraftModel,o as ReplyStatusEnum,a as SuggestionStatusEnum,g as ThreadLinkModel,r as ThreadStatusEnum};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var i=new Set(["send_reply","create_handoff","link_thread","request_escalation"]),t=new Set(["send_reply"]),a=new Set(["create_thread","ingest_message","classify_intent","generate_summary","extract_actions","draft_reply","propose_identity_link","record_feedback"]);function r(e){let n=i.has(e);if(e==="read")return{actionKind:e,authorityClass:"read",autonomyClass:"read_only",requiresApproval:!1,highImpact:n,reason:"Read-only CommunicationOS inspection is not a customer-facing mutation."};if(a.has(e))return{actionKind:e,authorityClass:"draft",autonomyClass:"draft_only",requiresApproval:!1,highImpact:n,reason:"CommunicationOS drafting and evidence preparation persist reviewable records without sending or mutating external systems."};return{actionKind:e,authorityClass:t.has(e)?"reserved_human":"execute",autonomyClass:t.has(e)?"reserved_human_only":"approval_required",requiresApproval:!0,highImpact:n,reason:"Customer-facing or cross-owner CommunicationOS mutations require explicit operator approval evidence before execution."}}function s(e){let n=r(e.actionKind),o=[];if(e.actorKind==="agent"&&e.mode!=="draft"&&n.highImpact)o.push({code:"agent_execution_forbidden",message:"Agent CommunicationOS commands may read or draft but cannot execute customer-facing or cross-owner actions directly.",path:"mode"});if(n.requiresApproval&&!e.approvalEvidence)o.push({code:"approval_required",message:"High-impact CommunicationOS actions require approval evidence before authorized execution.",path:"approvalEvidence"});if((e.actionKind==="send_reply"||e.actionKind==="create_handoff")&&!e.targetId)o.push({code:"source_evidence_required",message:"Customer-facing replies and handoffs require a target evidence record.",path:"targetId"});return o}export{r as classifyCommunicationAction,s as validateAgentCommunicationCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEnum as o}from"@lssm/lib.schema";var r=o("ChannelType",["email","sms","whatsapp","telegram","matrix","web_chat","voice","internal_chat","custom_adapter","future_bridge","unknown"]),s=o("ThreadStatus",["open","waiting_on_human","waiting_on_external_party","action_required","resolved","archived"]),c=o("MessageStatus",["received","normalized","classified","linked","triaged","replied","archived"]),m=o("ReplyStatus",["drafted","requires_review","approved","sent","failed","blocked_by_policy"]),u=o("HandoffStatus",["created","assigned","acknowledged","completed","reopened"]),d=o("SuggestionStatus",["generated","shown","accepted","edited","rejected","applied","expired"]),p=o("IntentCategory",["support","sales","bug_report","feature_request","billing","onboarding","coordination","general","spam","escalation"]),l=o("ActionSafetyMode",["read_only","draft_only","requires_review","policy_executable","blocked"]),g=o("FeedbackOutcome",["accepted","edited","rejected","unsafe","incomplete"]);import{CompanyOsTenantGovernanceEnvelopeSchema as h}from"@lssm/lib.companyos-spec/types/tenant-governance-envelope";import{z as e}from"zod";var C=e.string().min(1),y=e.enum(["inbound","outbound","internal"]),S=e.enum(["not_required","pending","applied","partially_applied"]),a=e.object({id:e.string().min(1),schemaVersion:e.literal("1.0.0"),channel:C,direction:y,threadRef:e.string().min(1),messageRef:e.string().min(1),participantRefs:e.array(e.string().min(1)).min(1),observedAt:e.string().datetime(),bodyNormalized:e.string().min(1),consent:e.object({status:e.enum(["not_recorded","granted","withdrawn","expired"]),subjectConsentRef:e.string().min(1).optional(),legalBasisRef:e.string().min(1).optional()}).strict(),redaction:e.object({status:S,redactedFields:e.array(e.string().min(1)),decisionRef:e.string().min(1).optional()}).strict(),evidenceRefs:e.array(e.string().min(1)).min(1),source:e.object({adapterRef:e.string().min(1),externalRecordRef:e.string().min(1),networkAccessed:e.literal(!1)}).strict()}).strict(),I=e.object({ingestion:a,governance:h}).strict().superRefine((n,t)=>{if(n.governance.subjectRef.id!==n.ingestion.id)t.addIssue({code:"custom",path:["governance","subjectRef","id"],message:"governance subject must reference the normalized ingestion"});if(n.governance.subjectRef.type!=="communication.ingestion")t.addIssue({code:"custom",path:["governance","subjectRef","type"],message:"governance subject type must be communication.ingestion"})}),w={thread:"CommunicationThread",message:"CommunicationMessage",participant:"CommunicationParticipant",consent:"SubjectConsent"};var _=new Set(["send_reply","create_handoff","link_thread","request_escalation"]),f=new Set(["send_reply"]),v=new Set(["create_thread","ingest_message","classify_intent","generate_summary","extract_actions","draft_reply","propose_identity_link","record_feedback"]);function x(n){let t=_.has(n);if(n==="read")return{actionKind:n,authorityClass:"read",autonomyClass:"read_only",requiresApproval:!1,highImpact:t,reason:"Read-only CommunicationOS inspection is not a customer-facing mutation."};if(v.has(n))return{actionKind:n,authorityClass:"draft",autonomyClass:"draft_only",requiresApproval:!1,highImpact:t,reason:"CommunicationOS drafting and evidence preparation persist reviewable records without sending or mutating external systems."};return{actionKind:n,authorityClass:f.has(n)?"reserved_human":"execute",autonomyClass:f.has(n)?"reserved_human_only":"approval_required",requiresApproval:!0,highImpact:t,reason:"Customer-facing or cross-owner CommunicationOS mutations require explicit operator approval evidence before execution."}}function j(n){let t=x(n.actionKind),i=[];if(n.actorKind==="agent"&&n.mode!=="draft"&&t.highImpact)i.push({code:"agent_execution_forbidden",message:"Agent CommunicationOS commands may read or draft but cannot execute customer-facing or cross-owner actions directly.",path:"mode"});if(t.requiresApproval&&!n.approvalEvidence)i.push({code:"approval_required",message:"High-impact CommunicationOS actions require approval evidence before authorized execution.",path:"approvalEvidence"});if((n.actionKind==="send_reply"||n.actionKind==="create_handoff")&&!n.targetId)i.push({code:"source_evidence_required",message:"Customer-facing replies and handoffs require a target evidence record.",path:"targetId"});return i}var O={ActionSafetyModeEnum:l,ChannelTypeEnum:r,FeedbackOutcomeEnum:g,HandoffStatusEnum:u,IntentCategoryEnum:p,MessageStatusEnum:c,NormalizedCommunicationIngestionRecordSchema:a,ReplyStatusEnum:m,SuggestionStatusEnum:d,ThreadStatusEnum:s};export{O as CommunicationSpecValidationModels,x as classifyCommunicationAction,j as validateAgentCommunicationCommand};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommunicationOS AI routing capabilities — E2 Phase E deliverable.
|
|
3
|
+
*
|
|
4
|
+
* Two capabilities gate the AI feature surface by persona role:
|
|
5
|
+
*
|
|
6
|
+
* - `CommsAiFullCapability` (`communication-os.ai.use`) — full AI set for operations_manager,
|
|
7
|
+
* frontline_staff, and enterprise_admin: summarize, draft reply, suggest handoff.
|
|
8
|
+
*
|
|
9
|
+
* - `CommsAiAuditorCapability` (`communication-os.thread.explain`) — read-only auditor lens:
|
|
10
|
+
* thread explanation/summarization only; no draft-reply, no handoff-suggest writes.
|
|
11
|
+
*
|
|
12
|
+
* Usage (E3 handler wiring):
|
|
13
|
+
* Import `COMMS_AI_CAPABILITY_KEYS` to reference capability keys without
|
|
14
|
+
* string literals. The capability's `provides` list is the single source of
|
|
15
|
+
* truth for which operations each role is allowed to invoke via the AI router.
|
|
16
|
+
*
|
|
17
|
+
* Persona routing:
|
|
18
|
+
* - operations_manager, frontline_staff, enterprise_admin → `communication-os.ai.use`
|
|
19
|
+
* - auditor → `communication-os.thread.explain` (handler enforces redaction)
|
|
20
|
+
* - founder_approver → `communication-os.ai.use`
|
|
21
|
+
*/
|
|
22
|
+
import type { CapabilitySpec } from '@lssm/lib.contracts-spec';
|
|
23
|
+
/**
|
|
24
|
+
* Canonical capability keys for CommunicationOS AI routing.
|
|
25
|
+
*
|
|
26
|
+
* Reference these constants in capability guards, handler registries (E3),
|
|
27
|
+
* and NavSurface capability bindings instead of raw string literals.
|
|
28
|
+
*/
|
|
29
|
+
export declare const COMMS_AI_CAPABILITY_KEYS: {
|
|
30
|
+
/** Full AI feature set: summarize + draft reply + suggest handoff. */
|
|
31
|
+
readonly FULL: "communication-os.ai.use";
|
|
32
|
+
/** Auditor read-only AI lens: thread explanation only (no write paths). */
|
|
33
|
+
readonly AUDITOR: "communication-os.thread.explain";
|
|
34
|
+
};
|
|
35
|
+
export type CommsAiCapabilityKey = (typeof COMMS_AI_CAPABILITY_KEYS)[keyof typeof COMMS_AI_CAPABILITY_KEYS];
|
|
36
|
+
/**
|
|
37
|
+
* Full CommunicationOS AI capability.
|
|
38
|
+
*
|
|
39
|
+
* Grants access to all three AI routing operations defined in Phase E1:
|
|
40
|
+
* - `comms.thread.summarize` — persona-scoped thread summary
|
|
41
|
+
* - `comms.reply.draft` — context-aware reply draft (policy-checked)
|
|
42
|
+
* - `comms.handoff.suggest` — AI-suggested handoff analysis (suggestion only)
|
|
43
|
+
*
|
|
44
|
+
* Assign to: `operations_manager`, `frontline_staff`, `enterprise_admin`,
|
|
45
|
+
* and (Phase G) `founder_approver`.
|
|
46
|
+
*
|
|
47
|
+
* NOT to be assigned to `auditor` — use `CommsAiAuditorCapability` instead.
|
|
48
|
+
*/
|
|
49
|
+
export declare const CommsAiFullCapability: CapabilitySpec;
|
|
50
|
+
/**
|
|
51
|
+
* Auditor read-only CommunicationOS AI capability.
|
|
52
|
+
*
|
|
53
|
+
* Grants access to thread explanation (summarization) ONLY, with the
|
|
54
|
+
* handler constrained to auditor persona rules:
|
|
55
|
+
* - `audiencePersona` is forced to `'auditor'` regardless of caller value
|
|
56
|
+
* - PII fields are redacted at the handler level
|
|
57
|
+
* - `CommunicationSummaryModel.actions` and `.decisions` are returned without
|
|
58
|
+
* owner/PII identifiers
|
|
59
|
+
*
|
|
60
|
+
* Provides:
|
|
61
|
+
* - `comms.thread.summarize` (auditor-scoped, redacted output)
|
|
62
|
+
*
|
|
63
|
+
* Does NOT provide:
|
|
64
|
+
* - `comms.reply.draft` — auditors may not draft replies
|
|
65
|
+
* - `comms.handoff.suggest` — auditors may not initiate handoffs
|
|
66
|
+
*
|
|
67
|
+
* Assign to: `auditor` persona only.
|
|
68
|
+
*
|
|
69
|
+
* The `communication-os.ai.use` capability MUST NOT be assigned to auditors.
|
|
70
|
+
* Role-gate enforcement is the responsibility of the capability router (E3).
|
|
71
|
+
*/
|
|
72
|
+
export declare const CommsAiAuditorCapability: CapabilitySpec;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{defineCapability as e,StabilityEnum as n}from"@lssm/lib.contracts-spec";var o={INBOX_READ:"communication-os.inbox.read",INBOX_MANAGE:"communication-os.inbox.manage",SPACES_READ:"communication-os.spaces.read",ROOMS_READ:"communication-os.rooms.read",ROOMS_WRITE:"communication-os.rooms.write",ROOM_MEMBERS_MANAGE:"communication-os.rooms.members.manage",SEARCH:"communication-os.search",REPLY_SEND:"communication-os.reply.send",ATTACHMENTS_READ:"communication-os.attachments.read",IDENTITY_MANAGE:"communication-os.identity.manage",IDENTITY_MERGE:"communication-os.identity.merge",AGENTS_MANAGE:"communication-os.agents.manage",CONNECTIONS_MANAGE:"communication-os.connections.manage",GOVERNANCE_MANAGE:"communication-os.governance.manage",AUTOMATION_MANAGE:"communication-os.automation.manage",ACTIONS_APPROVE:"communication-os.actions.approve",HANDOFFS_APPROVE:"communication-os.handoffs.approve",AI_USE:"communication-os.ai.use",THREAD_EXPLAIN:"communication-os.thread.explain",AUDIT_READ:"communication-os.audit.read",AUDIT_EXPORT:"communication-os.audit.export"},c=[o.INBOX_READ,o.SPACES_READ,o.ROOMS_READ,o.ROOMS_WRITE,o.SEARCH,o.IDENTITY_MANAGE,o.AGENTS_MANAGE,o.CONNECTIONS_MANAGE,o.GOVERNANCE_MANAGE,o.AUTOMATION_MANAGE,o.REPLY_SEND,o.AUDIT_READ],i={"comms.room.read":o.ROOMS_READ,"comms.room.write":o.ROOMS_WRITE,"comms.room.members.manage":o.ROOM_MEMBERS_MANAGE,"comms.connections.manage":o.CONNECTIONS_MANAGE,"comms.authority.manage":o.GOVERNANCE_MANAGE,"comms.search":o.SEARCH,"comms.thread.write":o.REPLY_SEND,"comms.inbox.archive":o.INBOX_MANAGE,"comms.action.approve":o.ACTIONS_APPROVE,"comms.handoff.approve":o.HANDOFFS_APPROVE,"comms.identity.merge":o.IDENTITY_MERGE,"comms.audit.export":o.AUDIT_EXPORT,"comms.ai":o.AI_USE,"comms.thread.explain":o.THREAD_EXPLAIN},A=Object.freeze(Object.keys(i));function r(a){return i[a]??a}function E(a){return[...new Set(a.map(r))]}function p(a){return a.some((s)=>(s in i))}var t=["platform.communication-os","platform.ai-routing"],m={FULL:o.AI_USE,AUDITOR:o.THREAD_EXPLAIN},I=e({meta:{key:m.FULL,version:"2.0.0",kind:"api",stability:n.Experimental,description:"Full CommunicationOS AI routing capability: thread summarization, reply drafting, and handoff suggestion",owners:[...t],tags:["comms","ai","routing","summarize","draft","handoff"]},provides:[{surface:"operation",key:"comms.thread.summarize",version:"1.0.0",description:"AI thread summarization with persona-adaptive redaction (audiencePersona resolved from actor role)"},{surface:"operation",key:"comms.reply.draft",version:"1.0.0",description:"AI reply drafting; draft status reflects policy evaluation (drafted | requires_review)"},{surface:"operation",key:"comms.handoff.suggest",version:"1.0.0",description:"AI handoff suggestion (suggestion only \u2014 does not create HandoffPacket)"}],requires:[{key:"communication-spec",version:"1.0.0",reason:"Core communication contracts (thread, message, handoff models) must be available"}]}),O=e({meta:{key:m.AUDITOR,version:"2.0.0",kind:"api",stability:n.Experimental,description:"Auditor read-only AI capability: thread explanation (summarize) only, with forced PII redaction",owners:[...t],tags:["comms","ai","auditor","read-only","explain","thread"]},provides:[{surface:"operation",key:"comms.thread.summarize",version:"1.0.0",description:"Read-only thread explanation for auditor persona; handler forces audiencePersona=auditor and redacts PII"}],requires:[{key:"communication-spec",version:"1.0.0",reason:"Core communication contracts (thread, message models) must be available"}]});export{m as COMMS_AI_CAPABILITY_KEYS,O as CommsAiAuditorCapability,I as CommsAiFullCapability};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical CommunicationOS capability identifiers.
|
|
3
|
+
*
|
|
4
|
+
* The `communication-os.*` namespace is shared by route discovery, role
|
|
5
|
+
* projections, contextual slots, and UI action gates. Operation keys such as
|
|
6
|
+
* `comms.thread.summarize` remain operation identifiers and are intentionally
|
|
7
|
+
* not part of this capability vocabulary.
|
|
8
|
+
*/
|
|
9
|
+
export declare const COMMUNICATION_OS_CAPABILITY_KEYS: {
|
|
10
|
+
readonly INBOX_READ: 'communication-os.inbox.read';
|
|
11
|
+
readonly INBOX_MANAGE: 'communication-os.inbox.manage';
|
|
12
|
+
readonly SPACES_READ: 'communication-os.spaces.read';
|
|
13
|
+
readonly ROOMS_READ: 'communication-os.rooms.read';
|
|
14
|
+
readonly ROOMS_WRITE: 'communication-os.rooms.write';
|
|
15
|
+
readonly ROOM_MEMBERS_MANAGE: 'communication-os.rooms.members.manage';
|
|
16
|
+
readonly SEARCH: 'communication-os.search';
|
|
17
|
+
readonly REPLY_SEND: 'communication-os.reply.send';
|
|
18
|
+
readonly ATTACHMENTS_READ: 'communication-os.attachments.read';
|
|
19
|
+
readonly IDENTITY_MANAGE: 'communication-os.identity.manage';
|
|
20
|
+
readonly IDENTITY_MERGE: 'communication-os.identity.merge';
|
|
21
|
+
readonly AGENTS_MANAGE: 'communication-os.agents.manage';
|
|
22
|
+
readonly CONNECTIONS_MANAGE: 'communication-os.connections.manage';
|
|
23
|
+
readonly GOVERNANCE_MANAGE: 'communication-os.governance.manage';
|
|
24
|
+
readonly AUTOMATION_MANAGE: 'communication-os.automation.manage';
|
|
25
|
+
readonly ACTIONS_APPROVE: 'communication-os.actions.approve';
|
|
26
|
+
readonly HANDOFFS_APPROVE: 'communication-os.handoffs.approve';
|
|
27
|
+
readonly AI_USE: 'communication-os.ai.use';
|
|
28
|
+
readonly THREAD_EXPLAIN: 'communication-os.thread.explain';
|
|
29
|
+
readonly AUDIT_READ: 'communication-os.audit.read';
|
|
30
|
+
readonly AUDIT_EXPORT: 'communication-os.audit.export';
|
|
31
|
+
};
|
|
32
|
+
export type CommunicationOsCapabilityKey = (typeof COMMUNICATION_OS_CAPABILITY_KEYS)[keyof typeof COMMUNICATION_OS_CAPABILITY_KEYS];
|
|
33
|
+
export declare const COMMUNICATION_OS_ROUTE_CAPABILITY_KEYS: readonly ["communication-os.inbox.read", "communication-os.spaces.read", "communication-os.rooms.read", "communication-os.rooms.write", "communication-os.search", "communication-os.identity.manage", "communication-os.agents.manage", "communication-os.connections.manage", "communication-os.governance.manage", "communication-os.automation.manage", "communication-os.reply.send", "communication-os.audit.read"];
|
|
34
|
+
export declare const LEGACY_COMMUNICATION_OS_CAPABILITY_KEYS: readonly string[];
|
|
35
|
+
/** Canonicalize one persisted capability during the append-only v3 migration. */
|
|
36
|
+
export declare function canonicalCommunicationOsCapability(value: string): string;
|
|
37
|
+
/** Canonicalize and deduplicate one persisted capability set. */
|
|
38
|
+
export declare function canonicalCommunicationOsCapabilities(values: readonly string[]): readonly string[];
|
|
39
|
+
export declare function hasLegacyCommunicationOsCapability(values: readonly string[]): boolean;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var o={INBOX_READ:"communication-os.inbox.read",INBOX_MANAGE:"communication-os.inbox.manage",SPACES_READ:"communication-os.spaces.read",ROOMS_READ:"communication-os.rooms.read",ROOMS_WRITE:"communication-os.rooms.write",ROOM_MEMBERS_MANAGE:"communication-os.rooms.members.manage",SEARCH:"communication-os.search",REPLY_SEND:"communication-os.reply.send",ATTACHMENTS_READ:"communication-os.attachments.read",IDENTITY_MANAGE:"communication-os.identity.manage",IDENTITY_MERGE:"communication-os.identity.merge",AGENTS_MANAGE:"communication-os.agents.manage",CONNECTIONS_MANAGE:"communication-os.connections.manage",GOVERNANCE_MANAGE:"communication-os.governance.manage",AUTOMATION_MANAGE:"communication-os.automation.manage",ACTIONS_APPROVE:"communication-os.actions.approve",HANDOFFS_APPROVE:"communication-os.handoffs.approve",AI_USE:"communication-os.ai.use",THREAD_EXPLAIN:"communication-os.thread.explain",AUDIT_READ:"communication-os.audit.read",AUDIT_EXPORT:"communication-os.audit.export"},A=[o.INBOX_READ,o.SPACES_READ,o.ROOMS_READ,o.ROOMS_WRITE,o.SEARCH,o.IDENTITY_MANAGE,o.AGENTS_MANAGE,o.CONNECTIONS_MANAGE,o.GOVERNANCE_MANAGE,o.AUTOMATION_MANAGE,o.REPLY_SEND,o.AUDIT_READ],a={"comms.room.read":o.ROOMS_READ,"comms.room.write":o.ROOMS_WRITE,"comms.room.members.manage":o.ROOM_MEMBERS_MANAGE,"comms.connections.manage":o.CONNECTIONS_MANAGE,"comms.authority.manage":o.GOVERNANCE_MANAGE,"comms.search":o.SEARCH,"comms.thread.write":o.REPLY_SEND,"comms.inbox.archive":o.INBOX_MANAGE,"comms.action.approve":o.ACTIONS_APPROVE,"comms.handoff.approve":o.HANDOFFS_APPROVE,"comms.identity.merge":o.IDENTITY_MERGE,"comms.audit.export":o.AUDIT_EXPORT,"comms.ai":o.AI_USE,"comms.thread.explain":o.THREAD_EXPLAIN},t=Object.freeze(Object.keys(a));function i(n){return a[n]??n}function c(n){return[...new Set(n.map(i))]}function e(n){return n.some((m)=>(m in a))}export{o as COMMUNICATION_OS_CAPABILITY_KEYS,A as COMMUNICATION_OS_ROUTE_CAPABILITY_KEYS,t as LEGACY_COMMUNICATION_OS_CAPABILITY_KEYS,c as canonicalCommunicationOsCapabilities,i as canonicalCommunicationOsCapability,e as hasLegacyCommunicationOsCapability};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const ECOSYSTEM_MESSAGING_CAPABILITY_KEYS: {
|
|
2
|
+
readonly READ: "communication-os.rooms.read";
|
|
3
|
+
readonly WRITE: "communication-os.rooms.write";
|
|
4
|
+
readonly MANAGE_MEMBERS: "communication-os.rooms.members.manage";
|
|
5
|
+
readonly MANAGE_CONNECTIONS: "communication-os.connections.manage";
|
|
6
|
+
readonly MANAGE_AUTHORITY: "communication-os.governance.manage";
|
|
7
|
+
readonly SEARCH: "communication-os.search";
|
|
8
|
+
};
|
|
9
|
+
export declare const EcosystemMessagingCapability: import("@lssm/lib.contracts-spec").CapabilitySpec;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{defineCapability as g,docId as _,StabilityEnum as S}from"@lssm/lib.contracts-spec";import{defineEnum as a,defineSchemaModel as i,ScalarTypeEnum as e}from"@lssm/lib.schema";var m=a("CommunicationSpaceKind",["personal","organization"]),p=a("CommunicationPrincipalKind",["human","agent","system"]),u=a("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),f=a("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),l=a("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),d=a("CommunicationMembershipState",["active","revoked"]),C=a("CommunicationReceiptKind",["delivered","read"]),O=a("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),r={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"},I=i({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}}}),M=i({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:m,isOptional:!1},encryptionMode:{type:l,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),N=i({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:p,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),T=i({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),R=i({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:d,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),h=i({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:u,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:O,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),y=i({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}}}),b=i({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:y,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}}}),D=i({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 n={INBOX_READ:"communication-os.inbox.read",INBOX_MANAGE:"communication-os.inbox.manage",SPACES_READ:"communication-os.spaces.read",ROOMS_READ:"communication-os.rooms.read",ROOMS_WRITE:"communication-os.rooms.write",ROOM_MEMBERS_MANAGE:"communication-os.rooms.members.manage",SEARCH:"communication-os.search",REPLY_SEND:"communication-os.reply.send",ATTACHMENTS_READ:"communication-os.attachments.read",IDENTITY_MANAGE:"communication-os.identity.manage",IDENTITY_MERGE:"communication-os.identity.merge",AGENTS_MANAGE:"communication-os.agents.manage",CONNECTIONS_MANAGE:"communication-os.connections.manage",GOVERNANCE_MANAGE:"communication-os.governance.manage",AUTOMATION_MANAGE:"communication-os.automation.manage",ACTIONS_APPROVE:"communication-os.actions.approve",HANDOFFS_APPROVE:"communication-os.handoffs.approve",AI_USE:"communication-os.ai.use",THREAD_EXPLAIN:"communication-os.thread.explain",AUDIT_READ:"communication-os.audit.read",AUDIT_EXPORT:"communication-os.audit.export"},G=[n.INBOX_READ,n.SPACES_READ,n.ROOMS_READ,n.ROOMS_WRITE,n.SEARCH,n.IDENTITY_MANAGE,n.AGENTS_MANAGE,n.CONNECTIONS_MANAGE,n.GOVERNANCE_MANAGE,n.AUTOMATION_MANAGE,n.REPLY_SEND,n.AUDIT_READ],c={"comms.room.read":n.ROOMS_READ,"comms.room.write":n.ROOMS_WRITE,"comms.room.members.manage":n.ROOM_MEMBERS_MANAGE,"comms.connections.manage":n.CONNECTIONS_MANAGE,"comms.authority.manage":n.GOVERNANCE_MANAGE,"comms.search":n.SEARCH,"comms.thread.write":n.REPLY_SEND,"comms.inbox.archive":n.INBOX_MANAGE,"comms.action.approve":n.ACTIONS_APPROVE,"comms.handoff.approve":n.HANDOFFS_APPROVE,"comms.identity.merge":n.IDENTITY_MERGE,"comms.audit.export":n.AUDIT_EXPORT,"comms.ai":n.AI_USE,"comms.thread.explain":n.THREAD_EXPLAIN},P=Object.freeze(Object.keys(c));function A(o){return c[o]??o}function k(o){return[...new Set(o.map(A))]}function v(o){return o.some((s)=>(s in c))}var K={READ:n.ROOMS_READ,WRITE:n.ROOMS_WRITE,MANAGE_MEMBERS:n.ROOM_MEMBERS_MANAGE,MANAGE_CONNECTIONS:n.CONNECTIONS_MANAGE,MANAGE_AUTHORITY:n.GOVERNANCE_MANAGE,SEARCH:n.SEARCH},t=(o,s)=>({surface:"operation",key:o,version:"2.0.0",description:s}),L=g({meta:{key:"communication-os.ecosystem-messaging",version:"3.0.0",kind:"api",stability:S.Experimental,description:"Standalone and embeddable unified messaging for humans and explicitly authorized agents",owners:["platform.communication-os"],tags:["communication","messaging","agents","hybrid","cross-platform"],docId:[_(r.id)]},provides:[t("communication.space.create","Create isolated messaging spaces"),t("communication.room.create","Create rooms and direct messages"),t("communication.membership.set","Manage room membership"),t("communication.authority.set","Manage revocable principal authority"),t("communication.connection.connect","Connect messaging networks"),t("communication.connection.sync","Synchronize network events"),t("communication.message.send","Send an attributed room message"),t("communication.message.edit","Edit a message revision"),t("communication.message.delete","Delete message content"),t("communication.reaction.set","Set a message reaction"),t("communication.receipt.record","Record delivery and read state"),t("communication.inbox-state.set","Organize the unified inbox"),t("communication.message.search","Search one authorized space")],requires:[{key:"communication-spec",version:"1.0.0",reason:"V2 extends the existing canonical CommunicationSpec surface"}]});export{K as ECOSYSTEM_MESSAGING_CAPABILITY_KEYS,L as EcosystemMessagingCapability};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{defineCapability as c,StabilityEnum as m}from"@lssm/lib.contracts-spec";var n={INBOX_READ:"communication-os.inbox.read",INBOX_MANAGE:"communication-os.inbox.manage",SPACES_READ:"communication-os.spaces.read",ROOMS_READ:"communication-os.rooms.read",ROOMS_WRITE:"communication-os.rooms.write",ROOM_MEMBERS_MANAGE:"communication-os.rooms.members.manage",SEARCH:"communication-os.search",REPLY_SEND:"communication-os.reply.send",ATTACHMENTS_READ:"communication-os.attachments.read",IDENTITY_MANAGE:"communication-os.identity.manage",IDENTITY_MERGE:"communication-os.identity.merge",AGENTS_MANAGE:"communication-os.agents.manage",CONNECTIONS_MANAGE:"communication-os.connections.manage",GOVERNANCE_MANAGE:"communication-os.governance.manage",AUTOMATION_MANAGE:"communication-os.automation.manage",ACTIONS_APPROVE:"communication-os.actions.approve",HANDOFFS_APPROVE:"communication-os.handoffs.approve",AI_USE:"communication-os.ai.use",THREAD_EXPLAIN:"communication-os.thread.explain",AUDIT_READ:"communication-os.audit.read",AUDIT_EXPORT:"communication-os.audit.export"},h=[n.INBOX_READ,n.SPACES_READ,n.ROOMS_READ,n.ROOMS_WRITE,n.SEARCH,n.IDENTITY_MANAGE,n.AGENTS_MANAGE,n.CONNECTIONS_MANAGE,n.GOVERNANCE_MANAGE,n.AUTOMATION_MANAGE,n.REPLY_SEND,n.AUDIT_READ],r={"comms.room.read":n.ROOMS_READ,"comms.room.write":n.ROOMS_WRITE,"comms.room.members.manage":n.ROOM_MEMBERS_MANAGE,"comms.connections.manage":n.CONNECTIONS_MANAGE,"comms.authority.manage":n.GOVERNANCE_MANAGE,"comms.search":n.SEARCH,"comms.thread.write":n.REPLY_SEND,"comms.inbox.archive":n.INBOX_MANAGE,"comms.action.approve":n.ACTIONS_APPROVE,"comms.handoff.approve":n.HANDOFFS_APPROVE,"comms.identity.merge":n.IDENTITY_MERGE,"comms.audit.export":n.AUDIT_EXPORT,"comms.ai":n.AI_USE,"comms.thread.explain":n.THREAD_EXPLAIN},T=Object.freeze(Object.keys(r));function d(o){return r[o]??o}function b(o){return[...new Set(o.map(d))]}function R(o){return o.some((s)=>(s in r))}var p=["platform.communication-os","platform.ai-routing"],l={FULL:n.AI_USE,AUDITOR:n.THREAD_EXPLAIN},k=c({meta:{key:l.FULL,version:"2.0.0",kind:"api",stability:m.Experimental,description:"Full CommunicationOS AI routing capability: thread summarization, reply drafting, and handoff suggestion",owners:[...p],tags:["comms","ai","routing","summarize","draft","handoff"]},provides:[{surface:"operation",key:"comms.thread.summarize",version:"1.0.0",description:"AI thread summarization with persona-adaptive redaction (audiencePersona resolved from actor role)"},{surface:"operation",key:"comms.reply.draft",version:"1.0.0",description:"AI reply drafting; draft status reflects policy evaluation (drafted | requires_review)"},{surface:"operation",key:"comms.handoff.suggest",version:"1.0.0",description:"AI handoff suggestion (suggestion only \u2014 does not create HandoffPacket)"}],requires:[{key:"communication-spec",version:"1.0.0",reason:"Core communication contracts (thread, message, handoff models) must be available"}]}),P=c({meta:{key:l.AUDITOR,version:"2.0.0",kind:"api",stability:m.Experimental,description:"Auditor read-only AI capability: thread explanation (summarize) only, with forced PII redaction",owners:[...p],tags:["comms","ai","auditor","read-only","explain","thread"]},provides:[{surface:"operation",key:"comms.thread.summarize",version:"1.0.0",description:"Read-only thread explanation for auditor persona; handler forces audiencePersona=auditor and redacts PII"}],requires:[{key:"communication-spec",version:"1.0.0",reason:"Core communication contracts (thread, message models) must be available"}]});import{defineCapability as E,docId as C,StabilityEnum as I}from"@lssm/lib.contracts-spec";import{defineEnum as a,defineSchemaModel as t,ScalarTypeEnum as e}from"@lssm/lib.schema";var y=a("CommunicationSpaceKind",["personal","organization"]),O=a("CommunicationPrincipalKind",["human","agent","system"]),A=a("CommunicationConnectionPlacement",["device","managed_cloud","self_hosted"]),w=a("CommunicationConnectionNetwork",["email","sms","slack","teams","telegram","whatsapp","discord","matrix"]),g=a("CommunicationEncryptionMode",["client_encrypted","governed_server_indexable"]),f=a("CommunicationMembershipState",["active","revoked"]),V=a("CommunicationReceiptKind",["delivered","read"]),_=a("CommunicationConnectionHealth",["connecting","healthy","degraded","offline","revoked"]),u={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"},B=t({name:"CommunicationScopeV2",description:"Strict tenant, workspace, and space boundary for messaging state",fields:{tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1}}}),L=t({name:"CommunicationSpaceV2",description:"Personal or organization messaging boundary under one account",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},kind:{type:y,isOptional:!1},encryptionMode:{type:g,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),K=t({name:"CommunicationPrincipalV2",description:"Auditable human, agent, or system identity",fields:{id:{type:e.String_unsecure(),isOptional:!1},kind:{type:O,isOptional:!1},displayName:{type:e.String_unsecure(),isOptional:!1},ownerPrincipalId:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),U=t({name:"CommunicationRoomV2",description:"Room or direct-message projection inside one space",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},roomKind:{type:e.String_unsecure(),isOptional:!1},connectionIds:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),z=t({name:"CommunicationRoomMembershipV2",description:"Revocable principal membership and room-scoped capabilities",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},principalId:{type:e.String_unsecure(),isOptional:!1},role:{type:e.String_unsecure(),isOptional:!1},state:{type:f,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),H=t({name:"CommunicationChannelConnectionV2",description:"Credential-reference-only local, managed, or self-hosted channel connection",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},network:{type:e.String_unsecure(),isOptional:!1},placement:{type:A,isOptional:!1},externalAccountRef:{type:e.String_unsecure(),isOptional:!1},credentialRef:{type:e.String_unsecure(),isOptional:!1},health:{type:_,isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),S=t({name:"CommunicationAttachmentV2",description:"Public-safe metadata for an opaque, scope-bound message attachment",fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},mimeType:{type:e.String_unsecure(),isOptional:!1},sizeBytes:{type:e.Int_unsecure(),isOptional:!1},sha256:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),X=t({name:"CommunicationMessageV2",description:"Canonical room message with explicit author and encryption posture",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!1},authorPrincipalId:{type:e.String_unsecure(),isOptional:!1},connectionId:{type:e.String_unsecure(),isOptional:!0},externalMessageId:{type:e.String_unsecure(),isOptional:!0},body:{type:e.String_unsecure(),isOptional:!0},encryptedEnvelope:{type:e.JSONObject(),isOptional:!0},attachments:{type:S,isArray:!0,isOptional:!0},replyToMessageId:{type:e.String_unsecure(),isOptional:!0},revision:{type:e.Int_unsecure(),isOptional:!1},deletedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),F=t({name:"CommunicationAuthorityGrantV2",description:"Explicit, revocable messaging authority granted to one principal",fields:{id:{type:e.String_unsecure(),isOptional:!1},tenantId:{type:e.String_unsecure(),isOptional:!1},workspaceId:{type:e.String_unsecure(),isOptional:!1},spaceId:{type:e.String_unsecure(),isOptional:!1},roomId:{type:e.String_unsecure(),isOptional:!0},connectionId:{type:e.String_unsecure(),isOptional:!0},principalId:{type:e.String_unsecure(),isOptional:!1},capabilities:{type:e.String_unsecure(),isArray:!0,isOptional:!1},grantedBy:{type:e.String_unsecure(),isOptional:!1},expiresAt:{type:e.DateTime(),isOptional:!0},revokedAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}});var Q={READ:n.ROOMS_READ,WRITE:n.ROOMS_WRITE,MANAGE_MEMBERS:n.ROOM_MEMBERS_MANAGE,MANAGE_CONNECTIONS:n.CONNECTIONS_MANAGE,MANAGE_AUTHORITY:n.GOVERNANCE_MANAGE,SEARCH:n.SEARCH},i=(o,s)=>({surface:"operation",key:o,version:"2.0.0",description:s}),Z=E({meta:{key:"communication-os.ecosystem-messaging",version:"3.0.0",kind:"api",stability:I.Experimental,description:"Standalone and embeddable unified messaging for humans and explicitly authorized agents",owners:["platform.communication-os"],tags:["communication","messaging","agents","hybrid","cross-platform"],docId:[C(u.id)]},provides:[i("communication.space.create","Create isolated messaging spaces"),i("communication.room.create","Create rooms and direct messages"),i("communication.membership.set","Manage room membership"),i("communication.authority.set","Manage revocable principal authority"),i("communication.connection.connect","Connect messaging networks"),i("communication.connection.sync","Synchronize network events"),i("communication.message.send","Send an attributed room message"),i("communication.message.edit","Edit a message revision"),i("communication.message.delete","Delete message content"),i("communication.reaction.set","Set a message reaction"),i("communication.receipt.record","Record delivery and read state"),i("communication.inbox-state.set","Organize the unified inbox"),i("communication.message.search","Search one authorized space")],requires:[{key:"communication-spec",version:"1.0.0",reason:"V2 extends the existing canonical CommunicationSpec surface"}]});import{defineCapability as M,StabilityEnum as N}from"@lssm/lib.contracts-spec";var ie=M({meta:{key:"communication-spec",version:"1.0.0",kind:"data",stability:N.Experimental,description:"Canonical communication contracts for threads, messages, governance, and agent-callable work.",owners:["@platform.core"],tags:["communication","contracts","threads","messages"]}});export{l as COMMS_AI_CAPABILITY_KEYS,n as COMMUNICATION_OS_CAPABILITY_KEYS,h as COMMUNICATION_OS_ROUTE_CAPABILITY_KEYS,P as CommsAiAuditorCapability,k as CommsAiFullCapability,ie as CommunicationSpecCapability,Q as ECOSYSTEM_MESSAGING_CAPABILITY_KEYS,Z as EcosystemMessagingCapability,T as LEGACY_COMMUNICATION_OS_CAPABILITY_KEYS,b as canonicalCommunicationOsCapabilities,d as canonicalCommunicationOsCapability,R as hasLegacyCommunicationOsCapability};
|