@agent-native/core 0.2.8 → 0.3.2

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 (147) hide show
  1. package/README.md +59 -26
  2. package/dist/a2a/agent-card.d.ts +3 -0
  3. package/dist/a2a/agent-card.d.ts.map +1 -0
  4. package/dist/a2a/agent-card.js +26 -0
  5. package/dist/a2a/agent-card.js.map +1 -0
  6. package/dist/a2a/client.d.ts +25 -0
  7. package/dist/a2a/client.d.ts.map +1 -0
  8. package/dist/a2a/client.js +119 -0
  9. package/dist/a2a/client.js.map +1 -0
  10. package/dist/a2a/handlers.d.ts +4 -0
  11. package/dist/a2a/handlers.d.ts.map +1 -0
  12. package/dist/a2a/handlers.js +252 -0
  13. package/dist/a2a/handlers.js.map +1 -0
  14. package/dist/a2a/index.d.ts +4 -0
  15. package/dist/a2a/index.d.ts.map +1 -0
  16. package/dist/a2a/index.js +5 -0
  17. package/dist/a2a/index.js.map +1 -0
  18. package/dist/a2a/middleware.d.ts +3 -0
  19. package/dist/a2a/middleware.d.ts.map +1 -0
  20. package/dist/a2a/middleware.js +36 -0
  21. package/dist/a2a/middleware.js.map +1 -0
  22. package/dist/a2a/server.d.ts +4 -0
  23. package/dist/a2a/server.d.ts.map +1 -0
  24. package/dist/a2a/server.js +18 -0
  25. package/dist/a2a/server.js.map +1 -0
  26. package/dist/a2a/task-store.d.ts +10 -0
  27. package/dist/a2a/task-store.d.ts.map +1 -0
  28. package/dist/a2a/task-store.js +73 -0
  29. package/dist/a2a/task-store.js.map +1 -0
  30. package/dist/a2a/types.d.ts +109 -0
  31. package/dist/a2a/types.d.ts.map +1 -0
  32. package/dist/a2a/types.js +3 -0
  33. package/dist/a2a/types.js.map +1 -0
  34. package/dist/adapters/cli/index.d.ts +4 -0
  35. package/dist/adapters/cli/index.d.ts.map +1 -0
  36. package/dist/adapters/cli/index.js +3 -0
  37. package/dist/adapters/cli/index.js.map +1 -0
  38. package/dist/adapters/cli/registry.d.ts +33 -0
  39. package/dist/adapters/cli/registry.d.ts.map +1 -0
  40. package/dist/adapters/cli/registry.js +62 -0
  41. package/dist/adapters/cli/registry.js.map +1 -0
  42. package/dist/adapters/cli/shell-adapter.d.ts +42 -0
  43. package/dist/adapters/cli/shell-adapter.d.ts.map +1 -0
  44. package/dist/adapters/cli/shell-adapter.js +57 -0
  45. package/dist/adapters/cli/shell-adapter.js.map +1 -0
  46. package/dist/adapters/cli/types.d.ts +24 -0
  47. package/dist/adapters/cli/types.d.ts.map +1 -0
  48. package/dist/adapters/cli/types.js +2 -0
  49. package/dist/adapters/cli/types.js.map +1 -0
  50. package/dist/adapters/firestore/adapter.d.ts.map +1 -1
  51. package/dist/adapters/firestore/adapter.js.map +1 -1
  52. package/dist/adapters/neon/adapter.d.ts.map +1 -1
  53. package/dist/adapters/neon/adapter.js +37 -21
  54. package/dist/adapters/neon/adapter.js.map +1 -1
  55. package/dist/adapters/supabase/adapter.d.ts.map +1 -1
  56. package/dist/adapters/supabase/adapter.js +10 -2
  57. package/dist/adapters/supabase/adapter.js.map +1 -1
  58. package/dist/adapters/sync/file-sync.d.ts.map +1 -1
  59. package/dist/adapters/sync/file-sync.js.map +1 -1
  60. package/dist/adapters/sync/index.d.ts +2 -2
  61. package/dist/adapters/sync/index.d.ts.map +1 -1
  62. package/dist/adapters/sync/index.js +1 -1
  63. package/dist/adapters/sync/index.js.map +1 -1
  64. package/dist/adapters/sync/merge.js +1 -2
  65. package/dist/adapters/sync/merge.js.map +1 -1
  66. package/dist/adapters/sync/types.d.ts.map +1 -1
  67. package/dist/cli/create.d.ts.map +1 -1
  68. package/dist/cli/create.js.map +1 -1
  69. package/dist/cli/index.js +15 -13
  70. package/dist/cli/index.js.map +1 -1
  71. package/dist/client/components/ApiKeySettings.d.ts +1 -1
  72. package/dist/client/components/ApiKeySettings.d.ts.map +1 -1
  73. package/dist/client/components/ApiKeySettings.js +9 -4
  74. package/dist/client/components/ApiKeySettings.js.map +1 -1
  75. package/dist/client/components/MissingKeyCard.d.ts +1 -1
  76. package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
  77. package/dist/client/components/MissingKeyCard.js +1 -1
  78. package/dist/client/components/MissingKeyCard.js.map +1 -1
  79. package/dist/client/harness.d.ts +10 -0
  80. package/dist/client/harness.d.ts.map +1 -1
  81. package/dist/client/harness.js +27 -0
  82. package/dist/client/harness.js.map +1 -1
  83. package/dist/client/index.d.ts +1 -1
  84. package/dist/client/index.d.ts.map +1 -1
  85. package/dist/client/index.js +1 -1
  86. package/dist/client/index.js.map +1 -1
  87. package/dist/client/use-file-watcher.d.ts.map +1 -1
  88. package/dist/client/use-file-watcher.js.map +1 -1
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/scripts/utils.d.ts.map +1 -1
  94. package/dist/scripts/utils.js +3 -1
  95. package/dist/scripts/utils.js.map +1 -1
  96. package/dist/server/create-server.d.ts.map +1 -1
  97. package/dist/server/create-server.js +2 -1
  98. package/dist/server/create-server.js.map +1 -1
  99. package/dist/server/index.d.ts +1 -1
  100. package/dist/server/index.d.ts.map +1 -1
  101. package/dist/server/index.js +1 -1
  102. package/dist/server/index.js.map +1 -1
  103. package/dist/server/missing-key.d.ts.map +1 -1
  104. package/dist/server/missing-key.js.map +1 -1
  105. package/dist/server/production.d.ts.map +1 -1
  106. package/dist/server/production.js.map +1 -1
  107. package/dist/server/sse.d.ts +1 -1
  108. package/dist/server/sse.d.ts.map +1 -1
  109. package/dist/server/sse.js.map +1 -1
  110. package/dist/shared/agent-chat.d.ts +18 -0
  111. package/dist/shared/agent-chat.d.ts.map +1 -1
  112. package/dist/shared/agent-chat.js +35 -0
  113. package/dist/shared/agent-chat.js.map +1 -1
  114. package/dist/shared/index.d.ts +1 -1
  115. package/dist/shared/index.d.ts.map +1 -1
  116. package/dist/shared/index.js +1 -1
  117. package/dist/shared/index.js.map +1 -1
  118. package/package.json +127 -125
  119. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +50 -0
  120. package/src/templates/default/.agents/skills/create-skill/SKILL.md +167 -0
  121. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +90 -0
  122. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +91 -0
  123. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +69 -0
  124. package/src/templates/default/.agents/skills/scripts/SKILL.md +118 -0
  125. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +79 -0
  126. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +95 -0
  127. package/src/templates/default/.claude/settings.json +86 -68
  128. package/src/templates/default/.prettierrc +5 -5
  129. package/src/templates/default/AGENTS.md +86 -69
  130. package/src/templates/default/client/App.tsx +56 -54
  131. package/src/templates/default/client/global.css +75 -72
  132. package/src/templates/default/client/lib/utils.ts +1 -1
  133. package/src/templates/default/client/vite-env.d.ts +1 -1
  134. package/src/templates/default/components.json +20 -20
  135. package/src/templates/default/index.html +14 -14
  136. package/src/templates/default/package.json +43 -43
  137. package/src/templates/default/postcss.config.js +6 -6
  138. package/src/templates/default/scripts/hello.ts +20 -20
  139. package/src/templates/default/scripts/run.ts +9 -9
  140. package/src/templates/default/server/index.ts +22 -18
  141. package/src/templates/default/server/node-build.ts +4 -4
  142. package/src/templates/default/shared/api.ts +6 -6
  143. package/src/templates/default/tailwind.config.ts +7 -7
  144. package/src/templates/default/tsconfig.json +3 -3
  145. package/src/templates/default/vite.config.server.ts +3 -3
  146. package/src/templates/default/vite.config.ts +3 -3
  147. package/tsconfig.base.json +41 -41
package/README.md CHANGED
@@ -12,18 +12,29 @@ Start from a production-ready template. Each one replaces tools you're paying fo
12
12
 
13
13
  <table>
14
14
  <tr>
15
- <td width="20%" align="center" valign="top">
15
+ <td width="33%" align="center" valign="top">
16
16
 
17
- **Analytics**
17
+ **Mail**
18
18
 
19
- <a href="https://agent-native.com/templates/analytics"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4933a80cc3134d7e874631f688be828a?format=webp&width=800" alt="Analytics template" width="100%" /></a>
19
+ <a href="https://agent-native.com/templates/mail"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6f49a81c404d4242b33317491eac7575?format=webp&width=800" alt="Mail template" width="100%" /></a>
20
20
 
21
- **AI-Native Amplitude, Mixpanel**
21
+ **AI-Native Mail, Superhuman**
22
22
 
23
- Connect any data source, prompt for any chart. Build reusable dashboards, not throwaway Q&A.
23
+ Superhuman-style email client with keyboard shortcuts, AI triage, and a fully customizable inbox you own.
24
+
25
+ </td>
26
+ <td width="33%" align="center" valign="top">
27
+
28
+ **Calendar**
29
+
30
+ <a href="https://agent-native.com/templates/calendar"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffb6c3b483ca24ab3b6c3a758aeceef4c?format=webp&width=800" alt="Calendar template" width="100%" /></a>
31
+
32
+ **AI-Native Google Calendar, Calendly**
33
+
34
+ Manage events, sync with Google Calendar, and share a public booking page with AI scheduling.
24
35
 
25
36
  </td>
26
- <td width="20%" align="center" valign="top">
37
+ <td width="33%" align="center" valign="top">
27
38
 
28
39
  **Content**
29
40
 
@@ -34,7 +45,9 @@ Connect any data source, prompt for any chart. Build reusable dashboards, not th
34
45
  Write and organize content with an agent that knows your brand and publishing workflow.
35
46
 
36
47
  </td>
37
- <td width="20%" align="center" valign="top">
48
+ </tr>
49
+ <tr>
50
+ <td width="33%" align="center" valign="top">
38
51
 
39
52
  **Slides**
40
53
 
@@ -45,7 +58,7 @@ Write and organize content with an agent that knows your brand and publishing wo
45
58
  Generate and edit React-based presentations via prompt or point-and-click.
46
59
 
47
60
  </td>
48
- <td width="20%" align="center" valign="top">
61
+ <td width="33%" align="center" valign="top">
49
62
 
50
63
  **Video**
51
64
 
@@ -56,25 +69,18 @@ Generate and edit React-based presentations via prompt or point-and-click.
56
69
  Create and edit Remotion video compositions with agent assistance.
57
70
 
58
71
  </td>
59
- <td width="20%" align="center" valign="top">
72
+ <td width="33%" align="center" valign="top">
60
73
 
61
- **Calendar**
74
+ **Analytics**
62
75
 
63
- <a href="https://agent-native.com/templates/calendar"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7f5a10a8029b4895ad02276da0f5071b?format=webp&width=800" alt="Calendar template" width="100%" /></a>
76
+ <a href="https://agent-native.com/templates/analytics"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4933a80cc3134d7e874631f688be828a?format=webp&width=800" alt="Analytics template" width="100%" /></a>
64
77
 
65
- **AI-Native Google Calendar, Calendly**
78
+ **AI-Native Amplitude, Mixpanel**
66
79
 
67
- Manage events, sync with Google Calendar, and share a public booking page with AI scheduling.
80
+ Connect any data source, prompt for any chart. Build reusable dashboards, not throwaway Q&A.
68
81
 
69
82
  </td>
70
83
  </tr>
71
- <tr>
72
- <td align="center"><a href="https://agent-native.com/templates/analytics"><img src=".github/assets/launch-button.svg" alt="Launch Analytics" height="36" /></a></td>
73
- <td align="center"><a href="https://agent-native.com/templates/content"><img src=".github/assets/launch-button.svg" alt="Launch Content" height="36" /></a></td>
74
- <td align="center"><a href="https://agent-native.com/templates/slides"><img src=".github/assets/launch-button.svg" alt="Launch Slides" height="36" /></a></td>
75
- <td align="center"><a href="https://agent-native.com/templates/video"><img src=".github/assets/launch-button.svg" alt="Launch Video" height="36" /></a></td>
76
- <td align="center"><a href="https://agent-native.com/templates/calendar"><img src=".github/assets/launch-button.svg" alt="Launch Calendar" height="36" /></a></td>
77
- </tr>
78
84
  </table>
79
85
 
80
86
  Every template is forkable, open source, and designed to be customized. Try them with example data before connecting your own sources.
@@ -104,15 +110,42 @@ Agent-native apps follow five rules:
104
110
 
105
111
  Agent-native apps run inside a **harness** — a host that provides the AI agent alongside your app UI.
106
112
 
107
- | | Local / Open Source | Builder Cloud |
108
- |---|---|---|
109
- | **Run** | Claude Code CLI or any local harness | One-click launch from templates |
110
- | **Collaboration** | Solo | Real-time multiplayer |
111
- | **Features** | Full permissions, full control | Visual editing, roles & permissions |
112
- | **Best for** | Solo dev, local testing, OSS | Teams, production |
113
+ | | Local / Open Source | Builder Cloud |
114
+ | ----------------- | ------------------------------------ | ----------------------------------- |
115
+ | **Run** | Claude Code CLI or any local harness | One-click launch from templates |
116
+ | **Collaboration** | Solo | Real-time multiplayer |
117
+ | **Features** | Full permissions, full control | Visual editing, roles & permissions |
118
+ | **Best for** | Solo dev, local testing, OSS | Teams, production |
113
119
 
114
120
  Your app code is identical regardless of harness. Start local, go to cloud when you need teams.
115
121
 
122
+ ## Skills
123
+
124
+ Agent-native ships with built-in **skills** — structured guidance files in `.agents/skills/` that teach the AI agent how to work within the framework. Every new app created with `npx @agent-native/core create` includes them automatically.
125
+
126
+ | Skill | Purpose |
127
+ | --------------------- | -------------------------------------- |
128
+ | `files-as-database` | Store and read all state as files |
129
+ | `delegate-to-agent` | Route AI work through the agent chat |
130
+ | `scripts` | Create and run agent-callable scripts |
131
+ | `sse-file-watcher` | Keep the UI in sync via SSE |
132
+ | `self-modifying-code` | Safely edit app source and components |
133
+ | `create-skill` | Add new skills to the agent |
134
+ | `capture-learnings` | Record corrections and patterns |
135
+ | `frontend-design` | Build distinctive, production-grade UI |
136
+
137
+ ### Frontend Design Skill
138
+
139
+ The **`frontend-design`** skill (sourced from [Anthropic's skills library](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md)) is active across all templates and new apps. It guides the agent to produce visually striking, memorable interfaces — committing to a clear aesthetic direction rather than defaulting to generic AI-generated patterns.
140
+
141
+ Key principles it enforces:
142
+
143
+ - **Typography**: Distinctive, characterful font pairings — never Arial, Inter, or system defaults
144
+ - **Color**: Cohesive palettes with dominant colors and sharp accents
145
+ - **Motion**: High-impact animations and micro-interactions via CSS or Framer Motion
146
+ - **Spatial composition**: Asymmetry, overlap, and unexpected layouts over predictable grids
147
+ - **Backgrounds**: Gradient meshes, noise textures, and layered effects over flat solid colors
148
+
116
149
  ## Docs
117
150
 
118
151
  Full documentation at **[agent-native.com](https://agent-native.com)**.
@@ -0,0 +1,3 @@
1
+ import type { A2AConfig, AgentCard } from "./types.js";
2
+ export declare function generateAgentCard(config: A2AConfig, baseUrl: string): AgentCard;
3
+ //# sourceMappingURL=agent-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,GACd,SAAS,CA0BX"}
@@ -0,0 +1,26 @@
1
+ export function generateAgentCard(config, baseUrl) {
2
+ const card = {
3
+ name: config.name,
4
+ description: config.description,
5
+ url: baseUrl,
6
+ version: config.version ?? "1.0.0",
7
+ protocolVersion: "0.3",
8
+ capabilities: {
9
+ streaming: config.streaming ?? false,
10
+ pushNotifications: false,
11
+ stateTransitionHistory: true,
12
+ },
13
+ skills: config.skills,
14
+ };
15
+ if (config.apiKeyEnv) {
16
+ card.securitySchemes = {
17
+ apiKey: {
18
+ type: "http",
19
+ scheme: "bearer",
20
+ },
21
+ };
22
+ card.security = [{ apiKey: [] }];
23
+ }
24
+ return card;
25
+ }
26
+ //# sourceMappingURL=agent-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,OAAe;IAEf,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,EAAE,OAAO;QACZ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;QAClC,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;YACpC,iBAAiB,EAAE,KAAK;YACxB,sBAAsB,EAAE,IAAI;SAC7B;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG;YACrB,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { AgentCard, Message, Task } from "./types.js";
2
+ export declare class A2AClient {
3
+ private baseUrl;
4
+ private apiKey?;
5
+ constructor(baseUrl: string, apiKey?: string);
6
+ private headers;
7
+ private rpc;
8
+ getAgentCard(): Promise<AgentCard>;
9
+ send(message: Message, opts?: {
10
+ contextId?: string;
11
+ metadata?: Record<string, unknown>;
12
+ }): Promise<Task>;
13
+ stream(message: Message, opts?: {
14
+ contextId?: string;
15
+ metadata?: Record<string, unknown>;
16
+ }): AsyncGenerator<Task>;
17
+ }
18
+ /**
19
+ * One-shot convenience function: send a text message and get a text response.
20
+ */
21
+ export declare function callAgent(url: string, text: string, opts?: {
22
+ apiKey?: string;
23
+ contextId?: string;
24
+ }): Promise<string>;
25
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,OAAO,EACP,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAK5C,OAAO,CAAC,OAAO;YAQD,GAAG;IAyBX,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAQlC,IAAI,CACR,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,OAAO,CAAC,IAAI,CAAC;IAgBT,MAAM,CACX,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,cAAc,CAAC,IAAI,CAAC;CAsDxB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
@@ -0,0 +1,119 @@
1
+ export class A2AClient {
2
+ baseUrl;
3
+ apiKey;
4
+ constructor(baseUrl, apiKey) {
5
+ this.baseUrl = baseUrl.replace(/\/$/, "");
6
+ this.apiKey = apiKey;
7
+ }
8
+ headers() {
9
+ const h = { "Content-Type": "application/json" };
10
+ if (this.apiKey) {
11
+ h["Authorization"] = `Bearer ${this.apiKey}`;
12
+ }
13
+ return h;
14
+ }
15
+ async rpc(method, params) {
16
+ const body = {
17
+ jsonrpc: "2.0",
18
+ id: Date.now(),
19
+ method,
20
+ params,
21
+ };
22
+ const res = await fetch(`${this.baseUrl}/a2a`, {
23
+ method: "POST",
24
+ headers: this.headers(),
25
+ body: JSON.stringify(body),
26
+ });
27
+ if (!res.ok) {
28
+ const text = await res.text();
29
+ throw new Error(`A2A request failed (${res.status}): ${text}`);
30
+ }
31
+ return res.json();
32
+ }
33
+ async getAgentCard() {
34
+ const res = await fetch(`${this.baseUrl}/.well-known/agent-card.json`);
35
+ if (!res.ok) {
36
+ throw new Error(`Failed to fetch agent card (${res.status})`);
37
+ }
38
+ return res.json();
39
+ }
40
+ async send(message, opts) {
41
+ const response = await this.rpc("message/send", {
42
+ message,
43
+ contextId: opts?.contextId,
44
+ metadata: opts?.metadata,
45
+ });
46
+ if (response.error) {
47
+ throw new Error(`A2A error (${response.error.code}): ${response.error.message}`);
48
+ }
49
+ return response.result;
50
+ }
51
+ async *stream(message, opts) {
52
+ const body = {
53
+ jsonrpc: "2.0",
54
+ id: Date.now(),
55
+ method: "message/stream",
56
+ params: {
57
+ message,
58
+ contextId: opts?.contextId,
59
+ metadata: opts?.metadata,
60
+ },
61
+ };
62
+ const res = await fetch(`${this.baseUrl}/a2a`, {
63
+ method: "POST",
64
+ headers: this.headers(),
65
+ body: JSON.stringify(body),
66
+ });
67
+ if (!res.ok) {
68
+ const text = await res.text();
69
+ throw new Error(`A2A stream failed (${res.status}): ${text}`);
70
+ }
71
+ const reader = res.body?.getReader();
72
+ if (!reader)
73
+ throw new Error("No response body");
74
+ const decoder = new TextDecoder();
75
+ let buffer = "";
76
+ while (true) {
77
+ const { done, value } = await reader.read();
78
+ if (done)
79
+ break;
80
+ buffer += decoder.decode(value, { stream: true });
81
+ const lines = buffer.split("\n");
82
+ buffer = lines.pop() ?? "";
83
+ for (const line of lines) {
84
+ if (!line.startsWith("data: "))
85
+ continue;
86
+ const json = line.slice(6).trim();
87
+ if (!json)
88
+ continue;
89
+ const response = JSON.parse(json);
90
+ if (response.error) {
91
+ throw new Error(`A2A error (${response.error.code}): ${response.error.message}`);
92
+ }
93
+ if (response.result) {
94
+ yield response.result;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * One-shot convenience function: send a text message and get a text response.
102
+ */
103
+ export async function callAgent(url, text, opts) {
104
+ const client = new A2AClient(url, opts?.apiKey);
105
+ const task = await client.send({
106
+ role: "user",
107
+ parts: [{ type: "text", text }],
108
+ }, { contextId: opts?.contextId });
109
+ // Extract text from the response
110
+ const responseMessage = task.status.message;
111
+ if (responseMessage) {
112
+ const textParts = responseMessage.parts
113
+ .filter((p) => p.type === "text")
114
+ .map((p) => p.text);
115
+ return textParts.join("\n");
116
+ }
117
+ return "";
118
+ }
119
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Request, Response } from "express";
2
+ import type { A2AConfig } from "./types.js";
3
+ export declare function handleJsonRpc(req: Request, res: Response, config: A2AConfig): Promise<void>;
4
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/a2a/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EACV,SAAS,EAQV,MAAM,YAAY,CAAC;AA4QpB,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,252 @@
1
+ import { createTask, getTask, updateTask } from "./task-store.js";
2
+ import { agentChat } from "../shared/agent-chat.js";
3
+ /**
4
+ * Default A2A handler that delegates to agentChat.call().
5
+ * Used when no custom handler is provided in A2AConfig.
6
+ */
7
+ const defaultHandler = async (message, context) => {
8
+ // Extract text from message parts
9
+ const text = message.parts
10
+ .filter((p) => p.type === "text")
11
+ .map((p) => p.text)
12
+ .join("\n");
13
+ if (!text) {
14
+ return {
15
+ message: {
16
+ role: "agent",
17
+ parts: [{ type: "text", text: "No text content in message" }],
18
+ },
19
+ };
20
+ }
21
+ const result = await agentChat.call(text);
22
+ const artifacts = [];
23
+ if (result.filesChanged.length > 0) {
24
+ artifacts.push({
25
+ name: "files-changed",
26
+ description: "Files modified by the agent",
27
+ parts: [{ type: "data", data: { files: result.filesChanged } }],
28
+ });
29
+ }
30
+ return {
31
+ message: {
32
+ role: "agent",
33
+ parts: [
34
+ { type: "text", text: result.response },
35
+ ...(result.warnings?.length
36
+ ? [
37
+ {
38
+ type: "text",
39
+ text: `\n\nWarnings:\n${result.warnings.join("\n")}`,
40
+ },
41
+ ]
42
+ : []),
43
+ ],
44
+ },
45
+ artifacts: artifacts.length > 0 ? artifacts : undefined,
46
+ };
47
+ };
48
+ function getHandler(config) {
49
+ return config.handler ?? defaultHandler;
50
+ }
51
+ function jsonRpcError(id, code, message) {
52
+ return { jsonrpc: "2.0", id, error: { code, message } };
53
+ }
54
+ function jsonRpcResult(id, result) {
55
+ return { jsonrpc: "2.0", id, result };
56
+ }
57
+ function makeHandlerContext(taskId, contextId) {
58
+ const artifacts = [];
59
+ const context = {
60
+ taskId,
61
+ contextId,
62
+ writeArtifact(name, content, mimeType) {
63
+ const artifact = {
64
+ name,
65
+ parts: mimeType
66
+ ? [
67
+ {
68
+ type: "file",
69
+ file: {
70
+ name,
71
+ mimeType,
72
+ bytes: Buffer.from(content).toString("base64"),
73
+ },
74
+ },
75
+ ]
76
+ : [{ type: "text", text: content }],
77
+ };
78
+ artifacts.push(artifact);
79
+ return name;
80
+ },
81
+ };
82
+ return { context, artifacts };
83
+ }
84
+ async function handleSend(params, config) {
85
+ const message = params.message;
86
+ if (!message || !message.role || !Array.isArray(message.parts)) {
87
+ return {
88
+ ...jsonRpcError(0, -32602, "Invalid params: message with role and parts required"),
89
+ _id: 0,
90
+ };
91
+ }
92
+ const contextId = params.contextId;
93
+ const task = createTask(message, contextId);
94
+ updateTask(task.id, { state: "working" });
95
+ const { context, artifacts } = makeHandlerContext(task.id, contextId);
96
+ try {
97
+ const result = getHandler(config)(message, context);
98
+ // Check if it's an async generator
99
+ if (result &&
100
+ typeof result === "object" &&
101
+ Symbol.asyncIterator in result) {
102
+ // For non-streaming send, collect all messages
103
+ let lastMessage;
104
+ for await (const msg of result) {
105
+ lastMessage = msg;
106
+ }
107
+ const allArtifacts = [...artifacts];
108
+ const updated = updateTask(task.id, {
109
+ state: "completed",
110
+ message: lastMessage,
111
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
112
+ });
113
+ return { ...jsonRpcResult(0, updated), _id: 0 };
114
+ }
115
+ // Promise-based handler
116
+ const handlerResult = await result;
117
+ const allArtifacts = [...artifacts, ...(handlerResult.artifacts ?? [])];
118
+ const updated = updateTask(task.id, {
119
+ state: "completed",
120
+ message: handlerResult.message,
121
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
122
+ });
123
+ return { ...jsonRpcResult(0, updated), _id: 0 };
124
+ }
125
+ catch (err) {
126
+ updateTask(task.id, {
127
+ state: "failed",
128
+ message: {
129
+ role: "agent",
130
+ parts: [{ type: "text", text: err.message ?? "Handler failed" }],
131
+ },
132
+ });
133
+ return {
134
+ ...jsonRpcError(0, -32000, err.message ?? "Handler failed"),
135
+ _id: 0,
136
+ };
137
+ }
138
+ }
139
+ async function handleStream(params, config, res) {
140
+ const message = params.message;
141
+ if (!message || !message.role || !Array.isArray(message.parts)) {
142
+ res.write(`data: ${JSON.stringify(jsonRpcError(0, -32602, "Invalid params"))}\n\n`);
143
+ res.end();
144
+ return;
145
+ }
146
+ const contextId = params.contextId;
147
+ const task = createTask(message, contextId);
148
+ updateTask(task.id, { state: "working" });
149
+ const { context, artifacts } = makeHandlerContext(task.id, contextId);
150
+ try {
151
+ const result = getHandler(config)(message, context);
152
+ if (result &&
153
+ typeof result === "object" &&
154
+ Symbol.asyncIterator in result) {
155
+ for await (const msg of result) {
156
+ const intermediate = updateTask(task.id, {
157
+ state: "working",
158
+ message: msg,
159
+ });
160
+ res.write(`data: ${JSON.stringify(jsonRpcResult(0, intermediate))}\n\n`);
161
+ }
162
+ }
163
+ else {
164
+ const handlerResult = await result;
165
+ const allArtifacts = [...artifacts, ...(handlerResult.artifacts ?? [])];
166
+ const updated = updateTask(task.id, {
167
+ state: "completed",
168
+ message: handlerResult.message,
169
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
170
+ });
171
+ res.write(`data: ${JSON.stringify(jsonRpcResult(0, updated))}\n\n`);
172
+ res.end();
173
+ return;
174
+ }
175
+ const allArtifacts = [...artifacts];
176
+ const final = updateTask(task.id, {
177
+ state: "completed",
178
+ artifacts: allArtifacts.length > 0 ? allArtifacts : undefined,
179
+ });
180
+ res.write(`data: ${JSON.stringify(jsonRpcResult(0, final))}\n\n`);
181
+ }
182
+ catch (err) {
183
+ updateTask(task.id, { state: "failed" });
184
+ res.write(`data: ${JSON.stringify(jsonRpcError(0, -32000, err.message ?? "Handler failed"))}\n\n`);
185
+ }
186
+ res.end();
187
+ }
188
+ function handleGet(params) {
189
+ const id = params.id;
190
+ if (!id) {
191
+ return jsonRpcError(0, -32602, "Invalid params: id required");
192
+ }
193
+ const task = getTask(id);
194
+ if (!task) {
195
+ return jsonRpcError(0, -32001, "Task not found");
196
+ }
197
+ return jsonRpcResult(0, task);
198
+ }
199
+ function handleCancel(params) {
200
+ const id = params.id;
201
+ if (!id) {
202
+ return jsonRpcError(0, -32602, "Invalid params: id required");
203
+ }
204
+ const task = updateTask(id, { state: "canceled" });
205
+ if (!task) {
206
+ return jsonRpcError(0, -32001, "Task not found");
207
+ }
208
+ return jsonRpcResult(0, task);
209
+ }
210
+ export async function handleJsonRpc(req, res, config) {
211
+ const body = req.body;
212
+ if (!body || body.jsonrpc !== "2.0" || !body.method) {
213
+ res
214
+ .status(400)
215
+ .json(jsonRpcError(body?.id ?? null, -32600, "Invalid JSON-RPC request"));
216
+ return;
217
+ }
218
+ const params = body.params ?? {};
219
+ const id = body.id;
220
+ switch (body.method) {
221
+ case "message/send": {
222
+ const result = await handleSend(params, config);
223
+ const { _id, ...response } = result;
224
+ res.json({ ...response, id });
225
+ return;
226
+ }
227
+ case "message/stream": {
228
+ if (!config.streaming) {
229
+ res.json(jsonRpcError(id, -32601, "Streaming not supported"));
230
+ return;
231
+ }
232
+ res.setHeader("Content-Type", "text/event-stream");
233
+ res.setHeader("Cache-Control", "no-cache");
234
+ res.setHeader("Connection", "keep-alive");
235
+ await handleStream(params, config, res);
236
+ return;
237
+ }
238
+ case "tasks/get": {
239
+ const result = handleGet(params);
240
+ res.json({ ...result, id });
241
+ return;
242
+ }
243
+ case "tasks/cancel": {
244
+ const result = handleCancel(params);
245
+ res.json({ ...result, id });
246
+ return;
247
+ }
248
+ default:
249
+ res.json(jsonRpcError(id, -32601, `Method not found: ${body.method}`));
250
+ }
251
+ }
252
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/a2a/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { enableA2A } from "./server.js";
2
+ export { A2AClient, callAgent } from "./client.js";
3
+ export type { A2AConfig, A2AHandler, A2AHandlerContext, A2AHandlerResult, AgentCard, AgentSkill, AgentCapabilities, Task, TaskState, TaskStatus, Message, Part, TextPart, FilePart, DataPart, Artifact, JsonRpcRequest, JsonRpcResponse, } from "./types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,YAAY,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Server
2
+ export { enableA2A } from "./server.js";
3
+ // Client
4
+ export { A2AClient, callAgent } from "./client.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Request, Response, NextFunction } from "express";
2
+ export declare function createAuthMiddleware(apiKeyEnv: string | undefined): (req: Request, res: Response, next: NextFunction) => void;
3
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/a2a/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG/D,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IACxD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAqC/D"}