@xpert-ai/xpert-sdk 0.22.0 → 0.23.0

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 (34) hide show
  1. package/dist/conversation-resource-types.d.ts +10 -0
  2. package/dist/conversation-resource-types.js +3 -0
  3. package/dist/conversation-resource-types.js.map +1 -0
  4. package/dist/conversation-resource-types.mjs +3 -0
  5. package/dist/conversation-resource-types.mjs.map +1 -0
  6. package/dist/group-resource-links.d.ts +34 -0
  7. package/dist/group-resource-links.js +71 -0
  8. package/dist/group-resource-links.js.map +1 -0
  9. package/dist/group-resource-links.mjs +71 -0
  10. package/dist/group-resource-links.mjs.map +1 -0
  11. package/dist/group-types.d.ts +31 -5
  12. package/dist/groups.d.ts +3 -1
  13. package/dist/groups.js +52 -26
  14. package/dist/groups.js.map +1 -1
  15. package/dist/groups.mjs +52 -26
  16. package/dist/groups.mjs.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +1 -0
  19. package/dist/index.mjs +1 -0
  20. package/dist/tests/group-reply-stages.test.d.ts +1 -0
  21. package/dist/tests/group-reply-stages.test.js +50 -0
  22. package/dist/tests/group-reply-stages.test.js.map +1 -0
  23. package/dist/tests/group-reply-stages.test.mjs +50 -0
  24. package/dist/tests/group-reply-stages.test.mjs.map +1 -0
  25. package/dist/tests/group-resource-links.test.d.ts +1 -0
  26. package/dist/tests/group-resource-links.test.js +94 -0
  27. package/dist/tests/group-resource-links.test.js.map +1 -0
  28. package/dist/tests/group-resource-links.test.mjs +94 -0
  29. package/dist/tests/group-resource-links.test.mjs.map +1 -0
  30. package/dist/tests/groups.test.js +70 -3
  31. package/dist/tests/groups.test.js.map +1 -1
  32. package/dist/tests/groups.test.mjs +70 -3
  33. package/dist/tests/groups.test.mjs.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ /** Stable locator in the current authorized conversation. IDs never carry permissions or change Project scope. */
2
+ export type ConversationResourceTarget = {
3
+ kind: 'project-content';
4
+ id: string;
5
+ } | {
6
+ kind: 'group-reference';
7
+ id: string;
8
+ };
9
+ /** Host-owned navigation through the target's native authorization adapter; no arbitrary URLs or source Project IDs. */
10
+ export declare const WORKBENCH_RESOURCE_OPEN_COMMAND = "workbench.resource.open";
@@ -0,0 +1,3 @@
1
+ /** Host-owned navigation through the target's native authorization adapter; no arbitrary URLs or source Project IDs. */
2
+ export const WORKBENCH_RESOURCE_OPEN_COMMAND = 'workbench.resource.open';
3
+ //# sourceMappingURL=conversation-resource-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-resource-types.js","sourceRoot":"","sources":["../src/conversation-resource-types.ts"],"names":[],"mappings":"AAKA,wHAAwH;AACxH,MAAM,CAAC,MAAM,+BAA+B,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Host-owned navigation through the target's native authorization adapter; no arbitrary URLs or source Project IDs. */
2
+ export const WORKBENCH_RESOURCE_OPEN_COMMAND = 'workbench.resource.open';
3
+ //# sourceMappingURL=conversation-resource-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-resource-types.mjs","sourceRoot":"","sources":["../src/conversation-resource-types.ts"],"names":[],"mappings":"AAKA,wHAAwH;AACxH,MAAM,CAAC,MAAM,+BAA+B,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ChatGroupEvent, ChatGroupMessage, ChatGroupResourceLink, ChatGroupResourceOpenRequest, ChatGroupSnapshot } from './group-types.js';
2
+ type LegacyResourceLink = Pick<ChatGroupResourceLink, 'projectId' | 'title'> & ({
3
+ kind?: 'group-reference';
4
+ referenceId: string;
5
+ } | {
6
+ kind: 'project-content';
7
+ contentId: string;
8
+ });
9
+ export type GroupResourceLinkWire = ChatGroupResourceLink | LegacyResourceLink;
10
+ export type GroupMessageWire = Omit<ChatGroupMessage, 'communication'> & {
11
+ communication: Omit<ChatGroupMessage['communication'], 'resourceLinks'> & {
12
+ resourceLinks?: GroupResourceLinkWire[];
13
+ };
14
+ };
15
+ export type GroupSnapshotWire = Omit<ChatGroupSnapshot, 'messages'> & {
16
+ messages: GroupMessageWire[];
17
+ };
18
+ export type GroupEventWire = Exclude<ChatGroupEvent, {
19
+ type: 'snapshot' | 'resource_open';
20
+ }> | {
21
+ type: 'snapshot';
22
+ snapshot: GroupSnapshotWire;
23
+ } | {
24
+ type: 'resource_open';
25
+ request: GroupResourceLinkWire & Pick<ChatGroupResourceOpenRequest, 'requestId' | 'clientMessageId'>;
26
+ };
27
+ export declare function isResourceUuid(value: unknown): value is string;
28
+ /** Reject ambiguous locators instead of choosing between old and new identities. */
29
+ export declare function parseGroupResourceLink(value: unknown): ChatGroupResourceLink | null;
30
+ export declare function isGroupResourceLinkWire(value: unknown): value is GroupResourceLinkWire;
31
+ export declare function isCanonicalResourceLink(value: GroupResourceLinkWire): value is ChatGroupResourceLink;
32
+ export declare function normalizeGroupMessage(message: GroupMessageWire): ChatGroupMessage;
33
+ export declare function normalizeGroupSnapshot(snapshot: GroupSnapshotWire): ChatGroupSnapshot;
34
+ export {};
@@ -0,0 +1,71 @@
1
+ export function isResourceUuid(value) {
2
+ return (typeof value === 'string' &&
3
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value));
4
+ }
5
+ /** Reject ambiguous locators instead of choosing between old and new identities. */
6
+ export function parseGroupResourceLink(value) {
7
+ if (!value ||
8
+ typeof value !== 'object' ||
9
+ !('projectId' in value) ||
10
+ !isResourceUuid(value.projectId) ||
11
+ !('title' in value) ||
12
+ typeof value.title !== 'string' ||
13
+ value.title.length > 200)
14
+ return null;
15
+ const base = { projectId: value.projectId, title: value.title };
16
+ if ('resource' in value) {
17
+ if ('kind' in value || 'referenceId' in value || 'contentId' in value)
18
+ return null;
19
+ const resource = value.resource;
20
+ if (!resource ||
21
+ typeof resource !== 'object' ||
22
+ !('kind' in resource) ||
23
+ !('id' in resource) ||
24
+ !isResourceUuid(resource.id) ||
25
+ (resource.kind !== 'group-reference' && resource.kind !== 'project-content') ||
26
+ Object.keys(resource).some((key) => key !== 'kind' && key !== 'id'))
27
+ return null;
28
+ return { ...base, resource: { kind: resource.kind, id: resource.id } };
29
+ }
30
+ if ((!('kind' in value) || value.kind === 'group-reference') &&
31
+ 'referenceId' in value &&
32
+ isResourceUuid(value.referenceId) &&
33
+ !('contentId' in value))
34
+ return { ...base, resource: { kind: 'group-reference', id: value.referenceId } };
35
+ if ('kind' in value &&
36
+ value.kind === 'project-content' &&
37
+ 'contentId' in value &&
38
+ isResourceUuid(value.contentId) &&
39
+ !('referenceId' in value))
40
+ return { ...base, resource: { kind: 'project-content', id: value.contentId } };
41
+ return null;
42
+ }
43
+ export function isGroupResourceLinkWire(value) {
44
+ return parseGroupResourceLink(value) !== null;
45
+ }
46
+ export function isCanonicalResourceLink(value) {
47
+ return 'resource' in value;
48
+ }
49
+ export function normalizeGroupMessage(message) {
50
+ const { resourceLinks, ...communication } = message.communication;
51
+ if (resourceLinks === undefined)
52
+ return { ...message, communication };
53
+ if (!Array.isArray(resourceLinks))
54
+ throw new Error('Invalid group resource links');
55
+ return {
56
+ ...message,
57
+ communication: {
58
+ ...communication,
59
+ resourceLinks: resourceLinks.map((link) => {
60
+ const parsed = parseGroupResourceLink(link);
61
+ if (!parsed)
62
+ throw new Error('Invalid group resource link');
63
+ return parsed;
64
+ }),
65
+ },
66
+ };
67
+ }
68
+ export function normalizeGroupSnapshot(snapshot) {
69
+ return { ...snapshot, messages: snapshot.messages.map(normalizeGroupMessage) };
70
+ }
71
+ //# sourceMappingURL=group-resource-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-resource-links.js","sourceRoot":"","sources":["../src/group-resource-links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export function isResourceUuid(value) {
2
+ return (typeof value === 'string' &&
3
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value));
4
+ }
5
+ /** Reject ambiguous locators instead of choosing between old and new identities. */
6
+ export function parseGroupResourceLink(value) {
7
+ if (!value ||
8
+ typeof value !== 'object' ||
9
+ !('projectId' in value) ||
10
+ !isResourceUuid(value.projectId) ||
11
+ !('title' in value) ||
12
+ typeof value.title !== 'string' ||
13
+ value.title.length > 200)
14
+ return null;
15
+ const base = { projectId: value.projectId, title: value.title };
16
+ if ('resource' in value) {
17
+ if ('kind' in value || 'referenceId' in value || 'contentId' in value)
18
+ return null;
19
+ const resource = value.resource;
20
+ if (!resource ||
21
+ typeof resource !== 'object' ||
22
+ !('kind' in resource) ||
23
+ !('id' in resource) ||
24
+ !isResourceUuid(resource.id) ||
25
+ (resource.kind !== 'group-reference' && resource.kind !== 'project-content') ||
26
+ Object.keys(resource).some((key) => key !== 'kind' && key !== 'id'))
27
+ return null;
28
+ return { ...base, resource: { kind: resource.kind, id: resource.id } };
29
+ }
30
+ if ((!('kind' in value) || value.kind === 'group-reference') &&
31
+ 'referenceId' in value &&
32
+ isResourceUuid(value.referenceId) &&
33
+ !('contentId' in value))
34
+ return { ...base, resource: { kind: 'group-reference', id: value.referenceId } };
35
+ if ('kind' in value &&
36
+ value.kind === 'project-content' &&
37
+ 'contentId' in value &&
38
+ isResourceUuid(value.contentId) &&
39
+ !('referenceId' in value))
40
+ return { ...base, resource: { kind: 'project-content', id: value.contentId } };
41
+ return null;
42
+ }
43
+ export function isGroupResourceLinkWire(value) {
44
+ return parseGroupResourceLink(value) !== null;
45
+ }
46
+ export function isCanonicalResourceLink(value) {
47
+ return 'resource' in value;
48
+ }
49
+ export function normalizeGroupMessage(message) {
50
+ const { resourceLinks, ...communication } = message.communication;
51
+ if (resourceLinks === undefined)
52
+ return { ...message, communication };
53
+ if (!Array.isArray(resourceLinks))
54
+ throw new Error('Invalid group resource links');
55
+ return {
56
+ ...message,
57
+ communication: {
58
+ ...communication,
59
+ resourceLinks: resourceLinks.map((link) => {
60
+ const parsed = parseGroupResourceLink(link);
61
+ if (!parsed)
62
+ throw new Error('Invalid group resource link');
63
+ return parsed;
64
+ }),
65
+ },
66
+ };
67
+ }
68
+ export function normalizeGroupSnapshot(snapshot) {
69
+ return { ...snapshot, messages: snapshot.messages.map(normalizeGroupMessage) };
70
+ }
71
+ //# sourceMappingURL=group-resource-links.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-resource-links.mjs","sourceRoot":"","sources":["../src/group-resource-links.ts"],"names":[],"mappings":"AAgCA,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,iEAAiE,CAAC,IAAI,CAAC,KAAK,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IACE,CAAC,KAAK;QACN,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QACvB,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;QAExB,OAAO,IAAI,CAAC;IACd,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAChE,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,IAAI,KAAK,IAAI,aAAa,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK;YAAE,OAAO,IAAI,CAAC;QACnF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IACE,CAAC,QAAQ;YACT,OAAO,QAAQ,KAAK,QAAQ;YAC5B,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;YACrB,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC;YACnB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,CAAC,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC;YAEnE,OAAO,IAAI,CAAC;QACd,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IACzE,CAAC;IACD,IACE,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;QACxD,aAAa,IAAI,KAAK;QACtB,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QAEvB,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IACnF,IACE,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,iBAAiB;QAChC,WAAW,IAAI,KAAK;QACpB,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC;QAEzB,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;IACjF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,sBAAsB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAChD,CAAC;AACD,MAAM,UAAU,uBAAuB,CACrC,KAA4B;IAE5B,OAAO,UAAU,IAAI,KAAK,CAAC;AAC7B,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAClE,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACnF,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE;YACb,GAAG,aAAa;YAChB,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC5D,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;SACH;KACF,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;AACjF,CAAC"}
@@ -1,9 +1,16 @@
1
+ import type { ConversationResourceTarget } from './conversation-resource-types.js';
1
2
  import type { ChatMessage } from './schema.js';
2
3
  import type { XpertProjectTypeRef } from './schema.js';
3
4
  import type { RuntimeCapabilitiesSelection } from './schema.js';
4
5
  import type { RuntimeResourcesSelection } from './runtime-resources.js';
5
6
  /** Snapshots expose public messages; runtime details require workspace read access. */
6
7
  export type ChatGroupIntent = 'request' | 'reply' | 'message';
8
+ /**
9
+ * Completion intent for one sender's answer to one request, independent of delivery/run status.
10
+ * Progress is a partial answer and does not wake the requester; final completes the answer only
11
+ * after successful publication. Neither stage accepts or completes a Project task.
12
+ */
13
+ export type ChatGroupReplyStage = 'progress' | 'final';
7
14
  export type ChatGroupDeliveryStatus = 'pending' | 'starting' | 'steering' | 'consumed' | 'blocked' | 'canceled' | 'failed';
8
15
  export interface ChatGroupParticipant {
9
16
  id: string;
@@ -42,14 +49,14 @@ export interface ChatGroupComposerInput {
42
49
  }
43
50
  /**
44
51
  * Server-authored clickable entry persisted in message history, not an open-on-load instruction.
45
- * Clicking must reauthorize the reference through the current group's transport.
52
+ * Clicking reauthorizes the resource through the current conversation's host adapter.
46
53
  */
47
54
  export interface ChatGroupResourceLink {
48
- /** Accepted reference ID, not a source Artifact ID or public share token. */
49
- referenceId: string;
50
- /** Receiving group's runtime Project; never switch to the source authoring Project. */
55
+ /** Canonical locator shared with discovery and Workbench. Contains no access grant. */
56
+ resource: ConversationResourceTarget;
57
+ /** Receiving group's runtime Project; checked before opening, never a source Project override. */
51
58
  projectId: string;
52
- /** Display label only; do not infer identity or resource type from it. */
59
+ /** Display label only; never use it to infer resource identity or type. */
53
60
  title: string;
54
61
  }
55
62
  /** Live, requester-addressed navigation event; consumers match the local send and deduplicate it. */
@@ -97,6 +104,12 @@ export interface ChatGroupCommunication {
97
104
  senderId: string;
98
105
  recipientIds: string[];
99
106
  replyToMessageId?: string;
107
+ /**
108
+ * Only valid on replies. Missing on legacy replies means final; new publications include it.
109
+ * A successfully published final tool reply suppresses the automatic final answer for the same
110
+ * request and sender. Progress, message and request publications do not suppress that answer.
111
+ */
112
+ replyStage?: ChatGroupReplyStage;
100
113
  causedByMessageId?: string;
101
114
  rootMessageId: string;
102
115
  rootUserId: string;
@@ -107,6 +120,19 @@ export interface ChatGroupMessage {
107
120
  clientMessageId: string;
108
121
  sequence: number;
109
122
  text: string;
123
+ /**
124
+ * Optional server-filtered result snapshots. May be present with empty text.
125
+ * IDs are stable within this public message; repeated snapshots replace rather than append blocks.
126
+ * Known forms use existing ChatKit `resource_card` or `component` (Widget / McpApp) payloads.
127
+ * Payloads stay opaque at this transport boundary: renderers must validate the concrete type,
128
+ * ignore unknown forms and never reconnect a copied MCP result to the originating App session.
129
+ * These blocks confer no resource permissions, do not wake recipients and do not complete replies.
130
+ */
131
+ display?: {
132
+ id: string;
133
+ type: 'component' | 'resource_card';
134
+ data: unknown;
135
+ }[];
110
136
  createdAt: string;
111
137
  communication: ChatGroupCommunication;
112
138
  runtimeParticipantIds?: string[];
package/dist/groups.d.ts CHANGED
@@ -88,5 +88,7 @@ export declare class GroupsClient {
88
88
  data: ChatGroupEvent;
89
89
  }>;
90
90
  }
91
- /** Validate the discriminant and payload at the streaming transport boundary. */
91
+ /** Decode compatibility payloads before they enter typed group state or UI navigation. */
92
+ export declare function parseGroupEvent(value: unknown): ChatGroupEvent | null;
93
+ /** Type guard for the canonical contract; legacy wire messages must go through parseGroupEvent. */
92
94
  export declare function isGroupEvent(value: unknown): value is ChatGroupEvent;
package/dist/groups.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { isCanonicalResourceLink, isGroupResourceLinkWire, isResourceUuid, normalizeGroupMessage, normalizeGroupSnapshot, parseGroupResourceLink, } from "./group-resource-links.js";
1
2
  import { GroupArtifactsClient } from "./group-artifacts.js";
2
3
  /**
3
4
  * Group APIs reuse the client's configured ChatKit authentication/refresh hooks.
@@ -46,11 +47,11 @@ export class GroupsClient {
46
47
  create(input, options) {
47
48
  return this.transport.json('/groups', { ...options, method: 'POST', json: input });
48
49
  }
49
- get(groupId, options) {
50
- return this.transport.json(`/groups/${encodeURIComponent(groupId)}`, {
50
+ async get(groupId, options) {
51
+ return normalizeGroupSnapshot(await this.transport.json(`/groups/${encodeURIComponent(groupId)}`, {
51
52
  signal: options?.signal,
52
53
  params: { before: options?.before, limit: options?.limit },
53
- });
54
+ }));
54
55
  }
55
56
  runtime(groupId, messageId, participantId, options) {
56
57
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages/${encodeURIComponent(messageId)}/runtime/${encodeURIComponent(participantId)}`, options);
@@ -58,12 +59,12 @@ export class GroupsClient {
58
59
  composerContext(groupId, participantId, options) {
59
60
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/members/${encodeURIComponent(participantId)}/composer/context`, options);
60
61
  }
61
- send(groupId, input, options) {
62
- return this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages`, {
62
+ async send(groupId, input, options) {
63
+ return normalizeGroupMessage(await this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages`, {
63
64
  ...options,
64
65
  method: 'POST',
65
66
  json: input,
66
- });
67
+ }));
67
68
  }
68
69
  addMember(groupId, input, options) {
69
70
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/members`, {
@@ -100,16 +101,17 @@ export class GroupsClient {
100
101
  throw new Error('Group stream failed');
101
102
  if (item.event !== 'group')
102
103
  continue;
103
- if (!isGroupEvent(item.data))
104
+ const data = parseGroupEvent(item.data);
105
+ if (!data)
104
106
  throw new Error('Invalid group stream event');
105
- if (item.data.type === 'snapshot' && item.data.snapshot.id !== groupId)
107
+ if (data.type === 'snapshot' && data.snapshot.id !== groupId)
106
108
  throw new Error('Group stream scope mismatch');
107
- yield { id: item.id, data: item.data };
109
+ yield { id: item.id, data };
108
110
  }
109
111
  }
110
112
  }
111
- /** Validate the discriminant and payload at the streaming transport boundary. */
112
- export function isGroupEvent(value) {
113
+ /** Validate legacy wire payloads only at the transport boundary. */
114
+ function isGroupEventWire(value) {
113
115
  if (!value || typeof value !== 'object' || !('type' in value))
114
116
  return false;
115
117
  if (value.type === 'resync')
@@ -118,22 +120,11 @@ export function isGroupEvent(value) {
118
120
  if (!('request' in value) || !value.request || typeof value.request !== 'object')
119
121
  return false;
120
122
  const r = value.request;
121
- const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
122
- return ('requestId' in r &&
123
- typeof r.requestId === 'string' &&
124
- uuid.test(r.requestId) &&
123
+ return (isGroupResourceLinkWire(r) &&
124
+ 'requestId' in r &&
125
+ isResourceUuid(r.requestId) &&
125
126
  'clientMessageId' in r &&
126
- typeof r.clientMessageId === 'string' &&
127
- uuid.test(r.clientMessageId) &&
128
- 'referenceId' in r &&
129
- typeof r.referenceId === 'string' &&
130
- uuid.test(r.referenceId) &&
131
- 'projectId' in r &&
132
- typeof r.projectId === 'string' &&
133
- uuid.test(r.projectId) &&
134
- 'title' in r &&
135
- typeof r.title === 'string' &&
136
- r.title.length <= 200);
127
+ isResourceUuid(r.clientMessageId));
137
128
  }
138
129
  if (value.type === 'text')
139
130
  return ('participantId' in value &&
@@ -246,6 +237,10 @@ function isMessage(v) {
246
237
  'hop' in c &&
247
238
  typeof c.hop === 'number' &&
248
239
  (!('replyToMessageId' in c) || typeof c.replyToMessageId === 'string') &&
240
+ (!('replyStage' in c) ||
241
+ (c.intent === 'reply' && (c.replyStage === 'progress' || c.replyStage === 'final'))) &&
242
+ (!('resourceLinks' in c) ||
243
+ (Array.isArray(c.resourceLinks) && c.resourceLinks.every(isGroupResourceLinkWire))) &&
249
244
  'deliveries' in v &&
250
245
  Array.isArray(v.deliveries) &&
251
246
  v.deliveries.every((d) => !!d &&
@@ -256,4 +251,35 @@ function isMessage(v) {
256
251
  typeof d.status === 'string' &&
257
252
  ['pending', 'starting', 'steering', 'consumed', 'blocked', 'canceled', 'failed'].includes(d.status)));
258
253
  }
254
+ /** Decode compatibility payloads before they enter typed group state or UI navigation. */
255
+ export function parseGroupEvent(value) {
256
+ if (!isGroupEventWire(value))
257
+ return null;
258
+ if (value.type === 'snapshot')
259
+ return { type: 'snapshot', snapshot: normalizeGroupSnapshot(value.snapshot) };
260
+ if (value.type === 'resource_open') {
261
+ const link = parseGroupResourceLink(value.request);
262
+ return link
263
+ ? {
264
+ type: 'resource_open',
265
+ request: {
266
+ ...link,
267
+ requestId: value.request.requestId,
268
+ clientMessageId: value.request.clientMessageId,
269
+ },
270
+ }
271
+ : null;
272
+ }
273
+ return value;
274
+ }
275
+ /** Type guard for the canonical contract; legacy wire messages must go through parseGroupEvent. */
276
+ export function isGroupEvent(value) {
277
+ if (!isGroupEventWire(value))
278
+ return false;
279
+ if (value.type === 'resource_open')
280
+ return isCanonicalResourceLink(value.request);
281
+ if (value.type === 'snapshot')
282
+ return value.snapshot.messages.every((message) => message.communication.resourceLinks?.every(isCanonicalResourceLink) ?? true);
283
+ return true;
284
+ }
259
285
  //# sourceMappingURL=groups.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sourceRoot":"","sources":["../src/groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../src/groups.ts"],"names":[],"mappings":"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"}
package/dist/groups.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { isCanonicalResourceLink, isGroupResourceLinkWire, isResourceUuid, normalizeGroupMessage, normalizeGroupSnapshot, parseGroupResourceLink, } from "./group-resource-links.mjs";
1
2
  import { GroupArtifactsClient } from "./group-artifacts.mjs";
2
3
  /**
3
4
  * Group APIs reuse the client's configured ChatKit authentication/refresh hooks.
@@ -46,11 +47,11 @@ export class GroupsClient {
46
47
  create(input, options) {
47
48
  return this.transport.json('/groups', { ...options, method: 'POST', json: input });
48
49
  }
49
- get(groupId, options) {
50
- return this.transport.json(`/groups/${encodeURIComponent(groupId)}`, {
50
+ async get(groupId, options) {
51
+ return normalizeGroupSnapshot(await this.transport.json(`/groups/${encodeURIComponent(groupId)}`, {
51
52
  signal: options?.signal,
52
53
  params: { before: options?.before, limit: options?.limit },
53
- });
54
+ }));
54
55
  }
55
56
  runtime(groupId, messageId, participantId, options) {
56
57
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages/${encodeURIComponent(messageId)}/runtime/${encodeURIComponent(participantId)}`, options);
@@ -58,12 +59,12 @@ export class GroupsClient {
58
59
  composerContext(groupId, participantId, options) {
59
60
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/members/${encodeURIComponent(participantId)}/composer/context`, options);
60
61
  }
61
- send(groupId, input, options) {
62
- return this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages`, {
62
+ async send(groupId, input, options) {
63
+ return normalizeGroupMessage(await this.transport.json(`/groups/${encodeURIComponent(groupId)}/messages`, {
63
64
  ...options,
64
65
  method: 'POST',
65
66
  json: input,
66
- });
67
+ }));
67
68
  }
68
69
  addMember(groupId, input, options) {
69
70
  return this.transport.json(`/groups/${encodeURIComponent(groupId)}/members`, {
@@ -100,16 +101,17 @@ export class GroupsClient {
100
101
  throw new Error('Group stream failed');
101
102
  if (item.event !== 'group')
102
103
  continue;
103
- if (!isGroupEvent(item.data))
104
+ const data = parseGroupEvent(item.data);
105
+ if (!data)
104
106
  throw new Error('Invalid group stream event');
105
- if (item.data.type === 'snapshot' && item.data.snapshot.id !== groupId)
107
+ if (data.type === 'snapshot' && data.snapshot.id !== groupId)
106
108
  throw new Error('Group stream scope mismatch');
107
- yield { id: item.id, data: item.data };
109
+ yield { id: item.id, data };
108
110
  }
109
111
  }
110
112
  }
111
- /** Validate the discriminant and payload at the streaming transport boundary. */
112
- export function isGroupEvent(value) {
113
+ /** Validate legacy wire payloads only at the transport boundary. */
114
+ function isGroupEventWire(value) {
113
115
  if (!value || typeof value !== 'object' || !('type' in value))
114
116
  return false;
115
117
  if (value.type === 'resync')
@@ -118,22 +120,11 @@ export function isGroupEvent(value) {
118
120
  if (!('request' in value) || !value.request || typeof value.request !== 'object')
119
121
  return false;
120
122
  const r = value.request;
121
- const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
122
- return ('requestId' in r &&
123
- typeof r.requestId === 'string' &&
124
- uuid.test(r.requestId) &&
123
+ return (isGroupResourceLinkWire(r) &&
124
+ 'requestId' in r &&
125
+ isResourceUuid(r.requestId) &&
125
126
  'clientMessageId' in r &&
126
- typeof r.clientMessageId === 'string' &&
127
- uuid.test(r.clientMessageId) &&
128
- 'referenceId' in r &&
129
- typeof r.referenceId === 'string' &&
130
- uuid.test(r.referenceId) &&
131
- 'projectId' in r &&
132
- typeof r.projectId === 'string' &&
133
- uuid.test(r.projectId) &&
134
- 'title' in r &&
135
- typeof r.title === 'string' &&
136
- r.title.length <= 200);
127
+ isResourceUuid(r.clientMessageId));
137
128
  }
138
129
  if (value.type === 'text')
139
130
  return ('participantId' in value &&
@@ -246,6 +237,10 @@ function isMessage(v) {
246
237
  'hop' in c &&
247
238
  typeof c.hop === 'number' &&
248
239
  (!('replyToMessageId' in c) || typeof c.replyToMessageId === 'string') &&
240
+ (!('replyStage' in c) ||
241
+ (c.intent === 'reply' && (c.replyStage === 'progress' || c.replyStage === 'final'))) &&
242
+ (!('resourceLinks' in c) ||
243
+ (Array.isArray(c.resourceLinks) && c.resourceLinks.every(isGroupResourceLinkWire))) &&
249
244
  'deliveries' in v &&
250
245
  Array.isArray(v.deliveries) &&
251
246
  v.deliveries.every((d) => !!d &&
@@ -256,4 +251,35 @@ function isMessage(v) {
256
251
  typeof d.status === 'string' &&
257
252
  ['pending', 'starting', 'steering', 'consumed', 'blocked', 'canceled', 'failed'].includes(d.status)));
258
253
  }
254
+ /** Decode compatibility payloads before they enter typed group state or UI navigation. */
255
+ export function parseGroupEvent(value) {
256
+ if (!isGroupEventWire(value))
257
+ return null;
258
+ if (value.type === 'snapshot')
259
+ return { type: 'snapshot', snapshot: normalizeGroupSnapshot(value.snapshot) };
260
+ if (value.type === 'resource_open') {
261
+ const link = parseGroupResourceLink(value.request);
262
+ return link
263
+ ? {
264
+ type: 'resource_open',
265
+ request: {
266
+ ...link,
267
+ requestId: value.request.requestId,
268
+ clientMessageId: value.request.clientMessageId,
269
+ },
270
+ }
271
+ : null;
272
+ }
273
+ return value;
274
+ }
275
+ /** Type guard for the canonical contract; legacy wire messages must go through parseGroupEvent. */
276
+ export function isGroupEvent(value) {
277
+ if (!isGroupEventWire(value))
278
+ return false;
279
+ if (value.type === 'resource_open')
280
+ return isCanonicalResourceLink(value.request);
281
+ if (value.type === 'snapshot')
282
+ return value.snapshot.messages.every((message) => message.communication.resourceLinks?.every(isCanonicalResourceLink) ?? true);
283
+ return true;
284
+ }
259
285
  //# sourceMappingURL=groups.mjs.map