@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,242 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ApiResultError, asString, errorResult, isPlainObject, requireApiSuccess, } from '../utils/api.js';
|
|
3
|
+
import { credentialSetupSchema, isPlatformCredentialKey, skillSummarySchema, toCredentialSetup, toSkillSummary, } from '../utils/agent-catalog.js';
|
|
4
|
+
import { connectionModeRequirements, parseCredentialMeta, } from '../utils/agent-config.js';
|
|
5
|
+
import { formatUsd, toStringArray } from '../utils/user-agent.js';
|
|
6
|
+
import { nextActionSchema } from './schemas.js';
|
|
7
|
+
const PRICING_NOTE = 'A custom build costs the sum of its skills\' monthly prices, including the skills they '
|
|
8
|
+
+ 'depend on, and Starter has a minimum monthly price. Pro is a fixed multiple of Starter. deploy_agent '
|
|
9
|
+
+ 'returns the exact quote before anything is charged.';
|
|
10
|
+
const channelSchema = z.object({
|
|
11
|
+
id: z.string(),
|
|
12
|
+
title: z.string(),
|
|
13
|
+
credentialKey: z.string(),
|
|
14
|
+
requiredFields: z.array(z.string()),
|
|
15
|
+
});
|
|
16
|
+
async function readCredential(client, key, signal) {
|
|
17
|
+
const body = await client.post('/Credentials/Detail', { key }, signal);
|
|
18
|
+
return body?.result === true && isPlainObject(body.credential) ? body.credential : null;
|
|
19
|
+
}
|
|
20
|
+
function toChannels(value) {
|
|
21
|
+
if (!Array.isArray(value))
|
|
22
|
+
return [];
|
|
23
|
+
return value.filter(isPlainObject).map(channel => {
|
|
24
|
+
const id = asString(channel.id) ?? '';
|
|
25
|
+
return {
|
|
26
|
+
id,
|
|
27
|
+
title: asString(channel.title) ?? id,
|
|
28
|
+
credentialKey: asString(channel.credential_key) ?? id,
|
|
29
|
+
requiredFields: toStringArray(channel.required_fields),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function skillLine(skill) {
|
|
34
|
+
const price = skill.monthlyPriceUsd > 0 ? `${formatUsd(skill.monthlyPriceUsd)} per month` : 'free';
|
|
35
|
+
const credential = skill.requiresCredentials && skill.credentialKey ? `, needs \`${skill.credentialKey}\`` : '';
|
|
36
|
+
const deprecated = skill.deprecated ? `, deprecated${skill.replacement ? ` (use ${skill.replacement})` : ''}` : '';
|
|
37
|
+
return `- **${skill.title}** (\`${skill.name}\`): ${price}${credential}${deprecated}${skill.description ? `. ${skill.description}` : ''}`;
|
|
38
|
+
}
|
|
39
|
+
function toCredentialEntry(credential, role) {
|
|
40
|
+
return {
|
|
41
|
+
setup: toCredentialSetup(credential, role),
|
|
42
|
+
modes: connectionModeRequirements(parseCredentialMeta(credential), null).filter(mode => mode.available),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** The keys of a list's entries, one line each, with a list inside an entry indented below it. */
|
|
46
|
+
function entryLines(items, depth) {
|
|
47
|
+
return items.flatMap(item => {
|
|
48
|
+
const notes = [
|
|
49
|
+
item.required === undefined ? undefined : item.required ? 'required' : 'optional',
|
|
50
|
+
item.type,
|
|
51
|
+
item.options ? `one of: ${item.options.map(option => option.value || '(empty)').join(', ')}` : undefined,
|
|
52
|
+
].filter(Boolean).join(', ');
|
|
53
|
+
const help = item.help ? `: ${item.help.replace(/\n/g, ' ')}` : '';
|
|
54
|
+
const indent = ' '.repeat(depth);
|
|
55
|
+
return [
|
|
56
|
+
`${indent}- **${item.label ?? item.key}** (\`${item.key}\`${notes ? `, ${notes}` : ''})${help}`,
|
|
57
|
+
...(item.itemFields ? [`${indent} Each entry:`, ...entryLines(item.itemFields, depth + 1)] : []),
|
|
58
|
+
];
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function setupLines({ setup: credential, modes }) {
|
|
62
|
+
const lines = [`### ${credential.title} (\`${credential.key}\`, ${credential.role})`, ''];
|
|
63
|
+
if (credential.oauth && modes.length > 0) {
|
|
64
|
+
lines.push('How it connects (connect_agent_oauth or set_agent_credentials):');
|
|
65
|
+
for (const mode of modes) {
|
|
66
|
+
lines.push(`- **${mode.mode}**: ${mode.note}${mode.fields.length > 0 ? ` Fields: ${mode.fields.map(field => field.field).join(', ')}.` : ''}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
}
|
|
70
|
+
if (credential.note)
|
|
71
|
+
lines.push(credential.note);
|
|
72
|
+
if (credential.channel) {
|
|
73
|
+
lines.push(`Chat channel \`${credential.channel.id}\`: it turns on once ${credential.channel.requiredFields.join(', ')} are filled.`);
|
|
74
|
+
}
|
|
75
|
+
for (const field of credential.fields.filter(item => item.writable)) {
|
|
76
|
+
const notes = [
|
|
77
|
+
field.required ? 'required' : 'optional',
|
|
78
|
+
field.type,
|
|
79
|
+
field.secret ? 'secret' : undefined,
|
|
80
|
+
field.onlyInModes ? `only for ${field.onlyInModes.join('/')} mode` : undefined,
|
|
81
|
+
].filter(Boolean).join(', ');
|
|
82
|
+
lines.push(`- **${field.label}** (\`${field.key}\`, ${notes})`);
|
|
83
|
+
if (field.help)
|
|
84
|
+
lines.push(` ${field.help.replace(/\n/g, ' ')}`);
|
|
85
|
+
if (field.itemFields)
|
|
86
|
+
lines.push(' Each entry:', ...entryLines(field.itemFields, 1));
|
|
87
|
+
}
|
|
88
|
+
return lines;
|
|
89
|
+
}
|
|
90
|
+
export function registerListAgentSkills(server, client) {
|
|
91
|
+
server.registerTool('list_agent_skills', {
|
|
92
|
+
title: 'List Wiro agent skills',
|
|
93
|
+
description: 'List the skills a Wiro agent can have, with their monthly price, the skills they depend '
|
|
94
|
+
+ 'on and the credential each one needs. Use it to plan a custom build for deploy_agent or a skill '
|
|
95
|
+
+ 'change for apply_agent_skills. Without `name` it lists every skill with its title and price: look '
|
|
96
|
+
+ 'there for the service the user named (apply_agent_skills also answers an unknown name with close '
|
|
97
|
+
+ 'matches). Pass `name` with a skill name (or a credential or channel key such '
|
|
98
|
+
+ 'as "telegram") to get the exact fields the user must provide, with their labels, formats and setup '
|
|
99
|
+
+ 'help, so you know what to ask for before calling set_agent_credentials or connect_agent_oauth.',
|
|
100
|
+
inputSchema: {
|
|
101
|
+
name: z.string().min(1).max(100).optional()
|
|
102
|
+
.describe('A skill name (for example "int-gmail-check") returns its price and the setup fields of every credential it needs. A credential or channel key (for example "telegram") returns that credential\'s setup and the ways it can connect.'),
|
|
103
|
+
category: z.enum(['int', 'util']).optional()
|
|
104
|
+
.describe('"int" for skills that connect to an outside service, "util" for helper skills.'),
|
|
105
|
+
capability: z.string().max(100).optional()
|
|
106
|
+
.describe('Only skills with this capability, for example "image_generation". include_capabilities lists the names.'),
|
|
107
|
+
include_capabilities: z.boolean().default(false)
|
|
108
|
+
.describe('Also return the list of capability names with descriptions.'),
|
|
109
|
+
include_deprecated: z.boolean().default(false)
|
|
110
|
+
.describe('Also return deprecated skills.'),
|
|
111
|
+
},
|
|
112
|
+
outputSchema: {
|
|
113
|
+
skills: z.array(skillSummarySchema),
|
|
114
|
+
channels: z.array(channelSchema),
|
|
115
|
+
total: z.number().int().nonnegative(),
|
|
116
|
+
capabilities: z.array(z.object({ name: z.string(), description: z.string().optional() })).optional(),
|
|
117
|
+
setup: z.object({ credentials: z.array(credentialSetupSchema) }).optional(),
|
|
118
|
+
pricingNote: z.string(),
|
|
119
|
+
nextAction: nextActionSchema.optional(),
|
|
120
|
+
},
|
|
121
|
+
annotations: {
|
|
122
|
+
readOnlyHint: true,
|
|
123
|
+
destructiveHint: false,
|
|
124
|
+
idempotentHint: true,
|
|
125
|
+
openWorldHint: true,
|
|
126
|
+
},
|
|
127
|
+
}, async ({ name, category, capability, include_capabilities, include_deprecated }, extra) => {
|
|
128
|
+
try {
|
|
129
|
+
let capabilities;
|
|
130
|
+
if (include_capabilities) {
|
|
131
|
+
const body = requireApiSuccess(await client.post('/Skills/Capabilities', {}, extra.signal), 'The capability list could not be read.');
|
|
132
|
+
capabilities = (Array.isArray(body.capabilities) ? body.capabilities : [])
|
|
133
|
+
.filter(isPlainObject)
|
|
134
|
+
.flatMap(item => {
|
|
135
|
+
const capabilityName = asString(item.name);
|
|
136
|
+
const description = asString(item.description);
|
|
137
|
+
return capabilityName ? [{ name: capabilityName, ...(description ? { description } : {}) }] : [];
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
if (name) {
|
|
141
|
+
const key = name.trim();
|
|
142
|
+
const detail = await client.post('/Skills/Detail', { name: key }, extra.signal);
|
|
143
|
+
let skills = [];
|
|
144
|
+
const credentials = [];
|
|
145
|
+
if (detail?.result === true && isPlainObject(detail.skill)) {
|
|
146
|
+
const skill = toSkillSummary(detail.skill);
|
|
147
|
+
skills = [skill];
|
|
148
|
+
const keys = skill.requiresCredentials
|
|
149
|
+
? [
|
|
150
|
+
...(skill.credentialKey ? [{ key: skill.credentialKey, role: 'primary' }] : []),
|
|
151
|
+
...(skill.additionalCredentialKeys ?? []).map(extraKey => ({ key: extraKey, role: 'additional' })),
|
|
152
|
+
]
|
|
153
|
+
: [];
|
|
154
|
+
for (const entry of keys) {
|
|
155
|
+
if (isPlatformCredentialKey(entry.key))
|
|
156
|
+
continue;
|
|
157
|
+
const credential = await readCredential(client, entry.key, extra.signal);
|
|
158
|
+
if (credential)
|
|
159
|
+
credentials.push(toCredentialEntry(credential, entry.role));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const credential = await readCredential(client, key, extra.signal);
|
|
164
|
+
if (!credential || isPlatformCredentialKey(key)) {
|
|
165
|
+
throw new ApiResultError(`No skill or credential is named "${key}". Call list_agent_skills without name to see every skill.`, [404], {});
|
|
166
|
+
}
|
|
167
|
+
credentials.push(toCredentialEntry(credential, 'credential'));
|
|
168
|
+
}
|
|
169
|
+
const lines = [];
|
|
170
|
+
for (const skill of skills)
|
|
171
|
+
lines.push(`## Skill`, '', skillLine(skill));
|
|
172
|
+
if (skills[0]?.dependsOn.length)
|
|
173
|
+
lines.push('', `Also enables: ${skills[0].dependsOn.join(', ')}`);
|
|
174
|
+
if (skills[0] && !skills[0].requiresCredentials)
|
|
175
|
+
lines.push('', 'This skill needs no credentials.');
|
|
176
|
+
for (const credential of credentials)
|
|
177
|
+
lines.push('', ...setupLines(credential));
|
|
178
|
+
lines.push('', PRICING_NOTE);
|
|
179
|
+
return {
|
|
180
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
181
|
+
structuredContent: {
|
|
182
|
+
skills,
|
|
183
|
+
channels: [],
|
|
184
|
+
total: skills.length,
|
|
185
|
+
...(capabilities ? { capabilities } : {}),
|
|
186
|
+
setup: { credentials: credentials.map(entry => entry.setup) },
|
|
187
|
+
pricingNote: PRICING_NOTE,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const body = requireApiSuccess(await client.post('/Skills/List', {
|
|
192
|
+
...(category ? { category } : {}),
|
|
193
|
+
...(capability?.trim() ? { capability: capability.trim() } : {}),
|
|
194
|
+
}, extra.signal), 'The skill list could not be read.');
|
|
195
|
+
const skills = (Array.isArray(body.skills) ? body.skills : [])
|
|
196
|
+
.filter(isPlainObject)
|
|
197
|
+
.map(toSkillSummary)
|
|
198
|
+
.filter(skill => skill.name && (include_deprecated || !skill.deprecated));
|
|
199
|
+
const channels = toChannels(body.channels);
|
|
200
|
+
const lines = [`## Agent skills (${skills.length})`, ''];
|
|
201
|
+
if (skills.length === 0)
|
|
202
|
+
lines.push('No skills matched.');
|
|
203
|
+
for (const skill of skills)
|
|
204
|
+
lines.push(skillLine(skill));
|
|
205
|
+
if (channels.length > 0) {
|
|
206
|
+
lines.push('', '### Chat channels', '', 'Channels are not skills. Each one turns on once its required fields are set with set_agent_credentials.');
|
|
207
|
+
for (const channel of channels)
|
|
208
|
+
lines.push(`- ${channel.title} (\`${channel.credentialKey}\`): ${channel.requiredFields.join(', ')}`);
|
|
209
|
+
}
|
|
210
|
+
if (capabilities?.length) {
|
|
211
|
+
lines.push('', '### Capabilities', '');
|
|
212
|
+
for (const item of capabilities)
|
|
213
|
+
lines.push(`- \`${item.name}\`${item.description ? `: ${item.description}` : ''}`);
|
|
214
|
+
}
|
|
215
|
+
lines.push('', PRICING_NOTE);
|
|
216
|
+
const firstWithCredentials = skills.find(skill => skill.requiresCredentials);
|
|
217
|
+
return {
|
|
218
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
219
|
+
structuredContent: {
|
|
220
|
+
skills,
|
|
221
|
+
channels,
|
|
222
|
+
total: skills.length,
|
|
223
|
+
...(capabilities ? { capabilities } : {}),
|
|
224
|
+
pricingNote: PRICING_NOTE,
|
|
225
|
+
...(firstWithCredentials
|
|
226
|
+
? {
|
|
227
|
+
nextAction: {
|
|
228
|
+
tool: 'list_agent_skills',
|
|
229
|
+
arguments: { name: firstWithCredentials.name },
|
|
230
|
+
reason: 'See exactly which credential fields a skill needs before choosing it.',
|
|
231
|
+
},
|
|
232
|
+
}
|
|
233
|
+
: {}),
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
return errorResult(error);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=list-agent-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-agent-skills.js","sourceRoot":"","sources":["../../src/tools/list-agent-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { WiroClient } from '../client.js';
|
|
3
|
+
export declare function registerListAgentTemplates(server: McpServer, client: WiroClient): void;
|
|
4
|
+
//# sourceMappingURL=list-agent-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-agent-templates.d.ts","sourceRoot":"","sources":["../../src/tools/list-agent-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB/C,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA+FtF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, isPlainObject, requireApiSuccess, toNumber } from '../utils/api.js';
|
|
3
|
+
import { templateSummarySchema, toTemplateSummary } from '../utils/agent-catalog.js';
|
|
4
|
+
import { formatCredits, formatUsd } from '../utils/user-agent.js';
|
|
5
|
+
import { nextActionSchema } from './schemas.js';
|
|
6
|
+
const SORTS = {
|
|
7
|
+
newest: { sort: 'id', order: 'DESC' },
|
|
8
|
+
popular: { sort: 'totalrun', order: 'DESC' },
|
|
9
|
+
title: { sort: 'title', order: 'ASC' },
|
|
10
|
+
};
|
|
11
|
+
function priceLine(template) {
|
|
12
|
+
if (!template.pricing)
|
|
13
|
+
return 'pricing unavailable';
|
|
14
|
+
const { starter, pro } = template.pricing;
|
|
15
|
+
return `Starter ${formatUsd(starter.priceUsd)} (${formatCredits(starter.monthlyCredits)} credits), `
|
|
16
|
+
+ `Pro ${formatUsd(pro.priceUsd)} (${formatCredits(pro.monthlyCredits)} credits) per 30 days`;
|
|
17
|
+
}
|
|
18
|
+
export function registerListAgentTemplates(server, client) {
|
|
19
|
+
server.registerTool('list_agent_templates', {
|
|
20
|
+
title: 'List Wiro agent templates',
|
|
21
|
+
description: 'Browse the catalog of ready-made Wiro agents (templates) that deploy_agent can deploy. '
|
|
22
|
+
+ 'Each template shows its Starter and Pro price in USD per 30 days and the monthly credit pool '
|
|
23
|
+
+ 'that pays for the agent\'s chat and scheduled tasks (100 credits = 1 USD); model runs it starts, for '
|
|
24
|
+
+ 'images, videos or voice calls, are billed to the wallet of the Wiro API key saved on the agent. '
|
|
25
|
+
+ 'A template whose pricing is null '
|
|
26
|
+
+ 'cannot be priced right now: do not quote or deploy it. Call get_agent_template next for the '
|
|
27
|
+
+ 'skills, the credentials the user must provide and the exact prices. To build an agent from '
|
|
28
|
+
+ 'individual skills instead, use list_agent_skills. get_playbook describes the whole flow from '
|
|
29
|
+
+ 'choosing a template to a running agent.',
|
|
30
|
+
inputSchema: {
|
|
31
|
+
search: z.string().max(200).optional()
|
|
32
|
+
.describe('Words to look for in the title, description, slug and categories, for example "instagram". Results are sorted by relevance when set.'),
|
|
33
|
+
category: z.string().max(200).optional()
|
|
34
|
+
.describe('Category filter, for example "social-media". Separate several categories with commas.'),
|
|
35
|
+
sort: z.enum(['newest', 'popular', 'title']).default('newest')
|
|
36
|
+
.describe('Order when no search is given: newest first, most deployed first, or by title.'),
|
|
37
|
+
start: z.number().int().min(0).default(0)
|
|
38
|
+
.describe('Pagination offset (default 0).'),
|
|
39
|
+
limit: z.number().int().min(1).max(100).default(20)
|
|
40
|
+
.describe('Maximum templates to return (default 20, max 100).'),
|
|
41
|
+
},
|
|
42
|
+
outputSchema: {
|
|
43
|
+
templates: z.array(templateSummarySchema),
|
|
44
|
+
total: z.number().int().nonnegative(),
|
|
45
|
+
start: z.number().int().nonnegative(),
|
|
46
|
+
limit: z.number().int().positive(),
|
|
47
|
+
nextStart: z.number().int().nonnegative().nullable(),
|
|
48
|
+
nextAction: nextActionSchema.optional(),
|
|
49
|
+
},
|
|
50
|
+
annotations: {
|
|
51
|
+
readOnlyHint: true,
|
|
52
|
+
destructiveHint: false,
|
|
53
|
+
idempotentHint: true,
|
|
54
|
+
openWorldHint: true,
|
|
55
|
+
},
|
|
56
|
+
}, async ({ search, category, sort, start, limit }, extra) => {
|
|
57
|
+
try {
|
|
58
|
+
const order = SORTS[sort];
|
|
59
|
+
const body = requireApiSuccess(await client.post('/Agent/List', {
|
|
60
|
+
...(search?.trim() ? { search: search.trim() } : {}),
|
|
61
|
+
...(category?.trim() ? { category: category.trim() } : {}),
|
|
62
|
+
sort: order.sort,
|
|
63
|
+
order: order.order,
|
|
64
|
+
start,
|
|
65
|
+
limit,
|
|
66
|
+
}, extra.signal), 'The agent catalog could not be read.');
|
|
67
|
+
const rows = Array.isArray(body.agents) ? body.agents.filter(isPlainObject) : [];
|
|
68
|
+
const templates = rows.map(toTemplateSummary).filter(template => template.guid && template.slug);
|
|
69
|
+
const total = Math.max(0, Math.trunc(toNumber(body.total) ?? templates.length));
|
|
70
|
+
const nextStart = start + rows.length < total ? start + rows.length : null;
|
|
71
|
+
const first = templates[0];
|
|
72
|
+
const range = rows.length > 0 ? `${start + 1}-${start + rows.length} of ${total}` : `none of ${total}`;
|
|
73
|
+
const lines = [`## Agent templates (${range})`, ''];
|
|
74
|
+
if (templates.length === 0)
|
|
75
|
+
lines.push('No templates matched.');
|
|
76
|
+
for (const template of templates) {
|
|
77
|
+
lines.push(`- **${template.title}** (\`${template.slug}\`): ${priceLine(template)}`);
|
|
78
|
+
if (template.summary)
|
|
79
|
+
lines.push(` ${template.summary}`);
|
|
80
|
+
}
|
|
81
|
+
if (nextStart !== null)
|
|
82
|
+
lines.push('', `More templates: call list_agent_templates with start ${nextStart}.`);
|
|
83
|
+
if (first)
|
|
84
|
+
lines.push('', `Next: get_agent_template with template "${first.slug}" shows its skills, required credentials and exact prices.`);
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
87
|
+
structuredContent: {
|
|
88
|
+
templates,
|
|
89
|
+
total,
|
|
90
|
+
start,
|
|
91
|
+
limit,
|
|
92
|
+
nextStart,
|
|
93
|
+
...(first
|
|
94
|
+
? {
|
|
95
|
+
nextAction: {
|
|
96
|
+
tool: 'get_agent_template',
|
|
97
|
+
arguments: { template: first.slug },
|
|
98
|
+
reason: 'Read the skills, required credentials and exact prices before deploying.',
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
: {}),
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return errorResult(error);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=list-agent-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-agent-templates.js","sourceRoot":"","sources":["../../src/tools/list-agent-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-my-agents.d.ts","sourceRoot":"","sources":["../../src/tools/list-my-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB/C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAwFhF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, isPlainObject, requireApiSuccess } from '../utils/api.js';
|
|
3
|
+
import { agentSummarySchema, describeAgentStatus, formatCredits, formatSubscriptionLine, toAgentSummary, } from '../utils/user-agent.js';
|
|
4
|
+
import { isPlainTeamMember } from '../utils/workspace.js';
|
|
5
|
+
import { nextActionSchema } from './schemas.js';
|
|
6
|
+
const SORTS = {
|
|
7
|
+
newest: { sort: 'id', order: 'DESC' },
|
|
8
|
+
oldest: { sort: 'id', order: 'ASC' },
|
|
9
|
+
title: { sort: 'title', order: 'ASC' },
|
|
10
|
+
status: { sort: 'status', order: 'ASC' },
|
|
11
|
+
recently_updated: { sort: 'updatedat', order: 'DESC' },
|
|
12
|
+
};
|
|
13
|
+
export function registerListMyAgents(server, client) {
|
|
14
|
+
server.registerTool('list_my_agents', {
|
|
15
|
+
title: 'List my deployed Wiro agents',
|
|
16
|
+
description: 'List the agents deployed in the connected project\'s workspace (a team project '
|
|
17
|
+
+ 'lists the team\'s agents, a personal project the personal ones). Each row shows the status, '
|
|
18
|
+
+ 'whether setup is still required, the plan and the credit balance. Call get_my_agent with an '
|
|
19
|
+
+ 'agent_guid for the full state, including which credentials are missing.',
|
|
20
|
+
inputSchema: {
|
|
21
|
+
sort: z.enum(['newest', 'oldest', 'title', 'status', 'recently_updated']).default('newest')
|
|
22
|
+
.describe('Order of the list (default newest first).'),
|
|
23
|
+
start: z.number().int().min(0).default(0)
|
|
24
|
+
.describe('Pagination offset (default 0).'),
|
|
25
|
+
limit: z.number().int().min(1).max(50).default(20)
|
|
26
|
+
.describe('Maximum agents to return (default 20, max 50).'),
|
|
27
|
+
},
|
|
28
|
+
outputSchema: {
|
|
29
|
+
agents: z.array(agentSummarySchema),
|
|
30
|
+
start: z.number().int().nonnegative(),
|
|
31
|
+
limit: z.number().int().positive(),
|
|
32
|
+
nextStart: z.number().int().nonnegative().nullable(),
|
|
33
|
+
nextAction: nextActionSchema.optional(),
|
|
34
|
+
},
|
|
35
|
+
annotations: {
|
|
36
|
+
readOnlyHint: true,
|
|
37
|
+
destructiveHint: false,
|
|
38
|
+
idempotentHint: true,
|
|
39
|
+
openWorldHint: true,
|
|
40
|
+
},
|
|
41
|
+
}, async ({ sort, start, limit }, extra) => {
|
|
42
|
+
try {
|
|
43
|
+
const order = SORTS[sort];
|
|
44
|
+
const body = requireApiSuccess(await client.post('/UserAgent/MyAgents', {
|
|
45
|
+
sort: order.sort,
|
|
46
|
+
order: order.order,
|
|
47
|
+
start,
|
|
48
|
+
limit,
|
|
49
|
+
}, extra.signal), 'Your agents could not be listed.');
|
|
50
|
+
const rows = Array.isArray(body.useragents) ? body.useragents.filter(isPlainObject) : [];
|
|
51
|
+
const agents = rows.map(toAgentSummary).filter(agent => agent.guid);
|
|
52
|
+
// One page is read, so a full page means there may be more.
|
|
53
|
+
const nextStart = rows.length >= limit ? start + rows.length : null;
|
|
54
|
+
const first = agents[0];
|
|
55
|
+
// Every listed agent belongs to the connected project's workspace, so one lookup covers the page.
|
|
56
|
+
const plainMember = rows[0] ? await isPlainTeamMember(client, rows[0], extra.signal) : false;
|
|
57
|
+
const lines = [`## My agents (${agents.length})`, ''];
|
|
58
|
+
if (agents.length === 0) {
|
|
59
|
+
lines.push(start === 0
|
|
60
|
+
? 'No agents are deployed in this workspace. list_agent_templates shows what can be deployed.'
|
|
61
|
+
: 'No more agents.');
|
|
62
|
+
}
|
|
63
|
+
for (const agent of agents) {
|
|
64
|
+
lines.push(`- **${agent.title}** (\`${agent.guid}\`): ${describeAgentStatus(agent.status)}${agent.setupRequired ? ', setup required' : ''}; `
|
|
65
|
+
+ `${agent.tier ?? 'no tier'}; ${formatCredits(agent.credits.remaining)} credits left; ${formatSubscriptionLine(agent.subscription, plainMember)}`);
|
|
66
|
+
}
|
|
67
|
+
if (nextStart !== null)
|
|
68
|
+
lines.push('', `More agents may exist: call list_my_agents with start ${nextStart}.`);
|
|
69
|
+
return {
|
|
70
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
71
|
+
structuredContent: {
|
|
72
|
+
agents,
|
|
73
|
+
start,
|
|
74
|
+
limit,
|
|
75
|
+
nextStart,
|
|
76
|
+
...(first
|
|
77
|
+
? {
|
|
78
|
+
nextAction: {
|
|
79
|
+
tool: 'get_my_agent',
|
|
80
|
+
arguments: { agent_guid: first.guid },
|
|
81
|
+
reason: 'Read the full state of an agent, including missing credentials.',
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
: {}),
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return errorResult(error);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=list-my-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-my-agents.js","sourceRoot":"","sources":["../../src/tools/list-my-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-studio-results.d.ts","sourceRoot":"","sources":["../../src/tools/list-studio-results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB/C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA8ErF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult } from '../utils/api.js';
|
|
3
|
+
import { formatStudioRun, readStudioRunPage, STUDIO_RUNS_MAX, studioRunSchema } from '../utils/studio-runs.js';
|
|
4
|
+
import { nextActionSchema } from './schemas.js';
|
|
5
|
+
function parseSince(value) {
|
|
6
|
+
if (value === undefined || value.trim() === '')
|
|
7
|
+
return undefined;
|
|
8
|
+
const text = value.trim();
|
|
9
|
+
let seconds = /^\d+(\.\d+)?$/.test(text) ? Number(text) : Date.parse(text) / 1000;
|
|
10
|
+
// A 13-digit number is a JavaScript timestamp in milliseconds.
|
|
11
|
+
if (seconds > 100_000_000_000)
|
|
12
|
+
seconds /= 1000;
|
|
13
|
+
if (!Number.isFinite(seconds)) {
|
|
14
|
+
throw new Error('since must be an ISO 8601 time such as 2026-01-31T09:00:00Z, or Unix seconds.');
|
|
15
|
+
}
|
|
16
|
+
return Math.floor(seconds);
|
|
17
|
+
}
|
|
18
|
+
export function registerListStudioResults(server, client) {
|
|
19
|
+
server.registerTool('list_studio_results', {
|
|
20
|
+
title: 'List Studio model runs',
|
|
21
|
+
description: 'List the model runs Studio started for this key\'s account (images, videos, audio, text), newest '
|
|
22
|
+
+ 'first, with their status, output URLs, text answers and cost. It covers all of your Studio conversations in '
|
|
23
|
+
+ 'this key\'s workspace; teammates\' runs are not included. Use it to collect outputs that finished after a turn '
|
|
24
|
+
+ 'ended, or to check what is still running. Each run shows when it was created and, for a model that takes a '
|
|
25
|
+
+ 'prompt, its prompt, so it can be matched to a request. These runs belong to Studio, so get_task, list_tasks, '
|
|
26
|
+
+ 'cancel_task and kill_task cannot read or stop them; poll this tool instead. It reads at most Studio\'s 100 most '
|
|
27
|
+
+ 'recent runs: to collect a period, pass since with limit 100, and the result says when older runs in that '
|
|
28
|
+
+ 'period may be missing. Only successful runs are charged. Read-only.',
|
|
29
|
+
inputSchema: {
|
|
30
|
+
limit: z.number().int().min(1).max(100).default(20)
|
|
31
|
+
.describe('How many recent runs to read (1-100, default 20). Filters apply after reading, so fewer can come back.'),
|
|
32
|
+
state: z.enum(['all', 'running', 'completed', 'failed', 'cancelled']).default('all')
|
|
33
|
+
.describe('Only runs in this state (default all).'),
|
|
34
|
+
since: z.string().optional()
|
|
35
|
+
.describe('Only runs created at or after this time: ISO 8601 (2026-01-31T09:00:00Z) or Unix seconds.'),
|
|
36
|
+
},
|
|
37
|
+
outputSchema: {
|
|
38
|
+
runs: z.array(studioRunSchema),
|
|
39
|
+
count: z.number().int().nonnegative(),
|
|
40
|
+
running: z.number().int().nonnegative(),
|
|
41
|
+
mayMissOlder: z.boolean().optional(),
|
|
42
|
+
nextAction: nextActionSchema.optional(),
|
|
43
|
+
},
|
|
44
|
+
annotations: {
|
|
45
|
+
readOnlyHint: true,
|
|
46
|
+
destructiveHint: false,
|
|
47
|
+
idempotentHint: true,
|
|
48
|
+
openWorldHint: true,
|
|
49
|
+
},
|
|
50
|
+
}, async ({ limit, state, since }, extra) => {
|
|
51
|
+
try {
|
|
52
|
+
const from = parseSince(since);
|
|
53
|
+
// Studio returns only its most recent runs, so a full page whose oldest
|
|
54
|
+
// run is newer than since can leave out older runs of that period.
|
|
55
|
+
const page = await readStudioRunPage(client, limit, from === undefined ? {} : { from }, extra.signal);
|
|
56
|
+
const runs = page.runs.filter(run => state === 'all' || run.state === state);
|
|
57
|
+
const running = runs.filter(run => run.state === 'running').length;
|
|
58
|
+
const lines = ['## Studio model runs', ''];
|
|
59
|
+
if (runs.length === 0)
|
|
60
|
+
lines.push('No runs matched.');
|
|
61
|
+
for (const run of runs)
|
|
62
|
+
lines.push(formatStudioRun(run));
|
|
63
|
+
if (running > 0)
|
|
64
|
+
lines.push('', `${running} run(s) still running. Check again in a little while.`);
|
|
65
|
+
if (page.mayMissOlder) {
|
|
66
|
+
lines.push('', limit < STUDIO_RUNS_MAX
|
|
67
|
+
? `Call again with limit ${STUDIO_RUNS_MAX} to see more of that period.`
|
|
68
|
+
: `Studio returns its ${STUDIO_RUNS_MAX} most recent model runs, and the oldest of them is newer than since, `
|
|
69
|
+
+ 'so earlier runs from that period are not in this list.');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
73
|
+
structuredContent: {
|
|
74
|
+
runs,
|
|
75
|
+
count: runs.length,
|
|
76
|
+
running,
|
|
77
|
+
...(page.mayMissOlder ? { mayMissOlder: true } : {}),
|
|
78
|
+
...(running > 0
|
|
79
|
+
? {
|
|
80
|
+
nextAction: {
|
|
81
|
+
tool: 'list_studio_results',
|
|
82
|
+
arguments: { limit, ...(since ? { since } : {}) },
|
|
83
|
+
reason: 'Some runs are still running; call again in a little while to see their outputs.',
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
: {}),
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return errorResult(error);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=list-studio-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-studio-results.js","sourceRoot":"","sources":["../../src/tools/list-studio-results.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/list-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"list-tasks.d.ts","sourceRoot":"","sources":["../../src/tools/list-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkG7E"}
|