@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.
- package/README.md +183 -16
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +126 -24
- package/dist/client.js.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +29 -0
- package/dist/instructions.js.map +1 -0
- package/dist/playbooks.d.ts +8 -0
- package/dist/playbooks.d.ts.map +1 -0
- package/dist/playbooks.js +667 -0
- package/dist/playbooks.js.map +1 -0
- package/dist/prompts.d.ts +4 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +133 -0
- package/dist/prompts.js.map +1 -0
- package/dist/server.d.ts +15 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/apply-agent-skills.d.ts +4 -0
- package/dist/tools/apply-agent-skills.d.ts.map +1 -0
- package/dist/tools/apply-agent-skills.js +601 -0
- package/dist/tools/apply-agent-skills.js.map +1 -0
- package/dist/tools/cancel-agent-message.d.ts +4 -0
- package/dist/tools/cancel-agent-message.d.ts.map +1 -0
- package/dist/tools/cancel-agent-message.js +126 -0
- package/dist/tools/cancel-agent-message.js.map +1 -0
- package/dist/tools/cancel-task.js +3 -3
- package/dist/tools/cancel-task.js.map +1 -1
- package/dist/tools/clone-workflow.d.ts +4 -0
- package/dist/tools/clone-workflow.d.ts.map +1 -0
- package/dist/tools/clone-workflow.js +83 -0
- package/dist/tools/clone-workflow.js.map +1 -0
- package/dist/tools/connect-agent-oauth.d.ts +4 -0
- package/dist/tools/connect-agent-oauth.d.ts.map +1 -0
- package/dist/tools/connect-agent-oauth.js +508 -0
- package/dist/tools/connect-agent-oauth.js.map +1 -0
- package/dist/tools/control-agent.d.ts +4 -0
- package/dist/tools/control-agent.d.ts.map +1 -0
- package/dist/tools/control-agent.js +289 -0
- package/dist/tools/control-agent.js.map +1 -0
- package/dist/tools/create-workflow.d.ts +100 -0
- package/dist/tools/create-workflow.d.ts.map +1 -0
- package/dist/tools/create-workflow.js +102 -0
- package/dist/tools/create-workflow.js.map +1 -0
- package/dist/tools/delete-agent-session.d.ts +6 -0
- package/dist/tools/delete-agent-session.d.ts.map +1 -0
- package/dist/tools/delete-agent-session.js +134 -0
- package/dist/tools/delete-agent-session.js.map +1 -0
- package/dist/tools/delete-agent.d.ts +4 -0
- package/dist/tools/delete-agent.d.ts.map +1 -0
- package/dist/tools/delete-agent.js +145 -0
- package/dist/tools/delete-agent.js.map +1 -0
- package/dist/tools/delete-workflow.d.ts +4 -0
- package/dist/tools/delete-workflow.d.ts.map +1 -0
- package/dist/tools/delete-workflow.js +77 -0
- package/dist/tools/delete-workflow.js.map +1 -0
- package/dist/tools/deploy-agent.d.ts +4 -0
- package/dist/tools/deploy-agent.d.ts.map +1 -0
- package/dist/tools/deploy-agent.js +463 -0
- package/dist/tools/deploy-agent.js.map +1 -0
- package/dist/tools/disconnect-agent-oauth.d.ts +4 -0
- package/dist/tools/disconnect-agent-oauth.d.ts.map +1 -0
- package/dist/tools/disconnect-agent-oauth.js +118 -0
- package/dist/tools/disconnect-agent-oauth.js.map +1 -0
- package/dist/tools/get-account.d.ts +4 -0
- package/dist/tools/get-account.d.ts.map +1 -0
- package/dist/tools/get-account.js +112 -0
- package/dist/tools/get-account.js.map +1 -0
- package/dist/tools/get-agent-activity.d.ts +4 -0
- package/dist/tools/get-agent-activity.d.ts.map +1 -0
- package/dist/tools/get-agent-activity.js +383 -0
- package/dist/tools/get-agent-activity.js.map +1 -0
- package/dist/tools/get-agent-conversation.d.ts +4 -0
- package/dist/tools/get-agent-conversation.d.ts.map +1 -0
- package/dist/tools/get-agent-conversation.js +228 -0
- package/dist/tools/get-agent-conversation.js.map +1 -0
- package/dist/tools/get-agent-message.d.ts +4 -0
- package/dist/tools/get-agent-message.d.ts.map +1 -0
- package/dist/tools/get-agent-message.js +68 -0
- package/dist/tools/get-agent-message.js.map +1 -0
- package/dist/tools/get-agent-template.d.ts +4 -0
- package/dist/tools/get-agent-template.d.ts.map +1 -0
- package/dist/tools/get-agent-template.js +128 -0
- package/dist/tools/get-agent-template.js.map +1 -0
- package/dist/tools/get-model-schema.d.ts +5 -1
- package/dist/tools/get-model-schema.d.ts.map +1 -1
- package/dist/tools/get-model-schema.js +138 -8
- package/dist/tools/get-model-schema.js.map +1 -1
- package/dist/tools/get-my-agent.d.ts +4 -0
- package/dist/tools/get-my-agent.d.ts.map +1 -0
- package/dist/tools/get-my-agent.js +117 -0
- package/dist/tools/get-my-agent.js.map +1 -0
- package/dist/tools/get-playbook.d.ts +3 -0
- package/dist/tools/get-playbook.d.ts.map +1 -0
- package/dist/tools/get-playbook.js +50 -0
- package/dist/tools/get-playbook.js.map +1 -0
- package/dist/tools/get-task-price.d.ts +1 -1
- package/dist/tools/get-task-price.d.ts.map +1 -1
- package/dist/tools/get-task-price.js +64 -16
- package/dist/tools/get-task-price.js.map +1 -1
- package/dist/tools/get-task.d.ts.map +1 -1
- package/dist/tools/get-task.js +26 -9
- package/dist/tools/get-task.js.map +1 -1
- package/dist/tools/get-workflow.d.ts +9 -0
- package/dist/tools/get-workflow.d.ts.map +1 -0
- package/dist/tools/get-workflow.js +105 -0
- package/dist/tools/get-workflow.js.map +1 -0
- package/dist/tools/index.d.ts +63 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +131 -14
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kill-task.d.ts.map +1 -1
- package/dist/tools/kill-task.js +10 -6
- package/dist/tools/kill-task.js.map +1 -1
- package/dist/tools/list-agent-skills.d.ts +4 -0
- package/dist/tools/list-agent-skills.d.ts.map +1 -0
- package/dist/tools/list-agent-skills.js +242 -0
- package/dist/tools/list-agent-skills.js.map +1 -0
- package/dist/tools/list-agent-templates.d.ts +4 -0
- package/dist/tools/list-agent-templates.d.ts.map +1 -0
- package/dist/tools/list-agent-templates.js +110 -0
- package/dist/tools/list-agent-templates.js.map +1 -0
- package/dist/tools/list-my-agents.d.ts +4 -0
- package/dist/tools/list-my-agents.d.ts.map +1 -0
- package/dist/tools/list-my-agents.js +93 -0
- package/dist/tools/list-my-agents.js.map +1 -0
- package/dist/tools/list-studio-results.d.ts +4 -0
- package/dist/tools/list-studio-results.d.ts.map +1 -0
- package/dist/tools/list-studio-results.js +95 -0
- package/dist/tools/list-studio-results.js.map +1 -0
- package/dist/tools/list-tasks.d.ts.map +1 -1
- package/dist/tools/list-tasks.js +7 -5
- package/dist/tools/list-tasks.js.map +1 -1
- package/dist/tools/list-workflow-runs.d.ts +4 -0
- package/dist/tools/list-workflow-runs.d.ts.map +1 -0
- package/dist/tools/list-workflow-runs.js +110 -0
- package/dist/tools/list-workflow-runs.js.map +1 -0
- package/dist/tools/list-workflows.d.ts +4 -0
- package/dist/tools/list-workflows.d.ts.map +1 -0
- package/dist/tools/list-workflows.js +143 -0
- package/dist/tools/list-workflows.js.map +1 -0
- package/dist/tools/manage-agent-billing.d.ts +4 -0
- package/dist/tools/manage-agent-billing.d.ts.map +1 -0
- package/dist/tools/manage-agent-billing.js +788 -0
- package/dist/tools/manage-agent-billing.js.map +1 -0
- package/dist/tools/manage-agent-custom-skill.d.ts +4 -0
- package/dist/tools/manage-agent-custom-skill.d.ts.map +1 -0
- package/dist/tools/manage-agent-custom-skill.js +531 -0
- package/dist/tools/manage-agent-custom-skill.js.map +1 -0
- package/dist/tools/recommend-model.d.ts.map +1 -1
- package/dist/tools/recommend-model.js +6 -5
- package/dist/tools/recommend-model.js.map +1 -1
- package/dist/tools/resume-workflow-run.d.ts +4 -0
- package/dist/tools/resume-workflow-run.d.ts.map +1 -0
- package/dist/tools/resume-workflow-run.js +69 -0
- package/dist/tools/resume-workflow-run.js.map +1 -0
- package/dist/tools/run-model.d.ts.map +1 -1
- package/dist/tools/run-model.js +40 -4
- package/dist/tools/run-model.js.map +1 -1
- package/dist/tools/run-workflow.d.ts +6 -0
- package/dist/tools/run-workflow.d.ts.map +1 -0
- package/dist/tools/run-workflow.js +132 -0
- package/dist/tools/run-workflow.js.map +1 -0
- package/dist/tools/save-workflow-from-agent.d.ts +4 -0
- package/dist/tools/save-workflow-from-agent.d.ts.map +1 -0
- package/dist/tools/save-workflow-from-agent.js +280 -0
- package/dist/tools/save-workflow-from-agent.js.map +1 -0
- package/dist/tools/schemas.d.ts +182 -115
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +26 -6
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/search-models.d.ts.map +1 -1
- package/dist/tools/search-models.js +9 -6
- package/dist/tools/search-models.js.map +1 -1
- package/dist/tools/send-agent-message.d.ts +4 -0
- package/dist/tools/send-agent-message.d.ts.map +1 -0
- package/dist/tools/send-agent-message.js +156 -0
- package/dist/tools/send-agent-message.js.map +1 -0
- package/dist/tools/set-agent-credentials.d.ts +4 -0
- package/dist/tools/set-agent-credentials.d.ts.map +1 -0
- package/dist/tools/set-agent-credentials.js +540 -0
- package/dist/tools/set-agent-credentials.js.map +1 -0
- package/dist/tools/update-agent.d.ts +4 -0
- package/dist/tools/update-agent.d.ts.map +1 -0
- package/dist/tools/update-agent.js +179 -0
- package/dist/tools/update-agent.js.map +1 -0
- package/dist/tools/update-workflow.d.ts +201 -0
- package/dist/tools/update-workflow.d.ts.map +1 -0
- package/dist/tools/update-workflow.js +168 -0
- package/dist/tools/update-workflow.js.map +1 -0
- package/dist/tools/upload-file.d.ts.map +1 -1
- package/dist/tools/upload-file.js +12 -7
- package/dist/tools/upload-file.js.map +1 -1
- package/dist/tools/wait-for-task.d.ts.map +1 -1
- package/dist/tools/wait-for-task.js +20 -2
- package/dist/tools/wait-for-task.js.map +1 -1
- package/dist/tools/wait-for-workflow-run.d.ts +259 -0
- package/dist/tools/wait-for-workflow-run.d.ts.map +1 -0
- package/dist/tools/wait-for-workflow-run.js +190 -0
- package/dist/tools/wait-for-workflow-run.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/agent-catalog.d.ts +1256 -0
- package/dist/utils/agent-catalog.d.ts.map +1 -0
- package/dist/utils/agent-catalog.js +387 -0
- package/dist/utils/agent-catalog.js.map +1 -0
- package/dist/utils/agent-config.d.ts +443 -0
- package/dist/utils/agent-config.d.ts.map +1 -0
- package/dist/utils/agent-config.js +1676 -0
- package/dist/utils/agent-config.js.map +1 -0
- package/dist/utils/agent-message.d.ts +112 -0
- package/dist/utils/agent-message.d.ts.map +1 -0
- package/dist/utils/agent-message.js +243 -0
- package/dist/utils/agent-message.js.map +1 -0
- package/dist/utils/agent-targets.d.ts +76 -0
- package/dist/utils/agent-targets.d.ts.map +1 -0
- package/dist/utils/agent-targets.js +412 -0
- package/dist/utils/agent-targets.js.map +1 -0
- package/dist/utils/agent-turns.d.ts +354 -0
- package/dist/utils/agent-turns.d.ts.map +1 -0
- package/dist/utils/agent-turns.js +660 -0
- package/dist/utils/agent-turns.js.map +1 -0
- package/dist/utils/api.d.ts +40 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +111 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/format.d.ts +65 -2
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +583 -81
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/json-schema-dialect.d.ts +8 -1
- package/dist/utils/json-schema-dialect.d.ts.map +1 -1
- package/dist/utils/json-schema-dialect.js +23 -1
- package/dist/utils/json-schema-dialect.js.map +1 -1
- package/dist/utils/media.d.ts +28 -0
- package/dist/utils/media.d.ts.map +1 -0
- package/dist/utils/media.js +65 -0
- package/dist/utils/media.js.map +1 -0
- package/dist/utils/poll.d.ts +39 -0
- package/dist/utils/poll.d.ts.map +1 -0
- package/dist/utils/poll.js +111 -0
- package/dist/utils/poll.js.map +1 -0
- package/dist/utils/remote-file.js +2 -2
- package/dist/utils/remote-file.js.map +1 -1
- package/dist/utils/structured.d.ts +4 -0
- package/dist/utils/structured.d.ts.map +1 -1
- package/dist/utils/structured.js +23 -7
- package/dist/utils/structured.js.map +1 -1
- package/dist/utils/studio-runs.d.ts +87 -0
- package/dist/utils/studio-runs.d.ts.map +1 -0
- package/dist/utils/studio-runs.js +167 -0
- package/dist/utils/studio-runs.js.map +1 -0
- package/dist/utils/user-agent.d.ts +1199 -0
- package/dist/utils/user-agent.d.ts.map +1 -0
- package/dist/utils/user-agent.js +897 -0
- package/dist/utils/user-agent.js.map +1 -0
- package/dist/utils/workflow-agent.d.ts +151 -0
- package/dist/utils/workflow-agent.d.ts.map +1 -0
- package/dist/utils/workflow-agent.js +292 -0
- package/dist/utils/workflow-agent.js.map +1 -0
- package/dist/utils/workflow-artifacts.d.ts +160 -0
- package/dist/utils/workflow-artifacts.d.ts.map +1 -0
- package/dist/utils/workflow-artifacts.js +801 -0
- package/dist/utils/workflow-artifacts.js.map +1 -0
- package/dist/utils/workflow-save.d.ts +120 -0
- package/dist/utils/workflow-save.d.ts.map +1 -0
- package/dist/utils/workflow-save.js +728 -0
- package/dist/utils/workflow-save.js.map +1 -0
- package/dist/utils/workflow.d.ts +564 -0
- package/dist/utils/workflow.d.ts.map +1 -0
- package/dist/utils/workflow.js +712 -0
- package/dist/utils/workflow.js.map +1 -0
- package/dist/utils/workspace.d.ts +38 -0
- package/dist/utils/workspace.d.ts.map +1 -0
- package/dist/utils/workspace.js +90 -0
- package/dist/utils/workspace.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, errorText, requireApiSuccess } from '../utils/api.js';
|
|
3
|
+
import { DEFAULT_WAIT_SECONDS } from '../utils/poll.js';
|
|
4
|
+
import { agentDetailSchema, formatAgentDetail, nextStepForAgent, readAgentDetail, readAgentStatus, selectableModelSlugs, toAgentDetail, } from '../utils/user-agent.js';
|
|
5
|
+
import { nextActionSchema } from './schemas.js';
|
|
6
|
+
const COMMANDS = [
|
|
7
|
+
'agent_help',
|
|
8
|
+
'new_session',
|
|
9
|
+
'agent_status',
|
|
10
|
+
'agent_limits',
|
|
11
|
+
'last_scan',
|
|
12
|
+
'last_heartbeat',
|
|
13
|
+
'agent_restart',
|
|
14
|
+
'clear_all_sessions',
|
|
15
|
+
'clear_history',
|
|
16
|
+
];
|
|
17
|
+
const MODEL_FIELDS = {
|
|
18
|
+
chat_model: 'chatmodel',
|
|
19
|
+
cron_model: 'cronmodel',
|
|
20
|
+
voice_prep_model: 'voiceprepmodel',
|
|
21
|
+
voice_postcall_model: 'voicepostcallmodel',
|
|
22
|
+
};
|
|
23
|
+
export function registerUpdateAgent(server, client) {
|
|
24
|
+
server.registerTool('update_agent', {
|
|
25
|
+
title: 'Update a Wiro agent',
|
|
26
|
+
description: 'Change a deployed agent\'s name, description, cover or categories, and its settings: '
|
|
27
|
+
+ 'timezone (used by scheduled tasks), team session mode, the models used for chat, scheduled tasks '
|
|
28
|
+
+ 'and voice calls, and which slash commands are available. Only the fields you pass change. A '
|
|
29
|
+
+ 'running or starting agent restarts to apply the change. Calling it with only agent_guid refreshes '
|
|
30
|
+
+ 'the setup status of an agent waiting for setup, after its credentials were set. Skills, credentials and '
|
|
31
|
+
+ 'custom instructions have their own tools (apply_agent_skills, set_agent_credentials, '
|
|
32
|
+
+ 'manage_agent_custom_skill). On a team agent this needs a team admin or the person who deployed it; '
|
|
33
|
+
+ 'other team members can read the agent with get_my_agent and message it.',
|
|
34
|
+
inputSchema: {
|
|
35
|
+
agent_guid: z.string().min(1).max(100)
|
|
36
|
+
.describe('The deployed agent\'s guid, from list_my_agents or deploy_agent.'),
|
|
37
|
+
title: z.string().trim().min(1).max(200).optional()
|
|
38
|
+
.describe('New name.'),
|
|
39
|
+
description: z.string().max(5_000).nullable().optional()
|
|
40
|
+
.describe('New description; null clears it.'),
|
|
41
|
+
cover: z.string().url().max(2_048).nullable().optional()
|
|
42
|
+
.describe('New https cover image URL; null goes back to the template cover.'),
|
|
43
|
+
categories: z.array(z.string().min(1).max(100)).min(1).max(20).optional()
|
|
44
|
+
.describe('New category list (at least one).'),
|
|
45
|
+
timezone: z.string().max(100).nullable().optional()
|
|
46
|
+
.describe('IANA timezone such as "Europe/Istanbul" for scheduled tasks; null or "UTC" means UTC.'),
|
|
47
|
+
team_session_mode: z.enum(['private', 'collaborative']).optional()
|
|
48
|
+
.describe('private gives each person their own chat history; collaborative shares one history in team chats.'),
|
|
49
|
+
chat_model: z.string().max(200).nullable().optional()
|
|
50
|
+
.describe('Model for chat turns: a slug from the model list in get_my_agent, which shows each model\'s credits per 1M tokens. null resets to the default. The plan price stays the same.'),
|
|
51
|
+
cron_model: z.string().max(200).nullable().optional()
|
|
52
|
+
.describe('Model for scheduled tasks; same rules as chat_model.'),
|
|
53
|
+
voice_prep_model: z.string().max(200).nullable().optional()
|
|
54
|
+
.describe('Model that prepares voice calls; same rules as chat_model.'),
|
|
55
|
+
voice_postcall_model: z.string().max(200).nullable().optional()
|
|
56
|
+
.describe('Model that summarizes voice calls; same rules as chat_model.'),
|
|
57
|
+
enabled_commands: z.array(z.string().min(1).max(100)).max(50).optional()
|
|
58
|
+
.describe(`Slash commands the agent offers; [] hides all of them. Commands today: ${COMMANDS.join(', ')}.`),
|
|
59
|
+
},
|
|
60
|
+
outputSchema: {
|
|
61
|
+
agent: agentDetailSchema,
|
|
62
|
+
changed: z.array(z.string()),
|
|
63
|
+
restarted: z.boolean(),
|
|
64
|
+
message: z.string(),
|
|
65
|
+
nextAction: nextActionSchema.optional(),
|
|
66
|
+
},
|
|
67
|
+
annotations: {
|
|
68
|
+
readOnlyHint: false,
|
|
69
|
+
destructiveHint: false,
|
|
70
|
+
idempotentHint: false,
|
|
71
|
+
openWorldHint: true,
|
|
72
|
+
},
|
|
73
|
+
}, async (args, extra) => {
|
|
74
|
+
try {
|
|
75
|
+
const guid = args.agent_guid.trim();
|
|
76
|
+
const before = await readAgentDetail(client, guid, extra.signal);
|
|
77
|
+
const previous = readAgentStatus(before);
|
|
78
|
+
const profile = {};
|
|
79
|
+
if (args.title !== undefined)
|
|
80
|
+
profile.title = args.title;
|
|
81
|
+
if (args.description !== undefined)
|
|
82
|
+
profile.description = args.description;
|
|
83
|
+
if (args.cover !== undefined)
|
|
84
|
+
profile.cover = args.cover;
|
|
85
|
+
if (args.categories !== undefined)
|
|
86
|
+
profile.categories = args.categories;
|
|
87
|
+
const settings = {};
|
|
88
|
+
const settingNames = [];
|
|
89
|
+
if (args.timezone !== undefined) {
|
|
90
|
+
settings.timezone = args.timezone;
|
|
91
|
+
settingNames.push('timezone');
|
|
92
|
+
}
|
|
93
|
+
if (args.team_session_mode !== undefined) {
|
|
94
|
+
settings.teamsessionmode = args.team_session_mode;
|
|
95
|
+
settingNames.push('team_session_mode');
|
|
96
|
+
}
|
|
97
|
+
if (args.enabled_commands !== undefined) {
|
|
98
|
+
settings.enabledcommands = [...new Set(args.enabled_commands)];
|
|
99
|
+
settingNames.push('enabled_commands');
|
|
100
|
+
}
|
|
101
|
+
const selectable = selectableModelSlugs(before);
|
|
102
|
+
for (const [input, field] of Object.entries(MODEL_FIELDS)) {
|
|
103
|
+
const value = args[input];
|
|
104
|
+
if (value === undefined)
|
|
105
|
+
continue;
|
|
106
|
+
if (value !== null && value !== '' && selectable.size > 0 && !selectable.has(value)) {
|
|
107
|
+
throw new Error(`${input} "${value}" is not a selectable model. Choose one of: ${[...selectable].join(', ')}.`);
|
|
108
|
+
}
|
|
109
|
+
settings[field] = value === '' ? null : value;
|
|
110
|
+
settingNames.push(input);
|
|
111
|
+
}
|
|
112
|
+
// An update restarts a running agent, so it is only sent for profile
|
|
113
|
+
// fields or to finish the setup of a status 6 agent.
|
|
114
|
+
const sendProfile = Object.keys(profile).length > 0 || previous === 6;
|
|
115
|
+
const sendSettings = Object.keys(settings).length > 0;
|
|
116
|
+
if (!sendProfile && !sendSettings) {
|
|
117
|
+
throw new Error('Nothing to update. Pass at least one field to change.');
|
|
118
|
+
}
|
|
119
|
+
const changed = [];
|
|
120
|
+
if (sendProfile) {
|
|
121
|
+
requireApiSuccess(await client.post('/UserAgent/Update', { guid, ...profile }, extra.signal), 'The agent could not be updated.');
|
|
122
|
+
changed.push(...Object.keys(profile));
|
|
123
|
+
}
|
|
124
|
+
if (sendSettings) {
|
|
125
|
+
try {
|
|
126
|
+
requireApiSuccess(await client.post('/UserAgent/UpdateSettings', { useragentguid: guid, ...settings }, extra.signal), 'The agent settings could not be updated.');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (changed.length === 0)
|
|
130
|
+
throw error;
|
|
131
|
+
throw new Error(`${errorText(error)}\n\nThe ${changed.join(', ')} change was saved; the settings were not.`);
|
|
132
|
+
}
|
|
133
|
+
changed.push(...settingNames);
|
|
134
|
+
}
|
|
135
|
+
let after = before;
|
|
136
|
+
let readFailed = false;
|
|
137
|
+
try {
|
|
138
|
+
after = await readAgentDetail(client, guid, extra.signal);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// The change was saved; only the follow-up read failed.
|
|
142
|
+
readFailed = true;
|
|
143
|
+
}
|
|
144
|
+
const agent = toAgentDetail(after);
|
|
145
|
+
const restarted = previous === 3 || previous === 4;
|
|
146
|
+
const setupFinished = previous === 6 && agent.status !== 6;
|
|
147
|
+
const message = [
|
|
148
|
+
changed.length > 0 ? `Saved: ${changed.join(', ')}.` : 'Setup status refreshed.',
|
|
149
|
+
restarted ? 'The agent restarts to apply the change.' : '',
|
|
150
|
+
setupFinished ? 'Setup is complete; the agent can be started.' : '',
|
|
151
|
+
previous === 6 && agent.status === 6 && agent.missingCredentials.length > 0
|
|
152
|
+
? `Setup is still waiting for: ${agent.missingCredentials.map(item => item.title).join(', ')}.`
|
|
153
|
+
: '',
|
|
154
|
+
readFailed ? 'The updated agent could not be read back; get_my_agent shows the new state.' : '',
|
|
155
|
+
].filter(Boolean).join(' ');
|
|
156
|
+
const nextAction = restarted
|
|
157
|
+
? {
|
|
158
|
+
tool: 'get_my_agent',
|
|
159
|
+
arguments: { agent_guid: guid, wait_seconds: DEFAULT_WAIT_SECONDS },
|
|
160
|
+
reason: 'Wait until the agent is running again.',
|
|
161
|
+
}
|
|
162
|
+
: nextStepForAgent(agent, DEFAULT_WAIT_SECONDS);
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: 'text', text: `${message}\n\n${formatAgentDetail(agent)}` }],
|
|
165
|
+
structuredContent: {
|
|
166
|
+
agent,
|
|
167
|
+
changed,
|
|
168
|
+
restarted,
|
|
169
|
+
message,
|
|
170
|
+
...(nextAction ? { nextAction } : {}),
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return errorResult(error);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=update-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-agent.js","sourceRoot":"","sources":["../../src/tools/update-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { WiroClient } from '../client.js';
|
|
4
|
+
import { type UpdatedWorkflow } from '../utils/workflow-save.js';
|
|
5
|
+
export declare const workflowChangesSchema: z.ZodObject<{
|
|
6
|
+
stepsAdded: z.ZodArray<z.ZodString, "many">;
|
|
7
|
+
stepsRemoved: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
stepsChanged: z.ZodArray<z.ZodString, "many">;
|
|
9
|
+
inputsAdded: z.ZodArray<z.ZodString, "many">;
|
|
10
|
+
inputsRemoved: z.ZodArray<z.ZodString, "many">;
|
|
11
|
+
inputsChanged: z.ZodArray<z.ZodString, "many">;
|
|
12
|
+
savedValuesChanged: z.ZodArray<z.ZodString, "many">;
|
|
13
|
+
outputsChanged: z.ZodBoolean;
|
|
14
|
+
layoutOnly: z.ZodBoolean;
|
|
15
|
+
titleChange: z.ZodOptional<z.ZodObject<{
|
|
16
|
+
from: z.ZodString;
|
|
17
|
+
to: z.ZodString;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
from: string;
|
|
20
|
+
to: string;
|
|
21
|
+
}, {
|
|
22
|
+
from: string;
|
|
23
|
+
to: string;
|
|
24
|
+
}>>;
|
|
25
|
+
descriptionChanged: z.ZodBoolean;
|
|
26
|
+
tagsChanged: z.ZodBoolean;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
stepsAdded: string[];
|
|
29
|
+
stepsRemoved: string[];
|
|
30
|
+
stepsChanged: string[];
|
|
31
|
+
inputsAdded: string[];
|
|
32
|
+
inputsRemoved: string[];
|
|
33
|
+
inputsChanged: string[];
|
|
34
|
+
savedValuesChanged: string[];
|
|
35
|
+
outputsChanged: boolean;
|
|
36
|
+
layoutOnly: boolean;
|
|
37
|
+
descriptionChanged: boolean;
|
|
38
|
+
tagsChanged: boolean;
|
|
39
|
+
titleChange?: {
|
|
40
|
+
from: string;
|
|
41
|
+
to: string;
|
|
42
|
+
} | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
stepsAdded: string[];
|
|
45
|
+
stepsRemoved: string[];
|
|
46
|
+
stepsChanged: string[];
|
|
47
|
+
inputsAdded: string[];
|
|
48
|
+
inputsRemoved: string[];
|
|
49
|
+
inputsChanged: string[];
|
|
50
|
+
savedValuesChanged: string[];
|
|
51
|
+
outputsChanged: boolean;
|
|
52
|
+
layoutOnly: boolean;
|
|
53
|
+
descriptionChanged: boolean;
|
|
54
|
+
tagsChanged: boolean;
|
|
55
|
+
titleChange?: {
|
|
56
|
+
from: string;
|
|
57
|
+
to: string;
|
|
58
|
+
} | undefined;
|
|
59
|
+
}>;
|
|
60
|
+
export declare const updatedWorkflowSchema: {
|
|
61
|
+
reviewReset: z.ZodBoolean;
|
|
62
|
+
contentsChanged: z.ZodBoolean;
|
|
63
|
+
unchanged: z.ZodBoolean;
|
|
64
|
+
discarded: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
65
|
+
preview: z.ZodOptional<z.ZodBoolean>;
|
|
66
|
+
changes: z.ZodOptional<z.ZodObject<{
|
|
67
|
+
stepsAdded: z.ZodArray<z.ZodString, "many">;
|
|
68
|
+
stepsRemoved: z.ZodArray<z.ZodString, "many">;
|
|
69
|
+
stepsChanged: z.ZodArray<z.ZodString, "many">;
|
|
70
|
+
inputsAdded: z.ZodArray<z.ZodString, "many">;
|
|
71
|
+
inputsRemoved: z.ZodArray<z.ZodString, "many">;
|
|
72
|
+
inputsChanged: z.ZodArray<z.ZodString, "many">;
|
|
73
|
+
savedValuesChanged: z.ZodArray<z.ZodString, "many">;
|
|
74
|
+
outputsChanged: z.ZodBoolean;
|
|
75
|
+
layoutOnly: z.ZodBoolean;
|
|
76
|
+
titleChange: z.ZodOptional<z.ZodObject<{
|
|
77
|
+
from: z.ZodString;
|
|
78
|
+
to: z.ZodString;
|
|
79
|
+
}, "strip", z.ZodTypeAny, {
|
|
80
|
+
from: string;
|
|
81
|
+
to: string;
|
|
82
|
+
}, {
|
|
83
|
+
from: string;
|
|
84
|
+
to: string;
|
|
85
|
+
}>>;
|
|
86
|
+
descriptionChanged: z.ZodBoolean;
|
|
87
|
+
tagsChanged: z.ZodBoolean;
|
|
88
|
+
}, "strip", z.ZodTypeAny, {
|
|
89
|
+
stepsAdded: string[];
|
|
90
|
+
stepsRemoved: string[];
|
|
91
|
+
stepsChanged: string[];
|
|
92
|
+
inputsAdded: string[];
|
|
93
|
+
inputsRemoved: string[];
|
|
94
|
+
inputsChanged: string[];
|
|
95
|
+
savedValuesChanged: string[];
|
|
96
|
+
outputsChanged: boolean;
|
|
97
|
+
layoutOnly: boolean;
|
|
98
|
+
descriptionChanged: boolean;
|
|
99
|
+
tagsChanged: boolean;
|
|
100
|
+
titleChange?: {
|
|
101
|
+
from: string;
|
|
102
|
+
to: string;
|
|
103
|
+
} | undefined;
|
|
104
|
+
}, {
|
|
105
|
+
stepsAdded: string[];
|
|
106
|
+
stepsRemoved: string[];
|
|
107
|
+
stepsChanged: string[];
|
|
108
|
+
inputsAdded: string[];
|
|
109
|
+
inputsRemoved: string[];
|
|
110
|
+
inputsChanged: string[];
|
|
111
|
+
savedValuesChanged: string[];
|
|
112
|
+
outputsChanged: boolean;
|
|
113
|
+
layoutOnly: boolean;
|
|
114
|
+
descriptionChanged: boolean;
|
|
115
|
+
tagsChanged: boolean;
|
|
116
|
+
titleChange?: {
|
|
117
|
+
from: string;
|
|
118
|
+
to: string;
|
|
119
|
+
} | undefined;
|
|
120
|
+
}>>;
|
|
121
|
+
fullSlug: z.ZodString;
|
|
122
|
+
url: z.ZodString;
|
|
123
|
+
title: z.ZodString;
|
|
124
|
+
renamed: z.ZodBoolean;
|
|
125
|
+
state: z.ZodOptional<z.ZodEnum<["private", "pending_review", "published", "rejected"]>>;
|
|
126
|
+
updatetime: z.ZodOptional<z.ZodString>;
|
|
127
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
128
|
+
key: z.ZodString;
|
|
129
|
+
label: z.ZodString;
|
|
130
|
+
type: z.ZodString;
|
|
131
|
+
field: z.ZodOptional<z.ZodString>;
|
|
132
|
+
options: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
133
|
+
value: z.ZodString;
|
|
134
|
+
text: z.ZodString;
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
136
|
+
value: string;
|
|
137
|
+
text: string;
|
|
138
|
+
}, {
|
|
139
|
+
value: string;
|
|
140
|
+
text: string;
|
|
141
|
+
}>, "many">>;
|
|
142
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
143
|
+
savedValue: z.ZodOptional<z.ZodUnknown>;
|
|
144
|
+
}, "strip", z.ZodTypeAny, {
|
|
145
|
+
type: string;
|
|
146
|
+
key: string;
|
|
147
|
+
label: string;
|
|
148
|
+
default?: unknown;
|
|
149
|
+
options?: {
|
|
150
|
+
value: string;
|
|
151
|
+
text: string;
|
|
152
|
+
}[] | undefined;
|
|
153
|
+
field?: string | undefined;
|
|
154
|
+
savedValue?: unknown;
|
|
155
|
+
}, {
|
|
156
|
+
type: string;
|
|
157
|
+
key: string;
|
|
158
|
+
label: string;
|
|
159
|
+
default?: unknown;
|
|
160
|
+
options?: {
|
|
161
|
+
value: string;
|
|
162
|
+
text: string;
|
|
163
|
+
}[] | undefined;
|
|
164
|
+
field?: string | undefined;
|
|
165
|
+
savedValue?: unknown;
|
|
166
|
+
}>, "many">;
|
|
167
|
+
outputs: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
168
|
+
warnings: z.ZodArray<z.ZodObject<{
|
|
169
|
+
code: z.ZodOptional<z.ZodString>;
|
|
170
|
+
message: z.ZodString;
|
|
171
|
+
nodeId: z.ZodOptional<z.ZodString>;
|
|
172
|
+
input: z.ZodOptional<z.ZodString>;
|
|
173
|
+
}, "strip", z.ZodTypeAny, {
|
|
174
|
+
message: string;
|
|
175
|
+
input?: string | undefined;
|
|
176
|
+
code?: string | undefined;
|
|
177
|
+
nodeId?: string | undefined;
|
|
178
|
+
}, {
|
|
179
|
+
message: string;
|
|
180
|
+
input?: string | undefined;
|
|
181
|
+
code?: string | undefined;
|
|
182
|
+
nodeId?: string | undefined;
|
|
183
|
+
}>, "many">;
|
|
184
|
+
nextAction: z.ZodOptional<z.ZodObject<{
|
|
185
|
+
tool: z.ZodString;
|
|
186
|
+
arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
187
|
+
reason: z.ZodString;
|
|
188
|
+
}, "strip", z.ZodTypeAny, {
|
|
189
|
+
arguments: Record<string, unknown>;
|
|
190
|
+
tool: string;
|
|
191
|
+
reason: string;
|
|
192
|
+
}, {
|
|
193
|
+
arguments: Record<string, unknown>;
|
|
194
|
+
tool: string;
|
|
195
|
+
reason: string;
|
|
196
|
+
}>>;
|
|
197
|
+
};
|
|
198
|
+
/** Markdown for an update or its preview. */
|
|
199
|
+
export declare function formatUpdatedWorkflow(saved: UpdatedWorkflow, heading: string): string;
|
|
200
|
+
export declare function registerUpdateWorkflow(server: McpServer, client: WiroClient): void;
|
|
201
|
+
//# sourceMappingURL=update-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/update-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAahC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASjC,CAAC;AAEF,6CAA6C;AAC7C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA4BrF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA8GlF"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult } from '../utils/api.js';
|
|
3
|
+
import { formatWorkflowInputs, parseWorkflowSlug } from '../utils/workflow.js';
|
|
4
|
+
import { formatWorkflowChanges, prepareIssuesText, tagProblem, updateWorkflow, WorkflowConflictError, WorkflowPrepareError, } from '../utils/workflow-save.js';
|
|
5
|
+
import { savedWorkflowSchema, workflowContentsInputSchema } from './create-workflow.js';
|
|
6
|
+
export const workflowChangesSchema = z.object({
|
|
7
|
+
stepsAdded: z.array(z.string()),
|
|
8
|
+
stepsRemoved: z.array(z.string()),
|
|
9
|
+
stepsChanged: z.array(z.string()),
|
|
10
|
+
inputsAdded: z.array(z.string()),
|
|
11
|
+
inputsRemoved: z.array(z.string()),
|
|
12
|
+
inputsChanged: z.array(z.string()),
|
|
13
|
+
savedValuesChanged: z.array(z.string()),
|
|
14
|
+
outputsChanged: z.boolean(),
|
|
15
|
+
layoutOnly: z.boolean(),
|
|
16
|
+
titleChange: z.object({ from: z.string(), to: z.string() }).optional(),
|
|
17
|
+
descriptionChanged: z.boolean(),
|
|
18
|
+
tagsChanged: z.boolean(),
|
|
19
|
+
});
|
|
20
|
+
export const updatedWorkflowSchema = {
|
|
21
|
+
...savedWorkflowSchema,
|
|
22
|
+
reviewReset: z.boolean(),
|
|
23
|
+
contentsChanged: z.boolean(),
|
|
24
|
+
unchanged: z.boolean(),
|
|
25
|
+
discarded: z.array(z.string()).optional()
|
|
26
|
+
.describe('With unchanged: Start field changes Wiro does not keep, because it saves Start fields the way the wiro.ai editor writes them.'),
|
|
27
|
+
preview: z.boolean().optional(),
|
|
28
|
+
changes: workflowChangesSchema.optional(),
|
|
29
|
+
};
|
|
30
|
+
/** Markdown for an update or its preview. */
|
|
31
|
+
export function formatUpdatedWorkflow(saved, heading) {
|
|
32
|
+
const lines = [heading, ''];
|
|
33
|
+
lines.push(`**Title:** ${saved.title}`);
|
|
34
|
+
lines.push(`**Slug:** \`${saved.fullSlug}\``);
|
|
35
|
+
if (saved.unchanged) {
|
|
36
|
+
lines.push('', saved.discarded?.length
|
|
37
|
+
? `Wiro saves Start fields the way the wiro.ai editor writes them, so your change to ${saved.discarded.join(', ')} `
|
|
38
|
+
+ 'is not kept. Nothing else changed, so nothing was saved. Put guidance for people in '
|
|
39
|
+
+ 'the workflow description.'
|
|
40
|
+
: 'The workflow already matches this change, so nothing was saved.');
|
|
41
|
+
}
|
|
42
|
+
if (saved.changes) {
|
|
43
|
+
lines.push('', saved.preview ? '### What will change' : '### What changed', '', ...formatWorkflowChanges(saved.changes));
|
|
44
|
+
}
|
|
45
|
+
if (saved.preview) {
|
|
46
|
+
lines.push('', 'Nothing is saved yet. The new steps replace the current ones and there is no undo.'
|
|
47
|
+
+ (saved.reviewReset ? ' The workflow is published, so saving takes it out of the gallery until Wiro reviews it again.' : ''));
|
|
48
|
+
}
|
|
49
|
+
else if (saved.reviewReset) {
|
|
50
|
+
lines.push('', 'The workflow left the public gallery and is waiting for review again.');
|
|
51
|
+
}
|
|
52
|
+
if (!saved.preview && saved.updatetime) {
|
|
53
|
+
lines.push('', `**updatetime:** \`${saved.updatetime}\` (pass it as loaded_updatetime next time)`);
|
|
54
|
+
}
|
|
55
|
+
if (saved.contentsChanged)
|
|
56
|
+
lines.push('', '### Inputs', '', ...formatWorkflowInputs(saved.inputs));
|
|
57
|
+
if (saved.warnings.length > 0) {
|
|
58
|
+
lines.push('', '### Notes', '', ...saved.warnings.map(warning => `- ${warning.nodeId ? `\`${warning.nodeId}\`: ` : ''}${warning.message}`));
|
|
59
|
+
}
|
|
60
|
+
return lines.join('\n');
|
|
61
|
+
}
|
|
62
|
+
export function registerUpdateWorkflow(server, client) {
|
|
63
|
+
server.registerTool('update_workflow', {
|
|
64
|
+
title: 'Update a Wiro workflow',
|
|
65
|
+
description: 'Change a workflow you own (or your team owns): title, description, tags '
|
|
66
|
+
+ 'and/or its whole step graph. Read it with get_workflow first and send the full '
|
|
67
|
+
+ 'edited `contents`, plus that call\'s `updatetime` as `loaded_updatetime` so a '
|
|
68
|
+
+ 'newer save by someone else is not overwritten. Leave metadata.input.values out to '
|
|
69
|
+
+ 'keep the saved input values; a value shown as [hidden] is restored from the saved '
|
|
70
|
+
+ 'workflow. Everyone who can open the workflow can read its saved values, so never '
|
|
71
|
+
+ 'save a key or password in one. Wiro checks and prepares the new graph like '
|
|
72
|
+
+ 'create_workflow, with the same 40 KB limit on the new graph, also when the saved workflow '
|
|
73
|
+
+ 'is larger (removing steps can bring it under). Replacing the steps cannot be undone: without `confirm: true` '
|
|
74
|
+
+ 'the call checks the new graph, reports any problems and the defaults it filled, and '
|
|
75
|
+
+ 'returns what would change, saving nothing; show it to the user and repeat the call '
|
|
76
|
+
+ 'with `confirm: true` after they agree. Editing a published workflow takes it out of '
|
|
77
|
+
+ 'the public gallery until Wiro reviews it again, so that also needs '
|
|
78
|
+
+ '`acknowledge_review_reset: true`.',
|
|
79
|
+
inputSchema: {
|
|
80
|
+
slug: z.string().min(1).describe('The full workflow slug or the workflow page URL.'),
|
|
81
|
+
title: z.string().trim().min(1).max(160).optional().describe('New title.'),
|
|
82
|
+
description: z.string().min(1).max(1000).optional().describe('New description, 1 to 1000 characters.'),
|
|
83
|
+
tags: z.array(z.string()).max(20).optional().describe('Replaces the tags.'),
|
|
84
|
+
contents: workflowContentsInputSchema.optional(),
|
|
85
|
+
loaded_updatetime: z.string().optional()
|
|
86
|
+
.describe('The `updatetime` from get_workflow (or the last update). Protects against overwriting newer changes.'),
|
|
87
|
+
confirm: z.boolean().default(false)
|
|
88
|
+
.describe('Required to save new `contents`, after the user approved the change summary.'),
|
|
89
|
+
force: z.boolean().default(false)
|
|
90
|
+
.describe('Overwrite a newer version. Only when the user explicitly wants that.'),
|
|
91
|
+
acknowledge_review_reset: z.boolean().default(false)
|
|
92
|
+
.describe('Required to edit a published workflow, after the user agreed it leaves the gallery until reviewed.'),
|
|
93
|
+
},
|
|
94
|
+
outputSchema: updatedWorkflowSchema,
|
|
95
|
+
annotations: {
|
|
96
|
+
readOnlyHint: false,
|
|
97
|
+
destructiveHint: true,
|
|
98
|
+
idempotentHint: false,
|
|
99
|
+
openWorldHint: true,
|
|
100
|
+
},
|
|
101
|
+
}, async (args, extra) => {
|
|
102
|
+
try {
|
|
103
|
+
const problem = args.tags ? tagProblem(args.tags) : null;
|
|
104
|
+
if (problem)
|
|
105
|
+
throw new Error(problem);
|
|
106
|
+
if (!args.title && !args.description && !args.tags && !args.contents) {
|
|
107
|
+
throw new Error('Nothing to change. Pass title, description, tags or contents.');
|
|
108
|
+
}
|
|
109
|
+
const fullSlug = parseWorkflowSlug(args.slug);
|
|
110
|
+
const saved = await updateWorkflow(client, {
|
|
111
|
+
fullSlug,
|
|
112
|
+
title: args.title,
|
|
113
|
+
description: args.description,
|
|
114
|
+
tags: args.tags,
|
|
115
|
+
contents: args.contents,
|
|
116
|
+
loadedUpdatetime: args.loaded_updatetime,
|
|
117
|
+
force: args.force,
|
|
118
|
+
acknowledgeReviewReset: args.acknowledge_review_reset,
|
|
119
|
+
preview: Boolean(args.contents) && !args.confirm,
|
|
120
|
+
}, extra.signal);
|
|
121
|
+
if (saved.preview) {
|
|
122
|
+
return {
|
|
123
|
+
content: [{ type: 'text', text: formatUpdatedWorkflow(saved, '## Review the change before saving') }],
|
|
124
|
+
structuredContent: {
|
|
125
|
+
...saved,
|
|
126
|
+
nextAction: {
|
|
127
|
+
tool: 'update_workflow',
|
|
128
|
+
arguments: {
|
|
129
|
+
slug: fullSlug,
|
|
130
|
+
...(args.title ? { title: args.title } : {}),
|
|
131
|
+
...(args.description ? { description: args.description } : {}),
|
|
132
|
+
...(args.tags ? { tags: args.tags } : {}),
|
|
133
|
+
contents: args.contents,
|
|
134
|
+
...(saved.updatetime ? { loaded_updatetime: args.loaded_updatetime ?? saved.updatetime } : {}),
|
|
135
|
+
confirm: true,
|
|
136
|
+
...(args.force ? { force: true } : {}),
|
|
137
|
+
...(saved.reviewReset ? { acknowledge_review_reset: true } : {}),
|
|
138
|
+
},
|
|
139
|
+
reason: 'Show the user what will change and save only after they agree.',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const heading = saved.unchanged ? (saved.discarded ? '## Nothing saved' : '## No change needed') : '## Workflow updated';
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: 'text', text: formatUpdatedWorkflow(saved, heading) }],
|
|
147
|
+
structuredContent: { ...saved },
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (error instanceof WorkflowPrepareError) {
|
|
152
|
+
return { content: [{ type: 'text', text: prepareIssuesText(error) }], isError: true };
|
|
153
|
+
}
|
|
154
|
+
if (error instanceof WorkflowConflictError) {
|
|
155
|
+
return {
|
|
156
|
+
content: [{
|
|
157
|
+
type: 'text',
|
|
158
|
+
text: `## Not saved: newer changes exist\n\n${error.message}`
|
|
159
|
+
+ (error.currentUpdatetime ? `\n\nCurrent updatetime: \`${error.currentUpdatetime}\`` : ''),
|
|
160
|
+
}],
|
|
161
|
+
isError: true,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return errorResult(error);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=update-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-workflow.js","sourceRoot":"","sources":["../../src/tools/update-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-file.d.ts","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"upload-file.d.ts","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkF9E"}
|
|
@@ -5,9 +5,11 @@ import { uploadedFileOutputSchema } from './schemas.js';
|
|
|
5
5
|
export function registerUploadFile(server, client) {
|
|
6
6
|
server.registerTool('upload_file', {
|
|
7
7
|
title: 'Upload a file to Wiro',
|
|
8
|
-
description: '
|
|
9
|
-
+ '
|
|
10
|
-
+ '
|
|
8
|
+
description: 'Copy a file from a public http(s) URL to Wiro, up to about 100 MB, '
|
|
9
|
+
+ 'and get a Wiro link back. Model file fields take public URLs directly, so use '
|
|
10
|
+
+ 'this only when the same file feeds several runs. Single files only, not .zip '
|
|
11
|
+
+ 'archives. A file that is only attached in the chat has no URL: ask the user for '
|
|
12
|
+
+ 'a public link.',
|
|
11
13
|
inputSchema: {
|
|
12
14
|
url: z.string().url().describe('URL of the file to upload (image, audio, video, or document).'),
|
|
13
15
|
file_name: z.string().optional().describe('Optional filename. Defaults to the URL filename.'),
|
|
@@ -31,11 +33,14 @@ export function registerUploadFile(server, client) {
|
|
|
31
33
|
}
|
|
32
34
|
const file = result.list[0];
|
|
33
35
|
if (!file.url) {
|
|
36
|
+
// An archive is stored as a folder of its files, which has no link.
|
|
37
|
+
const text = file.contenttype === 'folder'
|
|
38
|
+
? `## Error\n\nThe archive was unpacked into the folder "${file.name}" in your Wiro files, `
|
|
39
|
+
+ 'so there is no single link for it. Do not upload it again. Pass the archive\'s '
|
|
40
|
+
+ 'public URL to the model directly, or upload its files one at a time.'
|
|
41
|
+
: '## Error\n\nUpload succeeded but no reusable file URL was returned.';
|
|
34
42
|
return {
|
|
35
|
-
content: [{
|
|
36
|
-
type: 'text',
|
|
37
|
-
text: '## Error\n\nUpload succeeded but no reusable file URL was returned.',
|
|
38
|
-
}],
|
|
43
|
+
content: [{ type: 'text', text }],
|
|
39
44
|
isError: true,
|
|
40
45
|
};
|
|
41
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-file.js","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAkB;IACtE,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"upload-file.js","sourceRoot":"","sources":["../../src/tools/upload-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait-for-task.d.ts","sourceRoot":"","sources":["../../src/tools/wait-for-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"wait-for-task.d.ts","sourceRoot":"","sources":["../../src/tools/wait-for-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AActB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkJ/E"}
|