@adonis-agora/agent 0.76.3 → 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 (275) hide show
  1. package/CHANGELOG.md +16 -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/index.d.ts +2 -1
  56. package/dist/src/index.d.ts.map +1 -1
  57. package/dist/src/index.js +2 -1
  58. package/dist/src/index.js.map +1 -1
  59. package/dist/src/mcp/auth.d.ts +17 -0
  60. package/dist/src/mcp/auth.d.ts.map +1 -1
  61. package/dist/src/mcp/auth.js +56 -1
  62. package/dist/src/mcp/auth.js.map +1 -1
  63. package/dist/src/mcp/discovery.d.ts +13 -2
  64. package/dist/src/mcp/discovery.d.ts.map +1 -1
  65. package/dist/src/mcp/discovery.js +17 -2
  66. package/dist/src/mcp/discovery.js.map +1 -1
  67. package/dist/src/mcp/index.d.ts +1 -1
  68. package/dist/src/mcp/index.d.ts.map +1 -1
  69. package/dist/src/mcp/index.js.map +1 -1
  70. package/dist/src/mcp/scope.d.ts +13 -0
  71. package/dist/src/mcp/scope.d.ts.map +1 -0
  72. package/dist/src/mcp/scope.js +24 -0
  73. package/dist/src/mcp/scope.js.map +1 -0
  74. package/dist/src/mcp/server.d.ts +6 -1
  75. package/dist/src/mcp/server.d.ts.map +1 -1
  76. package/dist/src/mcp/server.js +1 -1
  77. package/dist/src/mcp/server.js.map +1 -1
  78. package/dist/src/poppy/auth.d.ts +77 -0
  79. package/dist/src/poppy/auth.d.ts.map +1 -0
  80. package/dist/src/poppy/auth.js +16 -0
  81. package/dist/src/poppy/auth.js.map +1 -0
  82. package/dist/src/poppy/conversations.d.ts +249 -0
  83. package/dist/src/poppy/conversations.d.ts.map +1 -0
  84. package/dist/src/poppy/conversations.js +1017 -0
  85. package/dist/src/poppy/conversations.js.map +1 -0
  86. package/dist/src/poppy/define_config.d.ts +98 -0
  87. package/dist/src/poppy/define_config.d.ts.map +1 -0
  88. package/dist/src/poppy/define_config.js +11 -0
  89. package/dist/src/poppy/define_config.js.map +1 -0
  90. package/dist/src/poppy/endpoints.d.ts +25 -0
  91. package/dist/src/poppy/endpoints.d.ts.map +1 -0
  92. package/dist/src/poppy/endpoints.js +31 -0
  93. package/dist/src/poppy/endpoints.js.map +1 -0
  94. package/dist/src/poppy/handler.d.ts +80 -0
  95. package/dist/src/poppy/handler.d.ts.map +1 -0
  96. package/dist/src/poppy/handler.js +362 -0
  97. package/dist/src/poppy/handler.js.map +1 -0
  98. package/dist/src/poppy/index.d.ts +17 -0
  99. package/dist/src/poppy/index.d.ts.map +1 -0
  100. package/dist/src/poppy/index.js +9 -0
  101. package/dist/src/poppy/index.js.map +1 -0
  102. package/dist/src/poppy/protocol.d.ts +132 -0
  103. package/dist/src/poppy/protocol.d.ts.map +1 -0
  104. package/dist/src/poppy/protocol.js +178 -0
  105. package/dist/src/poppy/protocol.js.map +1 -0
  106. package/dist/src/poppy/redis-store.d.ts +27 -0
  107. package/dist/src/poppy/redis-store.d.ts.map +1 -0
  108. package/dist/src/poppy/redis-store.js +148 -0
  109. package/dist/src/poppy/redis-store.js.map +1 -0
  110. package/dist/src/poppy/runtime.d.ts +6 -0
  111. package/dist/src/poppy/runtime.d.ts.map +1 -0
  112. package/dist/src/poppy/runtime.js +12 -0
  113. package/dist/src/poppy/runtime.js.map +1 -0
  114. package/dist/src/poppy/server_middleware.d.ts +11 -0
  115. package/dist/src/poppy/server_middleware.d.ts.map +1 -0
  116. package/dist/src/poppy/server_middleware.js +16 -0
  117. package/dist/src/poppy/server_middleware.js.map +1 -0
  118. package/dist/src/poppy/store.d.ts +207 -0
  119. package/dist/src/poppy/store.d.ts.map +1 -0
  120. package/dist/src/poppy/store.js +444 -0
  121. package/dist/src/poppy/store.js.map +1 -0
  122. package/dist/src/poppy-client/api.d.ts +36 -0
  123. package/dist/src/poppy-client/api.d.ts.map +1 -0
  124. package/dist/src/poppy-client/api.js +77 -0
  125. package/dist/src/poppy-client/api.js.map +1 -0
  126. package/dist/src/poppy-client/bin/poppy-agent.d.ts +3 -0
  127. package/dist/src/poppy-client/bin/poppy-agent.d.ts.map +1 -0
  128. package/dist/src/poppy-client/bin/poppy-agent.js +9 -0
  129. package/dist/src/poppy-client/bin/poppy-agent.js.map +1 -0
  130. package/dist/src/poppy-client/browser.d.ts +24 -0
  131. package/dist/src/poppy-client/browser.d.ts.map +1 -0
  132. package/dist/src/poppy-client/browser.js +83 -0
  133. package/dist/src/poppy-client/browser.js.map +1 -0
  134. package/dist/src/poppy-client/cli/main.d.ts +2 -0
  135. package/dist/src/poppy-client/cli/main.d.ts.map +1 -0
  136. package/dist/src/poppy-client/cli/main.js +776 -0
  137. package/dist/src/poppy-client/cli/main.js.map +1 -0
  138. package/dist/src/poppy-client/cli/prompt.d.ts +13 -0
  139. package/dist/src/poppy-client/cli/prompt.d.ts.map +1 -0
  140. package/dist/src/poppy-client/cli/prompt.js +50 -0
  141. package/dist/src/poppy-client/cli/prompt.js.map +1 -0
  142. package/dist/src/poppy-client/company.d.ts +87 -0
  143. package/dist/src/poppy-client/company.d.ts.map +1 -0
  144. package/dist/src/poppy-client/company.js +336 -0
  145. package/dist/src/poppy-client/company.js.map +1 -0
  146. package/dist/src/poppy-client/conversations.d.ts +89 -0
  147. package/dist/src/poppy-client/conversations.d.ts.map +1 -0
  148. package/dist/src/poppy-client/conversations.js +332 -0
  149. package/dist/src/poppy-client/conversations.js.map +1 -0
  150. package/dist/src/poppy-client/discovery.d.ts +41 -0
  151. package/dist/src/poppy-client/discovery.d.ts.map +1 -0
  152. package/dist/src/poppy-client/discovery.js +217 -0
  153. package/dist/src/poppy-client/discovery.js.map +1 -0
  154. package/dist/src/poppy-client/dpop.d.ts +19 -0
  155. package/dist/src/poppy-client/dpop.d.ts.map +1 -0
  156. package/dist/src/poppy-client/dpop.js +43 -0
  157. package/dist/src/poppy-client/dpop.js.map +1 -0
  158. package/dist/src/poppy-client/errors.d.ts +50 -0
  159. package/dist/src/poppy-client/errors.d.ts.map +1 -0
  160. package/dist/src/poppy-client/errors.js +55 -0
  161. package/dist/src/poppy-client/errors.js.map +1 -0
  162. package/dist/src/poppy-client/http.d.ts +40 -0
  163. package/dist/src/poppy-client/http.d.ts.map +1 -0
  164. package/dist/src/poppy-client/http.js +95 -0
  165. package/dist/src/poppy-client/http.js.map +1 -0
  166. package/dist/src/poppy-client/identity.d.ts +61 -0
  167. package/dist/src/poppy-client/identity.d.ts.map +1 -0
  168. package/dist/src/poppy-client/identity.js +111 -0
  169. package/dist/src/poppy-client/identity.js.map +1 -0
  170. package/dist/src/poppy-client/identity_server.d.ts +29 -0
  171. package/dist/src/poppy-client/identity_server.d.ts.map +1 -0
  172. package/dist/src/poppy-client/identity_server.js +84 -0
  173. package/dist/src/poppy-client/identity_server.js.map +1 -0
  174. package/dist/src/poppy-client/index.d.ts +19 -0
  175. package/dist/src/poppy-client/index.d.ts.map +1 -0
  176. package/dist/src/poppy-client/index.js +18 -0
  177. package/dist/src/poppy-client/index.js.map +1 -0
  178. package/dist/src/poppy-client/keys.d.ts +13 -0
  179. package/dist/src/poppy-client/keys.d.ts.map +1 -0
  180. package/dist/src/poppy-client/keys.js +31 -0
  181. package/dist/src/poppy-client/keys.js.map +1 -0
  182. package/dist/src/poppy-client/llm.d.ts +31 -0
  183. package/dist/src/poppy-client/llm.d.ts.map +1 -0
  184. package/dist/src/poppy-client/llm.js +230 -0
  185. package/dist/src/poppy-client/llm.js.map +1 -0
  186. package/dist/src/poppy-client/mcp.d.ts +16 -0
  187. package/dist/src/poppy-client/mcp.d.ts.map +1 -0
  188. package/dist/src/poppy-client/mcp.js +57 -0
  189. package/dist/src/poppy-client/mcp.js.map +1 -0
  190. package/dist/src/poppy-client/open_url.d.ts +3 -0
  191. package/dist/src/poppy-client/open_url.d.ts.map +1 -0
  192. package/dist/src/poppy-client/open_url.js +13 -0
  193. package/dist/src/poppy-client/open_url.js.map +1 -0
  194. package/dist/src/poppy-client/signin.d.ts +59 -0
  195. package/dist/src/poppy-client/signin.d.ts.map +1 -0
  196. package/dist/src/poppy-client/signin.js +210 -0
  197. package/dist/src/poppy-client/signin.js.map +1 -0
  198. package/dist/src/poppy-client/sse.d.ts +15 -0
  199. package/dist/src/poppy-client/sse.d.ts.map +1 -0
  200. package/dist/src/poppy-client/sse.js +74 -0
  201. package/dist/src/poppy-client/sse.js.map +1 -0
  202. package/dist/src/poppy-client/store.d.ts +89 -0
  203. package/dist/src/poppy-client/store.d.ts.map +1 -0
  204. package/dist/src/poppy-client/store.js +79 -0
  205. package/dist/src/poppy-client/store.js.map +1 -0
  206. package/dist/src/poppy-client/token_client.d.ts +69 -0
  207. package/dist/src/poppy-client/token_client.d.ts.map +1 -0
  208. package/dist/src/poppy-client/token_client.js +154 -0
  209. package/dist/src/poppy-client/token_client.js.map +1 -0
  210. package/dist/src/poppy-client/types.d.ts +184 -0
  211. package/dist/src/poppy-client/types.d.ts.map +1 -0
  212. package/dist/src/poppy-client/types.js +8 -0
  213. package/dist/src/poppy-client/types.js.map +1 -0
  214. package/dist/src/poppy-client/util.d.ts +42 -0
  215. package/dist/src/poppy-client/util.d.ts.map +1 -0
  216. package/dist/src/poppy-client/util.js +122 -0
  217. package/dist/src/poppy-client/util.js.map +1 -0
  218. package/dist/src/poppy-connections/config.d.ts +134 -0
  219. package/dist/src/poppy-connections/config.d.ts.map +1 -0
  220. package/dist/src/poppy-connections/config.js +44 -0
  221. package/dist/src/poppy-connections/config.js.map +1 -0
  222. package/dist/src/poppy-connections/crypto.d.ts +12 -0
  223. package/dist/src/poppy-connections/crypto.d.ts.map +1 -0
  224. package/dist/src/poppy-connections/crypto.js +36 -0
  225. package/dist/src/poppy-connections/crypto.js.map +1 -0
  226. package/dist/src/poppy-connections/http.d.ts +63 -0
  227. package/dist/src/poppy-connections/http.d.ts.map +1 -0
  228. package/dist/src/poppy-connections/http.js +217 -0
  229. package/dist/src/poppy-connections/http.js.map +1 -0
  230. package/dist/src/poppy-connections/index.d.ts +14 -0
  231. package/dist/src/poppy-connections/index.d.ts.map +1 -0
  232. package/dist/src/poppy-connections/index.js +17 -0
  233. package/dist/src/poppy-connections/index.js.map +1 -0
  234. package/dist/src/poppy-connections/resume.d.ts +46 -0
  235. package/dist/src/poppy-connections/resume.d.ts.map +1 -0
  236. package/dist/src/poppy-connections/resume.js +109 -0
  237. package/dist/src/poppy-connections/resume.js.map +1 -0
  238. package/dist/src/poppy-connections/runtime.d.ts +4 -0
  239. package/dist/src/poppy-connections/runtime.d.ts.map +1 -0
  240. package/dist/src/poppy-connections/runtime.js +9 -0
  241. package/dist/src/poppy-connections/runtime.js.map +1 -0
  242. package/dist/src/poppy-connections/server_middleware.d.ts +10 -0
  243. package/dist/src/poppy-connections/server_middleware.d.ts.map +1 -0
  244. package/dist/src/poppy-connections/server_middleware.js +14 -0
  245. package/dist/src/poppy-connections/server_middleware.js.map +1 -0
  246. package/dist/src/poppy-connections/service.d.ts +179 -0
  247. package/dist/src/poppy-connections/service.d.ts.map +1 -0
  248. package/dist/src/poppy-connections/service.js +648 -0
  249. package/dist/src/poppy-connections/service.js.map +1 -0
  250. package/dist/src/poppy-connections/store.d.ts +139 -0
  251. package/dist/src/poppy-connections/store.d.ts.map +1 -0
  252. package/dist/src/poppy-connections/store.js +260 -0
  253. package/dist/src/poppy-connections/store.js.map +1 -0
  254. package/dist/src/poppy-connections/tools.d.ts +65 -0
  255. package/dist/src/poppy-connections/tools.d.ts.map +1 -0
  256. package/dist/src/poppy-connections/tools.js +574 -0
  257. package/dist/src/poppy-connections/tools.js.map +1 -0
  258. package/dist/src/react/core/approvals/use-action-proposals.d.ts +6 -1
  259. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -1
  260. package/dist/src/react/core/approvals/use-action-proposals.js +18 -3
  261. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -1
  262. package/dist/src/react/core/use-agent-chat.d.ts +6 -0
  263. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -1
  264. package/dist/src/react/core/use-agent-chat.js +47 -1
  265. package/dist/src/react/core/use-agent-chat.js.map +1 -1
  266. package/dist/src/tool-presentation.d.ts +6 -0
  267. package/dist/src/tool-presentation.d.ts.map +1 -1
  268. package/dist/src/tool-presentation.js +1 -0
  269. package/dist/src/tool-presentation.js.map +1 -1
  270. package/dist/src/types.d.ts +6 -0
  271. package/dist/src/types.d.ts.map +1 -1
  272. package/package.json +41 -2
  273. package/skills/agent-governance/SKILL.md +13 -2
  274. package/skills/agent-personas-agents/SKILL.md +1 -1
  275. package/skills/agent-tools/SKILL.md +20 -3
@@ -0,0 +1,574 @@
1
+ import { ResourceAuthError } from '../poppy-client/index.js';
2
+ import { normalizeDomain } from './config.js';
3
+ import { OAuthError, PoppyCompanyNotAllowedError } from './service.js';
4
+ /** A small Standard Schema for a flat object — what these tools take. */
5
+ function objectSchema(fields, required) {
6
+ return {
7
+ '~standard': {
8
+ version: 1,
9
+ vendor: 'adonis-agora-agent',
10
+ validate: (value) => {
11
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
12
+ return { issues: [{ message: 'must be an object' }] };
13
+ }
14
+ const v = value;
15
+ for (const name of required) {
16
+ if (v[name] === undefined || v[name] === '') {
17
+ return { issues: [{ message: 'required', path: [name] }] };
18
+ }
19
+ }
20
+ for (const [name, field] of Object.entries(fields)) {
21
+ const x = v[name];
22
+ if (x === undefined)
23
+ continue;
24
+ const ok = field.type === 'array'
25
+ ? Array.isArray(x) && x.every((i) => typeof i === 'string')
26
+ : field.type === 'object'
27
+ ? x !== null && typeof x === 'object' && !Array.isArray(x)
28
+ : typeof x === 'string';
29
+ if (!ok)
30
+ return { issues: [{ message: `must be ${field.type}`, path: [name] }] };
31
+ }
32
+ return { value: value };
33
+ },
34
+ jsonSchema: {
35
+ input: () => ({
36
+ type: 'object',
37
+ properties: fields,
38
+ required,
39
+ additionalProperties: false,
40
+ }),
41
+ },
42
+ },
43
+ };
44
+ }
45
+ const company = {
46
+ type: 'string',
47
+ description: 'The company, by its domain (as listed by the companies tool).',
48
+ };
49
+ /** What a failure tells the model — the next step, never a stack. */
50
+ function explain(prefix, error) {
51
+ if (error instanceof PoppyCompanyNotAllowedError) {
52
+ return {
53
+ error: 'not_allowed',
54
+ message: `${error.domain} is not a company this assistant may use.`,
55
+ next: `Call ${prefix}companies: it lists the companies you can use, by domain — use that domain exactly.`,
56
+ };
57
+ }
58
+ if (error instanceof ResourceAuthError) {
59
+ if (error.code === 'insufficient_scope') {
60
+ return {
61
+ error: 'needs_permission',
62
+ scopes: (error.scope ?? '').split(' ').filter(Boolean),
63
+ next: `Call ${prefix}connect with these scopes; the person approves them on the company.`,
64
+ };
65
+ }
66
+ if (error.code === 'sign_in_required' || error.code === 'invalid_token') {
67
+ return { error: 'not_connected', next: `Call ${prefix}connect first.` };
68
+ }
69
+ }
70
+ if (error instanceof OAuthError && error.code === 'invalid_grant') {
71
+ return {
72
+ error: 'not_connected',
73
+ message: 'The connection was revoked.',
74
+ next: `Call ${prefix}connect.`,
75
+ };
76
+ }
77
+ return { error: 'failed', message: error instanceof Error ? error.message : String(error) };
78
+ }
79
+ /**
80
+ * A failure at a company the owner is not connected to (never connected, disconnected, revoked):
81
+ * whatever the company answered (a 401 in any shape), the next step is to connect.
82
+ */
83
+ async function explainAt(connections, owner, company, prefix, error) {
84
+ const explained = explain(prefix, error);
85
+ if (explained.error !== 'failed')
86
+ return explained;
87
+ const current = await connections.connection(owner, company).catch(() => null);
88
+ if (current?.status === 'active')
89
+ return explained;
90
+ return {
91
+ error: 'not_connected',
92
+ message: `The person's account at ${normalizeDomain(company)} is not connected.`,
93
+ next: `Call ${prefix}connect first.`,
94
+ };
95
+ }
96
+ function fill(template, values) {
97
+ return template.replace(/\{(\w+)\}/g, (_, k) => values[k] ?? `{${k}}`);
98
+ }
99
+ /** The JSON of `value`, cut for a confirmation card. */
100
+ function preview(value, max = 600) {
101
+ const json = JSON.stringify(value ?? {}, null, 2);
102
+ return json.length > max ? `${json.slice(0, max)}…` : json;
103
+ }
104
+ const DEFAULT_TWO_STEP = { confirm: 'confirm', token: 'confirmToken' };
105
+ const DEFAULT_SUMMARY_FIELDS = ['summary', 'resumo', 'message'];
106
+ /** The convention when `tool` declares both of its fields, else null. */
107
+ function twoStepOf(tool, convention) {
108
+ const c = convention === undefined ? DEFAULT_TWO_STEP : convention;
109
+ if (c === false)
110
+ return null;
111
+ const props = tool.inputSchema
112
+ ?.properties;
113
+ return props && c.confirm in props && c.token in props ? c : null;
114
+ }
115
+ function textOf(result) {
116
+ const raw = result.content;
117
+ const content = Array.isArray(raw) ? raw : [];
118
+ return content
119
+ .map((part) => part.type === 'text'
120
+ ? String(part.text ?? '')
121
+ : '')
122
+ .filter(Boolean)
123
+ .join('\n');
124
+ }
125
+ /** A two-step preview: the token to commit with and a summary for the card, or null. */
126
+ function previewOf(text, convention) {
127
+ let parsed;
128
+ try {
129
+ parsed = JSON.parse(text);
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ if (parsed === null || typeof parsed !== 'object')
135
+ return null;
136
+ const body = parsed;
137
+ const token = body[convention.token];
138
+ if (typeof token !== 'string' || token === '')
139
+ return null;
140
+ const field = (convention.summary ?? DEFAULT_SUMMARY_FIELDS).find((f) => typeof body[f] === 'string' && body[f] !== '');
141
+ return { token, summary: field ? body[field] : null };
142
+ }
143
+ /**
144
+ * Runs a company MCP tool for `owner` and words the outcome for the model (`readOnly` refuses a
145
+ * tool the company does not mark `readOnlyHint`). For apps that build their own confirmed tools.
146
+ *
147
+ * A write (`readOnly: false`) to a tool that confirms in two steps (see `tools.twoStep`) is
148
+ * committed: the call is made for its preview, then again with `confirm` and the fresh token —
149
+ * call it only once the person has confirmed.
150
+ */
151
+ export async function callCompanyTool(connections, owner, input, readOnly, options = {}) {
152
+ const opts = typeof options === 'string' ? { prefix: options } : options;
153
+ const prefix = opts.prefix ?? 'poppy_';
154
+ try {
155
+ const conn = await connections.mcp(owner, input.company);
156
+ try {
157
+ const { tools } = await conn.client.listTools();
158
+ const tool = tools.find((t) => t.name === input.tool);
159
+ if (!tool)
160
+ return { error: 'unknown_tool', message: `${input.company} has no tool ${input.tool}` };
161
+ if (readOnly && tool.annotations?.readOnlyHint !== true) {
162
+ return {
163
+ error: 'not_read_only',
164
+ next: `${input.tool} can change things: use ${prefix}write (the person confirms).`,
165
+ };
166
+ }
167
+ const args = input.arguments ?? {};
168
+ let result = await conn.client.callTool({ name: input.tool, arguments: args });
169
+ const twoStep = readOnly ? null : twoStepOf(tool, opts.twoStep);
170
+ if (twoStep && !result.isError && args[twoStep.confirm] === undefined) {
171
+ const pending = previewOf(textOf(result), twoStep);
172
+ if (pending) {
173
+ result = await conn.client.callTool({
174
+ name: input.tool,
175
+ arguments: { ...args, [twoStep.confirm]: true, [twoStep.token]: pending.token },
176
+ });
177
+ }
178
+ }
179
+ const text = textOf(result);
180
+ return { ...(result.isError ? { error: 'tool_error' } : {}), result: text };
181
+ }
182
+ finally {
183
+ await conn.close().catch(() => { });
184
+ }
185
+ }
186
+ catch (error) {
187
+ return explainAt(connections, owner, input.company, prefix, error);
188
+ }
189
+ }
190
+ /**
191
+ * The Company's own preview of a two-step write, for the confirmation card — nothing is written.
192
+ * Null when the tool does not confirm in two steps, or the preview did not come back.
193
+ */
194
+ export async function previewCompanyWrite(connections, owner, input, twoStep) {
195
+ const conn = await connections.mcp(owner, input.company);
196
+ try {
197
+ const { tools } = await conn.client.listTools();
198
+ const tool = tools.find((t) => t.name === input.tool);
199
+ const convention = tool ? twoStepOf(tool, twoStep) : null;
200
+ const args = input.arguments ?? {};
201
+ if (!convention || args[convention.confirm] !== undefined)
202
+ return null;
203
+ const result = await conn.client.callTool({ name: input.tool, arguments: args });
204
+ if (result.isError)
205
+ return null;
206
+ const pending = previewOf(textOf(result), convention);
207
+ return pending ? { summary: pending.summary } : null;
208
+ }
209
+ finally {
210
+ await conn.close().catch(() => { });
211
+ }
212
+ }
213
+ /** One exchange with the company's agent for `owner`, worded for the model (`act: false` = read-only token). */
214
+ export async function talkToCompany(connections, owner, input, act, prefix = 'poppy_') {
215
+ try {
216
+ const reply = await connections.ask(owner, input.company, input.message, { act });
217
+ const out = {
218
+ reply: reply.replies
219
+ .map((r) => r.text)
220
+ .filter(Boolean)
221
+ .join('\n\n'),
222
+ status: reply.status,
223
+ };
224
+ const actions = reply.replies.flatMap((r) => Array.isArray(r.data?.actions) ? r.data.actions : []);
225
+ if (actions.length > 0)
226
+ out.actions = actions;
227
+ if (reply.authorization) {
228
+ if (reply.authorization.error === 'no_read_scope') {
229
+ out.error = 'needs_permission';
230
+ out.next = `The connection has no read-only permission: call ${prefix}connect, or ${prefix}request (confirmed).`;
231
+ }
232
+ else if (!act && reply.authorization.error === 'insufficient_scope') {
233
+ out.error = 'needs_action';
234
+ out.next = `That needs the company to act: use ${prefix}request with the same message (the person confirms), or ${prefix}connect if it still lacks permission${reply.authorization.scope ? ` (${reply.authorization.scope})` : ''}.`;
235
+ }
236
+ else {
237
+ out.error =
238
+ reply.authorization.error === 'sign_in_required' ? 'not_connected' : 'needs_permission';
239
+ if (reply.authorization.scope)
240
+ out.scopes = reply.authorization.scope.split(' ');
241
+ out.next = `Call ${prefix}connect${reply.authorization.scope ? ' with these scopes' : ''}.`;
242
+ }
243
+ }
244
+ return out;
245
+ }
246
+ catch (error) {
247
+ return explain(prefix, error);
248
+ }
249
+ }
250
+ /**
251
+ * Registers the tools a turn uses to work with OTHER Poppy Companies for its user. Reads run at
252
+ * once; anything that can change something at a Company (`write`, `request`, `disconnect`) is an
253
+ * `action` — it goes through this app's confirmation (a card with Confirm/Cancel, or the channel's
254
+ * text approval), never silently. `connect` is an action too: its card carries the link, and
255
+ * completing the sign-in decides it, so the conversation resumes on its own.
256
+ */
257
+ export function registerPoppyConnectionTools(registry, connections, options = {}) {
258
+ const p = options.prefix ?? 'poppy_';
259
+ const roles = {
260
+ ...(options.roles !== undefined ? { roles: options.roles } : {}),
261
+ ...(options.ability !== undefined ? { ability: options.ability } : {}),
262
+ };
263
+ const texts = connections.texts;
264
+ const owner = (ctx) => connections.ownerOf(ctx.actor);
265
+ const names = [];
266
+ const notAllowed = (domain) => `${domain} is not a company this assistant may use. Call ${p}companies for the domains you can use.`;
267
+ const writeTools = new Set([`${p}write`, `${p}request`, `${p}disconnect`]);
268
+ const register = (spec, raw) => {
269
+ if (options.writes === false && writeTools.has(spec.name))
270
+ return;
271
+ const handler = resolved(raw);
272
+ if (options.connect === 'link' && spec.name === `${p}connect`) {
273
+ const prepare = handler.preflight;
274
+ registry.register({
275
+ ...spec,
276
+ ...roles,
277
+ kind: 'read',
278
+ description: 'Connect the person’s account at a company (or ask for more permissions there): returns a link they open to sign in at the company. Give them the link; once they say they finished, continue.',
279
+ }, {
280
+ async execute(input, ctx) {
281
+ const pre = await prepare(input, ctx, { phase: 'prepare' });
282
+ if (pre.status === 'completed')
283
+ return pre.output;
284
+ if (pre.status === 'denied')
285
+ return { error: 'not_allowed', message: pre.reason };
286
+ const id = connections.connectIdFor(`${ctx.runId}:${ctx.toolCallId ?? input.company}`);
287
+ return {
288
+ connected: false,
289
+ company: normalizeDomain(input.company),
290
+ link: connections.connectUrl(id),
291
+ next: 'Send the person this link to sign in at the company; continue once they say they finished.',
292
+ };
293
+ },
294
+ });
295
+ names.push(spec.name);
296
+ return;
297
+ }
298
+ registry.register({ ...spec, ...roles }, handler);
299
+ names.push(spec.name);
300
+ };
301
+ // Every tool takes the company as the model named it; resolve it to the allow-listed domain.
302
+ const resolved = (handler) => {
303
+ const fix = async (input, ctx) => {
304
+ const company = input.company;
305
+ if (typeof company !== 'string')
306
+ return input;
307
+ return { ...input, company: await connections.resolveCompany(owner(ctx), company) };
308
+ };
309
+ return {
310
+ ...handler,
311
+ execute: async (input, ctx) => handler.execute(await fix(input, ctx), ctx),
312
+ ...(handler.preflight
313
+ ? {
314
+ preflight: async (input, ctx, phase) => handler.preflight(await fix(input, ctx), ctx, phase),
315
+ }
316
+ : {}),
317
+ };
318
+ };
319
+ register({
320
+ name: `${p}companies`,
321
+ kind: 'read',
322
+ description: 'Companies (other apps and services) you can work with on the person’s behalf, and whether their account there is connected. Start here when the person asks for something at another company.',
323
+ inputSchema: objectSchema({}, []),
324
+ }, {
325
+ async execute(_input, ctx) {
326
+ const connected = await connections.list(owner(ctx));
327
+ return {
328
+ companies: await Promise.all(connections.allowedCompanies().map(async (c) => {
329
+ const found = connected.find((x) => x.domain === c.domain);
330
+ // Its name even before connecting (its `poppy.json`), so the model can match it.
331
+ const organization = found?.organization ?? (await connections.organizationOf(c.domain));
332
+ return {
333
+ company: c.domain,
334
+ ...(c.label !== undefined ? { label: c.label } : {}),
335
+ ...(organization !== undefined ? { organization } : {}),
336
+ connected: found?.status === 'active',
337
+ scopes: found?.status === 'active' ? found.scope.split(' ').filter(Boolean) : [],
338
+ };
339
+ })),
340
+ };
341
+ },
342
+ });
343
+ register({
344
+ name: `${p}connect`,
345
+ kind: 'action',
346
+ // The card lives as long as its sign-in link, not as long as a Confirm button.
347
+ approvalTtlMs: connections.connectTtlMs,
348
+ description: 'Connect the person’s account at a company (or ask for more permissions there): they get a link, sign in at the company and choose what to allow. The conversation continues once they finish. Use when a tool answered not_connected or needs_permission.',
349
+ inputSchema: objectSchema({
350
+ company,
351
+ scopes: {
352
+ type: 'array',
353
+ items: { type: 'string' },
354
+ description: 'Permissions to ask for (from needs_permission). Omit for the defaults.',
355
+ },
356
+ }, ['company']),
357
+ }, {
358
+ async preflight(input, ctx) {
359
+ const domain = normalizeDomain(input.company);
360
+ if (connections.policy(domain) === null) {
361
+ return { status: 'denied', reason: notAllowed(domain) };
362
+ }
363
+ const current = await connections.connection(owner(ctx), domain);
364
+ const granted = new Set((current?.scope ?? '').split(' '));
365
+ const wanted = input.scopes ?? [];
366
+ if (current?.status === 'active' && wanted.every((s) => granted.has(s))) {
367
+ return {
368
+ status: 'completed',
369
+ output: {
370
+ connected: true,
371
+ company: domain,
372
+ organization: current.organization,
373
+ scopes: [...granted].filter(Boolean),
374
+ },
375
+ };
376
+ }
377
+ try {
378
+ const started = await connections.startConnect({
379
+ actor: ctx.actor,
380
+ domain,
381
+ ...(wanted.length > 0 ? { scope: wanted.join(' ') } : {}),
382
+ threadId: ctx.threadId,
383
+ runId: ctx.runId,
384
+ ...(ctx.toolCallId !== undefined ? { toolCallId: ctx.toolCallId } : {}),
385
+ id: connections.connectIdFor(`${ctx.runId}:${ctx.toolCallId ?? domain}`),
386
+ });
387
+ const values = { company: started.organization, link: started.url };
388
+ return {
389
+ status: 'ready',
390
+ confirmation: {
391
+ title: fill(texts.confirmConnectTitle, values),
392
+ verb: fill(texts.confirmConnectVerb, values),
393
+ detail: fill(texts.confirmConnectDetail, values),
394
+ // The action is opening the link (finishing the sign-in decides the card).
395
+ link: started.url,
396
+ },
397
+ };
398
+ }
399
+ catch (error) {
400
+ return {
401
+ status: 'denied',
402
+ reason: String(explain(p, error).message ?? error.message),
403
+ };
404
+ }
405
+ },
406
+ async execute(input, ctx) {
407
+ const domain = normalizeDomain(input.company);
408
+ const current = await connections.connection(owner(ctx), domain);
409
+ if (current?.status === 'active') {
410
+ return {
411
+ connected: true,
412
+ company: domain,
413
+ organization: current.organization,
414
+ scopes: current.scope.split(' ').filter(Boolean),
415
+ };
416
+ }
417
+ const id = connections.connectIdFor(`${ctx.runId}:${ctx.toolCallId ?? domain}`);
418
+ return {
419
+ connected: false,
420
+ company: domain,
421
+ link: connections.connectUrl(id),
422
+ message: 'Not connected yet: the person has to open the link and sign in.',
423
+ };
424
+ },
425
+ });
426
+ register({
427
+ name: `${p}tools`,
428
+ kind: 'read',
429
+ description: 'The tools a connected company offers (its MCP server): name, description, whether it only reads, and its input schema. Read-only ones run with the read tool; the others with the write tool, which the person confirms.',
430
+ inputSchema: objectSchema({ company }, ['company']),
431
+ }, {
432
+ async execute(input, ctx) {
433
+ try {
434
+ const conn = await connections.mcp(owner(ctx), input.company);
435
+ try {
436
+ const { tools } = await conn.client.listTools();
437
+ return {
438
+ tools: tools.map((t) => ({
439
+ name: t.name,
440
+ description: t.description ?? '',
441
+ readOnly: t.annotations?.readOnlyHint === true,
442
+ inputSchema: t.inputSchema,
443
+ })),
444
+ };
445
+ }
446
+ finally {
447
+ await conn.close().catch(() => { });
448
+ }
449
+ }
450
+ catch (error) {
451
+ return explainAt(connections, owner(ctx), input.company, p, error);
452
+ }
453
+ },
454
+ });
455
+ const toolInput = objectSchema({
456
+ company,
457
+ tool: { type: 'string', description: 'The company tool’s name (from the tools tool).' },
458
+ arguments: { type: 'object', description: 'Its arguments, as its input schema says.' },
459
+ }, ['company', 'tool']);
460
+ register({
461
+ name: `${p}read`,
462
+ kind: 'read',
463
+ description: 'Run a READ-ONLY tool of a connected company (readOnly: true in the tools list).',
464
+ inputSchema: toolInput,
465
+ }, {
466
+ execute: (input, ctx) => callCompanyTool(connections, owner(ctx), input, true, { prefix: p }),
467
+ });
468
+ register({
469
+ name: `${p}write`,
470
+ kind: 'action',
471
+ description: 'Run a company tool that can CHANGE something there. The person confirms it first. Use only for what they asked.',
472
+ inputSchema: toolInput,
473
+ }, {
474
+ async preflight(input, ctx) {
475
+ const domain = normalizeDomain(input.company);
476
+ if (connections.policy(domain) === null) {
477
+ return { status: 'denied', reason: notAllowed(domain) };
478
+ }
479
+ const current = await connections.connection(owner(ctx), domain);
480
+ if (current?.status !== 'active') {
481
+ return {
482
+ status: 'denied',
483
+ reason: `Not connected to ${domain}: call ${p}connect first.`,
484
+ };
485
+ }
486
+ // A two-step Company words the change itself: its preview goes on the card (nothing is
487
+ // written yet); confirming commits it with a fresh token.
488
+ const companyPreview = await previewCompanyWrite(connections, owner(ctx), input, options.twoStep).catch(() => null);
489
+ const args = preview(input.arguments);
490
+ return {
491
+ status: 'ready',
492
+ confirmation: {
493
+ title: fill(texts.confirmWriteTitle, {
494
+ company: current.organization,
495
+ tool: input.tool,
496
+ }),
497
+ verb: texts.confirmVerb,
498
+ detail: companyPreview?.summary ? `${companyPreview.summary}\n\n${args}` : args,
499
+ },
500
+ };
501
+ },
502
+ execute: (input, ctx) => callCompanyTool(connections, owner(ctx), input, false, {
503
+ prefix: p,
504
+ ...(options.twoStep !== undefined ? { twoStep: options.twoStep } : {}),
505
+ }),
506
+ });
507
+ const messageInput = objectSchema({
508
+ company,
509
+ message: { type: 'string', description: 'What to say to the company’s assistant.' },
510
+ }, ['company', 'message']);
511
+ register({
512
+ name: `${p}ask`,
513
+ kind: 'read',
514
+ description: 'Ask a company’s own assistant a question (read-only: it cannot change anything with this). Answers what its tools cannot: policies, status, availability.',
515
+ inputSchema: messageInput,
516
+ }, { execute: (input, ctx) => talkToCompany(connections, owner(ctx), input, false, p) });
517
+ register({
518
+ name: `${p}request`,
519
+ kind: 'action',
520
+ description: 'Ask a company’s assistant to DO something on the person’s account there. The person confirms the message first.',
521
+ inputSchema: messageInput,
522
+ }, {
523
+ async preflight(input, ctx) {
524
+ const domain = normalizeDomain(input.company);
525
+ if (connections.policy(domain) === null) {
526
+ return { status: 'denied', reason: notAllowed(domain) };
527
+ }
528
+ const current = await connections.connection(owner(ctx), domain);
529
+ return {
530
+ status: 'ready',
531
+ confirmation: {
532
+ title: fill(texts.confirmRequestTitle, { company: current?.organization ?? domain }),
533
+ verb: texts.confirmVerb,
534
+ detail: input.message,
535
+ },
536
+ };
537
+ },
538
+ execute: (input, ctx) => talkToCompany(connections, owner(ctx), input, true, p),
539
+ });
540
+ register({
541
+ name: `${p}disconnect`,
542
+ kind: 'action',
543
+ description: 'Disconnect the person’s account at a company (revokes this assistant’s access there).',
544
+ inputSchema: objectSchema({ company }, ['company']),
545
+ }, {
546
+ async preflight(input, ctx) {
547
+ const current = await connections.connection(owner(ctx), input.company);
548
+ if (current?.status !== 'active') {
549
+ return {
550
+ status: 'completed',
551
+ output: { disconnected: true, company: normalizeDomain(input.company) },
552
+ };
553
+ }
554
+ return {
555
+ status: 'ready',
556
+ confirmation: {
557
+ title: fill(texts.confirmDisconnectTitle, { company: current.organization }),
558
+ verb: texts.confirmVerb,
559
+ },
560
+ };
561
+ },
562
+ async execute(input, ctx) {
563
+ try {
564
+ await connections.disconnect(owner(ctx), input.company);
565
+ return { disconnected: true, company: normalizeDomain(input.company) };
566
+ }
567
+ catch (error) {
568
+ return explain(p, error);
569
+ }
570
+ },
571
+ });
572
+ return names;
573
+ }
574
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/poppy-connections/tools.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,10 @@ export interface ActionProposalsState {
13
13
  }
14
14
  /** `cause` says the proposals route is not there at all (not a transient failure of one read). */
15
15
  export declare function isProposalsUnsupported(cause: unknown): boolean;
16
- export declare function useActionProposals(backend: AgentBackend, threadId: string | undefined, setMessages: (update: (current: UIMessage[]) => UIMessage[]) => void, refreshKey: string, pollMs?: number): ActionProposalsState;
16
+ export declare function useActionProposals(backend: AgentBackend, threadId: string | undefined, setMessages: (update: (current: UIMessage[]) => UIMessage[]) => void, refreshKey: string, pollMs?: number,
17
+ /**
18
+ * An outcome was newly written to the thread (not one already there when the thread was first
19
+ * read): the server may continue the conversation from it with a turn this chat did not start.
20
+ */
21
+ onAdmitted?: (proposalIds: string[]) => void): ActionProposalsState;
17
22
  //# sourceMappingURL=use-action-proposals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-action-proposals.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/approvals/use-action-proposals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAiBD,kGAAkG;AAClG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI9D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EACpE,UAAU,EAAE,MAAM,EAClB,MAAM,SAAO,GACZ,oBAAoB,CA0GtB"}
1
+ {"version":3,"file":"use-action-proposals.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/approvals/use-action-proposals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAiBD,kGAAkG;AAClG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI9D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EACpE,UAAU,EAAE,MAAM,EAClB,MAAM,SAAO;AACb;;;GAGG;AACH,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,GAC3C,oBAAoB,CAmHtB"}