@adonis-agora/agent 0.76.3 → 0.77.1

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 (279) hide show
  1. package/CHANGELOG.md +22 -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 +47 -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/channels.d.ts +5 -0
  56. package/dist/src/genui/channels.d.ts.map +1 -1
  57. package/dist/src/genui/channels.js +11 -0
  58. package/dist/src/genui/channels.js.map +1 -1
  59. package/dist/src/index.d.ts +2 -1
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +2 -1
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/mcp/auth.d.ts +17 -0
  64. package/dist/src/mcp/auth.d.ts.map +1 -1
  65. package/dist/src/mcp/auth.js +56 -1
  66. package/dist/src/mcp/auth.js.map +1 -1
  67. package/dist/src/mcp/discovery.d.ts +13 -2
  68. package/dist/src/mcp/discovery.d.ts.map +1 -1
  69. package/dist/src/mcp/discovery.js +17 -2
  70. package/dist/src/mcp/discovery.js.map +1 -1
  71. package/dist/src/mcp/index.d.ts +1 -1
  72. package/dist/src/mcp/index.d.ts.map +1 -1
  73. package/dist/src/mcp/index.js.map +1 -1
  74. package/dist/src/mcp/scope.d.ts +13 -0
  75. package/dist/src/mcp/scope.d.ts.map +1 -0
  76. package/dist/src/mcp/scope.js +24 -0
  77. package/dist/src/mcp/scope.js.map +1 -0
  78. package/dist/src/mcp/server.d.ts +6 -1
  79. package/dist/src/mcp/server.d.ts.map +1 -1
  80. package/dist/src/mcp/server.js +1 -1
  81. package/dist/src/mcp/server.js.map +1 -1
  82. package/dist/src/poppy/auth.d.ts +77 -0
  83. package/dist/src/poppy/auth.d.ts.map +1 -0
  84. package/dist/src/poppy/auth.js +16 -0
  85. package/dist/src/poppy/auth.js.map +1 -0
  86. package/dist/src/poppy/conversations.d.ts +249 -0
  87. package/dist/src/poppy/conversations.d.ts.map +1 -0
  88. package/dist/src/poppy/conversations.js +1017 -0
  89. package/dist/src/poppy/conversations.js.map +1 -0
  90. package/dist/src/poppy/define_config.d.ts +98 -0
  91. package/dist/src/poppy/define_config.d.ts.map +1 -0
  92. package/dist/src/poppy/define_config.js +11 -0
  93. package/dist/src/poppy/define_config.js.map +1 -0
  94. package/dist/src/poppy/endpoints.d.ts +25 -0
  95. package/dist/src/poppy/endpoints.d.ts.map +1 -0
  96. package/dist/src/poppy/endpoints.js +31 -0
  97. package/dist/src/poppy/endpoints.js.map +1 -0
  98. package/dist/src/poppy/handler.d.ts +80 -0
  99. package/dist/src/poppy/handler.d.ts.map +1 -0
  100. package/dist/src/poppy/handler.js +362 -0
  101. package/dist/src/poppy/handler.js.map +1 -0
  102. package/dist/src/poppy/index.d.ts +17 -0
  103. package/dist/src/poppy/index.d.ts.map +1 -0
  104. package/dist/src/poppy/index.js +9 -0
  105. package/dist/src/poppy/index.js.map +1 -0
  106. package/dist/src/poppy/protocol.d.ts +132 -0
  107. package/dist/src/poppy/protocol.d.ts.map +1 -0
  108. package/dist/src/poppy/protocol.js +178 -0
  109. package/dist/src/poppy/protocol.js.map +1 -0
  110. package/dist/src/poppy/redis-store.d.ts +27 -0
  111. package/dist/src/poppy/redis-store.d.ts.map +1 -0
  112. package/dist/src/poppy/redis-store.js +148 -0
  113. package/dist/src/poppy/redis-store.js.map +1 -0
  114. package/dist/src/poppy/runtime.d.ts +6 -0
  115. package/dist/src/poppy/runtime.d.ts.map +1 -0
  116. package/dist/src/poppy/runtime.js +12 -0
  117. package/dist/src/poppy/runtime.js.map +1 -0
  118. package/dist/src/poppy/server_middleware.d.ts +11 -0
  119. package/dist/src/poppy/server_middleware.d.ts.map +1 -0
  120. package/dist/src/poppy/server_middleware.js +16 -0
  121. package/dist/src/poppy/server_middleware.js.map +1 -0
  122. package/dist/src/poppy/store.d.ts +207 -0
  123. package/dist/src/poppy/store.d.ts.map +1 -0
  124. package/dist/src/poppy/store.js +444 -0
  125. package/dist/src/poppy/store.js.map +1 -0
  126. package/dist/src/poppy-client/api.d.ts +36 -0
  127. package/dist/src/poppy-client/api.d.ts.map +1 -0
  128. package/dist/src/poppy-client/api.js +77 -0
  129. package/dist/src/poppy-client/api.js.map +1 -0
  130. package/dist/src/poppy-client/bin/poppy-agent.d.ts +3 -0
  131. package/dist/src/poppy-client/bin/poppy-agent.d.ts.map +1 -0
  132. package/dist/src/poppy-client/bin/poppy-agent.js +9 -0
  133. package/dist/src/poppy-client/bin/poppy-agent.js.map +1 -0
  134. package/dist/src/poppy-client/browser.d.ts +24 -0
  135. package/dist/src/poppy-client/browser.d.ts.map +1 -0
  136. package/dist/src/poppy-client/browser.js +83 -0
  137. package/dist/src/poppy-client/browser.js.map +1 -0
  138. package/dist/src/poppy-client/cli/main.d.ts +2 -0
  139. package/dist/src/poppy-client/cli/main.d.ts.map +1 -0
  140. package/dist/src/poppy-client/cli/main.js +776 -0
  141. package/dist/src/poppy-client/cli/main.js.map +1 -0
  142. package/dist/src/poppy-client/cli/prompt.d.ts +13 -0
  143. package/dist/src/poppy-client/cli/prompt.d.ts.map +1 -0
  144. package/dist/src/poppy-client/cli/prompt.js +50 -0
  145. package/dist/src/poppy-client/cli/prompt.js.map +1 -0
  146. package/dist/src/poppy-client/company.d.ts +87 -0
  147. package/dist/src/poppy-client/company.d.ts.map +1 -0
  148. package/dist/src/poppy-client/company.js +336 -0
  149. package/dist/src/poppy-client/company.js.map +1 -0
  150. package/dist/src/poppy-client/conversations.d.ts +89 -0
  151. package/dist/src/poppy-client/conversations.d.ts.map +1 -0
  152. package/dist/src/poppy-client/conversations.js +332 -0
  153. package/dist/src/poppy-client/conversations.js.map +1 -0
  154. package/dist/src/poppy-client/discovery.d.ts +41 -0
  155. package/dist/src/poppy-client/discovery.d.ts.map +1 -0
  156. package/dist/src/poppy-client/discovery.js +217 -0
  157. package/dist/src/poppy-client/discovery.js.map +1 -0
  158. package/dist/src/poppy-client/dpop.d.ts +19 -0
  159. package/dist/src/poppy-client/dpop.d.ts.map +1 -0
  160. package/dist/src/poppy-client/dpop.js +43 -0
  161. package/dist/src/poppy-client/dpop.js.map +1 -0
  162. package/dist/src/poppy-client/errors.d.ts +50 -0
  163. package/dist/src/poppy-client/errors.d.ts.map +1 -0
  164. package/dist/src/poppy-client/errors.js +55 -0
  165. package/dist/src/poppy-client/errors.js.map +1 -0
  166. package/dist/src/poppy-client/http.d.ts +40 -0
  167. package/dist/src/poppy-client/http.d.ts.map +1 -0
  168. package/dist/src/poppy-client/http.js +95 -0
  169. package/dist/src/poppy-client/http.js.map +1 -0
  170. package/dist/src/poppy-client/identity.d.ts +61 -0
  171. package/dist/src/poppy-client/identity.d.ts.map +1 -0
  172. package/dist/src/poppy-client/identity.js +111 -0
  173. package/dist/src/poppy-client/identity.js.map +1 -0
  174. package/dist/src/poppy-client/identity_server.d.ts +29 -0
  175. package/dist/src/poppy-client/identity_server.d.ts.map +1 -0
  176. package/dist/src/poppy-client/identity_server.js +84 -0
  177. package/dist/src/poppy-client/identity_server.js.map +1 -0
  178. package/dist/src/poppy-client/index.d.ts +19 -0
  179. package/dist/src/poppy-client/index.d.ts.map +1 -0
  180. package/dist/src/poppy-client/index.js +18 -0
  181. package/dist/src/poppy-client/index.js.map +1 -0
  182. package/dist/src/poppy-client/keys.d.ts +13 -0
  183. package/dist/src/poppy-client/keys.d.ts.map +1 -0
  184. package/dist/src/poppy-client/keys.js +31 -0
  185. package/dist/src/poppy-client/keys.js.map +1 -0
  186. package/dist/src/poppy-client/llm.d.ts +31 -0
  187. package/dist/src/poppy-client/llm.d.ts.map +1 -0
  188. package/dist/src/poppy-client/llm.js +230 -0
  189. package/dist/src/poppy-client/llm.js.map +1 -0
  190. package/dist/src/poppy-client/mcp.d.ts +16 -0
  191. package/dist/src/poppy-client/mcp.d.ts.map +1 -0
  192. package/dist/src/poppy-client/mcp.js +57 -0
  193. package/dist/src/poppy-client/mcp.js.map +1 -0
  194. package/dist/src/poppy-client/open_url.d.ts +3 -0
  195. package/dist/src/poppy-client/open_url.d.ts.map +1 -0
  196. package/dist/src/poppy-client/open_url.js +13 -0
  197. package/dist/src/poppy-client/open_url.js.map +1 -0
  198. package/dist/src/poppy-client/signin.d.ts +59 -0
  199. package/dist/src/poppy-client/signin.d.ts.map +1 -0
  200. package/dist/src/poppy-client/signin.js +210 -0
  201. package/dist/src/poppy-client/signin.js.map +1 -0
  202. package/dist/src/poppy-client/sse.d.ts +15 -0
  203. package/dist/src/poppy-client/sse.d.ts.map +1 -0
  204. package/dist/src/poppy-client/sse.js +74 -0
  205. package/dist/src/poppy-client/sse.js.map +1 -0
  206. package/dist/src/poppy-client/store.d.ts +89 -0
  207. package/dist/src/poppy-client/store.d.ts.map +1 -0
  208. package/dist/src/poppy-client/store.js +79 -0
  209. package/dist/src/poppy-client/store.js.map +1 -0
  210. package/dist/src/poppy-client/token_client.d.ts +69 -0
  211. package/dist/src/poppy-client/token_client.d.ts.map +1 -0
  212. package/dist/src/poppy-client/token_client.js +154 -0
  213. package/dist/src/poppy-client/token_client.js.map +1 -0
  214. package/dist/src/poppy-client/types.d.ts +184 -0
  215. package/dist/src/poppy-client/types.d.ts.map +1 -0
  216. package/dist/src/poppy-client/types.js +8 -0
  217. package/dist/src/poppy-client/types.js.map +1 -0
  218. package/dist/src/poppy-client/util.d.ts +42 -0
  219. package/dist/src/poppy-client/util.d.ts.map +1 -0
  220. package/dist/src/poppy-client/util.js +122 -0
  221. package/dist/src/poppy-client/util.js.map +1 -0
  222. package/dist/src/poppy-connections/config.d.ts +134 -0
  223. package/dist/src/poppy-connections/config.d.ts.map +1 -0
  224. package/dist/src/poppy-connections/config.js +44 -0
  225. package/dist/src/poppy-connections/config.js.map +1 -0
  226. package/dist/src/poppy-connections/crypto.d.ts +12 -0
  227. package/dist/src/poppy-connections/crypto.d.ts.map +1 -0
  228. package/dist/src/poppy-connections/crypto.js +36 -0
  229. package/dist/src/poppy-connections/crypto.js.map +1 -0
  230. package/dist/src/poppy-connections/http.d.ts +63 -0
  231. package/dist/src/poppy-connections/http.d.ts.map +1 -0
  232. package/dist/src/poppy-connections/http.js +217 -0
  233. package/dist/src/poppy-connections/http.js.map +1 -0
  234. package/dist/src/poppy-connections/index.d.ts +14 -0
  235. package/dist/src/poppy-connections/index.d.ts.map +1 -0
  236. package/dist/src/poppy-connections/index.js +17 -0
  237. package/dist/src/poppy-connections/index.js.map +1 -0
  238. package/dist/src/poppy-connections/resume.d.ts +46 -0
  239. package/dist/src/poppy-connections/resume.d.ts.map +1 -0
  240. package/dist/src/poppy-connections/resume.js +109 -0
  241. package/dist/src/poppy-connections/resume.js.map +1 -0
  242. package/dist/src/poppy-connections/runtime.d.ts +4 -0
  243. package/dist/src/poppy-connections/runtime.d.ts.map +1 -0
  244. package/dist/src/poppy-connections/runtime.js +9 -0
  245. package/dist/src/poppy-connections/runtime.js.map +1 -0
  246. package/dist/src/poppy-connections/server_middleware.d.ts +10 -0
  247. package/dist/src/poppy-connections/server_middleware.d.ts.map +1 -0
  248. package/dist/src/poppy-connections/server_middleware.js +14 -0
  249. package/dist/src/poppy-connections/server_middleware.js.map +1 -0
  250. package/dist/src/poppy-connections/service.d.ts +179 -0
  251. package/dist/src/poppy-connections/service.d.ts.map +1 -0
  252. package/dist/src/poppy-connections/service.js +648 -0
  253. package/dist/src/poppy-connections/service.js.map +1 -0
  254. package/dist/src/poppy-connections/store.d.ts +139 -0
  255. package/dist/src/poppy-connections/store.d.ts.map +1 -0
  256. package/dist/src/poppy-connections/store.js +260 -0
  257. package/dist/src/poppy-connections/store.js.map +1 -0
  258. package/dist/src/poppy-connections/tools.d.ts +65 -0
  259. package/dist/src/poppy-connections/tools.d.ts.map +1 -0
  260. package/dist/src/poppy-connections/tools.js +574 -0
  261. package/dist/src/poppy-connections/tools.js.map +1 -0
  262. package/dist/src/react/core/approvals/use-action-proposals.d.ts +6 -1
  263. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -1
  264. package/dist/src/react/core/approvals/use-action-proposals.js +18 -3
  265. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -1
  266. package/dist/src/react/core/use-agent-chat.d.ts +6 -0
  267. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -1
  268. package/dist/src/react/core/use-agent-chat.js +47 -1
  269. package/dist/src/react/core/use-agent-chat.js.map +1 -1
  270. package/dist/src/tool-presentation.d.ts +6 -0
  271. package/dist/src/tool-presentation.d.ts.map +1 -1
  272. package/dist/src/tool-presentation.js +1 -0
  273. package/dist/src/tool-presentation.js.map +1 -1
  274. package/dist/src/types.d.ts +6 -0
  275. package/dist/src/types.d.ts.map +1 -1
  276. package/package.json +41 -2
  277. package/skills/agent-governance/SKILL.md +13 -2
  278. package/skills/agent-personas-agents/SKILL.md +1 -1
  279. package/skills/agent-tools/SKILL.md +20 -3
@@ -0,0 +1,362 @@
1
+ import { globalPoppyAuthenticate, globalPoppyIssuer, } from './auth.js';
2
+ import { isPoppyId, PoppyError, parseEmptyBody, parseSendBody } from './protocol.js';
3
+ /** Match the path after the endpoint: `null` → 404, a method mismatch → 405. */
4
+ function matchRoute(method, rest) {
5
+ const allow = (expected, route) => (method === expected ? route : 405);
6
+ if (rest.length === 0)
7
+ return allow('POST', { kind: 'start' });
8
+ if (rest.length !== 2)
9
+ return 404;
10
+ const [id = '', action] = rest;
11
+ switch (action) {
12
+ case 'messages':
13
+ return allow('POST', { kind: 'messages', id });
14
+ case 'events':
15
+ return allow('GET', { kind: 'events', id });
16
+ case 'handoff':
17
+ return allow('POST', { kind: 'handoff', id });
18
+ case 'close':
19
+ return allow('POST', { kind: 'close', id });
20
+ default:
21
+ return 404;
22
+ }
23
+ }
24
+ /** The scheme the request authenticated with — what a challenge of ours is written in. */
25
+ function schemeOf(exchange) {
26
+ const header = exchange.headers.authorization ?? '';
27
+ return /^bearer\s/i.test(header) ? 'Bearer' : 'DPoP';
28
+ }
29
+ /** `wait` in ms, capped; absent → 0. */
30
+ function waitMs(exchange, maxSeconds) {
31
+ const raw = exchange.query.wait;
32
+ if (raw === undefined || raw === '')
33
+ return 0;
34
+ const seconds = Number(raw);
35
+ if (!Number.isFinite(seconds) || seconds < 0) {
36
+ throw new PoppyError('invalid_request', 'wait must be a non-negative number of seconds');
37
+ }
38
+ return Math.min(seconds, maxSeconds) * 1000;
39
+ }
40
+ function cursorOf(exchange, header = false) {
41
+ const raw = (header ? exchange.headers['last-event-id'] : undefined) ?? exchange.query.cursor;
42
+ return raw === undefined || raw === '' ? undefined : raw.trim();
43
+ }
44
+ /**
45
+ * The Poppy conversation endpoint (§7) — `POST {endpoint}`, `POST {endpoint}/{id}/messages`,
46
+ * `GET {endpoint}/{id}/events` (JSON, long-poll with `wait`, or SSE), `POST …/handoff` and
47
+ * `POST …/close`. Returns a handler that answers everything under `/{path}` and reports `false`
48
+ * for anything else, so it can sit in front of the router.
49
+ *
50
+ * Every request is authenticated BEFORE its body is read, by the resolver of
51
+ * `Symbol.for('@adonis-agora/poppy:authenticate')` (`@adonis-agora/authkit-server`) or the one
52
+ * given. Without either the endpoint answers `501`.
53
+ *
54
+ * @experimental Tracks Personal Agent Protocol Draft 0.1 (https://personalagentprotocol.org/docs/spec),
55
+ * a spec still in development: this API WILL change as the spec evolves — possibly in breaking
56
+ * ways, outside semver majors while it is a draft.
57
+ */
58
+ export function createPoppyHandler(options) {
59
+ const base = `/${options.path}`;
60
+ const maxBody = options.maxBodyBytes ?? 1024 * 1024;
61
+ const maxWait = options.maxWaitSeconds ?? 30;
62
+ const conversations = options.conversations;
63
+ async function authenticate(exchange) {
64
+ const resolver = options.authenticate ?? globalPoppyAuthenticate();
65
+ if (!resolver) {
66
+ throw new PoppyError('not_implemented', 'Poppy conversations are not enabled: no Session Token resolver is installed');
67
+ }
68
+ // No options: a turn's scopes are decided per tool, and the `resource` a token must carry is
69
+ // the resolver's to derive from the URL (the `resource` of the `poppy` protocol entry, if any).
70
+ const result = await resolver({
71
+ method: exchange.method,
72
+ url: exchange.url,
73
+ headers: exchange.rawHeaders,
74
+ });
75
+ if (result.ok)
76
+ return result.principal;
77
+ exchange.json(result.status, {
78
+ error: result.error,
79
+ ...(result.description !== undefined ? { error_description: result.description } : {}),
80
+ ...(result.scope !== undefined ? { scope: result.scope } : {}),
81
+ }, {
82
+ ...(result.headers ?? {}),
83
+ 'WWW-Authenticate': result.wwwAuthenticate,
84
+ 'Cache-Control': 'no-store',
85
+ });
86
+ return null;
87
+ }
88
+ async function stream(exchange, principal, id) {
89
+ const conversation = await conversations.owned(principal, id);
90
+ const controller = new AbortController();
91
+ const stop = () => controller.abort();
92
+ const iterator = conversations.stream(conversation, cursorOf(exchange, true), controller.signal);
93
+ let first;
94
+ try {
95
+ // The cursor is checked before the stream opens, so a bad one is still a JSON error.
96
+ first = await iterator.next();
97
+ }
98
+ catch (error) {
99
+ await iterator.return(undefined);
100
+ throw error;
101
+ }
102
+ const writer = exchange.openStream({
103
+ 'Content-Type': 'text/event-stream',
104
+ 'Cache-Control': 'no-cache, no-transform',
105
+ Connection: 'keep-alive',
106
+ 'X-Accel-Buffering': 'no',
107
+ });
108
+ writer.signal.addEventListener('abort', stop, { once: true });
109
+ if (writer.signal.aborted)
110
+ stop();
111
+ const maxTimer = setTimeout(stop, options.streamMaxMs ?? 300_000);
112
+ const keepAlive = setInterval(() => writer.write(': keep-alive\n\n'), options.keepAliveMs ?? 15_000);
113
+ maxTimer.unref?.();
114
+ keepAlive.unref?.();
115
+ try {
116
+ let next = first;
117
+ while (!next.done) {
118
+ const item = next.value;
119
+ if (item.kind === 'event') {
120
+ writer.write(`id: ${item.event.id}\ndata: ${JSON.stringify(item.event)}\n\n`);
121
+ }
122
+ else if (item.kind === 'delta') {
123
+ writer.write(`event: text-delta\ndata: ${JSON.stringify({ message_id: item.messageId, text: item.text })}\n\n`);
124
+ }
125
+ next = await iterator.next();
126
+ }
127
+ }
128
+ finally {
129
+ clearTimeout(maxTimer);
130
+ clearInterval(keepAlive);
131
+ await iterator.return(undefined);
132
+ writer.end();
133
+ }
134
+ }
135
+ async function route(exchange, route) {
136
+ const principal = await authenticate(exchange);
137
+ if (principal === null)
138
+ return;
139
+ switch (route.kind) {
140
+ case 'start': {
141
+ const body = parseSendBody(await exchange.readBody(maxBody), { allowParent: true });
142
+ const started = await conversations.start(principal, body);
143
+ return answerPost(exchange, principal, started.conversationId, started);
144
+ }
145
+ case 'messages': {
146
+ if (!isPoppyId(route.id))
147
+ throw new PoppyError('conversation_not_found');
148
+ // The conversation is checked before the body is parsed: an unknown one is a 404.
149
+ await conversations.owned(principal, route.id);
150
+ const body = parseSendBody(await exchange.readBody(maxBody), { allowParent: false });
151
+ const sent = await conversations.send(principal, route.id, body);
152
+ return answerPost(exchange, principal, route.id, sent);
153
+ }
154
+ case 'events': {
155
+ if (!isPoppyId(route.id))
156
+ throw new PoppyError('conversation_not_found');
157
+ if ((exchange.headers.accept ?? '').includes('text/event-stream')) {
158
+ return stream(exchange, principal, route.id);
159
+ }
160
+ const wait = waitMs(exchange, maxWait);
161
+ const cursor = cursorOf(exchange);
162
+ const result = await conversations.read(principal, route.id, {
163
+ ...(cursor !== undefined ? { cursor } : {}),
164
+ waitMs: wait,
165
+ });
166
+ return exchange.json(200, result);
167
+ }
168
+ case 'handoff': {
169
+ if (!isPoppyId(route.id))
170
+ throw new PoppyError('conversation_not_found');
171
+ await conversations.owned(principal, route.id);
172
+ parseEmptyBody(await exchange.readBody(maxBody));
173
+ const state = await conversations.requestHandoff(principal, route.id);
174
+ return exchange.json(202, { conversation_id: route.id, ...state });
175
+ }
176
+ case 'close': {
177
+ if (!isPoppyId(route.id))
178
+ throw new PoppyError('conversation_not_found');
179
+ await conversations.owned(principal, route.id);
180
+ parseEmptyBody(await exchange.readBody(maxBody));
181
+ const state = await conversations.closeByAgent(principal, route.id);
182
+ return exchange.json(200, { conversation_id: route.id, ...state });
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * A message POST's answer: its status and body — or, with `wait`, a read of the events from
188
+ * `cursor` (the start without one), still under the POST's status (§7.3).
189
+ */
190
+ async function answerPost(exchange, principal, conversationId, answer) {
191
+ if (exchange.query.wait === undefined)
192
+ return exchange.json(answer.status, answer.body);
193
+ const wait = waitMs(exchange, maxWait);
194
+ const conversation = await conversations.owned(principal, conversationId);
195
+ const cursor = cursorOf(exchange);
196
+ const read = await conversations.readOwned(conversation, {
197
+ ...(cursor !== undefined ? { cursor } : {}),
198
+ waitMs: wait,
199
+ });
200
+ return exchange.json(answer.status, read);
201
+ }
202
+ return async function handle(exchange) {
203
+ const path = exchange.path.replace(/\/+$/, '');
204
+ if (path !== base && !path.startsWith(`${base}/`))
205
+ return false;
206
+ const rest = path
207
+ .slice(base.length)
208
+ .split('/')
209
+ .filter((segment) => segment !== '');
210
+ let decoded;
211
+ try {
212
+ decoded = rest.map((segment) => decodeURIComponent(segment));
213
+ }
214
+ catch {
215
+ decoded = ['', ''];
216
+ }
217
+ const matched = matchRoute(exchange.method.toUpperCase(), decoded);
218
+ try {
219
+ if (matched === 404)
220
+ throw new PoppyError('not_found');
221
+ if (matched === 405)
222
+ throw new PoppyError('method_not_allowed');
223
+ await route(exchange, matched);
224
+ }
225
+ catch (error) {
226
+ const poppy = error instanceof PoppyError
227
+ ? error
228
+ : error?.name === 'PoppyError'
229
+ ? error
230
+ : null;
231
+ if (poppy === null)
232
+ options.onError?.(error);
233
+ const answer = poppy ?? new PoppyError('server_error', 'Internal error');
234
+ exchange.json(answer.status, answer.toJSON(), answer.code === 'sign_in_required'
235
+ ? { 'WWW-Authenticate': `${schemeOf(exchange)} error="sign_in_required"` }
236
+ : answer.code === 'method_not_allowed'
237
+ ? { Allow: matched === 405 ? allowFor(decoded) : '' }
238
+ : {});
239
+ }
240
+ return true;
241
+ };
242
+ }
243
+ function allowFor(rest) {
244
+ return rest.length === 2 && rest[1] === 'events' ? 'GET' : 'POST';
245
+ }
246
+ // ── exchanges ─────────────────────────────────────────────────────────────────
247
+ function rawLowerHeaders(headers) {
248
+ const out = {};
249
+ for (const [name, value] of Object.entries(headers))
250
+ out[name.toLowerCase()] = value;
251
+ return out;
252
+ }
253
+ function lowerHeaders(headers) {
254
+ const out = {};
255
+ for (const [name, value] of Object.entries(headers)) {
256
+ out[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : value;
257
+ }
258
+ return out;
259
+ }
260
+ async function readStream(source, limit) {
261
+ const chunks = [];
262
+ let size = 0;
263
+ for await (const chunk of source) {
264
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
265
+ size += buffer.length;
266
+ if (size > limit)
267
+ throw new PoppyError('request_too_large', 'Request body is too large');
268
+ chunks.push(buffer);
269
+ }
270
+ return Buffer.concat(chunks).toString('utf8');
271
+ }
272
+ function writer(res, req) {
273
+ const controller = new AbortController();
274
+ const abort = () => controller.abort();
275
+ req.on('close', abort);
276
+ res.on('close', abort);
277
+ return {
278
+ write: (chunk) => {
279
+ if (!res.writableEnded)
280
+ res.write(chunk);
281
+ },
282
+ end: () => {
283
+ if (!res.writableEnded)
284
+ res.end();
285
+ },
286
+ signal: controller.signal,
287
+ };
288
+ }
289
+ /** A {@link PoppyExchange} over a plain Node request — any framework, or a bare `http` server. */
290
+ export function nodeExchange(req, res, options) {
291
+ const target = new URL(req.url ?? '/', options.origin);
292
+ return {
293
+ method: req.method ?? 'GET',
294
+ path: target.pathname,
295
+ query: Object.fromEntries(target.searchParams),
296
+ url: target.toString(),
297
+ headers: lowerHeaders(req.headers),
298
+ rawHeaders: rawLowerHeaders(req.headers),
299
+ readBody: (limit) => readStream(req, limit),
300
+ json(status, body, headers = {}) {
301
+ res.writeHead(status, { 'Content-Type': 'application/json', ...headers });
302
+ res.end(JSON.stringify(body));
303
+ },
304
+ openStream(headers) {
305
+ res.writeHead(200, headers);
306
+ res.flushHeaders?.();
307
+ return writer(res, req);
308
+ },
309
+ };
310
+ }
311
+ /**
312
+ * The public origin of a request: `baseUrl` when configured; else the request's protocol and host
313
+ * (Adonis honours `X-Forwarded-*` from trusted proxies) — upgraded to `https` when the Poppy issuer
314
+ * is, as a TLS-terminating proxy would otherwise make every DPoP `htu` mismatch.
315
+ */
316
+ export function publicOrigin(request, baseUrl, issuer = globalPoppyIssuer()) {
317
+ if (baseUrl !== undefined)
318
+ return baseUrl.replace(/\/+$/, '');
319
+ const protocol = request.protocol === 'http' && issuer?.startsWith('https:') ? 'https' : request.protocol;
320
+ return `${protocol}://${request.host}`;
321
+ }
322
+ /** A {@link PoppyExchange} over an Adonis request — what the Poppy server middleware builds. */
323
+ export function adonisExchange(ctx, options) {
324
+ const origin = publicOrigin({ protocol: ctx.request.protocol(), host: ctx.request.host() ?? 'localhost' }, options.baseUrl);
325
+ const original = ctx.request.url(true) ?? ctx.request.url() ?? '/';
326
+ const target = new URL(original, `${origin}/`);
327
+ return {
328
+ method: ctx.request.method(),
329
+ path: target.pathname,
330
+ query: Object.fromEntries(target.searchParams),
331
+ url: `${origin}${target.pathname}${target.search}`,
332
+ headers: lowerHeaders(ctx.request.headers()),
333
+ rawHeaders: rawLowerHeaders(ctx.request.headers()),
334
+ async readBody(limit) {
335
+ // Mounted ahead of the bodyparser: the body is still on the socket.
336
+ const parsed = ctx.request.raw?.();
337
+ if (typeof parsed === 'string')
338
+ return parsed;
339
+ return readStream(ctx.request.request, limit);
340
+ },
341
+ json(status, body, headers = {}) {
342
+ ctx.response.status(status);
343
+ for (const [name, value] of Object.entries(headers))
344
+ ctx.response.header(name, value);
345
+ ctx.response.header('Content-Type', 'application/json');
346
+ ctx.response.send(JSON.stringify(body));
347
+ },
348
+ openStream(headers) {
349
+ const raw = ctx.response.response;
350
+ // Headers the request already set (a cookie) — `writeHead` on the raw response skips them.
351
+ for (const [name, value] of Object.entries(ctx.response.getHeaders())) {
352
+ if (value !== undefined && !(name in headers)) {
353
+ raw.setHeader(name, value);
354
+ }
355
+ }
356
+ raw.writeHead(200, headers);
357
+ raw.flushHeaders?.();
358
+ return writer(raw, ctx.request.request);
359
+ },
360
+ };
361
+ }
362
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/poppy/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type { PoppyAuthenticate, PoppyAuthFailure, PoppyAuthOptions, PoppyAuthRequest, PoppyAuthResult, PoppyPrincipal, } from './auth.js';
2
+ export { globalPoppyAuthenticate, globalPoppyIssuer, POPPY_AUTHENTICATE_SLOT } from './auth.js';
3
+ export type { PoppyActionFormatter, PoppyActionOutcome, PoppyConversationsOptions, PoppyDirectHooks, PoppyHandoffDecision, PoppyHandoffHooks, PoppyHookContext, PoppyReadResult, PoppyStreamItem, PoppyTexts, } from './conversations.js';
4
+ export { DEFAULT_POPPY_TEXTS, formatPoppyAction, PoppyConversations, poppyActorId, } from './conversations.js';
5
+ export type { PoppyConfig } from './define_config.js';
6
+ export { definePoppyConfig } from './define_config.js';
7
+ export type { PoppyEndpoints } from './endpoints.js';
8
+ export { announcedPoppyEndpoints, announcePoppyEndpoints, POPPY_ENDPOINTS_SLOT, poppyConversationsUrl, } from './endpoints.js';
9
+ export type { PoppyExchange, PoppyHandlerOptions, PoppyStreamWriter } from './handler.js';
10
+ export { adonisExchange, createPoppyHandler, nodeExchange, publicOrigin } from './handler.js';
11
+ export type { PoppyContext, PoppyErrorCode, PoppyEvent, PoppyEventBody, PoppyEventMessage, PoppyEventType, PoppyInboundMessage, PoppyResponder, PoppySender, PoppyStatus, } from './protocol.js';
12
+ export { POPPY_PROTOCOL_TYPE, POPPY_PROTOCOL_VERSION, POPPY_READ_SCOPE, POPPY_WRITE_SCOPE, PoppyError, } from './protocol.js';
13
+ export type { PoppyRedisClient, RedisPoppyStoreOptions } from './redis-store.js';
14
+ export { redisPoppyStore } from './redis-store.js';
15
+ export type { LucidPoppyStoreOptions, PoppyConversationPatch, PoppyConversationRecord, PoppyGrant, PoppyMessageClaim, PoppyMessageReceipt, PoppyStore, StoredPoppyEvent, } from './store.js';
16
+ export { ensurePoppyTables, InMemoryPoppyStore, LucidPoppyStore, POPPY_TABLES, poppyTableStatements, } from './store.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/poppy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAChG,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9F,YAAY,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { globalPoppyAuthenticate, globalPoppyIssuer, POPPY_AUTHENTICATE_SLOT } from './auth.js';
2
+ export { DEFAULT_POPPY_TEXTS, formatPoppyAction, PoppyConversations, poppyActorId, } from './conversations.js';
3
+ export { definePoppyConfig } from './define_config.js';
4
+ export { announcedPoppyEndpoints, announcePoppyEndpoints, POPPY_ENDPOINTS_SLOT, poppyConversationsUrl, } from './endpoints.js';
5
+ export { adonisExchange, createPoppyHandler, nodeExchange, publicOrigin } from './handler.js';
6
+ export { POPPY_PROTOCOL_TYPE, POPPY_PROTOCOL_VERSION, POPPY_READ_SCOPE, POPPY_WRITE_SCOPE, PoppyError, } from './protocol.js';
7
+ export { redisPoppyStore } from './redis-store.js';
8
+ export { ensurePoppyTables, InMemoryPoppyStore, LucidPoppyStore, POPPY_TABLES, poppyTableStatements, } from './store.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/poppy/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAahG,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAa9F,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAWnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * The wire format of Personal Agent Protocol ("Poppy", Draft 0.1, §7) conversations: messages,
3
+ * events, statuses and the error codes of §7.13. Hand-rolled like the A2A surface — the rules are
4
+ * few and exact, and unknown fields are ignored everywhere (§3.1, §3.3).
5
+ *
6
+ * @experimental Tracks Personal Agent Protocol Draft 0.1 (https://personalagentprotocol.org/docs/spec),
7
+ * a spec still in development: this API WILL change as the spec evolves — possibly in breaking
8
+ * ways, outside semver majors while it is a draft.
9
+ */
10
+ /** The `protocol_version` this surface implements. */
11
+ export declare const POPPY_PROTOCOL_VERSION = "0.1";
12
+ /** The `type` of this surface's entry in `poppy.json` `agent.protocols` (§7.1). */
13
+ export declare const POPPY_PROTOCOL_TYPE = "poppy";
14
+ /** The account scopes the protocol defines (§4.4). Companies may add their own. */
15
+ export declare const POPPY_READ_SCOPE = "poppy:read";
16
+ export declare const POPPY_WRITE_SCOPE = "poppy:write";
17
+ export type PoppyStatus = 'working' | 'idle' | 'queued' | 'closed';
18
+ export type PoppyResponder = 'agent' | 'human';
19
+ export type PoppySender = 'agent' | 'human';
20
+ /** Facts about the User's situation (§7.4). Other fields are kept as sent. */
21
+ export interface PoppyContext {
22
+ locale?: string;
23
+ time_zone?: string;
24
+ user_available?: boolean;
25
+ [field: string]: unknown;
26
+ }
27
+ /** A message as the Personal Agent sends it (§7.4). */
28
+ export interface PoppyInboundMessage {
29
+ id: string;
30
+ sender: PoppySender;
31
+ text?: string;
32
+ data?: Record<string, unknown>;
33
+ context?: PoppyContext;
34
+ }
35
+ /** A message as it appears in a `message` event (§7.5): `role` says which side it came from. */
36
+ export interface PoppyEventMessage {
37
+ id: string;
38
+ role: 'user' | 'company';
39
+ sender: PoppySender;
40
+ text?: string;
41
+ data?: Record<string, unknown>;
42
+ context?: PoppyContext;
43
+ }
44
+ export type PoppyEventType = 'message' | 'state' | 'authorization' | 'user_requested' | 'direct_opened' | 'direct_closed';
45
+ /** One event of a conversation (§7.5): `id`, `type`, `created_at`, and the type's own fields. */
46
+ export interface PoppyEvent {
47
+ id: string;
48
+ type: PoppyEventType | (string & {});
49
+ created_at: string;
50
+ [field: string]: unknown;
51
+ }
52
+ /** The type-specific fields of a new event — what the store appends. */
53
+ export type PoppyEventBody = {
54
+ type: 'message';
55
+ message: PoppyEventMessage;
56
+ } | {
57
+ type: 'state';
58
+ status: PoppyStatus;
59
+ responder: PoppyResponder;
60
+ } | {
61
+ type: 'authorization';
62
+ error: 'sign_in_required' | 'insufficient_scope';
63
+ scope?: string;
64
+ } | {
65
+ type: 'user_requested';
66
+ reason: string;
67
+ } | {
68
+ type: 'direct_opened' | 'direct_closed';
69
+ conversation_id: string;
70
+ };
71
+ /** The conversation errors of §7.13, plus the request errors this surface answers. */
72
+ declare const ERRORS: {
73
+ readonly conversation_not_found: 404;
74
+ readonly conversation_closed: 409;
75
+ readonly direct_conversation_open: 409;
76
+ readonly message_id_conflict: 409;
77
+ readonly invalid_cursor: 400;
78
+ readonly cursor_expired: 410;
79
+ readonly invalid_request: 400;
80
+ /** §3.3 — a request handled only with an extension the Personal Agent does not list. */
81
+ readonly extension_required: 403;
82
+ readonly sign_in_required: 403;
83
+ readonly not_found: 404;
84
+ readonly method_not_allowed: 405;
85
+ readonly request_too_large: 413;
86
+ readonly not_implemented: 501;
87
+ readonly server_error: 500;
88
+ };
89
+ export type PoppyErrorCode = keyof typeof ERRORS;
90
+ /**
91
+ * A Poppy error, answered as `{ "error": code, … }` like an OAuth error response (§7.13). `extra`
92
+ * carries what a code adds — `conversation_id` for `direct_conversation_open`, `extension` for
93
+ * `extension_required`. An app hook may throw one to refuse a request.
94
+ */
95
+ export declare class PoppyError extends Error {
96
+ readonly code: PoppyErrorCode;
97
+ readonly extra: Record<string, unknown>;
98
+ constructor(code: PoppyErrorCode, description?: string, extra?: Record<string, unknown>);
99
+ get status(): number;
100
+ toJSON(): Record<string, unknown>;
101
+ }
102
+ export declare function isPoppyId(value: unknown): value is string;
103
+ /** A new id of `kind` — `cnv_…`, `msg_…`, `evt_…`. */
104
+ export declare function newPoppyId(prefix: 'cnv' | 'msg'): string;
105
+ /** A stable id derived from `seed` — what lets a re-read turn produce the same company message. */
106
+ export declare function derivedPoppyId(prefix: 'msg', seed: string): string;
107
+ /** A validated `POST {endpoint}` / `POST {endpoint}/{id}/messages` body. */
108
+ export interface PoppySendBody {
109
+ message: PoppyInboundMessage;
110
+ /** Only on `POST {endpoint}`: start a Direct Conversation under this one (§7.10). */
111
+ parentConversationId?: string;
112
+ }
113
+ /**
114
+ * Parse a message request (§7.3, §7.4). Unknown fields — on the body, the message or its context —
115
+ * are ignored, never refused (§3.3). Only the fields the protocol defines are kept.
116
+ */
117
+ export declare function parseSendBody(raw: string, opts: {
118
+ allowParent: boolean;
119
+ }): PoppySendBody;
120
+ /**
121
+ * The fingerprint a retry is compared by (§7.3): the message's content and, for a first message,
122
+ * the conversation it was addressed to. Unknown fields were dropped by the parser, so a retry that
123
+ * adds one is still the same message.
124
+ */
125
+ export declare function messageFingerprint(target: string, body: PoppySendBody): string;
126
+ /**
127
+ * A request body that must be an empty JSON object (handoff, close) — anything else is tolerated:
128
+ * extensions may add fields (§3.3). Only malformed JSON is refused.
129
+ */
130
+ export declare function parseEmptyBody(raw: string): void;
131
+ export {};
132
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/poppy/protocol.ts"],"names":[],"mappings":"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"}