@mastra/factory 0.12.0-alpha.2 → 0.12.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/factory.d.ts.map +1 -1
  3. package/dist/factory.js +24 -14
  4. package/dist/factory.js.map +1 -1
  5. package/dist/integrations/base.d.ts +9 -0
  6. package/dist/integrations/base.d.ts.map +1 -1
  7. package/dist/integrations/slack/feed-publisher.d.ts +26 -0
  8. package/dist/integrations/slack/feed-publisher.d.ts.map +1 -0
  9. package/dist/integrations/slack/feed-publisher.js +44 -0
  10. package/dist/integrations/slack/feed-publisher.js.map +1 -0
  11. package/dist/integrations/slack/integration.d.ts +2 -0
  12. package/dist/integrations/slack/integration.d.ts.map +1 -1
  13. package/dist/integrations/slack/integration.js +5 -0
  14. package/dist/integrations/slack/integration.js.map +1 -1
  15. package/dist/integrations/slack/slack.d.ts +13 -1
  16. package/dist/integrations/slack/slack.d.ts.map +1 -1
  17. package/dist/integrations/slack/slack.js +78 -6
  18. package/dist/integrations/slack/slack.js.map +1 -1
  19. package/dist/routes/surface.d.ts +5 -0
  20. package/dist/routes/surface.d.ts.map +1 -1
  21. package/dist/routes/surface.js +4 -1
  22. package/dist/routes/surface.js.map +1 -1
  23. package/dist/storage/domains/comments/base.d.ts.map +1 -1
  24. package/dist/storage/domains/comments/base.js +2 -4
  25. package/dist/storage/domains/comments/base.js.map +1 -1
  26. package/dist/storage/domains/comments/domain.d.ts +9 -2
  27. package/dist/storage/domains/comments/domain.d.ts.map +1 -1
  28. package/dist/storage/domains/comments/domain.js +18 -15
  29. package/dist/storage/domains/comments/domain.js.map +1 -1
  30. package/dist/storage/domains/comments/feed-sync.d.ts +9 -26
  31. package/dist/storage/domains/comments/feed-sync.d.ts.map +1 -1
  32. package/dist/storage/domains/work-items/base.d.ts +19 -0
  33. package/dist/storage/domains/work-items/base.d.ts.map +1 -1
  34. package/dist/storage/domains/work-items/base.js +47 -23
  35. package/dist/storage/domains/work-items/base.js.map +1 -1
  36. package/factory-skills/factory-rereview/SKILL.md +13 -12
  37. package/factory-skills/factory-review/SKILL.md +12 -11
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"domain.js","names":["#auth","#comments","#workItems","#projects","#channelIdentity","#members","#audit","#publishers","#pubsub","#rosterCache","#touchFeed","#mirrorComment","#cleanupMentionReceipts","#organizationRoster","#seenRoster"],"sources":["../../../../src/storage/domains/comments/domain.ts"],"sourcesContent":["/**\n * Comments domain — feed orchestration behind service methods; the HTTP layer\n * lives in `routes.ts` and only maps their result statuses. Service methods\n * take the author as a `FactoryActorRef` (never derived from the request\n * inside), so agent-authored comments later become a thin tool over\n * `createComment` instead of a re-implementation.\n */\n\nimport type { PubSub } from '@mastra/core/events';\nimport type { ApiRoute } from '@mastra/core/server';\n\nimport { touchFeed } from '../../../feed-events.js';\nimport type { RouteAuth } from '../../../routes/route.js';\nimport type { AuditEmitter } from '../audit/domain.js';\nimport type { ChannelIdentityStorage } from '../channel-identity/base.js';\nimport type { FactoryProjectsStorage } from '../projects/base.js';\nimport type { WorkItemRow, WorkItemsStorage } from '../work-items/base.js';\nimport { factoryMentionAttentionIdentity } from '../work-items/base.js';\nimport type { FactoryActorRef } from './actor.js';\nimport { isMentionableActorId } from './actor.js';\nimport type {\n EditWorkItemCommentResult,\n FactoryMentionRef,\n WorkItemCommentReplyRef,\n WorkItemCommentRow,\n WorkItemCommentsStorage,\n} from './base.js';\nimport { CommentTokenConflictError, commentBodyError, MAX_COMMENT_MENTIONS, MAX_COMMENT_QUOTE_LENGTH } from './base.js';\nimport type { WorkItemFeedPublisher } from './feed-sync.js';\nimport { buildCommentRoutes } from './routes.js';\n\nexport interface FactoryRosterMember {\n id: string;\n name?: string;\n avatarUrl?: string;\n}\n\nexport interface OrganizationMembersProvider {\n listOrganizationMembers(orgId: string): Promise<FactoryRosterMember[]>;\n}\n\nexport interface CommentsDomainOptions {\n auth: RouteAuth;\n comments: WorkItemCommentsStorage;\n workItems: WorkItemsStorage;\n projects: FactoryProjectsStorage;\n channelIdentity?: ChannelIdentityStorage;\n /** Host-wired org membership listing for the mention roster (e.g. WorkOS). */\n members?: OrganizationMembersProvider;\n audit?: AuditEmitter;\n /** Outbound platform mirrors (COR-1174); empty until a platform wires one. */\n publishers?: WorkItemFeedPublisher[];\n /** Carries feed touches to every replica's open SSE streams. */\n pubsub: PubSub;\n}\n\nexport interface CreateCommentServiceInput {\n orgId: string;\n workItemId: string;\n author: FactoryActorRef;\n body: string;\n replyTo?: { commentId: string; quote?: string };\n mentions?: FactoryMentionRef[];\n clientToken?: string;\n}\n\nexport type CreateCommentServiceResult =\n | { status: 'created'; comment: WorkItemCommentRow; workItem: WorkItemRow }\n | { status: 'work_item_not_found' }\n | { status: 'token_conflict' }\n | { status: 'invalid'; message: string };\n\nexport interface CommentEditor {\n userId: string;\n /** Lazily checked, only when the caller is not the author. */\n canModerate: () => Promise<boolean>;\n}\n\nexport interface EditCommentServiceInput {\n orgId: string;\n workItemId: string;\n commentId: string;\n editor: CommentEditor;\n body: string;\n mentions?: FactoryMentionRef[];\n expectedRevision?: number;\n}\n\nexport type EditCommentServiceResult =\n | ({ status: 'edited'; previousBody: string } & EditWorkItemCommentResult)\n | { status: 'not_found' }\n | { status: 'forbidden' }\n | { status: 'not_editable' }\n | { status: 'conflict' }\n | { status: 'invalid'; message: string };\n\nexport interface DeleteCommentServiceInput {\n orgId: string;\n workItemId: string;\n commentId: string;\n editor: CommentEditor;\n}\n\nexport type DeleteCommentServiceResult =\n | { status: 'deleted'; comment: WorkItemCommentRow }\n | { status: 'not_found' }\n | { status: 'forbidden' }\n | { status: 'not_editable' };\n\nconst MAX_ROSTER_SIZE = 100;\nconst ROSTER_CACHE_TTL_MS = 60_000;\n\nexport class CommentsDomain {\n readonly #auth: RouteAuth;\n readonly #comments: WorkItemCommentsStorage;\n readonly #workItems: WorkItemsStorage;\n readonly #projects: FactoryProjectsStorage;\n readonly #channelIdentity: ChannelIdentityStorage | undefined;\n readonly #members: OrganizationMembersProvider | undefined;\n readonly #audit: AuditEmitter | undefined;\n readonly #publishers: WorkItemFeedPublisher[];\n readonly #pubsub: PubSub;\n readonly #rosterCache = new Map<string, { at: number; members: FactoryRosterMember[] }>();\n\n constructor({\n auth,\n comments,\n workItems,\n projects,\n channelIdentity,\n members,\n audit,\n publishers,\n pubsub,\n }: CommentsDomainOptions) {\n this.#auth = auth;\n this.#comments = comments;\n this.#workItems = workItems;\n this.#projects = projects;\n this.#channelIdentity = channelIdentity;\n this.#members = members;\n this.#audit = audit;\n this.#publishers = publishers ?? [];\n this.#pubsub = pubsub;\n }\n\n /**\n * The one seam every feed mutation routes through — future\n * `WorkItemFeedIngest` impls included.\n */\n async #touchFeed(scope: { orgId: string; factoryProjectId: string; workItemId: string }): Promise<void> {\n await this.#comments.refreshWorkItemFeedActivity(scope);\n touchFeed(this.#pubsub, scope, scope.workItemId);\n }\n\n async createComment(input: CreateCommentServiceInput): Promise<CreateCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const bodyError = commentBodyError(input.body);\n if (bodyError) return { status: 'invalid', message: bodyError };\n if ((input.mentions?.length ?? 0) > MAX_COMMENT_MENTIONS) {\n return { status: 'invalid', message: `At most ${MAX_COMMENT_MENTIONS} mentions per comment.` };\n }\n\n const workItem = await this.#workItems.get({ orgId: input.orgId, id: input.workItemId });\n if (!workItem) return { status: 'work_item_not_found' };\n\n let replyTo: WorkItemCommentReplyRef | undefined;\n if (input.replyTo) {\n const parent = await this.#comments.get({ orgId: input.orgId, commentId: input.replyTo.commentId });\n if (!parent || parent.workItemId !== input.workItemId) {\n return { status: 'invalid', message: 'Reply target is not a comment on this work item.' };\n }\n replyTo = {\n commentId: parent.id,\n ...(input.replyTo.quote ? { quote: input.replyTo.quote.slice(0, MAX_COMMENT_QUOTE_LENGTH) } : {}),\n authorId: parent.author.id,\n ...(parent.author.displayName ? { authorName: parent.author.displayName } : {}),\n };\n }\n\n let comment: WorkItemCommentRow;\n try {\n comment = await this.#comments.create({\n orgId: input.orgId,\n factoryProjectId: workItem.factoryProjectId,\n workItemId: input.workItemId,\n author: input.author,\n body: input.body,\n ...(replyTo ? { replyTo } : {}),\n ...(input.mentions ? { mentions: input.mentions } : {}),\n ...(input.clientToken ? { clientToken: input.clientToken } : {}),\n });\n } catch (error) {\n if (error instanceof CommentTokenConflictError) return { status: 'token_conflict' };\n throw error;\n }\n await this.#touchFeed({\n orgId: input.orgId,\n factoryProjectId: workItem.factoryProjectId,\n workItemId: input.workItemId,\n });\n await this.#mirrorComment(comment, workItem);\n return { status: 'created', comment, workItem };\n }\n\n /**\n * Best-effort: a failed publish never fails the create. The write-back is\n * the replay guard — a replayed create sees its own platform on the row and\n * skips it. Known ceiling, single publisher only: `external_source` is\n * single-valued, so with two publishers a replayed create re-publishes to\n * the one that is not recorded, and nothing persists a failed attempt for a\n * later pass to retry. Both need an outbox if a second publisher ever lands.\n */\n async #mirrorComment(comment: WorkItemCommentRow, workItem: WorkItemRow): Promise<void> {\n let current = comment;\n for (const publisher of this.#publishers) {\n if (current.externalSource?.integrationId === publisher.id) continue;\n try {\n const { source } = await publisher.publish(current, workItem);\n current =\n (await this.#comments.attachExternalSource({ orgId: current.orgId, commentId: current.id, source })) ??\n current;\n } catch (err) {\n console.warn('[Comments] Failed to mirror a comment to a platform', {\n publisherId: publisher.id,\n commentId: current.id,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n }\n\n async editComment(input: EditCommentServiceInput): Promise<EditCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const bodyError = commentBodyError(input.body);\n if (bodyError) return { status: 'invalid', message: bodyError };\n if ((input.mentions?.length ?? 0) > MAX_COMMENT_MENTIONS) {\n return { status: 'invalid', message: `At most ${MAX_COMMENT_MENTIONS} mentions per comment.` };\n }\n\n const existing = await this.#comments.get({ orgId: input.orgId, commentId: input.commentId });\n if (!existing || existing.workItemId !== input.workItemId) return { status: 'not_found' };\n if (existing.deletedAt) return { status: 'not_editable' };\n if (existing.author.id !== input.editor.userId && !(await input.editor.canModerate())) {\n return { status: 'forbidden' };\n }\n\n const edited = await this.#comments.edit({\n orgId: input.orgId,\n commentId: input.commentId,\n body: input.body,\n editorId: input.editor.userId,\n ...(input.mentions ? { mentions: input.mentions } : {}),\n ...(input.expectedRevision !== undefined ? { expectedRevision: input.expectedRevision } : {}),\n });\n if (edited === 'conflict') return { status: 'conflict' };\n if (!edited) return { status: 'not_editable' };\n\n await this.#cleanupMentionReceipts(existing, edited.removedMentions);\n await this.#touchFeed({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n workItemId: existing.workItemId,\n });\n return { status: 'edited', previousBody: existing.body, ...edited };\n }\n\n async deleteComment(input: DeleteCommentServiceInput): Promise<DeleteCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const existing = await this.#comments.get({ orgId: input.orgId, commentId: input.commentId });\n if (!existing || existing.workItemId !== input.workItemId) return { status: 'not_found' };\n if (existing.deletedAt) return { status: 'not_editable' };\n if (existing.author.id !== input.editor.userId && !(await input.editor.canModerate())) {\n return { status: 'forbidden' };\n }\n\n const deleted = await this.#comments.softDelete({\n orgId: input.orgId,\n commentId: input.commentId,\n deletedBy: input.editor.userId,\n });\n if (!deleted) return { status: 'not_editable' };\n\n await this.#workItems.deleteAttentionReceipts({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n identities: [factoryMentionAttentionIdentity(existing.id)],\n });\n await this.#touchFeed({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n workItemId: existing.workItemId,\n });\n return { status: 'deleted', comment: deleted };\n }\n\n /**\n * A removed mention deletes only that user's receipt: the receipt identity\n * is per-comment, and other still-mentioned users must keep their read state.\n */\n async #cleanupMentionReceipts(comment: WorkItemCommentRow, removed: FactoryMentionRef[]): Promise<void> {\n for (const mention of removed) {\n await this.#workItems.deleteAttentionReceipts({\n orgId: comment.orgId,\n factoryProjectId: comment.factoryProjectId,\n userId: mention.id,\n identities: [factoryMentionAttentionIdentity(comment.id)],\n });\n }\n }\n\n /**\n * Mentionable people: the host's org roster when it answers, otherwise the\n * people the project has actually seen (comment authors, linked channel\n * accounts). Cached per project so a dropdown session costs one read.\n */\n async mentionRoster({\n orgId,\n factoryProjectId,\n }: {\n orgId: string;\n factoryProjectId: string;\n }): Promise<FactoryRosterMember[]> {\n const cacheKey = `${orgId}\\0${factoryProjectId}`;\n const cached = this.#rosterCache.get(cacheKey);\n if (cached && Date.now() - cached.at < ROSTER_CACHE_TTL_MS) return cached.members;\n\n const members = await this.#organizationRoster(orgId);\n if (members.size === 0) await this.#seenRoster(orgId, factoryProjectId, members);\n\n const roster = [...members.values()].slice(0, MAX_ROSTER_SIZE);\n // Sweep on write: a long-lived server would otherwise hold one roster per\n // project it ever served.\n const cutoff = Date.now() - ROSTER_CACHE_TTL_MS;\n for (const [key, entry] of this.#rosterCache) {\n if (entry.at < cutoff) this.#rosterCache.delete(key);\n }\n this.#rosterCache.set(cacheKey, { at: Date.now(), members: roster });\n return roster;\n }\n\n /** Empty when no provider is wired, or when the host listing fails. */\n async #organizationRoster(orgId: string): Promise<Map<string, FactoryRosterMember>> {\n const members = new Map<string, FactoryRosterMember>();\n if (!this.#members) return members;\n try {\n for (const member of await this.#members.listOrganizationMembers(orgId)) {\n if (isMentionableActorId(member.id)) members.set(member.id, member);\n }\n } catch (err) {\n console.warn('[Comments] Failed to list organization members for the mention roster', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n return members;\n }\n\n async #seenRoster(orgId: string, factoryProjectId: string, members: Map<string, FactoryRosterMember>): Promise<void> {\n for (const author of await this.#comments.listRecentAuthors({ orgId, factoryProjectId })) {\n if (author.kind !== 'user' || !isMentionableActorId(author.id)) continue;\n members.set(author.id, {\n id: author.id,\n ...(author.displayName ? { name: author.displayName } : {}),\n ...(author.avatarUrl ? { avatarUrl: author.avatarUrl } : {}),\n });\n }\n if (!this.#channelIdentity) return;\n await this.#channelIdentity.ensureReady();\n for (const link of await this.#channelIdentity.listAccountLinksForOrg(orgId)) {\n if (members.has(link.userId)) continue;\n members.set(link.userId, {\n id: link.userId,\n ...(link.externalUserName ? { name: link.externalUserName } : {}),\n });\n }\n }\n\n routes(): ApiRoute[] {\n return buildCommentRoutes({\n domain: this,\n auth: this.#auth,\n comments: this.#comments,\n workItems: this.#workItems,\n projects: this.#projects,\n pubsub: this.#pubsub,\n ...(this.#audit ? { audit: this.#audit } : {}),\n });\n }\n}\n\nexport { toWireComment } from './wire.js';\nexport type { WireComment, WireCommentPage } from './wire.js';\n"],"mappings":"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"}
1
+ {"version":3,"file":"domain.js","names":["#auth","#comments","#workItems","#projects","#channelIdentity","#members","#audit","#publishers","#pubsub","#rosterCache","#touchFeed","#mirrorComment","#cleanupMentionReceipts","#organizationRoster","#seenRoster"],"sources":["../../../../src/storage/domains/comments/domain.ts"],"sourcesContent":["/**\n * Comments domain — feed orchestration behind service methods; the HTTP layer\n * lives in `routes.ts` and only maps their result statuses. Service methods\n * take the author as a `FactoryActorRef` (never derived from the request\n * inside), so agent-authored comments later become a thin tool over\n * `createComment` instead of a re-implementation.\n */\n\nimport type { PubSub } from '@mastra/core/events';\nimport type { ApiRoute } from '@mastra/core/server';\n\nimport { touchFeed } from '../../../feed-events.js';\nimport type { RouteAuth } from '../../../routes/route.js';\nimport type { AuditEmitter } from '../audit/domain.js';\nimport type { ChannelIdentityStorage } from '../channel-identity/base.js';\nimport type { FactoryProjectsStorage } from '../projects/base.js';\nimport type { ExternalWorkItemSource, WorkItemRow, WorkItemsStorage } from '../work-items/base.js';\nimport { factoryMentionAttentionIdentity } from '../work-items/base.js';\nimport type { FactoryActorRef } from './actor.js';\nimport { isMentionableActorId } from './actor.js';\nimport type {\n EditWorkItemCommentResult,\n FactoryMentionRef,\n WorkItemCommentReplyRef,\n WorkItemCommentRow,\n WorkItemCommentsStorage,\n} from './base.js';\nimport { CommentTokenConflictError, commentBodyError, MAX_COMMENT_MENTIONS, MAX_COMMENT_QUOTE_LENGTH } from './base.js';\nimport type { WorkItemFeedPublisher } from './feed-sync.js';\nimport { buildCommentRoutes } from './routes.js';\n\nexport interface FactoryRosterMember {\n id: string;\n name?: string;\n avatarUrl?: string;\n}\n\nexport interface OrganizationMembersProvider {\n listOrganizationMembers(orgId: string): Promise<FactoryRosterMember[]>;\n}\n\nexport interface CommentsDomainOptions {\n auth: RouteAuth;\n comments: WorkItemCommentsStorage;\n workItems: WorkItemsStorage;\n projects: FactoryProjectsStorage;\n channelIdentity?: ChannelIdentityStorage;\n /** Host-wired org membership listing for the mention roster (e.g. WorkOS). */\n members?: OrganizationMembersProvider;\n audit?: AuditEmitter;\n /** Outbound platform mirrors (COR-1174); empty until a platform wires one. */\n publishers?: WorkItemFeedPublisher[];\n /** Carries feed touches to every replica's open SSE streams. */\n pubsub: PubSub;\n}\n\nexport interface CreateCommentServiceInput {\n orgId: string;\n workItemId: string;\n author: FactoryActorRef;\n body: string;\n replyTo?: { commentId: string; quote?: string };\n mentions?: FactoryMentionRef[];\n clientToken?: string;\n /** Set when the comment is a platform message being ingested, never by the web UI. */\n externalSource?: ExternalWorkItemSource;\n /** The platform's own timestamp; defaults to now for locally authored comments. */\n occurredAt?: Date;\n}\n\nexport type CreateCommentServiceResult =\n /** `mirrored` settles when the platforms have been posted to; nothing in the response waits on it. */\n | { status: 'created'; comment: WorkItemCommentRow; workItem: WorkItemRow; mirrored: Promise<void> }\n | { status: 'work_item_not_found' }\n | { status: 'token_conflict' }\n | { status: 'invalid'; message: string };\n\nexport interface CommentEditor {\n userId: string;\n /** Lazily checked, only when the caller is not the author. */\n canModerate: () => Promise<boolean>;\n}\n\nexport interface EditCommentServiceInput {\n orgId: string;\n workItemId: string;\n commentId: string;\n editor: CommentEditor;\n body: string;\n mentions?: FactoryMentionRef[];\n expectedRevision?: number;\n}\n\nexport type EditCommentServiceResult =\n | ({ status: 'edited'; previousBody: string } & EditWorkItemCommentResult)\n | { status: 'not_found' }\n | { status: 'forbidden' }\n | { status: 'not_editable' }\n | { status: 'conflict' }\n | { status: 'invalid'; message: string };\n\nexport interface DeleteCommentServiceInput {\n orgId: string;\n workItemId: string;\n commentId: string;\n editor: CommentEditor;\n}\n\nexport type DeleteCommentServiceResult =\n | { status: 'deleted'; comment: WorkItemCommentRow }\n | { status: 'not_found' }\n | { status: 'forbidden' }\n | { status: 'not_editable' };\n\nconst MAX_ROSTER_SIZE = 100;\nconst ROSTER_CACHE_TTL_MS = 60_000;\n\nexport class CommentsDomain {\n readonly #auth: RouteAuth;\n readonly #comments: WorkItemCommentsStorage;\n readonly #workItems: WorkItemsStorage;\n readonly #projects: FactoryProjectsStorage;\n readonly #channelIdentity: ChannelIdentityStorage | undefined;\n readonly #members: OrganizationMembersProvider | undefined;\n readonly #audit: AuditEmitter | undefined;\n readonly #publishers: WorkItemFeedPublisher[];\n readonly #pubsub: PubSub;\n readonly #rosterCache = new Map<string, { at: number; members: FactoryRosterMember[] }>();\n\n constructor({\n auth,\n comments,\n workItems,\n projects,\n channelIdentity,\n members,\n audit,\n publishers,\n pubsub,\n }: CommentsDomainOptions) {\n this.#auth = auth;\n this.#comments = comments;\n this.#workItems = workItems;\n this.#projects = projects;\n this.#channelIdentity = channelIdentity;\n this.#members = members;\n this.#audit = audit;\n this.#publishers = publishers ?? [];\n this.#pubsub = pubsub;\n }\n\n /** The one seam every feed mutation routes through, platform ingest included. */\n async #touchFeed(scope: { orgId: string; factoryProjectId: string; workItemId: string }): Promise<void> {\n await this.#comments.refreshWorkItemFeedActivity(scope);\n touchFeed(this.#pubsub, scope, scope.workItemId);\n }\n\n async createComment(input: CreateCommentServiceInput): Promise<CreateCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const bodyError = commentBodyError(input.body);\n if (bodyError) return { status: 'invalid', message: bodyError };\n if ((input.mentions?.length ?? 0) > MAX_COMMENT_MENTIONS) {\n return { status: 'invalid', message: `At most ${MAX_COMMENT_MENTIONS} mentions per comment.` };\n }\n\n const workItem = await this.#workItems.get({ orgId: input.orgId, id: input.workItemId });\n if (!workItem) return { status: 'work_item_not_found' };\n\n let replyTo: WorkItemCommentReplyRef | undefined;\n if (input.replyTo) {\n const parent = await this.#comments.get({ orgId: input.orgId, commentId: input.replyTo.commentId });\n if (!parent || parent.workItemId !== input.workItemId) {\n return { status: 'invalid', message: 'Reply target is not a comment on this work item.' };\n }\n replyTo = {\n commentId: parent.id,\n ...(input.replyTo.quote ? { quote: input.replyTo.quote.slice(0, MAX_COMMENT_QUOTE_LENGTH) } : {}),\n authorId: parent.author.id,\n ...(parent.author.displayName ? { authorName: parent.author.displayName } : {}),\n };\n }\n\n let comment: WorkItemCommentRow;\n try {\n comment = await this.#comments.create({\n orgId: input.orgId,\n factoryProjectId: workItem.factoryProjectId,\n workItemId: input.workItemId,\n author: input.author,\n body: input.body,\n ...(replyTo ? { replyTo } : {}),\n ...(input.mentions ? { mentions: input.mentions } : {}),\n ...(input.clientToken ? { clientToken: input.clientToken } : {}),\n ...(input.externalSource ? { externalSource: input.externalSource } : {}),\n ...(input.occurredAt ? { occurredAt: input.occurredAt } : {}),\n });\n } catch (error) {\n if (error instanceof CommentTokenConflictError) return { status: 'token_conflict' };\n throw error;\n }\n await this.#touchFeed({\n orgId: input.orgId,\n factoryProjectId: workItem.factoryProjectId,\n workItemId: input.workItemId,\n });\n return { status: 'created', comment, workItem, mirrored: this.#mirrorComment(comment, workItem) };\n }\n\n /**\n * Runs past the response — the comment is stored, the feed frame is already\n * out, and nobody is waiting on Slack. A failed publish never fails the\n * create. The write-back is the replay guard: a replayed create sees its own\n * platform on the row and skips it. Known ceiling, single publisher only:\n * `external_source` is single-valued, so with two publishers a replayed\n * create re-publishes to the one that is not recorded, and a process that\n * restarts mid-flight drops the post. Both need an outbox.\n */\n async #mirrorComment(comment: WorkItemCommentRow, workItem: WorkItemRow): Promise<void> {\n let current = comment;\n for (const publisher of this.#publishers) {\n if (current.externalSource?.integrationId === publisher.id) continue;\n try {\n const published = await publisher.publish(current, workItem);\n if (!published) continue;\n current =\n (await this.#comments.attachExternalSource({\n orgId: current.orgId,\n commentId: current.id,\n source: published.source,\n })) ?? current;\n } catch (err) {\n console.warn('[Comments] Failed to mirror a comment to a platform', {\n publisherId: publisher.id,\n commentId: current.id,\n orgId: current.orgId,\n workItemId: workItem.id,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n }\n\n async editComment(input: EditCommentServiceInput): Promise<EditCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const bodyError = commentBodyError(input.body);\n if (bodyError) return { status: 'invalid', message: bodyError };\n if ((input.mentions?.length ?? 0) > MAX_COMMENT_MENTIONS) {\n return { status: 'invalid', message: `At most ${MAX_COMMENT_MENTIONS} mentions per comment.` };\n }\n\n const existing = await this.#comments.get({ orgId: input.orgId, commentId: input.commentId });\n if (!existing || existing.workItemId !== input.workItemId) return { status: 'not_found' };\n if (existing.deletedAt) return { status: 'not_editable' };\n if (existing.author.id !== input.editor.userId && !(await input.editor.canModerate())) {\n return { status: 'forbidden' };\n }\n\n const edited = await this.#comments.edit({\n orgId: input.orgId,\n commentId: input.commentId,\n body: input.body,\n editorId: input.editor.userId,\n ...(input.mentions ? { mentions: input.mentions } : {}),\n ...(input.expectedRevision !== undefined ? { expectedRevision: input.expectedRevision } : {}),\n });\n if (edited === 'conflict') return { status: 'conflict' };\n if (!edited) return { status: 'not_editable' };\n\n await this.#cleanupMentionReceipts(existing, edited.removedMentions);\n await this.#touchFeed({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n workItemId: existing.workItemId,\n });\n return { status: 'edited', previousBody: existing.body, ...edited };\n }\n\n async deleteComment(input: DeleteCommentServiceInput): Promise<DeleteCommentServiceResult> {\n await this.#comments.ensureReady();\n await this.#workItems.ensureReady();\n\n const existing = await this.#comments.get({ orgId: input.orgId, commentId: input.commentId });\n if (!existing || existing.workItemId !== input.workItemId) return { status: 'not_found' };\n if (existing.deletedAt) return { status: 'not_editable' };\n if (existing.author.id !== input.editor.userId && !(await input.editor.canModerate())) {\n return { status: 'forbidden' };\n }\n\n const deleted = await this.#comments.softDelete({\n orgId: input.orgId,\n commentId: input.commentId,\n deletedBy: input.editor.userId,\n });\n if (!deleted) return { status: 'not_editable' };\n\n await this.#workItems.deleteAttentionReceipts({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n identities: [factoryMentionAttentionIdentity(existing.id)],\n });\n await this.#touchFeed({\n orgId: existing.orgId,\n factoryProjectId: existing.factoryProjectId,\n workItemId: existing.workItemId,\n });\n return { status: 'deleted', comment: deleted };\n }\n\n /**\n * A removed mention deletes only that user's receipt: the receipt identity\n * is per-comment, and other still-mentioned users must keep their read state.\n */\n async #cleanupMentionReceipts(comment: WorkItemCommentRow, removed: FactoryMentionRef[]): Promise<void> {\n for (const mention of removed) {\n await this.#workItems.deleteAttentionReceipts({\n orgId: comment.orgId,\n factoryProjectId: comment.factoryProjectId,\n userId: mention.id,\n identities: [factoryMentionAttentionIdentity(comment.id)],\n });\n }\n }\n\n /**\n * Mentionable people: the host's org roster when it answers, otherwise the\n * people the project has actually seen (comment authors, linked channel\n * accounts). Cached per project so a dropdown session costs one read.\n */\n async mentionRoster({\n orgId,\n factoryProjectId,\n }: {\n orgId: string;\n factoryProjectId: string;\n }): Promise<FactoryRosterMember[]> {\n const cacheKey = `${orgId}\\0${factoryProjectId}`;\n const cached = this.#rosterCache.get(cacheKey);\n if (cached && Date.now() - cached.at < ROSTER_CACHE_TTL_MS) return cached.members;\n\n const members = await this.#organizationRoster(orgId);\n if (members.size === 0) await this.#seenRoster(orgId, factoryProjectId, members);\n\n const roster = [...members.values()].slice(0, MAX_ROSTER_SIZE);\n // Sweep on write: a long-lived server would otherwise hold one roster per\n // project it ever served.\n const cutoff = Date.now() - ROSTER_CACHE_TTL_MS;\n for (const [key, entry] of this.#rosterCache) {\n if (entry.at < cutoff) this.#rosterCache.delete(key);\n }\n this.#rosterCache.set(cacheKey, { at: Date.now(), members: roster });\n return roster;\n }\n\n /** Empty when no provider is wired, or when the host listing fails. */\n async #organizationRoster(orgId: string): Promise<Map<string, FactoryRosterMember>> {\n const members = new Map<string, FactoryRosterMember>();\n if (!this.#members) return members;\n try {\n for (const member of await this.#members.listOrganizationMembers(orgId)) {\n if (isMentionableActorId(member.id)) members.set(member.id, member);\n }\n } catch (err) {\n console.warn('[Comments] Failed to list organization members for the mention roster', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n return members;\n }\n\n async #seenRoster(orgId: string, factoryProjectId: string, members: Map<string, FactoryRosterMember>): Promise<void> {\n for (const author of await this.#comments.listRecentAuthors({ orgId, factoryProjectId })) {\n if (author.kind !== 'user' || !isMentionableActorId(author.id)) continue;\n members.set(author.id, {\n id: author.id,\n ...(author.displayName ? { name: author.displayName } : {}),\n ...(author.avatarUrl ? { avatarUrl: author.avatarUrl } : {}),\n });\n }\n if (!this.#channelIdentity) return;\n await this.#channelIdentity.ensureReady();\n for (const link of await this.#channelIdentity.listAccountLinksForOrg(orgId)) {\n if (members.has(link.userId)) continue;\n members.set(link.userId, {\n id: link.userId,\n ...(link.externalUserName ? { name: link.externalUserName } : {}),\n });\n }\n }\n\n routes(): ApiRoute[] {\n return buildCommentRoutes({\n domain: this,\n auth: this.#auth,\n comments: this.#comments,\n workItems: this.#workItems,\n projects: this.#projects,\n pubsub: this.#pubsub,\n ...(this.#audit ? { audit: this.#audit } : {}),\n });\n }\n}\n\nexport { toWireComment } from './wire.js';\nexport type { WireComment, WireCommentPage } from './wire.js';\n"],"mappings":";;;;;;;AAkHA,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAE5B,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,+BAAwB,IAAI,IAA4D;CAExF,YAAY,EACV,MACA,UACA,WACA,UACA,iBACA,SACA,OACA,YACA,UACwB;EACxB,KAAKA,QAAQ;EACb,KAAKC,YAAY;EACjB,KAAKC,aAAa;EAClB,KAAKC,YAAY;EACjB,KAAKC,mBAAmB;EACxB,KAAKC,WAAW;EAChB,KAAKC,SAAS;EACd,KAAKC,cAAc,cAAc,CAAC;EAClC,KAAKC,UAAU;CACjB;;CAGA,MAAME,WAAW,OAAuF;EACtG,MAAM,KAAKT,UAAU,4BAA4B,KAAK;EACtD,UAAU,KAAKO,SAAS,OAAO,MAAM,UAAU;CACjD;CAEA,MAAM,cAAc,OAAuE;EACzF,MAAM,KAAKP,UAAU,YAAY;EACjC,MAAM,KAAKC,WAAW,YAAY;EAElC,MAAM,YAAY,iBAAiB,MAAM,IAAI;EAC7C,IAAI,WAAW,OAAO;GAAE,QAAQ;GAAW,SAAS;EAAU;EAC9D,KAAK,MAAM,UAAU,UAAU,KAAA,IAC7B,OAAO;GAAE,QAAQ;GAAW,SAAS;EAAwD;EAG/F,MAAM,WAAW,MAAM,KAAKA,WAAW,IAAI;GAAE,OAAO,MAAM;GAAO,IAAI,MAAM;EAAW,CAAC;EACvF,IAAI,CAAC,UAAU,OAAO,EAAE,QAAQ,sBAAsB;EAEtD,IAAI;EACJ,IAAI,MAAM,SAAS;GACjB,MAAM,SAAS,MAAM,KAAKD,UAAU,IAAI;IAAE,OAAO,MAAM;IAAO,WAAW,MAAM,QAAQ;GAAU,CAAC;GAClG,IAAI,CAAC,UAAU,OAAO,eAAe,MAAM,YACzC,OAAO;IAAE,QAAQ;IAAW,SAAS;GAAmD;GAE1F,UAAU;IACR,WAAW,OAAO;IAClB,GAAI,MAAM,QAAQ,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,MAAM,GAAA,GAA2B,EAAE,IAAI,CAAC;IAC/F,UAAU,OAAO,OAAO;IACxB,GAAI,OAAO,OAAO,cAAc,EAAE,YAAY,OAAO,OAAO,YAAY,IAAI,CAAC;GAC/E;EACF;EAEA,IAAI;EACJ,IAAI;GACF,UAAU,MAAM,KAAKA,UAAU,OAAO;IACpC,OAAO,MAAM;IACb,kBAAkB,SAAS;IAC3B,YAAY,MAAM;IAClB,QAAQ,MAAM;IACd,MAAM,MAAM;IACZ,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;IAC7B,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;IACrD,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;IAC9D,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;IACvE,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;GAC7D,CAAC;EACH,SAAS,OAAO;GACd,IAAI,iBAAiB,2BAA2B,OAAO,EAAE,QAAQ,iBAAiB;GAClF,MAAM;EACR;EACA,MAAM,KAAKS,WAAW;GACpB,OAAO,MAAM;GACb,kBAAkB,SAAS;GAC3B,YAAY,MAAM;EACpB,CAAC;EACD,OAAO;GAAE,QAAQ;GAAW;GAAS;GAAU,UAAU,KAAKC,eAAe,SAAS,QAAQ;EAAE;CAClG;;;;;;;;;;CAWA,MAAMA,eAAe,SAA6B,UAAsC;EACtF,IAAI,UAAU;EACd,KAAK,MAAM,aAAa,KAAKJ,aAAa;GACxC,IAAI,QAAQ,gBAAgB,kBAAkB,UAAU,IAAI;GAC5D,IAAI;IACF,MAAM,YAAY,MAAM,UAAU,QAAQ,SAAS,QAAQ;IAC3D,IAAI,CAAC,WAAW;IAChB,UACG,MAAM,KAAKN,UAAU,qBAAqB;KACzC,OAAO,QAAQ;KACf,WAAW,QAAQ;KACnB,QAAQ,UAAU;IACpB,CAAC,KAAM;GACX,SAAS,KAAK;IACZ,QAAQ,KAAK,uDAAuD;KAClE,aAAa,UAAU;KACvB,WAAW,QAAQ;KACnB,OAAO,QAAQ;KACf,YAAY,SAAS;KACrB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;IACxD,CAAC;GACH;EACF;CACF;CAEA,MAAM,YAAY,OAAmE;EACnF,MAAM,KAAKA,UAAU,YAAY;EACjC,MAAM,KAAKC,WAAW,YAAY;EAElC,MAAM,YAAY,iBAAiB,MAAM,IAAI;EAC7C,IAAI,WAAW,OAAO;GAAE,QAAQ;GAAW,SAAS;EAAU;EAC9D,KAAK,MAAM,UAAU,UAAU,KAAA,IAC7B,OAAO;GAAE,QAAQ;GAAW,SAAS;EAAwD;EAG/F,MAAM,WAAW,MAAM,KAAKD,UAAU,IAAI;GAAE,OAAO,MAAM;GAAO,WAAW,MAAM;EAAU,CAAC;EAC5F,IAAI,CAAC,YAAY,SAAS,eAAe,MAAM,YAAY,OAAO,EAAE,QAAQ,YAAY;EACxF,IAAI,SAAS,WAAW,OAAO,EAAE,QAAQ,eAAe;EACxD,IAAI,SAAS,OAAO,OAAO,MAAM,OAAO,UAAU,CAAE,MAAM,MAAM,OAAO,YAAY,GACjF,OAAO,EAAE,QAAQ,YAAY;EAG/B,MAAM,SAAS,MAAM,KAAKA,UAAU,KAAK;GACvC,OAAO,MAAM;GACb,WAAW,MAAM;GACjB,MAAM,MAAM;GACZ,UAAU,MAAM,OAAO;GACvB,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;GACrD,GAAI,MAAM,qBAAqB,KAAA,IAAY,EAAE,kBAAkB,MAAM,iBAAiB,IAAI,CAAC;EAC7F,CAAC;EACD,IAAI,WAAW,YAAY,OAAO,EAAE,QAAQ,WAAW;EACvD,IAAI,CAAC,QAAQ,OAAO,EAAE,QAAQ,eAAe;EAE7C,MAAM,KAAKW,wBAAwB,UAAU,OAAO,eAAe;EACnE,MAAM,KAAKF,WAAW;GACpB,OAAO,SAAS;GAChB,kBAAkB,SAAS;GAC3B,YAAY,SAAS;EACvB,CAAC;EACD,OAAO;GAAE,QAAQ;GAAU,cAAc,SAAS;GAAM,GAAG;EAAO;CACpE;CAEA,MAAM,cAAc,OAAuE;EACzF,MAAM,KAAKT,UAAU,YAAY;EACjC,MAAM,KAAKC,WAAW,YAAY;EAElC,MAAM,WAAW,MAAM,KAAKD,UAAU,IAAI;GAAE,OAAO,MAAM;GAAO,WAAW,MAAM;EAAU,CAAC;EAC5F,IAAI,CAAC,YAAY,SAAS,eAAe,MAAM,YAAY,OAAO,EAAE,QAAQ,YAAY;EACxF,IAAI,SAAS,WAAW,OAAO,EAAE,QAAQ,eAAe;EACxD,IAAI,SAAS,OAAO,OAAO,MAAM,OAAO,UAAU,CAAE,MAAM,MAAM,OAAO,YAAY,GACjF,OAAO,EAAE,QAAQ,YAAY;EAG/B,MAAM,UAAU,MAAM,KAAKA,UAAU,WAAW;GAC9C,OAAO,MAAM;GACb,WAAW,MAAM;GACjB,WAAW,MAAM,OAAO;EAC1B,CAAC;EACD,IAAI,CAAC,SAAS,OAAO,EAAE,QAAQ,eAAe;EAE9C,MAAM,KAAKC,WAAW,wBAAwB;GAC5C,OAAO,SAAS;GAChB,kBAAkB,SAAS;GAC3B,YAAY,CAAC,gCAAgC,SAAS,EAAE,CAAC;EAC3D,CAAC;EACD,MAAM,KAAKQ,WAAW;GACpB,OAAO,SAAS;GAChB,kBAAkB,SAAS;GAC3B,YAAY,SAAS;EACvB,CAAC;EACD,OAAO;GAAE,QAAQ;GAAW,SAAS;EAAQ;CAC/C;;;;;CAMA,MAAME,wBAAwB,SAA6B,SAA6C;EACtG,KAAK,MAAM,WAAW,SACpB,MAAM,KAAKV,WAAW,wBAAwB;GAC5C,OAAO,QAAQ;GACf,kBAAkB,QAAQ;GAC1B,QAAQ,QAAQ;GAChB,YAAY,CAAC,gCAAgC,QAAQ,EAAE,CAAC;EAC1D,CAAC;CAEL;;;;;;CAOA,MAAM,cAAc,EAClB,OACA,oBAIiC;EACjC,MAAM,WAAW,GAAG,MAAM,IAAI;EAC9B,MAAM,SAAS,KAAKO,aAAa,IAAI,QAAQ;EAC7C,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,qBAAqB,OAAO,OAAO;EAE1E,MAAM,UAAU,MAAM,KAAKI,oBAAoB,KAAK;EACpD,IAAI,QAAQ,SAAS,GAAG,MAAM,KAAKC,YAAY,OAAO,kBAAkB,OAAO;EAE/E,MAAM,SAAS,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,eAAe;EAG7D,MAAM,SAAS,KAAK,IAAI,IAAI;EAC5B,KAAK,MAAM,CAAC,KAAK,UAAU,KAAKL,cAC9B,IAAI,MAAM,KAAK,QAAQ,KAAKA,aAAa,OAAO,GAAG;EAErD,KAAKA,aAAa,IAAI,UAAU;GAAE,IAAI,KAAK,IAAI;GAAG,SAAS;EAAO,CAAC;EACnE,OAAO;CACT;;CAGA,MAAMI,oBAAoB,OAA0D;EAClF,MAAM,0BAAU,IAAI,IAAiC;EACrD,IAAI,CAAC,KAAKR,UAAU,OAAO;EAC3B,IAAI;GACF,KAAK,MAAM,UAAU,MAAM,KAAKA,SAAS,wBAAwB,KAAK,GACpE,IAAI,qBAAqB,OAAO,EAAE,GAAG,QAAQ,IAAI,OAAO,IAAI,MAAM;EAEtE,SAAS,KAAK;GACZ,QAAQ,KAAK,yEAAyE,EACpF,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,EACxD,CAAC;EACH;EACA,OAAO;CACT;CAEA,MAAMS,YAAY,OAAe,kBAA0B,SAA0D;EACnH,KAAK,MAAM,UAAU,MAAM,KAAKb,UAAU,kBAAkB;GAAE;GAAO;EAAiB,CAAC,GAAG;GACxF,IAAI,OAAO,SAAS,UAAU,CAAC,qBAAqB,OAAO,EAAE,GAAG;GAChE,QAAQ,IAAI,OAAO,IAAI;IACrB,IAAI,OAAO;IACX,GAAI,OAAO,cAAc,EAAE,MAAM,OAAO,YAAY,IAAI,CAAC;IACzD,GAAI,OAAO,YAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;GAC5D,CAAC;EACH;EACA,IAAI,CAAC,KAAKG,kBAAkB;EAC5B,MAAM,KAAKA,iBAAiB,YAAY;EACxC,KAAK,MAAM,QAAQ,MAAM,KAAKA,iBAAiB,uBAAuB,KAAK,GAAG;GAC5E,IAAI,QAAQ,IAAI,KAAK,MAAM,GAAG;GAC9B,QAAQ,IAAI,KAAK,QAAQ;IACvB,IAAI,KAAK;IACT,GAAI,KAAK,mBAAmB,EAAE,MAAM,KAAK,iBAAiB,IAAI,CAAC;GACjE,CAAC;EACH;CACF;CAEA,SAAqB;EACnB,OAAO,mBAAmB;GACxB,QAAQ;GACR,MAAM,KAAKJ;GACX,UAAU,KAAKC;GACf,WAAW,KAAKC;GAChB,UAAU,KAAKC;GACf,QAAQ,KAAKK;GACb,GAAI,KAAKF,SAAS,EAAE,OAAO,KAAKA,OAAO,IAAI,CAAC;EAC9C,CAAC;CACH;AACF"}
@@ -1,38 +1,21 @@
1
1
  /**
2
- * Two-way platform sync seam (COR-1174). Interfaces only no platform code
3
- * ships here. Echo prevention is two layers: `source_key` idempotency for rows
4
- * born on the platform, and the host's bot-sender check for the window between
5
- * an outbound publish and its `attachExternalSource` write-back.
2
+ * Outbound half of the two-way platform sync (COR-1174). Inbound needs no seam:
3
+ * a platform message is a comment, so ingest calls `createComment` with an
4
+ * `externalSource`.
5
+ *
6
+ * Echo prevention is three layers: `source_key` idempotency, the fan-out
7
+ * skipping a comment's own platform, and the host's bot-sender check for the
8
+ * window between a publish and its `attachExternalSource` write-back.
6
9
  */
7
10
  import type { ExternalWorkItemSource, WorkItemRow } from '../work-items/base.js';
8
- import type { FactoryActorRef } from './actor.js';
9
11
  import type { WorkItemCommentRow } from './base.js';
10
- /**
11
- * Inbound: platform messages become comments, keyed by a stable source
12
- * (e.g. `slack:message:<channel>:<ts>` — `ts` survives edits, so an edit
13
- * re-upserts the same row and a delete tombstones it).
14
- */
15
- export interface WorkItemFeedIngest {
16
- upsertMessage(input: {
17
- orgId: string;
18
- workItemId: string;
19
- author: FactoryActorRef;
20
- body: string;
21
- occurredAt: Date;
22
- source: ExternalWorkItemSource;
23
- }): Promise<WorkItemCommentRow>;
24
- deleteMessage(input: {
25
- orgId: string;
26
- factoryProjectId: string;
27
- source: ExternalWorkItemSource;
28
- }): Promise<void>;
29
- }
30
12
  /** Outbound: mirrors a created comment to one platform. */
31
13
  export interface WorkItemFeedPublisher {
32
14
  /** Matches `ExternalWorkItemSource.integrationId`; fan-out skips a comment's own platform. */
33
15
  readonly id: string;
16
+ /** `null` when the work item is not bound to this platform — nothing to mirror. */
34
17
  publish(comment: WorkItemCommentRow, workItem: WorkItemRow): Promise<{
35
18
  source: ExternalWorkItemSource;
36
- }>;
19
+ } | null>;
37
20
  }
38
21
  //# sourceMappingURL=feed-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feed-sync.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/comments/feed-sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,KAAK,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,eAAe,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,IAAI,CAAC;QACjB,MAAM,EAAE,sBAAsB,CAAC;KAChC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,aAAa,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClH;AAED,2DAA2D;AAC3D,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,sBAAsB,CAAA;KAAE,CAAC,CAAC;CAC1G"}
1
+ {"version":3,"file":"feed-sync.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/comments/feed-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,2DAA2D;AAC3D,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACjH"}
@@ -15,6 +15,12 @@ export declare function factoryDecisionHash(decision: Record<string, unknown>):
15
15
  export interface ExternalWorkItemSource {
16
16
  integrationId: string;
17
17
  type: string;
18
+ /**
19
+ * The tenant on the platform, never ours: a Slack team (`T0ABC…`), a Discord
20
+ * guild. Scopes the key, because a platform id such as a channel or a message
21
+ * `ts` is only unique inside the workspace that issued it.
22
+ */
23
+ workspaceId?: string;
18
24
  externalId: string;
19
25
  url?: string;
20
26
  }
@@ -408,6 +414,12 @@ export interface UpsertWorkItemResult {
408
414
  previous: WorkItemPriorState;
409
415
  }
410
416
  export declare const WORK_ITEMS_SCHEMA: CollectionSchema;
417
+ /**
418
+ * The one shape a platform id takes in a lookup key, for cards and for the
419
+ * comments mirrored off them alike: whoever writes a second builder reopens the
420
+ * cross-workspace collision the `workspaceId` is here to close.
421
+ */
422
+ export declare function externalSourceKey(source: ExternalWorkItemSource | null | undefined): string | null;
411
423
  export declare class WorkItemRelationError extends Error {
412
424
  readonly code = "invalid_work_item_relation";
413
425
  }
@@ -462,6 +474,13 @@ export declare class WorkItemsStorage extends FactoryStorageDomain {
462
474
  orgId: string;
463
475
  id: string;
464
476
  }): Promise<WorkItemRow | null>;
477
+ /**
478
+ * Resolve the card a platform thread created, given only its external source.
479
+ * Bare of org/project because an inbound platform message carries neither: an
480
+ * unlinked sender has no tenant. Tenant safety rides on the key's
481
+ * `workspaceId` instead. Ambiguous matches resolve to nothing, not a guess.
482
+ */
483
+ getBySource(source: ExternalWorkItemSource): Promise<WorkItemRow | null>;
465
484
  getForProject(orgId: string, factoryProjectId: string, id: string): Promise<WorkItemRow | null>;
466
485
  getTransitionResultByIngress(orgId: string, factoryProjectId: string, identity: string): Promise<Record<string, unknown> | null>;
467
486
  commitTransition(input: CommitFactoryTransitionInput): Promise<CommitFactoryTransitionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/work-items/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/work-items/base.ts"],"names":[],"mappings":"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"}
@@ -147,25 +147,39 @@ const WORK_ITEMS_SCHEMA = {
147
147
  name: "work_items_project_source_key_unique",
148
148
  columns: ["factory_project_id", "source_key"]
149
149
  }],
150
- indexes: [{
151
- name: "work_items_org_project_created_at_id_idx",
152
- columns: [
153
- "org_id",
154
- "factory_project_id",
155
- "created_at",
156
- "id"
157
- ]
158
- }, {
159
- name: "work_items_project_parent_idx",
160
- columns: [
161
- "org_id",
162
- "factory_project_id",
163
- "parent_work_item_id"
164
- ]
165
- }]
150
+ indexes: [
151
+ {
152
+ name: "work_items_org_project_created_at_id_idx",
153
+ columns: [
154
+ "org_id",
155
+ "factory_project_id",
156
+ "created_at",
157
+ "id"
158
+ ]
159
+ },
160
+ {
161
+ name: "work_items_project_parent_idx",
162
+ columns: [
163
+ "org_id",
164
+ "factory_project_id",
165
+ "parent_work_item_id"
166
+ ]
167
+ },
168
+ {
169
+ name: "work_items_source_key_idx",
170
+ columns: ["source_key"]
171
+ }
172
+ ]
166
173
  };
167
- function sourceKey(source) {
168
- return source ? `${source.integrationId}:${source.type}:${source.externalId}` : null;
174
+ /**
175
+ * The one shape a platform id takes in a lookup key, for cards and for the
176
+ * comments mirrored off them alike: whoever writes a second builder reopens the
177
+ * cross-workspace collision the `workspaceId` is here to close.
178
+ */
179
+ function externalSourceKey(source) {
180
+ if (!source) return null;
181
+ const workspace = source.workspaceId ? `${source.workspaceId}:` : "";
182
+ return `${source.integrationId}:${source.type}:${workspace}${source.externalId}`;
169
183
  }
170
184
  function toWorkItem(row) {
171
185
  return {
@@ -891,6 +905,16 @@ var WorkItemsStorage = class extends FactoryStorageDomain {
891
905
  });
892
906
  return row ? toWorkItem(row) : null;
893
907
  }
908
+ /**
909
+ * Resolve the card a platform thread created, given only its external source.
910
+ * Bare of org/project because an inbound platform message carries neither: an
911
+ * unlinked sender has no tenant. Tenant safety rides on the key's
912
+ * `workspaceId` instead. Ambiguous matches resolve to nothing, not a guess.
913
+ */
914
+ async getBySource(source) {
915
+ const rows = await this.#db.findMany("work_items", { source_key: externalSourceKey(source) });
916
+ return rows.length === 1 ? toWorkItem(rows[0]) : null;
917
+ }
894
918
  async getForProject(orgId, factoryProjectId, id) {
895
919
  const row = await this.#db.findOne("work_items", {
896
920
  id,
@@ -1817,10 +1841,10 @@ var WorkItemsStorage = class extends FactoryStorageDomain {
1817
1841
  id: input.workItem.id,
1818
1842
  org_id: input.orgId,
1819
1843
  factory_project_id: input.factoryProjectId
1820
- }) : sourceKey(create.externalSource) ? await ops.findOne("work_items", {
1844
+ }) : externalSourceKey(create.externalSource) ? await ops.findOne("work_items", {
1821
1845
  org_id: input.orgId,
1822
1846
  factory_project_id: input.factoryProjectId,
1823
- source_key: sourceKey(create.externalSource)
1847
+ source_key: externalSourceKey(create.externalSource)
1824
1848
  }) : null;
1825
1849
  let item;
1826
1850
  if (row) {
@@ -1842,7 +1866,7 @@ var WorkItemsStorage = class extends FactoryStorageDomain {
1842
1866
  created_by: input.userId,
1843
1867
  factory_project_id: input.factoryProjectId,
1844
1868
  external_source: create.externalSource ?? null,
1845
- source_key: sourceKey(create.externalSource),
1869
+ source_key: externalSourceKey(create.externalSource),
1846
1870
  parent_work_item_id: create.parentWorkItemId ?? null,
1847
1871
  title: create.title,
1848
1872
  stages: create.stages ?? [],
@@ -1952,7 +1976,7 @@ var WorkItemsStorage = class extends FactoryStorageDomain {
1952
1976
  }
1953
1977
  }
1954
1978
  async #upsert({ orgId, userId, factoryProjectId, input, reuseMode = "update" }, ops) {
1955
- const key = sourceKey(input.externalSource);
1979
+ const key = externalSourceKey(input.externalSource);
1956
1980
  const reuse = async () => {
1957
1981
  if (!key) return null;
1958
1982
  const existing = await ops.findOne("work_items", {
@@ -2197,6 +2221,6 @@ var WorkItemsStorage = class extends FactoryStorageDomain {
2197
2221
  }
2198
2222
  };
2199
2223
  //#endregion
2200
- export { FACTORY_PULL_REQUEST_RECONCILIATION_KEY, FACTORY_RULE_MATERIALIZATION_KEY, WORK_ITEMS_SCHEMA, WorkItemRelationError, WorkItemsStorage, applyStageTransition, factoryActivityAttentionIdentity, factoryAttentionKey, factoryDecisionAttentionIdentity, factoryDecisionHash, factoryMentionAttentionIdentity, isAgentActor, stampSessions, validateParentRelation };
2224
+ export { FACTORY_PULL_REQUEST_RECONCILIATION_KEY, FACTORY_RULE_MATERIALIZATION_KEY, WORK_ITEMS_SCHEMA, WorkItemRelationError, WorkItemsStorage, applyStageTransition, externalSourceKey, factoryActivityAttentionIdentity, factoryAttentionKey, factoryDecisionAttentionIdentity, factoryDecisionHash, factoryMentionAttentionIdentity, isAgentActor, stampSessions, validateParentRelation };
2201
2225
 
2202
2226
  //# sourceMappingURL=base.js.map