@ryubyte/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.
@@ -0,0 +1,330 @@
1
+ /**
2
+ * A2A (Agent2Agent) Protocol v1.0 — TypeScript type definitions.
3
+ *
4
+ * These types mirror the normative source of truth `specification/a2a.proto`
5
+ * (package `lf.a2a.v1`) from https://github.com/a2aproject/A2A, v1.0.0.
6
+ * JSON wire names are camelCase per ProtoJSON serialization; enum values use
7
+ * SCREAMING_SNAKE_CASE as mandated by A2A v1.0.
8
+ */
9
+ /** The lifecycle states of a Task (a2a.proto `TaskState`). */
10
+ export declare enum TaskState {
11
+ UNSPECIFIED = "TASK_STATE_UNSPECIFIED",
12
+ SUBMITTED = "TASK_STATE_SUBMITTED",
13
+ WORKING = "TASK_STATE_WORKING",
14
+ COMPLETED = "TASK_STATE_COMPLETED",
15
+ FAILED = "TASK_STATE_FAILED",
16
+ CANCELED = "TASK_STATE_CANCELED",
17
+ INPUT_REQUIRED = "TASK_STATE_INPUT_REQUIRED",
18
+ REJECTED = "TASK_STATE_REJECTED",
19
+ AUTH_REQUIRED = "TASK_STATE_AUTH_REQUIRED"
20
+ }
21
+ export type TerminalTaskState = TaskState.COMPLETED | TaskState.FAILED | TaskState.CANCELED | TaskState.REJECTED;
22
+ export type InterruptedTaskState = TaskState.INPUT_REQUIRED | TaskState.AUTH_REQUIRED;
23
+ export declare function isTerminal(state: TaskState): state is TerminalTaskState;
24
+ /** The sender of a Message (a2a.proto `Role`). */
25
+ export declare enum Role {
26
+ UNSPECIFIED = "ROLE_UNSPECIFIED",
27
+ USER = "ROLE_USER",
28
+ AGENT = "ROLE_AGENT"
29
+ }
30
+ /**
31
+ * A section of communication content (a2a.proto `Part`): exactly one of
32
+ * text / raw / url / data.
33
+ */
34
+ export type Part = {
35
+ text: string;
36
+ raw?: never;
37
+ url?: never;
38
+ data?: never;
39
+ mediaType?: string;
40
+ filename?: string;
41
+ metadata?: Record<string, unknown>;
42
+ } | {
43
+ raw: string;
44
+ text?: never;
45
+ url?: never;
46
+ data?: never;
47
+ mediaType?: string;
48
+ filename?: string;
49
+ metadata?: Record<string, unknown>;
50
+ } | {
51
+ url: string;
52
+ text?: never;
53
+ raw?: never;
54
+ data?: never;
55
+ mediaType?: string;
56
+ filename?: string;
57
+ metadata?: Record<string, unknown>;
58
+ } | {
59
+ data: unknown;
60
+ text?: never;
61
+ raw?: never;
62
+ url?: never;
63
+ mediaType?: string;
64
+ filename?: string;
65
+ metadata?: Record<string, unknown>;
66
+ };
67
+ /** One unit of communication between client and server (a2a.proto `Message`). */
68
+ export interface Message {
69
+ messageId: string;
70
+ /** Required for server (ROLE_AGENT) messages. */
71
+ contextId?: string;
72
+ taskId?: string;
73
+ role: Role | string;
74
+ parts: Part[];
75
+ metadata?: Record<string, unknown>;
76
+ extensions?: string[];
77
+ referenceTaskIds?: string[];
78
+ }
79
+ /** Task output (a2a.proto `Artifact`). */
80
+ export interface Artifact {
81
+ artifactId: string;
82
+ name?: string;
83
+ parts: Part[];
84
+ metadata?: Record<string, unknown>;
85
+ /** Only present in task-artifact-update events. */
86
+ append?: boolean;
87
+ lastChunk?: boolean;
88
+ }
89
+ /** Status of a task (a2a.proto `TaskStatus`). */
90
+ export interface TaskStatus {
91
+ state: TaskState | string;
92
+ message?: Message;
93
+ /** ISO 8601 timestamp. */
94
+ timestamp?: string;
95
+ }
96
+ /** The core unit of action for A2A (a2a.proto `Task`). */
97
+ export interface Task {
98
+ id: string;
99
+ contextId?: string;
100
+ status: TaskStatus;
101
+ artifacts?: Artifact[];
102
+ history?: Message[];
103
+ metadata?: Record<string, unknown>;
104
+ }
105
+ /** Configuration for a send request (a2a.proto `SendMessageConfiguration`). */
106
+ export interface SendMessageConfiguration {
107
+ acceptedOutputModes?: string[];
108
+ taskPushNotificationConfig?: TaskPushNotificationConfig;
109
+ historyLength?: number;
110
+ returnImmediately?: boolean;
111
+ }
112
+ /** Push notification registration (a2a.proto `TaskPushNotificationConfig`). */
113
+ export interface TaskPushNotificationConfig {
114
+ tenant?: string;
115
+ id?: string;
116
+ taskId?: string;
117
+ url: string;
118
+ token?: string;
119
+ authentication?: AuthenticationInfo;
120
+ }
121
+ /** Authentication details for push (a2a.proto `AuthenticationInfo`). */
122
+ export interface AuthenticationInfo {
123
+ scheme: string;
124
+ credentials?: string;
125
+ }
126
+ /** Discriminated stream payloads (a2a.proto `StreamResponse`). */
127
+ export type StreamResponse = {
128
+ task: Task;
129
+ message?: never;
130
+ statusUpdate?: never;
131
+ artifactUpdate?: never;
132
+ } | {
133
+ message: Message;
134
+ task?: never;
135
+ statusUpdate?: never;
136
+ artifactUpdate?: never;
137
+ } | {
138
+ statusUpdate: TaskStatusUpdateEvent;
139
+ task?: never;
140
+ message?: never;
141
+ artifactUpdate?: never;
142
+ } | {
143
+ artifactUpdate: TaskArtifactUpdateEvent;
144
+ task?: never;
145
+ message?: never;
146
+ statusUpdate?: never;
147
+ };
148
+ export interface TaskStatusUpdateEvent {
149
+ taskId: string;
150
+ contextId: string;
151
+ status: TaskStatus;
152
+ metadata?: Record<string, unknown>;
153
+ }
154
+ export interface TaskArtifactUpdateEvent {
155
+ taskId: string;
156
+ contextId: string;
157
+ artifact: Artifact;
158
+ append?: boolean;
159
+ lastChunk?: boolean;
160
+ metadata?: Record<string, unknown>;
161
+ }
162
+ /** Response payload of SendMessage (a2a.proto `SendMessageResponse`). */
163
+ export type SendMessageResponse = {
164
+ task: Task;
165
+ message?: never;
166
+ } | {
167
+ message: Message;
168
+ task?: never;
169
+ };
170
+ /** A declaration of a protocol extension (a2a.proto `AgentExtension`). */
171
+ export interface AgentExtension {
172
+ uri: string;
173
+ description?: string;
174
+ required?: boolean;
175
+ params?: Record<string, unknown>;
176
+ }
177
+ /** Optional capabilities (a2a.proto `AgentCapabilities`). */
178
+ export interface AgentCapabilities {
179
+ streaming?: boolean;
180
+ pushNotifications?: boolean;
181
+ extensions?: AgentExtension[];
182
+ extendedAgentCard?: boolean;
183
+ }
184
+ /** A distinct capability an agent can perform (a2a.proto `AgentSkill`). */
185
+ export interface AgentSkill {
186
+ id: string;
187
+ name: string;
188
+ description: string;
189
+ tags?: string[];
190
+ examples?: string[];
191
+ inputModes?: string[];
192
+ outputModes?: string[];
193
+ securityRequirements?: SecurityRequirement[];
194
+ }
195
+ /** OAuth flows supported by an agent (v1.0: code, client-credentials, device-code). */
196
+ export interface OAuthFlows {
197
+ authorizationCode?: AuthorizationCodeOAuthFlow;
198
+ clientCredentials?: ClientCredentialsOAuthFlow;
199
+ deviceCode?: DeviceCodeOAuthFlow;
200
+ }
201
+ export interface AuthorizationCodeOAuthFlow {
202
+ authorizationUrl: string;
203
+ tokenUrl: string;
204
+ scopes?: Record<string, string>;
205
+ refreshUrl?: string;
206
+ pkceRequired?: boolean;
207
+ }
208
+ export interface ClientCredentialsOAuthFlow {
209
+ tokenUrl: string;
210
+ scopes?: Record<string, string>;
211
+ }
212
+ export interface DeviceCodeOAuthFlow {
213
+ deviceAuthorizationUrl: string;
214
+ tokenUrl: string;
215
+ scopes?: Record<string, string>;
216
+ }
217
+ /** Security scheme (v1.0 supports apiKey, http, oauth2, openIdConnect, mutualTls). */
218
+ export type SecurityScheme = {
219
+ type: 'apiKey';
220
+ name: string;
221
+ in: 'header' | 'query' | 'cookie';
222
+ description?: string;
223
+ } | {
224
+ type: 'http';
225
+ scheme: 'basic' | 'bearer' | 'digest';
226
+ bearerFormat?: string;
227
+ description?: string;
228
+ } | {
229
+ type: 'oauth2';
230
+ flows: OAuthFlows;
231
+ description?: string;
232
+ } | {
233
+ type: 'openIdConnect';
234
+ openIdConnectUrl: string;
235
+ description?: string;
236
+ } | {
237
+ type: 'mutualTls';
238
+ description?: string;
239
+ };
240
+ export interface SecurityRequirement {
241
+ /** Map of scheme name → required scopes. */
242
+ schemes: Record<string, string[]>;
243
+ }
244
+ /** The provider of an agent (a2a.proto `AgentProvider`). */
245
+ export interface AgentProvider {
246
+ url: string;
247
+ organization: string;
248
+ }
249
+ /** JWS signature of an AgentCard (RFC 7515). */
250
+ export interface AgentCardSignature {
251
+ protected: string;
252
+ signature: string;
253
+ header?: Record<string, unknown>;
254
+ }
255
+ /** A target URL + transport + protocol version (a2a.proto `AgentInterface`). */
256
+ export interface AgentInterface {
257
+ url: string;
258
+ protocolBinding: 'JSONRPC' | 'GRPC' | 'HTTP+JSON' | string;
259
+ /** Opaque routing value; clients MUST echo it in requests when set. */
260
+ tenant?: string;
261
+ protocolVersion: string;
262
+ }
263
+ /** Self-describing agent manifest (a2a.proto `AgentCard`). */
264
+ export interface AgentCard {
265
+ name: string;
266
+ description: string;
267
+ version: string;
268
+ supportedInterfaces: AgentInterface[];
269
+ provider?: AgentProvider;
270
+ documentationUrl?: string;
271
+ capabilities: AgentCapabilities;
272
+ securitySchemes?: Record<string, SecurityScheme>;
273
+ securityRequirements?: SecurityRequirement[];
274
+ defaultInputModes: string[];
275
+ defaultOutputModes: string[];
276
+ skills?: AgentSkill[];
277
+ signatures?: AgentCardSignature[];
278
+ iconUrl?: string;
279
+ }
280
+ /** JSON-RPC 2.0 request/response/error envelopes used by the JSONRPC binding. */
281
+ export interface JsonRpcRequest {
282
+ jsonrpc: '2.0';
283
+ id: string | number | null;
284
+ method: string;
285
+ params?: unknown;
286
+ }
287
+ export interface JsonRpcSuccess {
288
+ jsonrpc: '2.0';
289
+ id: string | number | null;
290
+ result: unknown;
291
+ }
292
+ export interface JsonRpcError {
293
+ jsonrpc: '2.0';
294
+ id: string | number | null;
295
+ error: {
296
+ code: number;
297
+ message: string;
298
+ data?: unknown;
299
+ };
300
+ }
301
+ export type JsonRpcResponse = JsonRpcSuccess | JsonRpcError;
302
+ /** A2A JSON-RPC method names (v1.0 canonical PascalCase as in a2a.proto RPCs). */
303
+ export declare const A2A_METHODS: {
304
+ readonly sendMessage: "SendMessage";
305
+ readonly sendStreamingMessage: "SendStreamingMessage";
306
+ readonly getTask: "GetTask";
307
+ readonly listTasks: "ListTasks";
308
+ readonly cancelTask: "CancelTask";
309
+ readonly subscribeToTask: "SubscribeToTask";
310
+ readonly getExtendedAgentCard: "GetExtendedAgentCard";
311
+ };
312
+ /** Standard error codes from the A2A JSON-RPC binding. */
313
+ export declare const A2A_ERROR_CODES: {
314
+ readonly INVALID_REQUEST: -32600;
315
+ readonly METHOD_NOT_FOUND: -32601;
316
+ readonly INVALID_PARAMS: -32602;
317
+ readonly INTERNAL_ERROR: -32603;
318
+ readonly TASK_NOT_FOUND: -32001;
319
+ readonly TASK_CANCEL_NOT_ALLOWED: -32002;
320
+ readonly TASK_ALREADY_CANCELED: -32003;
321
+ readonly AGENT_CARD_NOT_FOUND: -32004;
322
+ readonly AGENT_CARD_SIGNATURE_INVALID: -32005;
323
+ readonly CONTEXT_NOT_FOUND: -32006;
324
+ readonly AUTHENTICATION_REQUIRED: -32007;
325
+ readonly PUSH_NOTIFICATION_CONFIG_NOT_FOUND: -32008;
326
+ readonly EXTENSION_NOT_SUPPORTED: -32009;
327
+ readonly UNSUPPORTED_OPERATION: -32010;
328
+ readonly VERSION_NOT_SUPPORTED: -32011;
329
+ };
330
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * dsh-a2a — inbound half: serve DSH as an A2A agent.
3
+ *
4
+ * Implements the server side of A2A v1.0 JSONRPC binding:
5
+ * - `/.well-known/agent-card.json` agent manifest
6
+ * - POST JSON-RPC endpoint handling SendMessage / GetTask / ListTasks /
7
+ * CancelTask / SendStreamingMessage (SSE) / SubscribeToTask
8
+ *
9
+ * Task execution is delegated to an injectable executor so compositions can
10
+ * wire DSH's real agent loop; plugin ships a default executor that runs
11
+ * shell commands in the workspace.
12
+ */
13
+ import type { AgentCard, AgentSkill, Message, Part, Task } from './protocol.js';
14
+ import { TaskState } from './protocol.js';
15
+ export interface ServerSkill extends AgentSkill {
16
+ }
17
+ export interface ServerOptions {
18
+ /** Public base URL (scheme + host + optional prefix) where this DSH is exposed. */
19
+ baseUrl: string;
20
+ agentName: string;
21
+ agentDescription: string;
22
+ agentVersion: string;
23
+ agentProvider?: {
24
+ url: string;
25
+ organization: string;
26
+ };
27
+ skills?: ServerSkill[];
28
+ /** Override the executor that runs an incoming task. */
29
+ execute?: TaskExecutor;
30
+ /** Extra custom headers on the AgentCard (rarely needed). */
31
+ iconUrl?: string;
32
+ defaultInputModes?: string[];
33
+ defaultOutputModes?: string[];
34
+ /** Where tasks are accepted — the JSON-RPC POST route path. */
35
+ endpointPath?: string;
36
+ /**
37
+ * Optional inbound observation hook: called for every JSON-RPC request with
38
+ * the request facts and the task ids it touched. Lets the connection
39
+ * dashboard track "who is talking to us".
40
+ */
41
+ onInbound?: (facts: InboundFacts) => void;
42
+ /** Called when a task reaches a terminal state (completed/failed/canceled). */
43
+ onTaskSettled?: (taskId: string) => void;
44
+ }
45
+ /** Observational facts about one inbound JSON-RPC request. */
46
+ export interface InboundFacts {
47
+ method: string;
48
+ headers?: Record<string, string>;
49
+ source?: string;
50
+ taskIds: string[];
51
+ streaming: boolean;
52
+ }
53
+ export interface TaskExecutor {
54
+ (input: {
55
+ message: Message;
56
+ taskId: string;
57
+ contextId: string;
58
+ signal: AbortSignal;
59
+ }): Promise<Message>;
60
+ }
61
+ export interface InboundHandle {
62
+ card: AgentCard;
63
+ endpointPath: string;
64
+ taskStore: TaskStore;
65
+ dispose: () => void;
66
+ }
67
+ /** In-memory task store with the full A2A Task lifecycle. */
68
+ export declare class TaskStore {
69
+ private tasks;
70
+ private messages;
71
+ create(message: Message): Task;
72
+ get(id: string): Task | undefined;
73
+ list(): Task[];
74
+ setStatus(taskId: string, state: TaskState, message?: Message): Task;
75
+ addArtifact(taskId: string, artifact: {
76
+ artifactId: string;
77
+ parts: Part[];
78
+ name?: string;
79
+ append?: boolean;
80
+ lastChunk?: boolean;
81
+ }): Task;
82
+ getMessage(id: string): Message | undefined;
83
+ }
84
+ /** A2A JSON-RPC server handler over a raw HTTP request/response pair. */
85
+ export declare class A2AServer {
86
+ readonly options: ServerOptions;
87
+ readonly store: TaskStore;
88
+ readonly card: AgentCard;
89
+ readonly endpointPath: string;
90
+ private execute;
91
+ private listeners;
92
+ private baseUrl;
93
+ constructor(options: ServerOptions, store?: TaskStore);
94
+ /**
95
+ * Update the base URL advertised in the AgentCard after the real listen
96
+ * address is known (e.g. ephemeral port). Mutates `card` in place.
97
+ */
98
+ setBaseUrl(baseUrl: string): void;
99
+ private buildCard;
100
+ private emit;
101
+ /** Route an inbound HTTP request; returns true when handled. */
102
+ handle(req: {
103
+ method?: string;
104
+ url?: string;
105
+ headers?: {
106
+ 'content-type'?: string;
107
+ };
108
+ socket?: {
109
+ remoteAddress?: string;
110
+ remotePort?: number;
111
+ };
112
+ }, body: string): Promise<{
113
+ status: number;
114
+ contentType: string;
115
+ body: string;
116
+ }>;
117
+ handleStream(req: {
118
+ method?: string;
119
+ url?: string;
120
+ headers?: Record<string, string>;
121
+ socket?: {
122
+ remoteAddress?: string;
123
+ remotePort?: number;
124
+ };
125
+ }, body: string, onEvent: (frame: string) => void): Promise<{
126
+ status: number;
127
+ }>;
128
+ private ensureTask;
129
+ private waitTerminal;
130
+ /** Execute a task in the background, streaming status/artifact updates. */
131
+ private runTask;
132
+ private dispatch;
133
+ private jsonRpcError;
134
+ }
135
+ export declare const defaultSkills: ServerSkill[];
136
+ /**
137
+ * Default executor: run the incoming prompt through the system shell and
138
+ * return the captured stdout/stderr as the task artifact. Honors the
139
+ * AbortSignal (task cancellation / shutdown) by killing the child process.
140
+ */
141
+ export declare const defaultExecutor: TaskExecutor;
142
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "@ryubyte/dsh-a2a",
3
+ "description": "Agent2Agent (A2A) protocol v1.0 plugin for DeepSeek Harness (DSH): outbound client (remote AgentCard skills as ctx.tools), inbound server (A2A JSON-RPC + AgentCard endpoint), and a settings dashboard of live A2A connections",
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/types/index.d.ts",
11
+ "default": "./lib/index.js"
12
+ },
13
+ "./client": {
14
+ "types": "./lib/types/client/index.d.ts",
15
+ "default": "./lib/client.js"
16
+ },
17
+ "./types": {
18
+ "types": "./lib/types/protocol.d.ts",
19
+ "default": "./lib/index.js"
20
+ },
21
+ "./src/*": "./src/*",
22
+ "./package.json": "./package.json"
23
+ },
24
+ "files": [
25
+ "lib/**/*.js",
26
+ "lib/**/*.js.map",
27
+ "lib/**/*.d.ts",
28
+ "lib/**/*.d.ts.map",
29
+ "src",
30
+ "cordis.patch.yml",
31
+ "README.md",
32
+ "README.zh-CN.md"
33
+ ],
34
+ "license": "MIT",
35
+ "scripts": {
36
+ "build": "tsc -p tsconfig.build.json && tsdown && node scripts/build-client.mjs",
37
+ "bundle": "tsdown && node scripts/build-client.mjs",
38
+ "typecheck": "tsc --noEmit",
39
+ "test": "npm run build && node --import tsx --test \"test/**/*.test.ts\" && node test/client-bundle-smoke.mjs",
40
+ "shots": "node scripts/capture-shots.mjs",
41
+ "prepublishOnly": "pnpm build"
42
+ },
43
+ "dependencies": {
44
+ "typescript": "^5.5.0"
45
+ },
46
+ "peerDependencies": {
47
+ "@deepseek-ai/cordis": "^4.0.1",
48
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
49
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
50
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
51
+ "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
52
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
53
+ "react": "^19.2.0",
54
+ "react-dom": "^19.2.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^22.0.0",
58
+ "@types/react": "^19.2.18",
59
+ "@types/react-dom": "^19.2.4",
60
+ "esbuild": "^0.28.2",
61
+ "react": "^19.2.8",
62
+ "react-dom": "^19.2.8",
63
+ "tsdown": "^0.22.14",
64
+ "tsx": "^4.19.0"
65
+ },
66
+ "dsh": {
67
+ "client": {
68
+ "inject": [
69
+ "@deepseek-ai/dsh-client-runtime",
70
+ "@deepseek-ai/dsh-client-ui-slots",
71
+ "@deepseek-ai/dsh-client-ui-settings"
72
+ ],
73
+ "platform": "web"
74
+ },
75
+ "bundle": {
76
+ "patch": "./cordis.patch.yml"
77
+ }
78
+ },
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "git+https://github.com/ryubyte/dsh-a2a.git"
82
+ },
83
+ "engines": {
84
+ "node": "^22.19.0 || >=24.0.0"
85
+ },
86
+ "publishConfig": {
87
+ "access": "public"
88
+ }
89
+ }