noverload-mcp 0.9.1 → 0.9.3
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/client.d.ts +588 -30
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +408 -115
- package/dist/client.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/resources/index.d.ts +6 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/tools/implementations/explore-topic.d.ts.map +1 -1
- package/dist/tools/implementations/explore-topic.js +41 -22
- package/dist/tools/implementations/explore-topic.js.map +1 -1
- package/dist/tools/implementations/extract-frameworks.d.ts.map +1 -1
- package/dist/tools/implementations/extract-frameworks.js +91 -29
- package/dist/tools/implementations/extract-frameworks.js.map +1 -1
- package/dist/tools/implementations/get-content.d.ts.map +1 -1
- package/dist/tools/implementations/get-content.js +3 -1
- package/dist/tools/implementations/get-content.js.map +1 -1
- package/dist/tools/implementations/list-content.d.ts.map +1 -1
- package/dist/tools/implementations/list-content.js +3 -1
- package/dist/tools/implementations/list-content.js.map +1 -1
- package/dist/tools/implementations/list-tags.d.ts +3 -0
- package/dist/tools/implementations/list-tags.d.ts.map +1 -0
- package/dist/tools/implementations/list-tags.js +115 -0
- package/dist/tools/implementations/list-tags.js.map +1 -0
- package/dist/tools/implementations/manage-tags.d.ts +5 -0
- package/dist/tools/implementations/manage-tags.d.ts.map +1 -0
- package/dist/tools/implementations/manage-tags.js +157 -0
- package/dist/tools/implementations/manage-tags.js.map +1 -0
- package/dist/tools/implementations/save-content.d.ts.map +1 -1
- package/dist/tools/implementations/save-content.js +43 -4
- package/dist/tools/implementations/save-content.js.map +1 -1
- package/dist/tools/implementations/swipe-file.d.ts +4 -0
- package/dist/tools/implementations/swipe-file.d.ts.map +1 -0
- package/dist/tools/implementations/swipe-file.js +82 -0
- package/dist/tools/implementations/swipe-file.js.map +1 -0
- package/dist/tools/index.d.ts +4 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -3
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -76,7 +76,9 @@ export const listSavedContentTool = {
|
|
|
76
76
|
responseText += `**Summary:** ${summaryObj.one_sentence}\n`;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
if (item.createdAt) {
|
|
80
|
+
responseText += `**Saved:** ${new Date(item.createdAt).toLocaleDateString()}\n`;
|
|
81
|
+
}
|
|
80
82
|
responseText += '\n---\n\n';
|
|
81
83
|
});
|
|
82
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/list-content.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"list-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/list-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tags.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/list-tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,IAuH1B,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const listTagsTool = {
|
|
3
|
+
name: "list_tags",
|
|
4
|
+
description: "List all available tags for organizing content. Returns both system tags (pre-defined categories) and custom tags (user-created). Use this to see what tags exist before adding tags to content or filtering searches.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
showUsage: {
|
|
9
|
+
type: "boolean",
|
|
10
|
+
description: "Include usage counts showing how many content items have each tag",
|
|
11
|
+
default: true,
|
|
12
|
+
},
|
|
13
|
+
filter: {
|
|
14
|
+
type: "string",
|
|
15
|
+
enum: ["all", "system", "custom"],
|
|
16
|
+
description: "Filter to show all tags, only system tags, or only custom tags",
|
|
17
|
+
default: "all",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
required: [],
|
|
21
|
+
},
|
|
22
|
+
modifies: false,
|
|
23
|
+
handler: async (client, args) => {
|
|
24
|
+
const schema = z.object({
|
|
25
|
+
showUsage: z.boolean().optional().default(true),
|
|
26
|
+
filter: z.enum(["all", "system", "custom"]).optional().default("all"),
|
|
27
|
+
});
|
|
28
|
+
const params = schema.parse(args);
|
|
29
|
+
const tagsResponse = await client.listTags();
|
|
30
|
+
// Filter based on preference
|
|
31
|
+
let displayTags = tagsResponse.tags;
|
|
32
|
+
if (params.filter === "system") {
|
|
33
|
+
displayTags = tagsResponse.grouped?.system || tagsResponse.tags.filter((t) => t.isSystem);
|
|
34
|
+
}
|
|
35
|
+
else if (params.filter === "custom") {
|
|
36
|
+
displayTags = tagsResponse.grouped?.custom || tagsResponse.tags.filter((t) => !t.isSystem);
|
|
37
|
+
}
|
|
38
|
+
// Sort by usage count if showing usage, otherwise alphabetically
|
|
39
|
+
if (params.showUsage) {
|
|
40
|
+
displayTags = [...displayTags].sort((a, b) => (b.usageCount || 0) - (a.usageCount || 0));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
displayTags = [...displayTags].sort((a, b) => a.name.localeCompare(b.name));
|
|
44
|
+
}
|
|
45
|
+
// Build response text
|
|
46
|
+
let responseText = `# Available Tags\n\n`;
|
|
47
|
+
if (params.filter === "all") {
|
|
48
|
+
responseText += `**Total:** ${tagsResponse.total} tags (${tagsResponse.grouped?.system.length || 0} system, ${tagsResponse.grouped?.custom.length || 0} custom)\n\n`;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
responseText += `**Showing:** ${displayTags.length} ${params.filter} tags\n\n`;
|
|
52
|
+
}
|
|
53
|
+
if (displayTags.length === 0) {
|
|
54
|
+
responseText += `No ${params.filter === "all" ? "" : params.filter + " "}tags found.\n`;
|
|
55
|
+
responseText += `\nTip: Use \`create_tag\` to create custom tags for organizing your content.`;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Group by category for system tags
|
|
59
|
+
if (params.filter !== "custom") {
|
|
60
|
+
const byCategory = new Map();
|
|
61
|
+
for (const tag of displayTags) {
|
|
62
|
+
const category = tag.category || (tag.isSystem ? "Uncategorized" : "Custom");
|
|
63
|
+
if (!byCategory.has(category)) {
|
|
64
|
+
byCategory.set(category, []);
|
|
65
|
+
}
|
|
66
|
+
byCategory.get(category).push(tag);
|
|
67
|
+
}
|
|
68
|
+
// Sort categories
|
|
69
|
+
const sortedCategories = [...byCategory.entries()].sort((a, b) => {
|
|
70
|
+
// Custom category goes last
|
|
71
|
+
if (a[0] === "Custom")
|
|
72
|
+
return 1;
|
|
73
|
+
if (b[0] === "Custom")
|
|
74
|
+
return -1;
|
|
75
|
+
return a[0].localeCompare(b[0]);
|
|
76
|
+
});
|
|
77
|
+
for (const [category, categoryTags] of sortedCategories) {
|
|
78
|
+
responseText += `## ${category}\n`;
|
|
79
|
+
for (const tag of categoryTags) {
|
|
80
|
+
const usageText = params.showUsage && tag.usageCount ? ` (${tag.usageCount})` : "";
|
|
81
|
+
const typeIcon = tag.isSystem ? "🔵" : "🟢";
|
|
82
|
+
responseText += `${typeIcon} \`${tag.name}\`${usageText}\n`;
|
|
83
|
+
}
|
|
84
|
+
responseText += `\n`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Just list custom tags
|
|
89
|
+
responseText += `## Your Custom Tags\n`;
|
|
90
|
+
for (const tag of displayTags) {
|
|
91
|
+
const usageText = params.showUsage && tag.usageCount ? ` (${tag.usageCount})` : "";
|
|
92
|
+
responseText += `🟢 \`${tag.name}\`${usageText}\n`;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
responseText += `---\n`;
|
|
96
|
+
responseText += `🔵 = System tag (AI-assigned) | 🟢 = Custom tag (user-created)\n`;
|
|
97
|
+
responseText += `\nTip: Use \`search_content\` with \`tags\` parameter to filter content by tags.`;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
content: [
|
|
101
|
+
{
|
|
102
|
+
type: "text",
|
|
103
|
+
text: responseText,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
data: {
|
|
107
|
+
tags: displayTags,
|
|
108
|
+
total: displayTags.length,
|
|
109
|
+
systemCount: tagsResponse.grouped?.system.length || 0,
|
|
110
|
+
customCount: tagsResponse.grouped?.custom.length || 0,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=list-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tags.js","sourceRoot":"","sources":["../../../src/tools/implementations/list-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-tags.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/manage-tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,WAAW,EAAE,IA+DzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,IA2D5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,IAiD3B,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const addTagsTool = {
|
|
3
|
+
name: "add_tags",
|
|
4
|
+
description: "Add one or more tags to a saved content item. Tags help organize content for later retrieval (e.g., 'swipe-file', 'great-hook', 'copywriting'). If a tag doesn't exist, it will be created automatically.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
contentId: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "The ID of the content to tag",
|
|
11
|
+
},
|
|
12
|
+
tags: {
|
|
13
|
+
type: "array",
|
|
14
|
+
items: { type: "string" },
|
|
15
|
+
description: "Tag names to add (e.g., ['swipe-file', 'copywriting']). Tags will be created if they don't exist.",
|
|
16
|
+
minItems: 1,
|
|
17
|
+
maxItems: 10,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
required: ["contentId", "tags"],
|
|
21
|
+
},
|
|
22
|
+
modifies: true,
|
|
23
|
+
handler: async (client, args) => {
|
|
24
|
+
const schema = z.object({
|
|
25
|
+
contentId: z.string().uuid(),
|
|
26
|
+
tags: z.array(z.string().min(1).max(50)).min(1).max(10),
|
|
27
|
+
});
|
|
28
|
+
const params = schema.parse(args);
|
|
29
|
+
const result = await client.addTagsToContent(params.contentId, params.tags);
|
|
30
|
+
let responseText = `# Tags Added\n\n`;
|
|
31
|
+
if (result.addedTags.length > 0) {
|
|
32
|
+
responseText += `**Content ID:** \`${result.contentId}\`\n\n`;
|
|
33
|
+
responseText += `## Added Tags\n`;
|
|
34
|
+
for (const tag of result.addedTags) {
|
|
35
|
+
const createdLabel = tag.created ? " (new)" : "";
|
|
36
|
+
responseText += `- \`${tag.name}\`${createdLabel}\n`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (result.errors && result.errors.length > 0) {
|
|
40
|
+
responseText += `\n## Errors\n`;
|
|
41
|
+
for (const error of result.errors) {
|
|
42
|
+
responseText += `- ${error}\n`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
responseText += `\n---\n`;
|
|
46
|
+
responseText += `Tip: Use \`search_content\` with \`tags: ["${params.tags[0]}"]\` to find content with this tag.`;
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: responseText,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
data: result,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export const removeTagsTool = {
|
|
59
|
+
name: "remove_tags",
|
|
60
|
+
description: "Remove one or more tags from a saved content item.",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: {
|
|
64
|
+
contentId: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "The ID of the content to remove tags from",
|
|
67
|
+
},
|
|
68
|
+
tags: {
|
|
69
|
+
type: "array",
|
|
70
|
+
items: { type: "string" },
|
|
71
|
+
description: "Tag names to remove",
|
|
72
|
+
minItems: 1,
|
|
73
|
+
maxItems: 10,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
required: ["contentId", "tags"],
|
|
77
|
+
},
|
|
78
|
+
modifies: true,
|
|
79
|
+
handler: async (client, args) => {
|
|
80
|
+
const schema = z.object({
|
|
81
|
+
contentId: z.string().uuid(),
|
|
82
|
+
tags: z.array(z.string().min(1).max(50)).min(1).max(10),
|
|
83
|
+
});
|
|
84
|
+
const params = schema.parse(args);
|
|
85
|
+
const result = await client.removeTagsFromContent(params.contentId, params.tags);
|
|
86
|
+
let responseText = `# Tags Removed\n\n`;
|
|
87
|
+
if (result.removedTags.length > 0) {
|
|
88
|
+
responseText += `**Content ID:** \`${result.contentId}\`\n\n`;
|
|
89
|
+
responseText += `## Removed Tags\n`;
|
|
90
|
+
for (const tag of result.removedTags) {
|
|
91
|
+
responseText += `- \`${tag}\`\n`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
responseText += `No tags were removed.\n`;
|
|
96
|
+
}
|
|
97
|
+
if (result.errors && result.errors.length > 0) {
|
|
98
|
+
responseText += `\n## Errors\n`;
|
|
99
|
+
for (const error of result.errors) {
|
|
100
|
+
responseText += `- ${error}\n`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: "text",
|
|
107
|
+
text: responseText,
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
data: result,
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
export const createTagTool = {
|
|
115
|
+
name: "create_tag",
|
|
116
|
+
description: "Create a new custom tag for organizing content. Use this to create tags before using them, or let add_tags create them automatically.",
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: "object",
|
|
119
|
+
properties: {
|
|
120
|
+
name: {
|
|
121
|
+
type: "string",
|
|
122
|
+
description: "The name of the tag to create (e.g., 'swipe-file', 'great-hook')",
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
required: ["name"],
|
|
126
|
+
},
|
|
127
|
+
modifies: true,
|
|
128
|
+
handler: async (client, args) => {
|
|
129
|
+
const schema = z.object({
|
|
130
|
+
name: z.string().min(1).max(50),
|
|
131
|
+
});
|
|
132
|
+
const params = schema.parse(args);
|
|
133
|
+
const result = await client.createTag(params.name);
|
|
134
|
+
let responseText = `# Tag ${result.tag.isNew ? "Created" : "Found"}\n\n`;
|
|
135
|
+
responseText += `**Name:** \`${result.tag.name}\`\n`;
|
|
136
|
+
responseText += `**Slug:** \`${result.tag.slug}\`\n`;
|
|
137
|
+
responseText += `**ID:** \`${result.tag.id}\`\n`;
|
|
138
|
+
if (!result.tag.isNew) {
|
|
139
|
+
responseText += `\n*This tag already exists.*\n`;
|
|
140
|
+
}
|
|
141
|
+
responseText += `\n---\n`;
|
|
142
|
+
responseText += `Use this tag with:\n`;
|
|
143
|
+
responseText += `- \`add_tags\` to tag content\n`;
|
|
144
|
+
responseText += `- \`search_content\` with \`tags: ["${result.tag.name}"]\` to filter\n`;
|
|
145
|
+
responseText += `- \`save_content\` with \`tags: ["${result.tag.name}"]\` to tag on save\n`;
|
|
146
|
+
return {
|
|
147
|
+
content: [
|
|
148
|
+
{
|
|
149
|
+
type: "text",
|
|
150
|
+
text: responseText,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
data: result,
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=manage-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-tags.js","sourceRoot":"","sources":["../../../src/tools/implementations/manage-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"save-content.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,IA2E7B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export const saveContentTool = {
|
|
3
3
|
name: "save_content",
|
|
4
|
-
description: "Save a new URL to Noverload for processing",
|
|
4
|
+
description: "Save a new URL to Noverload for processing. Optionally mark as swipe file to trigger craft analysis (hooks, CTAs, storytelling detection).",
|
|
5
5
|
inputSchema: {
|
|
6
6
|
type: "object",
|
|
7
7
|
properties: {
|
|
@@ -9,6 +9,15 @@ export const saveContentTool = {
|
|
|
9
9
|
type: "string",
|
|
10
10
|
description: "URL to save (YouTube, X/Twitter, Reddit, article, or PDF)",
|
|
11
11
|
},
|
|
12
|
+
tags: {
|
|
13
|
+
type: "array",
|
|
14
|
+
items: { type: "string" },
|
|
15
|
+
description: "Optional tags to add immediately (e.g., ['copywriting', 'marketing']). Tags will be created if they don't exist.",
|
|
16
|
+
},
|
|
17
|
+
isSwipeFile: {
|
|
18
|
+
type: "boolean",
|
|
19
|
+
description: "Mark as swipe file to trigger craft analysis (detects hooks, CTAs, storytelling, etc.). Analysis runs after content is processed.",
|
|
20
|
+
},
|
|
12
21
|
},
|
|
13
22
|
required: ["url"],
|
|
14
23
|
},
|
|
@@ -16,17 +25,47 @@ export const saveContentTool = {
|
|
|
16
25
|
handler: async (client, args) => {
|
|
17
26
|
const schema = z.object({
|
|
18
27
|
url: z.string().url(),
|
|
28
|
+
tags: z.array(z.string().min(1).max(50)).optional(),
|
|
29
|
+
isSwipeFile: z.boolean().optional(),
|
|
19
30
|
});
|
|
20
|
-
const { url } = schema.parse(args);
|
|
31
|
+
const { url, tags, isSwipeFile } = schema.parse(args);
|
|
21
32
|
const content = await client.saveContent(url);
|
|
33
|
+
let responseText = content.title
|
|
34
|
+
? `Saved: ${content.title}`
|
|
35
|
+
: `Saved content from: ${new URL(url).hostname}`;
|
|
36
|
+
// If tags provided, add them to the content
|
|
37
|
+
let addedTags = [];
|
|
38
|
+
if (tags && tags.length > 0 && content.id) {
|
|
39
|
+
try {
|
|
40
|
+
const tagResult = await client.addTagsToContent(content.id, tags);
|
|
41
|
+
addedTags = tagResult.addedTags.map((t) => t.name);
|
|
42
|
+
if (addedTags.length > 0) {
|
|
43
|
+
responseText += `\n\nTags added: ${addedTags.map((t) => `\`${t}\``).join(", ")}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
responseText += `\n\n(Note: Failed to add tags, but content was saved)`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// If marked as swipe file, note that analysis will run after processing
|
|
51
|
+
let swipeFileStatus = null;
|
|
52
|
+
if (isSwipeFile && content.id) {
|
|
53
|
+
responseText += `\n\n**Swipe File:** Content will be analyzed for craft elements (hooks, CTAs, storytelling) once processing completes.`;
|
|
54
|
+
responseText += `\nUse \`mark_as_swipe_file\` after processing to trigger the analysis, or it will run automatically.`;
|
|
55
|
+
swipeFileStatus = "pending_analysis";
|
|
56
|
+
}
|
|
22
57
|
return {
|
|
23
58
|
content: [
|
|
24
59
|
{
|
|
25
60
|
type: "text",
|
|
26
|
-
text:
|
|
61
|
+
text: responseText,
|
|
27
62
|
},
|
|
28
63
|
],
|
|
29
|
-
data:
|
|
64
|
+
data: {
|
|
65
|
+
...content,
|
|
66
|
+
addedTags,
|
|
67
|
+
swipeFileStatus,
|
|
68
|
+
},
|
|
30
69
|
};
|
|
31
70
|
},
|
|
32
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,cAAc;IACpB,WAAW,
|
|
1
|
+
{"version":3,"file":"save-content.js","sourceRoot":"","sources":["../../../src/tools/implementations/save-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe-file.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/swipe-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,eAAO,MAAM,mBAAmB,EAAE,IAoDjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,IAmCjC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const markAsSwipeFileTool = {
|
|
3
|
+
name: "mark_as_swipe_file",
|
|
4
|
+
description: "Mark existing content as a swipe file reference. This triggers AI analysis to detect craft elements (hooks, CTAs, storytelling, etc.) and automatically adds relevant swipe file tags.",
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
contentId: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "The ID of the content to mark as swipe file",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
required: ["contentId"],
|
|
14
|
+
},
|
|
15
|
+
modifies: true,
|
|
16
|
+
handler: async (client, args) => {
|
|
17
|
+
const schema = z.object({
|
|
18
|
+
contentId: z.string().uuid(),
|
|
19
|
+
});
|
|
20
|
+
const params = schema.parse(args);
|
|
21
|
+
const result = await client.markAsSwipeFile(params.contentId);
|
|
22
|
+
let responseText = `# Swipe File Analysis\n\n`;
|
|
23
|
+
responseText += `**Content:** ${result.contentTitle || params.contentId}\n\n`;
|
|
24
|
+
if (result.tagsAdded && result.tagsAdded.length > 0) {
|
|
25
|
+
responseText += `## Craft Elements Detected\n\n`;
|
|
26
|
+
for (const tag of result.tagsAdded) {
|
|
27
|
+
responseText += `### ${tag.name} (${Math.round(tag.confidence * 100)}% confidence)\n`;
|
|
28
|
+
responseText += `${tag.reason}\n\n`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
responseText += `No specific craft elements detected, but content is now marked as swipe file.\n`;
|
|
33
|
+
responseText += `You can manually add tags using \`add_tags\`.\n\n`;
|
|
34
|
+
}
|
|
35
|
+
responseText += `---\n`;
|
|
36
|
+
responseText += `**Status:** Marked as swipe file\n`;
|
|
37
|
+
responseText += `**Craft tags added:** ${result.totalTags || 0}\n\n`;
|
|
38
|
+
responseText += `Use \`search_content\` with tags like \`["great-hook"]\` to find this later.`;
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
text: responseText,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
data: result,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export const unmarkSwipeFileTool = {
|
|
51
|
+
name: "unmark_swipe_file",
|
|
52
|
+
description: "Remove the swipe file designation from content. The craft tags will be preserved but the content won't show as a swipe file item.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
contentId: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "The ID of the content to unmark",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: ["contentId"],
|
|
62
|
+
},
|
|
63
|
+
modifies: true,
|
|
64
|
+
handler: async (client, args) => {
|
|
65
|
+
const schema = z.object({
|
|
66
|
+
contentId: z.string().uuid(),
|
|
67
|
+
});
|
|
68
|
+
const params = schema.parse(args);
|
|
69
|
+
const result = await client.unmarkAsSwipeFile(params.contentId);
|
|
70
|
+
const responseText = `Removed swipe file designation from content.\n\nNote: Any craft tags (great-hook, storytelling, etc.) are still attached and can be used for filtering.`;
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: "text",
|
|
75
|
+
text: responseText,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
data: result,
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=swipe-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe-file.js","sourceRoot":"","sources":["../../../src/tools/implementations/swipe-file.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ import { exploreTopicTool } from "./implementations/explore-topic.js";
|
|
|
8
8
|
import { extractFrameworksTool } from "./implementations/extract-frameworks.js";
|
|
9
9
|
import { listActionsTool, completeActionTool } from "./implementations/actions.js";
|
|
10
10
|
import { listGoalsTool } from "./implementations/goals.js";
|
|
11
|
+
import { listTagsTool } from "./implementations/list-tags.js";
|
|
12
|
+
import { addTagsTool, removeTagsTool, createTagTool } from "./implementations/manage-tags.js";
|
|
13
|
+
import { markAsSwipeFileTool, unmarkSwipeFileTool } from "./implementations/swipe-file.js";
|
|
11
14
|
export declare const tools: Tool[];
|
|
12
|
-
export { listSavedContentTool, getContentDetailsTool, searchContentTool, saveContentTool, batchGetContentTool, exploreTopicTool, extractFrameworksTool, listActionsTool, completeActionTool, listGoalsTool, };
|
|
15
|
+
export { listSavedContentTool, getContentDetailsTool, searchContentTool, saveContentTool, batchGetContentTool, exploreTopicTool, extractFrameworksTool, listActionsTool, completeActionTool, listGoalsTool, listTagsTool, createTagTool, addTagsTool, removeTagsTool, markAsSwipeFileTool, unmarkSwipeFileTool, };
|
|
13
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIlC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIlC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAiB3F,eAAO,MAAM,KAAK,EAAE,IAAI,EAoCvB,CAAC;AAGF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// CORE TOOLS - Focused minimal set
|
|
1
|
+
// CORE TOOLS - Focused minimal set
|
|
2
2
|
// Based on user feedback: "Noverload handles storage and retrieval. LLM handles thinking."
|
|
3
3
|
import { listSavedContentTool } from "./implementations/list-content.js";
|
|
4
4
|
import { getContentDetailsTool } from "./implementations/get-content.js";
|
|
@@ -9,6 +9,10 @@ import { exploreTopicTool } from "./implementations/explore-topic.js";
|
|
|
9
9
|
import { extractFrameworksTool } from "./implementations/extract-frameworks.js";
|
|
10
10
|
import { listActionsTool, completeActionTool } from "./implementations/actions.js";
|
|
11
11
|
import { listGoalsTool } from "./implementations/goals.js";
|
|
12
|
+
// TAG TOOLS - For swipe file and content organization workflows
|
|
13
|
+
import { listTagsTool } from "./implementations/list-tags.js";
|
|
14
|
+
import { addTagsTool, removeTagsTool, createTagTool } from "./implementations/manage-tags.js";
|
|
15
|
+
import { markAsSwipeFileTool, unmarkSwipeFileTool } from "./implementations/swipe-file.js";
|
|
12
16
|
// ARCHIVED TOOLS (in _archived/ folder for potential future use):
|
|
13
17
|
// - synthesize.ts: explore_topic does this better
|
|
14
18
|
// - extract-insights.ts: LLMs can extract insights from raw content
|
|
@@ -36,13 +40,21 @@ export const tools = [
|
|
|
36
40
|
exploreTopicTool,
|
|
37
41
|
// 6. Frameworks: "Extract methodologies and frameworks"
|
|
38
42
|
extractFrameworksTool,
|
|
39
|
-
// 7. Save: "Save this URL"
|
|
43
|
+
// 7. Save: "Save this URL" (now with optional tags)
|
|
40
44
|
saveContentTool,
|
|
41
45
|
// 8-10. Actions and goals
|
|
42
46
|
listActionsTool,
|
|
43
47
|
completeActionTool,
|
|
44
48
|
listGoalsTool,
|
|
49
|
+
// 11-14. Tag management (for swipe file workflows)
|
|
50
|
+
listTagsTool,
|
|
51
|
+
createTagTool,
|
|
52
|
+
addTagsTool,
|
|
53
|
+
removeTagsTool,
|
|
54
|
+
// 15-16. Swipe file management (mark content for craft analysis)
|
|
55
|
+
markAsSwipeFileTool,
|
|
56
|
+
unmarkSwipeFileTool,
|
|
45
57
|
];
|
|
46
58
|
// Export individual tools for testing
|
|
47
|
-
export { listSavedContentTool, getContentDetailsTool, searchContentTool, saveContentTool, batchGetContentTool, exploreTopicTool, extractFrameworksTool, listActionsTool, completeActionTool, listGoalsTool, };
|
|
59
|
+
export { listSavedContentTool, getContentDetailsTool, searchContentTool, saveContentTool, batchGetContentTool, exploreTopicTool, extractFrameworksTool, listActionsTool, completeActionTool, listGoalsTool, listTagsTool, createTagTool, addTagsTool, removeTagsTool, markAsSwipeFileTool, unmarkSwipeFileTool, };
|
|
48
60
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,mCAAmC;AACnC,2FAA2F;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,gEAAgE;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,kEAAkE;AAClE,kDAAkD;AAClD,oEAAoE;AACpE,oEAAoE;AACpE,iDAAiD;AACjD,kDAAkD;AAClD,mDAAmD;AACnD,mDAAmD;AACnD,yCAAyC;AACzC,uDAAuD;AACvD,uDAAuD;AACvD,yDAAyD;AACzD,gCAAgC;AAEhC,qCAAqC;AACrC,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B,kCAAkC;IAClC,oBAAoB;IAEpB,mDAAmD;IACnD,iBAAiB;IAEjB,+DAA+D;IAC/D,qBAAqB;IAErB,+CAA+C;IAC/C,mBAAmB;IAEnB,6EAA6E;IAC7E,gBAAgB;IAEhB,wDAAwD;IACxD,qBAAqB;IAErB,oDAAoD;IACpD,eAAe;IAEf,0BAA0B;IAC1B,eAAe;IACf,kBAAkB;IAClB,aAAa;IAEb,mDAAmD;IACnD,YAAY;IACZ,aAAa;IACb,WAAW;IACX,cAAc;IAEd,iEAAiE;IACjE,mBAAmB;IACnB,mBAAmB;CACpB,CAAC;AAEF,sCAAsC;AACtC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
|
package/package.json
CHANGED