@mallocbaal/mcp-agent-framework-ts 0.1.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 (50) hide show
  1. package/README.md +121 -0
  2. package/dist/app/app.d.ts +10 -0
  3. package/dist/app/app.d.ts.map +1 -0
  4. package/dist/app/app.js +19 -0
  5. package/dist/app/app.js.map +1 -0
  6. package/dist/contents/builders.d.ts +17 -0
  7. package/dist/contents/builders.d.ts.map +1 -0
  8. package/dist/contents/builders.js +46 -0
  9. package/dist/contents/builders.js.map +1 -0
  10. package/dist/contents/index.d.ts +3 -0
  11. package/dist/contents/index.d.ts.map +1 -0
  12. package/dist/contents/index.js +3 -0
  13. package/dist/contents/index.js.map +1 -0
  14. package/dist/contents/validators.d.ts +5 -0
  15. package/dist/contents/validators.d.ts.map +1 -0
  16. package/dist/contents/validators.js +22 -0
  17. package/dist/contents/validators.js.map +1 -0
  18. package/dist/dispatcher/dispatcher.d.ts +13 -0
  19. package/dist/dispatcher/dispatcher.d.ts.map +1 -0
  20. package/dist/dispatcher/dispatcher.js +34 -0
  21. package/dist/dispatcher/dispatcher.js.map +1 -0
  22. package/dist/events/types.d.ts +26 -0
  23. package/dist/events/types.d.ts.map +1 -0
  24. package/dist/events/types.js +11 -0
  25. package/dist/events/types.js.map +1 -0
  26. package/dist/index.d.ts +17 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +10 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/jsonrpc/endpoints.d.ts +38 -0
  31. package/dist/jsonrpc/endpoints.d.ts.map +1 -0
  32. package/dist/jsonrpc/endpoints.js +91 -0
  33. package/dist/jsonrpc/endpoints.js.map +1 -0
  34. package/dist/pipeline/pipeline.d.ts +35 -0
  35. package/dist/pipeline/pipeline.d.ts.map +1 -0
  36. package/dist/pipeline/pipeline.js +77 -0
  37. package/dist/pipeline/pipeline.js.map +1 -0
  38. package/dist/schema/generated.d.ts +701 -0
  39. package/dist/schema/generated.d.ts.map +1 -0
  40. package/dist/schema/generated.js +2 -0
  41. package/dist/schema/generated.js.map +1 -0
  42. package/dist/schema/index.d.ts +2 -0
  43. package/dist/schema/index.d.ts.map +1 -0
  44. package/dist/schema/index.js +2 -0
  45. package/dist/schema/index.js.map +1 -0
  46. package/dist/transport/graphql-transport.d.ts +28 -0
  47. package/dist/transport/graphql-transport.d.ts.map +1 -0
  48. package/dist/transport/graphql-transport.js +57 -0
  49. package/dist/transport/graphql-transport.js.map +1 -0
  50. package/package.json +38 -0
package/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # mcp-agent-framework-ts
2
+
3
+ TypeScript framework library for MCP-style agent event processing with strict GraphQL schema compatibility for:
4
+
5
+ `contents: [MessageContentItemInput!]!`
6
+
7
+ ## Features
8
+
9
+ - Event model compatible with `CLI_FLOW_INIT | CLI_FLOW_CONTINUE | CLI_FLOW_END`.
10
+ - Full schema typing generated from `../communicator-hub-ts/schema.graphqls`.
11
+ - Typed builders for all `MessageContentDataInput` variants:
12
+ - `TEXT`, `ACTIVITY`, `MS_ITEM`, `LDC`, `CALL_INVITE`, `TICKET`
13
+ - `SELECTOR`, `FILE`, `IMAGE`, `CARDS`, `IMAGE_INPUT`, `POLICY`
14
+ - Pipeline API that returns framework result with typed `contents`.
15
+ - GraphQL transport for `addBotMessage` and `sendChatAction`.
16
+
17
+ ## Install
18
+
19
+ ```bash
20
+ npm install
21
+ ```
22
+
23
+ ## Generate schema types
24
+
25
+ ```bash
26
+ npm run codegen
27
+ ```
28
+
29
+ Generated output:
30
+
31
+ - `src/schema/generated.ts`
32
+
33
+ ## Build
34
+
35
+ ```bash
36
+ npm run build
37
+ ```
38
+
39
+ ## Quick start
40
+
41
+ ```ts
42
+ import {
43
+ GraphQLTransport,
44
+ Pipeline,
45
+ textContent,
46
+ type CliFlowEvent
47
+ } from "mcp-agent-framework-ts";
48
+
49
+ const transport = new GraphQLTransport({
50
+ endpoint: "http://localhost:8091/graphql",
51
+ token: process.env.COMMUNICATOR_TOKEN
52
+ });
53
+
54
+ const pipeline = new Pipeline(
55
+ {
56
+ async processInit(_ctx, _event) {
57
+ return {
58
+ contents: [textContent(0, { text: "Welcome!" })]
59
+ };
60
+ },
61
+ async processContinue(_ctx, event) {
62
+ return {
63
+ contents: [textContent(0, { text: `You said: ${event.message ?? ""}` })],
64
+ action: { type: "AI_RESPONDING_DONE" }
65
+ };
66
+ },
67
+ async processAction(_ctx, event) {
68
+ return {
69
+ contents: [textContent(0, { text: `Action received: ${event.actionType}` })]
70
+ };
71
+ }
72
+ },
73
+ transport,
74
+ { botId: "bot-uuid" }
75
+ );
76
+
77
+ const messageEvent: CliFlowEvent = {
78
+ eventType: "CLI_FLOW_CONTINUE",
79
+ eventId: "evt-1",
80
+ flowId: "flow-1",
81
+ chatId: "chat-1",
82
+ participantId: "participant-1",
83
+ accountId: "account-1",
84
+ message: "hello"
85
+ };
86
+
87
+ await pipeline.handle(undefined, messageEvent);
88
+
89
+ const actionEvent: CliFlowEvent = {
90
+ eventType: "CLI_FLOW_ACTION",
91
+ eventId: "evt-2",
92
+ flowId: "flow-1",
93
+ chatId: "chat-1",
94
+ participantId: "participant-1",
95
+ accountId: "account-1",
96
+ actionType: "PING",
97
+ actionData: { source: "ui" }
98
+ };
99
+
100
+ await pipeline.handle(undefined, actionEvent);
101
+ ```
102
+
103
+ ## JSON-RPC endpoints (separate per flow type)
104
+
105
+ ```ts
106
+ import { createJsonRpcEndpoints } from "mcp-agent-framework-ts";
107
+
108
+ const endpoints = createJsonRpcEndpoints(app);
109
+
110
+ // Four separate handlers/endpoints:
111
+ // POST /jsonrpc/init -> endpoints.init
112
+ // POST /jsonrpc/continue -> endpoints.continue
113
+ // POST /jsonrpc/action -> endpoints.action
114
+ // POST /jsonrpc/end -> endpoints.end
115
+ ```
116
+
117
+ ## Tests
118
+
119
+ ```bash
120
+ npm test
121
+ ```
@@ -0,0 +1,10 @@
1
+ import type { CliFlowEvent } from "../events/types.js";
2
+ import type { Pipeline } from "../pipeline/pipeline.js";
3
+ export interface App {
4
+ handle(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
5
+ }
6
+ export interface AppOptions {
7
+ pipeline: Pipeline;
8
+ }
9
+ export declare function createApp(options: AppOptions): App;
10
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,WAAW,GAAG;IAClB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAmBD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,CAElD"}
@@ -0,0 +1,19 @@
1
+ import { Dispatcher } from "../dispatcher/dispatcher.js";
2
+ class FrameworkApp {
3
+ dispatcher;
4
+ constructor(options) {
5
+ this.dispatcher = new Dispatcher({
6
+ handleInit: (ctx, event) => options.pipeline.handle(ctx, event),
7
+ handleContinue: (ctx, event) => options.pipeline.handle(ctx, event),
8
+ handleAction: (ctx, event) => options.pipeline.handleAction(ctx, event),
9
+ handleEnd: (ctx, event) => options.pipeline.handleEnd(ctx, event)
10
+ });
11
+ }
12
+ async handle(ctx, event) {
13
+ await this.dispatcher.handle(ctx, event);
14
+ }
15
+ }
16
+ export function createApp(options) {
17
+ return new FrameworkApp(options);
18
+ }
19
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAYzD,MAAM,YAAY;IACC,UAAU,CAAa;IAExC,YAAY,OAAmB;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC/B,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;YAC/D,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;YACnE,YAAY,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;YACvE,SAAS,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAA4B,EAAE,KAAmB;QAC5D,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ActivityContentDataInput, CallInviteContentDataInput, CardsContentDataInput, FileContentDataInput, ImageContentDataInput, ImageInputContentDataInput, LdcContentDataInput, MessageContentItemInput, MsItemContentDataInput, PolicyContentDataInput, SelectorContentDataInput, TextContentDataInput, TicketContentDataInput } from "../schema/generated.js";
2
+ export declare function textContent(order: number, text: TextContentDataInput): MessageContentItemInput;
3
+ export declare function activityContent(order: number, activity: ActivityContentDataInput): MessageContentItemInput;
4
+ export declare function msItemContent(order: number, msItem: MsItemContentDataInput): MessageContentItemInput;
5
+ export declare function ldcContent(order: number, ldc: LdcContentDataInput): MessageContentItemInput;
6
+ export declare function callInviteContent(order: number, callInvite: CallInviteContentDataInput): MessageContentItemInput;
7
+ export declare function ticketContent(order: number, ticket: TicketContentDataInput): MessageContentItemInput;
8
+ export declare function selectorContent(order: number, selector: SelectorContentDataInput): MessageContentItemInput;
9
+ export declare function fileContent(order: number, file: FileContentDataInput): MessageContentItemInput;
10
+ export declare function imageContent(order: number, image: ImageContentDataInput): MessageContentItemInput;
11
+ export declare function cardsContent(order: number, cards: CardsContentDataInput): MessageContentItemInput;
12
+ export declare function imageInputContent(order: number, imageInput: ImageInputContentDataInput): MessageContentItemInput;
13
+ export declare function policyContent(order: number, policy: PolicyContentDataInput): MessageContentItemInput;
14
+ export declare function assignSequentialOrder(items: Array<Omit<MessageContentItemInput, "order"> & {
15
+ order?: number;
16
+ }>): MessageContentItemInput[];
17
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/contents/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EAErB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EAEnB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAUhC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAE9F;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,wBAAwB,GACjC,uBAAuB,CAEzB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,uBAAuB,CAEpG;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,uBAAuB,CAE3F;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,0BAA0B,GACrC,uBAAuB,CAEzB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,uBAAuB,CAEpG;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,wBAAwB,GACjC,uBAAuB,CAEzB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAE9F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,uBAAuB,CAEjG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,uBAAuB,CAEjG;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,0BAA0B,GACrC,uBAAuB,CAEzB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,uBAAuB,CAEpG;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE,uBAAuB,EAAE,CAK3B"}
@@ -0,0 +1,46 @@
1
+ function createItem(type, order, data) {
2
+ return { type, order, data };
3
+ }
4
+ export function textContent(order, text) {
5
+ return createItem("TEXT", order, { text });
6
+ }
7
+ export function activityContent(order, activity) {
8
+ return createItem("ACTIVITY", order, { activity });
9
+ }
10
+ export function msItemContent(order, msItem) {
11
+ return createItem("MS_ITEM", order, { msItem });
12
+ }
13
+ export function ldcContent(order, ldc) {
14
+ return createItem("LDC", order, { ldc });
15
+ }
16
+ export function callInviteContent(order, callInvite) {
17
+ return createItem("CALL_INVITE", order, { callInvite });
18
+ }
19
+ export function ticketContent(order, ticket) {
20
+ return createItem("TICKET", order, { ticket });
21
+ }
22
+ export function selectorContent(order, selector) {
23
+ return createItem("SELECTOR", order, { selector });
24
+ }
25
+ export function fileContent(order, file) {
26
+ return createItem("FILE", order, { file });
27
+ }
28
+ export function imageContent(order, image) {
29
+ return createItem("IMAGE", order, { image });
30
+ }
31
+ export function cardsContent(order, cards) {
32
+ return createItem("CARDS", order, { cards });
33
+ }
34
+ export function imageInputContent(order, imageInput) {
35
+ return createItem("IMAGE_INPUT", order, { imageInput });
36
+ }
37
+ export function policyContent(order, policy) {
38
+ return createItem("POLICY", order, { policy });
39
+ }
40
+ export function assignSequentialOrder(items) {
41
+ return items.map((item, index) => ({
42
+ ...item,
43
+ order: item.order ?? index
44
+ }));
45
+ }
46
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/contents/builders.ts"],"names":[],"mappings":"AAkBA,SAAS,UAAU,CACjB,IAAiB,EACjB,KAAa,EACb,IAA6B;IAE7B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAA0B;IACnE,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,QAAkC;IAElC,OAAO,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAA8B;IACzE,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAwB;IAChE,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,UAAsC;IAEtC,OAAO,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAA8B;IACzE,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,QAAkC;IAElC,OAAO,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAA0B;IACnE,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAA4B;IACtE,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAA4B;IACtE,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,UAAsC;IAEtC,OAAO,UAAU,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAA8B;IACzE,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAyE;IAEzE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { activityContent, assignSequentialOrder, callInviteContent, cardsContent, fileContent, imageContent, imageInputContent, ldcContent, msItemContent, policyContent, selectorContent, textContent, ticketContent } from "./builders.js";
2
+ export { assertNonEmptyContents, assertSequentialOrder, assertUniqueOrder } from "./validators.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { activityContent, assignSequentialOrder, callInviteContent, cardsContent, fileContent, imageContent, imageInputContent, ldcContent, msItemContent, policyContent, selectorContent, textContent, ticketContent } from "./builders.js";
2
+ export { assertNonEmptyContents, assertSequentialOrder, assertUniqueOrder } from "./validators.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MessageContentItemInput } from "../schema/generated.js";
2
+ export declare function assertNonEmptyContents(contents: MessageContentItemInput[]): void;
3
+ export declare function assertSequentialOrder(contents: MessageContentItemInput[]): void;
4
+ export declare function assertUniqueOrder(contents: MessageContentItemInput[]): void;
5
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/contents/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAIhF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAM/E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAQ3E"}
@@ -0,0 +1,22 @@
1
+ export function assertNonEmptyContents(contents) {
2
+ if (!Array.isArray(contents) || contents.length === 0) {
3
+ throw new Error("contents must contain at least one MessageContentItemInput");
4
+ }
5
+ }
6
+ export function assertSequentialOrder(contents) {
7
+ for (let index = 0; index < contents.length; index += 1) {
8
+ if (contents[index]?.order !== index) {
9
+ throw new Error(`contents[${index}] has order=${contents[index]?.order}, expected ${index}`);
10
+ }
11
+ }
12
+ }
13
+ export function assertUniqueOrder(contents) {
14
+ const seen = new Set();
15
+ for (const item of contents) {
16
+ if (seen.has(item.order)) {
17
+ throw new Error(`duplicate content order: ${item.order}`);
18
+ }
19
+ seen.add(item.order);
20
+ }
21
+ }
22
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/contents/validators.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,QAAmC;IACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAmC;IACvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,eAAe,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,cAAc,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAmC;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CliFlowActionEvent, CliFlowEvent } from "../events/types.js";
2
+ export interface EventProcessor {
3
+ handleInit(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
4
+ handleContinue(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
5
+ handleAction?(ctx: AbortSignal | undefined, event: CliFlowActionEvent): Promise<void>;
6
+ handleEnd?(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
7
+ }
8
+ export declare class Dispatcher {
9
+ private readonly processor;
10
+ constructor(processor: EventProcessor);
11
+ handle(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/dispatcher/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3E,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,YAAY,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,SAAS,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,cAAc;IAEhD,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B/E"}
@@ -0,0 +1,34 @@
1
+ import { CliFlowAction, CliFlowContinue, CliFlowEnd, CliFlowInit, isActionEvent } from "../events/types.js";
2
+ export class Dispatcher {
3
+ processor;
4
+ constructor(processor) {
5
+ this.processor = processor;
6
+ }
7
+ async handle(ctx, event) {
8
+ switch (event.eventType) {
9
+ case CliFlowInit:
10
+ await this.processor.handleInit(ctx, event);
11
+ return;
12
+ case CliFlowContinue:
13
+ await this.processor.handleContinue(ctx, event);
14
+ return;
15
+ case CliFlowAction:
16
+ if (!isActionEvent(event)) {
17
+ throw new Error("CLI_FLOW_ACTION event must include actionType");
18
+ }
19
+ if (!this.processor.handleAction) {
20
+ throw new Error("handleAction is not implemented for CLI_FLOW_ACTION events");
21
+ }
22
+ await this.processor.handleAction(ctx, event);
23
+ return;
24
+ case CliFlowEnd:
25
+ if (this.processor.handleEnd) {
26
+ await this.processor.handleEnd(ctx, event);
27
+ }
28
+ return;
29
+ default:
30
+ throw new Error(`Unsupported event type: ${String(event.eventType)}`);
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/dispatcher/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAS5G,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,SAAyB;QAAzB,cAAS,GAAT,SAAS,CAAgB;IAAG,CAAC;IAE1D,KAAK,CAAC,MAAM,CAAC,GAA4B,EAAE,KAAmB;QAC5D,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;YACxB,KAAK,WAAW;gBACd,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5C,OAAO;YACT,KAAK,eAAe;gBAClB,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAChD,OAAO;YACT,KAAK,aAAa;gBAChB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO;YACT,KAAK,UAAU;gBACb,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;oBAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO;YACT;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ export type EventType = "CLI_FLOW_INIT" | "CLI_FLOW_CONTINUE" | "CLI_FLOW_ACTION" | "CLI_FLOW_END";
2
+ export declare const CliFlowInit: EventType;
3
+ export declare const CliFlowContinue: EventType;
4
+ export declare const CliFlowAction: EventType;
5
+ export declare const CliFlowEnd: EventType;
6
+ export interface CliFlowEvent {
7
+ eventType: EventType;
8
+ eventId: string;
9
+ flowId: string;
10
+ chatId: string;
11
+ participantId: string;
12
+ accountId: string;
13
+ timestamp?: number | null;
14
+ message?: string | null;
15
+ actionType?: string;
16
+ actionData?: Record<string, unknown>;
17
+ data?: Record<string, unknown>;
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ export interface CliFlowActionEvent extends CliFlowEvent {
21
+ eventType: "CLI_FLOW_ACTION";
22
+ actionType: string;
23
+ actionData?: Record<string, unknown>;
24
+ }
25
+ export declare function isActionEvent(event: CliFlowEvent): event is CliFlowActionEvent;
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAEnG,eAAO,MAAM,WAAW,EAAE,SAA2B,CAAC;AACtD,eAAO,MAAM,eAAe,EAAE,SAA+B,CAAC;AAC9D,eAAO,MAAM,aAAa,EAAE,SAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,SAA0B,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,IAAI,kBAAkB,CAK9E"}
@@ -0,0 +1,11 @@
1
+ export const CliFlowInit = "CLI_FLOW_INIT";
2
+ export const CliFlowContinue = "CLI_FLOW_CONTINUE";
3
+ export const CliFlowAction = "CLI_FLOW_ACTION";
4
+ export const CliFlowEnd = "CLI_FLOW_END";
5
+ export function isActionEvent(event) {
6
+ if (event.eventType !== CliFlowAction) {
7
+ return false;
8
+ }
9
+ return typeof event.actionType === "string" && event.actionType.length > 0;
10
+ }
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAc,eAAe,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAc,mBAAmB,CAAC;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAc,iBAAiB,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAc,cAAc,CAAC;AAuBpD,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type { App, AppOptions } from "./app/app.js";
2
+ export { createApp } from "./app/app.js";
3
+ export { Dispatcher } from "./dispatcher/dispatcher.js";
4
+ export type { EventProcessor } from "./dispatcher/dispatcher.js";
5
+ export { CliFlowAction, CliFlowContinue, CliFlowEnd, CliFlowInit } from "./events/types.js";
6
+ export { isActionEvent } from "./events/types.js";
7
+ export type { CliFlowActionEvent, CliFlowEvent, EventType } from "./events/types.js";
8
+ export { activityContent, assignSequentialOrder, callInviteContent, cardsContent, fileContent, imageContent, imageInputContent, ldcContent, msItemContent, policyContent, selectorContent, textContent, ticketContent } from "./contents/builders.js";
9
+ export { assertNonEmptyContents, assertSequentialOrder, assertUniqueOrder } from "./contents/validators.js";
10
+ export { Pipeline } from "./pipeline/pipeline.js";
11
+ export type { FrameworkAction, FrameworkResult, PipelineOptions, ProcessingStage } from "./pipeline/pipeline.js";
12
+ export { GraphQLTransport } from "./transport/graphql-transport.js";
13
+ export type { AddBotMessageRequest, FrameworkTransport, GraphQLTransportOptions } from "./transport/graphql-transport.js";
14
+ export { createJsonRpcEndpoints, createJsonRpcMethodRouter, JsonRpcMethod } from "./jsonrpc/endpoints.js";
15
+ export type { JsonRpcEndpoints, JsonRpcError, JsonRpcFailure, JsonRpcId, JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess } from "./jsonrpc/endpoints.js";
16
+ export type { ActivityContentDataInput, BotMessageInput, CallInviteContentDataInput, CardsContentDataInput, ContentType, FileContentDataInput, ImageContentDataInput, ImageInputContentDataInput, LdcContentDataInput, MessageContentDataInput, MessageContentItemInput, MsItemContentDataInput, PolicyContentDataInput, SelectorContentDataInput, SendChatActionInput, TextContentDataInput, TicketContentDataInput } from "./schema/generated.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1G,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,wBAAwB,EACxB,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { createApp } from "./app/app.js";
2
+ export { Dispatcher } from "./dispatcher/dispatcher.js";
3
+ export { CliFlowAction, CliFlowContinue, CliFlowEnd, CliFlowInit } from "./events/types.js";
4
+ export { isActionEvent } from "./events/types.js";
5
+ export { activityContent, assignSequentialOrder, callInviteContent, cardsContent, fileContent, imageContent, imageInputContent, ldcContent, msItemContent, policyContent, selectorContent, textContent, ticketContent } from "./contents/builders.js";
6
+ export { assertNonEmptyContents, assertSequentialOrder, assertUniqueOrder } from "./contents/validators.js";
7
+ export { Pipeline } from "./pipeline/pipeline.js";
8
+ export { GraphQLTransport } from "./transport/graphql-transport.js";
9
+ export { createJsonRpcEndpoints, createJsonRpcMethodRouter, JsonRpcMethod } from "./jsonrpc/endpoints.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAOpE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { App } from "../app/app.js";
2
+ export type JsonRpcId = string | number | null;
3
+ export interface JsonRpcRequest<TParams = unknown> {
4
+ jsonrpc: "2.0";
5
+ id: JsonRpcId;
6
+ method: string;
7
+ params?: TParams;
8
+ }
9
+ export interface JsonRpcSuccess<TResult = unknown> {
10
+ jsonrpc: "2.0";
11
+ id: JsonRpcId;
12
+ result: TResult;
13
+ }
14
+ export interface JsonRpcError {
15
+ code: number;
16
+ message: string;
17
+ }
18
+ export interface JsonRpcFailure {
19
+ jsonrpc: "2.0";
20
+ id: JsonRpcId;
21
+ error: JsonRpcError;
22
+ }
23
+ export type JsonRpcResponse<TResult = unknown> = JsonRpcSuccess<TResult> | JsonRpcFailure;
24
+ export interface JsonRpcEndpoints {
25
+ init: (ctx: AbortSignal | undefined, request: JsonRpcRequest) => Promise<JsonRpcResponse>;
26
+ continue: (ctx: AbortSignal | undefined, request: JsonRpcRequest) => Promise<JsonRpcResponse>;
27
+ action: (ctx: AbortSignal | undefined, request: JsonRpcRequest) => Promise<JsonRpcResponse>;
28
+ end: (ctx: AbortSignal | undefined, request: JsonRpcRequest) => Promise<JsonRpcResponse>;
29
+ }
30
+ export declare const JsonRpcMethod: {
31
+ readonly Init: "cliFlow.init";
32
+ readonly Continue: "cliFlow.continue";
33
+ readonly Action: "cliFlow.action";
34
+ readonly End: "cliFlow.end";
35
+ };
36
+ export declare function createJsonRpcEndpoints(app: App): JsonRpcEndpoints;
37
+ export declare function createJsonRpcMethodRouter(app: App): (ctx: AbortSignal | undefined, request: JsonRpcRequest) => Promise<JsonRpcResponse>;
38
+ //# sourceMappingURL=endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIzC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC/C,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC/C,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,CAAC,OAAO,GAAG,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1F,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9F,MAAM,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5F,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1F;AAED,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AA6EX,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAOjE;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,GAAG,IAElC,KAAK,WAAW,GAAG,SAAS,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC,CAc/F"}
@@ -0,0 +1,91 @@
1
+ import { CliFlowAction, CliFlowContinue, CliFlowEnd, CliFlowInit } from "../events/types.js";
2
+ export const JsonRpcMethod = {
3
+ Init: "cliFlow.init",
4
+ Continue: "cliFlow.continue",
5
+ Action: "cliFlow.action",
6
+ End: "cliFlow.end"
7
+ };
8
+ function ok(id, result = { success: true }) {
9
+ return {
10
+ jsonrpc: "2.0",
11
+ id,
12
+ result
13
+ };
14
+ }
15
+ function fail(id, code, message) {
16
+ return {
17
+ jsonrpc: "2.0",
18
+ id,
19
+ error: {
20
+ code,
21
+ message
22
+ }
23
+ };
24
+ }
25
+ function isObject(value) {
26
+ return typeof value === "object" && value !== null;
27
+ }
28
+ function parseEventParams(params, expectedType) {
29
+ if (!isObject(params)) {
30
+ throw new Error("params must be an object");
31
+ }
32
+ const event = params;
33
+ const requiredFields = [
34
+ "eventId",
35
+ "flowId",
36
+ "chatId",
37
+ "participantId",
38
+ "accountId"
39
+ ];
40
+ for (const field of requiredFields) {
41
+ if (typeof event[field] !== "string" || !event[field]) {
42
+ throw new Error(`params.${field} is required`);
43
+ }
44
+ }
45
+ if (event.eventType && event.eventType !== expectedType) {
46
+ throw new Error(`params.eventType must be ${expectedType}`);
47
+ }
48
+ if (expectedType === CliFlowAction && (typeof event.actionType !== "string" || event.actionType.length === 0)) {
49
+ throw new Error("params.actionType is required for CLI_FLOW_ACTION");
50
+ }
51
+ return {
52
+ ...event,
53
+ eventType: expectedType
54
+ };
55
+ }
56
+ async function invoke(app, ctx, request, expectedType) {
57
+ try {
58
+ const event = parseEventParams(request.params, expectedType);
59
+ await app.handle(ctx, event);
60
+ return ok(request.id);
61
+ }
62
+ catch (error) {
63
+ return fail(request.id ?? null, -32602, error instanceof Error ? error.message : "Invalid params");
64
+ }
65
+ }
66
+ export function createJsonRpcEndpoints(app) {
67
+ return {
68
+ init: (ctx, request) => invoke(app, ctx, request, CliFlowInit),
69
+ continue: (ctx, request) => invoke(app, ctx, request, CliFlowContinue),
70
+ action: (ctx, request) => invoke(app, ctx, request, CliFlowAction),
71
+ end: (ctx, request) => invoke(app, ctx, request, CliFlowEnd)
72
+ };
73
+ }
74
+ export function createJsonRpcMethodRouter(app) {
75
+ const endpoints = createJsonRpcEndpoints(app);
76
+ return async (ctx, request) => {
77
+ switch (request.method) {
78
+ case JsonRpcMethod.Init:
79
+ return endpoints.init(ctx, request);
80
+ case JsonRpcMethod.Continue:
81
+ return endpoints.continue(ctx, request);
82
+ case JsonRpcMethod.Action:
83
+ return endpoints.action(ctx, request);
84
+ case JsonRpcMethod.End:
85
+ return endpoints.end(ctx, request);
86
+ default:
87
+ return fail(request.id ?? null, -32601, `Method not found: ${request.method}`);
88
+ }
89
+ };
90
+ }
91
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/jsonrpc/endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { CliFlowActionEvent, CliFlowEvent } from "../events/types.js";
2
+ import type { MessageContentItemInput } from "../schema/generated.js";
3
+ import type { FrameworkTransport } from "../transport/graphql-transport.js";
4
+ export interface FrameworkAction {
5
+ type: string;
6
+ data?: Record<string, unknown>;
7
+ }
8
+ export interface FrameworkResult {
9
+ contents: MessageContentItemInput[];
10
+ metadata?: Record<string, unknown>;
11
+ action?: FrameworkAction;
12
+ }
13
+ export interface ProcessingStage {
14
+ processInit(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<FrameworkResult>;
15
+ processContinue(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<FrameworkResult>;
16
+ processAction(ctx: AbortSignal | undefined, event: CliFlowActionEvent): Promise<FrameworkResult>;
17
+ processEnd?(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<FrameworkResult | void>;
18
+ }
19
+ export interface PipelineOptions {
20
+ botId: string;
21
+ sourceLabel?: string;
22
+ }
23
+ export declare class Pipeline {
24
+ private readonly stage;
25
+ private readonly transport;
26
+ private readonly options;
27
+ private readonly sourceLabel;
28
+ constructor(stage: ProcessingStage, transport: FrameworkTransport, options: PipelineOptions);
29
+ private buildMetadata;
30
+ private executeResult;
31
+ handle(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
32
+ handleAction(ctx: AbortSignal | undefined, event: CliFlowActionEvent): Promise<void>;
33
+ handleEnd(ctx: AbortSignal | undefined, event: CliFlowEvent): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACzF,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7F,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACjG,UAAU,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACjG;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,QAAQ;IAIjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGlB,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,eAAe;IAK3C,OAAO,CAAC,aAAa;YAaP,aAAa;IAsBrB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpF,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CASlF"}