@paca-ai/paca-mcp 0.8.0 → 0.9.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/build/api/doc-client.d.ts +3 -3
- package/build/api/doc-client.d.ts.map +1 -1
- package/build/api/doc-client.js +5 -2
- package/build/api/doc-client.js.map +1 -1
- package/build/api/index.d.ts +1 -0
- package/build/api/index.d.ts.map +1 -1
- package/build/api/index.js +1 -0
- package/build/api/index.js.map +1 -1
- package/build/api/workflow-client.d.ts +31 -0
- package/build/api/workflow-client.d.ts.map +1 -0
- package/build/api/workflow-client.js +120 -0
- package/build/api/workflow-client.js.map +1 -0
- package/build/index.js +7 -1
- package/build/index.js.map +1 -1
- package/build/package.json +1 -1
- package/build/permissions.d.ts.map +1 -1
- package/build/permissions.js +303 -57
- package/build/permissions.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +8 -3
- package/build/server.js.map +1 -1
- package/build/tools/doc-activity-tools.d.ts +17 -0
- package/build/tools/doc-activity-tools.d.ts.map +1 -0
- package/build/tools/doc-activity-tools.js +169 -0
- package/build/tools/doc-activity-tools.js.map +1 -0
- package/build/tools/filesystem-doc-tools.d.ts.map +1 -1
- package/build/tools/filesystem-doc-tools.js +8 -2
- package/build/tools/filesystem-doc-tools.js.map +1 -1
- package/build/tools/index.d.ts +2 -1
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +21 -3
- package/build/tools/index.js.map +1 -1
- package/build/tools/task-link-tools.d.ts.map +1 -1
- package/build/tools/task-link-tools.js +4 -1
- package/build/tools/task-link-tools.js.map +1 -1
- package/build/tools/task-tools.d.ts.map +1 -1
- package/build/tools/task-tools.js +8 -2
- package/build/tools/task-tools.js.map +1 -1
- package/build/tools/view-tools.d.ts.map +1 -1
- package/build/tools/view-tools.js.map +1 -1
- package/build/tools/workflow-orchestration.d.ts +101 -0
- package/build/tools/workflow-orchestration.d.ts.map +1 -0
- package/build/tools/workflow-orchestration.js +399 -0
- package/build/tools/workflow-orchestration.js.map +1 -0
- package/build/tools/workflow-tools.d.ts +11 -0
- package/build/tools/workflow-tools.d.ts.map +1 -0
- package/build/tools/workflow-tools.js +607 -0
- package/build/tools/workflow-tools.js.map +1 -0
- package/build/types/index.d.ts +79 -9
- package/build/types/index.d.ts.map +1 -1
- package/build/utils/formatters.d.ts +10 -0
- package/build/utils/formatters.d.ts.map +1 -1
- package/build/utils/formatters.js +25 -0
- package/build/utils/formatters.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { PacaAPIWorkflowClient } from "../api/index.js";
|
|
2
|
+
import type { WorkflowGraph } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared apply-logic for `create_workflow`/`update_workflow`: both accept a
|
|
5
|
+
* full graph (nodes/status rules/status transitions/edges) addressed by
|
|
6
|
+
* taskId/statusId/task-pairs rather than internal node/rule/transition/edge
|
|
7
|
+
* UUIDs, and both need to translate that into the granular REST calls the
|
|
8
|
+
* backend actually exposes. This module is that translation layer.
|
|
9
|
+
*/
|
|
10
|
+
export interface NodeSetInput {
|
|
11
|
+
taskId: string;
|
|
12
|
+
posX: number;
|
|
13
|
+
posY: number;
|
|
14
|
+
}
|
|
15
|
+
export interface StatusRuleSetInput {
|
|
16
|
+
statusId: string;
|
|
17
|
+
assigneeMemberId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface StatusTransitionSetInput {
|
|
20
|
+
statusId: string;
|
|
21
|
+
nextStatusId?: string | null;
|
|
22
|
+
}
|
|
23
|
+
export interface EdgeRefInput {
|
|
24
|
+
sourceTaskId: string;
|
|
25
|
+
targetTaskId: string;
|
|
26
|
+
}
|
|
27
|
+
export type ItemOutcome = "created" | "updated" | "removed" | "skipped" | "failed";
|
|
28
|
+
export interface ItemResult {
|
|
29
|
+
key: string;
|
|
30
|
+
outcome: ItemOutcome;
|
|
31
|
+
detail?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface CategoryResult {
|
|
34
|
+
items: ItemResult[];
|
|
35
|
+
hasFailure: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare function anyHasFailure(...results: Array<CategoryResult | undefined>): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Renders one category's results as a text block, or null if the category
|
|
40
|
+
* wasn't touched at all (so callers can skip it from the final summary).
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatCategoryResult(label: string, result: CategoryResult | undefined): string | null;
|
|
43
|
+
export interface GraphIndexes {
|
|
44
|
+
taskToNode: Map<string, string>;
|
|
45
|
+
statusToRule: Map<string, string>;
|
|
46
|
+
statusToTransition: Map<string, string>;
|
|
47
|
+
nodePairToEdge: Map<string, string>;
|
|
48
|
+
}
|
|
49
|
+
/** Builds the natural-key -> internal-id lookup maps from a fetched graph. */
|
|
50
|
+
export declare function buildGraphIndexes(graph: WorkflowGraph): GraphIndexes;
|
|
51
|
+
/** Empty indexes for contexts with no prior graph (e.g. a brand-new workflow). */
|
|
52
|
+
export declare function emptyGraphIndexes(): GraphIndexes;
|
|
53
|
+
/** Keeps only the last entry per key — "last write wins" for a request array. */
|
|
54
|
+
export declare function dedupeByKey<T>(items: T[], keyFn: (item: T) => string): T[];
|
|
55
|
+
/**
|
|
56
|
+
* Pulls the human-readable `error` field out of the JSON body embedded in
|
|
57
|
+
* the Error thrown by PacaAPIWorkflowClient's request() helper (formatted as
|
|
58
|
+
* `API request failed: <status> <statusText> - <jsonBody>`), falling back to
|
|
59
|
+
* the raw message if the body isn't parseable JSON with that shape.
|
|
60
|
+
*/
|
|
61
|
+
export declare function extractApiErrorMessage(err: unknown): string;
|
|
62
|
+
export interface OrchestrationContext {
|
|
63
|
+
client: PacaAPIWorkflowClient;
|
|
64
|
+
projectId: string;
|
|
65
|
+
workflowId: string;
|
|
66
|
+
}
|
|
67
|
+
export declare const RECOMMENDED_NODE_GAP_X = 300;
|
|
68
|
+
export declare const RECOMMENDED_NODE_GAP_Y = 200;
|
|
69
|
+
export interface PositionedNode {
|
|
70
|
+
taskId: string;
|
|
71
|
+
posX: number;
|
|
72
|
+
posY: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Warns (without changing anything) when any two of `positions` are closer
|
|
76
|
+
* than the recommended gap on BOTH axes at once — i.e. they'd read as
|
|
77
|
+
* crowded/overlapping on the canvas rather than as clearly separate nodes.
|
|
78
|
+
* Purely advisory: prose-only spacing guidance in the tool description was
|
|
79
|
+
* not enough on its own (agents kept picking small, evenly-spaced values
|
|
80
|
+
* like 200px regardless of the stated minimum), so this gives concrete,
|
|
81
|
+
* per-call feedback the agent can act on — but it never moves a node itself;
|
|
82
|
+
* position is still entirely the agent's call (see NodeSetInput).
|
|
83
|
+
*/
|
|
84
|
+
export declare function checkNodeSpacing(positions: PositionedNode[]): string | null;
|
|
85
|
+
export declare function applyNodes(ctx: OrchestrationContext, set: NodeSetInput[] | undefined, remove: string[] | undefined, indexes: GraphIndexes): Promise<{
|
|
86
|
+
removed: CategoryResult;
|
|
87
|
+
set: CategoryResult;
|
|
88
|
+
}>;
|
|
89
|
+
export declare function applyStatusRules(ctx: OrchestrationContext, set: StatusRuleSetInput[] | undefined, remove: string[] | undefined, indexes: GraphIndexes): Promise<{
|
|
90
|
+
removed: CategoryResult;
|
|
91
|
+
set: CategoryResult;
|
|
92
|
+
}>;
|
|
93
|
+
export declare function applyStatusTransitions(ctx: OrchestrationContext, set: StatusTransitionSetInput[] | undefined, remove: string[] | undefined, indexes: GraphIndexes): Promise<{
|
|
94
|
+
removed: CategoryResult;
|
|
95
|
+
set: CategoryResult;
|
|
96
|
+
}>;
|
|
97
|
+
export declare function applyEdges(ctx: OrchestrationContext, add: EdgeRefInput[] | undefined, remove: EdgeRefInput[] | undefined, indexes: GraphIndexes): Promise<{
|
|
98
|
+
removed: CategoryResult;
|
|
99
|
+
added: CategoryResult;
|
|
100
|
+
}>;
|
|
101
|
+
//# sourceMappingURL=workflow-orchestration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-orchestration.d.ts","sourceRoot":"","sources":["../../src/tools/workflow-orchestration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
function emptyCategoryResult() {
|
|
2
|
+
return { items: [], hasFailure: false };
|
|
3
|
+
}
|
|
4
|
+
function pushResult(result, item) {
|
|
5
|
+
result.items.push(item);
|
|
6
|
+
if (item.outcome === "failed") {
|
|
7
|
+
result.hasFailure = true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function anyHasFailure(...results) {
|
|
11
|
+
return results.some((r) => r?.hasFailure);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders one category's results as a text block, or null if the category
|
|
15
|
+
* wasn't touched at all (so callers can skip it from the final summary).
|
|
16
|
+
*/
|
|
17
|
+
export function formatCategoryResult(label, result) {
|
|
18
|
+
if (!result || result.items.length === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const counts = {
|
|
22
|
+
created: 0,
|
|
23
|
+
updated: 0,
|
|
24
|
+
removed: 0,
|
|
25
|
+
skipped: 0,
|
|
26
|
+
failed: 0,
|
|
27
|
+
};
|
|
28
|
+
for (const item of result.items) {
|
|
29
|
+
counts[item.outcome]++;
|
|
30
|
+
}
|
|
31
|
+
const parts = [];
|
|
32
|
+
if (counts.created)
|
|
33
|
+
parts.push(`${counts.created} created`);
|
|
34
|
+
if (counts.updated)
|
|
35
|
+
parts.push(`${counts.updated} updated`);
|
|
36
|
+
if (counts.removed)
|
|
37
|
+
parts.push(`${counts.removed} removed`);
|
|
38
|
+
if (counts.skipped)
|
|
39
|
+
parts.push(`${counts.skipped} skipped`);
|
|
40
|
+
if (counts.failed)
|
|
41
|
+
parts.push(`${counts.failed} failed`);
|
|
42
|
+
const lines = [`${label}: ${parts.join(", ")}`];
|
|
43
|
+
for (const item of result.items) {
|
|
44
|
+
if (item.outcome === "failed" || item.outcome === "skipped") {
|
|
45
|
+
lines.push(` - ${item.outcome} (${item.key}): ${item.detail}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return lines.join("\n");
|
|
49
|
+
}
|
|
50
|
+
function nodePairKey(sourceNodeId, targetNodeId) {
|
|
51
|
+
return `${sourceNodeId}|${targetNodeId}`;
|
|
52
|
+
}
|
|
53
|
+
/** Builds the natural-key -> internal-id lookup maps from a fetched graph. */
|
|
54
|
+
export function buildGraphIndexes(graph) {
|
|
55
|
+
const taskToNode = new Map();
|
|
56
|
+
for (const n of graph.nodes) {
|
|
57
|
+
taskToNode.set(n.task_id, n.id);
|
|
58
|
+
}
|
|
59
|
+
const statusToRule = new Map();
|
|
60
|
+
for (const r of graph.status_rules) {
|
|
61
|
+
statusToRule.set(r.status_id, r.id);
|
|
62
|
+
}
|
|
63
|
+
const statusToTransition = new Map();
|
|
64
|
+
for (const t of graph.status_transitions) {
|
|
65
|
+
statusToTransition.set(t.status_id, t.id);
|
|
66
|
+
}
|
|
67
|
+
const nodePairToEdge = new Map();
|
|
68
|
+
for (const e of graph.edges) {
|
|
69
|
+
nodePairToEdge.set(nodePairKey(e.source_node_id, e.target_node_id), e.id);
|
|
70
|
+
}
|
|
71
|
+
return { taskToNode, statusToRule, statusToTransition, nodePairToEdge };
|
|
72
|
+
}
|
|
73
|
+
/** Empty indexes for contexts with no prior graph (e.g. a brand-new workflow). */
|
|
74
|
+
export function emptyGraphIndexes() {
|
|
75
|
+
return {
|
|
76
|
+
taskToNode: new Map(),
|
|
77
|
+
statusToRule: new Map(),
|
|
78
|
+
statusToTransition: new Map(),
|
|
79
|
+
nodePairToEdge: new Map(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** Keeps only the last entry per key — "last write wins" for a request array. */
|
|
83
|
+
export function dedupeByKey(items, keyFn) {
|
|
84
|
+
const map = new Map();
|
|
85
|
+
for (const item of items) {
|
|
86
|
+
map.set(keyFn(item), item);
|
|
87
|
+
}
|
|
88
|
+
return [...map.values()];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Pulls the human-readable `error` field out of the JSON body embedded in
|
|
92
|
+
* the Error thrown by PacaAPIWorkflowClient's request() helper (formatted as
|
|
93
|
+
* `API request failed: <status> <statusText> - <jsonBody>`), falling back to
|
|
94
|
+
* the raw message if the body isn't parseable JSON with that shape.
|
|
95
|
+
*/
|
|
96
|
+
export function extractApiErrorMessage(err) {
|
|
97
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
98
|
+
const jsonStart = message.indexOf("{");
|
|
99
|
+
if (jsonStart === -1) {
|
|
100
|
+
return message;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const parsed = JSON.parse(message.slice(jsonStart));
|
|
104
|
+
if (parsed && typeof parsed.error === "string") {
|
|
105
|
+
return parsed.error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Not JSON (or not the expected shape) — fall through to raw message.
|
|
110
|
+
}
|
|
111
|
+
return message;
|
|
112
|
+
}
|
|
113
|
+
// --- Nodes ---------------------------------------------------------------------
|
|
114
|
+
// Minimum canvas spacing the agent is asked to use between any two nodes.
|
|
115
|
+
// Defined once here and interpolated into both the tool-description text
|
|
116
|
+
// (workflow-tools.ts) and checkNodeSpacing below, so the two can never drift
|
|
117
|
+
// out of sync — X in particular has been adjusted several times based on
|
|
118
|
+
// live feedback (400 -> 600 -> 900 -> 1800 -> back down to 400 as too-wide,
|
|
119
|
+
// halved to 200 with Y, then back up to 300); centralizing it means each
|
|
120
|
+
// adjustment is one constant, not a hunt across strings. Canvas cards are a
|
|
121
|
+
// fixed 256px wide (see apps/web's `w-64` TaskNode in workflow-canvas.tsx).
|
|
122
|
+
export const RECOMMENDED_NODE_GAP_X = 300;
|
|
123
|
+
export const RECOMMENDED_NODE_GAP_Y = 200;
|
|
124
|
+
/**
|
|
125
|
+
* Warns (without changing anything) when any two of `positions` are closer
|
|
126
|
+
* than the recommended gap on BOTH axes at once — i.e. they'd read as
|
|
127
|
+
* crowded/overlapping on the canvas rather than as clearly separate nodes.
|
|
128
|
+
* Purely advisory: prose-only spacing guidance in the tool description was
|
|
129
|
+
* not enough on its own (agents kept picking small, evenly-spaced values
|
|
130
|
+
* like 200px regardless of the stated minimum), so this gives concrete,
|
|
131
|
+
* per-call feedback the agent can act on — but it never moves a node itself;
|
|
132
|
+
* position is still entirely the agent's call (see NodeSetInput).
|
|
133
|
+
*/
|
|
134
|
+
export function checkNodeSpacing(positions) {
|
|
135
|
+
const violations = [];
|
|
136
|
+
for (let i = 0; i < positions.length; i++) {
|
|
137
|
+
for (let j = i + 1; j < positions.length; j++) {
|
|
138
|
+
const a = positions[i];
|
|
139
|
+
const b = positions[j];
|
|
140
|
+
const dx = Math.abs(a.posX - b.posX);
|
|
141
|
+
const dy = Math.abs(a.posY - b.posY);
|
|
142
|
+
if (dx < RECOMMENDED_NODE_GAP_X && dy < RECOMMENDED_NODE_GAP_Y) {
|
|
143
|
+
violations.push({ a, b, dx, dy });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (violations.length === 0) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
violations.sort((v1, v2) => v1.dx + v1.dy - (v2.dx + v2.dy));
|
|
151
|
+
const examples = violations
|
|
152
|
+
.slice(0, 3)
|
|
153
|
+
.map((v) => ` - ${v.a.taskId} (${v.a.posX}, ${v.a.posY}) and ${v.b.taskId} (${v.b.posX}, ${v.b.posY}) — ${v.dx}px apart horizontally, ${v.dy}px apart vertically`);
|
|
154
|
+
const more = violations.length > 3
|
|
155
|
+
? `\n ...and ${violations.length - 3} more pair(s) this close.`
|
|
156
|
+
: "";
|
|
157
|
+
return (`Warning: ${violations.length} pair(s) of these nodes are close enough to visually crowd or overlap on the canvas (need at least ${RECOMMENDED_NODE_GAP_X}px apart horizontally OR ${RECOMMENDED_NODE_GAP_Y}px apart vertically — not both less):\n` +
|
|
158
|
+
`${examples.join("\n")}${more}\n` +
|
|
159
|
+
"These positions were still applied as requested — spread them out further yourself (e.g. call update_workflow again with larger posX/posY differences) if this isn't what you intended.");
|
|
160
|
+
}
|
|
161
|
+
export async function applyNodes(ctx, set, remove, indexes) {
|
|
162
|
+
const { client, projectId, workflowId } = ctx;
|
|
163
|
+
// Each item below targets a distinct taskId (remove is de-duplicated via
|
|
164
|
+
// Set, set via dedupeByKey), so every call reads/writes a different
|
|
165
|
+
// indexes.taskToNode entry — safe to fire concurrently instead of
|
|
166
|
+
// paying for each REST round-trip sequentially.
|
|
167
|
+
const removedResult = emptyCategoryResult();
|
|
168
|
+
await Promise.all([...new Set(remove ?? [])].map(async (taskId) => {
|
|
169
|
+
const nodeId = indexes.taskToNode.get(taskId);
|
|
170
|
+
if (!nodeId) {
|
|
171
|
+
pushResult(removedResult, {
|
|
172
|
+
key: taskId,
|
|
173
|
+
outcome: "skipped",
|
|
174
|
+
detail: "no node exists for this taskId in the workflow",
|
|
175
|
+
});
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
await client.removeWorkflowNode(projectId, workflowId, nodeId);
|
|
180
|
+
indexes.taskToNode.delete(taskId);
|
|
181
|
+
pushResult(removedResult, { key: taskId, outcome: "removed" });
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
pushResult(removedResult, {
|
|
185
|
+
key: taskId,
|
|
186
|
+
outcome: "failed",
|
|
187
|
+
detail: extractApiErrorMessage(err),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}));
|
|
191
|
+
const setResult = emptyCategoryResult();
|
|
192
|
+
await Promise.all(dedupeByKey(set ?? [], (i) => i.taskId).map(async (item) => {
|
|
193
|
+
const existingNodeId = indexes.taskToNode.get(item.taskId);
|
|
194
|
+
try {
|
|
195
|
+
if (existingNodeId) {
|
|
196
|
+
await client.updateWorkflowNode(projectId, workflowId, existingNodeId, { pos_x: item.posX, pos_y: item.posY });
|
|
197
|
+
pushResult(setResult, { key: item.taskId, outcome: "updated" });
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const node = await client.addWorkflowNode(projectId, workflowId, {
|
|
201
|
+
task_id: item.taskId,
|
|
202
|
+
pos_x: item.posX,
|
|
203
|
+
pos_y: item.posY,
|
|
204
|
+
});
|
|
205
|
+
indexes.taskToNode.set(item.taskId, node.id);
|
|
206
|
+
pushResult(setResult, { key: item.taskId, outcome: "created" });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
pushResult(setResult, {
|
|
211
|
+
key: item.taskId,
|
|
212
|
+
outcome: "failed",
|
|
213
|
+
detail: extractApiErrorMessage(err),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}));
|
|
217
|
+
return { removed: removedResult, set: setResult };
|
|
218
|
+
}
|
|
219
|
+
// --- Status rules ----------------------------------------------------------------
|
|
220
|
+
export async function applyStatusRules(ctx, set, remove, indexes) {
|
|
221
|
+
const { client, projectId, workflowId } = ctx;
|
|
222
|
+
// See applyNodes: each item targets a distinct statusId, so these run
|
|
223
|
+
// concurrently instead of one REST round-trip at a time.
|
|
224
|
+
const removedResult = emptyCategoryResult();
|
|
225
|
+
await Promise.all([...new Set(remove ?? [])].map(async (statusId) => {
|
|
226
|
+
const ruleId = indexes.statusToRule.get(statusId);
|
|
227
|
+
if (!ruleId) {
|
|
228
|
+
pushResult(removedResult, {
|
|
229
|
+
key: statusId,
|
|
230
|
+
outcome: "skipped",
|
|
231
|
+
detail: "no status rule exists for this statusId in the workflow",
|
|
232
|
+
});
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
await client.removeWorkflowStatusRule(projectId, workflowId, ruleId);
|
|
237
|
+
indexes.statusToRule.delete(statusId);
|
|
238
|
+
pushResult(removedResult, { key: statusId, outcome: "removed" });
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
pushResult(removedResult, {
|
|
242
|
+
key: statusId,
|
|
243
|
+
outcome: "failed",
|
|
244
|
+
detail: extractApiErrorMessage(err),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}));
|
|
248
|
+
const setResult = emptyCategoryResult();
|
|
249
|
+
await Promise.all(dedupeByKey(set ?? [], (i) => i.statusId).map(async (item) => {
|
|
250
|
+
const existed = indexes.statusToRule.has(item.statusId);
|
|
251
|
+
try {
|
|
252
|
+
const rule = await client.setWorkflowStatusRule(projectId, workflowId, {
|
|
253
|
+
status_id: item.statusId,
|
|
254
|
+
assignee_member_id: item.assigneeMemberId,
|
|
255
|
+
});
|
|
256
|
+
indexes.statusToRule.set(item.statusId, rule.id);
|
|
257
|
+
pushResult(setResult, {
|
|
258
|
+
key: item.statusId,
|
|
259
|
+
outcome: existed ? "updated" : "created",
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
pushResult(setResult, {
|
|
264
|
+
key: item.statusId,
|
|
265
|
+
outcome: "failed",
|
|
266
|
+
detail: extractApiErrorMessage(err),
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}));
|
|
270
|
+
return { removed: removedResult, set: setResult };
|
|
271
|
+
}
|
|
272
|
+
// --- Status transitions ------------------------------------------------------------
|
|
273
|
+
export async function applyStatusTransitions(ctx, set, remove, indexes) {
|
|
274
|
+
const { client, projectId, workflowId } = ctx;
|
|
275
|
+
// See applyNodes: each item targets a distinct statusId, so these run
|
|
276
|
+
// concurrently instead of one REST round-trip at a time.
|
|
277
|
+
const removedResult = emptyCategoryResult();
|
|
278
|
+
await Promise.all([...new Set(remove ?? [])].map(async (statusId) => {
|
|
279
|
+
const transitionId = indexes.statusToTransition.get(statusId);
|
|
280
|
+
if (!transitionId) {
|
|
281
|
+
pushResult(removedResult, {
|
|
282
|
+
key: statusId,
|
|
283
|
+
outcome: "skipped",
|
|
284
|
+
detail: "no status transition exists for this statusId in the workflow",
|
|
285
|
+
});
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
await client.removeWorkflowStatusTransition(projectId, workflowId, transitionId);
|
|
290
|
+
indexes.statusToTransition.delete(statusId);
|
|
291
|
+
pushResult(removedResult, { key: statusId, outcome: "removed" });
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
pushResult(removedResult, {
|
|
295
|
+
key: statusId,
|
|
296
|
+
outcome: "failed",
|
|
297
|
+
detail: extractApiErrorMessage(err),
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}));
|
|
301
|
+
const setResult = emptyCategoryResult();
|
|
302
|
+
await Promise.all(dedupeByKey(set ?? [], (i) => i.statusId).map(async (item) => {
|
|
303
|
+
const existed = indexes.statusToTransition.has(item.statusId);
|
|
304
|
+
try {
|
|
305
|
+
const transition = await client.setWorkflowStatusTransition(projectId, workflowId, {
|
|
306
|
+
status_id: item.statusId,
|
|
307
|
+
next_status_id: item.nextStatusId ?? null,
|
|
308
|
+
});
|
|
309
|
+
indexes.statusToTransition.set(item.statusId, transition.id);
|
|
310
|
+
pushResult(setResult, {
|
|
311
|
+
key: item.statusId,
|
|
312
|
+
outcome: existed ? "updated" : "created",
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
pushResult(setResult, {
|
|
317
|
+
key: item.statusId,
|
|
318
|
+
outcome: "failed",
|
|
319
|
+
detail: extractApiErrorMessage(err),
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}));
|
|
323
|
+
return { removed: removedResult, set: setResult };
|
|
324
|
+
}
|
|
325
|
+
// --- Edges -----------------------------------------------------------------------
|
|
326
|
+
function edgeLabel(ref) {
|
|
327
|
+
return `${ref.sourceTaskId} -> ${ref.targetTaskId}`;
|
|
328
|
+
}
|
|
329
|
+
export async function applyEdges(ctx, add, remove, indexes) {
|
|
330
|
+
const { client, projectId, workflowId } = ctx;
|
|
331
|
+
// See applyNodes: each item targets a distinct node pair (both add and
|
|
332
|
+
// remove are de-duplicated via dedupeByKey), so these run concurrently
|
|
333
|
+
// instead of one REST round-trip at a time.
|
|
334
|
+
const removedResult = emptyCategoryResult();
|
|
335
|
+
await Promise.all(dedupeByKey(remove ?? [], edgeLabel).map(async (ref) => {
|
|
336
|
+
const sourceNodeId = indexes.taskToNode.get(ref.sourceTaskId);
|
|
337
|
+
const targetNodeId = indexes.taskToNode.get(ref.targetTaskId);
|
|
338
|
+
if (!sourceNodeId || !targetNodeId) {
|
|
339
|
+
pushResult(removedResult, {
|
|
340
|
+
key: edgeLabel(ref),
|
|
341
|
+
outcome: "skipped",
|
|
342
|
+
detail: "one or both tasks have no node in this workflow — edge is already effectively gone",
|
|
343
|
+
});
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const edgeId = indexes.nodePairToEdge.get(nodePairKey(sourceNodeId, targetNodeId));
|
|
347
|
+
if (!edgeId) {
|
|
348
|
+
pushResult(removedResult, {
|
|
349
|
+
key: edgeLabel(ref),
|
|
350
|
+
outcome: "skipped",
|
|
351
|
+
detail: "no edge exists between these tasks",
|
|
352
|
+
});
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
await client.removeWorkflowEdge(projectId, workflowId, edgeId);
|
|
357
|
+
indexes.nodePairToEdge.delete(nodePairKey(sourceNodeId, targetNodeId));
|
|
358
|
+
pushResult(removedResult, { key: edgeLabel(ref), outcome: "removed" });
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
pushResult(removedResult, {
|
|
362
|
+
key: edgeLabel(ref),
|
|
363
|
+
outcome: "failed",
|
|
364
|
+
detail: extractApiErrorMessage(err),
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}));
|
|
368
|
+
const addedResult = emptyCategoryResult();
|
|
369
|
+
await Promise.all(dedupeByKey(add ?? [], edgeLabel).map(async (ref) => {
|
|
370
|
+
const sourceNodeId = indexes.taskToNode.get(ref.sourceTaskId);
|
|
371
|
+
const targetNodeId = indexes.taskToNode.get(ref.targetTaskId);
|
|
372
|
+
if (!sourceNodeId || !targetNodeId) {
|
|
373
|
+
const missing = !sourceNodeId ? ref.sourceTaskId : ref.targetTaskId;
|
|
374
|
+
pushResult(addedResult, {
|
|
375
|
+
key: edgeLabel(ref),
|
|
376
|
+
outcome: "failed",
|
|
377
|
+
detail: `taskId ${missing} has no node in this workflow — add it via nodes first`,
|
|
378
|
+
});
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
try {
|
|
382
|
+
const edge = await client.addWorkflowEdge(projectId, workflowId, {
|
|
383
|
+
source_node_id: sourceNodeId,
|
|
384
|
+
target_node_id: targetNodeId,
|
|
385
|
+
});
|
|
386
|
+
indexes.nodePairToEdge.set(nodePairKey(sourceNodeId, targetNodeId), edge.id);
|
|
387
|
+
pushResult(addedResult, { key: edgeLabel(ref), outcome: "created" });
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
pushResult(addedResult, {
|
|
391
|
+
key: edgeLabel(ref),
|
|
392
|
+
outcome: "failed",
|
|
393
|
+
detail: extractApiErrorMessage(err),
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}));
|
|
397
|
+
return { removed: removedResult, added: addedResult };
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=workflow-orchestration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-orchestration.js","sourceRoot":"","sources":["../../src/tools/workflow-orchestration.ts"],"names":[],"mappings":"AAyDA,SAAS,mBAAmB;IAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,MAAsB,EAAE,IAAgB;IAC3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAC1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,GAAG,OAA0C;IAE7C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,KAAa,EACb,MAAkC;IAElC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAgC;QAC3C,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACT,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAWD,SAAS,WAAW,CAAC,YAAoB,EAAE,YAAoB;IAC9D,OAAO,GAAG,YAAY,IAAI,YAAY,EAAE,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACrD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACpC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC1C,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AACzE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB;IAChC,OAAO;QACN,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,kBAAkB,EAAE,IAAI,GAAG,EAAE;QAC7B,cAAc,EAAE,IAAI,GAAG,EAAE;KACzB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAI,KAAU,EAAE,KAA0B;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY;IAClD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACpD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,sEAAsE;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAQD,kFAAkF;AAElF,0EAA0E;AAC1E,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAQ1C;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA2B;IAC3D,MAAM,UAAU,GAKX,EAAE,CAAC;IACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,sBAAsB,IAAI,EAAE,GAAG,sBAAsB,EAAE,CAAC;gBAChE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;IACF,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,UAAU;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CACH,CAAC,CAAC,EAAE,EAAE,CACL,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,EAAE,qBAAqB,CACvJ,CAAC;IACH,MAAM,IAAI,GACT,UAAU,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,cAAc,UAAU,CAAC,MAAM,GAAG,CAAC,2BAA2B;QAChE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CACN,YAAY,UAAU,CAAC,MAAM,sGAAsG,sBAAsB,4BAA4B,sBAAsB,yCAAyC;QACpP,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI;QACjC,yLAAyL,CACzL,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,GAAyB,EACzB,GAA+B,EAC/B,MAA4B,EAC5B,OAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAE9C,yEAAyE;IACzE,oEAAoE;IACpE,kEAAkE;IAClE,gDAAgD;IAChD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC5C,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,MAAM;gBACX,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,gDAAgD;aACxD,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,MAAM;gBACX,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC;YACJ,IAAI,cAAc,EAAE,CAAC;gBACpB,MAAM,MAAM,CAAC,kBAAkB,CAC9B,SAAS,EACT,UAAU,EACV,cAAc,EACd,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CACtC,CAAC;gBACF,UAAU,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE;oBAChE,OAAO,EAAE,IAAI,CAAC,MAAM;oBACpB,KAAK,EAAE,IAAI,CAAC,IAAI;oBAChB,KAAK,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;gBACH,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7C,UAAU,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,SAAS,EAAE;gBACrB,GAAG,EAAE,IAAI,CAAC,MAAM;gBAChB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,oFAAoF;AAEpF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,GAAyB,EACzB,GAAqC,EACrC,MAA4B,EAC5B,OAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAE9C,sEAAsE;IACtE,yDAAyD;IACzD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC5C,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,yDAAyD;aACjE,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACrE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE;gBACtE,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;aACzC,CAAC,CAAC;YACH,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,UAAU,CAAC,SAAS,EAAE;gBACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aACxC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,SAAS,EAAE;gBACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,sFAAsF;AAEtF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,GAAyB,EACzB,GAA2C,EAC3C,MAA4B,EAC5B,OAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAE9C,sEAAsE;IACtE,yDAAyD;IACzD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC5C,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EACL,+DAA+D;aAChE,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,8BAA8B,CAC1C,SAAS,EACT,UAAU,EACV,YAAY,CACZ,CAAC;YACF,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAC1D,SAAS,EACT,UAAU,EACV;gBACC,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,cAAc,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;aACzC,CACD,CAAC;YACF,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;YAC7D,UAAU,CAAC,SAAS,EAAE;gBACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aACxC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,SAAS,EAAE;gBACrB,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,oFAAoF;AAEpF,SAAS,SAAS,CAAC,GAAiB;IACnC,OAAO,GAAG,GAAG,CAAC,YAAY,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,GAAyB,EACzB,GAA+B,EAC/B,MAAkC,EAClC,OAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAE9C,uEAAuE;IACvE,uEAAuE;IACvE,4CAA4C;IAC5C,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC5C,MAAM,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,SAAS;gBAClB,MAAM,EACL,oFAAoF;aACrF,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CACxC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CACvC,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,oCAAoC;aAC5C,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;YACvE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,aAAa,EAAE;gBACzB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,OAAO,CAAC,GAAG,CAChB,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACnD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YACpE,UAAU,CAAC,WAAW,EAAE;gBACvB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,UAAU,OAAO,wDAAwD;aACjF,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE;gBAChE,cAAc,EAAE,YAAY;gBAC5B,cAAc,EAAE,YAAY;aAC5B,CAAC,CAAC;YACH,OAAO,CAAC,cAAc,CAAC,GAAG,CACzB,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,EACvC,IAAI,CAAC,EAAE,CACP,CAAC;YACF,UAAU,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,WAAW,EAAE;gBACvB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { PacaAPIWorkflowClient } from "../api/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Returns all automation-workflow MCP tools.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getWorkflowTools(): Tool[];
|
|
7
|
+
/**
|
|
8
|
+
* Handles automation-workflow tool calls.
|
|
9
|
+
*/
|
|
10
|
+
export declare function handleWorkflowTool(toolName: string, args: any, workflowClient: PacaAPIWorkflowClient): Promise<any>;
|
|
11
|
+
//# sourceMappingURL=workflow-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../../src/tools/workflow-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAyL7D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,EAAE,CAyLzC;AA0ED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,cAAc,EAAE,qBAAqB,GACnC,OAAO,CAAC,GAAG,CAAC,CAiBd"}
|