{"version":3,"sources":["../src/human-plus/events.ts"],"names":[],"mappings":"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","file":"human-plus.cjs","sourcesContent":["export type HumanPlusActor = { kind: \"human\" | \"agent\" | \"system\"; id: string; name?: string };\nexport type HumanPlusPriority = \"background\" | \"normal\" | \"attention\" | \"blocking\";\nexport type HumanPlusDisposition = \"seen\" | \"handled\" | \"rejected\" | \"ignored\";\n\nexport interface HumanPlusEvent<T = unknown> {\n  id: string;\n  sequence: number;\n  timestamp: number;\n  appId: string;\n  surfaceId: string;\n  sessionId?: string;\n  type: string;\n  payload: T;\n  actor: HumanPlusActor;\n  priority: HumanPlusPriority;\n  correlationId?: string;\n  causationId?: string;\n}\nexport type NewHumanPlusEvent<T = unknown> = Omit<HumanPlusEvent<T>, \"id\" | \"sequence\" | \"timestamp\"> & Partial<Pick<HumanPlusEvent<T>, \"id\" | \"timestamp\">>;\nexport interface HumanPlusEventQuery { consumerId: string; after?: number; limit?: number; unacknowledgedOnly?: boolean; types?: string[]; surfaces?: string[]; }\nexport interface HumanPlusEventPage { events: HumanPlusEvent[]; nextCursor: number; }\nexport type HumanPlusEventListener = (event: HumanPlusEvent) => void;\n\nexport interface HumanPlusEventStore {\n  append(event: NewHumanPlusEvent): Promise<HumanPlusEvent>;\n  list(query: HumanPlusEventQuery): Promise<HumanPlusEventPage>;\n  acknowledge(consumerId: string, eventIds: string[], disposition: HumanPlusDisposition): Promise<void>;\n  subscribe(listener: HumanPlusEventListener): () => void;\n  compact?(options?: { before?: number; keepLast?: number }): Promise<void>;\n}\n\nexport class MemoryHumanPlusEventStore implements HumanPlusEventStore {\n  protected events: HumanPlusEvent[] = [];\n  protected acknowledgements = new Map<string, Map<string, HumanPlusDisposition>>();\n  protected listeners = new Set<HumanPlusEventListener>();\n  protected nextSequence = 1;\n\n  async append(input: NewHumanPlusEvent): Promise<HumanPlusEvent> {\n    const event: HumanPlusEvent = { ...input, id: input.id ?? globalThis.crypto.randomUUID(), timestamp: input.timestamp ?? Date.now(), sequence: this.nextSequence++ };\n    this.events.push(event); this.listeners.forEach((listener) => listener(event)); return event;\n  }\n  async list(query: HumanPlusEventQuery): Promise<HumanPlusEventPage> {\n    const acknowledged = this.acknowledgements.get(query.consumerId);\n    const events = this.events.filter((event) => event.sequence > (query.after ?? 0)\n      && (!query.unacknowledgedOnly || !acknowledged?.has(event.id))\n      && (!query.types?.length || query.types.includes(event.type))\n      && (!query.surfaces?.length || query.surfaces.includes(event.surfaceId)))\n      .slice(0, Math.max(1, Math.min(500, query.limit ?? 50)));\n    return { events, nextCursor: events.at(-1)?.sequence ?? query.after ?? 0 };\n  }\n  async acknowledge(consumerId: string, eventIds: string[], disposition: HumanPlusDisposition): Promise<void> {\n    let values = this.acknowledgements.get(consumerId); if (!values) { values = new Map(); this.acknowledgements.set(consumerId, values); }\n    eventIds.forEach((id) => values!.set(id, disposition));\n  }\n  subscribe(listener: HumanPlusEventListener): () => void { this.listeners.add(listener); return () => this.listeners.delete(listener); }\n  async compact(options: { before?: number; keepLast?: number } = {}): Promise<void> {\n    const cutoff = options.before ?? Number.POSITIVE_INFINITY; const keep = options.keepLast ?? 1000;\n    const removable = Math.max(0, this.events.length - keep);\n    this.events = this.events.filter((event, index) => index >= removable || event.timestamp >= cutoff);\n    const ids = new Set(this.events.map((event) => event.id));\n    for (const values of this.acknowledgements.values()) for (const id of values.keys()) if (!ids.has(id)) values.delete(id);\n  }\n}\n"]}