@doist/automations-mcp 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -8559,8 +8559,8 @@ function validateManifestResultFrom(data, ctx) {
|
|
|
8559
8559
|
});
|
|
8560
8560
|
return;
|
|
8561
8561
|
}
|
|
8562
|
-
const
|
|
8563
|
-
if (!
|
|
8562
|
+
const outputSchema23 = referencedStep.outputSchema;
|
|
8563
|
+
if (!outputSchema23) {
|
|
8564
8564
|
ctx.addIssue({
|
|
8565
8565
|
code: z7.ZodIssueCode.custom,
|
|
8566
8566
|
message: `resultFrom.stepId references step "${referencedStep.id}" without an outputSchema.`,
|
|
@@ -8569,7 +8569,7 @@ function validateManifestResultFrom(data, ctx) {
|
|
|
8569
8569
|
return;
|
|
8570
8570
|
}
|
|
8571
8571
|
if (!data.resultFrom.path) {
|
|
8572
|
-
if (!isPlainStringSchema(
|
|
8572
|
+
if (!isPlainStringSchema(outputSchema23)) {
|
|
8573
8573
|
ctx.addIssue({
|
|
8574
8574
|
code: z7.ZodIssueCode.custom,
|
|
8575
8575
|
message: "resultFrom.path may be omitted only when the referenced step outputSchema is a string.",
|
|
@@ -8579,7 +8579,7 @@ function validateManifestResultFrom(data, ctx) {
|
|
|
8579
8579
|
return;
|
|
8580
8580
|
}
|
|
8581
8581
|
const propertyPath = data.resultFrom.path.split(".");
|
|
8582
|
-
const resolvedSchema = resolvePropertySchemaInSchema(
|
|
8582
|
+
const resolvedSchema = resolvePropertySchemaInSchema(outputSchema23, propertyPath);
|
|
8583
8583
|
if (!resolvedSchema) {
|
|
8584
8584
|
ctx.addIssue({
|
|
8585
8585
|
code: z7.ZodIssueCode.custom,
|
|
@@ -8628,11 +8628,11 @@ function validateIfConditionLiteral({ condition, context, stepId }) {
|
|
|
8628
8628
|
const referencedStepId = parts[1];
|
|
8629
8629
|
if (!referencedStepId)
|
|
8630
8630
|
return null;
|
|
8631
|
-
const
|
|
8632
|
-
if (!
|
|
8631
|
+
const outputSchema23 = context.steps.get(referencedStepId);
|
|
8632
|
+
if (!outputSchema23)
|
|
8633
8633
|
return null;
|
|
8634
8634
|
const propertyPath = parts.slice(2);
|
|
8635
|
-
const resolved = propertyPath.length === 0 ?
|
|
8635
|
+
const resolved = propertyPath.length === 0 ? outputSchema23 : resolvePropertySchemaInSchema(outputSchema23, propertyPath);
|
|
8636
8636
|
if (!resolved)
|
|
8637
8637
|
return null;
|
|
8638
8638
|
return ifConditionLiteralError({ reference, literal, stepId, schema: resolved });
|
|
@@ -11390,6 +11390,14 @@ var WorkspaceAutomationDraftsClient = class extends BaseClient {
|
|
|
11390
11390
|
});
|
|
11391
11391
|
return automationDraftWithValidationSchema.parse(data);
|
|
11392
11392
|
}
|
|
11393
|
+
/** Deletes the draft. Only its owner can; the API answers 404 otherwise. */
|
|
11394
|
+
async delete(workspaceId, draftId, options) {
|
|
11395
|
+
await this.request({
|
|
11396
|
+
method: "DELETE",
|
|
11397
|
+
path: workspaceAutomationDraftsEndpoints.detail(IdSchema.parse(workspaceId), IdSchema.parse(draftId)),
|
|
11398
|
+
options
|
|
11399
|
+
});
|
|
11400
|
+
}
|
|
11393
11401
|
};
|
|
11394
11402
|
|
|
11395
11403
|
// ../../packages/sdk/dist/esm/clients/workspace-chat/endpoints.js
|
|
@@ -11508,6 +11516,17 @@ var WorkspaceAutomationsClient = class extends BaseClient {
|
|
|
11508
11516
|
options
|
|
11509
11517
|
});
|
|
11510
11518
|
}
|
|
11519
|
+
/**
|
|
11520
|
+
* Deletes the automation. Workspace admins may delete another member's
|
|
11521
|
+
* team-visible automation; a private one is only reachable by its creator.
|
|
11522
|
+
*/
|
|
11523
|
+
async delete(workspaceId, id, options) {
|
|
11524
|
+
await this.request({
|
|
11525
|
+
method: "DELETE",
|
|
11526
|
+
path: workspaceAutomationsEndpoints.detail(IdSchema.parse(workspaceId), IdSchema.parse(id)),
|
|
11527
|
+
options
|
|
11528
|
+
});
|
|
11529
|
+
}
|
|
11511
11530
|
};
|
|
11512
11531
|
|
|
11513
11532
|
// ../../packages/sdk/dist/esm/clients/workspaces/endpoints.js
|
|
@@ -12917,7 +12936,7 @@ import { McpServer } from "@modelcontextprotocol/server";
|
|
|
12917
12936
|
// package.json
|
|
12918
12937
|
var package_default = {
|
|
12919
12938
|
name: "@doist/automations-mcp",
|
|
12920
|
-
version: "1.
|
|
12939
|
+
version: "1.3.0",
|
|
12921
12940
|
description: "MCP server and importable AI tools for Todoist Automations",
|
|
12922
12941
|
type: "module",
|
|
12923
12942
|
main: "./dist/index.js",
|
|
@@ -12980,7 +12999,7 @@ var package_default = {
|
|
|
12980
12999
|
"gpt-tokenizer": "4.0.0",
|
|
12981
13000
|
"semantic-release": "25.0.9",
|
|
12982
13001
|
"semantic-release-monorepo": "8.0.2",
|
|
12983
|
-
tsx: "4.23.
|
|
13002
|
+
tsx: "4.23.15",
|
|
12984
13003
|
typescript: "6.0.3",
|
|
12985
13004
|
vitest: "4.1.11"
|
|
12986
13005
|
},
|
|
@@ -13133,7 +13152,7 @@ function registerTool({
|
|
|
13133
13152
|
transport
|
|
13134
13153
|
}) {
|
|
13135
13154
|
const execute = tool.execute;
|
|
13136
|
-
const { input: inputSchema, output:
|
|
13155
|
+
const { input: inputSchema, output: outputSchema23 } = getToolSchemas(tool);
|
|
13137
13156
|
const callback = async (args, ctx) => {
|
|
13138
13157
|
try {
|
|
13139
13158
|
const { textContent, structuredContent } = await execute(args, {
|
|
@@ -13160,7 +13179,7 @@ function registerTool({
|
|
|
13160
13179
|
{
|
|
13161
13180
|
description: tool.description,
|
|
13162
13181
|
inputSchema,
|
|
13163
|
-
...
|
|
13182
|
+
...outputSchema23 ? { outputSchema: outputSchema23 } : {},
|
|
13164
13183
|
annotations: getMcpAnnotations(tool)
|
|
13165
13184
|
},
|
|
13166
13185
|
callback
|
|
@@ -13663,6 +13682,8 @@ var ToolNames = {
|
|
|
13663
13682
|
SET_AUTOMATION_VISIBILITY: "set-automation-visibility",
|
|
13664
13683
|
MOVE_AUTOMATION: "move-automation",
|
|
13665
13684
|
TRIGGER_AUTOMATION: "trigger-automation",
|
|
13685
|
+
DELETE_AUTOMATION: "delete-automation",
|
|
13686
|
+
DELETE_DRAFT: "delete-draft",
|
|
13666
13687
|
// Connection
|
|
13667
13688
|
CONNECT_SERVICE: "connect-service",
|
|
13668
13689
|
CHECK_CONNECTION: "check-connection",
|
|
@@ -13928,26 +13949,101 @@ var continueConversation = {
|
|
|
13928
13949
|
}
|
|
13929
13950
|
};
|
|
13930
13951
|
|
|
13931
|
-
// src/tools/
|
|
13952
|
+
// src/tools/delete-automation.ts
|
|
13953
|
+
import { z as z65 } from "zod";
|
|
13954
|
+
|
|
13955
|
+
// src/utils/workspace-scope.ts
|
|
13932
13956
|
import { z as z64 } from "zod";
|
|
13957
|
+
var workspaceIdParameter = z64.string().optional().describe(
|
|
13958
|
+
"Act on this Todoist workspace. Omit for the personal space. The two are separate: a workspace automation is not found in the personal space, and vice versa."
|
|
13959
|
+
);
|
|
13960
|
+
var requiredWorkspaceIdParameter = z64.string().describe("The Todoist workspace, as returned by list-workspaces.");
|
|
13961
|
+
function describeVisibility(visibility) {
|
|
13962
|
+
return visibility === "workspace" ? "visible to the workspace" : "private to its creator";
|
|
13963
|
+
}
|
|
13964
|
+
function describeScope(workspaceId) {
|
|
13965
|
+
return workspaceId === void 0 ? "personal" : `workspace ${workspaceId}`;
|
|
13966
|
+
}
|
|
13967
|
+
|
|
13968
|
+
// src/tools/delete-automation.ts
|
|
13933
13969
|
var parameters4 = {
|
|
13934
|
-
|
|
13935
|
-
|
|
13970
|
+
automationId: z65.string().describe("The automation to delete, as listed by find-automations or get-automation."),
|
|
13971
|
+
workspaceId: workspaceIdParameter
|
|
13972
|
+
};
|
|
13973
|
+
var outputSchema3 = {
|
|
13974
|
+
automationId: z65.string(),
|
|
13975
|
+
deleted: z65.boolean()
|
|
13976
|
+
};
|
|
13977
|
+
var deleteAutomation = {
|
|
13978
|
+
name: ToolNames.DELETE_AUTOMATION,
|
|
13979
|
+
description: "Permanently deletes an automation, along with its schedule, run history and any unpublished edits. This cannot be undone. Takes effect immediately with no confirmation of its own, so read it first with get-automation so it is the right one and confirm intent with the user before calling. In a workspace, a member can delete only automations they created; a workspace admin can also delete another member\u2019s team-visible automation, but not a private one.",
|
|
13980
|
+
parameters: parameters4,
|
|
13981
|
+
outputSchema: outputSchema3,
|
|
13982
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
|
|
13983
|
+
async execute({ automationId, workspaceId }, { api, signal }) {
|
|
13984
|
+
const options = { signal };
|
|
13985
|
+
if (workspaceId === void 0) {
|
|
13986
|
+
await api.automations.delete(automationId, options);
|
|
13987
|
+
} else {
|
|
13988
|
+
await api.workspaceAutomations.delete(workspaceId, automationId, options);
|
|
13989
|
+
}
|
|
13990
|
+
return {
|
|
13991
|
+
textContent: `Automation ${automationId} deleted (${describeScope(workspaceId)}).`,
|
|
13992
|
+
structuredContent: { automationId, deleted: true }
|
|
13993
|
+
};
|
|
13994
|
+
}
|
|
13995
|
+
};
|
|
13996
|
+
|
|
13997
|
+
// src/tools/delete-draft.ts
|
|
13998
|
+
import { z as z66 } from "zod";
|
|
13999
|
+
var parameters5 = {
|
|
14000
|
+
draftId: z66.string().describe("The draft to delete, as listed by find-drafts or get-draft."),
|
|
14001
|
+
workspaceId: workspaceIdParameter
|
|
14002
|
+
};
|
|
14003
|
+
var outputSchema4 = {
|
|
14004
|
+
draftId: z66.string(),
|
|
14005
|
+
deleted: z66.boolean()
|
|
14006
|
+
};
|
|
14007
|
+
var deleteDraft = {
|
|
14008
|
+
name: ToolNames.DELETE_DRAFT,
|
|
14009
|
+
description: "Permanently deletes a draft the user owns, discarding whatever has been authored in it. This cannot be undone. Takes effect immediately with no confirmation of its own, so read it first with get-draft so it is the right one and confirm intent with the user before calling. Deleting the last draft of a conversation archives that conversation. A published automation the draft was editing is untouched.",
|
|
14010
|
+
parameters: parameters5,
|
|
14011
|
+
outputSchema: outputSchema4,
|
|
14012
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
|
|
14013
|
+
async execute({ draftId, workspaceId }, { api, signal }) {
|
|
14014
|
+
const options = { signal };
|
|
14015
|
+
if (workspaceId === void 0) {
|
|
14016
|
+
await api.automationDrafts.delete(draftId, options);
|
|
14017
|
+
} else {
|
|
14018
|
+
await api.workspaceAutomationDrafts.delete(workspaceId, draftId, options);
|
|
14019
|
+
}
|
|
14020
|
+
return {
|
|
14021
|
+
textContent: `Draft ${draftId} deleted (${describeScope(workspaceId)}).`,
|
|
14022
|
+
structuredContent: { draftId, deleted: true }
|
|
14023
|
+
};
|
|
14024
|
+
}
|
|
14025
|
+
};
|
|
14026
|
+
|
|
14027
|
+
// src/tools/disconnect-service.ts
|
|
14028
|
+
import { z as z67 } from "zod";
|
|
14029
|
+
var parameters6 = {
|
|
14030
|
+
connectionId: z67.string().describe("The connection to remove, as listed by get-connector."),
|
|
14031
|
+
force: z67.boolean().optional().describe(
|
|
13936
14032
|
"Disconnect even though enabled automations still use the connection. They stop working until a new connection is linked. Only after the user has agreed."
|
|
13937
14033
|
)
|
|
13938
14034
|
};
|
|
13939
|
-
var
|
|
13940
|
-
connectionId:
|
|
13941
|
-
disconnected:
|
|
13942
|
-
blockingAutomations:
|
|
14035
|
+
var outputSchema5 = {
|
|
14036
|
+
connectionId: z67.string(),
|
|
14037
|
+
disconnected: z67.boolean(),
|
|
14038
|
+
blockingAutomations: z67.array(blockingAutomationSchema).optional().describe(
|
|
13943
14039
|
"Present when disconnected is false: the enabled automations that still use the connection."
|
|
13944
14040
|
)
|
|
13945
14041
|
};
|
|
13946
14042
|
var disconnectService = {
|
|
13947
14043
|
name: ToolNames.DISCONNECT_SERVICE,
|
|
13948
14044
|
description: "Removes a linked account. Refuses, and lists them, when enabled automations still use the connection: disable those with update-automation first, or pass force after the user has agreed to break them. Disabled automations do not block it but need a new connection before they can run again. Takes effect immediately with no confirmation of its own, so confirm intent with the user first; get-connector with includeAutomations shows what depends on the service.",
|
|
13949
|
-
parameters:
|
|
13950
|
-
outputSchema:
|
|
14045
|
+
parameters: parameters6,
|
|
14046
|
+
outputSchema: outputSchema5,
|
|
13951
14047
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
|
|
13952
14048
|
async execute({ connectionId, force }, { api, signal }) {
|
|
13953
14049
|
try {
|
|
@@ -13971,45 +14067,32 @@ var disconnectService = {
|
|
|
13971
14067
|
};
|
|
13972
14068
|
|
|
13973
14069
|
// src/tools/find-automations.ts
|
|
13974
|
-
import { z as
|
|
14070
|
+
import { z as z69 } from "zod";
|
|
13975
14071
|
|
|
13976
14072
|
// src/utils/pagination.ts
|
|
13977
|
-
import { z as
|
|
14073
|
+
import { z as z68 } from "zod";
|
|
13978
14074
|
var paginationParameters = {
|
|
13979
|
-
cursor:
|
|
13980
|
-
limit:
|
|
14075
|
+
cursor: z68.string().optional().describe("Cursor from a previous call to fetch the next page. Omit for the first page."),
|
|
14076
|
+
limit: z68.number().int().min(1).max(MAX_PAGINATION_LIMIT).optional().describe(`Page size, at most ${MAX_PAGINATION_LIMIT}. Omit for the default.`)
|
|
13981
14077
|
};
|
|
13982
14078
|
var paginationOutput = {
|
|
13983
|
-
nextCursor:
|
|
14079
|
+
nextCursor: z68.string().optional().describe("Pass as `cursor` to fetch the next page. Absent when this page is the last.")
|
|
13984
14080
|
};
|
|
13985
14081
|
|
|
13986
|
-
// src/utils/workspace-scope.ts
|
|
13987
|
-
import { z as z66 } from "zod";
|
|
13988
|
-
var workspaceIdParameter = z66.string().optional().describe(
|
|
13989
|
-
"Act on this Todoist workspace. Omit for the personal space. The two are separate: a workspace automation is not found in the personal space, and vice versa."
|
|
13990
|
-
);
|
|
13991
|
-
var requiredWorkspaceIdParameter = z66.string().describe("The Todoist workspace, as returned by list-workspaces.");
|
|
13992
|
-
function describeVisibility(visibility) {
|
|
13993
|
-
return visibility === "workspace" ? "visible to the workspace" : "private to its creator";
|
|
13994
|
-
}
|
|
13995
|
-
function describeScope(workspaceId) {
|
|
13996
|
-
return workspaceId === void 0 ? "personal" : `workspace ${workspaceId}`;
|
|
13997
|
-
}
|
|
13998
|
-
|
|
13999
14082
|
// src/tools/find-automations.ts
|
|
14000
|
-
var
|
|
14083
|
+
var parameters7 = {
|
|
14001
14084
|
workspaceId: workspaceIdParameter,
|
|
14002
14085
|
...paginationParameters
|
|
14003
14086
|
};
|
|
14004
|
-
var
|
|
14005
|
-
automations:
|
|
14087
|
+
var outputSchema6 = {
|
|
14088
|
+
automations: z69.array(automationSummarySchema),
|
|
14006
14089
|
...paginationOutput
|
|
14007
14090
|
};
|
|
14008
14091
|
var findAutomations = {
|
|
14009
14092
|
name: ToolNames.FIND_AUTOMATIONS,
|
|
14010
14093
|
description: "Lists automations with their state and triggers, one page at a time. Use it to find the id of an automation before inspecting or changing it; ids are opaque and there is no lookup by name. Returns summaries without the manifest body.",
|
|
14011
|
-
parameters:
|
|
14012
|
-
outputSchema:
|
|
14094
|
+
parameters: parameters7,
|
|
14095
|
+
outputSchema: outputSchema6,
|
|
14013
14096
|
annotations: {
|
|
14014
14097
|
readOnlyHint: true,
|
|
14015
14098
|
destructiveHint: false,
|
|
@@ -14031,26 +14114,26 @@ var findAutomations = {
|
|
|
14031
14114
|
};
|
|
14032
14115
|
|
|
14033
14116
|
// src/tools/find-connectors.ts
|
|
14034
|
-
import { z as
|
|
14035
|
-
var
|
|
14036
|
-
query:
|
|
14117
|
+
import { z as z70 } from "zod";
|
|
14118
|
+
var parameters8 = {
|
|
14119
|
+
query: z70.string().optional().describe("Text to match against connector names and descriptions. Ids are not searched."),
|
|
14037
14120
|
capability: connectorCapabilitySchema.optional().describe(
|
|
14038
14121
|
"Only connectors offering this capability. Does not narrow the connections listed under each."
|
|
14039
14122
|
),
|
|
14040
|
-
connectionStatus:
|
|
14123
|
+
connectionStatus: z70.enum(CONNECTION_STATUSES).optional().describe(
|
|
14041
14124
|
"Only connectors the user has a connection in this state for. With `capability`, the same connection must cover that capability."
|
|
14042
14125
|
),
|
|
14043
|
-
withoutConnections:
|
|
14126
|
+
withoutConnections: z70.boolean().optional().describe(
|
|
14044
14127
|
"Only connectors the user has no connection for. Cannot combine with connectionStatus."
|
|
14045
14128
|
),
|
|
14046
|
-
includeConnections:
|
|
14129
|
+
includeConnections: z70.boolean().optional().describe(
|
|
14047
14130
|
"Whether to list the user's connections under each connector. Defaults to true; false skips the lookup and disables the connection filters."
|
|
14048
14131
|
)
|
|
14049
14132
|
};
|
|
14050
|
-
var
|
|
14051
|
-
connectors:
|
|
14133
|
+
var outputSchema7 = {
|
|
14134
|
+
connectors: z70.array(
|
|
14052
14135
|
connectorSummarySchema.extend({
|
|
14053
|
-
connections:
|
|
14136
|
+
connections: z70.array(connectorConnectionSummarySchema).optional().describe(
|
|
14054
14137
|
"The user's connections for this connector. Absent when includeConnections is false."
|
|
14055
14138
|
)
|
|
14056
14139
|
})
|
|
@@ -14059,8 +14142,8 @@ var outputSchema5 = {
|
|
|
14059
14142
|
var findConnectors = {
|
|
14060
14143
|
name: ToolNames.FIND_CONNECTORS,
|
|
14061
14144
|
description: "Lists the services automations can use, with the user's connections to each. A connector is a service such as GitHub; a connection is one authorised account for it. Use it to see what is available, what the user has already linked, and which connector id to pass to get-connector.",
|
|
14062
|
-
parameters:
|
|
14063
|
-
outputSchema:
|
|
14145
|
+
parameters: parameters8,
|
|
14146
|
+
outputSchema: outputSchema7,
|
|
14064
14147
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14065
14148
|
async execute({ query, capability, connectionStatus, withoutConnections, includeConnections = true }, { api, signal }) {
|
|
14066
14149
|
if (!includeConnections && (connectionStatus || withoutConnections)) {
|
|
@@ -14093,19 +14176,19 @@ var findConnectors = {
|
|
|
14093
14176
|
};
|
|
14094
14177
|
|
|
14095
14178
|
// src/tools/find-conversations.ts
|
|
14096
|
-
import { z as
|
|
14097
|
-
var
|
|
14179
|
+
import { z as z71 } from "zod";
|
|
14180
|
+
var parameters9 = {
|
|
14098
14181
|
status: chatConversationStatusSchema.optional().describe(
|
|
14099
14182
|
'Defaults to "active". Publishing an automation archives its conversation, so pass "archived" or "all" to find the conversation behind a published automation.'
|
|
14100
14183
|
),
|
|
14101
|
-
limit:
|
|
14184
|
+
limit: z71.number().int().min(1).max(200).optional().describe("At most this many, newest first. Defaults to 10.")
|
|
14102
14185
|
};
|
|
14103
|
-
var
|
|
14186
|
+
var outputSchema8 = { conversations: z71.array(conversationSummarySchema) };
|
|
14104
14187
|
var findConversations = {
|
|
14105
14188
|
name: ToolNames.FIND_CONVERSATIONS,
|
|
14106
14189
|
description: "Lists the user's conversations with the Automations agent, newest first. A conversation is one authoring session: it writes to a draft and ends when the automation is published. Use it to find a session to resume or to read; get-conversation has the messages and whether the agent is waiting on something.",
|
|
14107
|
-
parameters:
|
|
14108
|
-
outputSchema:
|
|
14190
|
+
parameters: parameters9,
|
|
14191
|
+
outputSchema: outputSchema8,
|
|
14109
14192
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14110
14193
|
async execute({ status, limit }, { api, signal }) {
|
|
14111
14194
|
const dtos = await api.chat.listConversations({ status, limit }, { signal });
|
|
@@ -14119,20 +14202,20 @@ var findConversations = {
|
|
|
14119
14202
|
};
|
|
14120
14203
|
|
|
14121
14204
|
// src/tools/find-drafts.ts
|
|
14122
|
-
import { z as
|
|
14123
|
-
var
|
|
14205
|
+
import { z as z72 } from "zod";
|
|
14206
|
+
var parameters10 = {
|
|
14124
14207
|
workspaceId: workspaceIdParameter,
|
|
14125
14208
|
...paginationParameters
|
|
14126
14209
|
};
|
|
14127
|
-
var
|
|
14128
|
-
drafts:
|
|
14210
|
+
var outputSchema9 = {
|
|
14211
|
+
drafts: z72.array(draftSummarySchema),
|
|
14129
14212
|
...paginationOutput
|
|
14130
14213
|
};
|
|
14131
14214
|
var findDrafts = {
|
|
14132
14215
|
name: ToolNames.FIND_DRAFTS,
|
|
14133
14216
|
description: "Lists automation drafts, one page at a time. A draft is an automation being authored or edited that has not been published yet; chat conversations write to drafts. Returns summaries without the manifest; get-draft has the manifest and whether it is ready to publish.",
|
|
14134
|
-
parameters:
|
|
14135
|
-
outputSchema:
|
|
14217
|
+
parameters: parameters10,
|
|
14218
|
+
outputSchema: outputSchema9,
|
|
14136
14219
|
annotations: {
|
|
14137
14220
|
readOnlyHint: true,
|
|
14138
14221
|
destructiveHint: false,
|
|
@@ -14154,11 +14237,11 @@ var findDrafts = {
|
|
|
14154
14237
|
};
|
|
14155
14238
|
|
|
14156
14239
|
// src/tools/find-runs.ts
|
|
14157
|
-
import { z as
|
|
14158
|
-
var
|
|
14159
|
-
automationId:
|
|
14240
|
+
import { z as z73 } from "zod";
|
|
14241
|
+
var parameters11 = {
|
|
14242
|
+
automationId: z73.string().describe("The id of the automation, as returned by find-automations."),
|
|
14160
14243
|
workspaceId: workspaceIdParameter,
|
|
14161
|
-
status:
|
|
14244
|
+
status: z73.enum(AUTOMATION_RUN_STATUSES).optional().describe(
|
|
14162
14245
|
"Only runs with this outcome. A run refused for an empty balance is `skipped`, not `failed`."
|
|
14163
14246
|
),
|
|
14164
14247
|
since: isoDateTimeOrDateQueryParamSchema.optional().describe(
|
|
@@ -14169,12 +14252,12 @@ var parameters9 = {
|
|
|
14169
14252
|
),
|
|
14170
14253
|
...paginationParameters
|
|
14171
14254
|
};
|
|
14172
|
-
var
|
|
14255
|
+
var outputSchema10 = { runs: z73.array(runSummarySchema), ...paginationOutput };
|
|
14173
14256
|
var findRuns = {
|
|
14174
14257
|
name: ToolNames.FIND_RUNS,
|
|
14175
14258
|
description: "Lists the runs of one automation, newest first, one page at a time, with the outcome and failure reason of each. Use it to see whether an automation has been running and how it ended; get-run gives the steps of one run. Filters apply to when the run started.",
|
|
14176
|
-
parameters:
|
|
14177
|
-
outputSchema:
|
|
14259
|
+
parameters: parameters11,
|
|
14260
|
+
outputSchema: outputSchema10,
|
|
14178
14261
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14179
14262
|
async execute({ automationId, workspaceId, status, since, until, cursor, limit }, { api, signal }) {
|
|
14180
14263
|
const options = { signal };
|
|
@@ -14193,15 +14276,15 @@ var findRuns = {
|
|
|
14193
14276
|
};
|
|
14194
14277
|
|
|
14195
14278
|
// src/tools/get-automation.ts
|
|
14196
|
-
import { z as
|
|
14197
|
-
var
|
|
14198
|
-
automationId:
|
|
14279
|
+
import { z as z74 } from "zod";
|
|
14280
|
+
var parameters12 = {
|
|
14281
|
+
automationId: z74.string().describe("The id of the automation, as returned by find-automations."),
|
|
14199
14282
|
workspaceId: workspaceIdParameter
|
|
14200
14283
|
};
|
|
14201
|
-
var
|
|
14284
|
+
var outputSchema11 = {
|
|
14202
14285
|
automation: automationSummarySchema.extend({
|
|
14203
|
-
draftId:
|
|
14204
|
-
manifest:
|
|
14286
|
+
draftId: z74.string().optional().describe("The draft holding unpublished edits to this automation, when there is one."),
|
|
14287
|
+
manifest: z74.record(z74.string(), z74.unknown()).optional().describe(
|
|
14205
14288
|
"The stored manifest: triggers, steps and settings. Absent when there is none."
|
|
14206
14289
|
)
|
|
14207
14290
|
})
|
|
@@ -14209,8 +14292,8 @@ var outputSchema9 = {
|
|
|
14209
14292
|
var getAutomation = {
|
|
14210
14293
|
name: ToolNames.GET_AUTOMATION,
|
|
14211
14294
|
description: "Returns one automation in full, including its manifest. Use it to inspect what an automation does; find-automations gives the summary and the id.",
|
|
14212
|
-
parameters:
|
|
14213
|
-
outputSchema:
|
|
14295
|
+
parameters: parameters12,
|
|
14296
|
+
outputSchema: outputSchema11,
|
|
14214
14297
|
annotations: {
|
|
14215
14298
|
readOnlyHint: true,
|
|
14216
14299
|
destructiveHint: false,
|
|
@@ -14233,23 +14316,23 @@ var getAutomation = {
|
|
|
14233
14316
|
};
|
|
14234
14317
|
|
|
14235
14318
|
// src/tools/get-connector.ts
|
|
14236
|
-
import { z as
|
|
14237
|
-
var
|
|
14238
|
-
connectorId:
|
|
14239
|
-
includeAutomations:
|
|
14319
|
+
import { z as z75 } from "zod";
|
|
14320
|
+
var parameters13 = {
|
|
14321
|
+
connectorId: z75.string().describe('The connector slug, such as "github", as listed by find-connectors.'),
|
|
14322
|
+
includeAutomations: z75.boolean().optional().describe(
|
|
14240
14323
|
"Also list the published automations that use this connector, with whether each has a working connection."
|
|
14241
14324
|
)
|
|
14242
14325
|
};
|
|
14243
|
-
var
|
|
14326
|
+
var outputSchema12 = {
|
|
14244
14327
|
connector: connectorDetailSchema,
|
|
14245
|
-
connections:
|
|
14246
|
-
automations:
|
|
14328
|
+
connections: z75.array(connectionSummarySchema).describe("The user's connections for this connector. Empty when none is linked."),
|
|
14329
|
+
automations: z75.array(dependentAutomationSchema).optional().describe("Present when includeAutomations is true.")
|
|
14247
14330
|
};
|
|
14248
14331
|
var getConnector = {
|
|
14249
14332
|
name: ToolNames.GET_CONNECTOR,
|
|
14250
14333
|
description: "Returns one connector with the events it can trigger on and the user's connections to it. Use it before connecting a service to see what it offers and whether an account is already linked, and with includeAutomations to see what depends on it before disconnecting.",
|
|
14251
|
-
parameters:
|
|
14252
|
-
outputSchema:
|
|
14334
|
+
parameters: parameters13,
|
|
14335
|
+
outputSchema: outputSchema12,
|
|
14253
14336
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14254
14337
|
async execute({ connectorId, includeAutomations = false }, { api, signal }) {
|
|
14255
14338
|
const options = { signal };
|
|
@@ -14278,13 +14361,13 @@ var getConnector = {
|
|
|
14278
14361
|
};
|
|
14279
14362
|
|
|
14280
14363
|
// src/tools/get-conversation.ts
|
|
14281
|
-
import { z as
|
|
14282
|
-
var
|
|
14283
|
-
conversationId:
|
|
14364
|
+
import { z as z76 } from "zod";
|
|
14365
|
+
var parameters14 = {
|
|
14366
|
+
conversationId: z76.string().describe("The id of the conversation, as returned by find-conversations.")
|
|
14284
14367
|
};
|
|
14285
|
-
var
|
|
14368
|
+
var outputSchema13 = {
|
|
14286
14369
|
conversation: conversationSummarySchema,
|
|
14287
|
-
messages:
|
|
14370
|
+
messages: z76.array(conversationMessageSchema).describe("In order, oldest first."),
|
|
14288
14371
|
pendingAction: pendingActionSchema.optional().describe(
|
|
14289
14372
|
"What the agent is waiting on before the conversation can continue. Absent when it is waiting on a plain reply, or on nothing."
|
|
14290
14373
|
)
|
|
@@ -14292,8 +14375,8 @@ var outputSchema11 = {
|
|
|
14292
14375
|
var getConversation = {
|
|
14293
14376
|
name: ToolNames.GET_CONVERSATION,
|
|
14294
14377
|
description: "Returns one conversation with its messages as visible text and any action the agent is waiting on. Use it to read what was said and to decide what to do next: the last assistant message is where the session resumes, and a pending action must be resolved before it can.",
|
|
14295
|
-
parameters:
|
|
14296
|
-
outputSchema:
|
|
14378
|
+
parameters: parameters14,
|
|
14379
|
+
outputSchema: outputSchema13,
|
|
14297
14380
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14298
14381
|
async execute({ conversationId }, { api, signal }) {
|
|
14299
14382
|
const options = { signal };
|
|
@@ -14332,22 +14415,22 @@ function describePendingAction(action) {
|
|
|
14332
14415
|
}
|
|
14333
14416
|
|
|
14334
14417
|
// src/tools/get-draft.ts
|
|
14335
|
-
import { z as
|
|
14336
|
-
var
|
|
14337
|
-
draftId:
|
|
14418
|
+
import { z as z77 } from "zod";
|
|
14419
|
+
var parameters15 = {
|
|
14420
|
+
draftId: z77.string().describe("The id of the draft, as returned by find-drafts."),
|
|
14338
14421
|
workspaceId: workspaceIdParameter
|
|
14339
14422
|
};
|
|
14340
|
-
var
|
|
14423
|
+
var outputSchema14 = {
|
|
14341
14424
|
draft: draftSummarySchema.extend({
|
|
14342
|
-
partialManifest:
|
|
14425
|
+
partialManifest: z77.record(z77.string(), z77.unknown()).optional().describe(
|
|
14343
14426
|
"The manifest as authored so far; may be missing parts. Absent when nothing has been authored yet."
|
|
14344
14427
|
),
|
|
14345
|
-
connectors:
|
|
14428
|
+
connectors: z77.array(z77.object({ connectorId: z77.string(), name: z77.string() })).optional().describe("The services the manifest uses.")
|
|
14346
14429
|
}),
|
|
14347
|
-
validation:
|
|
14348
|
-
state:
|
|
14349
|
-
issues:
|
|
14350
|
-
modified:
|
|
14430
|
+
validation: z77.object({
|
|
14431
|
+
state: z77.enum(["incomplete", "ready"]).describe('"ready" means the draft can be published as it stands.'),
|
|
14432
|
+
issues: z77.array(z77.string()).describe("What stops it being published. Empty when ready."),
|
|
14433
|
+
modified: z77.boolean().describe(
|
|
14351
14434
|
"Whether publishing would change anything: false when the draft matches the automation it edits."
|
|
14352
14435
|
)
|
|
14353
14436
|
})
|
|
@@ -14355,8 +14438,8 @@ var outputSchema12 = {
|
|
|
14355
14438
|
var getDraft = {
|
|
14356
14439
|
name: ToolNames.GET_DRAFT,
|
|
14357
14440
|
description: "Returns one draft with its partial manifest and validation state: whether it is ready to publish and, if not, what is missing.",
|
|
14358
|
-
parameters:
|
|
14359
|
-
outputSchema:
|
|
14441
|
+
parameters: parameters15,
|
|
14442
|
+
outputSchema: outputSchema14,
|
|
14360
14443
|
annotations: {
|
|
14361
14444
|
readOnlyHint: true,
|
|
14362
14445
|
destructiveHint: false,
|
|
@@ -14387,21 +14470,21 @@ var getDraft = {
|
|
|
14387
14470
|
};
|
|
14388
14471
|
|
|
14389
14472
|
// src/tools/get-run.ts
|
|
14390
|
-
import { z as
|
|
14391
|
-
var
|
|
14392
|
-
automationId:
|
|
14393
|
-
runId:
|
|
14473
|
+
import { z as z78 } from "zod";
|
|
14474
|
+
var parameters16 = {
|
|
14475
|
+
automationId: z78.string().describe("The id of the automation, as returned by find-automations."),
|
|
14476
|
+
runId: z78.string().describe("The id of the run, as returned by find-runs."),
|
|
14394
14477
|
workspaceId: workspaceIdParameter,
|
|
14395
|
-
full:
|
|
14478
|
+
full: z78.boolean().optional().describe(
|
|
14396
14479
|
"Also return each step's raw result and generated code. The payload can be large; omit it unless the compact diagnostic is not enough."
|
|
14397
14480
|
)
|
|
14398
14481
|
};
|
|
14399
|
-
var
|
|
14482
|
+
var outputSchema15 = { run: runDetailSchema };
|
|
14400
14483
|
var getRun = {
|
|
14401
14484
|
name: ToolNames.GET_RUN,
|
|
14402
14485
|
description: "Returns one run with its result, steps and the tool calls each step made, as a compact diagnostic: what failed, where, and the start of each error. Use it to work out why a run failed or what it produced.",
|
|
14403
|
-
parameters:
|
|
14404
|
-
outputSchema:
|
|
14486
|
+
parameters: parameters16,
|
|
14487
|
+
outputSchema: outputSchema15,
|
|
14405
14488
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },
|
|
14406
14489
|
async execute({ automationId, runId, workspaceId, full = false }, { api, signal }) {
|
|
14407
14490
|
const options = { signal };
|
|
@@ -14431,16 +14514,16 @@ function describeRun(run) {
|
|
|
14431
14514
|
}
|
|
14432
14515
|
|
|
14433
14516
|
// src/tools/list-workspaces.ts
|
|
14434
|
-
import { z as
|
|
14435
|
-
var
|
|
14436
|
-
var
|
|
14437
|
-
workspaces:
|
|
14438
|
-
|
|
14439
|
-
id:
|
|
14440
|
-
name:
|
|
14441
|
-
plan:
|
|
14442
|
-
role:
|
|
14443
|
-
access:
|
|
14517
|
+
import { z as z79 } from "zod";
|
|
14518
|
+
var parameters17 = {};
|
|
14519
|
+
var outputSchema16 = {
|
|
14520
|
+
workspaces: z79.array(
|
|
14521
|
+
z79.object({
|
|
14522
|
+
id: z79.string(),
|
|
14523
|
+
name: z79.string(),
|
|
14524
|
+
plan: z79.enum(WORKSPACE_PLANS),
|
|
14525
|
+
role: z79.enum(WORKSPACE_ROLES).describe("The user\u2019s role in the workspace."),
|
|
14526
|
+
access: z79.enum(WORKSPACE_ACCESS_LEVELS).describe(
|
|
14444
14527
|
'"locked" means the plan does not cover Automations: the workspace is listed, but its automations cannot run and nothing can be created in it.'
|
|
14445
14528
|
)
|
|
14446
14529
|
})
|
|
@@ -14449,8 +14532,8 @@ var outputSchema14 = {
|
|
|
14449
14532
|
var listWorkspaces = {
|
|
14450
14533
|
name: ToolNames.LIST_WORKSPACES,
|
|
14451
14534
|
description: "Lists the Todoist workspaces the user can use with Automations, with their ids. Workspaces the user cannot access are not listed. Call it to find the workspaceId for other tools; omit workspaceId on those tools for the personal space.",
|
|
14452
|
-
parameters:
|
|
14453
|
-
outputSchema:
|
|
14535
|
+
parameters: parameters17,
|
|
14536
|
+
outputSchema: outputSchema16,
|
|
14454
14537
|
annotations: {
|
|
14455
14538
|
readOnlyHint: true,
|
|
14456
14539
|
destructiveHint: false,
|
|
@@ -14467,22 +14550,22 @@ var listWorkspaces = {
|
|
|
14467
14550
|
};
|
|
14468
14551
|
|
|
14469
14552
|
// src/tools/move-automation.ts
|
|
14470
|
-
import { z as
|
|
14471
|
-
var
|
|
14472
|
-
automationId:
|
|
14553
|
+
import { z as z80 } from "zod";
|
|
14554
|
+
var parameters18 = {
|
|
14555
|
+
automationId: z80.string().describe(
|
|
14473
14556
|
"The id of the automation to move, as returned by find-automations. It may be a personal automation or one in another workspace."
|
|
14474
14557
|
),
|
|
14475
|
-
workspaceId:
|
|
14476
|
-
visibility:
|
|
14558
|
+
workspaceId: z80.string().describe("The workspace to move it into, as returned by list-workspaces."),
|
|
14559
|
+
visibility: z80.enum(AUTOMATION_VISIBILITIES).optional().describe(
|
|
14477
14560
|
'How the automation is shared once moved. Defaults to "workspace", visible to every member; "private" keeps it to its creator.'
|
|
14478
14561
|
)
|
|
14479
14562
|
};
|
|
14480
|
-
var
|
|
14563
|
+
var outputSchema17 = { automation: automationSummarySchema };
|
|
14481
14564
|
var moveAutomation = {
|
|
14482
14565
|
name: ToolNames.MOVE_AUTOMATION,
|
|
14483
14566
|
description: "Moves an automation the user created into a workspace, from their personal space or from another workspace they can still use. It keeps running on the creator\u2019s own connections, and any unpublished edits move with it. The destination is always a workspace: nothing moves back to the personal space. Fails when the user did not create the automation, or when the workspace it is in now no longer includes them or Automations. Takes effect immediately with no confirmation of its own, so confirm intent with the user first.",
|
|
14484
|
-
parameters:
|
|
14485
|
-
outputSchema:
|
|
14567
|
+
parameters: parameters18,
|
|
14568
|
+
outputSchema: outputSchema17,
|
|
14486
14569
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
14487
14570
|
async execute({ automationId, workspaceId, visibility }, { api, signal }) {
|
|
14488
14571
|
const dto = await api.workspaceAutomations.move(
|
|
@@ -14500,35 +14583,35 @@ var moveAutomation = {
|
|
|
14500
14583
|
};
|
|
14501
14584
|
|
|
14502
14585
|
// src/tools/repair-connection.ts
|
|
14503
|
-
import { z as
|
|
14504
|
-
var
|
|
14505
|
-
connectionId:
|
|
14586
|
+
import { z as z81 } from "zod";
|
|
14587
|
+
var parameters19 = {
|
|
14588
|
+
connectionId: z81.string().describe(
|
|
14506
14589
|
"The connection to repair, as listed by get-connector or reported by check-connection."
|
|
14507
14590
|
)
|
|
14508
14591
|
};
|
|
14509
|
-
var
|
|
14510
|
-
connectionId:
|
|
14511
|
-
connectorId:
|
|
14512
|
-
serviceName:
|
|
14513
|
-
resumed:
|
|
14592
|
+
var outputSchema18 = {
|
|
14593
|
+
connectionId: z81.string().describe("The connection to pass to check-connection next."),
|
|
14594
|
+
connectorId: z81.string(),
|
|
14595
|
+
serviceName: z81.string(),
|
|
14596
|
+
resumed: z81.boolean().describe(
|
|
14514
14597
|
"True when the existing pending setup was returned; false when a replacement was started."
|
|
14515
14598
|
),
|
|
14516
|
-
replacedConnectionId:
|
|
14599
|
+
replacedConnectionId: z81.string().optional().describe(
|
|
14517
14600
|
"The broken connection the replacement stands in for. Present when resumed is false."
|
|
14518
14601
|
),
|
|
14519
|
-
status:
|
|
14602
|
+
status: z81.enum(["pending", "authorized"]).describe(
|
|
14520
14603
|
'"pending" until the user completes the setup; "authorized" when nothing was needed.'
|
|
14521
14604
|
),
|
|
14522
14605
|
setup: connectionSetupSchema.optional().describe("What the user must complete. Absent when authorized."),
|
|
14523
|
-
automations:
|
|
14606
|
+
automations: z81.array(affectedAutomationSchema).optional().describe(
|
|
14524
14607
|
"Personal automations that move to the replacement once it is authorised. Present when resumed is false."
|
|
14525
14608
|
)
|
|
14526
14609
|
};
|
|
14527
14610
|
var repairConnection = {
|
|
14528
14611
|
name: ToolNames.REPAIR_CONNECTION,
|
|
14529
14612
|
description: "Fixes a connection that is not authorised. A pending one gets its setup returned again; an expired, errored or stale one is replaced by a new connection that the personal automations using it move to once the user authorises it. Returns what the user must complete, never waits, and tells you which connectionId to pass to check-connection.",
|
|
14530
|
-
parameters:
|
|
14531
|
-
outputSchema:
|
|
14613
|
+
parameters: parameters19,
|
|
14614
|
+
outputSchema: outputSchema18,
|
|
14532
14615
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
|
|
14533
14616
|
async execute({ connectionId }, { api, signal }) {
|
|
14534
14617
|
const options = { signal };
|
|
@@ -14583,26 +14666,26 @@ var repairConnection = {
|
|
|
14583
14666
|
};
|
|
14584
14667
|
|
|
14585
14668
|
// src/tools/set-automation-schedule.ts
|
|
14586
|
-
import { z as
|
|
14587
|
-
var
|
|
14588
|
-
automationId:
|
|
14669
|
+
import { z as z82 } from "zod";
|
|
14670
|
+
var parameters20 = {
|
|
14671
|
+
automationId: z82.string().describe("The id of the automation, as returned by find-automations."),
|
|
14589
14672
|
workspaceId: workspaceIdParameter,
|
|
14590
|
-
cron:
|
|
14673
|
+
cron: z82.string().optional().describe(
|
|
14591
14674
|
'A five-part cron expression such as "0 9 * * 1-5". Requires timezone. Use this or interval, not both.'
|
|
14592
14675
|
),
|
|
14593
|
-
timezone:
|
|
14676
|
+
timezone: z82.string().optional().describe(
|
|
14594
14677
|
'The IANA zone the cron expression is read in, such as "Europe/London". Only with cron.'
|
|
14595
14678
|
),
|
|
14596
|
-
interval:
|
|
14679
|
+
interval: z82.string().optional().describe(
|
|
14597
14680
|
'How often to run, as a number and unit: "45m", "6h", "1d", "1w". Use this or cron, not both.'
|
|
14598
14681
|
)
|
|
14599
14682
|
};
|
|
14600
|
-
var
|
|
14683
|
+
var outputSchema19 = { automation: automationSummarySchema };
|
|
14601
14684
|
var setAutomationSchedule = {
|
|
14602
14685
|
name: ToolNames.SET_AUTOMATION_SCHEDULE,
|
|
14603
14686
|
description: 'Changes when a schedule-triggered automation runs, as either a cron expression with a timezone or a fixed interval. Natural language such as "every weekday morning" is not accepted; translate it first. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Fails for automations that run on events or API calls.',
|
|
14604
|
-
parameters:
|
|
14605
|
-
outputSchema:
|
|
14687
|
+
parameters: parameters20,
|
|
14688
|
+
outputSchema: outputSchema19,
|
|
14606
14689
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
14607
14690
|
async execute({ automationId, workspaceId, cron, timezone, interval }, { api, signal }) {
|
|
14608
14691
|
const value = resolveScheduleInput(
|
|
@@ -14626,20 +14709,20 @@ var setAutomationSchedule = {
|
|
|
14626
14709
|
};
|
|
14627
14710
|
|
|
14628
14711
|
// src/tools/set-automation-visibility.ts
|
|
14629
|
-
import { z as
|
|
14630
|
-
var
|
|
14631
|
-
automationId:
|
|
14712
|
+
import { z as z83 } from "zod";
|
|
14713
|
+
var parameters21 = {
|
|
14714
|
+
automationId: z83.string().describe("The id of the automation, as returned by find-automations."),
|
|
14632
14715
|
workspaceId: requiredWorkspaceIdParameter,
|
|
14633
|
-
visibility:
|
|
14716
|
+
visibility: z83.enum(AUTOMATION_VISIBILITIES).describe(
|
|
14634
14717
|
'"workspace": every member can see and run it. "private": only its creator can see it, workspace admins included.'
|
|
14635
14718
|
)
|
|
14636
14719
|
};
|
|
14637
|
-
var
|
|
14720
|
+
var outputSchema20 = { automation: automationSummarySchema };
|
|
14638
14721
|
var setAutomationVisibility = {
|
|
14639
14722
|
name: ToolNames.SET_AUTOMATION_VISIBILITY,
|
|
14640
14723
|
description: "Shares a workspace automation with the whole workspace, or takes it back to private. Only the creator can change it, or a workspace admin while it is team-visible; once private it is out of every admin\u2019s reach until the creator shares it again. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Workspace automations only: a personal automation has no team to be visible to.",
|
|
14641
|
-
parameters:
|
|
14642
|
-
outputSchema:
|
|
14724
|
+
parameters: parameters21,
|
|
14725
|
+
outputSchema: outputSchema20,
|
|
14643
14726
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
14644
14727
|
async execute({ automationId, workspaceId, visibility }, { api, signal }) {
|
|
14645
14728
|
const dto = await api.workspaceAutomations.updateVisibility(
|
|
@@ -14657,19 +14740,19 @@ var setAutomationVisibility = {
|
|
|
14657
14740
|
};
|
|
14658
14741
|
|
|
14659
14742
|
// src/tools/start-conversation.ts
|
|
14660
|
-
import { z as
|
|
14661
|
-
var
|
|
14743
|
+
import { z as z84 } from "zod";
|
|
14744
|
+
var parameters22 = {
|
|
14662
14745
|
workspaceId: workspaceIdParameter.describe(
|
|
14663
14746
|
"Author the automation in this Todoist workspace: the conversation, its draft and the published automation all belong there, and continue-conversation follows it automatically. Omit for the personal space."
|
|
14664
14747
|
),
|
|
14665
|
-
message:
|
|
14748
|
+
message: z84.string().min(1).describe(
|
|
14666
14749
|
"What the user wants automated, in their words. Say whether the automation should be published or left as a draft; the agent otherwise asks."
|
|
14667
14750
|
)
|
|
14668
14751
|
};
|
|
14669
14752
|
var startConversation = {
|
|
14670
14753
|
name: ToolNames.START_CONVERSATION,
|
|
14671
14754
|
description: "Creates a conversation with the Automations agent and runs its first turn: the agent designs an automation from the message, asks questions, or asks for service connections. Blocks until the turn ends, which can take minutes; progress is reported meanwhile. Returns the conversationId to continue with and the outcome: awaiting_input (reply with continue-conversation), action_required (resolve pendingAction first) or published. Runs on the user\u2019s own connections in either space.",
|
|
14672
|
-
parameters:
|
|
14755
|
+
parameters: parameters22,
|
|
14673
14756
|
outputSchema: turnResultSchema,
|
|
14674
14757
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
|
|
14675
14758
|
async execute({ workspaceId, message }, { api, transport, signal, reportProgress }) {
|
|
@@ -14692,21 +14775,21 @@ var startConversation = {
|
|
|
14692
14775
|
};
|
|
14693
14776
|
|
|
14694
14777
|
// src/tools/trigger-automation.ts
|
|
14695
|
-
import { z as
|
|
14696
|
-
var
|
|
14697
|
-
automationId:
|
|
14778
|
+
import { z as z85 } from "zod";
|
|
14779
|
+
var parameters23 = {
|
|
14780
|
+
automationId: z85.string().describe("The id of the automation, as returned by find-automations."),
|
|
14698
14781
|
workspaceId: workspaceIdParameter
|
|
14699
14782
|
};
|
|
14700
|
-
var
|
|
14701
|
-
automationId:
|
|
14702
|
-
name:
|
|
14703
|
-
accepted:
|
|
14783
|
+
var outputSchema21 = {
|
|
14784
|
+
automationId: z85.string(),
|
|
14785
|
+
name: z85.string(),
|
|
14786
|
+
accepted: z85.literal(true).describe("The backend accepted the run. It has not finished.")
|
|
14704
14787
|
};
|
|
14705
14788
|
var triggerAutomation = {
|
|
14706
14789
|
name: ToolNames.TRIGGER_AUTOMATION,
|
|
14707
14790
|
description: "Starts a run of a schedule-triggered automation now, without waiting for its next scheduled time, and returns as soon as the backend accepts it. The run happens in the background; find-runs shows the outcome. Runs even when the automation is disabled. Cannot start automations that run on events or API calls. Confirm intent with the user first.",
|
|
14708
|
-
parameters:
|
|
14709
|
-
outputSchema:
|
|
14791
|
+
parameters: parameters23,
|
|
14792
|
+
outputSchema: outputSchema21,
|
|
14710
14793
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
|
|
14711
14794
|
async execute({ automationId, workspaceId }, { api, signal }) {
|
|
14712
14795
|
const options = { signal };
|
|
@@ -14731,22 +14814,22 @@ var triggerAutomation = {
|
|
|
14731
14814
|
};
|
|
14732
14815
|
|
|
14733
14816
|
// src/tools/update-automation.ts
|
|
14734
|
-
import { z as
|
|
14735
|
-
var
|
|
14736
|
-
automationId:
|
|
14817
|
+
import { z as z86 } from "zod";
|
|
14818
|
+
var parameters24 = {
|
|
14819
|
+
automationId: z86.string().describe("The id of the automation, as returned by find-automations."),
|
|
14737
14820
|
workspaceId: workspaceIdParameter,
|
|
14738
|
-
name:
|
|
14739
|
-
description:
|
|
14740
|
-
enabled:
|
|
14821
|
+
name: z86.string().min(1).optional().describe("A new name. Omit to keep the current one."),
|
|
14822
|
+
description: z86.string().optional().describe("A new description. Omit to keep the current one."),
|
|
14823
|
+
enabled: z86.boolean().optional().describe(
|
|
14741
14824
|
"Turn the automation on or off. Enabling fails while disabledReason is set: the system stopped it and the cause must be fixed first."
|
|
14742
14825
|
)
|
|
14743
14826
|
};
|
|
14744
|
-
var
|
|
14827
|
+
var outputSchema22 = { automation: automationSummarySchema };
|
|
14745
14828
|
var updateAutomation = {
|
|
14746
14829
|
name: ToolNames.UPDATE_AUTOMATION,
|
|
14747
14830
|
description: "Renames, describes, enables or disables an automation. Any one field can change alone; the others keep their current values. Takes effect immediately with no confirmation of its own, so confirm intent with the user first. Does not change what the automation does; that needs a conversation.",
|
|
14748
|
-
parameters:
|
|
14749
|
-
outputSchema:
|
|
14831
|
+
parameters: parameters24,
|
|
14832
|
+
outputSchema: outputSchema22,
|
|
14750
14833
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
14751
14834
|
async execute({ automationId, workspaceId, name, description, enabled }, context) {
|
|
14752
14835
|
const client = createClient(automationId, workspaceId, context);
|
|
@@ -14815,6 +14898,8 @@ var toolRegistry = {
|
|
|
14815
14898
|
setAutomationVisibility,
|
|
14816
14899
|
moveAutomation,
|
|
14817
14900
|
triggerAutomation,
|
|
14901
|
+
deleteAutomation,
|
|
14902
|
+
deleteDraft,
|
|
14818
14903
|
// Connection
|
|
14819
14904
|
connectService,
|
|
14820
14905
|
checkConnection,
|
|
@@ -14836,10 +14921,10 @@ You have access to a user's Todoist Automations through the tools listed.
|
|
|
14836
14921
|
|
|
14837
14922
|
- Every reference is an opaque id taken from a find- or get- tool. There is no lookup by name and no URL parsing: list first, then act on the id. Connector ids are the one exception: they are stable slugs such as github or slack.
|
|
14838
14923
|
- An automation belongs either to the user's personal space or to one Todoist workspace, and the two are separate. Pass workspaceId to reach workspace automations; omit it for personal ones.
|
|
14839
|
-
- update-automation, set-automation-schedule, set-automation-visibility, move-automation, trigger-automation and disconnect-service act immediately: no preview, and no confirmation of their own. Read the target first (get-automation, or get-connector for a connection) so it is the right one, and confirm intent with the user before changing or
|
|
14924
|
+
- update-automation, set-automation-schedule, set-automation-visibility, move-automation, trigger-automation, delete-automation, delete-draft and disconnect-service act immediately: no preview, and no confirmation of their own. Read the target first (get-automation, get-draft for a draft, or get-connector for a connection) so it is the right one, and confirm intent with the user before changing, running or deleting anything they did not explicitly ask for.
|
|
14840
14925
|
- trigger-automation returns before the run finishes; find-runs shows the outcome.
|
|
14841
14926
|
- A workspace automation is either visible to the whole workspace or private to its creator; isOwner says whether the user created it. Another member's automation is read-only for the user, but trigger-automation still works on it and the run executes on its creator's connections; find-runs shows who started each run as triggeredBy.
|
|
14842
|
-
- A workspace admin can update-automation
|
|
14927
|
+
- A workspace admin can update-automation, set-automation-visibility and delete-automation on another member's team-visible automation, but cannot reschedule it, change what it does (that needs its creator's draft or conversation) or reach a private one. updatedBy on an automation tells the creator's own change from an admin's.
|
|
14843
14928
|
- move-automation puts an automation the user created into a workspace, from the personal space or another workspace, and never back out. Connections stay personal in every space: a moved or shared automation keeps running on its creator's own connections.
|
|
14844
14929
|
- Authoring happens in the space the conversation was started in: pass workspaceId to start-conversation to author a workspace automation, and continue-conversation follows it automatically.
|
|
14845
14930
|
- connect-service and repair-connection never wait. They return what the user must complete (an authorisation link, or instructions and a code): relay it verbatim, let the user finish, then call check-connection with the connectionId. Retrying reuses the pending setup rather than creating another connection.
|
|
@@ -14873,4 +14958,4 @@ export {
|
|
|
14873
14958
|
DEFAULT_BASE_URL,
|
|
14874
14959
|
getMcpServer
|
|
14875
14960
|
};
|
|
14876
|
-
//# sourceMappingURL=chunk-
|
|
14961
|
+
//# sourceMappingURL=chunk-JNUCEABU.js.map
|