@doxhub/mcp-server 0.2.0 → 0.2.2
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/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +78 -36
- package/dist/api-client.js.map +1 -1
- package/dist/auth/mcp-token-verify.d.ts.map +1 -1
- package/dist/auth/mcp-token-verify.js +8 -0
- package/dist/auth/mcp-token-verify.js.map +1 -1
- package/dist/cli/list-agents.d.ts +2 -0
- package/dist/cli/list-agents.d.ts.map +1 -0
- package/dist/cli/list-agents.js +61 -0
- package/dist/cli/list-agents.js.map +1 -0
- package/dist/cli/list-projects.d.ts.map +1 -1
- package/dist/cli/list-projects.js +16 -6
- package/dist/cli/list-projects.js.map +1 -1
- package/dist/cli/list-skills.d.ts +2 -0
- package/dist/cli/list-skills.d.ts.map +1 -0
- package/dist/cli/list-skills.js +61 -0
- package/dist/cli/list-skills.js.map +1 -0
- package/dist/cli/list-workflows.d.ts +2 -0
- package/dist/cli/list-workflows.d.ts.map +1 -0
- package/dist/cli/list-workflows.js +45 -0
- package/dist/cli/list-workflows.js.map +1 -0
- package/dist/cli/list-workspaces.d.ts.map +1 -1
- package/dist/cli/list-workspaces.js +12 -5
- package/dist/cli/list-workspaces.js.map +1 -1
- package/dist/cli/load-workflow.d.ts +6 -0
- package/dist/cli/load-workflow.d.ts.map +1 -0
- package/dist/cli/load-workflow.js +92 -0
- package/dist/cli/load-workflow.js.map +1 -0
- package/dist/cli/setup.js +3 -0
- package/dist/cli/setup.js.map +1 -1
- package/dist/index.js +44 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-agents.d.ts +19 -0
- package/dist/tools/list-agents.d.ts.map +1 -0
- package/dist/tools/list-agents.js +75 -0
- package/dist/tools/list-agents.js.map +1 -0
- package/dist/tools/list-projects.d.ts.map +1 -1
- package/dist/tools/list-projects.js +9 -2
- package/dist/tools/list-projects.js.map +1 -1
- package/dist/tools/list-skills.d.ts +19 -0
- package/dist/tools/list-skills.d.ts.map +1 -0
- package/dist/tools/list-skills.js +75 -0
- package/dist/tools/list-skills.js.map +1 -0
- package/dist/tools/list-workflows.d.ts +21 -0
- package/dist/tools/list-workflows.d.ts.map +1 -0
- package/dist/tools/list-workflows.js +73 -0
- package/dist/tools/list-workflows.js.map +1 -0
- package/dist/tools/list-workspaces.d.ts.map +1 -1
- package/dist/tools/list-workspaces.js +7 -2
- package/dist/tools/list-workspaces.js.map +1 -1
- package/dist/tools/load-workflow.d.ts +26 -0
- package/dist/tools/load-workflow.d.ts.map +1 -0
- package/dist/tools/load-workflow.js +87 -0
- package/dist/tools/load-workflow.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { getApiClient } from '../api-client.js';
|
|
2
|
+
export const listSkillsTool = {
|
|
3
|
+
name: 'list_skills',
|
|
4
|
+
description: 'Lists all skills (shared knowledge and best practices) in a workspace. Skills contain reusable documentation for AI agents.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
workspaceId: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'Workspace ID. If not provided, uses your default workspace.',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export async function listSkills(auth, args) {
|
|
16
|
+
const apiClient = getApiClient();
|
|
17
|
+
const workspaceId = args.workspaceId || auth.workspaceId;
|
|
18
|
+
if (!workspaceId) {
|
|
19
|
+
return {
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: 'text',
|
|
23
|
+
text: 'No workspace specified. Please provide a workspaceId or select a default workspace.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const allProjects = await apiClient.getProjects(workspaceId);
|
|
30
|
+
// Filter for skills (system projects with systemType='skills')
|
|
31
|
+
const skills = allProjects.filter((p) => p.isSystem && p.systemType === 'skills');
|
|
32
|
+
if (!skills || skills.length === 0) {
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: 'No skills found in this workspace. Skills are shared knowledge and best practices for AI agents.',
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Format as a clean summary
|
|
43
|
+
let output = `📚 Skills in Workspace (${skills.length} total)\n\n`;
|
|
44
|
+
skills.forEach((skill, index) => {
|
|
45
|
+
output += `${index + 1}. **${skill.name}**\n`;
|
|
46
|
+
output += ` ID: ${skill.id}\n`;
|
|
47
|
+
output += ` Files: ${skill.fileCount || 0} skill file${skill.fileCount !== 1 ? 's' : ''}\n`;
|
|
48
|
+
if (skill.description) {
|
|
49
|
+
output += ` Description: ${skill.description}\n`;
|
|
50
|
+
}
|
|
51
|
+
output += '\n';
|
|
52
|
+
});
|
|
53
|
+
output += `💡 Use list_files with a skill ID to see skill documentation.`;
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: output,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: 'text',
|
|
68
|
+
text: `Error listing skills: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
isError: true,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=list-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-skills.js","sourceRoot":"","sources":["../../src/tools/list-skills.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,6HAA6H;IAC1I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6DAA6D;aAC3E;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAiB,EAAE,IAA8B;IAChF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;IAEzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qFAAqF;iBAC5F;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE7D,+DAA+D;QAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;QAEvF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kGAAkG;qBACzG;iBACF;aACF,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,GAAG,2BAA2B,MAAM,CAAC,MAAM,aAAa,CAAC;QAEnE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC;YAC9C,MAAM,IAAI,UAAU,KAAK,CAAC,EAAE,IAAI,CAAC;YACjC,MAAM,IAAI,aAAa,KAAK,CAAC,SAAS,IAAI,CAAC,cAAc,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC9F,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,IAAI,mBAAmB,KAAK,CAAC,WAAW,IAAI,CAAC;YACrD,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,+DAA+D,CAAC;QAE1E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;iBAC1F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AuthContext } from '../types.js';
|
|
2
|
+
export declare const listWorkflowsTool: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: string;
|
|
7
|
+
properties: {
|
|
8
|
+
workspaceId: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare function listWorkflows(_auth: AuthContext, args: any): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: string;
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=list-workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workflows.d.ts","sourceRoot":"","sources":["../../src/tools/list-workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAa7B,CAAC;AAEF,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG;;;;;GAyEhE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DoxHubApiClient } from '../api-client.js';
|
|
2
|
+
import { getCurrentProfile } from '../cli/credentials.js';
|
|
3
|
+
export const listWorkflowsTool = {
|
|
4
|
+
name: 'list_workflows',
|
|
5
|
+
description: 'List all workflows in a workspace. Workflows are named collections of tags that load multiple resources at once. Returns workflow names, descriptions, and tag counts.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
workspaceId: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'Optional: workspace ID to list workflows from (uses default if not specified)',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
export async function listWorkflows(_auth, args) {
|
|
17
|
+
const { workspaceId } = args || {};
|
|
18
|
+
const profile = getCurrentProfile();
|
|
19
|
+
if (!profile || !profile.accessToken) {
|
|
20
|
+
throw new Error('Not authenticated');
|
|
21
|
+
}
|
|
22
|
+
const client = new DoxHubApiClient(profile.apiUrl || 'https://api.doxhub.io/api/v1', profile.accessToken);
|
|
23
|
+
// Determine workspace ID
|
|
24
|
+
let targetWorkspaceId = workspaceId;
|
|
25
|
+
if (!targetWorkspaceId) {
|
|
26
|
+
// Get user's workspaces
|
|
27
|
+
const workspacesResponse = await client.get('/workspaces');
|
|
28
|
+
const workspaces = workspacesResponse.data || [];
|
|
29
|
+
if (workspaces.length === 0) {
|
|
30
|
+
throw new Error('No workspaces found');
|
|
31
|
+
}
|
|
32
|
+
targetWorkspaceId = workspaces[0].id;
|
|
33
|
+
}
|
|
34
|
+
// Fetch workflows
|
|
35
|
+
const response = await client.get(`/workspaces/${targetWorkspaceId}/workflows`);
|
|
36
|
+
const workflows = response.data || [];
|
|
37
|
+
if (workflows.length === 0) {
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: JSON.stringify({
|
|
43
|
+
message: 'No workflows found in this workspace',
|
|
44
|
+
workspaceId: targetWorkspaceId,
|
|
45
|
+
workflows: [],
|
|
46
|
+
}, null, 2),
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Format workflows for display
|
|
52
|
+
const formattedWorkflows = workflows.map((w) => ({
|
|
53
|
+
id: w.id,
|
|
54
|
+
name: w.name,
|
|
55
|
+
description: w.description || null,
|
|
56
|
+
tagCount: w.tagCount || 0,
|
|
57
|
+
createdAt: w.createdAt,
|
|
58
|
+
updatedAt: w.updatedAt,
|
|
59
|
+
}));
|
|
60
|
+
return {
|
|
61
|
+
content: [
|
|
62
|
+
{
|
|
63
|
+
type: 'text',
|
|
64
|
+
text: JSON.stringify({
|
|
65
|
+
message: `Found ${workflows.length} workflow(s) in workspace`,
|
|
66
|
+
workspaceId: targetWorkspaceId,
|
|
67
|
+
workflows: formattedWorkflows,
|
|
68
|
+
}, null, 2),
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=list-workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-workflows.js","sourceRoot":"","sources":["../../src/tools/list-workflows.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,wKAAwK;IAC1K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+EAA+E;aAC7F;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB,EAAE,IAAS;IAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IAEnC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,8BAA8B,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1G,yBAAyB;IACzB,IAAI,iBAAiB,GAAG,WAAW,CAAC;IACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAgD,aAAa,CAAC,CAAC;QAC1G,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC;QAEjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAkB,eAAe,iBAAiB,YAAY,CAAC,CAAC;IACjG,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAEtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,sCAAsC;wBAC/C,WAAW,EAAE,iBAAiB;wBAC9B,SAAS,EAAE,EAAE;qBACd,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAClC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC;QACzB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,SAAS,SAAS,CAAC,MAAM,2BAA2B;oBAC7D,WAAW,EAAE,iBAAiB;oBAC9B,SAAS,EAAE,kBAAkB;iBAC9B,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-workspaces.d.ts","sourceRoot":"","sources":["../../src/tools/list-workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,eAAO,MAAM,kBAAkB;;;;;;;;CAS9B,CAAC;AAEF,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG;;;;;
|
|
1
|
+
{"version":3,"file":"list-workspaces.d.ts","sourceRoot":"","sources":["../../src/tools/list-workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,eAAO,MAAM,kBAAkB;;;;;;;;CAS9B,CAAC;AAEF,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG;;;;;GA4CjE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { listWorkspaces as listWorkspacesQuery } from '../queries/workspace-queries.js';
|
|
2
2
|
export const listWorkspacesTool = {
|
|
3
3
|
name: 'list_workspaces',
|
|
4
|
-
description: 'Lists all workspaces you have access to with your role.
|
|
4
|
+
description: 'Lists all workspaces you have access to with your role. Each workspace contains projects, agents, skills, tags, and workflows.',
|
|
5
5
|
inputSchema: {
|
|
6
6
|
type: 'object',
|
|
7
7
|
properties: {},
|
|
@@ -32,7 +32,12 @@ export async function listWorkspaces(auth, _args) {
|
|
|
32
32
|
output += ` Created: ${workspace.createdAt?.substring(0, 10) || 'Unknown'}\n`;
|
|
33
33
|
output += '\n';
|
|
34
34
|
});
|
|
35
|
-
output += `💡
|
|
35
|
+
output += `💡 Explore your workspace:\n`;
|
|
36
|
+
output += ` • list_projects - See documentation projects\n`;
|
|
37
|
+
output += ` • list_agents - See AI agent configurations\n`;
|
|
38
|
+
output += ` • list_skills - See skills library\n`;
|
|
39
|
+
output += ` • list_tags - See all tags\n`;
|
|
40
|
+
output += ` • list_workflows - See available workflows`;
|
|
36
41
|
return {
|
|
37
42
|
content: [
|
|
38
43
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-workspaces.js","sourceRoot":"","sources":["../../src/tools/list-workspaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAExF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"list-workspaces.js","sourceRoot":"","sources":["../../src/tools/list-workspaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAExF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,gIAAgI;IAClI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAiB,EAAE,KAAU;IAChE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE;QAC9C,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAE5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sBAAsB;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,GAAG,uBAAuB,UAAU,CAAC,MAAM,aAAa,CAAC;IAEnE,UAAU,CAAC,OAAO,CAAC,CAAC,SAAc,EAAE,KAAa,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,SAAS,CAAC,IAAI,MAAM,CAAC;QAClD,MAAM,IAAI,UAAU,SAAS,CAAC,EAAE,IAAI,CAAC;QACrC,MAAM,IAAI,YAAY,SAAS,CAAC,IAAI,IAAI,CAAC;QACzC,MAAM,IAAI,eAAe,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,IAAI,CAAC;QAChF,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,8BAA8B,CAAC;IACzC,MAAM,IAAI,mDAAmD,CAAC;IAC9D,MAAM,IAAI,kDAAkD,CAAC;IAC7D,MAAM,IAAI,yCAAyC,CAAC;IACpD,MAAM,IAAI,iCAAiC,CAAC;IAC5C,MAAM,IAAI,+CAA+C,CAAC;IAE1D,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AuthContext } from '../types.js';
|
|
2
|
+
export declare const loadWorkflowTool: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: string;
|
|
7
|
+
properties: {
|
|
8
|
+
workflowId: {
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
workspaceId: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
required: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare function loadWorkflow(_auth: AuthContext, args: any): Promise<{
|
|
21
|
+
content: {
|
|
22
|
+
type: string;
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=load-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/load-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAkB5B,CAAC;AAEF,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG;;;;;GAgF/D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { DoxHubApiClient } from '../api-client.js';
|
|
2
|
+
import { getCurrentProfile } from '../cli/credentials.js';
|
|
3
|
+
export const loadWorkflowTool = {
|
|
4
|
+
name: 'load_workflow',
|
|
5
|
+
description: 'Load all resources (files, agents, skills) associated with a workflow. Returns all files that have ALL of the workflow\'s tags (AND logic), grouped by project. Use this to quickly load everything you need for a specific task or context.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
workflowId: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'Workflow ID to load',
|
|
12
|
+
},
|
|
13
|
+
workspaceId: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: 'Optional: workspace ID (uses default if not specified)',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
required: ['workflowId'],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export async function loadWorkflow(_auth, args) {
|
|
22
|
+
const { workflowId, workspaceId } = args || {};
|
|
23
|
+
if (!workflowId) {
|
|
24
|
+
throw new Error('workflowId is required');
|
|
25
|
+
}
|
|
26
|
+
const profile = getCurrentProfile();
|
|
27
|
+
if (!profile || !profile.accessToken) {
|
|
28
|
+
throw new Error('Not authenticated');
|
|
29
|
+
}
|
|
30
|
+
const client = new DoxHubApiClient(profile.apiUrl || 'https://api.doxhub.io/api/v1', profile.accessToken);
|
|
31
|
+
// Determine workspace ID
|
|
32
|
+
let targetWorkspaceId = workspaceId;
|
|
33
|
+
if (!targetWorkspaceId) {
|
|
34
|
+
// Get user's workspaces
|
|
35
|
+
const workspacesResponse = await client.get('/workspaces');
|
|
36
|
+
const workspaces = workspacesResponse.data || [];
|
|
37
|
+
if (workspaces.length === 0) {
|
|
38
|
+
throw new Error('No workspaces found');
|
|
39
|
+
}
|
|
40
|
+
targetWorkspaceId = workspaces[0].id;
|
|
41
|
+
}
|
|
42
|
+
// Load workflow and its resources
|
|
43
|
+
const response = await client.get(`/workspaces/${targetWorkspaceId}/workflows/${workflowId}/load`);
|
|
44
|
+
const result = response.data;
|
|
45
|
+
const { workflow, files, tagDetails } = result;
|
|
46
|
+
// Format tag details
|
|
47
|
+
const formattedTags = tagDetails.map((t) => ({
|
|
48
|
+
id: t.id,
|
|
49
|
+
value: t.value,
|
|
50
|
+
color: t.color,
|
|
51
|
+
}));
|
|
52
|
+
// Group files by project
|
|
53
|
+
const filesByProject = {};
|
|
54
|
+
files.forEach((file) => {
|
|
55
|
+
const projectId = file.projectId || 'unknown';
|
|
56
|
+
if (!filesByProject[projectId]) {
|
|
57
|
+
filesByProject[projectId] = [];
|
|
58
|
+
}
|
|
59
|
+
filesByProject[projectId].push({
|
|
60
|
+
id: file.id,
|
|
61
|
+
title: file.title,
|
|
62
|
+
path: file.path,
|
|
63
|
+
size: file.size,
|
|
64
|
+
status: file.status,
|
|
65
|
+
updatedAt: file.updatedAt,
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: 'text',
|
|
72
|
+
text: JSON.stringify({
|
|
73
|
+
message: `Loaded workflow "${workflow.name}" with ${files.length} file(s)`,
|
|
74
|
+
workflow: {
|
|
75
|
+
id: workflow.id,
|
|
76
|
+
name: workflow.name,
|
|
77
|
+
description: workflow.description || null,
|
|
78
|
+
tags: formattedTags,
|
|
79
|
+
},
|
|
80
|
+
fileCount: files.length,
|
|
81
|
+
filesByProject,
|
|
82
|
+
}, null, 2),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=load-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-workflow.js","sourceRoot":"","sources":["../../src/tools/load-workflow.ts"],"names":[],"mappings":"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"}
|