@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
|
@@ -1,17 +1,106 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { asString, isPlainObject, toNumber } from '../utils/api.js';
|
|
2
3
|
import { formatModelSchema } from '../utils/format.js';
|
|
3
4
|
import { toStructuredModelDetail } from '../utils/structured.js';
|
|
4
5
|
import { modelDetailOutputSchema } from './schemas.js';
|
|
5
|
-
|
|
6
|
+
const UTILITY_PREFIX = 'workflow-utilities/';
|
|
7
|
+
function optionalNumber(value) {
|
|
8
|
+
const parsed = toNumber(value);
|
|
9
|
+
return parsed === null ? undefined : parsed;
|
|
10
|
+
}
|
|
11
|
+
// Workflow utilities are built-in steps (pick a file from a model's outputs,
|
|
12
|
+
// merge or split text). They are not models, but a workflow author needs the
|
|
13
|
+
// same view of them: parameter ids and the output ports to reference.
|
|
14
|
+
async function getUtilitySchema(client, slug) {
|
|
15
|
+
const result = await client.post('/Workflow/UtilityDetail', { slug });
|
|
16
|
+
const utility = result.result === true ? result.utility?.[0] : undefined;
|
|
17
|
+
if (!utility)
|
|
18
|
+
return null;
|
|
19
|
+
const groups = Array.isArray(utility.parameters) ? utility.parameters.filter(isPlainObject) : [];
|
|
20
|
+
const parameters = groups.map(group => ({
|
|
21
|
+
title: asString(group.title) || 'Parameters',
|
|
22
|
+
items: (Array.isArray(group.items) ? group.items.filter(isPlainObject) : []).map(item => {
|
|
23
|
+
const notes = [
|
|
24
|
+
asString(item.note),
|
|
25
|
+
item.wireOnly === true ? 'Wire only: set it to a reference such as "$node-<id>.outputs".' : undefined,
|
|
26
|
+
item.configOnly === true ? 'Static value only: references are not allowed.' : undefined,
|
|
27
|
+
].filter((note) => Boolean(note))
|
|
28
|
+
.map(note => (/[.!?]$/.test(note) ? note : `${note}.`))
|
|
29
|
+
.join(' ');
|
|
30
|
+
return {
|
|
31
|
+
id: String(item.id ?? ''),
|
|
32
|
+
type: String(item.type ?? 'text'),
|
|
33
|
+
label: asString(item.label) || String(item.id ?? ''),
|
|
34
|
+
...(item.defaultvalue !== undefined && item.defaultvalue !== '' ? { default: String(item.defaultvalue) } : {}),
|
|
35
|
+
required: item.required === true || String(item.required) === 'true',
|
|
36
|
+
...(notes ? { note: notes } : {}),
|
|
37
|
+
options: (Array.isArray(item.options) ? item.options.filter(isPlainObject) : []).map(option => ({
|
|
38
|
+
label: String(option.text ?? option.value ?? ''),
|
|
39
|
+
value: String(option.value ?? ''),
|
|
40
|
+
})),
|
|
41
|
+
...(optionalNumber(item.minvalue) !== undefined ? { min: optionalNumber(item.minvalue) } : {}),
|
|
42
|
+
...(optionalNumber(item.maxvalue) !== undefined ? { max: optionalNumber(item.maxvalue) } : {}),
|
|
43
|
+
...(optionalNumber(item.incrementby) !== undefined ? { step: optionalNumber(item.incrementby) } : {}),
|
|
44
|
+
advanced: item.advanced === true,
|
|
45
|
+
};
|
|
46
|
+
}),
|
|
47
|
+
}));
|
|
48
|
+
const outputs = (Array.isArray(utility.outputs) ? utility.outputs.filter(isPlainObject) : []).map(port => ({
|
|
49
|
+
id: String(port.id ?? ''),
|
|
50
|
+
label: asString(port.label) || String(port.id ?? ''),
|
|
51
|
+
type: asString(port.type) || 'string',
|
|
52
|
+
}));
|
|
53
|
+
const dynamicOutputs = utility.dynamicOutputs === true;
|
|
54
|
+
return {
|
|
55
|
+
model: {
|
|
56
|
+
slug,
|
|
57
|
+
title: asString(utility.title) || slug,
|
|
58
|
+
...(asString(utility.description) ? { description: asString(utility.description) } : {}),
|
|
59
|
+
categories: ['workflow-utility'],
|
|
60
|
+
parameters,
|
|
61
|
+
outputs,
|
|
62
|
+
...(dynamicOutputs ? { dynamicOutputs } : {}),
|
|
63
|
+
},
|
|
64
|
+
nextAction: {
|
|
65
|
+
tool: 'get_playbook',
|
|
66
|
+
arguments: { topics: ['workflow-graph'] },
|
|
67
|
+
reason: 'Utilities are workflow steps, not runnable models. See how to wire them into a workflow.',
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// The workflows group can load this tool without run_model. A model is then
|
|
72
|
+
// only usable as a workflow step, so the result points there instead.
|
|
73
|
+
function workflowStepUsage(text, slug) {
|
|
74
|
+
const usage = text.lastIndexOf('\n### Usage');
|
|
75
|
+
return [
|
|
76
|
+
usage >= 0 ? text.slice(0, usage) : text,
|
|
77
|
+
'',
|
|
78
|
+
'### Usage',
|
|
79
|
+
'',
|
|
80
|
+
`Use this model as a workflow step: \`"type": "run"\`, \`"tool": "${slug}"\`, and the parameter ids above as the keys of \`input\`. \`get_playbook\` with the topic "workflow-graph" shows the full format.`,
|
|
81
|
+
].join('\n');
|
|
82
|
+
}
|
|
83
|
+
export function registerGetModelSchema(server, client, options = {}) {
|
|
84
|
+
const runModel = options.runModel !== false;
|
|
6
85
|
server.registerTool('get_model_schema', {
|
|
7
86
|
title: 'Get a Wiro model schema',
|
|
8
|
-
description:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
87
|
+
description: (runModel
|
|
88
|
+
? 'Get one model’s typed parameters, options, defaults, required '
|
|
89
|
+
+ 'fields, and pricing. Catalog fields such as `session_id` and `previousTaskToken` must be '
|
|
90
|
+
+ 'discovered here: a chat continues with the same `session_id` and the next prompt, and '
|
|
91
|
+
+ '`previousTaskToken` with `toolOutputs` continues a turn that ended with tool calls. Fill required '
|
|
92
|
+
+ 'parameters and follow the returned `run_model` next action once when the user wants a run; '
|
|
93
|
+
+ 'for a price question, the price here is the answer. A price set when the run ends, or turn by '
|
|
94
|
+
+ 'turn in a live session, gives the rates, and the charge is known after the run. "No fixed price" '
|
|
95
|
+
+ 'means the run is charged for the time it takes. '
|
|
96
|
+
: 'Get one model’s typed parameters, options, defaults, required '
|
|
97
|
+
+ 'fields, and pricing, to use the model as a workflow step: its parameter '
|
|
98
|
+
+ 'ids are the keys of the step’s input. ')
|
|
99
|
+
+ 'It also describes the built-in workflow utilities (workflow-utilities/output-filter, '
|
|
100
|
+
+ 'workflow-utilities/merge-text, workflow-utilities/split-text): their parameters and '
|
|
101
|
+
+ 'the output ports other workflow steps reference.',
|
|
13
102
|
inputSchema: {
|
|
14
|
-
model: z.string().describe('Model slug in "owner/model" format, e.g. "
|
|
103
|
+
model: z.string().describe('Model slug in "owner/model" format, e.g. "google/veo3-1", "black-forest-labs/flux-2-pro", or a workflow utility such as "workflow-utilities/output-filter".'),
|
|
15
104
|
},
|
|
16
105
|
outputSchema: modelDetailOutputSchema,
|
|
17
106
|
annotations: {
|
|
@@ -22,6 +111,33 @@ export function registerGetModelSchema(server, client) {
|
|
|
22
111
|
},
|
|
23
112
|
}, async ({ model }) => {
|
|
24
113
|
try {
|
|
114
|
+
if (model.startsWith(UTILITY_PREFIX)) {
|
|
115
|
+
const utility = await getUtilitySchema(client, model);
|
|
116
|
+
if (!utility) {
|
|
117
|
+
return {
|
|
118
|
+
content: [{ type: 'text', text: `Workflow utility "${model}" not found. The built-in utilities are workflow-utilities/output-filter, workflow-utilities/merge-text and workflow-utilities/split-text.` }],
|
|
119
|
+
isError: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const lines = [`## ${utility.model.title} (\`${model}\`)`, ''];
|
|
123
|
+
if (utility.model.description)
|
|
124
|
+
lines.push(utility.model.description, '');
|
|
125
|
+
lines.push('### Parameters', '');
|
|
126
|
+
for (const item of utility.model.parameters.flatMap(group => group.items)) {
|
|
127
|
+
lines.push(`- \`${item.id}\` (${item.type}${item.required ? ', required' : ''})${item.default !== undefined ? ` default ${item.default}` : ''}: ${item.label}${item.note ? `. ${item.note}` : ''}`);
|
|
128
|
+
}
|
|
129
|
+
lines.push('', '### Output ports', '');
|
|
130
|
+
for (const port of utility.model.outputs) {
|
|
131
|
+
lines.push(`- \`${port.id}\` (${port.type}): reference it as \`$node-<step id>.${port.id}\``);
|
|
132
|
+
}
|
|
133
|
+
if (utility.model.dynamicOutputs) {
|
|
134
|
+
lines.push('', 'The number of output ports follows the step\'s `count` parameter.');
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
138
|
+
structuredContent: utility,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
25
141
|
const result = await client.getModelSchema(model);
|
|
26
142
|
const modelData = result.tool?.[0];
|
|
27
143
|
if (!result.result || !modelData) {
|
|
@@ -31,9 +147,23 @@ export function registerGetModelSchema(server, client) {
|
|
|
31
147
|
};
|
|
32
148
|
}
|
|
33
149
|
const text = formatModelSchema(modelData);
|
|
150
|
+
const detail = toStructuredModelDetail(modelData);
|
|
151
|
+
if (!runModel) {
|
|
152
|
+
return {
|
|
153
|
+
content: [{ type: 'text', text: workflowStepUsage(text, detail.model.slug) }],
|
|
154
|
+
structuredContent: {
|
|
155
|
+
...detail,
|
|
156
|
+
nextAction: {
|
|
157
|
+
tool: 'get_playbook',
|
|
158
|
+
arguments: { topics: ['workflow-graph'] },
|
|
159
|
+
reason: 'Use this model as a workflow step; the playbook shows the step format. Running a model on its own needs the models tool group, which is not loaded.',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
34
164
|
return {
|
|
35
165
|
content: [{ type: 'text', text }],
|
|
36
|
-
structuredContent:
|
|
166
|
+
structuredContent: detail,
|
|
37
167
|
};
|
|
38
168
|
}
|
|
39
169
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-model-schema.js","sourceRoot":"","sources":["../../src/tools/get-model-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"get-model-schema.js","sourceRoot":"","sources":["../../src/tools/get-model-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-my-agent.d.ts","sourceRoot":"","sources":["../../src/tools/get-my-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA4B/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAwG9E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult } from '../utils/api.js';
|
|
3
|
+
import { customSkillEntries, resolveExistingCustomSkillKey, textBlock } from '../utils/agent-config.js';
|
|
4
|
+
import { DEFAULT_WAIT_SECONDS, MAX_WAIT_SECONDS } from '../utils/poll.js';
|
|
5
|
+
import { agentDetailSchema, describeAgentStatus, formatAgentDetail, isTransitionalStatus, nextStepForAgent, readAgentDetail, readAgentStatus, settledStatusAdvice, toAgentDetail, waitForAgentToSettle, } from '../utils/user-agent.js';
|
|
6
|
+
import { isPlainTeamMember } from '../utils/workspace.js';
|
|
7
|
+
import { nextActionSchema } from './schemas.js';
|
|
8
|
+
const entrySchema = z.object({
|
|
9
|
+
key: z.string(),
|
|
10
|
+
kind: z.enum(['custom_instruction', 'scheduled_task']),
|
|
11
|
+
description: z.string().optional(),
|
|
12
|
+
enabled: z.boolean(),
|
|
13
|
+
interval: z.string().nullable(),
|
|
14
|
+
text: z.string(),
|
|
15
|
+
});
|
|
16
|
+
export function registerGetMyAgent(server, client) {
|
|
17
|
+
server.registerTool('get_my_agent', {
|
|
18
|
+
title: 'Get a deployed Wiro agent',
|
|
19
|
+
description: 'Read the full state of one deployed agent: status (number and label), plan, its Starter and Pro '
|
|
20
|
+
+ 'prices, credit balance, time zone, skills, chat channels, model settings with the credit rates of the models it can switch to, '
|
|
21
|
+
+ 'scheduled tasks and custom instructions (a long text is shortened; entry adds one entry\'s whole text), and the '
|
|
22
|
+
+ 'state of each credential. Credential values are never returned, only whether each one is filled, '
|
|
23
|
+
+ 'connected or missing. With wait_seconds it keeps reading until the agent is no longer stopping, '
|
|
24
|
+
+ 'queued or starting; when the wait runs out, follow the returned nextAction instead of repeating '
|
|
25
|
+
+ 'the action that started it. Statuses: 0 stopped, 1 stopping, 2 queued, 3 starting, 4 running, '
|
|
26
|
+
+ '5 error, 6 setup required.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
agent_guid: z.string().min(1).max(100)
|
|
29
|
+
.describe('The deployed agent\'s guid, from list_my_agents or deploy_agent.'),
|
|
30
|
+
entry: z.string().min(1).max(80).optional()
|
|
31
|
+
.describe('The key of one custom instruction or scheduled task, such as cs-brand-voice, or its bare name such as brand-voice. Adds that entry\'s whole text, which the list shortens when it is long. Read it before changing the entry with manage_agent_custom_skill.'),
|
|
32
|
+
wait_seconds: z.number().int().min(0).max(MAX_WAIT_SECONDS).default(0)
|
|
33
|
+
.describe('Keep reading for up to this many seconds while the agent is stopping, queued or starting (0 to 600, default 0 for an immediate read). 45 or less is safe for clients with a 60 second tool timeout; follow nextAction to keep waiting.'),
|
|
34
|
+
},
|
|
35
|
+
outputSchema: {
|
|
36
|
+
agent: agentDetailSchema,
|
|
37
|
+
settled: z.boolean(),
|
|
38
|
+
waitedSeconds: z.number().nonnegative().optional(),
|
|
39
|
+
advice: z.string(),
|
|
40
|
+
entry: entrySchema.optional(),
|
|
41
|
+
nextAction: nextActionSchema.optional(),
|
|
42
|
+
},
|
|
43
|
+
annotations: {
|
|
44
|
+
readOnlyHint: true,
|
|
45
|
+
destructiveHint: false,
|
|
46
|
+
idempotentHint: true,
|
|
47
|
+
openWorldHint: true,
|
|
48
|
+
},
|
|
49
|
+
}, async ({ agent_guid, entry, wait_seconds }, extra) => {
|
|
50
|
+
try {
|
|
51
|
+
const guid = agent_guid.trim();
|
|
52
|
+
let row = await readAgentDetail(client, guid, extra.signal);
|
|
53
|
+
let waitedSeconds;
|
|
54
|
+
let settled = !isTransitionalStatus(readAgentStatus(row));
|
|
55
|
+
if (!settled && wait_seconds > 0) {
|
|
56
|
+
const waited = await waitForAgentToSettle(client, guid, wait_seconds, extra, row);
|
|
57
|
+
row = waited.row;
|
|
58
|
+
settled = waited.settled;
|
|
59
|
+
waitedSeconds = Math.round(waited.elapsedMs / 1000);
|
|
60
|
+
}
|
|
61
|
+
const agent = toAgentDetail(row);
|
|
62
|
+
// The list shows the start of a long entry; the row holds its whole text.
|
|
63
|
+
let full;
|
|
64
|
+
if (entry !== undefined) {
|
|
65
|
+
const entries = customSkillEntries(row);
|
|
66
|
+
const resolved = resolveExistingCustomSkillKey(entry, new Set(entries.map(item => item.key)));
|
|
67
|
+
const found = resolved.key ? entries.find(item => item.key === resolved.key) : undefined;
|
|
68
|
+
if (!found) {
|
|
69
|
+
return errorResult(new Error(resolved.error
|
|
70
|
+
?? `This agent has no custom instruction or scheduled task named "${entry}". get_my_agent without entry lists its keys.`));
|
|
71
|
+
}
|
|
72
|
+
full = {
|
|
73
|
+
key: found.key,
|
|
74
|
+
kind: found.kind === 'scheduled_task' ? 'scheduled_task' : 'custom_instruction',
|
|
75
|
+
...(found.description ? { description: found.description } : {}),
|
|
76
|
+
enabled: found.enabled,
|
|
77
|
+
interval: found.interval,
|
|
78
|
+
text: found.value,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const plainMember = await isPlainTeamMember(client, row, extra.signal);
|
|
82
|
+
const advice = settled
|
|
83
|
+
? settledStatusAdvice(agent.status, plainMember, agent)
|
|
84
|
+
: `The agent is still ${describeAgentStatus(agent.status).toLowerCase()}. Call get_my_agent again with wait_seconds to keep waiting.`;
|
|
85
|
+
const nextAction = !settled && wait_seconds > 0
|
|
86
|
+
? {
|
|
87
|
+
tool: 'get_my_agent',
|
|
88
|
+
arguments: { agent_guid: guid, wait_seconds: DEFAULT_WAIT_SECONDS },
|
|
89
|
+
reason: 'The agent has not settled yet. Keep waiting; do not repeat the action that started it.',
|
|
90
|
+
}
|
|
91
|
+
: nextStepForAgent(agent, DEFAULT_WAIT_SECONDS, plainMember);
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: [
|
|
96
|
+
formatAgentDetail(agent, plainMember),
|
|
97
|
+
...(full ? ['', `### \`${full.key}\` in full`, '', ...textBlock(full.text)] : []),
|
|
98
|
+
'',
|
|
99
|
+
advice,
|
|
100
|
+
].join('\n'),
|
|
101
|
+
}],
|
|
102
|
+
structuredContent: {
|
|
103
|
+
agent,
|
|
104
|
+
settled,
|
|
105
|
+
...(waitedSeconds !== undefined ? { waitedSeconds } : {}),
|
|
106
|
+
advice,
|
|
107
|
+
...(full ? { entry: full } : {}),
|
|
108
|
+
...(nextAction ? { nextAction } : {}),
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
return errorResult(error);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=get-my-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-my-agent.js","sourceRoot":"","sources":["../../src/tools/get-my-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-playbook.d.ts","sourceRoot":"","sources":["../../src/tools/get-playbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8C3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PLAYBOOK_SUMMARIES, PLAYBOOK_TITLES, PLAYBOOK_TOPICS, PLAYBOOKS, } from '../playbooks.js';
|
|
3
|
+
const topicSchema = z.enum(PLAYBOOK_TOPICS);
|
|
4
|
+
const topicList = PLAYBOOK_TOPICS
|
|
5
|
+
.map(topic => `${topic} (${PLAYBOOK_SUMMARIES[topic]})`)
|
|
6
|
+
.join('; ');
|
|
7
|
+
export function registerGetPlaybook(server) {
|
|
8
|
+
server.registerTool('get_playbook', {
|
|
9
|
+
title: 'Read a Wiro playbook',
|
|
10
|
+
description: 'Read Wiro playbooks: short guides with the order of calls, '
|
|
11
|
+
+ 'the formats and the money rules for one kind of job. Read the '
|
|
12
|
+
+ 'relevant topic before a multi-step job, such as building or running '
|
|
13
|
+
+ 'a workflow, deploying or setting up an agent, or a Studio session, '
|
|
14
|
+
+ 'and follow it. Each topic is enough for its own job; read getting-started '
|
|
15
|
+
+ `when the route or the workspace is unclear. Topics: ${topicList}. `
|
|
16
|
+
+ 'Several topics can be read in one call.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
topics: z.array(topicSchema).min(1)
|
|
19
|
+
.describe('One or more playbook topics to read, e.g. ["workflows"] or ["agents", "billing"].'),
|
|
20
|
+
},
|
|
21
|
+
outputSchema: {
|
|
22
|
+
topics: z.array(z.object({
|
|
23
|
+
topic: topicSchema,
|
|
24
|
+
title: z.string(),
|
|
25
|
+
markdown: z.string(),
|
|
26
|
+
})),
|
|
27
|
+
},
|
|
28
|
+
annotations: {
|
|
29
|
+
readOnlyHint: true,
|
|
30
|
+
destructiveHint: false,
|
|
31
|
+
idempotentHint: true,
|
|
32
|
+
// The guides ship inside the package; nothing outside the server is read.
|
|
33
|
+
openWorldHint: false,
|
|
34
|
+
},
|
|
35
|
+
}, async ({ topics }) => {
|
|
36
|
+
const entries = [...new Set(topics)].map(topic => ({
|
|
37
|
+
topic,
|
|
38
|
+
title: PLAYBOOK_TITLES[topic],
|
|
39
|
+
markdown: PLAYBOOKS[topic],
|
|
40
|
+
}));
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: entries.map(entry => entry.markdown.trim()).join('\n\n---\n\n'),
|
|
45
|
+
}],
|
|
46
|
+
structuredContent: { topics: entries },
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=get-playbook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-playbook.js","sourceRoot":"","sources":["../../src/tools/get-playbook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAE5C,MAAM,SAAS,GAAG,eAAe;KAC9B,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;KACvD,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,6DAA6D;cACtE,gEAAgE;cAChE,sEAAsE;cACtE,qEAAqE;cACrE,4EAA4E;cAC5E,uDAAuD,SAAS,IAAI;cACpE,yCAAyC;QAC7C,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChC,QAAQ,CAAC,mFAAmF,CAAC;SACjG;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBACvB,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;gBACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACrB,CAAC,CAAC;SACJ;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,0EAA0E;YAC1E,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK;YACL,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC;SAC3B,CAAC,CAAC,CAAC;QACJ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;iBACtE,CAAC;YACF,iBAAiB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SACvC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type WiroClient } from '../client.js';
|
|
3
3
|
export declare function registerGetTaskPrice(server: McpServer, client: WiroClient): void;
|
|
4
4
|
//# sourceMappingURL=get-task-price.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-task-price.d.ts","sourceRoot":"","sources":["../../src/tools/get-task-price.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"get-task-price.d.ts","sourceRoot":"","sources":["../../src/tools/get-task-price.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAc3F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6IhF"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { isTaskId, isTaskIdTooLarge, isTaskNotFound } from '../client.js';
|
|
3
|
+
import { awaitingCharge, cancelledWhileQueued, formatTaskCost, TASK_ID_NOT_NUMERIC, TASK_NOT_FOUND, } from '../utils/format.js';
|
|
2
4
|
import { getTaskState, toStructuredTaskResult, } from '../utils/structured.js';
|
|
3
5
|
import { taskPriceOutputSchema } from './schemas.js';
|
|
4
6
|
export function registerGetTaskPrice(server, client) {
|
|
5
7
|
server.registerTool('get_task_price', {
|
|
6
8
|
title: 'Get a Wiro task price',
|
|
7
|
-
description: 'Get one task’s
|
|
8
|
-
+ '
|
|
9
|
-
+ '
|
|
9
|
+
description: 'Get one task’s cost: the amount charged once Wiro has billed it, with the '
|
|
10
|
+
+ 'model\'s list price beside it when a discount made them differ. Successful tasks are '
|
|
11
|
+
+ 'billed; failed tasks and tasks cancelled while queued are not, and a task stopped '
|
|
12
|
+
+ 'while running can still be charged once its work ends. A finished task\'s result already '
|
|
13
|
+
+ 'shows its cost, so use this for a task whose result you do not have, or whose result '
|
|
14
|
+
+ 'shows only the list price. If the task is active, follow the returned `wait_for_task` '
|
|
15
|
+
+ 'next action.',
|
|
10
16
|
inputSchema: {
|
|
11
17
|
tasktoken: z.string().optional().describe('The task token returned from run_model.'),
|
|
12
18
|
taskid: z.string().optional().describe('The task ID (alternative to tasktoken).'),
|
|
@@ -26,11 +32,32 @@ export function registerGetTaskPrice(server, client) {
|
|
|
26
32
|
isError: true,
|
|
27
33
|
};
|
|
28
34
|
}
|
|
35
|
+
if (taskid && !isTaskId(taskid)) {
|
|
36
|
+
return {
|
|
37
|
+
content: [{ type: 'text', text: `## Error\n\n${TASK_ID_NOT_NUMERIC}` }],
|
|
38
|
+
isError: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (taskid && isTaskIdTooLarge(taskid)) {
|
|
42
|
+
return {
|
|
43
|
+
content: [{ type: 'text', text: `## Error\n\n${TASK_NOT_FOUND}` }],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
29
47
|
const detail = await client.getTask({ tasktoken, taskid }, extra.signal);
|
|
48
|
+
if (!detail.result) {
|
|
49
|
+
const errors = isTaskNotFound(detail)
|
|
50
|
+
? TASK_NOT_FOUND
|
|
51
|
+
: detail.errors?.map(error => error.message).join(', ') || 'Task status request failed.';
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: 'text', text: `## Error\n\n${errors}` }],
|
|
54
|
+
isError: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
30
57
|
const task = detail.tasklist?.[0];
|
|
31
58
|
if (!task) {
|
|
32
59
|
return {
|
|
33
|
-
content: [{ type: 'text', text:
|
|
60
|
+
content: [{ type: 'text', text: `## Error\n\n${TASK_NOT_FOUND}` }],
|
|
34
61
|
isError: true,
|
|
35
62
|
};
|
|
36
63
|
}
|
|
@@ -42,16 +69,33 @@ export function registerGetTaskPrice(server, client) {
|
|
|
42
69
|
lines.push(`**Model:** \`${task.modelslugowner}/${task.modelslugproject}\``);
|
|
43
70
|
}
|
|
44
71
|
lines.push(`**Status:** ${task.status}`);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
72
|
+
const state = getTaskState(task);
|
|
73
|
+
// Shows the charge Wiro reports for the task.
|
|
74
|
+
const chargedUsd = task.chargedcost === null || task.chargedcost === undefined || task.chargedcost === ''
|
|
75
|
+
? null
|
|
76
|
+
: Number(task.chargedcost);
|
|
77
|
+
const charged = chargedUsd !== null && Number.isFinite(chargedUsd) && chargedUsd > 0
|
|
78
|
+
? formatTaskCost(task)
|
|
79
|
+
: null;
|
|
80
|
+
// A successful task shows its list price until its charge is recorded.
|
|
81
|
+
const awaiting = awaitingCharge(task);
|
|
82
|
+
// No worker took a task cancelled while queued, so it never ran.
|
|
83
|
+
const neverRan = state === 'cancelled' && charged === null && cancelledWhileQueued(task);
|
|
84
|
+
if (state === 'completed') {
|
|
49
85
|
lines.push(`**Result:** Success`);
|
|
50
|
-
lines.push(`**Cost:** ${
|
|
86
|
+
lines.push(`**Cost:** ${awaiting
|
|
87
|
+
? `$${Number(task.totalcost)} list price; check again in a moment for the charged amount`
|
|
88
|
+
: formatTaskCost(task) ?? '$0 (no charge)'}`);
|
|
89
|
+
}
|
|
90
|
+
else if (state === 'failed') {
|
|
91
|
+
lines.push(`**Result:** Failed${task.pexit ? ` (exit code: ${task.pexit})` : ''}`);
|
|
92
|
+
lines.push(`**Cost:** ${charged ?? '$0 (failed tasks are not charged)'}`);
|
|
51
93
|
}
|
|
52
|
-
else if (
|
|
53
|
-
lines.push(`**Result:**
|
|
54
|
-
lines.push(`**Cost:** $
|
|
94
|
+
else if (state === 'cancelled') {
|
|
95
|
+
lines.push(`**Result:** Cancelled`);
|
|
96
|
+
lines.push(`**Cost:** ${charged ?? (neverRan
|
|
97
|
+
? '$0 (cancelled while queued, not charged)'
|
|
98
|
+
: '$0 so far (a task stopped while running can still be charged when its work ends)')}`);
|
|
55
99
|
}
|
|
56
100
|
else {
|
|
57
101
|
lines.push(`**Result:** In progress`);
|
|
@@ -60,21 +104,25 @@ export function registerGetTaskPrice(server, client) {
|
|
|
60
104
|
if (task.elapsedseconds) {
|
|
61
105
|
lines.push(`**Duration:** ${task.elapsedseconds}s`);
|
|
62
106
|
}
|
|
63
|
-
const state = getTaskState(task);
|
|
64
107
|
const structuredTask = toStructuredTaskResult(task, {
|
|
65
108
|
taskid,
|
|
66
109
|
tasktoken,
|
|
67
110
|
});
|
|
68
111
|
const successful = state === 'completed';
|
|
69
112
|
const terminal = successful || state === 'failed' || state === 'cancelled';
|
|
113
|
+
// Work a cancelled task had already started can still be charged when it
|
|
114
|
+
// ends, so with no charge yet it is not known whether it will be billed.
|
|
115
|
+
const pendingCancel = state === 'cancelled' && charged === null && !neverRan;
|
|
70
116
|
return {
|
|
71
117
|
content: [{ type: 'text', text: lines.join('\n') }],
|
|
72
118
|
structuredContent: {
|
|
73
119
|
state,
|
|
74
120
|
task: structuredTask.task,
|
|
75
|
-
billed: terminal ? successful : null,
|
|
76
|
-
costUsd: terminal
|
|
77
|
-
? (
|
|
121
|
+
billed: terminal && !pendingCancel ? successful || charged !== null : null,
|
|
122
|
+
costUsd: terminal && !awaiting
|
|
123
|
+
? (chargedUsd !== null && Number.isFinite(chargedUsd)
|
|
124
|
+
? chargedUsd
|
|
125
|
+
: (successful ? Number(task.totalcost || 0) : 0))
|
|
78
126
|
: null,
|
|
79
127
|
...(structuredTask.nextAction
|
|
80
128
|
? { nextAction: structuredTask.nextAction }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-task-price.js","sourceRoot":"","sources":["../../src/tools/get-task-price.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-task-price.js","sourceRoot":"","sources":["../../src/tools/get-task-price.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-task.d.ts","sourceRoot":"","sources":["../../src/tools/get-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"get-task.d.ts","sourceRoot":"","sources":["../../src/tools/get-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AActB,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAiI3E"}
|