@wiro-ai/wiro-mcp 1.3.4 → 1.4.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 (283) hide show
  1. package/README.md +183 -16
  2. package/dist/client.d.ts +16 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +126 -24
  5. package/dist/client.js.map +1 -1
  6. package/dist/index.js +4 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/instructions.d.ts +2 -0
  9. package/dist/instructions.d.ts.map +1 -0
  10. package/dist/instructions.js +29 -0
  11. package/dist/instructions.js.map +1 -0
  12. package/dist/playbooks.d.ts +8 -0
  13. package/dist/playbooks.d.ts.map +1 -0
  14. package/dist/playbooks.js +667 -0
  15. package/dist/playbooks.js.map +1 -0
  16. package/dist/prompts.d.ts +4 -0
  17. package/dist/prompts.d.ts.map +1 -0
  18. package/dist/prompts.js +133 -0
  19. package/dist/prompts.js.map +1 -0
  20. package/dist/server.d.ts +15 -2
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +12 -7
  23. package/dist/server.js.map +1 -1
  24. package/dist/tools/apply-agent-skills.d.ts +4 -0
  25. package/dist/tools/apply-agent-skills.d.ts.map +1 -0
  26. package/dist/tools/apply-agent-skills.js +601 -0
  27. package/dist/tools/apply-agent-skills.js.map +1 -0
  28. package/dist/tools/cancel-agent-message.d.ts +4 -0
  29. package/dist/tools/cancel-agent-message.d.ts.map +1 -0
  30. package/dist/tools/cancel-agent-message.js +126 -0
  31. package/dist/tools/cancel-agent-message.js.map +1 -0
  32. package/dist/tools/cancel-task.js +3 -3
  33. package/dist/tools/cancel-task.js.map +1 -1
  34. package/dist/tools/clone-workflow.d.ts +4 -0
  35. package/dist/tools/clone-workflow.d.ts.map +1 -0
  36. package/dist/tools/clone-workflow.js +83 -0
  37. package/dist/tools/clone-workflow.js.map +1 -0
  38. package/dist/tools/connect-agent-oauth.d.ts +4 -0
  39. package/dist/tools/connect-agent-oauth.d.ts.map +1 -0
  40. package/dist/tools/connect-agent-oauth.js +508 -0
  41. package/dist/tools/connect-agent-oauth.js.map +1 -0
  42. package/dist/tools/control-agent.d.ts +4 -0
  43. package/dist/tools/control-agent.d.ts.map +1 -0
  44. package/dist/tools/control-agent.js +289 -0
  45. package/dist/tools/control-agent.js.map +1 -0
  46. package/dist/tools/create-workflow.d.ts +100 -0
  47. package/dist/tools/create-workflow.d.ts.map +1 -0
  48. package/dist/tools/create-workflow.js +102 -0
  49. package/dist/tools/create-workflow.js.map +1 -0
  50. package/dist/tools/delete-agent-session.d.ts +6 -0
  51. package/dist/tools/delete-agent-session.d.ts.map +1 -0
  52. package/dist/tools/delete-agent-session.js +134 -0
  53. package/dist/tools/delete-agent-session.js.map +1 -0
  54. package/dist/tools/delete-agent.d.ts +4 -0
  55. package/dist/tools/delete-agent.d.ts.map +1 -0
  56. package/dist/tools/delete-agent.js +145 -0
  57. package/dist/tools/delete-agent.js.map +1 -0
  58. package/dist/tools/delete-workflow.d.ts +4 -0
  59. package/dist/tools/delete-workflow.d.ts.map +1 -0
  60. package/dist/tools/delete-workflow.js +77 -0
  61. package/dist/tools/delete-workflow.js.map +1 -0
  62. package/dist/tools/deploy-agent.d.ts +4 -0
  63. package/dist/tools/deploy-agent.d.ts.map +1 -0
  64. package/dist/tools/deploy-agent.js +463 -0
  65. package/dist/tools/deploy-agent.js.map +1 -0
  66. package/dist/tools/disconnect-agent-oauth.d.ts +4 -0
  67. package/dist/tools/disconnect-agent-oauth.d.ts.map +1 -0
  68. package/dist/tools/disconnect-agent-oauth.js +118 -0
  69. package/dist/tools/disconnect-agent-oauth.js.map +1 -0
  70. package/dist/tools/get-account.d.ts +4 -0
  71. package/dist/tools/get-account.d.ts.map +1 -0
  72. package/dist/tools/get-account.js +112 -0
  73. package/dist/tools/get-account.js.map +1 -0
  74. package/dist/tools/get-agent-activity.d.ts +4 -0
  75. package/dist/tools/get-agent-activity.d.ts.map +1 -0
  76. package/dist/tools/get-agent-activity.js +383 -0
  77. package/dist/tools/get-agent-activity.js.map +1 -0
  78. package/dist/tools/get-agent-conversation.d.ts +4 -0
  79. package/dist/tools/get-agent-conversation.d.ts.map +1 -0
  80. package/dist/tools/get-agent-conversation.js +228 -0
  81. package/dist/tools/get-agent-conversation.js.map +1 -0
  82. package/dist/tools/get-agent-message.d.ts +4 -0
  83. package/dist/tools/get-agent-message.d.ts.map +1 -0
  84. package/dist/tools/get-agent-message.js +68 -0
  85. package/dist/tools/get-agent-message.js.map +1 -0
  86. package/dist/tools/get-agent-template.d.ts +4 -0
  87. package/dist/tools/get-agent-template.d.ts.map +1 -0
  88. package/dist/tools/get-agent-template.js +128 -0
  89. package/dist/tools/get-agent-template.js.map +1 -0
  90. package/dist/tools/get-model-schema.d.ts +5 -1
  91. package/dist/tools/get-model-schema.d.ts.map +1 -1
  92. package/dist/tools/get-model-schema.js +138 -8
  93. package/dist/tools/get-model-schema.js.map +1 -1
  94. package/dist/tools/get-my-agent.d.ts +4 -0
  95. package/dist/tools/get-my-agent.d.ts.map +1 -0
  96. package/dist/tools/get-my-agent.js +117 -0
  97. package/dist/tools/get-my-agent.js.map +1 -0
  98. package/dist/tools/get-playbook.d.ts +3 -0
  99. package/dist/tools/get-playbook.d.ts.map +1 -0
  100. package/dist/tools/get-playbook.js +50 -0
  101. package/dist/tools/get-playbook.js.map +1 -0
  102. package/dist/tools/get-task-price.d.ts +1 -1
  103. package/dist/tools/get-task-price.d.ts.map +1 -1
  104. package/dist/tools/get-task-price.js +64 -16
  105. package/dist/tools/get-task-price.js.map +1 -1
  106. package/dist/tools/get-task.d.ts.map +1 -1
  107. package/dist/tools/get-task.js +26 -9
  108. package/dist/tools/get-task.js.map +1 -1
  109. package/dist/tools/get-workflow.d.ts +9 -0
  110. package/dist/tools/get-workflow.d.ts.map +1 -0
  111. package/dist/tools/get-workflow.js +105 -0
  112. package/dist/tools/get-workflow.js.map +1 -0
  113. package/dist/tools/index.d.ts +63 -2
  114. package/dist/tools/index.d.ts.map +1 -1
  115. package/dist/tools/index.js +131 -14
  116. package/dist/tools/index.js.map +1 -1
  117. package/dist/tools/kill-task.d.ts.map +1 -1
  118. package/dist/tools/kill-task.js +10 -6
  119. package/dist/tools/kill-task.js.map +1 -1
  120. package/dist/tools/list-agent-skills.d.ts +4 -0
  121. package/dist/tools/list-agent-skills.d.ts.map +1 -0
  122. package/dist/tools/list-agent-skills.js +242 -0
  123. package/dist/tools/list-agent-skills.js.map +1 -0
  124. package/dist/tools/list-agent-templates.d.ts +4 -0
  125. package/dist/tools/list-agent-templates.d.ts.map +1 -0
  126. package/dist/tools/list-agent-templates.js +110 -0
  127. package/dist/tools/list-agent-templates.js.map +1 -0
  128. package/dist/tools/list-my-agents.d.ts +4 -0
  129. package/dist/tools/list-my-agents.d.ts.map +1 -0
  130. package/dist/tools/list-my-agents.js +93 -0
  131. package/dist/tools/list-my-agents.js.map +1 -0
  132. package/dist/tools/list-studio-results.d.ts +4 -0
  133. package/dist/tools/list-studio-results.d.ts.map +1 -0
  134. package/dist/tools/list-studio-results.js +95 -0
  135. package/dist/tools/list-studio-results.js.map +1 -0
  136. package/dist/tools/list-tasks.d.ts.map +1 -1
  137. package/dist/tools/list-tasks.js +7 -5
  138. package/dist/tools/list-tasks.js.map +1 -1
  139. package/dist/tools/list-workflow-runs.d.ts +4 -0
  140. package/dist/tools/list-workflow-runs.d.ts.map +1 -0
  141. package/dist/tools/list-workflow-runs.js +110 -0
  142. package/dist/tools/list-workflow-runs.js.map +1 -0
  143. package/dist/tools/list-workflows.d.ts +4 -0
  144. package/dist/tools/list-workflows.d.ts.map +1 -0
  145. package/dist/tools/list-workflows.js +143 -0
  146. package/dist/tools/list-workflows.js.map +1 -0
  147. package/dist/tools/manage-agent-billing.d.ts +4 -0
  148. package/dist/tools/manage-agent-billing.d.ts.map +1 -0
  149. package/dist/tools/manage-agent-billing.js +788 -0
  150. package/dist/tools/manage-agent-billing.js.map +1 -0
  151. package/dist/tools/manage-agent-custom-skill.d.ts +4 -0
  152. package/dist/tools/manage-agent-custom-skill.d.ts.map +1 -0
  153. package/dist/tools/manage-agent-custom-skill.js +531 -0
  154. package/dist/tools/manage-agent-custom-skill.js.map +1 -0
  155. package/dist/tools/recommend-model.d.ts.map +1 -1
  156. package/dist/tools/recommend-model.js +6 -5
  157. package/dist/tools/recommend-model.js.map +1 -1
  158. package/dist/tools/resume-workflow-run.d.ts +4 -0
  159. package/dist/tools/resume-workflow-run.d.ts.map +1 -0
  160. package/dist/tools/resume-workflow-run.js +69 -0
  161. package/dist/tools/resume-workflow-run.js.map +1 -0
  162. package/dist/tools/run-model.d.ts.map +1 -1
  163. package/dist/tools/run-model.js +40 -4
  164. package/dist/tools/run-model.js.map +1 -1
  165. package/dist/tools/run-workflow.d.ts +6 -0
  166. package/dist/tools/run-workflow.d.ts.map +1 -0
  167. package/dist/tools/run-workflow.js +132 -0
  168. package/dist/tools/run-workflow.js.map +1 -0
  169. package/dist/tools/save-workflow-from-agent.d.ts +4 -0
  170. package/dist/tools/save-workflow-from-agent.d.ts.map +1 -0
  171. package/dist/tools/save-workflow-from-agent.js +280 -0
  172. package/dist/tools/save-workflow-from-agent.js.map +1 -0
  173. package/dist/tools/schemas.d.ts +182 -115
  174. package/dist/tools/schemas.d.ts.map +1 -1
  175. package/dist/tools/schemas.js +26 -6
  176. package/dist/tools/schemas.js.map +1 -1
  177. package/dist/tools/search-models.d.ts.map +1 -1
  178. package/dist/tools/search-models.js +9 -6
  179. package/dist/tools/search-models.js.map +1 -1
  180. package/dist/tools/send-agent-message.d.ts +4 -0
  181. package/dist/tools/send-agent-message.d.ts.map +1 -0
  182. package/dist/tools/send-agent-message.js +156 -0
  183. package/dist/tools/send-agent-message.js.map +1 -0
  184. package/dist/tools/set-agent-credentials.d.ts +4 -0
  185. package/dist/tools/set-agent-credentials.d.ts.map +1 -0
  186. package/dist/tools/set-agent-credentials.js +540 -0
  187. package/dist/tools/set-agent-credentials.js.map +1 -0
  188. package/dist/tools/update-agent.d.ts +4 -0
  189. package/dist/tools/update-agent.d.ts.map +1 -0
  190. package/dist/tools/update-agent.js +179 -0
  191. package/dist/tools/update-agent.js.map +1 -0
  192. package/dist/tools/update-workflow.d.ts +201 -0
  193. package/dist/tools/update-workflow.d.ts.map +1 -0
  194. package/dist/tools/update-workflow.js +168 -0
  195. package/dist/tools/update-workflow.js.map +1 -0
  196. package/dist/tools/upload-file.d.ts.map +1 -1
  197. package/dist/tools/upload-file.js +12 -7
  198. package/dist/tools/upload-file.js.map +1 -1
  199. package/dist/tools/wait-for-task.d.ts.map +1 -1
  200. package/dist/tools/wait-for-task.js +20 -2
  201. package/dist/tools/wait-for-task.js.map +1 -1
  202. package/dist/tools/wait-for-workflow-run.d.ts +259 -0
  203. package/dist/tools/wait-for-workflow-run.d.ts.map +1 -0
  204. package/dist/tools/wait-for-workflow-run.js +190 -0
  205. package/dist/tools/wait-for-workflow-run.js.map +1 -0
  206. package/dist/types.d.ts +18 -0
  207. package/dist/types.d.ts.map +1 -1
  208. package/dist/types.js.map +1 -1
  209. package/dist/utils/agent-catalog.d.ts +1256 -0
  210. package/dist/utils/agent-catalog.d.ts.map +1 -0
  211. package/dist/utils/agent-catalog.js +387 -0
  212. package/dist/utils/agent-catalog.js.map +1 -0
  213. package/dist/utils/agent-config.d.ts +443 -0
  214. package/dist/utils/agent-config.d.ts.map +1 -0
  215. package/dist/utils/agent-config.js +1676 -0
  216. package/dist/utils/agent-config.js.map +1 -0
  217. package/dist/utils/agent-message.d.ts +112 -0
  218. package/dist/utils/agent-message.d.ts.map +1 -0
  219. package/dist/utils/agent-message.js +243 -0
  220. package/dist/utils/agent-message.js.map +1 -0
  221. package/dist/utils/agent-targets.d.ts +76 -0
  222. package/dist/utils/agent-targets.d.ts.map +1 -0
  223. package/dist/utils/agent-targets.js +412 -0
  224. package/dist/utils/agent-targets.js.map +1 -0
  225. package/dist/utils/agent-turns.d.ts +354 -0
  226. package/dist/utils/agent-turns.d.ts.map +1 -0
  227. package/dist/utils/agent-turns.js +660 -0
  228. package/dist/utils/agent-turns.js.map +1 -0
  229. package/dist/utils/api.d.ts +40 -0
  230. package/dist/utils/api.d.ts.map +1 -0
  231. package/dist/utils/api.js +111 -0
  232. package/dist/utils/api.js.map +1 -0
  233. package/dist/utils/format.d.ts +65 -2
  234. package/dist/utils/format.d.ts.map +1 -1
  235. package/dist/utils/format.js +583 -81
  236. package/dist/utils/format.js.map +1 -1
  237. package/dist/utils/json-schema-dialect.d.ts +8 -1
  238. package/dist/utils/json-schema-dialect.d.ts.map +1 -1
  239. package/dist/utils/json-schema-dialect.js +23 -1
  240. package/dist/utils/json-schema-dialect.js.map +1 -1
  241. package/dist/utils/media.d.ts +28 -0
  242. package/dist/utils/media.d.ts.map +1 -0
  243. package/dist/utils/media.js +65 -0
  244. package/dist/utils/media.js.map +1 -0
  245. package/dist/utils/poll.d.ts +39 -0
  246. package/dist/utils/poll.d.ts.map +1 -0
  247. package/dist/utils/poll.js +111 -0
  248. package/dist/utils/poll.js.map +1 -0
  249. package/dist/utils/remote-file.js +2 -2
  250. package/dist/utils/remote-file.js.map +1 -1
  251. package/dist/utils/structured.d.ts +4 -0
  252. package/dist/utils/structured.d.ts.map +1 -1
  253. package/dist/utils/structured.js +23 -7
  254. package/dist/utils/structured.js.map +1 -1
  255. package/dist/utils/studio-runs.d.ts +87 -0
  256. package/dist/utils/studio-runs.d.ts.map +1 -0
  257. package/dist/utils/studio-runs.js +167 -0
  258. package/dist/utils/studio-runs.js.map +1 -0
  259. package/dist/utils/user-agent.d.ts +1199 -0
  260. package/dist/utils/user-agent.d.ts.map +1 -0
  261. package/dist/utils/user-agent.js +897 -0
  262. package/dist/utils/user-agent.js.map +1 -0
  263. package/dist/utils/workflow-agent.d.ts +151 -0
  264. package/dist/utils/workflow-agent.d.ts.map +1 -0
  265. package/dist/utils/workflow-agent.js +292 -0
  266. package/dist/utils/workflow-agent.js.map +1 -0
  267. package/dist/utils/workflow-artifacts.d.ts +160 -0
  268. package/dist/utils/workflow-artifacts.d.ts.map +1 -0
  269. package/dist/utils/workflow-artifacts.js +801 -0
  270. package/dist/utils/workflow-artifacts.js.map +1 -0
  271. package/dist/utils/workflow-save.d.ts +120 -0
  272. package/dist/utils/workflow-save.d.ts.map +1 -0
  273. package/dist/utils/workflow-save.js +728 -0
  274. package/dist/utils/workflow-save.js.map +1 -0
  275. package/dist/utils/workflow.d.ts +564 -0
  276. package/dist/utils/workflow.d.ts.map +1 -0
  277. package/dist/utils/workflow.js +712 -0
  278. package/dist/utils/workflow.js.map +1 -0
  279. package/dist/utils/workspace.d.ts +38 -0
  280. package/dist/utils/workspace.d.ts.map +1 -0
  281. package/dist/utils/workspace.js +90 -0
  282. package/dist/utils/workspace.js.map +1 -0
  283. package/package.json +6 -4
@@ -0,0 +1,508 @@
1
+ import { z } from 'zod';
2
+ import { asString, errorResult, errorText, isPlainObject, requireApiSuccess, } from '../utils/api.js';
3
+ import { OAUTH_LINK_TTL_SECONDS, buildChainedSelections, buildPickerAccounts, chooseConnectionMode, connectionModeRequirements, connectionState, credentialGroup, dashboardAgentUrl, isAllowedRedirectUrl, loadCredentialMeta, ownAppRedirectUri, parseDiscoveredGroups, readOAuthStatus, readUserAgent, toAccountRefs, } from '../utils/agent-config.js';
4
+ import { DEFAULT_WAIT_SECONDS, MAX_WAIT_SECONDS, pollUntil, reportProgress, } from '../utils/poll.js';
5
+ import { nextActionSchema } from './schemas.js';
6
+ const accountSchema = z.object({ id: z.string(), name: z.string() });
7
+ const outputSchema = {
8
+ action: z.enum(['connect', 'status', 'select_accounts']),
9
+ agentGuid: z.string(),
10
+ credential: z.string(),
11
+ title: z.string(),
12
+ state: z.enum([
13
+ 'authorize_in_browser',
14
+ 'connected',
15
+ 'pick_accounts',
16
+ 'pick_child_items',
17
+ 'waiting_for_user',
18
+ 'token_expired',
19
+ 'not_connected',
20
+ 'setup_needed',
21
+ 'confirm_needed',
22
+ ]),
23
+ mode: z.string().optional(),
24
+ authorizeUrl: z.string().optional(),
25
+ expiresInSeconds: z.number().optional(),
26
+ redirectUrl: z.string().optional(),
27
+ connectedAt: z.string().optional(),
28
+ tokenExpiresAt: z.string().optional(),
29
+ accounts: z.array(accountSchema).optional(),
30
+ candidates: z.array(accountSchema).optional(),
31
+ childStep: z.object({
32
+ picker: z.string(),
33
+ label: z.string(),
34
+ optional: z.boolean(),
35
+ configured: z.boolean().optional(),
36
+ groups: z.array(z.object({
37
+ parent: accountSchema,
38
+ items: z.array(accountSchema),
39
+ error: z.string().optional(),
40
+ })),
41
+ }).optional(),
42
+ connectionModes: z.array(z.object({
43
+ mode: z.string(),
44
+ available: z.boolean(),
45
+ needsBrowser: z.boolean(),
46
+ fields: z.array(z.object({ field: z.string(), label: z.string(), isSet: z.boolean() })),
47
+ note: z.string(),
48
+ })).optional(),
49
+ ownAppRedirectUri: z.string().optional(),
50
+ message: z.string(),
51
+ nextAction: nextActionSchema.optional(),
52
+ };
53
+ const DONE_STATES = new Set(['connected', 'pick_accounts', 'pick_child_items']);
54
+ function oauthHint(message, meta) {
55
+ if (/not found or unauthorized/i.test(message)) {
56
+ return 'Integrations can only be connected with a project created by the person who deployed the agent: connect this server with such a project, by its API key or a browser sign-in.';
57
+ }
58
+ if (/credentials not configured/i.test(message)) {
59
+ return `Save your own ${meta.title} app keys with set_agent_credentials first (call it with credential "${meta.key}" to see the fields).`;
60
+ }
61
+ if (/wiro-managed oauth is not enabled/i.test(message)) {
62
+ return 'Connect this service with mode own (your own app) or api_key where offered.';
63
+ }
64
+ if (/no pending .* connection/i.test(message)) {
65
+ return 'The account list from the last connect expired after 15 minutes. Connect again.';
66
+ }
67
+ if (/account not connected/i.test(message))
68
+ return 'Connect the account first with action connect.';
69
+ if (/candidates expired/i.test(message))
70
+ return 'Call select_accounts again; it lists the items afresh before saving.';
71
+ return undefined;
72
+ }
73
+ /** Wiro's message, then the hint as a paragraph of its own, so the two read as separate sentences. */
74
+ function withHint(error, meta) {
75
+ const message = errorText(error);
76
+ const hint = meta ? oauthHint(message, meta) : undefined;
77
+ return new Error(hint ? `${message}\n\n${hint}` : message);
78
+ }
79
+ function childStepOf(picker, groups, configured) {
80
+ const next = picker?.next;
81
+ if (!next)
82
+ return undefined;
83
+ return {
84
+ picker: next.key,
85
+ label: next.label,
86
+ optional: next.optional,
87
+ ...(configured !== undefined ? { configured } : {}),
88
+ groups: groups.map(group => ({
89
+ parent: group.parent,
90
+ items: group.items,
91
+ ...(group.errorCode ? { error: group.errorCode } : {}),
92
+ })),
93
+ };
94
+ }
95
+ function accountsLine(accounts) {
96
+ return accounts.map(account => (account.name ? `${account.name} (${account.id})` : account.id)).join(', ');
97
+ }
98
+ function result(action, context, state, message, extra = {}, textExtra = []) {
99
+ const lines = [
100
+ `## ${context.meta.title}: ${state.replace(/_/g, ' ')}`,
101
+ '',
102
+ message,
103
+ ...textExtra,
104
+ ];
105
+ if (isPlainObject(extra.nextAction)) {
106
+ lines.push('', `Next: call ${String(extra.nextAction.tool)} with ${JSON.stringify(extra.nextAction.arguments)}.`);
107
+ }
108
+ return {
109
+ content: [{ type: 'text', text: lines.join('\n') }],
110
+ structuredContent: {
111
+ action,
112
+ agentGuid: context.agentGuid,
113
+ credential: context.credential,
114
+ title: context.meta.title,
115
+ state,
116
+ message,
117
+ ...extra,
118
+ },
119
+ };
120
+ }
121
+ function modeLines(modes) {
122
+ return [
123
+ '',
124
+ ...modes.filter(mode => mode.available).map(mode => `- **${mode.mode}**: ${mode.note}${mode.fields.length > 0 ? ` Fields: ${mode.fields.map(field => `${field.field}${field.isSet ? ' (set)' : ' (missing)'}`).join(', ')}.` : ''}`),
125
+ ];
126
+ }
127
+ async function connect(context, input) {
128
+ const { client, agentGuid, credential, meta, signal } = context;
129
+ const oauth = meta.oauth;
130
+ const row = await readUserAgent(client, agentGuid, signal);
131
+ const group = credentialGroup(row, credential);
132
+ const modes = connectionModeRequirements(meta, group);
133
+ const redirectUri = meta.connectionModes.includes('own') ? ownAppRedirectUri(meta) : undefined;
134
+ const setupExtra = { connectionModes: modes, ...(redirectUri ? { ownAppRedirectUri: redirectUri } : {}) };
135
+ const describeAction = {
136
+ tool: 'set_agent_credentials',
137
+ arguments: { agent_guid: agentGuid, credential },
138
+ reason: 'See the fields and their formats before asking the user for them.',
139
+ };
140
+ if (input.mode && !modes.some(mode => mode.mode === input.mode)) {
141
+ return errorResult(new Error(`${meta.title} cannot connect with mode ${input.mode}. Modes: ${modes.filter(mode => mode.available).map(mode => mode.mode).join(', ')}.`));
142
+ }
143
+ const mode = input.mode ?? chooseConnectionMode(meta, modes);
144
+ const requirement = modes.find(candidate => candidate.mode === mode);
145
+ if (!mode || !requirement) {
146
+ return result('connect', context, 'setup_needed', `Choose how to connect ${meta.title}: it needs your own app keys or a token saved first.`, { ...setupExtra, nextAction: describeAction }, modeLines(modes));
147
+ }
148
+ if (!requirement.available) {
149
+ return result('connect', context, 'setup_needed', `${requirement.note}`, { ...setupExtra, mode, nextAction: describeAction }, modeLines(modes));
150
+ }
151
+ if (mode === 'api_key' && !oauth.directProbe) {
152
+ return result('connect', context, 'setup_needed', requirement.note, { ...setupExtra, mode, nextAction: describeAction }, modeLines(modes));
153
+ }
154
+ const missing = requirement.fields.filter(field => !field.isSet);
155
+ if (missing.length > 0) {
156
+ return result('connect', context, 'setup_needed', `Mode ${mode} needs these saved first with set_agent_credentials: ${missing.map(field => `${field.label} (${field.field})`).join(', ')}. ${requirement.note}`, { ...setupExtra, mode, nextAction: describeAction });
157
+ }
158
+ const connectedBefore = group?._connected === true;
159
+ if (connectedBefore && !input.confirm) {
160
+ return result('connect', context, 'confirm_needed', `${meta.title} is already connected. Connecting again replaces that connection and its selected accounts; if the new sign-in or check fails, the agent is left without it.`, {
161
+ mode,
162
+ nextAction: {
163
+ tool: 'connect_agent_oauth',
164
+ arguments: {
165
+ action: 'connect',
166
+ agent_guid: agentGuid,
167
+ credential,
168
+ mode,
169
+ ...(input.redirectUrl ? { redirect_url: input.redirectUrl } : {}),
170
+ confirm: true,
171
+ },
172
+ reason: 'Ask the user to confirm this first.',
173
+ },
174
+ });
175
+ }
176
+ if (oauth.directProbe && mode === oauth.directProbe.mode) {
177
+ // The check reads the mode from the saved credential, so it is saved first.
178
+ if (asString(group?.authmethod) !== mode) {
179
+ requireApiSuccess(await client.post('/UserAgent/CredentialUpsert', {
180
+ useragentguid: agentGuid,
181
+ fields: [{ credentialkey: credential, fieldname: 'authmethod', fieldvalue: mode }],
182
+ }, signal), 'Could not switch the connection mode.');
183
+ }
184
+ const body = await client.post('/UserAgentOAuth/OAuthConnect', {
185
+ useragentguid: agentGuid,
186
+ credentialkey: credential,
187
+ authmethod: mode,
188
+ }, signal);
189
+ if (body.result !== true) {
190
+ const code = asString(body.errorcode);
191
+ const message = (body.errors ?? []).map(error => error?.message?.trim()).filter(Boolean).join(' ')
192
+ || `${meta.title} could not be checked.`;
193
+ const parts = [code ? `${message} (${code})` : message];
194
+ if (code === 'direct_token_missing') {
195
+ parts.push(`Save ${requirement.fields.map(field => field.field).join(', ')} with set_agent_credentials first.`);
196
+ }
197
+ else if (connectedBefore) {
198
+ parts.push('Connect again to restore the connection.');
199
+ }
200
+ return errorResult(new Error(parts.join(' ')));
201
+ }
202
+ const candidates = toAccountRefs(body.accounts, oauth.picker);
203
+ if (oauth.picker && candidates.length > 0) {
204
+ const pending = oauth.picker.pendingCache ? ' Save the choice within 15 minutes; after that, connect again.' : '';
205
+ return result('connect', context, 'pick_accounts', `${meta.title} accepted the ${oauth.directProbe.label ?? 'credentials'}. Choose which of these accounts the agent should use.${pending}`, {
206
+ mode,
207
+ candidates,
208
+ nextAction: {
209
+ tool: 'connect_agent_oauth',
210
+ arguments: { action: 'select_accounts', agent_guid: agentGuid, credential, accounts: candidates },
211
+ reason: candidates.length === 1
212
+ ? 'Save the only available account.'
213
+ : 'Ask the user which accounts to use, then save only those.',
214
+ },
215
+ }, ['', ...candidates.map(account => `- ${account.name || account.id} (${account.id})`)]);
216
+ }
217
+ return result('connect', context, 'connected', `${meta.title} is connected. A running agent restarts to use it.`, { mode });
218
+ }
219
+ const redirectUrl = input.redirectUrl?.trim() || dashboardAgentUrl(agentGuid);
220
+ if (!isAllowedRedirectUrl(redirectUrl, agentGuid)) {
221
+ return errorResult(new Error(`redirect_url can only be the agent's page in the Wiro dashboard (${dashboardAgentUrl(agentGuid)}) or a local address on the user's own machine (http://localhost or http://127.0.0.1, any port). Leave it out to use the dashboard page.`));
222
+ }
223
+ let since = '';
224
+ try {
225
+ since = (await readOAuthStatus(client, agentGuid, credential, oauth.picker, signal)).connectedAt;
226
+ }
227
+ catch {
228
+ since = '';
229
+ }
230
+ const body = requireApiSuccess(await client.post('/UserAgentOAuth/OAuthConnect', {
231
+ useragentguid: agentGuid,
232
+ credentialkey: credential,
233
+ authmethod: mode,
234
+ redirecturl: redirectUrl,
235
+ }, signal), `Could not start the ${meta.title} sign-in.`);
236
+ const authorizeUrl = asString(body.authorizeUrl);
237
+ if (!authorizeUrl)
238
+ throw new Error(`Wiro did not return a sign-in link for ${meta.title}.`);
239
+ const usesDashboard = !/^http:/i.test(redirectUrl);
240
+ const after = usesDashboard
241
+ ? `After approving, the browser returns to the agent's page in the Wiro dashboard${oauth.picker ? ', which asks which accounts the agent should use' : ''}. Use a browser where the user is signed in to wiro.ai as the agent's owner.`
242
+ : `After approving, the browser goes to ${redirectUrl}.`;
243
+ return result('connect', context, 'authorize_in_browser', `The user must open this link in their own browser and approve access. It works for ${OAUTH_LINK_TTL_SECONDS / 60} minutes. ${after} Give the link to the user and check the status once they say they are done.`, {
244
+ mode,
245
+ authorizeUrl,
246
+ expiresInSeconds: OAUTH_LINK_TTL_SECONDS,
247
+ redirectUrl,
248
+ nextAction: {
249
+ tool: 'connect_agent_oauth',
250
+ arguments: {
251
+ action: 'status',
252
+ agent_guid: agentGuid,
253
+ credential,
254
+ since_connected_at: since,
255
+ wait_seconds: DEFAULT_WAIT_SECONDS,
256
+ },
257
+ reason: 'After the user has approved access, check that the connection finished.',
258
+ },
259
+ }, ['', authorizeUrl]);
260
+ }
261
+ function statusMessage(state, meta, snapshot) {
262
+ const next = meta.oauth?.picker?.next;
263
+ switch (state) {
264
+ case 'connected': {
265
+ const optionalStep = next && snapshot.childStep && !snapshot.childStep.configured
266
+ ? ` Optionally, choose ${next.label} with action select_accounts and picker "${next.key}".`
267
+ : '';
268
+ return `${meta.title} is connected${snapshot.accounts.length > 0 ? ` for ${accountsLine(snapshot.accounts)}` : ''}.${optionalStep}`;
269
+ }
270
+ case 'pick_accounts':
271
+ return 'The user approved access. The accounts to use are chosen on the agent\'s page in the Wiro dashboard that opened after the sign-in. If that page was closed, connect again, or save account IDs the user gives you with action select_accounts.';
272
+ case 'pick_child_items':
273
+ return `Access is approved, but ${next?.label ?? 'the second step'} still has to be chosen for each account. Call select_accounts with picker "${next?.key ?? ''}" to list them.`;
274
+ case 'waiting_for_user':
275
+ return `The ${meta.title} sign-in has not finished yet. The link from connect works for ${OAUTH_LINK_TTL_SECONDS / 60} minutes; after that, connect again.`;
276
+ case 'token_expired':
277
+ return `The saved ${meta.title} access has expired. Start the agent with control_agent, or connect again.`;
278
+ default:
279
+ return `${meta.title} is not connected. Start with action connect.`;
280
+ }
281
+ }
282
+ async function status(context, input, extra) {
283
+ const { client, agentGuid, credential, meta, signal } = context;
284
+ const picker = meta.oauth?.picker ?? null;
285
+ const stateOf = (snapshot) => connectionState(snapshot, { hasPicker: picker !== null, since: input.since });
286
+ const polled = await pollUntil({
287
+ read: readSignal => readOAuthStatus(client, agentGuid, credential, picker, readSignal),
288
+ isDone: snapshot => DONE_STATES.has(stateOf(snapshot)),
289
+ timeoutMs: input.waitSeconds * 1000,
290
+ signal,
291
+ interval: () => 5_000,
292
+ onPoll: (snapshot, elapsedMs) => reportProgress(extra, elapsedMs, `${meta.title}: ${stateOf(snapshot)}`),
293
+ });
294
+ const snapshot = polled.value;
295
+ if (!snapshot)
296
+ throw new Error(`Could not read the ${meta.title} connection status.`);
297
+ const state = stateOf(snapshot);
298
+ let nextAction;
299
+ if (state === 'waiting_for_user') {
300
+ nextAction = {
301
+ tool: 'connect_agent_oauth',
302
+ arguments: {
303
+ action: 'status',
304
+ agent_guid: agentGuid,
305
+ credential,
306
+ ...(input.since !== undefined ? { since_connected_at: input.since } : {}),
307
+ wait_seconds: DEFAULT_WAIT_SECONDS,
308
+ },
309
+ reason: 'Keep waiting for the user to finish signing in.',
310
+ };
311
+ }
312
+ else if (state === 'pick_child_items' && picker?.next) {
313
+ nextAction = {
314
+ tool: 'connect_agent_oauth',
315
+ arguments: { action: 'select_accounts', agent_guid: agentGuid, credential, picker: picker.next.key },
316
+ reason: `List the ${picker.next.label} to choose from.`,
317
+ };
318
+ }
319
+ else if (state === 'not_connected' || state === 'token_expired') {
320
+ nextAction = {
321
+ tool: 'connect_agent_oauth',
322
+ arguments: { action: 'connect', agent_guid: agentGuid, credential },
323
+ reason: `Connect ${meta.title}.`,
324
+ };
325
+ }
326
+ const childStep = snapshot.childStep
327
+ ? { ...snapshot.childStep, label: picker?.next?.label ?? snapshot.childStep.picker }
328
+ : undefined;
329
+ return result('status', context, state, statusMessage(state, meta, snapshot), {
330
+ ...(snapshot.connectedAt ? { connectedAt: snapshot.connectedAt } : {}),
331
+ ...(snapshot.tokenExpiresAt ? { tokenExpiresAt: snapshot.tokenExpiresAt } : {}),
332
+ accounts: snapshot.accounts,
333
+ ...(childStep ? { childStep } : {}),
334
+ ...(nextAction ? { nextAction } : {}),
335
+ });
336
+ }
337
+ async function selectAccounts(context, input) {
338
+ const { client, agentGuid, credential, meta, signal } = context;
339
+ const picker = meta.oauth?.picker ?? null;
340
+ if (!picker) {
341
+ return errorResult(new Error(`${meta.title} has no account choice to make; its connection is complete once connected.`));
342
+ }
343
+ if (input.picker) {
344
+ const next = picker.next;
345
+ if (!next || next.key !== input.picker) {
346
+ return errorResult(new Error(`${meta.title} has no step "${input.picker}".${next ? ` Its extra step is "${next.key}".` : ''}`));
347
+ }
348
+ // Discovery runs before every save: the API only accepts items, with their exact labels, from a fresh list.
349
+ const discovered = requireApiSuccess(await client.post('/UserAgentOAuth/DiscoverPickerItems', {
350
+ useragentguid: agentGuid,
351
+ credentialkey: credential,
352
+ pickerkey: next.key,
353
+ }, signal), `Could not list the ${next.label}.`);
354
+ const groups = parseDiscoveredGroups(next, discovered.groups);
355
+ if (!input.selections) {
356
+ const readable = groups.filter(group => !group.errorCode);
357
+ return result('select_accounts', context, 'pick_child_items', `Choose the ${next.label} to use under each account.${next.optional ? ' This step is optional.' : ''} Then call select_accounts again with picker "${next.key}" and selections.`, {
358
+ childStep: childStepOf(picker, groups),
359
+ nextAction: {
360
+ tool: 'connect_agent_oauth',
361
+ arguments: {
362
+ action: 'select_accounts',
363
+ agent_guid: agentGuid,
364
+ credential,
365
+ picker: next.key,
366
+ selections: readable.map(group => ({ parent: group.parent.id, items: group.items.map(item => item.id) })),
367
+ },
368
+ reason: 'Ask the user which ones to keep; this preselects all of them.',
369
+ },
370
+ }, ['', ...groups.flatMap(group => [
371
+ `- ${group.parent.name || group.parent.id} (${group.parent.id})${group.errorCode ? `: could not be read (${group.errorCode})` : ''}`,
372
+ ...group.items.map(item => ` - ${item.name || item.id} (${item.id})`),
373
+ ])]);
374
+ }
375
+ const built = buildChainedSelections(next, groups, input.selections);
376
+ if (built.error || !built.selections)
377
+ return errorResult(new Error(built.error ?? 'Nothing to save.'));
378
+ const saved = requireApiSuccess(await client.post('/UserAgentOAuth/SetPickerAccounts', {
379
+ useragentguid: agentGuid,
380
+ credentialkey: credential,
381
+ pickerkey: next.key,
382
+ selections: built.selections,
383
+ }, signal), `Could not save the ${next.label}.`);
384
+ const mappings = Array.isArray(saved[next.persistField]) ? saved[next.persistField].filter(isPlainObject) : [];
385
+ const savedGroups = groups.filter(group => !group.errorCode).map(group => ({
386
+ ...group,
387
+ items: mappings
388
+ .filter(mapping => asString(mapping[next.parentValueField]) === group.parent.id)
389
+ .map(mapping => ({
390
+ id: asString(mapping[next.itemValueField]) ?? '',
391
+ name: asString(mapping[next.itemLabelField]) ?? '',
392
+ })),
393
+ }));
394
+ const skipped = built.skippedParents.length > 0
395
+ ? ` Nothing was chosen for ${accountsLine(built.skippedParents)}.`
396
+ : '';
397
+ return result('select_accounts', context, 'connected', `Saved the ${next.label} selection (${mappings.length} selected).${skipped} A running agent restarts to use it.`, { childStep: { ...childStepOf(picker, savedGroups, mappings.length > 0) } });
398
+ }
399
+ if (!input.accounts || input.accounts.length === 0) {
400
+ return errorResult(new Error('Pass accounts (each {id, name}) to save, or picker to run the extra step.'));
401
+ }
402
+ const built = buildPickerAccounts(picker, input.accounts);
403
+ if (built.error || !built.accounts)
404
+ return errorResult(new Error(built.error ?? 'Nothing to save.'));
405
+ const saved = requireApiSuccess(await client.post('/UserAgentOAuth/SetPickerAccounts', {
406
+ useragentguid: agentGuid,
407
+ credentialkey: credential,
408
+ accounts: built.accounts,
409
+ }, signal), 'Could not save the accounts.');
410
+ const accounts = toAccountRefs(saved.accounts, picker);
411
+ const next = picker.next;
412
+ if (next) {
413
+ return result('select_accounts', context, next.optional ? 'connected' : 'pick_child_items', `Saved ${accounts.length} account${accounts.length === 1 ? '' : 's'}: ${accountsLine(accounts)}. ${next.optional ? `Optionally, also choose ${next.label}.` : `Next, choose the ${next.label} for each account.`} A running agent restarts to use the account${accounts.length === 1 ? '' : 's'}.`, {
414
+ accounts,
415
+ nextAction: {
416
+ tool: 'connect_agent_oauth',
417
+ arguments: { action: 'select_accounts', agent_guid: agentGuid, credential, picker: next.key },
418
+ reason: next.optional
419
+ ? `Optional: list the ${next.label} if the user wants to choose them.`
420
+ : `List the ${next.label} to choose from.`,
421
+ },
422
+ });
423
+ }
424
+ return result('select_accounts', context, 'connected', `Saved ${accounts.length} account${accounts.length === 1 ? '' : 's'}: ${accountsLine(accounts)}. A running agent restarts to use the account${accounts.length === 1 ? '' : 's'}.`, { accounts });
425
+ }
426
+ export function registerConnectAgentOauth(server, client) {
427
+ server.registerTool('connect_agent_oauth', {
428
+ title: 'Connect an agent integration',
429
+ description: 'Connect an outside account (Google Ads, GA4, YouTube, Google Business, '
430
+ + 'Merchant Center, Meta Ads, Instagram, Facebook Pages, TikTok, LinkedIn, X, HubSpot, '
431
+ + 'Mailchimp, Reddit, Shopify) to a deployed agent, with a sign-in link or a saved token, as list_agent_skills '
432
+ + 'shows for each service. action connect: with Wiro\'s own app '
433
+ + '(mode wiro) or the user\'s own app (mode own) it returns a sign-in link that the user '
434
+ + 'must open in their own browser and approve within 15 minutes; never open it for them. '
435
+ + 'With mode api_key it checks a token saved earlier with set_agent_credentials and returns '
436
+ + 'the accounts it can use, with no browser. Without mode the tool picks the one that '
437
+ + 'works; when a provider needs the user\'s own app keys or a token first, it says which to '
438
+ + 'save. action status: whether the sign-in finished (wait_seconds waits for '
439
+ + 'the user). action select_accounts: saves which accounts the agent uses ({id, name} from '
440
+ + 'connect), and with picker runs the extra step some providers have (Meta Ads pages, '
441
+ + 'Google Business locations). Connecting again replaces an existing connection and needs '
442
+ + 'confirm: true. A running agent restarts when a connection or selection is saved. '
443
+ + 'Remove a connection with disconnect_agent_oauth. Connect only a credential that the agent\'s '
444
+ + 'skills use (get_my_agent lists them). Only the person who deployed the agent can connect, so the '
445
+ + 'connected project must be one that person created. The agents playbook (get_playbook) has the '
446
+ + 'full setup walkthrough.',
447
+ inputSchema: {
448
+ action: z.enum(['connect', 'status', 'select_accounts']).default('connect')
449
+ .describe('connect (default) starts a connection, status checks it, select_accounts saves the accounts to use.'),
450
+ agent_guid: z.string().min(1).describe('The deployed agent\'s guid, from list_my_agents.'),
451
+ credential: z.string().min(1)
452
+ .describe('The integration\'s credential key, for example "google-ads", "meta-ads", "instagram", "hubspot" or "shopify".'),
453
+ mode: z.enum(['wiro', 'own', 'api_key']).optional()
454
+ .describe('connect: wiro (Wiro\'s app), own (the user\'s own app, keys saved first) or api_key (a saved token, no browser). Omit to let the tool choose.'),
455
+ redirect_url: z.string().max(2_048).optional()
456
+ .describe('connect: where the browser goes after sign-in. Defaults to the agent\'s page in the Wiro dashboard, which also handles the account choice. The only other accepted address is a local one on the user\'s own machine (http://localhost or http://127.0.0.1, any port). Keep the default unless the user asks.'),
457
+ since_connected_at: z.string().optional()
458
+ .describe('status: the since_connected_at value from connect\'s nextAction, so an older connection is not mistaken for the new one.'),
459
+ wait_seconds: z.number().int().min(0).max(MAX_WAIT_SECONDS).default(0)
460
+ .describe(`status: how long to wait for the sign-in to finish, 0 to ${MAX_WAIT_SECONDS} seconds (default 0, a single check).`),
461
+ accounts: z.array(z.record(z.string(), z.union([z.string(), z.number()]))).optional()
462
+ .describe('select_accounts: the accounts to use, each {id, name}, as returned by connect.'),
463
+ picker: z.string().optional()
464
+ .describe('select_accounts: the extra step\'s key ("pages" for Meta Ads, "locations" for Google Business). Without selections it lists the choices.'),
465
+ selections: z.array(z.object({
466
+ parent: z.string().describe('An account id from the earlier step.'),
467
+ items: z.array(z.string()).describe('The ids of the items to use under that account.'),
468
+ })).optional()
469
+ .describe('select_accounts with picker: what to use under each account. Accounts left out get nothing.'),
470
+ confirm: z.boolean().default(false)
471
+ .describe('connect: true to replace an existing connection after the user agreed.'),
472
+ },
473
+ outputSchema,
474
+ annotations: {
475
+ readOnlyHint: false,
476
+ destructiveHint: false,
477
+ idempotentHint: false,
478
+ openWorldHint: true,
479
+ },
480
+ }, async (args, extra) => {
481
+ let meta = null;
482
+ try {
483
+ const credential = args.credential.trim();
484
+ meta = await loadCredentialMeta(client, credential, extra.signal);
485
+ if (!meta)
486
+ return errorResult(new Error(`Unknown credential "${credential}".`));
487
+ if (!meta.oauth) {
488
+ return errorResult(new Error(`${meta.title} is not a sign-in connection. Save its fields with set_agent_credentials (call it with credential "${credential}" to see them).`));
489
+ }
490
+ const context = { client, agentGuid: args.agent_guid, credential, meta, signal: extra.signal };
491
+ if (args.action === 'status') {
492
+ return await status(context, { since: args.since_connected_at, waitSeconds: args.wait_seconds }, extra);
493
+ }
494
+ if (args.action === 'select_accounts') {
495
+ return await selectAccounts(context, {
496
+ accounts: args.accounts,
497
+ picker: args.picker?.trim() || undefined,
498
+ selections: args.selections,
499
+ });
500
+ }
501
+ return await connect(context, { mode: args.mode, redirectUrl: args.redirect_url, confirm: args.confirm });
502
+ }
503
+ catch (error) {
504
+ return errorResult(withHint(error, meta ?? undefined));
505
+ }
506
+ });
507
+ }
508
+ //# sourceMappingURL=connect-agent-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-agent-oauth.js","sourceRoot":"","sources":["../../src/tools/connect-agent-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { WiroClient } from '../client.js';
3
+ export declare function registerControlAgent(server: McpServer, client: WiroClient): void;
4
+ //# sourceMappingURL=control-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-agent.d.ts","sourceRoot":"","sources":["../../src/tools/control-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoI/C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA8KhF"}