dsh-a2a-server 0.1.1 → 0.2.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 (59) hide show
  1. package/README.md +57 -33
  2. package/README.zh-CN.md +50 -30
  3. package/lib/config.d.ts +15 -7
  4. package/lib/config.d.ts.map +1 -1
  5. package/lib/config.js +6 -1
  6. package/lib/config.js.map +1 -1
  7. package/lib/index.d.ts +9 -4
  8. package/lib/index.d.ts.map +1 -1
  9. package/lib/index.js +53 -20
  10. package/lib/index.js.map +1 -1
  11. package/lib/projection.d.ts +21 -19
  12. package/lib/projection.d.ts.map +1 -1
  13. package/lib/projection.js +15 -7
  14. package/lib/projection.js.map +1 -1
  15. package/lib/protocol/card.d.ts +25 -7
  16. package/lib/protocol/card.d.ts.map +1 -1
  17. package/lib/protocol/card.js +35 -14
  18. package/lib/protocol/card.js.map +1 -1
  19. package/lib/protocol/index.d.ts +10 -10
  20. package/lib/protocol/index.d.ts.map +1 -1
  21. package/lib/protocol/index.js +8 -8
  22. package/lib/protocol/index.js.map +1 -1
  23. package/lib/protocol/jsonrpc.d.ts +54 -6
  24. package/lib/protocol/jsonrpc.d.ts.map +1 -1
  25. package/lib/protocol/jsonrpc.js +70 -8
  26. package/lib/protocol/jsonrpc.js.map +1 -1
  27. package/lib/protocol/parse.d.ts +79 -0
  28. package/lib/protocol/parse.d.ts.map +1 -0
  29. package/lib/protocol/parse.js +249 -0
  30. package/lib/protocol/parse.js.map +1 -0
  31. package/lib/protocol/sse.d.ts +6 -3
  32. package/lib/protocol/sse.d.ts.map +1 -1
  33. package/lib/protocol/sse.js +4 -2
  34. package/lib/protocol/sse.js.map +1 -1
  35. package/lib/protocol/wire.d.ts +165 -54
  36. package/lib/protocol/wire.d.ts.map +1 -1
  37. package/lib/protocol/wire.js +54 -9
  38. package/lib/protocol/wire.js.map +1 -1
  39. package/lib/router.d.ts +10 -1
  40. package/lib/router.d.ts.map +1 -1
  41. package/lib/router.js +247 -107
  42. package/lib/router.js.map +1 -1
  43. package/lib/security.d.ts +33 -1
  44. package/lib/security.d.ts.map +1 -1
  45. package/lib/security.js +44 -2
  46. package/lib/security.js.map +1 -1
  47. package/lib/tasks.js +5 -5
  48. package/lib/tasks.js.map +1 -1
  49. package/lib/types.d.ts +3 -3
  50. package/lib/types.js +1 -1
  51. package/lib/version.d.ts +20 -0
  52. package/lib/version.d.ts.map +1 -0
  53. package/lib/version.js +20 -0
  54. package/lib/version.js.map +1 -0
  55. package/package.json +1 -1
  56. package/lib/protocol/normalize.d.ts +0 -72
  57. package/lib/protocol/normalize.d.ts.map +0 -1
  58. package/lib/protocol/normalize.js +0 -278
  59. package/lib/protocol/normalize.js.map +0 -1
package/README.md CHANGED
@@ -15,14 +15,14 @@
15
15
  <p align="center">
16
16
  <a href="https://www.npmjs.com/package/dsh-a2a-server"><img src="https://img.shields.io/npm/v/dsh-a2a-server?style=flat&label=npm&color=CB3837" alt="npm version"></a>
17
17
  <a href="https://github.com/huangjuhua-aigc/dsh-a2a/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat" alt="MIT License"></a>
18
- <img src="https://img.shields.io/badge/A2A-v0.3.0%20JSON--RPC-4D6BFE?style=flat" alt="A2A v0.3.0 JSON-RPC binding">
18
+ <img src="https://img.shields.io/badge/A2A-v1.0%20JSON--RPC-4D6BFE?style=flat" alt="A2A v1.0 JSON-RPC binding">
19
19
  <img src="https://img.shields.io/badge/DSH-0.1.0--rc.6-4493F8?style=flat" alt="Built against DSH 0.1.0-rc.6">
20
- <img src="https://img.shields.io/badge/tests-129-2EA44F?style=flat" alt="129 tests">
20
+ <img src="https://img.shields.io/badge/tests-167-2EA44F?style=flat" alt="167 tests">
21
21
  </p>
22
22
 
23
23
  `dsh-a2a-server` makes a [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
24
24
  agent reachable over the [A2A (Agent2Agent)](https://a2a-protocol.org) protocol. It
25
- serves an Agent Card at a well-known URI and implements the **v0.3.0 JSON-RPC
25
+ serves an Agent Card at a well-known URI and implements the **v1.0 JSON-RPC
26
26
  binding**, so any compliant peer that knows the deployment's URL can discover the
27
27
  agent and submit tasks to it.
28
28
 
@@ -50,7 +50,7 @@ dsh plugin --profile web add ./path/to/dsh-a2a-server
50
50
  | `ctx.agents` | `dsh-base` |
51
51
  | `ctx.credentials` | `dsh-base` |
52
52
  | `ctx.webServer` | **`dsh-web-app`** |
53
- | `ctx.sessionProjections` (optional) | composition; enables `tasks/get` after settlement |
53
+ | `ctx.sessionProjections` (optional) | composition; enables `GetTask` after settlement |
54
54
 
55
55
  The plugin stays PENDING until the three required services exist. `ctx.webServer`
56
56
  ships in `dsh-web-app` rather than `dsh-base`, so a `headless` profile needs
@@ -93,9 +93,9 @@ curl -s http://127.0.0.1:9922/.well-known/agent-card.json
93
93
  curl -s http://127.0.0.1:9922/a2a \
94
94
  -H "authorization: Bearer demo123" \
95
95
  -H 'content-type: application/json' \
96
- -d '{"jsonrpc":"2.0","id":1,"method":"message/send","params":{
97
- "message":{"kind":"message","messageId":"m1","role":"user",
98
- "parts":[{"kind":"text","text":"hello"}]}}}'
96
+ -H 'a2a-version: 1.0' -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{
97
+ "message":{"messageId":"m1","role":"ROLE_USER",
98
+ "parts":[{"text":"hello"}]}}}'
99
99
  ```
100
100
 
101
101
  | Variable | Default | Meaning |
@@ -106,7 +106,7 @@ curl -s http://127.0.0.1:9922/a2a \
106
106
  | `A2A_WORKSPACE_ROOT` | temp dir | Parent of the per-peer working directories |
107
107
  | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | Model id requested from the adapter |
108
108
 
109
- A one-shot probe runs 48 checks against a live server and exits non-zero on any
109
+ A one-shot probe runs 67 checks against a live server and exits non-zero on any
110
110
  mismatch:
111
111
 
112
112
  ```sh
@@ -122,21 +122,42 @@ node example/probe.mjs http://127.0.0.1:9922 demo123
122
122
  | `/.well-known/agent.json` | GET | Public by default |
123
123
  | `{basePath}` (default `/a2a`) | POST | Bearer required |
124
124
 
125
- | JSON-RPC method | v1.0 alias | Status |
125
+ | JSON-RPC method | Status |
126
+ | --- | --- |
127
+ | `SendMessage` | Waiting negotiated per request |
128
+ | `SendStreamingMessage` | SSE |
129
+ | `GetTask` | Idempotent; answers after settlement |
130
+ | `ListTasks` | Cursor-paginated, filterable, resident contexts only |
131
+ | `CancelTask` | Cancels the running turn |
132
+ | `SubscribeToTask` | Live stream; `-32004` on a terminal task |
133
+ | `GetExtendedAgentCard` | Extra skills for an authenticated peer; `-32007` when unconfigured |
134
+ | `*TaskPushNotificationConfig` | `-32003` |
135
+
136
+ **Only A2A v1.0 is served.** The v0.3 method names, `kind` discriminators,
137
+ lowercase enums, and nested `file` parts are gone rather than aliased: every
138
+ reply this server writes is v1.0 JSON, which a v0.3 client could not read, so
139
+ answering a v0.3 request would fail further from its cause than refusing it. A
140
+ retired method answers `-32601` naming its replacement, and an explicit
141
+ `A2A-Version: 0.3` answers `-32009` (`VersionNotSupportedError`). A request with
142
+ no `A2A-Version` header is served as 1.0 — the only version this interface
143
+ declares on its card.
144
+
145
+ What that means concretely, against v0.3:
146
+
147
+ | Concern | v0.3 | v1.0 as served here |
126
148
  | --- | --- | --- |
127
- | `message/send` | `SendMessage` | Blocking negotiated per request |
128
- | `message/stream` | `SendStreamingMessage` | SSE |
129
- | `tasks/get` | `GetTask` | Idempotent; answers after settlement |
130
- | `tasks/cancel` | `CancelTask` | Cancels the running turn |
131
- | `tasks/resubscribe` | `SubscribeToTask` | Live stream, or one terminal frame |
132
- | `tasks/pushNotificationConfig/*` | `*TaskPushNotificationConfig` | `-32003` |
133
- | `tasks/list` | `ListTasks` | `-32601` |
134
- | `agent/getAuthenticatedExtendedCard` | `GetExtendedAgentCard` | `-32601` |
135
-
136
- Both dialects are accepted. v0.3 (`message/send`, `"working"`, `kind`-tagged
137
- parts) is the mainline; the v1.0 spellings (`SendMessage`, `TASK_STATE_WORKING`,
138
- member-presence parts) are normalized inbound and rendered back in whichever
139
- dialect the request used.
149
+ | Task reference | `params.taskId` | `params.id` |
150
+ | `SendMessage` result | bare `Task` | `{ "task": … }` |
151
+ | Task state | `"working"` | `"TASK_STATE_WORKING"` |
152
+ | Message role | `"user"` | `"ROLE_USER"` |
153
+ | Part | `{"kind":"text","text":…}` | `{"text":…}`; file parts flatten to `url`/`raw`/`filename`/`mediaType` |
154
+ | Stream frame | `{"kind":"status-update",…,"final":true}` | `{"statusUpdate":{…}}`; the stream's close is the terminal signal |
155
+ | Stream opening | a non-final status update | the `Task` object itself |
156
+ | Wait control | `configuration.blocking` | `configuration.returnImmediately` (inverted; blocking is the default) |
157
+ | Card endpoint | `url` + `preferredTransport` | `supportedInterfaces[]`, each carrying its own `protocolVersion` |
158
+ | Card auth | `securitySchemes` + `security` | schemes wrapped in `httpAuthSecurityScheme`; `securityRequirements` |
159
+ | Extended card | `supportsAuthenticatedExtendedCard` | `capabilities.extendedAgentCard` |
160
+ | A2A error detail | none | `error.data[]` carrying a `google.rpc.ErrorInfo` with `reason` and `domain` |
140
161
 
141
162
  Inbound messages may carry text, file, and data parts. File and data parts are
142
163
  rendered into the model's context as bracketed references. Replies are text.
@@ -153,7 +174,6 @@ another peer answers exactly as an absent one.
153
174
  config:
154
175
  basePath: /a2a
155
176
  publicUrl: https://agents.example.com/a2a # advertised on the card
156
- protocolVersion: 0.3.0
157
177
  provider: deepseek-official
158
178
  model: deepseek-v4-flash
159
179
 
@@ -166,6 +186,11 @@ another peer answers exactly as an absent one.
166
186
  name: general
167
187
  description: General-purpose task execution.
168
188
  tags: [coding, research]
189
+ extendedSkills: # authenticated peers only
190
+ - id: internal
191
+ name: internal diagnostics
192
+ description: Reports harness internals.
193
+ tags: [internal]
169
194
  provider:
170
195
  organization: Example Inc.
171
196
  url: https://example.com
@@ -196,15 +221,15 @@ another peer answers exactly as an absent one.
196
221
  | --- | --- | --- |
197
222
  | `basePath` | `/a2a` | JSON-RPC route |
198
223
  | `publicUrl` | derived from `Host` | Routable URL published on the card |
199
- | `protocolVersion` | `0.3.0` | Version advertised on the card |
200
224
  | `provider` · `model` | — | Model route for every agent this server creates |
201
225
  | `card.public` | `true` | Serve the card without a credential |
202
226
  | `card.skills` | `[]` | Declared skills; falls back to one `general` entry |
227
+ | `card.extendedSkills` | `[]` | Skills revealed only through `GetExtendedAgentCard` |
203
228
  | `peers` | `{}` | Identity → credential **reference name** |
204
229
  | `trustedPeers` | all authenticated | Allow-list of identities that may run tasks |
205
230
  | `rateLimitPerMinute` | `60` | Sliding window per identity |
206
231
  | `maxContextTurns` | `5` | Messages accepted per context before `rejected` |
207
- | `sendMode` | `block` | Default when the client states no preference |
232
+ | `sendMode` | `block` | Default when the client sends no `returnImmediately` |
208
233
  | `blockTimeoutMs` | `60000` | After which a blocking request is declined |
209
234
  | `contextIdleTtlMs` | `1800000` | Idle time before a context's agent is released |
210
235
  | `maxResidentContexts` | `64` | Ceiling on resident contexts |
@@ -257,8 +282,7 @@ single repository; under it, files written by one peer are readable by another.
257
282
  - JSONRPC binding only. gRPC and HTTP+JSON are not served, and the card says so.
258
283
  - Push notifications are not implemented. `push.enabled` selects which error the
259
284
  push methods return; the card advertises `pushNotifications: false`.
260
- - No extended Agent Card, `stateTransitionHistory`, protocol extensions, or card
261
- signatures.
285
+ - No `stateTransitionHistory`, protocol extensions, or card signatures.
262
286
  - Streaming emits committed assistant messages. Per-chunk streaming is not
263
287
  implemented.
264
288
  - No orphan-task watchdog: a task wedged non-terminal stays that way.
@@ -277,8 +301,8 @@ single repository; under it, files written by one peer are readable by another.
277
301
  ```
278
302
  src/
279
303
  ├── protocol/ dependency-free library: no Cordis, no HTTP, no harness
280
- │ ├── wire.ts the A2A vocabulary, normalized to v0.3 spelling
281
- │ ├── normalize.ts v0.3 <-> v1.0 dialect translation, both directions
304
+ │ ├── wire.ts the A2A v1.0 vocabulary: one shape, no translation
305
+ │ ├── parse.ts inbound parsing and the method table
282
306
  │ ├── jsonrpc.ts framing and the A2A error codes
283
307
  │ ├── card.ts Agent Card construction
284
308
  │ └── sse.ts SSE frame encoding
@@ -310,9 +334,9 @@ maps to an Activation evicted when idle, leaving the durable Session behind.
310
334
  ```sh
311
335
  pnpm install
312
336
  pnpm typecheck
313
- pnpm test # 129 tests across 9 files
337
+ pnpm test # 167 tests across 10 files
314
338
  pnpm serve # a listening server
315
- pnpm probe # 48 checks against a running server
339
+ pnpm probe # 67 checks against a running server
316
340
  pnpm build # emit lib/
317
341
  ```
318
342
 
@@ -327,8 +351,8 @@ Built against [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deep
327
351
  The official project supplies the agent runtime, the plugin system, and the
328
352
  capability seams this plugin consumes. This project supplies:
329
353
 
330
- - The A2A v0.3.0 JSON-RPC binding, served inbound
331
- - Agent Card construction and dialect normalization
354
+ - The A2A v1.0 JSON-RPC binding, served inbound
355
+ - Agent Card construction and inbound request parsing
332
356
  - Mapping between A2A tasks and harness turns
333
357
  - Per-peer authentication, isolation, and workspace policy
334
358
 
package/README.zh-CN.md CHANGED
@@ -15,14 +15,14 @@
15
15
  <p align="center">
16
16
  <a href="https://www.npmjs.com/package/dsh-a2a-server"><img src="https://img.shields.io/npm/v/dsh-a2a-server?style=flat&label=npm&color=CB3837" alt="npm 版本"></a>
17
17
  <a href="https://github.com/huangjuhua-aigc/dsh-a2a/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-2EA44F?style=flat" alt="MIT License"></a>
18
- <img src="https://img.shields.io/badge/A2A-v0.3.0%20JSON--RPC-4D6BFE?style=flat" alt="A2A v0.3.0 JSON-RPC 绑定">
18
+ <img src="https://img.shields.io/badge/A2A-v1.0%20JSON--RPC-4D6BFE?style=flat" alt="A2A v1.0 JSON-RPC 绑定">
19
19
  <img src="https://img.shields.io/badge/DSH-0.1.0--rc.6-4493F8?style=flat" alt="基于 DSH 0.1.0-rc.6 构建">
20
- <img src="https://img.shields.io/badge/tests-129-2EA44F?style=flat" alt="129 项测试">
20
+ <img src="https://img.shields.io/badge/tests-167-2EA44F?style=flat" alt="167 项测试">
21
21
  </p>
22
22
 
23
23
  `dsh-a2a-server` 让 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
24
24
  上的 agent 可以通过 [A2A(Agent2Agent)](https://a2a-protocol.org)协议被访问。它在
25
- well-known 路径发布 Agent Card,并实现 **v0.3.0 JSON-RPC 绑定**——任何知道本部署
25
+ well-known 路径发布 Agent Card,并实现 **v1.0 JSON-RPC 绑定**——任何知道本部署
26
26
  URL 的合规 peer 都能发现这个 agent 并向它提交任务。
27
27
 
28
28
  本插件**只做入站**:从不主动连接其他 agent,没有 client、没有 peer 目录、没有 A2A
@@ -48,7 +48,7 @@ dsh plugin --profile web add ./path/to/dsh-a2a-server
48
48
  | `ctx.agents` | `dsh-base` |
49
49
  | `ctx.credentials` | `dsh-base` |
50
50
  | `ctx.webServer` | **`dsh-web-app`** |
51
- | `ctx.sessionProjections`(可选) | 组合层;启用后 `tasks/get` 在任务结算后仍可应答 |
51
+ | `ctx.sessionProjections`(可选) | 组合层;启用后 `GetTask` 在任务结算后仍可应答 |
52
52
 
53
53
  三个必需服务齐备之前,插件保持 PENDING。`ctx.webServer` 由 `dsh-web-app` 提供而不在
54
54
  `dsh-base` 中,因此 `headless` profile 需要先挂载 `@deepseek-ai/dsh-host-webserver`。
@@ -88,9 +88,10 @@ curl -s http://127.0.0.1:9922/.well-known/agent-card.json
88
88
  curl -s http://127.0.0.1:9922/a2a \
89
89
  -H "authorization: Bearer demo123" \
90
90
  -H 'content-type: application/json' \
91
- -d '{"jsonrpc":"2.0","id":1,"method":"message/send","params":{
92
- "message":{"kind":"message","messageId":"m1","role":"user",
93
- "parts":[{"kind":"text","text":"hello"}]}}}'
91
+ -H 'a2a-version: 1.0' \
92
+ -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{
93
+ "message":{"messageId":"m1","role":"ROLE_USER",
94
+ "parts":[{"text":"hello"}]}}}'
94
95
  ```
95
96
 
96
97
  | 变量 | 默认值 | 含义 |
@@ -101,7 +102,7 @@ curl -s http://127.0.0.1:9922/a2a \
101
102
  | `A2A_WORKSPACE_ROOT` | 临时目录 | per-peer 工作目录的父目录 |
102
103
  | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | 向适配器请求的模型 id |
103
104
 
104
- 一次性探针会对运行中的服务执行 48 项检查,任何一项不符即以非零码退出:
105
+ 一次性探针会对运行中的服务执行 67 项检查,任何一项不符即以非零码退出:
105
106
 
106
107
  ```sh
107
108
  pnpm probe # 默认 :9922 / demo123
@@ -116,20 +117,40 @@ node example/probe.mjs http://127.0.0.1:9922 demo123
116
117
  | `/.well-known/agent.json` | GET | 默认公开 |
117
118
  | `{basePath}`(默认 `/a2a`) | POST | 必须携带 Bearer |
118
119
 
119
- | JSON-RPC 方法 | v1.0 别名 | 状态 |
120
+ | JSON-RPC 方法 | 状态 |
121
+ | --- | --- |
122
+ | `SendMessage` | 是否等待逐请求协商 |
123
+ | `SendStreamingMessage` | SSE |
124
+ | `GetTask` | 幂等;结算后仍可应答 |
125
+ | `ListTasks` | 游标分页、可过滤;仅覆盖常驻的 context |
126
+ | `CancelTask` | 取消正在执行的 turn |
127
+ | `SubscribeToTask` | 续订活任务;终态任务返回 `-32004` |
128
+ | `GetExtendedAgentCard` | 已认证 peer 可见的额外 skill;未配置时 `-32007` |
129
+ | `*TaskPushNotificationConfig` | `-32003` |
130
+
131
+ **只提供 A2A v1.0。** v0.3 的方法名、`kind` 判别字段、小写枚举、嵌套 `file`
132
+ part 是被**删除**而不是做了别名:本服务写出的每一个回包都是 v1.0 JSON,v0.3
133
+ 客户端本就读不懂,所以“应答一个 v0.3 请求”只会让故障离成因更远。已退役的方法回
134
+ `-32601` 并直接告知新名字;显式的 `A2A-Version: 0.3` 回 `-32009`
135
+ (`VersionNotSupportedError`)。不带 `A2A-Version` 头的请求按 1.0 处理——这是本接口
136
+ 在 Card 上声明的唯一版本。
137
+
138
+ 具体到线上,与 v0.3 的差异:
139
+
140
+ | 关注点 | v0.3 | 本服务的 v1.0 |
120
141
  | --- | --- | --- |
121
- | `message/send` | `SendMessage` | 是否阻塞逐请求协商 |
122
- | `message/stream` | `SendStreamingMessage` | SSE |
123
- | `tasks/get` | `GetTask` | 幂等;结算后仍可应答 |
124
- | `tasks/cancel` | `CancelTask` | 取消正在执行的 turn |
125
- | `tasks/resubscribe` | `SubscribeToTask` | 续订活任务,或给一帧终态 |
126
- | `tasks/pushNotificationConfig/*` | `*TaskPushNotificationConfig` | `-32003` |
127
- | `tasks/list` | `ListTasks` | `-32601` |
128
- | `agent/getAuthenticatedExtendedCard` | `GetExtendedAgentCard` | `-32601` |
129
-
130
- 两种方言都接受。v0.3(`message/send`、`"working"`、带 `kind` 的 part)是主线;v1.0
131
- 拼写(`SendMessage`、`TASK_STATE_WORKING`、成员存在式 part)在入站时被归一化,并按请求
132
- 所用的方言渲染回去。
142
+ | 任务引用 | `params.taskId` | `params.id` |
143
+ | `SendMessage` 结果 | 裸 `Task` | `{ "task": … }` |
144
+ | 任务状态 | `"working"` | `"TASK_STATE_WORKING"` |
145
+ | 消息角色 | `"user"` | `"ROLE_USER"` |
146
+ | Part | `{"kind":"text","text":…}` | `{"text":…}`;文件 part 展平为 `url`/`raw`/`filename`/`mediaType` |
147
+ | 流帧 | `{"kind":"status-update",…,"final":true}` | `{"statusUpdate":{…}}`;流关闭即终态信号 |
148
+ | 流首帧 | 一帧非终态 status update | `Task` 对象本身 |
149
+ | 等待控制 | `configuration.blocking` | `configuration.returnImmediately`(语义反转,默认等待) |
150
+ | Card 端点 | `url` + `preferredTransport` | `supportedInterfaces[]`,每条自带 `protocolVersion` |
151
+ | Card 鉴权 | `securitySchemes` + `security` | scheme 包在 `httpAuthSecurityScheme` 里;改用 `securityRequirements` |
152
+ | 扩展 Card | `supportsAuthenticatedExtendedCard` | `capabilities.extendedAgentCard` |
153
+ | A2A 错误细节 | 无 | `error.data[]` 携带 `google.rpc.ErrorInfo`,含 `reason` 与 `domain` |
133
154
 
134
155
  入站消息可携带 text、file、data 三类 part。file 与 data 会以方括号引用的形式进入模型
135
156
  上下文。回复为纯文本。
@@ -145,7 +166,6 @@ node example/probe.mjs http://127.0.0.1:9922 demo123
145
166
  config:
146
167
  basePath: /a2a
147
168
  publicUrl: https://agents.example.com/a2a # 写入 Card 的对外地址
148
- protocolVersion: 0.3.0
149
169
  provider: deepseek-official
150
170
  model: deepseek-v4-flash
151
171
 
@@ -188,10 +208,10 @@ node example/probe.mjs http://127.0.0.1:9922 demo123
188
208
  | --- | --- | --- |
189
209
  | `basePath` | `/a2a` | JSON-RPC 路由 |
190
210
  | `publicUrl` | 由 `Host` 推导 | 写入 Card 的可路由地址 |
191
- | `protocolVersion` | `0.3.0` | Card 上声明的协议版本 |
192
211
  | `provider` · `model` | — | 本服务创建的每个 agent 使用的模型路由 |
193
212
  | `card.public` | `true` | 无需凭据即可获取 Card |
194
213
  | `card.skills` | `[]` | 声明的 skills;为空时回退到一条 `general` |
214
+ | `card.extendedSkills` | `[]` | 只对已认证 peer 经 `GetExtendedAgentCard` 公开的 skills |
195
215
  | `peers` | `{}` | 身份 → 凭据**引用名** |
196
216
  | `trustedPeers` | 全部已认证身份 | 允许执行任务的身份白名单 |
197
217
  | `rateLimitPerMinute` | `60` | 按身份的滑动窗口 |
@@ -246,7 +266,7 @@ A2A_PEER_ALICE: <32-byte-hex-from-openssl-rand>
246
266
  - 只提供 JSONRPC 绑定。不提供 gRPC 与 HTTP+JSON,Card 上如实声明。
247
267
  - 未实现推送通知。`push.enabled` 仅决定推送方法返回哪个错误码,Card 上声明
248
268
  `pushNotifications: false`。
249
- - 不支持扩展 Agent Card、`stateTransitionHistory`、协议扩展与 Card 签名。
269
+ - 不支持 `stateTransitionHistory`、协议扩展与 Card 签名。
250
270
  - 流式只推送已提交的 assistant 消息,未实现逐 chunk 推送。
251
271
  - 无孤儿任务看门狗:卡在非终态的任务会一直保持该状态。
252
272
  - 未实现跨会话工具拒绝;隔离依赖 `workspaceMode`。
@@ -262,8 +282,8 @@ A2A_PEER_ALICE: <32-byte-hex-from-openssl-rand>
262
282
  ```
263
283
  src/
264
284
  ├── protocol/ 零依赖库:不碰 Cordis、不碰 HTTP、不碰 harness
265
- │ ├── wire.ts A2A 词汇表,统一归一到 v0.3 拼写
266
- │ ├── normalize.ts v0.3 <-> v1.0 方言双向翻译
285
+ │ ├── wire.ts A2A v1.0 词汇表:只有一种形状,不需要翻译
286
+ │ ├── parse.ts 入站解析与方法表
267
287
  │ ├── jsonrpc.ts 信封框架与 A2A 错误码
268
288
  │ ├── card.ts Agent Card 构造
269
289
  │ └── sse.ts SSE 帧编码
@@ -293,9 +313,9 @@ src/
293
313
  ```sh
294
314
  pnpm install
295
315
  pnpm typecheck
296
- pnpm test # 9 个文件共 129 项测试
316
+ pnpm test # 10 个文件共 167 项测试
297
317
  pnpm serve # 启动监听服务
298
- pnpm probe # 对运行中的服务执行 48 项检查
318
+ pnpm probe # 对运行中的服务执行 67 项检查
299
319
  pnpm build # 产出 lib/
300
320
  ```
301
321
 
@@ -308,8 +328,8 @@ pnpm build # 产出 lib/
308
328
 
309
329
  官方项目提供 agent 运行时、插件系统,以及本插件所消费的各个能力接缝。本项目提供:
310
330
 
311
- - 入站的 A2A v0.3.0 JSON-RPC 绑定
312
- - Agent Card 构造与方言归一化
331
+ - 入站的 A2A v1.0 JSON-RPC 绑定
332
+ - Agent Card 构造与入站请求解析
313
333
  - A2A task 与 harness turn 之间的映射
314
334
  - 按 peer 的认证、隔离与工作目录策略
315
335
 
package/lib/config.d.ts CHANGED
@@ -37,18 +37,27 @@ export interface IsolationConfig {
37
37
  /** Per-peer cwd overrides, e.g. pointing one trusted peer at a real repo. */
38
38
  peerWorkspaces: Record<string, string>;
39
39
  }
40
+ /** One declared skill, as it appears on the Agent Card. */
41
+ export interface SkillConfig {
42
+ id: string;
43
+ name: string;
44
+ description: string;
45
+ tags: string[];
46
+ }
40
47
  /** Agent Card content and exposure. */
41
48
  export interface CardConfig {
42
49
  name: string;
43
50
  description: string;
44
51
  /** Serve the card without a credential, as discovery expects. */
45
52
  public: boolean;
46
- skills: {
47
- id: string;
48
- name: string;
49
- description: string;
50
- tags: string[];
51
- }[];
53
+ skills: SkillConfig[];
54
+ /**
55
+ * Skills revealed only through `GetExtendedAgentCard`, after a peer has
56
+ * authenticated. Declaring any turns on `capabilities.extendedAgentCard`;
57
+ * leaving this empty means the deployment has no extended card, and the
58
+ * method answers with the spec's own ExtendedAgentCardNotConfiguredError.
59
+ */
60
+ extendedSkills: SkillConfig[];
52
61
  provider?: {
53
62
  organization: string;
54
63
  url: string;
@@ -77,7 +86,6 @@ export interface PushConfig {
77
86
  export interface A2AServerConfig {
78
87
  basePath: string;
79
88
  publicUrl?: string;
80
- protocolVersion: string;
81
89
  /**
82
90
  * Provider route for every agent this server creates. Optional so another
83
91
  * `agent/request` listener may supply the target instead; a runnable
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAQ7C,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,aAAa,EAAE,UAAU,GAAG,QAAQ,CAAA;IACpC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IAC3E,QAAQ,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACjD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,OAAO,GAAG,WAAW,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,SAAS,EAAE,eAAe,CAAA;IAC1B,IAAI,EAAE,UAAU,CAAA;CACjB;AAcD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,eAAe,CA+CzC,CAAA;AAEF,oEAAoE;AACpE,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA4BlE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAQ7C,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,aAAa,EAAE,UAAU,GAAG,QAAQ,CAAA;IACpC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB;;;;;OAKG;IACH,cAAc,EAAE,WAAW,EAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACjD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,OAAO,GAAG,WAAW,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,SAAS,EAAE,eAAe,CAAA;IAC1B,IAAI,EAAE,UAAU,CAAA;CACjB;AAcD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,eAAe,CAoDzC,CAAA;AAEF,oEAAoE;AACpE,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA4BlE"}
package/lib/config.js CHANGED
@@ -28,7 +28,6 @@ const PEER_NAME = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
28
28
  export const Config = Schema.object({
29
29
  basePath: Schema.string().default('/a2a'),
30
30
  publicUrl: Schema.string(),
31
- protocolVersion: Schema.string().default('0.3.0'),
32
31
  provider: Schema.string(),
33
32
  model: Schema.string(),
34
33
  card: Schema.object({
@@ -41,6 +40,12 @@ export const Config = Schema.object({
41
40
  description: Schema.string().default(''),
42
41
  tags: Schema.array(Schema.string()).default([]),
43
42
  })).default([]),
43
+ extendedSkills: Schema.array(Schema.object({
44
+ id: Schema.string().required(),
45
+ name: Schema.string().required(),
46
+ description: Schema.string().default(''),
47
+ tags: Schema.array(Schema.string()).default([]),
48
+ })).default([]),
44
49
  // Both members default rather than being required: schemastery instantiates
45
50
  // a nested object even when the deployment omits it, so a `required()` here
46
51
  // would make an absent `provider` a validation failure.
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,0EAA0E;AAC1E,MAAM,cAAc,GAAG,0BAA0B,CAAA;AAEjD,6EAA6E;AAC7E,MAAM,SAAS,GAAG,6BAA6B,CAAA;AAuF/C;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;IAEtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC;QACpF,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YACjC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACf,4EAA4E;QAC5E,4EAA4E;QAC5E,wDAAwD;QACxD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SACjC,CAAC;KACH,CAAC;IAEF,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACrC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,WAAW,CAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxE,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAChD,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAEjD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAChF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC,QAAQ,EAAE;IAEb,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KACzC,CAAC;CACH,CAAC,CAAA;AAEF,oEAAoE;AACpE,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,cAAc,CACtB,cAAc,IAAI,gBAAgB,MAAM,CAAC,SAAS,CAAC,8CAA8C,CAClG,CAAA;QACH,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,cAAc,CACtB,SAAS,IAAI,kDAAkD,MAAM,CAAC,cAAc,CAAC,sBAAsB,CAC5G,CAAA;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,cAAc,CAAC,uBAAuB,OAAO,mCAAmC,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CACtB,mCAAmC,IAAI,mCAAmC,CAC3E,CAAA;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,cAAc,CAAC,iCAAiC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * Inbound A2A protocol server for DeepSeek Harness.
3
3
  *
4
- * Publishes an Agent Card at a well-known URI and serves the A2A v0.3.0
5
- * JSON-RPC binding, so any compliant peer that knows this deployment's URL can
6
- * discover it and submit tasks to a harness agent. There is no outbound client:
7
- * this plugin never connects to another agent.
4
+ * Publishes an Agent Card at a well-known URI and serves the A2A v1.0 JSON-RPC
5
+ * binding, so any compliant peer that knows this deployment's URL can discover
6
+ * it and submit tasks to a harness agent. There is no outbound client: this
7
+ * plugin never connects to another agent.
8
+ *
9
+ * v1.0 is the ONLY protocol version served. The v0.3 method names, `kind`
10
+ * discriminators, and lowercase enums are gone rather than aliased: a reply
11
+ * this server produces is v1.0 JSON, and a v0.3 client could not read it, so
12
+ * answering a v0.3 request would fail further from its cause than refusing it.
8
13
  *
9
14
  * It is a TRANSPORT ADAPTER, not a capability seam — the same self-limitation
10
15
  * `dsh-acp` states. It exposes no editor navigation, transcript replay,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAalD,OAAO,EAAwB,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAchF,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,eAAe,EAAE,CAAA;AAE/B,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,UAAyC,CAAA;AAW5D;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAyejE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAelD,OAAO,EAAwB,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAehF,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,eAAe,EAAE,CAAA;AAE/B,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,UAAyC,CAAA;AAW5D;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA6gBjE"}