@hanphone/dsh-a2a 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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/README.zh.md +195 -0
  4. package/cordis.patch.yml +11 -0
  5. package/lib/client.js +166 -0
  6. package/lib/index.js +2073 -0
  7. package/lib/tsconfig.client.tsbuildinfo +1 -0
  8. package/lib/tsconfig.tsbuildinfo +1 -0
  9. package/lib/types/api.d.ts +41 -0
  10. package/lib/types/api.d.ts.map +1 -0
  11. package/lib/types/api.js +86 -0
  12. package/lib/types/api.js.map +1 -0
  13. package/lib/types/client/index.d.ts +35 -0
  14. package/lib/types/client/index.d.ts.map +1 -0
  15. package/lib/types/client/index.js +155 -0
  16. package/lib/types/client/index.js.map +1 -0
  17. package/lib/types/commands.d.ts +10 -0
  18. package/lib/types/commands.d.ts.map +1 -0
  19. package/lib/types/commands.js +93 -0
  20. package/lib/types/commands.js.map +1 -0
  21. package/lib/types/events.d.ts +74 -0
  22. package/lib/types/events.d.ts.map +1 -0
  23. package/lib/types/events.js +10 -0
  24. package/lib/types/events.js.map +1 -0
  25. package/lib/types/index.d.ts +54 -0
  26. package/lib/types/index.d.ts.map +1 -0
  27. package/lib/types/index.js +296 -0
  28. package/lib/types/index.js.map +1 -0
  29. package/lib/types/jsonrpc.d.ts +20 -0
  30. package/lib/types/jsonrpc.d.ts.map +1 -0
  31. package/lib/types/jsonrpc.js +48 -0
  32. package/lib/types/jsonrpc.js.map +1 -0
  33. package/lib/types/outbound/calls.d.ts +37 -0
  34. package/lib/types/outbound/calls.d.ts.map +1 -0
  35. package/lib/types/outbound/calls.js +120 -0
  36. package/lib/types/outbound/calls.js.map +1 -0
  37. package/lib/types/outbound/registry.d.ts +102 -0
  38. package/lib/types/outbound/registry.d.ts.map +1 -0
  39. package/lib/types/outbound/registry.js +249 -0
  40. package/lib/types/outbound/registry.js.map +1 -0
  41. package/lib/types/outbound/tools.d.ts +30 -0
  42. package/lib/types/outbound/tools.d.ts.map +1 -0
  43. package/lib/types/outbound/tools.js +86 -0
  44. package/lib/types/outbound/tools.js.map +1 -0
  45. package/lib/types/protocol.d.ts +194 -0
  46. package/lib/types/protocol.d.ts.map +1 -0
  47. package/lib/types/protocol.js +78 -0
  48. package/lib/types/protocol.js.map +1 -0
  49. package/lib/types/server/a2a-server.d.ts +98 -0
  50. package/lib/types/server/a2a-server.d.ts.map +1 -0
  51. package/lib/types/server/a2a-server.js +397 -0
  52. package/lib/types/server/a2a-server.js.map +1 -0
  53. package/lib/types/server/card.d.ts +48 -0
  54. package/lib/types/server/card.d.ts.map +1 -0
  55. package/lib/types/server/card.js +75 -0
  56. package/lib/types/server/card.js.map +1 -0
  57. package/lib/types/server/exec/agent-runtime.d.ts +126 -0
  58. package/lib/types/server/exec/agent-runtime.d.ts.map +1 -0
  59. package/lib/types/server/exec/agent-runtime.js +138 -0
  60. package/lib/types/server/exec/agent-runtime.js.map +1 -0
  61. package/lib/types/server/exec/session.d.ts +11 -0
  62. package/lib/types/server/exec/session.d.ts.map +1 -0
  63. package/lib/types/server/exec/session.js +22 -0
  64. package/lib/types/server/exec/session.js.map +1 -0
  65. package/lib/types/server/exec/subagent.d.ts +39 -0
  66. package/lib/types/server/exec/subagent.d.ts.map +1 -0
  67. package/lib/types/server/exec/subagent.js +44 -0
  68. package/lib/types/server/exec/subagent.js.map +1 -0
  69. package/lib/types/server/executor.d.ts +63 -0
  70. package/lib/types/server/executor.d.ts.map +1 -0
  71. package/lib/types/server/executor.js +38 -0
  72. package/lib/types/server/executor.js.map +1 -0
  73. package/lib/types/server/routes.d.ts +32 -0
  74. package/lib/types/server/routes.d.ts.map +1 -0
  75. package/lib/types/server/routes.js +131 -0
  76. package/lib/types/server/routes.js.map +1 -0
  77. package/lib/types/server/store.d.ts +157 -0
  78. package/lib/types/server/store.d.ts.map +1 -0
  79. package/lib/types/server/store.js +239 -0
  80. package/lib/types/server/store.js.map +1 -0
  81. package/lib/types/service.d.ts +49 -0
  82. package/lib/types/service.d.ts.map +1 -0
  83. package/lib/types/service.js +46 -0
  84. package/lib/types/service.js.map +1 -0
  85. package/package.json +82 -0
  86. package/src/api.ts +115 -0
  87. package/src/client/index.ts +293 -0
  88. package/src/commands.ts +92 -0
  89. package/src/events.ts +58 -0
  90. package/src/index.ts +353 -0
  91. package/src/jsonrpc.ts +61 -0
  92. package/src/outbound/calls.ts +145 -0
  93. package/src/outbound/registry.ts +290 -0
  94. package/src/outbound/tools.ts +118 -0
  95. package/src/protocol.ts +212 -0
  96. package/src/server/a2a-server.ts +455 -0
  97. package/src/server/card.ts +106 -0
  98. package/src/server/exec/agent-runtime.ts +197 -0
  99. package/src/server/exec/session.ts +25 -0
  100. package/src/server/exec/subagent.ts +67 -0
  101. package/src/server/executor.ts +73 -0
  102. package/src/server/routes.ts +156 -0
  103. package/src/server/store.ts +320 -0
  104. package/src/service.ts +78 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * HTTP binding for the inbound server: registers the AgentCard route and the
3
+ * JSON-RPC / SSE endpoint on a structural webServer (normally
4
+ * `@deepseek-ai/dsh-host-webserver`), with runtime enable/disable.
5
+ * @module dsh-a2a/server/routes
6
+ */
7
+ const CARD_PATH = '/.well-known/agent-card.json';
8
+ /** Runtime-registered HTTP routes for one A2A server. */
9
+ export class A2aRoutes {
10
+ webServer;
11
+ server;
12
+ disposers = [];
13
+ registered = false;
14
+ constructor(webServer, server) {
15
+ this.webServer = webServer;
16
+ this.server = server;
17
+ }
18
+ get active() {
19
+ return this.registered;
20
+ }
21
+ /** Register the AgentCard + endpoint routes (idempotent). */
22
+ enable() {
23
+ if (this.registered)
24
+ return;
25
+ this.disposers.push(this.webServer.register({
26
+ kind: 'exact',
27
+ path: CARD_PATH,
28
+ handler: (_req, res) => {
29
+ res.writeHead(200, { 'content-type': 'application/json' });
30
+ res.end(JSON.stringify(this.server.card));
31
+ },
32
+ }));
33
+ this.disposers.push(this.webServer.register({
34
+ kind: 'prefix',
35
+ path: endpointPathOf(this.server),
36
+ handler: (req, res) => this.onRequest(req, res),
37
+ }));
38
+ this.registered = true;
39
+ }
40
+ /** Unregister the routes (idempotent). */
41
+ disable() {
42
+ for (const disposer of this.disposers.splice(0))
43
+ disposer();
44
+ this.registered = false;
45
+ }
46
+ dispose() {
47
+ this.disable();
48
+ }
49
+ async onRequest(req, res) {
50
+ const path = (req.url ?? '').split('?')[0] ?? '';
51
+ const streaming = (req.method === 'POST' && (req.headers.accept ?? '').includes('text/event-stream'));
52
+ if (req.method === 'POST' && path === endpointPathOf(this.server)) {
53
+ const body = await readBody(req);
54
+ if (streaming) {
55
+ // Authorize BEFORE writing 200 so a 401 can still carry a plain status.
56
+ if (!this.server.authorized(toServerReq(req))) {
57
+ res.writeHead(401, { 'content-type': 'text/plain', 'WWW-Authenticate': 'Bearer' });
58
+ res.end('Unauthorized');
59
+ return;
60
+ }
61
+ res.writeHead(200, {
62
+ 'content-type': 'text/event-stream',
63
+ 'cache-control': 'no-cache',
64
+ connection: 'keep-alive',
65
+ 'x-accel-buffering': 'no',
66
+ });
67
+ const outcome = await this.server.handleStream(toServerReq(req), body, (frame) => res.write(frame));
68
+ if (outcome.status !== 200) {
69
+ res.writeHead(outcome.status, { 'content-type': 'text/plain', ...(outcome.headers ?? {}) });
70
+ res.end('Unauthorized');
71
+ return;
72
+ }
73
+ res.end();
74
+ return;
75
+ }
76
+ const out = await this.server.handle(toServerReq(req), body);
77
+ res.writeHead(out.status, { 'content-type': out.contentType, ...(out.headers ?? {}) });
78
+ res.end(out.body);
79
+ return;
80
+ }
81
+ // GET AgentCard at the well-known path; anything else is the server's call.
82
+ const out = await this.server.handle(toServerReq(req), path === CARD_PATH ? '' : '');
83
+ res.writeHead(out.status, { 'content-type': out.contentType, ...(out.headers ?? {}) });
84
+ res.end(out.body);
85
+ }
86
+ }
87
+ function endpointPathOf(server) {
88
+ const url = server.card.supportedInterfaces?.[0]?.url;
89
+ if (!url)
90
+ return '/a2a';
91
+ try {
92
+ return new URL(url).pathname;
93
+ }
94
+ catch {
95
+ return '/a2a';
96
+ }
97
+ }
98
+ function readBody(req) {
99
+ return new Promise((resolve, reject) => {
100
+ const chunks = [];
101
+ req.on('data', (chunk) => chunks.push(chunk));
102
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
103
+ req.once('error', reject);
104
+ });
105
+ }
106
+ function toServerReq(req) {
107
+ const headers = {};
108
+ for (const [key, value] of Object.entries(req.headers)) {
109
+ if (typeof value === 'string')
110
+ headers[key] = value;
111
+ else if (Array.isArray(value))
112
+ headers[key] = value.join(', ');
113
+ }
114
+ const method = req.method;
115
+ const url = req.url;
116
+ const socket = req.socket;
117
+ return {
118
+ ...(method !== undefined ? { method } : {}),
119
+ ...(url !== undefined ? { url } : {}),
120
+ headers,
121
+ ...(socket
122
+ ? {
123
+ socket: {
124
+ ...(socket.remoteAddress !== undefined ? { remoteAddress: socket.remoteAddress } : {}),
125
+ ...(socket.remotePort !== undefined ? { remotePort: socket.remotePort } : {}),
126
+ },
127
+ }
128
+ : {}),
129
+ };
130
+ }
131
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Durable task storage for the inbound half: one `a2a` domain over the routed
3
+ * storage backend (the deployment picks the medium, normally SQLite). Records
4
+ * are serialized JSON so the domain tables stay plain kv rows; the domain
5
+ * SCHEMA_VERSION guards format evolution. A memory store keeps unit tests and
6
+ * minimal embeddings free of a backend.
7
+ * @module dsh-a2a/server/store
8
+ */
9
+ import { type Domain, type DomainFacility, type KvTable } from '@deepseek-ai/dsh-storage-domain';
10
+ import { TaskState, type Part } from '../protocol.ts';
11
+ /** One durable inbound/outbound task record. */
12
+ export interface TaskRecord {
13
+ readonly taskId: string;
14
+ readonly contextId: string;
15
+ readonly skill: string;
16
+ readonly state: TaskState;
17
+ readonly createdAt: string;
18
+ readonly updatedAt: string;
19
+ readonly sessionId: string | null;
20
+ readonly remotePeerId: string | null;
21
+ readonly parts: readonly Part[];
22
+ readonly artifacts: readonly {
23
+ readonly artifactId: string;
24
+ readonly name?: string;
25
+ readonly parts: readonly Part[];
26
+ }[];
27
+ readonly executor: 'session' | 'subagent';
28
+ readonly summary: string | null;
29
+ readonly error?: {
30
+ readonly code: string;
31
+ readonly message: string;
32
+ };
33
+ }
34
+ /** One durable context→session binding (inbound conversation ↔ DSH session). */
35
+ export interface ContextBinding {
36
+ readonly sessionId: string;
37
+ }
38
+ /** One durable outbound agent record (client registry persistence). */
39
+ export interface OutboundAgentRecord {
40
+ readonly id: string;
41
+ readonly name: string;
42
+ readonly agentCardUrl: string;
43
+ readonly bearerTokenEnv?: string;
44
+ readonly enabled: boolean;
45
+ readonly timeoutMs: number;
46
+ readonly lastCardAt: string | null;
47
+ }
48
+ /** The `a2a` storage domain: JSON-encoded records, one table per record kind. */
49
+ export declare const a2aDomainSpec: {
50
+ name: string;
51
+ version: number;
52
+ tables: {
53
+ tasks: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, string>;
54
+ contexts: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, string>;
55
+ agents: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, string>;
56
+ };
57
+ };
58
+ export type A2aDomainSpec = typeof a2aDomainSpec;
59
+ /**
60
+ * Serialize/deserialize helpers for the domain tables. Plain JSON round-trip
61
+ * with shape assertions; `decodeRecord` returns undefined on any mismatch.
62
+ */
63
+ export declare function encodeRecord(value: unknown): string;
64
+ export declare function decodeRecord<T>(raw: string): T | undefined;
65
+ /**
66
+ * Open the `a2a` domain on the mounted storage-domain facility and expose
67
+ * its tables. The caller owns the returned handle and closes it on teardown.
68
+ */
69
+ export declare function openDomain(domain: DomainFacility): Promise<A2aDomain>;
70
+ /** A2a domain facade: typed JSON tables over the routed backend. */
71
+ export declare class A2aDomain {
72
+ readonly handle: Domain<A2aDomainSpec>;
73
+ constructor(handle: Domain<A2aDomainSpec>);
74
+ get tasks(): KvTable<string, string>;
75
+ get contexts(): KvTable<string, string>;
76
+ get agents(): KvTable<string, string>;
77
+ close(): Promise<void>;
78
+ }
79
+ /** Task-store contract shared by the domain-backed and memory stores. */
80
+ export interface TaskStore {
81
+ create(input: {
82
+ contextId: string;
83
+ skill: string;
84
+ parts: readonly Part[];
85
+ remotePeerId: string | null;
86
+ }): TaskRecord;
87
+ get(taskId: string): TaskRecord | undefined;
88
+ list(): TaskRecord[];
89
+ setState(taskId: string, state: TaskState, message?: {
90
+ code: string;
91
+ text: string;
92
+ }): TaskRecord;
93
+ appendArtifact(taskId: string, artifact: {
94
+ artifactId: string;
95
+ name?: string;
96
+ parts: readonly Part[];
97
+ lastChunk?: boolean;
98
+ }): TaskRecord;
99
+ setContextSession(contextId: string, sessionId: string): Promise<void>;
100
+ getContextSession(contextId: string): Promise<string | undefined>;
101
+ close(): Promise<void>;
102
+ }
103
+ /** In-memory TaskStore (unit tests, minimal embeddings). */
104
+ export declare class MemoryTaskStore implements TaskStore {
105
+ private tasks;
106
+ private contexts;
107
+ create(input: {
108
+ contextId: string;
109
+ skill: string;
110
+ parts: readonly Part[];
111
+ remotePeerId: string | null;
112
+ }): TaskRecord;
113
+ get(taskId: string): TaskRecord | undefined;
114
+ list(): TaskRecord[];
115
+ setState(taskId: string, state: TaskState, message?: {
116
+ code: string;
117
+ text: string;
118
+ }): TaskRecord;
119
+ appendArtifact(taskId: string, artifact: {
120
+ artifactId: string;
121
+ name?: string;
122
+ parts: readonly Part[];
123
+ lastChunk?: boolean;
124
+ }): TaskRecord;
125
+ setContextSession(contextId: string, sessionId: string): Promise<void>;
126
+ getContextSession(contextId: string): Promise<string | undefined>;
127
+ close(): Promise<void>;
128
+ }
129
+ /** Domain-backed TaskStore (persistent; the composition path). */
130
+ export declare class DomainTaskStore implements TaskStore {
131
+ private readonly domain;
132
+ private readonly records;
133
+ private readonly bindings;
134
+ constructor(domain: A2aDomain);
135
+ create(input: {
136
+ contextId: string;
137
+ skill: string;
138
+ parts: readonly Part[];
139
+ remotePeerId: string | null;
140
+ }): TaskRecord;
141
+ get(taskId: string): TaskRecord | undefined;
142
+ list(): TaskRecord[];
143
+ setState(taskId: string, state: TaskState, message?: {
144
+ code: string;
145
+ text: string;
146
+ }): TaskRecord;
147
+ appendArtifact(taskId: string, artifact: {
148
+ artifactId: string;
149
+ name?: string;
150
+ parts: readonly Part[];
151
+ lastChunk?: boolean;
152
+ }): TaskRecord;
153
+ setContextSession(contextId: string, sessionId: string): Promise<void>;
154
+ getContextSession(contextId: string): Promise<string | undefined>;
155
+ close(): Promise<void>;
156
+ }
157
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/server/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,OAAO,EACb,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErD,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;KAAE,EAAE,CAAA;IACvH,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACrE;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAKD,iFAAiF;AACjF,eAAO,MAAM,aAAa;;;;;;;;CAQxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAEhD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAM1D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAG3E;AAED,oEAAoE;AACpE,qBAAa,SAAS;IACR,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;gBAA7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAElD,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtC;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,UAAU,CAAA;IACpH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAC3C,IAAI,IAAI,UAAU,EAAE,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAA;IAChG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,CAAA;IACxI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAcD,4DAA4D;AAC5D,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAA4B;IAE5C,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,UAAU;IAmBpH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3C,IAAI,IAAI,UAAU,EAAE;IAIpB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAahG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU;IAYlI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B;AAaD,kEAAkE;AAClE,qBAAa,eAAgB,YAAW,SAAS;IAUnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;gBAExB,MAAM,EAAE,SAAS;IAa9C,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,UAAU;IAuBpH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3C,IAAI,IAAI,UAAU,EAAE;IAIpB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAWhG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU;IAWlI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Durable task storage for the inbound half: one `a2a` domain over the routed
3
+ * storage backend (the deployment picks the medium, normally SQLite). Records
4
+ * are serialized JSON so the domain tables stay plain kv rows; the domain
5
+ * SCHEMA_VERSION guards format evolution. A memory store keeps unit tests and
6
+ * minimal embeddings free of a backend.
7
+ * @module dsh-a2a/server/store
8
+ */
9
+ import { z } from 'zod';
10
+ import { defineDomain, domainTable, } from '@deepseek-ai/dsh-storage-domain';
11
+ import { TaskState } from "../protocol.js";
12
+ /** JSON-encoded record schema shared by every `a2a` table. */
13
+ const json = z.string();
14
+ /** The `a2a` storage domain: JSON-encoded records, one table per record kind. */
15
+ export const a2aDomainSpec = defineDomain({
16
+ name: 'a2a',
17
+ version: 1,
18
+ tables: {
19
+ tasks: domainTable(json),
20
+ contexts: domainTable(json),
21
+ agents: domainTable(json),
22
+ },
23
+ });
24
+ /**
25
+ * Serialize/deserialize helpers for the domain tables. Plain JSON round-trip
26
+ * with shape assertions; `decodeRecord` returns undefined on any mismatch.
27
+ */
28
+ export function encodeRecord(value) {
29
+ return JSON.stringify(value);
30
+ }
31
+ export function decodeRecord(raw) {
32
+ try {
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
39
+ /**
40
+ * Open the `a2a` domain on the mounted storage-domain facility and expose
41
+ * its tables. The caller owns the returned handle and closes it on teardown.
42
+ */
43
+ export async function openDomain(domain) {
44
+ const handle = await domain.open(a2aDomainSpec);
45
+ return new A2aDomain(handle);
46
+ }
47
+ /** A2a domain facade: typed JSON tables over the routed backend. */
48
+ export class A2aDomain {
49
+ handle;
50
+ constructor(handle) {
51
+ this.handle = handle;
52
+ }
53
+ get tasks() {
54
+ return this.handle.table('tasks');
55
+ }
56
+ get contexts() {
57
+ return this.handle.table('contexts');
58
+ }
59
+ get agents() {
60
+ return this.handle.table('agents');
61
+ }
62
+ async close() {
63
+ await this.handle.close();
64
+ }
65
+ }
66
+ function now() {
67
+ return new Date().toISOString();
68
+ }
69
+ function recordKey(taskId) {
70
+ return `task:${taskId}`;
71
+ }
72
+ function contextKey(contextId) {
73
+ return `ctx:${contextId}`;
74
+ }
75
+ /** In-memory TaskStore (unit tests, minimal embeddings). */
76
+ export class MemoryTaskStore {
77
+ tasks = new Map();
78
+ contexts = new Map();
79
+ create(input) {
80
+ const record = {
81
+ taskId: `a2a-${crypto.randomUUID()}`,
82
+ contextId: input.contextId,
83
+ skill: input.skill,
84
+ state: TaskState.SUBMITTED,
85
+ createdAt: now(),
86
+ updatedAt: now(),
87
+ sessionId: null,
88
+ remotePeerId: input.remotePeerId,
89
+ parts: input.parts,
90
+ artifacts: [],
91
+ executor: 'session',
92
+ summary: null,
93
+ };
94
+ this.tasks.set(record.taskId, record);
95
+ return record;
96
+ }
97
+ get(taskId) {
98
+ return this.tasks.get(taskId);
99
+ }
100
+ list() {
101
+ return [...this.tasks.values()];
102
+ }
103
+ setState(taskId, state, message) {
104
+ const current = this.tasks.get(taskId);
105
+ if (current === undefined)
106
+ throw new Error(`task ${taskId} not found`);
107
+ const next = {
108
+ ...current,
109
+ state,
110
+ updatedAt: now(),
111
+ ...(message ? { error: { code: message.code, message: message.text } } : current.error ? { error: current.error } : {}),
112
+ };
113
+ this.tasks.set(taskId, next);
114
+ return next;
115
+ }
116
+ appendArtifact(taskId, artifact) {
117
+ const current = this.tasks.get(taskId);
118
+ if (current === undefined)
119
+ throw new Error(`task ${taskId} not found`);
120
+ const next = {
121
+ ...current,
122
+ updatedAt: now(),
123
+ artifacts: appendArtifactRecord(current.artifacts, artifact),
124
+ };
125
+ this.tasks.set(taskId, next);
126
+ return next;
127
+ }
128
+ async setContextSession(contextId, sessionId) {
129
+ this.contexts.set(contextId, sessionId);
130
+ }
131
+ async getContextSession(contextId) {
132
+ return this.contexts.get(contextId);
133
+ }
134
+ async close() { }
135
+ }
136
+ function appendArtifactRecord(artifacts, artifact) {
137
+ const existing = artifacts.find((a) => a.artifactId === artifact.artifactId);
138
+ if (existing) {
139
+ return artifacts.map((a) => (a.artifactId === artifact.artifactId ? { ...a, parts: [...a.parts, ...artifact.parts] } : a));
140
+ }
141
+ return [...artifacts, { artifactId: artifact.artifactId, ...(artifact.name !== undefined ? { name: artifact.name } : {}), parts: artifact.parts }];
142
+ }
143
+ /** Domain-backed TaskStore (persistent; the composition path). */
144
+ export class DomainTaskStore {
145
+ domain;
146
+ // The real `KvTable.put` queues on the domain's write chain: durability
147
+ // first, then the in-memory table updates. TaskStore's synchronous readers
148
+ // must see their own writes immediately, so this store keeps the live view
149
+ // in memory, seeds it from the domain's opened tables (already loaded from
150
+ // the medium), updates it before each queued write, and never reads the
151
+ // table back for its own writes.
152
+ records = new Map();
153
+ bindings = new Map();
154
+ constructor(domain) {
155
+ this.domain = domain;
156
+ for (const [key, raw] of domain.tasks.entries()) {
157
+ if (!key.startsWith('task:'))
158
+ continue;
159
+ const record = decodeRecord(raw);
160
+ if (record !== undefined)
161
+ this.records.set(record.taskId, record);
162
+ }
163
+ for (const [key, raw] of domain.contexts.entries()) {
164
+ if (!key.startsWith('ctx:'))
165
+ continue;
166
+ const binding = decodeRecord(raw);
167
+ if (binding !== undefined)
168
+ this.bindings.set(key.slice('ctx:'.length), binding.sessionId);
169
+ }
170
+ }
171
+ create(input) {
172
+ const record = {
173
+ taskId: `a2a-${crypto.randomUUID()}`,
174
+ contextId: input.contextId,
175
+ skill: input.skill,
176
+ state: TaskState.SUBMITTED,
177
+ createdAt: now(),
178
+ updatedAt: now(),
179
+ sessionId: null,
180
+ remotePeerId: input.remotePeerId,
181
+ parts: input.parts,
182
+ artifacts: [],
183
+ executor: 'session',
184
+ summary: null,
185
+ };
186
+ this.records.set(record.taskId, record);
187
+ // Persist eagerly; a failed write must fail the task, not silently lose it.
188
+ void this.domain.tasks.put(recordKey(record.taskId), encodeRecord(record)).catch((err) => {
189
+ throw new Error(`a2a: task persistence failed: ${String(err)}`);
190
+ });
191
+ return record;
192
+ }
193
+ get(taskId) {
194
+ return this.records.get(taskId);
195
+ }
196
+ list() {
197
+ return [...this.records.values()];
198
+ }
199
+ setState(taskId, state, message) {
200
+ const current = this.records.get(taskId);
201
+ if (current === undefined)
202
+ throw new Error(`task ${taskId} not found`);
203
+ const next = withState(current, state, message, now());
204
+ this.records.set(taskId, next);
205
+ void this.domain.tasks.put(recordKey(taskId), encodeRecord(next)).catch((err) => {
206
+ throw new Error(`a2a: task persistence failed: ${String(err)}`);
207
+ });
208
+ return next;
209
+ }
210
+ appendArtifact(taskId, artifact) {
211
+ const current = this.records.get(taskId);
212
+ if (current === undefined)
213
+ throw new Error(`task ${taskId} not found`);
214
+ const next = { ...current, updatedAt: now(), artifacts: appendArtifactRecord(current.artifacts, artifact) };
215
+ this.records.set(taskId, next);
216
+ void this.domain.tasks.put(recordKey(taskId), encodeRecord(next)).catch((err) => {
217
+ throw new Error(`a2a: task persistence failed: ${String(err)}`);
218
+ });
219
+ return next;
220
+ }
221
+ async setContextSession(contextId, sessionId) {
222
+ const binding = { sessionId };
223
+ this.bindings.set(contextId, sessionId);
224
+ await this.domain.contexts.put(contextKey(contextId), encodeRecord(binding));
225
+ }
226
+ async getContextSession(contextId) {
227
+ return this.bindings.get(contextId);
228
+ }
229
+ async close() { }
230
+ }
231
+ function withState(current, state, message, timestamp) {
232
+ return {
233
+ ...current,
234
+ state,
235
+ updatedAt: timestamp,
236
+ ...(message ? { error: { code: message.code, message: message.text } } : {}),
237
+ };
238
+ }
239
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/server/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The `ctx.a2a` service facade: the thin read/control surface commands and
3
+ * other plugins use. Registered as a Cordis Service so the key disappears
4
+ * with the plugin fiber.
5
+ * @module dsh-a2a/service
6
+ */
7
+ import { Service, type Context } from '@deepseek-ai/cordis';
8
+ /** A result with a user-facing message. */
9
+ export interface OpResult {
10
+ readonly ok: boolean;
11
+ readonly message: string;
12
+ }
13
+ /** The implementation the facade delegates to (owned by the plugin assembly). */
14
+ export interface A2AServiceImpl {
15
+ status(): unknown;
16
+ enableServer(enable: boolean): Promise<OpResult>;
17
+ getTask(taskId: string): unknown;
18
+ listTasks(): unknown;
19
+ cancelTask(taskId: string): Promise<OpResult>;
20
+ agents(): unknown;
21
+ addAgent(spec: {
22
+ readonly name: string;
23
+ readonly agentCardUrl: string;
24
+ readonly bearerTokenEnv?: string;
25
+ }): Promise<OpResult>;
26
+ removeAgent(id: string): Promise<OpResult>;
27
+ setAgentEnabled(id: string, enabled: boolean): Promise<OpResult>;
28
+ refreshAgentCard(id: string): Promise<OpResult>;
29
+ }
30
+ /** The service other plugins read as `ctx.a2a`. */
31
+ export declare class A2AService extends Service {
32
+ private readonly impl;
33
+ constructor(ctx: Context, impl: A2AServiceImpl);
34
+ status(): unknown;
35
+ enableServer(enable: boolean): Promise<OpResult>;
36
+ getTask(taskId: string): unknown;
37
+ listTasks(): unknown;
38
+ cancelTask(taskId: string): Promise<OpResult>;
39
+ agents(): unknown;
40
+ addAgent(spec: {
41
+ readonly name: string;
42
+ readonly agentCardUrl: string;
43
+ readonly bearerTokenEnv?: string;
44
+ }): Promise<OpResult>;
45
+ removeAgent(id: string): Promise<OpResult>;
46
+ setAgentEnabled(id: string, enabled: boolean): Promise<OpResult>;
47
+ refreshAgentCard(id: string): Promise<OpResult>;
48
+ }
49
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE3D,2CAA2C;AAC3C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,MAAM,IAAI,OAAO,CAAA;IACjB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC,SAAS,IAAI,OAAO,CAAA;IACpB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,MAAM,IAAI,OAAO,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7H,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAChD;AAED,mDAAmD;AACnD,qBAAa,UAAW,SAAQ,OAAO;IAGnC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADrB,GAAG,EAAE,OAAO,EACK,IAAI,EAAE,cAAc;IAKvC,MAAM,IAAI,OAAO;IAIX,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,IAAI,OAAO;IAId,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInD,MAAM,IAAI,OAAO;IAIX,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7H,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI1C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIhE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGtD"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The `ctx.a2a` service facade: the thin read/control surface commands and
3
+ * other plugins use. Registered as a Cordis Service so the key disappears
4
+ * with the plugin fiber.
5
+ * @module dsh-a2a/service
6
+ */
7
+ import { Service } from '@deepseek-ai/cordis';
8
+ /** The service other plugins read as `ctx.a2a`. */
9
+ export class A2AService extends Service {
10
+ impl;
11
+ constructor(ctx, impl) {
12
+ super(ctx, 'a2a');
13
+ this.impl = impl;
14
+ }
15
+ status() {
16
+ return this.impl.status();
17
+ }
18
+ async enableServer(enable) {
19
+ return this.impl.enableServer(enable);
20
+ }
21
+ getTask(taskId) {
22
+ return this.impl.getTask(taskId);
23
+ }
24
+ listTasks() {
25
+ return this.impl.listTasks();
26
+ }
27
+ async cancelTask(taskId) {
28
+ return this.impl.cancelTask(taskId);
29
+ }
30
+ agents() {
31
+ return this.impl.agents();
32
+ }
33
+ async addAgent(spec) {
34
+ return this.impl.addAgent(spec);
35
+ }
36
+ async removeAgent(id) {
37
+ return this.impl.removeAgent(id);
38
+ }
39
+ async setAgentEnabled(id, enabled) {
40
+ return this.impl.setAgentEnabled(id, enabled);
41
+ }
42
+ async refreshAgentCard(id) {
43
+ return this.impl.refreshAgentCard(id);
44
+ }
45
+ }
46
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAgB,MAAM,qBAAqB,CAAA;AAsB3D,mDAAmD;AACnD,MAAM,OAAO,UAAW,SAAQ,OAAO;IAGlB;IAFnB,YACE,GAAY,EACK,IAAoB;QAErC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAFA,SAAI,GAAJ,IAAI,CAAgB;IAGvC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAe;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAgG;QAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU,EAAE,OAAgB;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;CACF"}