@adonis-agora/agent 0.76.2 → 0.77.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 (287) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/providers/agent_provider.d.ts.map +1 -1
  3. package/dist/providers/agent_provider.js +9 -0
  4. package/dist/providers/agent_provider.js.map +1 -1
  5. package/dist/providers/mcp_provider.d.ts.map +1 -1
  6. package/dist/providers/mcp_provider.js +46 -10
  7. package/dist/providers/mcp_provider.js.map +1 -1
  8. package/dist/providers/poppy_connections_provider.d.ts +17 -0
  9. package/dist/providers/poppy_connections_provider.d.ts.map +1 -0
  10. package/dist/providers/poppy_connections_provider.js +186 -0
  11. package/dist/providers/poppy_connections_provider.js.map +1 -0
  12. package/dist/providers/poppy_provider.d.ts +12 -0
  13. package/dist/providers/poppy_provider.d.ts.map +1 -0
  14. package/dist/providers/poppy_provider.js +159 -0
  15. package/dist/providers/poppy_provider.js.map +1 -0
  16. package/dist/src/a2a/handler.d.ts.map +1 -1
  17. package/dist/src/a2a/handler.js +4 -2
  18. package/dist/src/a2a/handler.js.map +1 -1
  19. package/dist/src/a2a/turn.d.ts +27 -4
  20. package/dist/src/a2a/turn.d.ts.map +1 -1
  21. package/dist/src/a2a/turn.js +66 -12
  22. package/dist/src/a2a/turn.js.map +1 -1
  23. package/dist/src/action-proposal-approval.d.ts.map +1 -1
  24. package/dist/src/action-proposal-approval.js +3 -3
  25. package/dist/src/action-proposal-approval.js.map +1 -1
  26. package/dist/src/action-proposal-listeners.d.ts +12 -0
  27. package/dist/src/action-proposal-listeners.d.ts.map +1 -0
  28. package/dist/src/action-proposal-listeners.js +27 -0
  29. package/dist/src/action-proposal-listeners.js.map +1 -0
  30. package/dist/src/action-proposal-receipt.d.ts +4 -0
  31. package/dist/src/action-proposal-receipt.d.ts.map +1 -1
  32. package/dist/src/action-proposal-receipt.js +3 -1
  33. package/dist/src/action-proposal-receipt.js.map +1 -1
  34. package/dist/src/action-proposal-worker.d.ts +6 -1
  35. package/dist/src/action-proposal-worker.d.ts.map +1 -1
  36. package/dist/src/action-proposal-worker.js +10 -1
  37. package/dist/src/action-proposal-worker.js.map +1 -1
  38. package/dist/src/agent-loop.d.ts.map +1 -1
  39. package/dist/src/agent-loop.js +8 -5
  40. package/dist/src/agent-loop.js.map +1 -1
  41. package/dist/src/channels/handler.d.ts +10 -0
  42. package/dist/src/channels/handler.d.ts.map +1 -1
  43. package/dist/src/channels/handler.js +44 -1
  44. package/dist/src/channels/handler.js.map +1 -1
  45. package/dist/src/channels/texts.d.ts +9 -0
  46. package/dist/src/channels/texts.d.ts.map +1 -1
  47. package/dist/src/channels/texts.js +4 -0
  48. package/dist/src/channels/texts.js.map +1 -1
  49. package/dist/src/client/sse.d.ts.map +1 -1
  50. package/dist/src/client/sse.js +3 -0
  51. package/dist/src/client/sse.js.map +1 -1
  52. package/dist/src/define_config.d.ts +3 -0
  53. package/dist/src/define_config.d.ts.map +1 -1
  54. package/dist/src/define_config.js.map +1 -1
  55. package/dist/src/genui/kit/styles.d.ts.map +1 -1
  56. package/dist/src/genui/kit/styles.js +11 -2
  57. package/dist/src/genui/kit/styles.js.map +1 -1
  58. package/dist/src/genui/sandbox-styles.js +1 -1
  59. package/dist/src/genui/sandbox-styles.js.map +1 -1
  60. package/dist/src/genui/sandbox-theme.d.ts +6 -1
  61. package/dist/src/genui/sandbox-theme.d.ts.map +1 -1
  62. package/dist/src/genui/sandbox-theme.js +9 -5
  63. package/dist/src/genui/sandbox-theme.js.map +1 -1
  64. package/dist/src/genui/sandbox.d.ts.map +1 -1
  65. package/dist/src/genui/sandbox.js +1 -0
  66. package/dist/src/genui/sandbox.js.map +1 -1
  67. package/dist/src/index.d.ts +2 -1
  68. package/dist/src/index.d.ts.map +1 -1
  69. package/dist/src/index.js +2 -1
  70. package/dist/src/index.js.map +1 -1
  71. package/dist/src/mcp/auth.d.ts +17 -0
  72. package/dist/src/mcp/auth.d.ts.map +1 -1
  73. package/dist/src/mcp/auth.js +56 -1
  74. package/dist/src/mcp/auth.js.map +1 -1
  75. package/dist/src/mcp/discovery.d.ts +13 -2
  76. package/dist/src/mcp/discovery.d.ts.map +1 -1
  77. package/dist/src/mcp/discovery.js +17 -2
  78. package/dist/src/mcp/discovery.js.map +1 -1
  79. package/dist/src/mcp/index.d.ts +1 -1
  80. package/dist/src/mcp/index.d.ts.map +1 -1
  81. package/dist/src/mcp/index.js.map +1 -1
  82. package/dist/src/mcp/scope.d.ts +13 -0
  83. package/dist/src/mcp/scope.d.ts.map +1 -0
  84. package/dist/src/mcp/scope.js +24 -0
  85. package/dist/src/mcp/scope.js.map +1 -0
  86. package/dist/src/mcp/server.d.ts +6 -1
  87. package/dist/src/mcp/server.d.ts.map +1 -1
  88. package/dist/src/mcp/server.js +1 -1
  89. package/dist/src/mcp/server.js.map +1 -1
  90. package/dist/src/poppy/auth.d.ts +77 -0
  91. package/dist/src/poppy/auth.d.ts.map +1 -0
  92. package/dist/src/poppy/auth.js +16 -0
  93. package/dist/src/poppy/auth.js.map +1 -0
  94. package/dist/src/poppy/conversations.d.ts +249 -0
  95. package/dist/src/poppy/conversations.d.ts.map +1 -0
  96. package/dist/src/poppy/conversations.js +1017 -0
  97. package/dist/src/poppy/conversations.js.map +1 -0
  98. package/dist/src/poppy/define_config.d.ts +98 -0
  99. package/dist/src/poppy/define_config.d.ts.map +1 -0
  100. package/dist/src/poppy/define_config.js +11 -0
  101. package/dist/src/poppy/define_config.js.map +1 -0
  102. package/dist/src/poppy/endpoints.d.ts +25 -0
  103. package/dist/src/poppy/endpoints.d.ts.map +1 -0
  104. package/dist/src/poppy/endpoints.js +31 -0
  105. package/dist/src/poppy/endpoints.js.map +1 -0
  106. package/dist/src/poppy/handler.d.ts +80 -0
  107. package/dist/src/poppy/handler.d.ts.map +1 -0
  108. package/dist/src/poppy/handler.js +362 -0
  109. package/dist/src/poppy/handler.js.map +1 -0
  110. package/dist/src/poppy/index.d.ts +17 -0
  111. package/dist/src/poppy/index.d.ts.map +1 -0
  112. package/dist/src/poppy/index.js +9 -0
  113. package/dist/src/poppy/index.js.map +1 -0
  114. package/dist/src/poppy/protocol.d.ts +132 -0
  115. package/dist/src/poppy/protocol.d.ts.map +1 -0
  116. package/dist/src/poppy/protocol.js +178 -0
  117. package/dist/src/poppy/protocol.js.map +1 -0
  118. package/dist/src/poppy/redis-store.d.ts +27 -0
  119. package/dist/src/poppy/redis-store.d.ts.map +1 -0
  120. package/dist/src/poppy/redis-store.js +148 -0
  121. package/dist/src/poppy/redis-store.js.map +1 -0
  122. package/dist/src/poppy/runtime.d.ts +6 -0
  123. package/dist/src/poppy/runtime.d.ts.map +1 -0
  124. package/dist/src/poppy/runtime.js +12 -0
  125. package/dist/src/poppy/runtime.js.map +1 -0
  126. package/dist/src/poppy/server_middleware.d.ts +11 -0
  127. package/dist/src/poppy/server_middleware.d.ts.map +1 -0
  128. package/dist/src/poppy/server_middleware.js +16 -0
  129. package/dist/src/poppy/server_middleware.js.map +1 -0
  130. package/dist/src/poppy/store.d.ts +207 -0
  131. package/dist/src/poppy/store.d.ts.map +1 -0
  132. package/dist/src/poppy/store.js +444 -0
  133. package/dist/src/poppy/store.js.map +1 -0
  134. package/dist/src/poppy-client/api.d.ts +36 -0
  135. package/dist/src/poppy-client/api.d.ts.map +1 -0
  136. package/dist/src/poppy-client/api.js +77 -0
  137. package/dist/src/poppy-client/api.js.map +1 -0
  138. package/dist/src/poppy-client/bin/poppy-agent.d.ts +3 -0
  139. package/dist/src/poppy-client/bin/poppy-agent.d.ts.map +1 -0
  140. package/dist/src/poppy-client/bin/poppy-agent.js +9 -0
  141. package/dist/src/poppy-client/bin/poppy-agent.js.map +1 -0
  142. package/dist/src/poppy-client/browser.d.ts +24 -0
  143. package/dist/src/poppy-client/browser.d.ts.map +1 -0
  144. package/dist/src/poppy-client/browser.js +83 -0
  145. package/dist/src/poppy-client/browser.js.map +1 -0
  146. package/dist/src/poppy-client/cli/main.d.ts +2 -0
  147. package/dist/src/poppy-client/cli/main.d.ts.map +1 -0
  148. package/dist/src/poppy-client/cli/main.js +776 -0
  149. package/dist/src/poppy-client/cli/main.js.map +1 -0
  150. package/dist/src/poppy-client/cli/prompt.d.ts +13 -0
  151. package/dist/src/poppy-client/cli/prompt.d.ts.map +1 -0
  152. package/dist/src/poppy-client/cli/prompt.js +50 -0
  153. package/dist/src/poppy-client/cli/prompt.js.map +1 -0
  154. package/dist/src/poppy-client/company.d.ts +87 -0
  155. package/dist/src/poppy-client/company.d.ts.map +1 -0
  156. package/dist/src/poppy-client/company.js +336 -0
  157. package/dist/src/poppy-client/company.js.map +1 -0
  158. package/dist/src/poppy-client/conversations.d.ts +89 -0
  159. package/dist/src/poppy-client/conversations.d.ts.map +1 -0
  160. package/dist/src/poppy-client/conversations.js +332 -0
  161. package/dist/src/poppy-client/conversations.js.map +1 -0
  162. package/dist/src/poppy-client/discovery.d.ts +41 -0
  163. package/dist/src/poppy-client/discovery.d.ts.map +1 -0
  164. package/dist/src/poppy-client/discovery.js +217 -0
  165. package/dist/src/poppy-client/discovery.js.map +1 -0
  166. package/dist/src/poppy-client/dpop.d.ts +19 -0
  167. package/dist/src/poppy-client/dpop.d.ts.map +1 -0
  168. package/dist/src/poppy-client/dpop.js +43 -0
  169. package/dist/src/poppy-client/dpop.js.map +1 -0
  170. package/dist/src/poppy-client/errors.d.ts +50 -0
  171. package/dist/src/poppy-client/errors.d.ts.map +1 -0
  172. package/dist/src/poppy-client/errors.js +55 -0
  173. package/dist/src/poppy-client/errors.js.map +1 -0
  174. package/dist/src/poppy-client/http.d.ts +40 -0
  175. package/dist/src/poppy-client/http.d.ts.map +1 -0
  176. package/dist/src/poppy-client/http.js +95 -0
  177. package/dist/src/poppy-client/http.js.map +1 -0
  178. package/dist/src/poppy-client/identity.d.ts +61 -0
  179. package/dist/src/poppy-client/identity.d.ts.map +1 -0
  180. package/dist/src/poppy-client/identity.js +111 -0
  181. package/dist/src/poppy-client/identity.js.map +1 -0
  182. package/dist/src/poppy-client/identity_server.d.ts +29 -0
  183. package/dist/src/poppy-client/identity_server.d.ts.map +1 -0
  184. package/dist/src/poppy-client/identity_server.js +84 -0
  185. package/dist/src/poppy-client/identity_server.js.map +1 -0
  186. package/dist/src/poppy-client/index.d.ts +19 -0
  187. package/dist/src/poppy-client/index.d.ts.map +1 -0
  188. package/dist/src/poppy-client/index.js +18 -0
  189. package/dist/src/poppy-client/index.js.map +1 -0
  190. package/dist/src/poppy-client/keys.d.ts +13 -0
  191. package/dist/src/poppy-client/keys.d.ts.map +1 -0
  192. package/dist/src/poppy-client/keys.js +31 -0
  193. package/dist/src/poppy-client/keys.js.map +1 -0
  194. package/dist/src/poppy-client/llm.d.ts +31 -0
  195. package/dist/src/poppy-client/llm.d.ts.map +1 -0
  196. package/dist/src/poppy-client/llm.js +230 -0
  197. package/dist/src/poppy-client/llm.js.map +1 -0
  198. package/dist/src/poppy-client/mcp.d.ts +16 -0
  199. package/dist/src/poppy-client/mcp.d.ts.map +1 -0
  200. package/dist/src/poppy-client/mcp.js +57 -0
  201. package/dist/src/poppy-client/mcp.js.map +1 -0
  202. package/dist/src/poppy-client/open_url.d.ts +3 -0
  203. package/dist/src/poppy-client/open_url.d.ts.map +1 -0
  204. package/dist/src/poppy-client/open_url.js +13 -0
  205. package/dist/src/poppy-client/open_url.js.map +1 -0
  206. package/dist/src/poppy-client/signin.d.ts +59 -0
  207. package/dist/src/poppy-client/signin.d.ts.map +1 -0
  208. package/dist/src/poppy-client/signin.js +210 -0
  209. package/dist/src/poppy-client/signin.js.map +1 -0
  210. package/dist/src/poppy-client/sse.d.ts +15 -0
  211. package/dist/src/poppy-client/sse.d.ts.map +1 -0
  212. package/dist/src/poppy-client/sse.js +74 -0
  213. package/dist/src/poppy-client/sse.js.map +1 -0
  214. package/dist/src/poppy-client/store.d.ts +89 -0
  215. package/dist/src/poppy-client/store.d.ts.map +1 -0
  216. package/dist/src/poppy-client/store.js +79 -0
  217. package/dist/src/poppy-client/store.js.map +1 -0
  218. package/dist/src/poppy-client/token_client.d.ts +69 -0
  219. package/dist/src/poppy-client/token_client.d.ts.map +1 -0
  220. package/dist/src/poppy-client/token_client.js +154 -0
  221. package/dist/src/poppy-client/token_client.js.map +1 -0
  222. package/dist/src/poppy-client/types.d.ts +184 -0
  223. package/dist/src/poppy-client/types.d.ts.map +1 -0
  224. package/dist/src/poppy-client/types.js +8 -0
  225. package/dist/src/poppy-client/types.js.map +1 -0
  226. package/dist/src/poppy-client/util.d.ts +42 -0
  227. package/dist/src/poppy-client/util.d.ts.map +1 -0
  228. package/dist/src/poppy-client/util.js +122 -0
  229. package/dist/src/poppy-client/util.js.map +1 -0
  230. package/dist/src/poppy-connections/config.d.ts +134 -0
  231. package/dist/src/poppy-connections/config.d.ts.map +1 -0
  232. package/dist/src/poppy-connections/config.js +44 -0
  233. package/dist/src/poppy-connections/config.js.map +1 -0
  234. package/dist/src/poppy-connections/crypto.d.ts +12 -0
  235. package/dist/src/poppy-connections/crypto.d.ts.map +1 -0
  236. package/dist/src/poppy-connections/crypto.js +36 -0
  237. package/dist/src/poppy-connections/crypto.js.map +1 -0
  238. package/dist/src/poppy-connections/http.d.ts +63 -0
  239. package/dist/src/poppy-connections/http.d.ts.map +1 -0
  240. package/dist/src/poppy-connections/http.js +217 -0
  241. package/dist/src/poppy-connections/http.js.map +1 -0
  242. package/dist/src/poppy-connections/index.d.ts +14 -0
  243. package/dist/src/poppy-connections/index.d.ts.map +1 -0
  244. package/dist/src/poppy-connections/index.js +17 -0
  245. package/dist/src/poppy-connections/index.js.map +1 -0
  246. package/dist/src/poppy-connections/resume.d.ts +46 -0
  247. package/dist/src/poppy-connections/resume.d.ts.map +1 -0
  248. package/dist/src/poppy-connections/resume.js +109 -0
  249. package/dist/src/poppy-connections/resume.js.map +1 -0
  250. package/dist/src/poppy-connections/runtime.d.ts +4 -0
  251. package/dist/src/poppy-connections/runtime.d.ts.map +1 -0
  252. package/dist/src/poppy-connections/runtime.js +9 -0
  253. package/dist/src/poppy-connections/runtime.js.map +1 -0
  254. package/dist/src/poppy-connections/server_middleware.d.ts +10 -0
  255. package/dist/src/poppy-connections/server_middleware.d.ts.map +1 -0
  256. package/dist/src/poppy-connections/server_middleware.js +14 -0
  257. package/dist/src/poppy-connections/server_middleware.js.map +1 -0
  258. package/dist/src/poppy-connections/service.d.ts +179 -0
  259. package/dist/src/poppy-connections/service.d.ts.map +1 -0
  260. package/dist/src/poppy-connections/service.js +648 -0
  261. package/dist/src/poppy-connections/service.js.map +1 -0
  262. package/dist/src/poppy-connections/store.d.ts +139 -0
  263. package/dist/src/poppy-connections/store.d.ts.map +1 -0
  264. package/dist/src/poppy-connections/store.js +260 -0
  265. package/dist/src/poppy-connections/store.js.map +1 -0
  266. package/dist/src/poppy-connections/tools.d.ts +65 -0
  267. package/dist/src/poppy-connections/tools.d.ts.map +1 -0
  268. package/dist/src/poppy-connections/tools.js +574 -0
  269. package/dist/src/poppy-connections/tools.js.map +1 -0
  270. package/dist/src/react/core/approvals/use-action-proposals.d.ts +6 -1
  271. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -1
  272. package/dist/src/react/core/approvals/use-action-proposals.js +18 -3
  273. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -1
  274. package/dist/src/react/core/use-agent-chat.d.ts +6 -0
  275. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -1
  276. package/dist/src/react/core/use-agent-chat.js +47 -1
  277. package/dist/src/react/core/use-agent-chat.js.map +1 -1
  278. package/dist/src/tool-presentation.d.ts +6 -0
  279. package/dist/src/tool-presentation.d.ts.map +1 -1
  280. package/dist/src/tool-presentation.js +1 -0
  281. package/dist/src/tool-presentation.js.map +1 -1
  282. package/dist/src/types.d.ts +6 -0
  283. package/dist/src/types.d.ts.map +1 -1
  284. package/package.json +41 -2
  285. package/skills/agent-governance/SKILL.md +13 -2
  286. package/skills/agent-personas-agents/SKILL.md +1 -1
  287. package/skills/agent-tools/SKILL.md +20 -3
@@ -0,0 +1,89 @@
1
+ import type { CompanyClient } from './company.js';
2
+ import type { ConversationEvent, ConversationState, EventsPage, OutgoingMessage, PoppyProtocolEntry, StartConversationResponse, TextDelta } from './types.js';
3
+ /** A fresh message ID: URL-safe base64, prefixed, unique for the User (7.2, 7.3). */
4
+ export declare function newMessageId(): string;
5
+ /** Picks the `poppy` conversation protocol entry (7.1); unknown types are skipped. */
6
+ export declare function poppyProtocol(company: CompanyClient): PoppyProtocolEntry | undefined;
7
+ export type StreamItem = {
8
+ kind: 'event';
9
+ event: ConversationEvent;
10
+ } | {
11
+ kind: 'delta';
12
+ delta: TextDelta;
13
+ }
14
+ /** The reader reconnected; any provisional `text-delta` pieces must be dropped (7.6). */
15
+ | {
16
+ kind: 'reconnected';
17
+ }
18
+ /** `cursor_expired`: the read restarted from the beginning; part of history is missing. */
19
+ | {
20
+ kind: 'history_gap';
21
+ };
22
+ export interface FollowOptions {
23
+ signal?: AbortSignal | undefined;
24
+ /** Stop once the conversation is `idle`, `queued` or `closed` after this many events. */
25
+ untilSettled?: boolean | undefined;
26
+ /** Prefer SSE (default). When the Company answers with JSON, long-polling is used. */
27
+ stream?: boolean | undefined;
28
+ /** Long-poll `wait` seconds. */
29
+ wait?: number | undefined;
30
+ }
31
+ /**
32
+ * Client for one Company's Poppy conversation endpoint (section 7). Every request carries the
33
+ * Session Token with a DPoP proof (7.2), through `CompanyClient.fetch`.
34
+ */
35
+ export declare class ConversationClient {
36
+ readonly company: CompanyClient;
37
+ readonly endpoint: string;
38
+ private readonly resource?;
39
+ /** Narrower scope for every request of this client (4.3 "Narrower tokens"), when set. */
40
+ private readonly scope?;
41
+ constructor(company: CompanyClient, entry?: PoppyProtocolEntry | undefined, options?: {
42
+ scope?: string | undefined;
43
+ });
44
+ private url;
45
+ /**
46
+ * POST with retries on network errors / 5xx. Safe because the message ID makes the request
47
+ * idempotent: the Company returns the original response for a repeat (7.3).
48
+ */
49
+ private post;
50
+ private remember;
51
+ /** Starts a conversation (7.3), or a Direct Conversation with `parentConversationId` (7.10). */
52
+ start(message: OutgoingMessage, opts?: {
53
+ parentConversationId?: string | undefined;
54
+ wait?: number | undefined;
55
+ cursor?: string | undefined;
56
+ }): Promise<StartConversationResponse>;
57
+ /** Sends another message (7.3). Returns 202 with `status`/`responder` (+ events with `wait`). */
58
+ send(id: string, message: OutgoingMessage, opts?: {
59
+ wait?: number | undefined;
60
+ cursor?: string | undefined;
61
+ }): Promise<StartConversationResponse>;
62
+ /** One read of events after `cursor` (7.5). */
63
+ read(id: string, opts?: {
64
+ cursor?: string | undefined;
65
+ wait?: number | undefined;
66
+ }): Promise<EventsPage>;
67
+ /** Asks for a person at the Company (7.9). */
68
+ handoff(id: string): Promise<ConversationState>;
69
+ /** Closes the conversation (7.12). */
70
+ close(id: string): Promise<ConversationState>;
71
+ /**
72
+ * Reads (long-polling, JSON) until the Company is no longer `working` and `has_more` is
73
+ * false, returning the new events. Used by the autonomous `ask` mode.
74
+ */
75
+ collect(id: string, opts?: {
76
+ timeoutMs?: number | undefined;
77
+ wait?: number | undefined;
78
+ }): Promise<{
79
+ events: ConversationEvent[];
80
+ state: ConversationState;
81
+ }>;
82
+ /**
83
+ * Follows a conversation's events in order, from the saved cursor: SSE when the Company
84
+ * streams (reconnecting with `Last-Event-ID`), long-polling otherwise. Skips event IDs it
85
+ * already handled, restarts from the beginning on `cursor_expired`, and persists the cursor.
86
+ */
87
+ follow(id: string, opts?: FollowOptions): AsyncGenerator<StreamItem>;
88
+ }
89
+ //# sourceMappingURL=conversations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../../src/poppy-client/conversations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ import { throwForResponse } from './company.js';
2
+ import { ConversationError, PoppyError } from './errors.js';
3
+ import { readJson } from './http.js';
4
+ import { parseSse } from './sse.js';
5
+ import { randomId, requireSecureUrl, sleep } from './util.js';
6
+ const ID_RE = /^[A-Za-z0-9_-]{1,256}$/;
7
+ /** A fresh message ID: URL-safe base64, prefixed, unique for the User (7.2, 7.3). */
8
+ export function newMessageId() {
9
+ return randomId('msg_', 12);
10
+ }
11
+ /** Picks the `poppy` conversation protocol entry (7.1); unknown types are skipped. */
12
+ export function poppyProtocol(company) {
13
+ return company.document.agent?.protocols?.find((p) => p?.type === 'poppy');
14
+ }
15
+ /**
16
+ * Client for one Company's Poppy conversation endpoint (section 7). Every request carries the
17
+ * Session Token with a DPoP proof (7.2), through `CompanyClient.fetch`.
18
+ */
19
+ export class ConversationClient {
20
+ company;
21
+ endpoint;
22
+ resource;
23
+ /** Narrower scope for every request of this client (4.3 "Narrower tokens"), when set. */
24
+ scope;
25
+ constructor(company, entry = poppyProtocol(company), options = {}) {
26
+ this.company = company;
27
+ if (!entry)
28
+ throw new PoppyError('no_conversation_protocol', 'Company lists no `poppy` protocol');
29
+ this.endpoint = requireSecureUrl(entry.endpoint, 'agent endpoint', company.security)
30
+ .toString()
31
+ .replace(/\/+$/, '');
32
+ this.resource = entry.resource;
33
+ this.scope = options.scope;
34
+ }
35
+ url(id, suffix, query) {
36
+ if (id !== undefined && !ID_RE.test(id))
37
+ throw new PoppyError('invalid_id', `bad conversation id ${id}`);
38
+ const u = new URL(id === undefined ? this.endpoint : `${this.endpoint}/${id}${suffix ?? ''}`);
39
+ for (const [k, v] of Object.entries(query ?? {}))
40
+ if (v !== undefined)
41
+ u.searchParams.set(k, String(v));
42
+ return u.toString();
43
+ }
44
+ /**
45
+ * POST with retries on network errors / 5xx. Safe because the message ID makes the request
46
+ * idempotent: the Company returns the original response for a repeat (7.3).
47
+ */
48
+ async post(url, body, retries = 2) {
49
+ let lastErr;
50
+ for (let attempt = 0; attempt <= retries; attempt++) {
51
+ try {
52
+ const res = await this.company.fetch(url, {
53
+ method: 'POST',
54
+ headers: { 'content-type': 'application/json', accept: 'application/json' },
55
+ body: JSON.stringify(body),
56
+ resource: this.resource,
57
+ scope: this.scope,
58
+ });
59
+ if (res.status >= 500 && attempt < retries) {
60
+ lastErr = new PoppyError(`http_${res.status}`);
61
+ await sleep(300 * (attempt + 1));
62
+ continue;
63
+ }
64
+ if (!res.ok)
65
+ await throwForResponse(res);
66
+ return { status: res.status, body: (await readJson(res)) };
67
+ }
68
+ catch (e) {
69
+ if (e instanceof PoppyError)
70
+ throw e;
71
+ lastErr = e;
72
+ if (attempt < retries)
73
+ await sleep(300 * (attempt + 1));
74
+ }
75
+ }
76
+ throw lastErr;
77
+ }
78
+ remember(id, patch) {
79
+ const convs = this.company.state.conversations;
80
+ convs[id] ??= { endpoint: this.endpoint, createdAt: Date.now() };
81
+ const rec = convs[id];
82
+ if (patch.cursor !== undefined)
83
+ rec.cursor = patch.cursor;
84
+ if (patch.closed !== undefined)
85
+ rec.closed = patch.closed;
86
+ if (patch.parent !== undefined)
87
+ rec.parentConversationId = patch.parent;
88
+ }
89
+ /** Starts a conversation (7.3), or a Direct Conversation with `parentConversationId` (7.10). */
90
+ async start(message, opts = {}) {
91
+ checkMessage(message);
92
+ const body = { message };
93
+ if (opts.parentConversationId)
94
+ body.parent_conversation_id = opts.parentConversationId;
95
+ const r = await this.post(this.url(undefined, undefined, { wait: opts.wait, cursor: opts.cursor }), body);
96
+ if (!r.body?.conversation_id)
97
+ throw new PoppyError('invalid_response', 'no conversation_id');
98
+ this.remember(r.body.conversation_id, { parent: opts.parentConversationId });
99
+ await this.company.save();
100
+ return r.body;
101
+ }
102
+ /** Sends another message (7.3). Returns 202 with `status`/`responder` (+ events with `wait`). */
103
+ async send(id, message, opts = {}) {
104
+ checkMessage(message);
105
+ const r = await this.post(this.url(id, '/messages', { wait: opts.wait, cursor: opts.cursor }), { message });
106
+ return r.body;
107
+ }
108
+ /** One read of events after `cursor` (7.5). */
109
+ async read(id, opts = {}) {
110
+ const { body } = await this.company.json(this.url(id, '/events', opts), {
111
+ headers: { accept: 'application/json' },
112
+ resource: this.resource,
113
+ scope: this.scope,
114
+ });
115
+ if (!Array.isArray(body?.events))
116
+ throw new PoppyError('invalid_response', 'events must be a list');
117
+ return body;
118
+ }
119
+ /** Asks for a person at the Company (7.9). */
120
+ async handoff(id) {
121
+ return (await this.post(this.url(id, '/handoff'), {})).body;
122
+ }
123
+ /** Closes the conversation (7.12). */
124
+ async close(id) {
125
+ const r = (await this.post(this.url(id, '/close'), {})).body;
126
+ this.remember(id, { closed: true });
127
+ await this.company.save();
128
+ return r;
129
+ }
130
+ /**
131
+ * Reads (long-polling, JSON) until the Company is no longer `working` and `has_more` is
132
+ * false, returning the new events. Used by the autonomous `ask` mode.
133
+ */
134
+ async collect(id, opts = {}) {
135
+ const deadline = Date.now() + (opts.timeoutMs ?? 120_000);
136
+ const events = [];
137
+ const seen = new Set();
138
+ let cursor = this.company.state.conversations[id]?.cursor || undefined;
139
+ for (;;) {
140
+ let page;
141
+ try {
142
+ page = await this.read(id, { cursor, wait: opts.wait ?? 20 });
143
+ }
144
+ catch (e) {
145
+ if (e instanceof ConversationError && e.code === 'cursor_expired') {
146
+ cursor = undefined;
147
+ continue;
148
+ }
149
+ throw e;
150
+ }
151
+ for (const ev of page.events) {
152
+ if (seen.has(ev.id))
153
+ continue;
154
+ seen.add(ev.id);
155
+ events.push(ev);
156
+ }
157
+ if (page.cursor)
158
+ cursor = page.cursor;
159
+ this.remember(id, { cursor });
160
+ await this.company.save();
161
+ if (page.has_more)
162
+ continue;
163
+ if (page.status !== 'working' || Date.now() > deadline) {
164
+ return { events, state: { status: page.status, responder: page.responder } };
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * Follows a conversation's events in order, from the saved cursor: SSE when the Company
170
+ * streams (reconnecting with `Last-Event-ID`), long-polling otherwise. Skips event IDs it
171
+ * already handled, restarts from the beginning on `cursor_expired`, and persists the cursor.
172
+ */
173
+ async *follow(id, opts = {}) {
174
+ const seen = new Set();
175
+ let cursor = this.company.state.conversations[id]?.cursor;
176
+ let useStream = opts.stream !== false;
177
+ let firstConnect = true;
178
+ let status;
179
+ const handle = async (ev) => {
180
+ if (!ev || typeof ev.id !== 'string' || seen.has(ev.id))
181
+ return false;
182
+ seen.add(ev.id);
183
+ cursor = ev.id;
184
+ this.remember(id, { cursor });
185
+ if (ev.type === 'state' && ev.status)
186
+ status = ev.status;
187
+ return true;
188
+ };
189
+ const settled = () => opts.untilSettled && (status === 'idle' || status === 'queued' || status === 'closed');
190
+ // `untilSettled` ends on a `state` event — but a request that changes nothing (a handoff with
191
+ // no one available, a context-only message) emits none, and a stream would then wait forever.
192
+ // So read what is there first: if the conversation is already settled, that is the answer.
193
+ if (opts.untilSettled) {
194
+ for (;;) {
195
+ let page;
196
+ try {
197
+ page = await this.read(id, cursor ? { cursor } : {});
198
+ }
199
+ catch (e) {
200
+ if (e instanceof ConversationError && e.code === 'cursor_expired') {
201
+ cursor = undefined;
202
+ this.remember(id, { cursor: '' });
203
+ yield { kind: 'history_gap' };
204
+ continue;
205
+ }
206
+ throw e;
207
+ }
208
+ for (const ev of page.events) {
209
+ if (await handle(ev))
210
+ yield { kind: 'event', event: ev };
211
+ }
212
+ status = page.status ?? status;
213
+ if (page.cursor) {
214
+ cursor = page.cursor;
215
+ this.remember(id, { cursor });
216
+ }
217
+ if (!page.has_more)
218
+ break;
219
+ }
220
+ await this.company.save();
221
+ if (settled())
222
+ return;
223
+ }
224
+ while (!opts.signal?.aborted) {
225
+ if (!firstConnect)
226
+ yield { kind: 'reconnected' };
227
+ firstConnect = false;
228
+ let res;
229
+ try {
230
+ const headers = {
231
+ accept: useStream ? 'text/event-stream' : 'application/json',
232
+ };
233
+ // Reconnects carry Last-Event-ID in place of `cursor` (7.6).
234
+ if (useStream && cursor)
235
+ headers['last-event-id'] = cursor;
236
+ res = await this.company.fetch(this.url(id, '/events', useStream ? {} : { cursor, wait: opts.wait ?? 25 }), { headers, signal: opts.signal, resource: this.resource, scope: this.scope });
237
+ }
238
+ catch (e) {
239
+ if (opts.signal?.aborted)
240
+ return;
241
+ throw e;
242
+ }
243
+ if (!res.ok) {
244
+ const body = await readJson(res.clone());
245
+ if (body?.error === 'cursor_expired') {
246
+ cursor = undefined;
247
+ this.remember(id, { cursor: '' });
248
+ yield { kind: 'history_gap' };
249
+ continue;
250
+ }
251
+ await throwForResponse(res);
252
+ }
253
+ const type = res.headers.get('content-type') ?? '';
254
+ if (type.includes('text/event-stream') && res.body) {
255
+ try {
256
+ for await (const sse of parseSse(res.body)) {
257
+ if (sse.event === 'text-delta') {
258
+ const delta = safeJson(sse.data);
259
+ if (delta?.message_id)
260
+ yield { kind: 'delta', delta };
261
+ continue;
262
+ }
263
+ if (sse.event !== 'message')
264
+ continue; // unknown SSE event names are skipped
265
+ const ev = safeJson(sse.data);
266
+ if (ev && (await handle(ev))) {
267
+ yield { kind: 'event', event: ev };
268
+ if (settled()) {
269
+ await this.company.save();
270
+ return;
271
+ }
272
+ }
273
+ }
274
+ }
275
+ catch (e) {
276
+ if (opts.signal?.aborted)
277
+ return;
278
+ this.company.agent.log(`stream interrupted: ${e.message}`);
279
+ }
280
+ await this.company.save();
281
+ if (status === 'closed')
282
+ return;
283
+ await sleep(250, opts.signal).catch(() => { });
284
+ continue;
285
+ }
286
+ // The Company answered with JSON: it doesn't stream, so long-poll from now on (7.6).
287
+ useStream = false;
288
+ const page = (await readJson(res));
289
+ status = page?.status ?? status;
290
+ for (const ev of page?.events ?? []) {
291
+ if (await handle(ev))
292
+ yield { kind: 'event', event: ev };
293
+ }
294
+ if (page?.cursor) {
295
+ cursor = page.cursor;
296
+ this.remember(id, { cursor });
297
+ }
298
+ await this.company.save();
299
+ if (page?.has_more) {
300
+ firstConnect = true; // not a reconnect, just the next page
301
+ continue;
302
+ }
303
+ if (settled() || status === 'closed')
304
+ return;
305
+ firstConnect = true;
306
+ }
307
+ }
308
+ }
309
+ function safeJson(s) {
310
+ try {
311
+ return JSON.parse(s);
312
+ }
313
+ catch {
314
+ return undefined;
315
+ }
316
+ }
317
+ /** 7.4: `id` + `sender` required, and at least one of `text`, `data`, `context`. */
318
+ function checkMessage(m) {
319
+ if (!ID_RE.test(m.id))
320
+ throw new ConversationError('invalid_message', { description: 'bad message id' });
321
+ if (m.sender !== 'agent' && m.sender !== 'human') {
322
+ throw new ConversationError('invalid_message', {
323
+ description: 'sender must be agent or human',
324
+ });
325
+ }
326
+ if (m.text === undefined && m.data === undefined && m.context === undefined) {
327
+ throw new ConversationError('invalid_message', {
328
+ description: 'a message needs text, data or context',
329
+ });
330
+ }
331
+ }
332
+ //# sourceMappingURL=conversations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../../src/poppy-client/conversations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { AuthServerMetadata, PoppyDocument } from './types.js';
2
+ import { type FetchLike, type SecurityOptions } from './util.js';
3
+ /** Major protocol versions this client implements (3.1). */
4
+ export declare const SUPPORTED_MAJOR_VERSIONS: string[];
5
+ export interface DiscoveryOptions extends SecurityOptions {
6
+ fetch?: FetchLike | undefined;
7
+ /** Shared cache honoring `Cache-Control: max-age` (3, 3.2: SHOULD cache). */
8
+ cache?: HttpJsonCache | undefined;
9
+ }
10
+ export interface Discovered {
11
+ /** The host the agent asked for (no scheme), e.g. `example.com`. */
12
+ domain: string;
13
+ wellKnownUrl: string;
14
+ document: PoppyDocument;
15
+ /** Absent only when the Company publishes no `auth` (web-only). */
16
+ metadata?: AuthServerMetadata | undefined;
17
+ }
18
+ /** In-memory cache of JSON documents by URL, by `Cache-Control: max-age`. */
19
+ export declare class HttpJsonCache {
20
+ private readonly entries;
21
+ get(url: string): unknown | undefined;
22
+ set(url: string, value: unknown, cacheControl: string | null): void;
23
+ }
24
+ /**
25
+ * Turns user input into the well-known URL. `example.com` → `https://example.com/...`.
26
+ * With `insecureDev`, an explicit `http://host:port` is kept, and a bare loopback host
27
+ * (`localhost:3333`) defaults to `http:`.
28
+ */
29
+ export declare function wellKnownUrlFor(input: string, sec?: SecurityOptions): URL;
30
+ /** Validates `poppy.json` against 3.1. Unknown fields are ignored, never rejected. */
31
+ export declare function validatePoppyDocument(json: unknown, requestedHost: string, sec?: SecurityOptions): PoppyDocument;
32
+ /** RFC 8414 section 3: the well-known suffix goes between the host and the issuer's path. */
33
+ export declare function authServerMetadataUrl(issuer: string): URL;
34
+ /** Validates the issuer metadata against 3.2. */
35
+ export declare function validateMetadata(json: unknown, doc: PoppyDocument, sec?: SecurityOptions): AuthServerMetadata;
36
+ /**
37
+ * Discovery (section 3): fetches `/.well-known/poppy.json` (HTTPS-only redirects), validates
38
+ * it, then fetches and validates the issuer's RFC 8414 metadata (3.2).
39
+ */
40
+ export declare function discover(input: string, opts?: DiscoveryOptions): Promise<Discovered>;
41
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/poppy-client/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,KAAK,SAAS,EAId,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAEnB,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,UAAQ,CAAC;AAI9C,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC3C;AAED,6EAA6E;AAC7E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAClF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAQpC;IACD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,QAK3D;CACF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,eAAoB,GAAG,GAAG,CAU7E;AA2DD,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,eAAoB,GACxB,aAAa,CAsFf;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAIzD;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,aAAa,EAClB,GAAG,GAAE,eAAoB,GACxB,kBAAkB,CA6BpB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAc9F"}