@wiro-ai/wiro-mcp 1.4.0 → 1.5.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 (248) hide show
  1. package/README.md +50 -17
  2. package/dist/client.d.ts +25 -6
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +129 -29
  5. package/dist/client.js.map +1 -1
  6. package/dist/instructions.d.ts.map +1 -1
  7. package/dist/instructions.js +24 -17
  8. package/dist/instructions.js.map +1 -1
  9. package/dist/playbooks.d.ts.map +1 -1
  10. package/dist/playbooks.js +61 -48
  11. package/dist/playbooks.js.map +1 -1
  12. package/dist/prompts.d.ts.map +1 -1
  13. package/dist/prompts.js +4 -3
  14. package/dist/prompts.js.map +1 -1
  15. package/dist/server.d.ts +6 -0
  16. package/dist/server.d.ts.map +1 -1
  17. package/dist/server.js +3 -4
  18. package/dist/server.js.map +1 -1
  19. package/dist/tools/apply-agent-skills.d.ts.map +1 -1
  20. package/dist/tools/apply-agent-skills.js +400 -88
  21. package/dist/tools/apply-agent-skills.js.map +1 -1
  22. package/dist/tools/bind-agent-project.d.ts +4 -0
  23. package/dist/tools/bind-agent-project.d.ts.map +1 -0
  24. package/dist/tools/bind-agent-project.js +403 -0
  25. package/dist/tools/bind-agent-project.js.map +1 -0
  26. package/dist/tools/cancel-agent-message.d.ts.map +1 -1
  27. package/dist/tools/cancel-agent-message.js +6 -3
  28. package/dist/tools/cancel-agent-message.js.map +1 -1
  29. package/dist/tools/cancel-task.js +3 -3
  30. package/dist/tools/cancel-task.js.map +1 -1
  31. package/dist/tools/clone-workflow.d.ts.map +1 -1
  32. package/dist/tools/clone-workflow.js +5 -4
  33. package/dist/tools/clone-workflow.js.map +1 -1
  34. package/dist/tools/connect-agent-oauth.d.ts.map +1 -1
  35. package/dist/tools/connect-agent-oauth.js +144 -44
  36. package/dist/tools/connect-agent-oauth.js.map +1 -1
  37. package/dist/tools/control-agent.d.ts.map +1 -1
  38. package/dist/tools/control-agent.js +133 -45
  39. package/dist/tools/control-agent.js.map +1 -1
  40. package/dist/tools/create-workflow.d.ts +9 -6
  41. package/dist/tools/create-workflow.d.ts.map +1 -1
  42. package/dist/tools/create-workflow.js +13 -13
  43. package/dist/tools/create-workflow.js.map +1 -1
  44. package/dist/tools/delete-agent-session.d.ts.map +1 -1
  45. package/dist/tools/delete-agent-session.js +20 -14
  46. package/dist/tools/delete-agent-session.js.map +1 -1
  47. package/dist/tools/delete-agent.d.ts.map +1 -1
  48. package/dist/tools/delete-agent.js +14 -10
  49. package/dist/tools/delete-agent.js.map +1 -1
  50. package/dist/tools/delete-workflow.d.ts.map +1 -1
  51. package/dist/tools/delete-workflow.js +6 -5
  52. package/dist/tools/delete-workflow.js.map +1 -1
  53. package/dist/tools/deploy-agent.d.ts.map +1 -1
  54. package/dist/tools/deploy-agent.js +215 -47
  55. package/dist/tools/deploy-agent.js.map +1 -1
  56. package/dist/tools/disconnect-agent-oauth.d.ts.map +1 -1
  57. package/dist/tools/disconnect-agent-oauth.js +32 -12
  58. package/dist/tools/disconnect-agent-oauth.js.map +1 -1
  59. package/dist/tools/get-account.d.ts.map +1 -1
  60. package/dist/tools/get-account.js +157 -49
  61. package/dist/tools/get-account.js.map +1 -1
  62. package/dist/tools/get-agent-activity.d.ts.map +1 -1
  63. package/dist/tools/get-agent-activity.js +186 -36
  64. package/dist/tools/get-agent-activity.js.map +1 -1
  65. package/dist/tools/get-agent-conversation.d.ts.map +1 -1
  66. package/dist/tools/get-agent-conversation.js +65 -39
  67. package/dist/tools/get-agent-conversation.js.map +1 -1
  68. package/dist/tools/get-agent-message.d.ts.map +1 -1
  69. package/dist/tools/get-agent-message.js +6 -4
  70. package/dist/tools/get-agent-message.js.map +1 -1
  71. package/dist/tools/get-agent-template.d.ts.map +1 -1
  72. package/dist/tools/get-agent-template.js +33 -17
  73. package/dist/tools/get-agent-template.js.map +1 -1
  74. package/dist/tools/get-model-schema.d.ts.map +1 -1
  75. package/dist/tools/get-model-schema.js +7 -5
  76. package/dist/tools/get-model-schema.js.map +1 -1
  77. package/dist/tools/get-my-agent.d.ts.map +1 -1
  78. package/dist/tools/get-my-agent.js +54 -11
  79. package/dist/tools/get-my-agent.js.map +1 -1
  80. package/dist/tools/get-playbook.d.ts.map +1 -1
  81. package/dist/tools/get-playbook.js +3 -2
  82. package/dist/tools/get-playbook.js.map +1 -1
  83. package/dist/tools/get-task-price.d.ts +1 -1
  84. package/dist/tools/get-task-price.d.ts.map +1 -1
  85. package/dist/tools/get-task-price.js +29 -8
  86. package/dist/tools/get-task-price.js.map +1 -1
  87. package/dist/tools/get-task.d.ts.map +1 -1
  88. package/dist/tools/get-task.js +25 -9
  89. package/dist/tools/get-task.js.map +1 -1
  90. package/dist/tools/get-workflow.d.ts.map +1 -1
  91. package/dist/tools/get-workflow.js +46 -21
  92. package/dist/tools/get-workflow.js.map +1 -1
  93. package/dist/tools/index.d.ts +4 -1
  94. package/dist/tools/index.d.ts.map +1 -1
  95. package/dist/tools/index.js +10 -1
  96. package/dist/tools/index.js.map +1 -1
  97. package/dist/tools/kill-task.js +3 -3
  98. package/dist/tools/kill-task.js.map +1 -1
  99. package/dist/tools/list-agent-skills.d.ts.map +1 -1
  100. package/dist/tools/list-agent-skills.js +5 -4
  101. package/dist/tools/list-agent-skills.js.map +1 -1
  102. package/dist/tools/list-agent-templates.js +4 -4
  103. package/dist/tools/list-agent-templates.js.map +1 -1
  104. package/dist/tools/list-my-agents.d.ts.map +1 -1
  105. package/dist/tools/list-my-agents.js +14 -8
  106. package/dist/tools/list-my-agents.js.map +1 -1
  107. package/dist/tools/list-projects.d.ts +4 -0
  108. package/dist/tools/list-projects.d.ts.map +1 -0
  109. package/dist/tools/list-projects.js +141 -0
  110. package/dist/tools/list-projects.js.map +1 -0
  111. package/dist/tools/list-studio-results.js +3 -3
  112. package/dist/tools/list-studio-results.js.map +1 -1
  113. package/dist/tools/list-tasks.js +3 -3
  114. package/dist/tools/list-tasks.js.map +1 -1
  115. package/dist/tools/list-workflow-runs.d.ts.map +1 -1
  116. package/dist/tools/list-workflow-runs.js +6 -4
  117. package/dist/tools/list-workflow-runs.js.map +1 -1
  118. package/dist/tools/list-workflows.d.ts.map +1 -1
  119. package/dist/tools/list-workflows.js +7 -6
  120. package/dist/tools/list-workflows.js.map +1 -1
  121. package/dist/tools/manage-agent-billing.d.ts.map +1 -1
  122. package/dist/tools/manage-agent-billing.js +259 -87
  123. package/dist/tools/manage-agent-billing.js.map +1 -1
  124. package/dist/tools/manage-agent-custom-skill.d.ts.map +1 -1
  125. package/dist/tools/manage-agent-custom-skill.js +91 -21
  126. package/dist/tools/manage-agent-custom-skill.js.map +1 -1
  127. package/dist/tools/recommend-model.js +3 -3
  128. package/dist/tools/recommend-model.js.map +1 -1
  129. package/dist/tools/resume-workflow-run.d.ts.map +1 -1
  130. package/dist/tools/resume-workflow-run.js +3 -2
  131. package/dist/tools/resume-workflow-run.js.map +1 -1
  132. package/dist/tools/run-model.js +5 -5
  133. package/dist/tools/run-model.js.map +1 -1
  134. package/dist/tools/run-workflow.d.ts.map +1 -1
  135. package/dist/tools/run-workflow.js +3 -2
  136. package/dist/tools/run-workflow.js.map +1 -1
  137. package/dist/tools/save-workflow-from-agent.d.ts.map +1 -1
  138. package/dist/tools/save-workflow-from-agent.js +22 -20
  139. package/dist/tools/save-workflow-from-agent.js.map +1 -1
  140. package/dist/tools/schemas.d.ts +150 -127
  141. package/dist/tools/schemas.d.ts.map +1 -1
  142. package/dist/tools/schemas.js +76 -3
  143. package/dist/tools/schemas.js.map +1 -1
  144. package/dist/tools/search-docs.js +3 -3
  145. package/dist/tools/search-docs.js.map +1 -1
  146. package/dist/tools/search-models.d.ts.map +1 -1
  147. package/dist/tools/search-models.js +7 -4
  148. package/dist/tools/search-models.js.map +1 -1
  149. package/dist/tools/send-agent-message.d.ts.map +1 -1
  150. package/dist/tools/send-agent-message.js +32 -11
  151. package/dist/tools/send-agent-message.js.map +1 -1
  152. package/dist/tools/set-agent-credentials.d.ts.map +1 -1
  153. package/dist/tools/set-agent-credentials.js +60 -59
  154. package/dist/tools/set-agent-credentials.js.map +1 -1
  155. package/dist/tools/update-agent.d.ts.map +1 -1
  156. package/dist/tools/update-agent.js +59 -21
  157. package/dist/tools/update-agent.js.map +1 -1
  158. package/dist/tools/update-workflow.d.ts +205 -6
  159. package/dist/tools/update-workflow.d.ts.map +1 -1
  160. package/dist/tools/update-workflow.js +20 -7
  161. package/dist/tools/update-workflow.js.map +1 -1
  162. package/dist/tools/upload-file.d.ts.map +1 -1
  163. package/dist/tools/upload-file.js +13 -9
  164. package/dist/tools/upload-file.js.map +1 -1
  165. package/dist/tools/wait-for-task.d.ts.map +1 -1
  166. package/dist/tools/wait-for-task.js +23 -5
  167. package/dist/tools/wait-for-task.js.map +1 -1
  168. package/dist/tools/wait-for-workflow-run.d.ts +18 -18
  169. package/dist/tools/wait-for-workflow-run.d.ts.map +1 -1
  170. package/dist/tools/wait-for-workflow-run.js +7 -6
  171. package/dist/tools/wait-for-workflow-run.js.map +1 -1
  172. package/dist/types.d.ts +6 -0
  173. package/dist/types.d.ts.map +1 -1
  174. package/dist/types.js.map +1 -1
  175. package/dist/utils/agent-catalog.d.ts +168 -139
  176. package/dist/utils/agent-catalog.d.ts.map +1 -1
  177. package/dist/utils/agent-catalog.js +34 -14
  178. package/dist/utils/agent-catalog.js.map +1 -1
  179. package/dist/utils/agent-config.d.ts +111 -8
  180. package/dist/utils/agent-config.d.ts.map +1 -1
  181. package/dist/utils/agent-config.js +290 -40
  182. package/dist/utils/agent-config.js.map +1 -1
  183. package/dist/utils/agent-message.d.ts +41 -22
  184. package/dist/utils/agent-message.d.ts.map +1 -1
  185. package/dist/utils/agent-message.js +94 -31
  186. package/dist/utils/agent-message.js.map +1 -1
  187. package/dist/utils/agent-targets.d.ts +8 -4
  188. package/dist/utils/agent-targets.d.ts.map +1 -1
  189. package/dist/utils/agent-targets.js +51 -35
  190. package/dist/utils/agent-targets.js.map +1 -1
  191. package/dist/utils/agent-turns.d.ts +31 -24
  192. package/dist/utils/agent-turns.d.ts.map +1 -1
  193. package/dist/utils/agent-turns.js +154 -35
  194. package/dist/utils/agent-turns.js.map +1 -1
  195. package/dist/utils/api.d.ts +6 -0
  196. package/dist/utils/api.d.ts.map +1 -1
  197. package/dist/utils/api.js +22 -1
  198. package/dist/utils/api.js.map +1 -1
  199. package/dist/utils/format.d.ts +27 -1
  200. package/dist/utils/format.d.ts.map +1 -1
  201. package/dist/utils/format.js +429 -82
  202. package/dist/utils/format.js.map +1 -1
  203. package/dist/utils/json-schema-dialect.d.ts +8 -1
  204. package/dist/utils/json-schema-dialect.d.ts.map +1 -1
  205. package/dist/utils/json-schema-dialect.js +27 -1
  206. package/dist/utils/json-schema-dialect.js.map +1 -1
  207. package/dist/utils/media.d.ts +8 -0
  208. package/dist/utils/media.d.ts.map +1 -1
  209. package/dist/utils/media.js +29 -0
  210. package/dist/utils/media.js.map +1 -1
  211. package/dist/utils/poll.d.ts +5 -2
  212. package/dist/utils/poll.d.ts.map +1 -1
  213. package/dist/utils/poll.js +10 -9
  214. package/dist/utils/poll.js.map +1 -1
  215. package/dist/utils/quoted-text.d.ts +28 -0
  216. package/dist/utils/quoted-text.d.ts.map +1 -0
  217. package/dist/utils/quoted-text.js +64 -0
  218. package/dist/utils/quoted-text.js.map +1 -0
  219. package/dist/utils/structured.d.ts +2 -0
  220. package/dist/utils/structured.d.ts.map +1 -1
  221. package/dist/utils/structured.js +15 -2
  222. package/dist/utils/structured.js.map +1 -1
  223. package/dist/utils/studio-runs.d.ts +4 -4
  224. package/dist/utils/studio-runs.d.ts.map +1 -1
  225. package/dist/utils/studio-runs.js +11 -8
  226. package/dist/utils/studio-runs.js.map +1 -1
  227. package/dist/utils/user-agent.d.ts +376 -241
  228. package/dist/utils/user-agent.d.ts.map +1 -1
  229. package/dist/utils/user-agent.js +302 -89
  230. package/dist/utils/user-agent.js.map +1 -1
  231. package/dist/utils/wiro-project.d.ts +45 -0
  232. package/dist/utils/wiro-project.d.ts.map +1 -0
  233. package/dist/utils/wiro-project.js +66 -0
  234. package/dist/utils/wiro-project.js.map +1 -0
  235. package/dist/utils/workflow-agent.d.ts +4 -4
  236. package/dist/utils/workflow-save.d.ts +23 -5
  237. package/dist/utils/workflow-save.d.ts.map +1 -1
  238. package/dist/utils/workflow-save.js +130 -38
  239. package/dist/utils/workflow-save.js.map +1 -1
  240. package/dist/utils/workflow.d.ts +79 -61
  241. package/dist/utils/workflow.d.ts.map +1 -1
  242. package/dist/utils/workflow.js +149 -19
  243. package/dist/utils/workflow.js.map +1 -1
  244. package/dist/utils/workspace.d.ts +64 -0
  245. package/dist/utils/workspace.d.ts.map +1 -0
  246. package/dist/utils/workspace.js +173 -0
  247. package/dist/utils/workspace.js.map +1 -0
  248. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"cancel-agent-message.js","sourceRoot":"","sources":["../../src/tools/cancel-agent-message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cancel-agent-message.js","sourceRoot":"","sources":["../../src/tools/cancel-agent-message.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
- import { taskActionOutputSchema } from './schemas.js';
2
+ import { strictInput, taskActionOutputSchema } from './schemas.js';
3
3
  export function registerCancelTask(server, client) {
4
4
  server.registerTool('cancel_task', {
5
5
  title: 'Cancel a queued Wiro task',
6
6
  description: 'Cancel a model task that is still queued. It is refused once '
7
7
  + 'the task has started; `kill_task` stops a task in either state. A '
8
8
  + 'task cancelled while queued is never charged.',
9
- inputSchema: {
9
+ inputSchema: strictInput({
10
10
  tasktoken: z.string().optional().describe('The task token returned from run_model.'),
11
11
  taskid: z.string().optional().describe('The task ID (alternative to tasktoken).'),
12
- },
12
+ }),
13
13
  outputSchema: taskActionOutputSchema,
14
14
  annotations: {
15
15
  readOnlyHint: false,
@@ -1 +1 @@
1
- {"version":3,"file":"cancel-task.js","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAkB;IACtE,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,+DAA+D;cACxE,oEAAoE;cACpE,+CAA+C;QACnD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SAClF;QACD,YAAY,EAAE,sBAAsB;QACpC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC;oBACrG,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,MAAM,CACb,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAI,MAAM,CAAC,MAAqC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;gBAC7G,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC;oBAChE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;gBAC1E,iBAAiB,EAAE;oBACjB,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3C;oBACD,OAAO,EAAE,8BAA8B;iBACxC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACnH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cancel-task.js","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAkB;IACtE,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,+DAA+D;cACxE,oEAAoE;cACpE,+CAA+C;QACnD,WAAW,EAAE,WAAW,CAAC;YACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SAClF,CAAC;QACF,YAAY,EAAE,sBAAsB;QACpC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC;oBACrG,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,EAAE,SAAS,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,MAAM,CACb,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAI,MAAM,CAAC,MAAqC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;gBAC7G,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC;oBAChE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;gBAC1E,iBAAiB,EAAE;oBACjB,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3C;oBACD,OAAO,EAAE,8BAA8B;iBACxC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACnH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clone-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/clone-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAmFjF"}
1
+ {"version":3,"file":"clone-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/clone-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAmFjF"}
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { ApiResultError, asString, errorResult, requireApiSuccess, toInteger } from '../utils/api.js';
3
+ import { quotedSpan } from '../utils/quoted-text.js';
3
4
  import { fullSlugOf, parseWorkflowSlug, workflowUrl } from '../utils/workflow.js';
4
- import { nextActionSchema } from './schemas.js';
5
+ import { nextActionSchema, strictInput } from './schemas.js';
5
6
  export function registerCloneWorkflow(server, client) {
6
7
  server.registerTool('clone_workflow', {
7
8
  title: 'Clone a public Wiro workflow',
@@ -10,10 +11,10 @@ export function registerCloneWorkflow(server, client) {
10
11
  + 'just to run a public workflow; clone it to keep it or to edit it. A copy of a '
11
12
  + 'protected workflow keeps its steps hidden: you can run it and change its title, '
12
13
  + 'description and tags, but not its steps.',
13
- inputSchema: {
14
+ inputSchema: strictInput({
14
15
  slug: z.string().min(1)
15
16
  .describe('The full slug or page URL of a published workflow from list_workflows scope "public".'),
16
- },
17
+ }),
17
18
  outputSchema: {
18
19
  fullSlug: z.string(),
19
20
  url: z.string(),
@@ -39,7 +40,7 @@ export function registerCloneWorkflow(server, client) {
39
40
  return {
40
41
  content: [{
41
42
  type: 'text',
42
- text: `## Workflow cloned\n\n**Title:** ${title}\n**Slug:** \`${fullSlug}\`\n**Page:** ${workflowUrl(fullSlug)}`
43
+ text: `## Workflow cloned\n\n**Title:** ${quotedSpan(title)}\n**Slug:** \`${fullSlug}\`\n**Page:** ${workflowUrl(fullSlug)}`
43
44
  + (isProtected ? '\n\nThe original is protected, so the copy\'s steps stay hidden. You can still run it.' : ''),
44
45
  }],
45
46
  structuredContent: {
@@ -1 +1 @@
1
- {"version":3,"file":"clone-workflow.js","sourceRoot":"","sources":["../../src/tools/clone-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clone-workflow.js","sourceRoot":"","sources":["../../src/tools/clone-workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAM7D,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAkB;IACzE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EAAE,uEAAuE;cAChF,+EAA+E;cAC/E,gFAAgF;cAChF,kFAAkF;cAClF,0CAA0C;QAC9C,WAAW,EAAE,WAAW,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;iBACpB,QAAQ,CAAC,uFAAuF,CAAC;SACrG,CAAC;QACF,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;YACxB,UAAU,EAAE,gBAAgB;SAC7B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAC9B,MAAM,MAAM,CAAC,IAAI,CAAgB,iBAAiB,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EACpG,mCAAmC,CACpC,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;YAC3H,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;YAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAErD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,oCAAoC,UAAU,CAAC,KAAK,CAAC,iBAAiB,QAAQ,iBAAiB,WAAW,CAAC,QAAQ,CAAC,EAAE;8BACxH,CAAC,WAAW,CAAC,CAAC,CAAC,wFAAwF,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClH,CAAC;gBACF,iBAAiB,EAAE;oBACjB,QAAQ;oBACR,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC;oBAC1B,KAAK;oBACL,WAAW;oBACX,UAAU,EAAE;wBACV,IAAI,EAAE,cAAc;wBACpB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC7B,MAAM,EAAE,iEAAiE;qBAC1E;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,8EAA8E;sBAC5F,qGAAqG;sBACrG,0GAA0G;sBAC1G,gHAAgH,CAAC;gBACrH,0EAA0E;gBAC1E,qCAAqC;gBACrC,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7D,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,wDAAwD;0BACjG,uBAAuB,SAAS,sDAAsD,CAAC,CAAC,CAAC;gBAC/F,CAAC;gBACD,kFAAkF;gBAClF,kFAAkF;gBAClF,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5C,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,oEAAoE;0BAC7G,sGAAsG;0BACtG,2CAA2C,SAAS,4CAA4C;0BAChG,4CAA4C,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect-agent-oauth.d.ts","sourceRoot":"","sources":["../../src/tools/connect-agent-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA2hB/C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAmFrF"}
1
+ {"version":3,"file":"connect-agent-oauth.d.ts","sourceRoot":"","sources":["../../src/tools/connect-agent-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqoB/C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA0FrF"}
@@ -1,8 +1,10 @@
1
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';
2
+ import { apiErrorMessage, asString, errorResult, errorText, isPlainObject, requireApiSuccess, } from '../utils/api.js';
3
+ import { CONNECTION_NOT_CLEARED, OAUTH_LINK_TTL_SECONDS, accountLabel, agentStatusOf, buildChainedSelections, buildPickerAccounts, chooseConnectionMode, connectionModeRequirements, connectionRefusalText, connectionState, credentialGroup, customSkillEntries, dashboardAgentUrl, isAgentRunning, isAllowedRedirectUrl, isFilledValue, loadCredentialMeta, loadSkillRegistry, ownAppRedirectUri, parseDiscoveredGroups, readOAuthStatus, readUserAgent, toAccountRefs, turnOnSkillText, unusedCredential, unusedCredentialNote, writeOnlyModesNote, } from '../utils/agent-config.js';
4
4
  import { DEFAULT_WAIT_SECONDS, MAX_WAIT_SECONDS, pollUntil, reportProgress, } from '../utils/poll.js';
5
- import { nextActionSchema } from './schemas.js';
5
+ import { jsonSpan, quotedSpan } from '../utils/quoted-text.js';
6
+ import { readStatusAdvice, startNeedsPlan, toAgentDetail, WIRO_PROJECT_CREDENTIAL } from '../utils/user-agent.js';
7
+ import { nextActionSchema, strictInput } from './schemas.js';
6
8
  const accountSchema = z.object({ id: z.string(), name: z.string() });
7
9
  const outputSchema = {
8
10
  action: z.enum(['connect', 'status', 'select_accounts']),
@@ -43,7 +45,7 @@ const outputSchema = {
43
45
  mode: z.string(),
44
46
  available: z.boolean(),
45
47
  needsBrowser: z.boolean(),
46
- fields: z.array(z.object({ field: z.string(), label: z.string(), isSet: z.boolean() })),
48
+ fields: z.array(z.object({ field: z.string(), label: z.string(), isSet: z.boolean(), writeOnly: z.boolean().optional() })),
47
49
  note: z.string(),
48
50
  })).optional(),
49
51
  ownAppRedirectUri: z.string().optional(),
@@ -52,9 +54,6 @@ const outputSchema = {
52
54
  };
53
55
  const DONE_STATES = new Set(['connected', 'pick_accounts', 'pick_child_items']);
54
56
  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
57
  if (/credentials not configured/i.test(message)) {
59
58
  return `Save your own ${meta.title} app keys with set_agent_credentials first (call it with credential "${meta.key}" to see the fields).`;
60
59
  }
@@ -93,7 +92,7 @@ function childStepOf(picker, groups, configured) {
93
92
  };
94
93
  }
95
94
  function accountsLine(accounts) {
96
- return accounts.map(account => (account.name ? `${account.name} (${account.id})` : account.id)).join(', ');
95
+ return accounts.map(accountLabel).join(', ');
97
96
  }
98
97
  function result(action, context, state, message, extra = {}, textExtra = []) {
99
98
  const lines = [
@@ -103,7 +102,7 @@ function result(action, context, state, message, extra = {}, textExtra = []) {
103
102
  ...textExtra,
104
103
  ];
105
104
  if (isPlainObject(extra.nextAction)) {
106
- lines.push('', `Next: call ${String(extra.nextAction.tool)} with ${JSON.stringify(extra.nextAction.arguments)}.`);
105
+ lines.push('', `Next: call ${String(extra.nextAction.tool)} with ${jsonSpan(extra.nextAction.arguments)}.`);
107
106
  }
108
107
  return {
109
108
  content: [{ type: 'text', text: lines.join('\n') }],
@@ -121,13 +120,45 @@ function result(action, context, state, message, extra = {}, textExtra = []) {
121
120
  function modeLines(modes) {
122
121
  return [
123
122
  '',
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(', ')}.` : ''}`),
123
+ ...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)' : field.writeOnly ? '' : ' (missing)'}`).join(', ')}.` : ''}`),
125
124
  ];
126
125
  }
126
+ /** The answer to a connect that the rule on unused credentials refuses, or null when it may go ahead. */
127
+ function unusedCredentialRefusal(row, context, registry) {
128
+ const { credential, meta } = context;
129
+ const unused = unusedCredential(row, credential, registry);
130
+ if (!unused)
131
+ return null;
132
+ return [
133
+ `${meta.title} is not used by any of this agent's active skills, custom skills or scheduled tasks, so nothing was started.`,
134
+ unused.services.length > 0
135
+ ? `Services its skills connect with this tool: ${unused.services.join(', ')}.`
136
+ : 'None of its skills connect a service with this tool.',
137
+ turnOnSkillText(meta.title, credential, unused.skills),
138
+ credentialGroup(row, credential)?._connected === true ? `${meta.title} is still connected from before; disconnect_agent_oauth removes that connection.` : '',
139
+ ].filter(Boolean).join(' ');
140
+ }
141
+ /**
142
+ * What a finished sign-in also turns on: Wiro keeps an entry that requires a
143
+ * credential off until the credential arrives. Saving keys or a token turns
144
+ * these on earlier and says so, so an entry that reads as on is left out.
145
+ */
146
+ function turnsOnNote(row, { credential, meta }) {
147
+ const entries = customSkillEntries(row).filter(entry => !entry.enabled && entry.requiresCredentials.includes(credential));
148
+ if (entries.length === 0)
149
+ return '';
150
+ const sentence = ` ${entries.map(entry => quotedSpan(entry.key)).join(', ')} ${entries.length > 1 ? 'turn' : 'turns'} on once ${meta.title} is connected.`;
151
+ return entries.some(entry => entry.kind === 'scheduled_task')
152
+ ? `${sentence} Every run of a scheduled task uses credits; turn off any you do not want with manage_agent_custom_skill.`
153
+ : sentence;
154
+ }
127
155
  async function connect(context, input) {
128
156
  const { client, agentGuid, credential, meta, signal } = context;
129
157
  const oauth = meta.oauth;
130
158
  const row = await readUserAgent(client, agentGuid, signal);
159
+ const refusal = unusedCredentialRefusal(row, context, await loadSkillRegistry(client, signal));
160
+ if (refusal)
161
+ return errorResult(new Error(refusal));
131
162
  const group = credentialGroup(row, credential);
132
163
  const modes = connectionModeRequirements(meta, group);
133
164
  const redirectUri = meta.connectionModes.includes('own') ? ownAppRedirectUri(meta) : undefined;
@@ -143,7 +174,8 @@ async function connect(context, input) {
143
174
  const mode = input.mode ?? chooseConnectionMode(meta, modes);
144
175
  const requirement = modes.find(candidate => candidate.mode === mode);
145
176
  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));
177
+ const savedKeysNote = writeOnlyModesNote(modes);
178
+ return result('connect', context, 'setup_needed', `Choose how to connect ${meta.title}: it needs your own app keys or a token saved first.${savedKeysNote ? ` ${savedKeysNote}` : ''}`, { ...setupExtra, nextAction: describeAction }, modeLines(modes));
147
179
  }
148
180
  if (!requirement.available) {
149
181
  return result('connect', context, 'setup_needed', `${requirement.note}`, { ...setupExtra, mode, nextAction: describeAction }, modeLines(modes));
@@ -151,13 +183,27 @@ async function connect(context, input) {
151
183
  if (mode === 'api_key' && !oauth.directProbe) {
152
184
  return result('connect', context, 'setup_needed', requirement.note, { ...setupExtra, mode, nextAction: describeAction }, modeLines(modes));
153
185
  }
154
- const missing = requirement.fields.filter(field => !field.isSet);
186
+ // App keys read as empty even once saved, so for those the sign-in route below decides.
187
+ const missing = requirement.fields.filter(field => !field.isSet && !field.writeOnly);
155
188
  if (missing.length > 0) {
156
189
  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
190
  }
158
191
  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.`, {
192
+ // A sign-in removes what is saved for the modes it leaves.
193
+ const removed = mode === oauth.directProbe?.mode
194
+ ? []
195
+ : meta.fields.filter(field => !field.oauthManaged
196
+ && field.onlyInModes?.length
197
+ && !field.onlyInModes.includes(mode)
198
+ && isFilledValue(group?.[field.key]));
199
+ const appKeys = requirement.fields.filter(field => field.writeOnly);
200
+ if ((connectedBefore || removed.length > 0) && !input.confirm) {
201
+ const saveKeysFirst = removed.length > 0 && appKeys.length > 0
202
+ ? ' Save the app keys first if they are not saved yet, so the sign-in can start.'
203
+ : '';
204
+ return result('connect', context, 'confirm_needed', `${connectedBefore
205
+ ? `${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.`
206
+ : `Connecting ${meta.title} with mode ${mode} removes the saved ${removed.map(field => field.label).join(', ')}.`}${saveKeysFirst}`, {
161
207
  mode,
162
208
  nextAction: {
163
209
  tool: 'connect_agent_oauth',
@@ -175,7 +221,8 @@ async function connect(context, input) {
175
221
  }
176
222
  if (oauth.directProbe && mode === oauth.directProbe.mode) {
177
223
  // The check reads the mode from the saved credential, so it is saved first.
178
- if (asString(group?.authmethod) !== mode) {
224
+ const modeSaved = asString(group?.authmethod) !== mode;
225
+ if (modeSaved) {
179
226
  requireApiSuccess(await client.post('/UserAgent/CredentialUpsert', {
180
227
  useragentguid: agentGuid,
181
228
  fields: [{ credentialkey: credential, fieldname: 'authmethod', fieldvalue: mode }],
@@ -190,12 +237,20 @@ async function connect(context, input) {
190
237
  const code = asString(body.errorcode);
191
238
  const message = (body.errors ?? []).map(error => error?.message?.trim()).filter(Boolean).join(' ')
192
239
  || `${meta.title} could not be checked.`;
240
+ if (message === CONNECTION_NOT_CLEARED)
241
+ return errorResult(new Error(message));
193
242
  const parts = [code ? `${message} (${code})` : message];
194
243
  if (code === 'direct_token_missing') {
195
244
  parts.push(`Save ${requirement.fields.map(field => field.field).join(', ')} with set_agent_credentials first.`);
196
245
  }
197
246
  else if (connectedBefore) {
198
- parts.push('The previous connection was cleared by this check.');
247
+ parts.push('Connect again to restore the connection.');
248
+ }
249
+ // An error result reads as nothing done, so it says what the check still did.
250
+ if (modeSaved)
251
+ parts.push(`The mode is saved as ${mode}.`);
252
+ if ((modeSaved || code) && isAgentRunning(agentStatusOf(row))) {
253
+ parts.push('The running agent restarts, which takes about a minute.');
199
254
  }
200
255
  return errorResult(new Error(parts.join(' ')));
201
256
  }
@@ -212,7 +267,7 @@ async function connect(context, input) {
212
267
  ? 'Save the only available account.'
213
268
  : 'Ask the user which accounts to use, then save only those.',
214
269
  },
215
- }, ['', ...candidates.map(account => `- ${account.name || account.id} (${account.id})`)]);
270
+ }, ['', ...candidates.map(account => `- ${accountLabel(account)}`)]);
216
271
  }
217
272
  return result('connect', context, 'connected', `${meta.title} is connected. A running agent restarts to use it.`, { mode });
218
273
  }
@@ -227,12 +282,23 @@ async function connect(context, input) {
227
282
  catch {
228
283
  since = '';
229
284
  }
230
- const body = requireApiSuccess(await client.post('/UserAgentOAuth/OAuthConnect', {
285
+ const answer = await client.post('/UserAgentOAuth/OAuthConnect', {
231
286
  useragentguid: agentGuid,
232
287
  credentialkey: credential,
233
288
  authmethod: mode,
234
289
  redirecturl: redirectUrl,
235
- }, signal), `Could not start the ${meta.title} sign-in.`);
290
+ }, signal);
291
+ if (answer.result !== true && appKeys.length > 0 && /credentials not configured/i.test(apiErrorMessage(answer, ''))) {
292
+ // What the sign-in removes may be gone already, so this answer goes by a fresh read.
293
+ const fresh = removed.length > 0 ? await readUserAgent(client, agentGuid, signal).catch(() => null) : null;
294
+ const groupNow = fresh ? credentialGroup(fresh, credential) : group;
295
+ const gone = removed.filter(field => !isFilledValue(groupNow?.[field.key]));
296
+ const goneText = gone.length > 0
297
+ ? ` The sign-in did not start, and this call removed the saved ${gone.map(field => field.label).join(', ')}${connectedBefore && groupNow?._connected !== true ? `, so ${meta.title} is no longer connected` : ''}. To go back to it, save it again with set_agent_credentials.`
298
+ : '';
299
+ return result('connect', context, 'setup_needed', `Mode ${mode} needs these saved first with set_agent_credentials: ${appKeys.map(field => `${field.label} (${field.field})`).join(', ')}. ${requirement.note}${goneText}`, { ...setupExtra, connectionModes: connectionModeRequirements(meta, groupNow), mode, nextAction: describeAction });
300
+ }
301
+ const body = requireApiSuccess(answer, `Could not start the ${meta.title} sign-in.`);
236
302
  const authorizeUrl = asString(body.authorizeUrl);
237
303
  if (!authorizeUrl)
238
304
  throw new Error(`Wiro did not return a sign-in link for ${meta.title}.`);
@@ -240,7 +306,7 @@ async function connect(context, input) {
240
306
  const after = usesDashboard
241
307
  ? `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
308
  : `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.`, {
309
+ 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}${turnsOnNote(row, context)} Give the link to the user and check the status once they say they are done.`, {
244
310
  mode,
245
311
  authorizeUrl,
246
312
  expiresInSeconds: OAUTH_LINK_TTL_SECONDS,
@@ -258,7 +324,24 @@ async function connect(context, input) {
258
324
  },
259
325
  }, ['', authorizeUrl]);
260
326
  }
261
- function statusMessage(state, meta, snapshot) {
327
+ /**
328
+ * What to do about access that reads as expired. A start is offered only when one can
329
+ * happen. Without the agent's row the offer stays: control_agent reads the agent again
330
+ * and says what comes first.
331
+ */
332
+ function expiredAdvice(row) {
333
+ const startOrConnect = 'Start the agent with control_agent, or connect again.';
334
+ if (!row)
335
+ return startOrConnect;
336
+ const agent = toAgentDetail(row);
337
+ if ((agent.status === 0 || agent.status === 5) && !startNeedsPlan(agent))
338
+ return startOrConnect;
339
+ return agent.status === 3 || agent.status === 4
340
+ ? 'If the agent cannot use it, connect again.'
341
+ : `Connect again if the agent needs it. ${readStatusAdvice(agent)}`;
342
+ }
343
+ function statusMessage(state, meta, snapshot, unusedNote, row) {
344
+ const saved = row !== null && credentialGroup(row, meta.key)?._connected === true;
262
345
  const next = meta.oauth?.picker?.next;
263
346
  switch (state) {
264
347
  case 'connected': {
@@ -274,9 +357,11 @@ function statusMessage(state, meta, snapshot) {
274
357
  case 'waiting_for_user':
275
358
  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
359
  case 'token_expired':
277
- return `The saved ${meta.title} access has expired, usually because the agent was stopped and could not refresh it. Start the agent with control_agent, or connect again.`;
360
+ return `The saved ${meta.title} access has expired.${saved ? ` The connection is still saved, so get_my_agent lists ${meta.title} as connected.` : ''} ${unusedNote ?? expiredAdvice(row)}`;
278
361
  default:
279
- return `${meta.title} is not connected. Start with action connect.`;
362
+ return saved
363
+ ? `This check found no current ${meta.title} sign-in, but a ${meta.title} connection is saved on this agent, so get_my_agent lists it as connected. ${unusedNote ?? 'If the agent cannot use it, connect again: that replaces the saved connection and asks for confirm: true.'}`
364
+ : `${meta.title} is not connected. ${unusedNote ?? 'Start with action connect.'}`;
280
365
  }
281
366
  }
282
367
  async function status(context, input, extra) {
@@ -296,6 +381,8 @@ async function status(context, input, extra) {
296
381
  throw new Error(`Could not read the ${meta.title} connection status.`);
297
382
  const state = stateOf(snapshot);
298
383
  let nextAction;
384
+ let unusedNote = null;
385
+ let row = null;
299
386
  if (state === 'waiting_for_user') {
300
387
  nextAction = {
301
388
  tool: 'connect_agent_oauth',
@@ -317,16 +404,22 @@ async function status(context, input, extra) {
317
404
  };
318
405
  }
319
406
  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
- };
407
+ // Only these states offer connect, so only they read the skills. A status is
408
+ // still answered when that read fails: connect goes by the rule anyway.
409
+ row = await readUserAgent(client, agentGuid, signal).catch(() => null);
410
+ unusedNote = row ? await unusedCredentialNote(client, row, credential, meta.title, signal) : null;
411
+ if (!unusedNote) {
412
+ nextAction = {
413
+ tool: 'connect_agent_oauth',
414
+ arguments: { action: 'connect', agent_guid: agentGuid, credential },
415
+ reason: `Connect ${meta.title}.`,
416
+ };
417
+ }
325
418
  }
326
419
  const childStep = snapshot.childStep
327
420
  ? { ...snapshot.childStep, label: picker?.next?.label ?? snapshot.childStep.picker }
328
421
  : undefined;
329
- return result('status', context, state, statusMessage(state, meta, snapshot), {
422
+ return result('status', context, state, statusMessage(state, meta, snapshot, unusedNote, row), {
330
423
  ...(snapshot.connectedAt ? { connectedAt: snapshot.connectedAt } : {}),
331
424
  ...(snapshot.tokenExpiresAt ? { tokenExpiresAt: snapshot.tokenExpiresAt } : {}),
332
425
  accounts: snapshot.accounts,
@@ -368,8 +461,8 @@ async function selectAccounts(context, input) {
368
461
  reason: 'Ask the user which ones to keep; this preselects all of them.',
369
462
  },
370
463
  }, ['', ...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})`),
464
+ `- ${accountLabel(group.parent)}${group.errorCode ? `: could not be read (${group.errorCode})` : ''}`,
465
+ ...group.items.map(item => ` - ${accountLabel(item)}`),
373
466
  ])]);
374
467
  }
375
468
  const built = buildChainedSelections(next, groups, input.selections);
@@ -394,7 +487,7 @@ async function selectAccounts(context, input) {
394
487
  const skipped = built.skippedParents.length > 0
395
488
  ? ` Nothing was chosen for ${accountsLine(built.skippedParents)}.`
396
489
  : '';
397
- return result('select_accounts', context, 'connected', `Saved ${mappings.length} ${next.label}.${skipped} A running agent restarts to use them.`, { childStep: { ...childStepOf(picker, savedGroups, mappings.length > 0) } });
490
+ 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
491
  }
399
492
  if (!input.accounts || input.accounts.length === 0) {
400
493
  return errorResult(new Error('Pass accounts (each {id, name}) to save, or picker to run the extra step.'));
@@ -410,7 +503,7 @@ async function selectAccounts(context, input) {
410
503
  const accounts = toAccountRefs(saved.accounts, picker);
411
504
  const next = picker.next;
412
505
  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 accounts.`, {
506
+ 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
507
  accounts,
415
508
  nextAction: {
416
509
  tool: 'connect_agent_oauth',
@@ -421,7 +514,7 @@ async function selectAccounts(context, input) {
421
514
  },
422
515
  });
423
516
  }
424
- return result('select_accounts', context, 'connected', `Saved ${accounts.length} account${accounts.length === 1 ? '' : 's'}: ${accountsLine(accounts)}. A running agent restarts to use them.`, { accounts });
517
+ 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
518
  }
426
519
  export function registerConnectAgentOauth(server, client) {
427
520
  server.registerTool('connect_agent_oauth', {
@@ -438,13 +531,15 @@ export function registerConnectAgentOauth(server, client) {
438
531
  + 'save. action status: whether the sign-in finished (wait_seconds waits for '
439
532
  + 'the user). action select_accounts: saves which accounts the agent uses ({id, name} from '
440
533
  + '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 '
534
+ + 'Google Business locations). Connecting again replaces an existing connection, and a sign-in removes a token saved for another mode; both need '
535
+ + 'confirm: true. A running agent restarts when a connection or selection is saved. Connecting a service '
536
+ + 'turns on the scheduled tasks that need it; turn off any you do not want. '
537
+ + 'Remove a connection with disconnect_agent_oauth. A credential that none of the agent\'s active '
538
+ + 'skills use, that no custom skill or scheduled task of the agent requires, and that its setup does not wait for, is refused before any link is made (get_my_agent '
539
+ + 'lists the skills; apply_agent_skills turns one on). Only the person who deployed the agent can connect, so the '
445
540
  + 'connected project must be one that person created. The agents playbook (get_playbook) has the '
446
541
  + 'full setup walkthrough.',
447
- inputSchema: {
542
+ inputSchema: strictInput({
448
543
  action: z.enum(['connect', 'status', 'select_accounts']).default('connect')
449
544
  .describe('connect (default) starts a connection, status checks it, select_accounts saves the accounts to use.'),
450
545
  agent_guid: z.string().min(1).describe('The deployed agent\'s guid, from list_my_agents.'),
@@ -468,12 +563,12 @@ export function registerConnectAgentOauth(server, client) {
468
563
  })).optional()
469
564
  .describe('select_accounts with picker: what to use under each account. Accounts left out get nothing.'),
470
565
  confirm: z.boolean().default(false)
471
- .describe('connect: true to replace an existing connection after the user agreed.'),
472
- },
566
+ .describe('connect: true to replace an existing connection or a token saved for another mode, after the user agreed.'),
567
+ }),
473
568
  outputSchema,
474
569
  annotations: {
475
570
  readOnlyHint: false,
476
- destructiveHint: false,
571
+ destructiveHint: true,
477
572
  idempotentHint: false,
478
573
  openWorldHint: true,
479
574
  },
@@ -485,7 +580,9 @@ export function registerConnectAgentOauth(server, client) {
485
580
  if (!meta)
486
581
  return errorResult(new Error(`Unknown credential "${credential}".`));
487
582
  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).`));
583
+ return errorResult(new Error(credential === WIRO_PROJECT_CREDENTIAL
584
+ ? `${meta.title} is not a sign-in connection. Connect a Wiro project with bind_agent_project, with no key to paste.`
585
+ : `${meta.title} is not a sign-in connection. Save its fields with set_agent_credentials (call it with credential "${credential}" to see them).`));
489
586
  }
490
587
  const context = { client, agentGuid: args.agent_guid, credential, meta, signal: extra.signal };
491
588
  if (args.action === 'status') {
@@ -501,7 +598,10 @@ export function registerConnectAgentOauth(server, client) {
501
598
  return await connect(context, { mode: args.mode, redirectUrl: args.redirect_url, confirm: args.confirm });
502
599
  }
503
600
  catch (error) {
504
- return errorResult(withHint(error, meta ?? undefined));
601
+ const message = errorText(error);
602
+ return errorResult(/not found or unauthorized/i.test(message)
603
+ ? new Error(await connectionRefusalText(client, args.agent_guid, message, 'connected', extra.signal))
604
+ : withHint(error, meta ?? undefined));
505
605
  }
506
606
  });
507
607
  }