@zhin.js/a2a 1.0.1 → 1.0.3

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 CHANGED
@@ -1,5 +1,49 @@
1
1
  # @zhin.js/a2a
2
2
 
3
+ ## 1.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 16ec4e8: Harden Plugin Runtime migration boundaries: make process-level registries, the game
8
+ catalog, and game-record storage generation-owned so HMR replacement cannot unregister the
9
+ active generation, discover workspace agents without mutating `process.cwd()`, and
10
+ require authentication for production A2A endpoints.
11
+
12
+ Game SessionServices and Group Suite mutable state now live in owner-scoped
13
+ resources. Lottery database, Agent dependencies, and outbound push bindings use
14
+ generation registrations with rollback-safe disposal.
15
+
16
+ The Plugin Runtime Console demo scope now follows ADR 0016 and rejects project
17
+ file, environment, and database RPCs, closing both direct and file-manager paths
18
+ that could expose `.env` values.
19
+
20
+ - Updated dependencies [16ec4e8]
21
+ - Updated dependencies [cc5c94d]
22
+ - Updated dependencies [447f3e2]
23
+ - @zhin.js/core@1.3.5
24
+ - @zhin.js/agent@1.0.4
25
+ - @zhin.js/host-http@1.0.1
26
+ - zhin.js@4.1.3
27
+ - @zhin.js/logger@1.0.75
28
+ - @zhin.js/host-router@2.0.4
29
+
30
+ ## 1.0.2
31
+
32
+ ### Patch Changes
33
+
34
+ - 872c583: Slack 适配器 Phase 1/2:mrkdwn 出站、长消息切分、斜杠/按钮 ephemeral 反馈、入站 mrkdwn→Markdown、editMessage 对齐 core。
35
+
36
+ Logger 表格日志与 string-width 列宽;Agent AI Handler 框线表格与 introspection/MCP 导出;Core side-event 归一化;Schedule 时区规划;多适配器 side-event 与 API surface 更新。
37
+
38
+ - 872c583: fix: 代码格式优化
39
+ - Updated dependencies [872c583]
40
+ - Updated dependencies [872c583]
41
+ - @zhin.js/agent@1.0.3
42
+ - @zhin.js/core@1.3.4
43
+ - @zhin.js/host-router@2.0.3
44
+ - @zhin.js/logger@1.0.74
45
+ - zhin.js@4.1.2
46
+
3
47
  ## 1.0.1
4
48
 
5
49
  ### Patch Changes
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * A2A v1.0 proto-shaped Part/Message helpers.
3
3
  */
4
- import type { Part } from '@a2a-js/sdk';
4
+ import { type Part } from '@a2a-js/sdk';
5
5
  export declare function textPart(text: string, mediaType?: string): Part;
6
6
  export declare function dataPart(data: unknown): Part;
7
7
  export declare function partsToPromptText(parts: Part[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-parts.d.ts","sourceRoot":"","sources":["../src/a2a-parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAe,GAAG,IAAI,CAOrE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAO5C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAYvD;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,SAAK,GACV,OAAO,aAAa,EAAE,OAAO,CAW/B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,aAAa,EAAE,OAAO,CAW/B"}
1
+ {"version":3,"file":"a2a-parts.d.ts","sourceRoot":"","sources":["../src/a2a-parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAe,GAAG,IAAI,CAOrE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAO5C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAYvD;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,SAAK,GACV,OAAO,aAAa,EAAE,OAAO,CAW/B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,aAAa,EAAE,OAAO,CAW/B"}
package/lib/a2a-parts.js CHANGED
@@ -1,3 +1,6 @@
1
+ /**
2
+ * A2A v1.0 proto-shaped Part/Message helpers.
3
+ */
1
4
  import { Role } from '@a2a-js/sdk';
2
5
  export function textPart(text, mediaType = 'text/plain') {
3
6
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-parts.js","sourceRoot":"","sources":["../src/a2a-parts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAS,GAAG,YAAY;IAC7D,OAAO;QACL,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,EAAE;QACZ,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO;QACL,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,MAAM,GAAG,EAAE;IAEX,OAAO;QACL,SAAS;QACT,SAAS;QACT,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,UAAU;QACrB,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,SAAiB,EACjB,KAAa,EACb,QAAkC;IAElC,OAAO;QACL,SAAS;QACT,SAAS;QACT,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,IAAI,CAAC,SAAS;QACpB,KAAK;QACL,QAAQ;QACR,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"a2a-parts.js","sourceRoot":"","sources":["../src/a2a-parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAa,MAAM,aAAa,CAAC;AAE9C,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAS,GAAG,YAAY;IAC7D,OAAO;QACL,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,EAAE;QACZ,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO;QACL,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,MAAM,GAAG,EAAE;IAEX,OAAO;QACL,SAAS;QACT,SAAS;QACT,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,UAAU;QACrB,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,SAAiB,EACjB,KAAa,EACb,QAAkC;IAElC,OAAO;QACL,SAAS;QACT,SAAS;QACT,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,IAAI,CAAC,SAAS;QACpB,KAAK;QACL,QAAQ;QACR,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../src/agent-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../src/agent-executor.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Build A2A AgentCard per ai.agents binding.
3
3
  */
4
- import type { AgentCard } from '@a2a-js/sdk';
4
+ import { type AgentCard } from '@a2a-js/sdk';
5
5
  import type { AgentBindingRegistry } from '@zhin.js/agent/config';
6
- export declare function buildAgentCardForBinding(agentName: string, registry: AgentBindingRegistry, publicBaseUrl: string): AgentCard | null;
6
+ export declare function buildAgentCardForBinding(agentName: string, registry: AgentBindingRegistry, publicBaseUrl: string, basePath?: string): AgentCard | null;
7
7
  export declare function listExposableAgentNames(registry: AgentBindingRegistry): string[];
8
8
  //# sourceMappingURL=card-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card-builder.d.ts","sourceRoot":"","sources":["../src/card-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAuBlE,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,oBAAoB,EAC9B,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,IAAI,CAgElB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAEhF"}
1
+ {"version":3,"file":"card-builder.d.ts","sourceRoot":"","sources":["../src/card-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAwB,KAAK,SAAS,EAAmB,MAAM,aAAa,CAAC;AAEpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAuBlE,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,oBAAoB,EAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAS,GAChB,SAAS,GAAG,IAAI,CAuElB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAEhF"}
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Build A2A AgentCard per ai.agents binding.
3
+ */
1
4
  import { A2A_PROTOCOL_VERSION } from '@a2a-js/sdk';
2
5
  import { a2aAgentCardUrl, a2aJsonRpcUrl, a2aRestUrl } from './config.js';
3
6
  function makeSkill(partial) {
@@ -18,13 +21,18 @@ const DEFAULT_SKILLS = [
18
21
  tags: ['orchestration', 'delegate'],
19
22
  }),
20
23
  ];
21
- export function buildAgentCardForBinding(agentName, registry, publicBaseUrl) {
24
+ export function buildAgentCardForBinding(agentName, registry, publicBaseUrl, basePath = '/a2a') {
22
25
  const binding = registry.getBinding(agentName);
23
26
  if (!binding)
24
27
  return null;
25
28
  const nickname = binding.nickname ?? agentName;
26
- const jsonRpcUrl = a2aJsonRpcUrl(publicBaseUrl, agentName);
27
- const restUrl = a2aRestUrl(publicBaseUrl, agentName);
29
+ const normalizedBasePath = basePath === '/a2a' ? undefined : basePath;
30
+ const jsonRpcUrl = normalizedBasePath
31
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/jsonrpc`
32
+ : a2aJsonRpcUrl(publicBaseUrl, agentName);
33
+ const restUrl = normalizedBasePath
34
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/rest`
35
+ : a2aRestUrl(publicBaseUrl, agentName);
28
36
  const skills = [
29
37
  makeSkill({
30
38
  id: agentName,
@@ -78,7 +86,9 @@ export function buildAgentCardForBinding(agentName, registry, publicBaseUrl) {
78
86
  defaultOutputModes: ['text/plain'],
79
87
  skills,
80
88
  signatures: [],
81
- documentationUrl: a2aAgentCardUrl(publicBaseUrl, agentName),
89
+ documentationUrl: normalizedBasePath
90
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/.well-known/agent-card.json`
91
+ : a2aAgentCardUrl(publicBaseUrl, agentName),
82
92
  };
83
93
  }
84
94
  export function listExposableAgentNames(registry) {
@@ -1 +1 @@
1
- {"version":3,"file":"card-builder.js","sourceRoot":"","sources":["../src/card-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-builder.js","sourceRoot":"","sources":["../src/card-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAmC,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzE,SAAS,SAAS,CAAC,OAA8E;IAC/F,OAAO;QACL,GAAG,OAAO;QACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,CAAC,YAAY,CAAC;QAC1B,WAAW,EAAE,CAAC,YAAY,CAAC;QAC3B,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAiB;IACnC,SAAS,CAAC;QACR,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wDAAwD;QACrE,IAAI,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,QAA8B,EAC9B,aAAqB,EACrB,QAAQ,GAAG,MAAM;IAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/C,MAAM,kBAAkB,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtE,MAAM,UAAU,GAAG,kBAAkB;QACnC,CAAC,CAAC,GAAG,aAAa,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,SAAS,CAAC,UAAU;QAClF,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,kBAAkB;QAChC,CAAC,CAAC,GAAG,aAAa,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,SAAS,CAAC,OAAO;QAC/E,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAiB;QAC3B,SAAS,CAAC;YACR,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,eAAe,SAAS,MAAM,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,GAAG;YACpF,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAC1B,CAAC;QACF,GAAG,cAAc;KAClB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,sBAAsB,SAAS,gBAAgB,OAAO,CAAC,aAAa,WAAW,OAAO,CAAC,KAAK,EAAE;QAC3G,OAAO,EAAE,OAAO;QAChB,mBAAmB,EAAE;YACnB;gBACE,GAAG,EAAE,UAAU;gBACf,eAAe,EAAE,SAAS;gBAC1B,eAAe,EAAE,oBAAoB;gBACrC,MAAM,EAAE,EAAE;aACX;YACD;gBACE,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,WAAW;gBAC5B,eAAe,EAAE,oBAAoB;gBACrC,MAAM,EAAE,EAAE;aACX;SACF;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,SAAS;YACvB,GAAG,EAAE,gCAAgC;SACtC;QACD,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,UAAU,EAAE,EAAE;SACf;QACD,eAAe,EAAE;YACf,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,KAAK,EAAE,wBAAwB;oBAC/B,KAAK,EAAE;wBACL,WAAW,EAAE,2BAA2B;wBACxC,MAAM,EAAE,QAAQ;wBAChB,YAAY,EAAE,EAAE;qBACjB;iBACF;aACF;SACF;QACD,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7D,iBAAiB,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;QACrD,kBAAkB,EAAE,CAAC,YAAY,CAAC;QAClC,MAAM;QACN,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,kBAAkB;YAClC,CAAC,CAAC,GAAG,aAAa,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,SAAS,CAAC,8BAA8B;YACtG,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA8B;IACpE,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC;AACnC,CAAC"}
package/lib/index.js CHANGED
@@ -41,7 +41,7 @@ function rebuildAgentStacks(ai) {
41
41
  next.set(agentName, { agentName, requestHandler, agentCard: card });
42
42
  }
43
43
  agentStacks = next;
44
- logger.info(formatCompact({ A2A: 'ready', agents: [...next.keys()].join(',') }));
44
+ logger.debug(formatCompact({ A2A: 'ready', agents: [...next.keys()].join(',') }));
45
45
  }
46
46
  function parseA2aTail(tail) {
47
47
  const normalized = tail.replace(/^\/+/, '');
@@ -114,7 +114,7 @@ useContext('router', (router) => {
114
114
  }
115
115
  };
116
116
  router.all(A2A_ROUTE, a2aHandler);
117
- logger.info(formatCompact({ A2A: 'listening', base: `${publicBaseUrl}${a2aAgentBasePath('{agent}')}` }));
117
+ logger.debug(formatCompact({ A2A: 'listening', base: `${publicBaseUrl}${a2aAgentBasePath('{agent}')}` }));
118
118
  onDispose(() => {
119
119
  agentStacks.clear();
120
120
  });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhF,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AAEvD,IAAI,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;AACnD,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,IAAI,aAAa,GAAG,uBAAuB,CAAC;AAE5C,SAAS,kBAAkB,CAAC,EAAa;IACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;IACzC,aAAa,GAAG,oBAAoB,CAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAkE,iBAAiB,CAAC,IAAI,EAAE,CACrH,CAAC;IACF,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE9C,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;YAAE,SAAS;QAErC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;YACnC,SAAS;YACT,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE;YACpC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAC9C,IAAI,EACJ,IAAI,iBAAiB,EAAE,EACvB,QAAQ,CACT,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,WAAW,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,eAAe,eAAe,EAAE,IAAI,UAAU,KAAK,6BAA6B,EAAE,CAAC;QACpG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,EAAyB;IAC7C,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;QAAE,OAAO;IACnD,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAkB,EAAE,MAAc,EAAE,IAAa;IAC1E,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACpB,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,aAAa,EAAE,GAAG,CAAkF,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC/I,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IACxC,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAA0B,CAAC;IACtD,IAAI,EAAE,EAAE,OAAO,EAAE;QAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,KAAK,EAAE,GAAkB,EAAiB,EAAE;QAC7D,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAA0B,CAAC;QACzD,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpB,IAAI,SAAS,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YACtD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,SAAS,aAAa,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3E,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YAChE,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACzB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAElC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEzG,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,oDAAoD;AACpD,UAAU,CAAC,IAAI,EAAE,CAAC,EAAa,EAAE,EAAE;IACjC,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,EAAE;QACV,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Thin REST transport wrapper over A2ARequestHandler.
3
3
  */
4
- import type { SendMessageRequest } from '@a2a-js/sdk';
5
- import type { A2ARequestHandler } from '@a2a-js/sdk/server';
6
- import type { ServerCallContext } from '@a2a-js/sdk/server';
4
+ import { type SendMessageRequest } from '@a2a-js/sdk';
5
+ import { type A2ARequestHandler, type ServerCallContext } from '@a2a-js/sdk/server';
7
6
  export declare class RestTransportHandler {
8
7
  private readonly requestHandler;
9
8
  constructor(requestHandler: A2ARequestHandler);
@@ -1 +1 @@
1
- {"version":3,"file":"rest-transport-handler.d.ts","sourceRoot":"","sources":["../src/rest-transport-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,iBAAiB;IAExD,YAAY;IAIZ,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB;IAKlE,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB;IAMxE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM;IAQ1E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;IAKrD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,iBAAiB;IAarF,OAAO,CAAC,0BAA0B;YAKpB,iBAAiB;IAO/B,OAAO,CAAC,kBAAkB;CAO3B"}
1
+ {"version":3,"file":"rest-transport-handler.d.ts","sourceRoot":"","sources":["../src/rest-transport-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAiF,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrI,OAAO,EAAoD,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGtI,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,iBAAiB;IAExD,YAAY;IAIZ,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB;IAKlE,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB;IAMxE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM;IAQ1E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;IAKrD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,iBAAiB;IAarF,OAAO,CAAC,0BAA0B;YAKpB,iBAAiB;IAO/B,OAAO,CAAC,kBAAkB;CAO3B"}
@@ -1,5 +1,8 @@
1
- import { RequestMalformedError, UnsupportedOperationError, } from '@a2a-js/sdk/server';
1
+ /**
2
+ * Thin REST transport wrapper over A2ARequestHandler.
3
+ */
2
4
  import { TaskState } from '@a2a-js/sdk';
5
+ import { RequestMalformedError, UnsupportedOperationError } from '@a2a-js/sdk/server';
3
6
  export class RestTransportHandler {
4
7
  requestHandler;
5
8
  constructor(requestHandler) {
@@ -1 +1 @@
1
- {"version":3,"file":"rest-transport-handler.js","sourceRoot":"","sources":["../src/rest-transport-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-transport-handler.js","sourceRoot":"","sources":["../src/rest-transport-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { HttpHost } from '@zhin.js/host-http';
2
+ import type { AgentHostPort } from '@zhin.js/agent/runtime';
3
+ export interface RuntimeA2aConfig {
4
+ readonly enabled?: boolean;
5
+ readonly path?: string;
6
+ readonly token?: string;
7
+ readonly publicUrl?: string;
8
+ }
9
+ export interface InstallRuntimeA2aOptions {
10
+ readonly http: HttpHost;
11
+ readonly agentHost: AgentHostPort;
12
+ readonly config?: RuntimeA2aConfig;
13
+ readonly fallbackToken?: string;
14
+ readonly fallbackPublicUrl: string;
15
+ readonly production?: boolean;
16
+ }
17
+ /** Mount Agent Card, JSON-RPC, and HTTP+JSON routes on the Runtime HTTP Host. */
18
+ export declare function installRuntimeA2a(options: InstallRuntimeA2aOptions): () => void;
19
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAOD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAyD/E"}
package/lib/runtime.js ADDED
@@ -0,0 +1,109 @@
1
+ import { DefaultRequestHandler, InMemoryTaskStore, } from '@a2a-js/sdk/server';
2
+ import { AGENT_CARD_PATH } from '@a2a-js/sdk';
3
+ import { buildAgentCardForBinding, listExposableAgentNames } from './card-builder.js';
4
+ import { ZhinA2AExecutor } from './agent-executor.js';
5
+ import { handleAgentCard, handleJsonRpc, handleRest } from './http-handlers.js';
6
+ import { verifyA2aBearer } from './auth.js';
7
+ /** Mount Agent Card, JSON-RPC, and HTTP+JSON routes on the Runtime HTTP Host. */
8
+ export function installRuntimeA2a(options) {
9
+ if (options.config?.enabled === false)
10
+ return () => undefined;
11
+ const basePath = normalizePath(options.config?.path ?? '/a2a');
12
+ const publicBaseUrl = (options.config?.publicUrl ?? options.fallbackPublicUrl).replace(/\/+$/u, '');
13
+ const token = options.config?.token ?? options.fallbackToken ?? '';
14
+ if (options.production === true && !token) {
15
+ throw new Error('A2A requires a2a.token or http.token in production');
16
+ }
17
+ const service = options.agentHost.service;
18
+ const agent = options.agentHost.agent;
19
+ const registry = service.getBindingRegistry();
20
+ const stacks = new Map();
21
+ for (const agentName of listExposableAgentNames(registry)) {
22
+ const card = buildAgentCardForBinding(agentName, registry, publicBaseUrl, basePath);
23
+ if (!card)
24
+ continue;
25
+ const executor = new ZhinA2AExecutor({
26
+ agentName,
27
+ getAgent: () => agent,
28
+ resolveBinding: () => registry.getBinding(agentName),
29
+ });
30
+ stacks.set(agentName, {
31
+ card,
32
+ handler: new DefaultRequestHandler(card, new InMemoryTaskStore(), executor),
33
+ });
34
+ }
35
+ const unregister = options.http.route('ALL', `${basePath}/*`, async (request, response, url) => {
36
+ if (token && !verifyA2aBearer(request, token)) {
37
+ writeJson(response, 401, { error: 'Unauthorized - Bearer token required' });
38
+ return;
39
+ }
40
+ const route = parseRoute(url.pathname, basePath);
41
+ if (!route) {
42
+ writeJson(response, 404, { error: 'Not found' });
43
+ return;
44
+ }
45
+ const stack = stacks.get(route.agentName);
46
+ if (!stack) {
47
+ writeJson(response, 404, { error: `A2A agent "${route.agentName}" not found` });
48
+ return;
49
+ }
50
+ if (route.kind === 'card') {
51
+ await handleAgentCard(request, response, stack.handler);
52
+ }
53
+ else if (route.kind === 'jsonrpc') {
54
+ await handleJsonRpc(request, response, stack.handler);
55
+ }
56
+ else {
57
+ await handleRest(request, response, stack.handler, route.restPath);
58
+ }
59
+ }, { summary: 'Agent-to-Agent protocol', tags: ['a2a'] });
60
+ return () => {
61
+ unregister();
62
+ stacks.clear();
63
+ };
64
+ }
65
+ function parseRoute(pathname, basePath) {
66
+ const prefix = `${basePath}/`;
67
+ if (!pathname.startsWith(prefix))
68
+ return null;
69
+ const slash = pathname.indexOf('/', prefix.length);
70
+ if (slash < 0)
71
+ return null;
72
+ let agentName;
73
+ try {
74
+ agentName = decodeURIComponent(pathname.slice(prefix.length, slash));
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ if (!agentName)
80
+ return null;
81
+ const tail = pathname.slice(slash + 1).replace(/^\/+|\/+$/gu, '');
82
+ if (tail === `.well-known/${AGENT_CARD_PATH}` || tail === '.well-known/agent-card.json') {
83
+ return { agentName, kind: 'card' };
84
+ }
85
+ if (tail === 'jsonrpc' || tail.startsWith('jsonrpc/')) {
86
+ return { agentName, kind: 'jsonrpc' };
87
+ }
88
+ if (tail === 'rest' || tail.startsWith('rest/')) {
89
+ return {
90
+ agentName,
91
+ kind: 'rest',
92
+ restPath: tail === 'rest' ? '' : tail.slice('rest/'.length),
93
+ };
94
+ }
95
+ return null;
96
+ }
97
+ function writeJson(response, status, body) {
98
+ const payload = JSON.stringify(body);
99
+ response.writeHead(status, {
100
+ 'content-type': 'application/json; charset=utf-8',
101
+ 'content-length': String(Buffer.byteLength(payload)),
102
+ });
103
+ response.end(payload);
104
+ }
105
+ function normalizePath(path) {
106
+ const leading = path.startsWith('/') ? path : `/${path}`;
107
+ return leading.replace(/\/+$/u, '') || '/a2a';
108
+ }
109
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/a2a",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A2A Protocol server for Zhin.js — multi-agent Agent Cards and task delegation",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -10,6 +10,11 @@
10
10
  "types": "./lib/index.d.ts",
11
11
  "development": "./src/index.ts",
12
12
  "import": "./lib/index.js"
13
+ },
14
+ "./runtime": {
15
+ "types": "./lib/runtime.d.ts",
16
+ "development": "./src/runtime.ts",
17
+ "import": "./lib/runtime.js"
13
18
  }
14
19
  },
15
20
  "keywords": [
@@ -31,21 +36,22 @@
31
36
  },
32
37
  "dependencies": {
33
38
  "@a2a-js/sdk": "1.0.0-beta.0",
34
- "@zhin.js/core": "1.3.3",
35
- "@zhin.js/logger": "1.0.73"
39
+ "@zhin.js/core": "1.3.5",
40
+ "@zhin.js/host-http": "1.0.1",
41
+ "@zhin.js/logger": "1.0.75"
36
42
  },
37
43
  "peerDependencies": {
38
- "@zhin.js/agent": "1.0.2",
39
- "@zhin.js/host-router": "2.0.2",
40
- "zhin.js": "4.1.1"
44
+ "@zhin.js/agent": "1.0.4",
45
+ "@zhin.js/host-router": "2.0.4",
46
+ "zhin.js": "4.1.3"
41
47
  },
42
48
  "devDependencies": {
43
49
  "@types/node": "^26.1.0",
44
50
  "rimraf": "^6.0.0",
45
51
  "typescript": "^6.0.3",
46
- "@zhin.js/agent": "1.0.2",
47
- "@zhin.js/host-router": "2.0.2",
48
- "zhin.js": "4.1.1"
52
+ "@zhin.js/host-router": "2.0.4",
53
+ "@zhin.js/agent": "1.0.4",
54
+ "zhin.js": "4.1.3"
49
55
  },
50
56
  "files": [
51
57
  "src",
package/src/a2a-parts.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * A2A v1.0 proto-shaped Part/Message helpers.
3
3
  */
4
- import type { Part } from '@a2a-js/sdk';
5
- import { Role } from '@a2a-js/sdk';
4
+ import { Role, type Part } from '@a2a-js/sdk';
6
5
 
7
6
  export function textPart(text: string, mediaType = 'text/plain'): Part {
8
7
  return {
@@ -2,8 +2,8 @@
2
2
  * ZhinA2AExecutor — runs inbound A2A tasks via bound ZhinAgent.
3
3
  */
4
4
  import { randomUUID } from 'node:crypto';
5
- import type { Task } from '@a2a-js/sdk';
6
- import { TaskState } from '@a2a-js/sdk';
5
+ import { TaskState, type Task } from '@a2a-js/sdk';
6
+
7
7
  import {
8
8
  AgentEvent,
9
9
  type AgentExecutor,
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Build A2A AgentCard per ai.agents binding.
3
3
  */
4
- import type { AgentCard, AgentSkill } from '@a2a-js/sdk';
5
- import { A2A_PROTOCOL_VERSION } from '@a2a-js/sdk';
4
+ import { A2A_PROTOCOL_VERSION, type AgentCard, type AgentSkill } from '@a2a-js/sdk';
5
+
6
6
  import type { AgentBindingRegistry } from '@zhin.js/agent/config';
7
7
  import { a2aAgentCardUrl, a2aJsonRpcUrl, a2aRestUrl } from './config.js';
8
8
 
@@ -30,13 +30,19 @@ export function buildAgentCardForBinding(
30
30
  agentName: string,
31
31
  registry: AgentBindingRegistry,
32
32
  publicBaseUrl: string,
33
+ basePath = '/a2a',
33
34
  ): AgentCard | null {
34
35
  const binding = registry.getBinding(agentName);
35
36
  if (!binding) return null;
36
37
 
37
38
  const nickname = binding.nickname ?? agentName;
38
- const jsonRpcUrl = a2aJsonRpcUrl(publicBaseUrl, agentName);
39
- const restUrl = a2aRestUrl(publicBaseUrl, agentName);
39
+ const normalizedBasePath = basePath === '/a2a' ? undefined : basePath;
40
+ const jsonRpcUrl = normalizedBasePath
41
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/jsonrpc`
42
+ : a2aJsonRpcUrl(publicBaseUrl, agentName);
43
+ const restUrl = normalizedBasePath
44
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/rest`
45
+ : a2aRestUrl(publicBaseUrl, agentName);
40
46
 
41
47
  const skills: AgentSkill[] = [
42
48
  makeSkill({
@@ -92,7 +98,9 @@ export function buildAgentCardForBinding(
92
98
  defaultOutputModes: ['text/plain'],
93
99
  skills,
94
100
  signatures: [],
95
- documentationUrl: a2aAgentCardUrl(publicBaseUrl, agentName),
101
+ documentationUrl: normalizedBasePath
102
+ ? `${publicBaseUrl}${normalizedBasePath}/${encodeURIComponent(agentName)}/.well-known/agent-card.json`
103
+ : a2aAgentCardUrl(publicBaseUrl, agentName),
96
104
  };
97
105
  }
98
106
 
package/src/index.ts CHANGED
@@ -7,17 +7,17 @@
7
7
  * * /a2a/{agentName}/rest/*
8
8
  */
9
9
  import { formatCompact, usePlugin } from '@zhin.js/core';
10
- import type { Router, RouterContext } from '@zhin.js/host-router';
11
- import { paramPath } from '@zhin.js/host-router';
10
+ import { paramPath, type Router, type RouterContext } from '@zhin.js/host-router';
11
+
12
12
  import {
13
13
  DefaultRequestHandler,
14
14
  InMemoryTaskStore,
15
15
  type A2ARequestHandler,
16
16
  } from '@a2a-js/sdk/server';
17
- import type { AgentCard } from '@a2a-js/sdk';
18
- import { AGENT_CARD_PATH } from '@a2a-js/sdk';
19
- import { getAgentRuntimeRegistry } from '@zhin.js/agent';
20
- import type { AIService } from '@zhin.js/agent';
17
+ import { AGENT_CARD_PATH, type AgentCard } from '@a2a-js/sdk';
18
+
19
+ import { getAgentRuntimeRegistry, type AIService } from '@zhin.js/agent';
20
+
21
21
  import { resolvePublicBaseUrl, a2aAgentBasePath } from './config.js';
22
22
  import { verifyA2aBearer } from './auth.js';
23
23
  import { buildAgentCardForBinding, listExposableAgentNames } from './card-builder.js';
@@ -68,7 +68,7 @@ function rebuildAgentStacks(ai: AIService): void {
68
68
  }
69
69
 
70
70
  agentStacks = next;
71
- logger.info(formatCompact({ A2A: 'ready', agents: [...next.keys()].join(',') }));
71
+ logger.debug(formatCompact({ A2A: 'ready', agents: [...next.keys()].join(',') }));
72
72
  }
73
73
 
74
74
  function parseA2aTail(tail: string): { kind: 'card' | 'jsonrpc' | 'rest'; restSubPath?: string } | null {
@@ -149,7 +149,7 @@ useContext('router', (router: Router) => {
149
149
 
150
150
  router.all(A2A_ROUTE, a2aHandler);
151
151
 
152
- logger.info(formatCompact({ A2A: 'listening', base: `${publicBaseUrl}${a2aAgentBasePath('{agent}')}` }));
152
+ logger.debug(formatCompact({ A2A: 'listening', base: `${publicBaseUrl}${a2aAgentBasePath('{agent}')}` }));
153
153
 
154
154
  onDispose(() => {
155
155
  agentStacks.clear();
@@ -1,19 +1,9 @@
1
1
  /**
2
2
  * Thin REST transport wrapper over A2ARequestHandler.
3
3
  */
4
- import type {
5
- CancelTaskRequest,
6
- GetTaskRequest,
7
- ListTasksRequest,
8
- SendMessageRequest,
9
- } from '@a2a-js/sdk';
10
- import {
11
- RequestMalformedError,
12
- UnsupportedOperationError,
13
- } from '@a2a-js/sdk/server';
14
- import type { A2ARequestHandler } from '@a2a-js/sdk/server';
15
- import type { ServerCallContext } from '@a2a-js/sdk/server';
16
- import { TaskState } from '@a2a-js/sdk';
4
+ import { TaskState, type CancelTaskRequest, type GetTaskRequest, type ListTasksRequest, type SendMessageRequest } from '@a2a-js/sdk';
5
+ import { RequestMalformedError, UnsupportedOperationError, type A2ARequestHandler, type ServerCallContext } from '@a2a-js/sdk/server';
6
+
17
7
 
18
8
  export class RestTransportHandler {
19
9
  constructor(private readonly requestHandler: A2ARequestHandler) {}
package/src/runtime.ts ADDED
@@ -0,0 +1,143 @@
1
+ import {
2
+ DefaultRequestHandler,
3
+ InMemoryTaskStore,
4
+ type A2ARequestHandler,
5
+ } from '@a2a-js/sdk/server';
6
+ import { AGENT_CARD_PATH, type AgentCard } from '@a2a-js/sdk';
7
+ import type { HttpHost } from '@zhin.js/host-http';
8
+ import type { AgentHostPort } from '@zhin.js/agent/runtime';
9
+ import type { ZhinAgent } from '@zhin.js/agent';
10
+ import type { AgentBindingRegistry } from '@zhin.js/agent/config';
11
+ import { buildAgentCardForBinding, listExposableAgentNames } from './card-builder.js';
12
+ import { ZhinA2AExecutor } from './agent-executor.js';
13
+ import { handleAgentCard, handleJsonRpc, handleRest } from './http-handlers.js';
14
+ import { verifyA2aBearer } from './auth.js';
15
+
16
+ export interface RuntimeA2aConfig {
17
+ readonly enabled?: boolean;
18
+ readonly path?: string;
19
+ readonly token?: string;
20
+ readonly publicUrl?: string;
21
+ }
22
+
23
+ export interface InstallRuntimeA2aOptions {
24
+ readonly http: HttpHost;
25
+ readonly agentHost: AgentHostPort;
26
+ readonly config?: RuntimeA2aConfig;
27
+ readonly fallbackToken?: string;
28
+ readonly fallbackPublicUrl: string;
29
+ readonly production?: boolean;
30
+ }
31
+
32
+ interface AgentStack {
33
+ readonly card: AgentCard;
34
+ readonly handler: A2ARequestHandler;
35
+ }
36
+
37
+ /** Mount Agent Card, JSON-RPC, and HTTP+JSON routes on the Runtime HTTP Host. */
38
+ export function installRuntimeA2a(options: InstallRuntimeA2aOptions): () => void {
39
+ if (options.config?.enabled === false) return () => undefined;
40
+ const basePath = normalizePath(options.config?.path ?? '/a2a');
41
+ const publicBaseUrl = (options.config?.publicUrl ?? options.fallbackPublicUrl).replace(/\/+$/u, '');
42
+ const token = options.config?.token ?? options.fallbackToken ?? '';
43
+ if (options.production === true && !token) {
44
+ throw new Error('A2A requires a2a.token or http.token in production');
45
+ }
46
+ const service = options.agentHost.service as {
47
+ getBindingRegistry(): AgentBindingRegistry;
48
+ };
49
+ const agent = options.agentHost.agent as ZhinAgent;
50
+ const registry = service.getBindingRegistry();
51
+ const stacks = new Map<string, AgentStack>();
52
+
53
+ for (const agentName of listExposableAgentNames(registry)) {
54
+ const card = buildAgentCardForBinding(agentName, registry, publicBaseUrl, basePath);
55
+ if (!card) continue;
56
+ const executor = new ZhinA2AExecutor({
57
+ agentName,
58
+ getAgent: () => agent,
59
+ resolveBinding: () => registry.getBinding(agentName),
60
+ });
61
+ stacks.set(agentName, {
62
+ card,
63
+ handler: new DefaultRequestHandler(card, new InMemoryTaskStore(), executor),
64
+ });
65
+ }
66
+
67
+ const unregister = options.http.route('ALL', `${basePath}/*`, async (request, response, url) => {
68
+ if (token && !verifyA2aBearer(request, token)) {
69
+ writeJson(response, 401, { error: 'Unauthorized - Bearer token required' });
70
+ return;
71
+ }
72
+ const route = parseRoute(url.pathname, basePath);
73
+ if (!route) {
74
+ writeJson(response, 404, { error: 'Not found' });
75
+ return;
76
+ }
77
+ const stack = stacks.get(route.agentName);
78
+ if (!stack) {
79
+ writeJson(response, 404, { error: `A2A agent "${route.agentName}" not found` });
80
+ return;
81
+ }
82
+ if (route.kind === 'card') {
83
+ await handleAgentCard(request, response, stack.handler);
84
+ } else if (route.kind === 'jsonrpc') {
85
+ await handleJsonRpc(request, response, stack.handler);
86
+ } else {
87
+ await handleRest(request, response, stack.handler, route.restPath);
88
+ }
89
+ }, { summary: 'Agent-to-Agent protocol', tags: ['a2a'] });
90
+
91
+ return () => {
92
+ unregister();
93
+ stacks.clear();
94
+ };
95
+ }
96
+
97
+ type ParsedRoute =
98
+ | { readonly agentName: string; readonly kind: 'card' }
99
+ | { readonly agentName: string; readonly kind: 'jsonrpc' }
100
+ | { readonly agentName: string; readonly kind: 'rest'; readonly restPath: string };
101
+
102
+ function parseRoute(pathname: string, basePath: string): ParsedRoute | null {
103
+ const prefix = `${basePath}/`;
104
+ if (!pathname.startsWith(prefix)) return null;
105
+ const slash = pathname.indexOf('/', prefix.length);
106
+ if (slash < 0) return null;
107
+ let agentName: string;
108
+ try {
109
+ agentName = decodeURIComponent(pathname.slice(prefix.length, slash));
110
+ } catch {
111
+ return null;
112
+ }
113
+ if (!agentName) return null;
114
+ const tail = pathname.slice(slash + 1).replace(/^\/+|\/+$/gu, '');
115
+ if (tail === `.well-known/${AGENT_CARD_PATH}` || tail === '.well-known/agent-card.json') {
116
+ return { agentName, kind: 'card' };
117
+ }
118
+ if (tail === 'jsonrpc' || tail.startsWith('jsonrpc/')) {
119
+ return { agentName, kind: 'jsonrpc' };
120
+ }
121
+ if (tail === 'rest' || tail.startsWith('rest/')) {
122
+ return {
123
+ agentName,
124
+ kind: 'rest',
125
+ restPath: tail === 'rest' ? '' : tail.slice('rest/'.length),
126
+ };
127
+ }
128
+ return null;
129
+ }
130
+
131
+ function writeJson(response: import('node:http').ServerResponse, status: number, body: unknown): void {
132
+ const payload = JSON.stringify(body);
133
+ response.writeHead(status, {
134
+ 'content-type': 'application/json; charset=utf-8',
135
+ 'content-length': String(Buffer.byteLength(payload)),
136
+ });
137
+ response.end(payload);
138
+ }
139
+
140
+ function normalizePath(path: string): string {
141
+ const leading = path.startsWith('/') ? path : `/${path}`;
142
+ return leading.replace(/\/+$/u, '') || '/a2a';
143
+ }