@artinet/sdk 0.5.3 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -1
- package/README.md +58 -89
- package/dist/client/a2a-client.js +25 -7
- package/dist/client/a2a-client.js.map +1 -1
- package/dist/server/a2a-server.js +51 -241
- package/dist/server/a2a-server.js.map +1 -1
- package/dist/server/interfaces/params.js.map +1 -1
- package/dist/server/interfaces/store.js +16 -0
- package/dist/server/interfaces/store.js.map +1 -1
- package/dist/server/lib/express-server.js +211 -2
- package/dist/server/lib/express-server.js.map +1 -1
- package/dist/server/lib/middleware/a2a-methods.js +61 -24
- package/dist/server/lib/middleware/a2a-methods.js.map +1 -1
- package/dist/server/lib/middleware/factory.js +6 -6
- package/dist/server/lib/middleware/factory.js.map +1 -1
- package/dist/server/lib/state.js +44 -72
- package/dist/server/lib/state.js.map +1 -1
- package/dist/server/lib/storage/memory.js.map +1 -1
- package/dist/server/lib/update/base.js +109 -0
- package/dist/server/lib/update/base.js.map +1 -0
- package/dist/services/a2a/index.js +3 -0
- package/dist/services/a2a/index.js.map +1 -0
- package/dist/services/a2a/repository.js +160 -0
- package/dist/services/a2a/repository.js.map +1 -0
- package/dist/services/a2a/service.js +247 -0
- package/dist/services/a2a/service.js.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/manager.js +61 -0
- package/dist/services/manager.js.map +1 -0
- package/dist/services/mcp/index.js +2 -0
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/mcp/service.js +75 -0
- package/dist/services/mcp/service.js.map +1 -0
- package/dist/transport/rpc/parser.js +2 -1
- package/dist/transport/rpc/parser.js.map +1 -1
- package/dist/transport/rpc/rpc-client.js.map +1 -1
- package/dist/transport/streaming/stream.js +19 -36
- package/dist/transport/streaming/stream.js.map +1 -1
- package/dist/types/client/a2a-client.d.ts +21 -7
- package/dist/types/client/a2a-client.d.ts.map +1 -1
- package/dist/types/express.js +2 -0
- package/dist/types/express.js.map +1 -0
- package/dist/types/extended-schema.js +1 -1
- package/dist/types/extended-schema.js.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/schemas/a2a/auth/auth.js +2 -0
- package/dist/types/schemas/a2a/auth/auth.js.map +1 -0
- package/dist/types/schemas/a2a/auth/base.js +2 -0
- package/dist/types/schemas/a2a/auth/base.js.map +1 -0
- package/dist/types/schemas/a2a/auth/index.js +4 -0
- package/dist/types/schemas/a2a/auth/index.js.map +1 -0
- package/dist/types/schemas/a2a/auth/oauth.js +2 -0
- package/dist/types/schemas/a2a/auth/oauth.js.map +1 -0
- package/dist/types/schemas/a2a/error.js +45 -0
- package/dist/types/schemas/a2a/error.js.map +1 -0
- package/dist/types/schemas/a2a/index.js +8 -0
- package/dist/types/schemas/a2a/index.js.map +1 -0
- package/dist/types/schemas/a2a/message.js +2 -0
- package/dist/types/schemas/a2a/message.js.map +1 -0
- package/dist/types/schemas/a2a/notification.js +2 -0
- package/dist/types/schemas/a2a/notification.js.map +1 -0
- package/dist/types/schemas/a2a/parameters.js +2 -0
- package/dist/types/schemas/a2a/parameters.js.map +1 -0
- package/dist/types/schemas/a2a/ref.js +25 -0
- package/dist/types/schemas/a2a/ref.js.map +1 -0
- package/dist/types/schemas/a2a/rpc.js +2 -0
- package/dist/types/schemas/a2a/rpc.js.map +1 -0
- package/dist/types/schemas/a2a/task.js +16 -0
- package/dist/types/schemas/a2a/task.js.map +1 -0
- package/dist/types/schemas/index.js +2 -0
- package/dist/types/schemas/index.js.map +1 -0
- package/dist/types/server/a2a-server.d.ts +9 -20
- package/dist/types/server/a2a-server.d.ts.map +1 -1
- package/dist/types/server/interfaces/params.d.ts +11 -11
- package/dist/types/server/interfaces/params.d.ts.map +1 -1
- package/dist/types/server/interfaces/server.d.ts +4 -4
- package/dist/types/server/interfaces/server.d.ts.map +1 -1
- package/dist/types/server/interfaces/store.d.ts +6 -1
- package/dist/types/server/interfaces/store.d.ts.map +1 -1
- package/dist/types/server/lib/express-server.d.ts +49 -1
- package/dist/types/server/lib/express-server.d.ts.map +1 -1
- package/dist/types/server/lib/middleware/a2a-methods.d.ts.map +1 -1
- package/dist/types/server/lib/middleware/factory.d.ts +2 -2
- package/dist/types/server/lib/middleware/factory.d.ts.map +1 -1
- package/dist/types/server/lib/state.d.ts +7 -15
- package/dist/types/server/lib/state.d.ts.map +1 -1
- package/dist/types/server/lib/storage/memory.d.ts.map +1 -1
- package/dist/types/server/lib/update/base.d.ts +21 -0
- package/dist/types/server/lib/update/base.d.ts.map +1 -0
- package/dist/types/services/a2a/index.d.ts +3 -0
- package/dist/types/services/a2a/index.d.ts.map +1 -0
- package/dist/types/services/a2a/repository.d.ts +77 -0
- package/dist/types/services/a2a/repository.d.ts.map +1 -0
- package/dist/types/services/a2a/repository.js +2 -0
- package/dist/types/services/a2a/repository.js.map +1 -0
- package/dist/types/services/a2a/service.d.ts +45 -0
- package/dist/types/services/a2a/service.d.ts.map +1 -0
- package/dist/types/services/a2a/service.js +2 -0
- package/dist/types/services/a2a/service.js.map +1 -0
- package/dist/types/services/context.js +29 -0
- package/dist/types/services/context.js.map +1 -0
- package/dist/types/services/dispatcher.js +33 -0
- package/dist/types/services/dispatcher.js.map +1 -0
- package/dist/types/services/index.d.ts +2 -0
- package/dist/types/services/index.d.ts.map +1 -0
- package/dist/types/services/index.js +9 -0
- package/dist/types/services/index.js.map +1 -0
- package/dist/types/services/manager.d.ts +44 -0
- package/dist/types/services/manager.d.ts.map +1 -0
- package/dist/types/services/manager.js +2 -0
- package/dist/types/services/manager.js.map +1 -0
- package/dist/types/services/mcp/index.d.ts +2 -0
- package/dist/types/services/mcp/index.d.ts.map +1 -0
- package/dist/types/services/mcp/service.d.ts +30 -0
- package/dist/types/services/mcp/service.d.ts.map +1 -0
- package/dist/types/services/mcp/service.js +8 -0
- package/dist/types/services/mcp/service.js.map +1 -0
- package/dist/types/services/protocol.js +31 -0
- package/dist/types/services/protocol.js.map +1 -0
- package/dist/types/services/service.js +2 -0
- package/dist/types/services/service.js.map +1 -0
- package/dist/types/transform.js +35 -0
- package/dist/types/transform.js.map +1 -0
- package/dist/types/transport/rpc/parser.d.ts.map +1 -1
- package/dist/types/transport/rpc/rpc-client.d.ts.map +1 -1
- package/dist/types/transport/streaming/stream.d.ts +6 -5
- package/dist/types/transport/streaming/stream.d.ts.map +1 -1
- package/dist/types/types/client.d.ts +26 -9
- package/dist/types/types/client.d.ts.map +1 -1
- package/dist/types/types/express.d.ts +66 -0
- package/dist/types/types/express.d.ts.map +1 -0
- package/dist/types/types/extended-schema.d.ts +88 -33
- package/dist/types/types/extended-schema.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +2 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/proxy.d.ts +4 -5
- package/dist/types/types/proxy.d.ts.map +1 -1
- package/dist/types/types/schemas/a2a/auth/auth.d.ts +80 -0
- package/dist/types/types/schemas/a2a/auth/auth.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/auth/base.d.ts +16 -0
- package/dist/types/types/schemas/a2a/auth/base.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/auth/index.d.ts +4 -0
- package/dist/types/types/schemas/a2a/auth/index.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/auth/oauth.d.ts +124 -0
- package/dist/types/types/schemas/a2a/auth/oauth.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/error.d.ts +75 -0
- package/dist/types/types/schemas/a2a/error.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/index.d.ts +220 -0
- package/dist/types/types/schemas/a2a/index.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/message.d.ts +90 -0
- package/dist/types/types/schemas/a2a/message.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/notification.d.ts +87 -0
- package/dist/types/types/schemas/a2a/notification.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/parameters.d.ts +188 -0
- package/dist/types/types/schemas/a2a/parameters.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/ref.d.ts +2057 -0
- package/dist/types/types/schemas/a2a/ref.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/rpc.d.ts +104 -0
- package/dist/types/types/schemas/a2a/rpc.d.ts.map +1 -0
- package/dist/types/types/schemas/a2a/task.d.ts +252 -0
- package/dist/types/types/schemas/a2a/task.d.ts.map +1 -0
- package/dist/types/types/schemas/index.d.ts +2 -0
- package/dist/types/types/schemas/index.d.ts.map +1 -0
- package/dist/types/types/services/a2a/repository.d.ts +85 -0
- package/dist/types/types/services/a2a/repository.d.ts.map +1 -0
- package/dist/types/types/services/a2a/service.d.ts +29 -0
- package/dist/types/types/services/a2a/service.d.ts.map +1 -0
- package/dist/types/types/services/context.d.ts +167 -0
- package/dist/types/types/services/context.d.ts.map +1 -0
- package/dist/types/types/services/dispatcher.d.ts +20 -0
- package/dist/types/types/services/dispatcher.d.ts.map +1 -0
- package/dist/types/types/services/index.d.ts +9 -0
- package/dist/types/types/services/index.d.ts.map +1 -0
- package/dist/types/types/services/manager.d.ts +42 -0
- package/dist/types/types/services/manager.d.ts.map +1 -0
- package/dist/types/types/services/mcp/service.d.ts +57 -0
- package/dist/types/types/services/mcp/service.d.ts.map +1 -0
- package/dist/types/types/services/protocol.d.ts +30 -0
- package/dist/types/types/services/protocol.d.ts.map +1 -0
- package/dist/types/types/services/service.d.ts +35 -0
- package/dist/types/types/services/service.d.ts.map +1 -0
- package/dist/types/types/transform.d.ts +61 -0
- package/dist/types/types/transform.d.ts.map +1 -0
- package/dist/types/utils/api/register.d.ts.map +1 -1
- package/dist/types/utils/common/constants.d.ts +4 -4
- package/dist/types/utils/common/constants.d.ts.map +1 -1
- package/dist/types/utils/common/errors.d.ts +19 -15
- package/dist/types/utils/common/errors.d.ts.map +1 -1
- package/dist/types/utils/common/utils.d.ts +2 -13
- package/dist/types/utils/common/utils.d.ts.map +1 -1
- package/dist/types/utils/deployment/task-wrapper.d.ts +5 -6
- package/dist/types/utils/deployment/task-wrapper.d.ts.map +1 -1
- package/dist/types/utils/deployment/test-deployment.d.ts +2 -2
- package/dist/types/utils/deployment/test-deployment.d.ts.map +1 -1
- package/dist/types/utils/logging/log.d.ts.map +1 -1
- package/dist/utils/api/register.js +1 -3
- package/dist/utils/api/register.js.map +1 -1
- package/dist/utils/common/constants.js +37 -24
- package/dist/utils/common/constants.js.map +1 -1
- package/dist/utils/common/errors.js +20 -9
- package/dist/utils/common/errors.js.map +1 -1
- package/dist/utils/common/utils.js +5 -27
- package/dist/utils/common/utils.js.map +1 -1
- package/dist/utils/deployment/agents.js.map +1 -1
- package/dist/utils/deployment/task-wrapper.js +3 -3
- package/dist/utils/deployment/task-wrapper.js.map +1 -1
- package/dist/utils/deployment/test-deployment.js +3 -4
- package/dist/utils/deployment/test-deployment.js.map +1 -1
- package/dist/utils/logging/log.js.map +1 -1
- package/package.json +11 -7
- package/dist/types/context.js +0 -2
- package/dist/types/context.js.map +0 -1
- package/dist/types/schema.js +0 -23
- package/dist/types/schema.js.map +0 -1
- package/dist/types/types/context.d.ts +0 -41
- package/dist/types/types/context.d.ts.map +0 -1
- package/dist/types/types/schema.d.ts +0 -694
- package/dist/types/types/schema.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/server/lib/storage/memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEvD;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAErC,6CAA6C;QAC7C,OAAO,KAAK;YACV,CAAC,CAAC;gBACE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE;gBACvB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;aAC5B;YACH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAoB;QAC7B,QAAQ,CAAC,mBAAmB,EAAE,gBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/server/lib/storage/memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEvD;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAErC,6CAA6C;QAC7C,OAAO,KAAK;YACV,CAAC,CAAC;gBACE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE;gBACvB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;aAC5B;YACH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAoB;QAC7B,QAAQ,CAAC,mBAAmB,EAAE,gBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,qEAAqE;QACrE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YAC3B,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;YACtB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { getCurrentTimestamp } from "../../../utils/common/utils.js";
|
|
2
|
+
import { logError } from "../../../utils/logging/log.js";
|
|
3
|
+
import { processArtifactUpdate } from "../state.js";
|
|
4
|
+
export var UpdateKind;
|
|
5
|
+
(function (UpdateKind) {
|
|
6
|
+
UpdateKind["Message"] = "message";
|
|
7
|
+
UpdateKind["Task"] = "task";
|
|
8
|
+
UpdateKind["StatusUpdate"] = "status-update";
|
|
9
|
+
UpdateKind["ArtifactUpdate"] = "artifact-update";
|
|
10
|
+
})(UpdateKind || (UpdateKind = {}));
|
|
11
|
+
const isMessageInHistory = (task, message) => {
|
|
12
|
+
return task.history?.find((msg) => msg.messageId === message.messageId);
|
|
13
|
+
};
|
|
14
|
+
const updateHistory = (current, updateMessage) => {
|
|
15
|
+
if (!isMessageInHistory(current.task, updateMessage)) {
|
|
16
|
+
current.history = [...(current.history ?? []), updateMessage];
|
|
17
|
+
current.task.history = [...(current.task.history ?? []), updateMessage];
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export const updateMessage = async (props) => {
|
|
21
|
+
const { context, update } = props;
|
|
22
|
+
if (!update || update.kind !== UpdateKind.Message) {
|
|
23
|
+
logError("updateMessage", "Invalid update", update);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
context.latestUserMessage = update;
|
|
27
|
+
return true;
|
|
28
|
+
};
|
|
29
|
+
export const updateTask = async (props) => {
|
|
30
|
+
const { context, current, update } = props;
|
|
31
|
+
if (!update || update.kind !== UpdateKind.Task) {
|
|
32
|
+
logError("updateTask", "Invalid update kind", update);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
current.task = { ...current.task, ...update };
|
|
36
|
+
if (context.latestUserMessage &&
|
|
37
|
+
!isMessageInHistory(current.task, context.latestUserMessage)) {
|
|
38
|
+
current.task.history = [
|
|
39
|
+
context.latestUserMessage,
|
|
40
|
+
...(current.task.history ?? []),
|
|
41
|
+
];
|
|
42
|
+
current.history = [context.latestUserMessage, ...(current.history ?? [])];
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
};
|
|
46
|
+
export const updateTaskStatusUpdate = async (props) => {
|
|
47
|
+
const { current, update } = props;
|
|
48
|
+
if (!update || update.kind !== UpdateKind.StatusUpdate) {
|
|
49
|
+
logError("updateTaskStatusUpdate", "Invalid update kind", update);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (current.task.id === update.taskId) {
|
|
53
|
+
current.task.status = update.status;
|
|
54
|
+
current.task.status.timestamp = getCurrentTimestamp();
|
|
55
|
+
if (update.status.message) {
|
|
56
|
+
updateHistory(current, update.status.message);
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
logError("updateTaskStatusUpdate", "Invalid task id", update);
|
|
61
|
+
return false;
|
|
62
|
+
};
|
|
63
|
+
export const updateTaskArtifactUpdate = async (props) => {
|
|
64
|
+
const { current, update } = props;
|
|
65
|
+
if (!update || update.kind !== UpdateKind.ArtifactUpdate) {
|
|
66
|
+
logError("updateTaskArtifactUpdate", "Invalid update kind", update);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
if (current.task.id === update.taskId) {
|
|
70
|
+
current.task.artifacts = processArtifactUpdate(update.append ?? false, current.task.artifacts ?? [], update.artifact);
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
};
|
|
74
|
+
export const update = async (props) => {
|
|
75
|
+
const { context, current, update } = props;
|
|
76
|
+
if (!update || !update.kind) {
|
|
77
|
+
logError("update", "Invalid update", update);
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
switch (update.kind) {
|
|
81
|
+
case UpdateKind.Message:
|
|
82
|
+
return updateMessage({
|
|
83
|
+
context,
|
|
84
|
+
current,
|
|
85
|
+
update: update,
|
|
86
|
+
});
|
|
87
|
+
case UpdateKind.Task:
|
|
88
|
+
return updateTask({
|
|
89
|
+
context,
|
|
90
|
+
current,
|
|
91
|
+
update: update,
|
|
92
|
+
});
|
|
93
|
+
case UpdateKind.StatusUpdate:
|
|
94
|
+
return updateTaskStatusUpdate({
|
|
95
|
+
context,
|
|
96
|
+
current,
|
|
97
|
+
update: update,
|
|
98
|
+
});
|
|
99
|
+
case UpdateKind.ArtifactUpdate:
|
|
100
|
+
return updateTaskArtifactUpdate({
|
|
101
|
+
context,
|
|
102
|
+
current,
|
|
103
|
+
update: update,
|
|
104
|
+
});
|
|
105
|
+
default:
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/server/lib/update/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/a2a/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { CANCEL_UPDATE } from "../../utils/index.js";
|
|
2
|
+
import { processUpdate } from "../../server/lib/state.js";
|
|
3
|
+
import { sendSSEEvent } from "../../transport/streaming/stream.js";
|
|
4
|
+
import { logDebug } from "../../utils/logging/log.js";
|
|
5
|
+
import { InMemoryTaskStore } from "../../server/lib/storage/memory.js";
|
|
6
|
+
import { v4 as uuidv4 } from "uuid";
|
|
7
|
+
/**
|
|
8
|
+
* @description The A2ARepository class.
|
|
9
|
+
*/
|
|
10
|
+
export class A2ARepository {
|
|
11
|
+
taskStore;
|
|
12
|
+
_activeCancellations;
|
|
13
|
+
_activeStreams;
|
|
14
|
+
card;
|
|
15
|
+
constructor(params) {
|
|
16
|
+
this.taskStore = params.taskStore ?? new InMemoryTaskStore();
|
|
17
|
+
this.card = params.card;
|
|
18
|
+
this._activeCancellations = new Set();
|
|
19
|
+
this._activeStreams = new Map();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @description Gets the agent card.
|
|
23
|
+
* @returns {AgentCard} The agent card.
|
|
24
|
+
*/
|
|
25
|
+
getCard() {
|
|
26
|
+
return this.card;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @description Gets the active streams.
|
|
30
|
+
* @returns {Map<string, Response[]>} The active streams.
|
|
31
|
+
*/
|
|
32
|
+
get activeStreams() {
|
|
33
|
+
return this._activeStreams;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description Gets the active cancellations.
|
|
37
|
+
* @returns {Set<string>} The active cancellations.
|
|
38
|
+
*/
|
|
39
|
+
get activeCancellations() {
|
|
40
|
+
return this._activeCancellations;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @description Gets the task store.
|
|
44
|
+
* @returns {TaskStore} The task store.
|
|
45
|
+
*/
|
|
46
|
+
getTaskStore() {
|
|
47
|
+
return this.taskStore;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a TaskContext object for a task handler.
|
|
51
|
+
* @param task The task
|
|
52
|
+
* @param userMessage The user message
|
|
53
|
+
* @param history The message history
|
|
54
|
+
* @returns A TaskContext object
|
|
55
|
+
*/
|
|
56
|
+
createTaskContext(task, userMessage, history, configuration) {
|
|
57
|
+
return {
|
|
58
|
+
contextId: task.contextId ?? userMessage.contextId ?? uuidv4(),
|
|
59
|
+
task,
|
|
60
|
+
userMessage,
|
|
61
|
+
history,
|
|
62
|
+
configuration,
|
|
63
|
+
isCancelled: () => this._activeCancellations.has(task.id),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Handles task cancellation
|
|
68
|
+
* @param data Task and history data
|
|
69
|
+
* @param res Response object
|
|
70
|
+
*/
|
|
71
|
+
async onCancel(context, data, res) {
|
|
72
|
+
const cancelUpdate = CANCEL_UPDATE(data.task.id, context.contextId);
|
|
73
|
+
const currentData = await processUpdate(this.taskStore, {
|
|
74
|
+
context: context,
|
|
75
|
+
current: data,
|
|
76
|
+
update: cancelUpdate,
|
|
77
|
+
});
|
|
78
|
+
// Send the canceled status
|
|
79
|
+
sendSSEEvent(res, currentData.task.id, cancelUpdate);
|
|
80
|
+
this.closeStreamsForTask(currentData.task.id);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Adds a response stream to the tracking map for a task.
|
|
84
|
+
* @param taskId The task ID
|
|
85
|
+
* @param res The response stream
|
|
86
|
+
*/
|
|
87
|
+
addStreamForTask(taskId, res) {
|
|
88
|
+
if (!this._activeStreams.has(taskId)) {
|
|
89
|
+
this._activeStreams.set(taskId, []);
|
|
90
|
+
}
|
|
91
|
+
logDebug("A2AServer", "Adding stream for task", {
|
|
92
|
+
taskId,
|
|
93
|
+
activeStreams: this._activeStreams,
|
|
94
|
+
});
|
|
95
|
+
this._activeStreams.get(taskId)?.push(res);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Removes a response stream from the tracking map for a task.
|
|
99
|
+
* @param taskId The task ID
|
|
100
|
+
* @param res The response stream
|
|
101
|
+
*/
|
|
102
|
+
removeStreamForTask(taskId, res) {
|
|
103
|
+
const streams = this._activeStreams.get(taskId);
|
|
104
|
+
if (streams) {
|
|
105
|
+
const index = streams.indexOf(res);
|
|
106
|
+
if (index !== -1) {
|
|
107
|
+
streams.splice(index, 1);
|
|
108
|
+
if (streams.length === 0) {
|
|
109
|
+
logDebug("A2AServer", "Removing stream for task", {
|
|
110
|
+
taskId,
|
|
111
|
+
activeStreams: this._activeStreams,
|
|
112
|
+
});
|
|
113
|
+
this._activeStreams.delete(taskId);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Closes any active streams for a task.
|
|
120
|
+
* @param taskId The task ID
|
|
121
|
+
*/
|
|
122
|
+
closeStreamsForTask(taskId) {
|
|
123
|
+
const streams = this._activeStreams.get(taskId);
|
|
124
|
+
if (streams) {
|
|
125
|
+
// Send close event to all streams
|
|
126
|
+
for (const stream of streams) {
|
|
127
|
+
if (stream.writable) {
|
|
128
|
+
stream.write("event: close\ndata: {}\n\n");
|
|
129
|
+
stream.end();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
this._activeStreams.delete(taskId);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Handles cleanup when a task stream ends
|
|
137
|
+
* @param taskId The task ID
|
|
138
|
+
* @param res Response object
|
|
139
|
+
*/
|
|
140
|
+
async onEnd(taskId, res) {
|
|
141
|
+
this._activeCancellations.delete(taskId);
|
|
142
|
+
this.removeStreamForTask(taskId, res);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Destroys the repository.
|
|
146
|
+
*/
|
|
147
|
+
async destroy() {
|
|
148
|
+
this._activeStreams.forEach((streams, taskId) => {
|
|
149
|
+
if (streams.length > 0) {
|
|
150
|
+
logDebug("A2ARepository", "Closing streams for task during stop", {
|
|
151
|
+
taskId,
|
|
152
|
+
});
|
|
153
|
+
this.closeStreamsForTask(taskId);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
this._activeStreams.clear();
|
|
157
|
+
this._activeCancellations.clear();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/services/a2a/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { defaultCancelTaskMethod, createJSONRPCMethod, defaultGetTaskPushNotificationMethod, defaultSetTaskPushNotificationMethod, defaultGetTaskMethod, defaultSendTaskMethod, } from "../../server/index.js";
|
|
2
|
+
import { TaskState, } from "../../types/index.js";
|
|
3
|
+
import { Protocol } from "../../types/services/protocol.js";
|
|
4
|
+
import { loadState, processUpdate } from "../../server/lib/state.js";
|
|
5
|
+
import { FINAL_STATES, getCurrentTimestamp, INVALID_PARAMS, INVALID_REQUEST, logError, METHOD_NOT_FOUND, TASK_NOT_FOUND, validateSendMessageParams, WORKING_UPDATE, } from "../../utils/index.js";
|
|
6
|
+
import { processTaskStream } from "../../transport/streaming/stream.js";
|
|
7
|
+
import { sendSSEEvent, setupSseStream } from "../../index.js";
|
|
8
|
+
import { A2ARepository } from "./repository.js";
|
|
9
|
+
export class A2AService {
|
|
10
|
+
name = "a2a";
|
|
11
|
+
protocol = Protocol.A2A;
|
|
12
|
+
engine;
|
|
13
|
+
state;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.engine = options.engine;
|
|
16
|
+
this.state = new A2ARepository(options);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handles the message/stream method.
|
|
20
|
+
* @param req The SendTaskRequest object
|
|
21
|
+
* @param res The Express Response object
|
|
22
|
+
*/
|
|
23
|
+
async handleSendStreamingMessage(req, res) {
|
|
24
|
+
validateSendMessageParams(req.params);
|
|
25
|
+
const { message, metadata } = req.params;
|
|
26
|
+
if (!message.taskId) {
|
|
27
|
+
throw INVALID_PARAMS("Missing task ID");
|
|
28
|
+
}
|
|
29
|
+
const taskId = message.taskId;
|
|
30
|
+
let contextId = message.contextId ?? "unknown";
|
|
31
|
+
const executionContext = {
|
|
32
|
+
id: taskId,
|
|
33
|
+
protocol: Protocol.A2A,
|
|
34
|
+
getRequestParams: () => req.params,
|
|
35
|
+
isCancelled: () => this.state.activeCancellations.has(taskId),
|
|
36
|
+
};
|
|
37
|
+
// Set up SSE stream with initial status
|
|
38
|
+
setupSseStream(res, taskId, {
|
|
39
|
+
taskId: taskId,
|
|
40
|
+
contextId: contextId,
|
|
41
|
+
kind: "status-update",
|
|
42
|
+
status: {
|
|
43
|
+
state: TaskState.Submitted,
|
|
44
|
+
timestamp: getCurrentTimestamp(),
|
|
45
|
+
},
|
|
46
|
+
final: false,
|
|
47
|
+
}, this.state.addStreamForTask.bind(this.state));
|
|
48
|
+
// Load or create task
|
|
49
|
+
let currentData = await loadState(this.state.getTaskStore(), message, metadata, taskId, contextId);
|
|
50
|
+
// Create task context
|
|
51
|
+
const context = this.state.createTaskContext(currentData.task, message, currentData.history);
|
|
52
|
+
contextId = currentData.task.contextId || contextId;
|
|
53
|
+
const workingUpdate = WORKING_UPDATE(taskId, contextId);
|
|
54
|
+
currentData = await processUpdate(this.state.getTaskStore(), {
|
|
55
|
+
context: context,
|
|
56
|
+
current: currentData,
|
|
57
|
+
update: workingUpdate,
|
|
58
|
+
});
|
|
59
|
+
// Send the working status
|
|
60
|
+
sendSSEEvent(res, currentData.task.id, workingUpdate);
|
|
61
|
+
// Process the task using the shared method
|
|
62
|
+
await processTaskStream(context, this.state.getTaskStore(), this.engine, res, taskId, currentData, this.state.onCancel.bind(this.state), this.state.onEnd.bind(this.state), executionContext);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Handles the tasks/resubscribe method.
|
|
66
|
+
* @param req The TaskResubscriptionRequest object
|
|
67
|
+
* @param res The Express Response object
|
|
68
|
+
*/
|
|
69
|
+
async handleTaskResubscribe(req, res) {
|
|
70
|
+
const { id: taskId } = req.params;
|
|
71
|
+
if (!taskId) {
|
|
72
|
+
logError("A2AService", "Task ID is required", req);
|
|
73
|
+
throw INVALID_PARAMS("Missing task ID");
|
|
74
|
+
}
|
|
75
|
+
const executionContext = {
|
|
76
|
+
id: taskId,
|
|
77
|
+
protocol: Protocol.A2A,
|
|
78
|
+
getRequestParams: () => req.params,
|
|
79
|
+
isCancelled: () => this.state.activeCancellations.has(taskId),
|
|
80
|
+
};
|
|
81
|
+
// Try to load the task
|
|
82
|
+
const data = await this.state.getTaskStore().load(taskId);
|
|
83
|
+
if (!data) {
|
|
84
|
+
throw TASK_NOT_FOUND("Task Id: " + taskId);
|
|
85
|
+
}
|
|
86
|
+
// Set up SSE stream with current task status
|
|
87
|
+
setupSseStream(res, taskId, {
|
|
88
|
+
taskId: taskId,
|
|
89
|
+
contextId: data.task.contextId || "unknown",
|
|
90
|
+
kind: "status-update",
|
|
91
|
+
status: data.task.status,
|
|
92
|
+
final: false,
|
|
93
|
+
metadata: data.task.metadata,
|
|
94
|
+
}, this.state.addStreamForTask.bind(this.state));
|
|
95
|
+
// Check if task is in final state
|
|
96
|
+
if (FINAL_STATES.includes(data.task.status.state)) {
|
|
97
|
+
// If the task is already complete, send all artifacts and close
|
|
98
|
+
if (data.task.artifacts && data.task.artifacts.length > 0) {
|
|
99
|
+
for (const artifact of data.task.artifacts) {
|
|
100
|
+
const response = {
|
|
101
|
+
taskId: taskId,
|
|
102
|
+
contextId: data.task.contextId || "unknown",
|
|
103
|
+
kind: "artifact-update",
|
|
104
|
+
artifact,
|
|
105
|
+
lastChunk: true,
|
|
106
|
+
metadata: data.task.metadata,
|
|
107
|
+
};
|
|
108
|
+
sendSSEEvent(res, taskId, response);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Remove from tracking and close
|
|
112
|
+
this.state.removeStreamForTask(taskId, res);
|
|
113
|
+
res.write("event: close\ndata: {}\n\n");
|
|
114
|
+
res.end();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// For non-final states, create context and continue processing
|
|
118
|
+
// We need to use the last user message as the current message
|
|
119
|
+
const lastUserMessage = data.history
|
|
120
|
+
.filter((msg) => msg.role === "user")
|
|
121
|
+
.pop();
|
|
122
|
+
if (!lastUserMessage) {
|
|
123
|
+
throw INVALID_REQUEST("No user message found");
|
|
124
|
+
}
|
|
125
|
+
const context = this.state.createTaskContext(data.task, lastUserMessage, data.history);
|
|
126
|
+
// Continue processing the task using the shared method
|
|
127
|
+
await processTaskStream(context, this.state.getTaskStore(), this.engine, res, taskId, data, this.state.onCancel.bind(this.state), this.state.onEnd.bind(this.state), executionContext);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Executes a method on the A2A service.
|
|
131
|
+
* @param executionContext The execution context.
|
|
132
|
+
* @param engine The agent engine.
|
|
133
|
+
*/
|
|
134
|
+
async execute({ executionContext, engine, }) {
|
|
135
|
+
if (!executionContext.requestContext) {
|
|
136
|
+
throw INVALID_REQUEST({
|
|
137
|
+
message: "Invalid request",
|
|
138
|
+
data: {
|
|
139
|
+
method: "unknown",
|
|
140
|
+
params: executionContext.getRequestParams(),
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (!executionContext.requestContext?.method) {
|
|
145
|
+
throw METHOD_NOT_FOUND({ method: "unknown" });
|
|
146
|
+
}
|
|
147
|
+
//todo better callback sanitization
|
|
148
|
+
let closeConnection = false;
|
|
149
|
+
const callback = (error, result) => {
|
|
150
|
+
const responseHandler = executionContext.requestContext?.response;
|
|
151
|
+
if (error) {
|
|
152
|
+
responseHandler.status(200);
|
|
153
|
+
responseHandler.send({
|
|
154
|
+
jsonrpc: "2.0",
|
|
155
|
+
id: executionContext.id,
|
|
156
|
+
error: error,
|
|
157
|
+
});
|
|
158
|
+
closeConnection = true;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
responseHandler.status(200);
|
|
162
|
+
responseHandler.send({
|
|
163
|
+
jsonrpc: "2.0",
|
|
164
|
+
id: executionContext.id,
|
|
165
|
+
result,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (closeConnection) {
|
|
169
|
+
responseHandler.end();
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
switch (executionContext.requestContext?.method) {
|
|
173
|
+
case "message/send":
|
|
174
|
+
case "tasks/get":
|
|
175
|
+
case "tasks/cancel":
|
|
176
|
+
case "tasks/pushNotificationConfig/set":
|
|
177
|
+
case "tasks/pushNotificationConfig/get":
|
|
178
|
+
closeConnection = true;
|
|
179
|
+
return await A2AService.dispatchMethod(executionContext.requestContext.method, executionContext.requestContext.params, callback, {
|
|
180
|
+
taskStore: this.state.getTaskStore(),
|
|
181
|
+
card: this.state.getCard(),
|
|
182
|
+
taskHandler: engine,
|
|
183
|
+
activeCancellations: this.state.activeCancellations,
|
|
184
|
+
createTaskContext: this.state.createTaskContext.bind(this.state),
|
|
185
|
+
closeStreamsForTask: this.state.closeStreamsForTask.bind(this.state),
|
|
186
|
+
}).catch((error) => {
|
|
187
|
+
logError("A2AService", `Error dispatching method: ${executionContext.requestContext?.method}`, error);
|
|
188
|
+
closeConnection = true;
|
|
189
|
+
callback(error, null);
|
|
190
|
+
});
|
|
191
|
+
case "message/stream":
|
|
192
|
+
{
|
|
193
|
+
//todo make the following functions leverage callback
|
|
194
|
+
const params = executionContext.requestContext.request
|
|
195
|
+
.body;
|
|
196
|
+
return await this.handleSendStreamingMessage(params, executionContext.requestContext.response).catch((error) => {
|
|
197
|
+
logError("A2AService", `Error dispatching method: ${executionContext.requestContext?.method}`, error);
|
|
198
|
+
closeConnection = true;
|
|
199
|
+
callback(error, null);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
case "tasks/resubscribe":
|
|
204
|
+
{
|
|
205
|
+
const params = executionContext.requestContext.request
|
|
206
|
+
.body;
|
|
207
|
+
return await this.handleTaskResubscribe(params, executionContext.requestContext.response).catch((error) => {
|
|
208
|
+
logError("A2AService", `Error dispatching method: ${executionContext.requestContext?.method}`, error);
|
|
209
|
+
closeConnection = true;
|
|
210
|
+
callback(error, null);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
break;
|
|
214
|
+
default:
|
|
215
|
+
logError("A2AService", `Unknown method: ${executionContext.requestContext?.method}`, null);
|
|
216
|
+
callback(METHOD_NOT_FOUND({ method: executionContext.requestContext?.method }), null);
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async stop() {
|
|
221
|
+
await this.state.destroy();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Dispatches a method to the A2A service.
|
|
225
|
+
* @param method The method to dispatch.
|
|
226
|
+
* @param params The parameters to dispatch.
|
|
227
|
+
* @param callback The callback to dispatch.
|
|
228
|
+
* @param deps The dependencies to dispatch.
|
|
229
|
+
*/
|
|
230
|
+
static async dispatchMethod(method, params, callback, deps) {
|
|
231
|
+
switch (method) {
|
|
232
|
+
case "message/send":
|
|
233
|
+
return await createJSONRPCMethod(deps, defaultSendTaskMethod, method)(params, callback);
|
|
234
|
+
case "tasks/get":
|
|
235
|
+
return await createJSONRPCMethod(deps, defaultGetTaskMethod, method)(params, callback);
|
|
236
|
+
case "tasks/cancel":
|
|
237
|
+
return await createJSONRPCMethod(deps, defaultCancelTaskMethod, method)(params, callback);
|
|
238
|
+
case "tasks/pushNotificationConfig/set":
|
|
239
|
+
return await createJSONRPCMethod(deps, defaultSetTaskPushNotificationMethod, method)(params, callback);
|
|
240
|
+
case "tasks/pushNotificationConfig/get":
|
|
241
|
+
return await createJSONRPCMethod(deps, defaultGetTaskPushNotificationMethod, method)(params, callback);
|
|
242
|
+
default:
|
|
243
|
+
throw new Error(`Unknown method: ${method}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/a2a/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ServiceDispatcher } from "../types/services/dispatcher.js";
|
|
2
|
+
import { v4 as uuidv4 } from "uuid";
|
|
3
|
+
/**
|
|
4
|
+
* @description The service manager class.
|
|
5
|
+
*/
|
|
6
|
+
export class ServiceManager extends ServiceDispatcher {
|
|
7
|
+
/**
|
|
8
|
+
* @description The agent card.
|
|
9
|
+
* @type {AgentCard}
|
|
10
|
+
*/
|
|
11
|
+
card;
|
|
12
|
+
/**
|
|
13
|
+
* @description The constructor.
|
|
14
|
+
* @param {ManagerOptions} params The service manager params.
|
|
15
|
+
*/
|
|
16
|
+
constructor(params) {
|
|
17
|
+
super(params);
|
|
18
|
+
this.card = params.card;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @description Creates a request context.
|
|
22
|
+
* @param {T} req The request.
|
|
23
|
+
* @returns {T} The request context.
|
|
24
|
+
*/
|
|
25
|
+
createRequestContext(req) {
|
|
26
|
+
if (!req.protocol || !req.method || !req.params) {
|
|
27
|
+
throw new Error("Invalid request parameters");
|
|
28
|
+
}
|
|
29
|
+
const context = {
|
|
30
|
+
...req,
|
|
31
|
+
id: req.id ?? uuidv4(),
|
|
32
|
+
protocol: req.protocol,
|
|
33
|
+
method: req.method,
|
|
34
|
+
params: req.params,
|
|
35
|
+
};
|
|
36
|
+
return context;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @description Gets the agent card.
|
|
40
|
+
* @returns {AgentCard} The agent card.
|
|
41
|
+
*/
|
|
42
|
+
getCard() {
|
|
43
|
+
return this.card;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Gets a service by protocol.
|
|
47
|
+
* @param {Protocol} protocol The protocol.
|
|
48
|
+
* @returns {Service} The service.
|
|
49
|
+
*/
|
|
50
|
+
getService(protocol) {
|
|
51
|
+
return this.services[protocol];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Stops the manager.
|
|
55
|
+
* @returns {Promise<void>} The promise.
|
|
56
|
+
*/
|
|
57
|
+
async destroy() {
|
|
58
|
+
await Promise.all(Object.values(this.services).map((service) => service.stop()));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/services/manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGpC;;GAEG;AACH,MAAM,OAAO,cACX,SAAQ,iBAAiB;IAGzB;;;OAGG;IACM,IAAI,CAAY;IACzB;;;OAGG;IACH,YAAY,MAAsB;QAChC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAiC,GAAM;QACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,OAAO,GAAM;YACjB,GAAG,GAAG;YACN,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,MAAM,EAAE;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;SACd,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,QAAkB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAC9D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|