@vncsleal/quillby 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/bin/quillby-mcp +12 -0
  4. package/config/context.json +1 -0
  5. package/config/memory.json +1 -0
  6. package/config/rss_sources.txt +2 -0
  7. package/dist/agent.d.ts +21 -0
  8. package/dist/agent.js +61 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/agents/compose.d.ts +2 -0
  11. package/dist/agents/compose.js +40 -0
  12. package/dist/agents/compose.js.map +1 -0
  13. package/dist/agents/discover.d.ts +15 -0
  14. package/dist/agents/discover.js +39 -0
  15. package/dist/agents/discover.js.map +1 -0
  16. package/dist/agents/harvest.d.ts +31 -0
  17. package/dist/agents/harvest.js +100 -0
  18. package/dist/agents/harvest.js.map +1 -0
  19. package/dist/agents/onboard.d.ts +14 -0
  20. package/dist/agents/onboard.js +88 -0
  21. package/dist/agents/onboard.js.map +1 -0
  22. package/dist/agents/seeds.d.ts +34 -0
  23. package/dist/agents/seeds.js +64 -0
  24. package/dist/agents/seeds.js.map +1 -0
  25. package/dist/cli.d.ts +44 -0
  26. package/dist/cli.js +233 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config.d.ts +22 -0
  29. package/dist/config.js +44 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/extractors/content.d.ts +13 -0
  32. package/dist/extractors/content.js +93 -0
  33. package/dist/extractors/content.js.map +1 -0
  34. package/dist/extractors/reddit.d.ts +7 -0
  35. package/dist/extractors/reddit.js +69 -0
  36. package/dist/extractors/reddit.js.map +1 -0
  37. package/dist/extractors/rss.d.ts +4 -0
  38. package/dist/extractors/rss.js +58 -0
  39. package/dist/extractors/rss.js.map +1 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +139 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/init.d.ts +1 -0
  44. package/dist/init.js +192 -0
  45. package/dist/init.js.map +1 -0
  46. package/dist/llm.d.ts +2 -0
  47. package/dist/llm.js +11 -0
  48. package/dist/llm.js.map +1 -0
  49. package/dist/mcp/server.d.ts +1 -0
  50. package/dist/mcp/server.js +1278 -0
  51. package/dist/mcp/server.js.map +1 -0
  52. package/dist/output/feedback.d.ts +51 -0
  53. package/dist/output/feedback.js +78 -0
  54. package/dist/output/feedback.js.map +1 -0
  55. package/dist/output/structures.d.ts +5 -0
  56. package/dist/output/structures.js +121 -0
  57. package/dist/output/structures.js.map +1 -0
  58. package/dist/types.d.ts +305 -0
  59. package/dist/types.js +74 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +63 -0
@@ -0,0 +1,305 @@
1
+ import { z } from "zod";
2
+ export declare const UserContextSchema: z.ZodObject<{
3
+ name: z.ZodOptional<z.ZodString>;
4
+ role: z.ZodString;
5
+ industry: z.ZodString;
6
+ topics: z.ZodArray<z.ZodString, "many">;
7
+ voice: z.ZodString;
8
+ audienceDescription: z.ZodString;
9
+ contentGoals: z.ZodArray<z.ZodString, "many">;
10
+ excludeTopics: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
11
+ platforms: z.ZodArray<z.ZodString, "many">;
12
+ }, "strip", z.ZodTypeAny, {
13
+ role: string;
14
+ industry: string;
15
+ topics: string[];
16
+ voice: string;
17
+ audienceDescription: string;
18
+ contentGoals: string[];
19
+ excludeTopics: string[];
20
+ platforms: string[];
21
+ name?: string | undefined;
22
+ }, {
23
+ role: string;
24
+ industry: string;
25
+ topics: string[];
26
+ voice: string;
27
+ audienceDescription: string;
28
+ contentGoals: string[];
29
+ platforms: string[];
30
+ name?: string | undefined;
31
+ excludeTopics?: string[] | undefined;
32
+ }>;
33
+ export type UserContext = z.infer<typeof UserContextSchema>;
34
+ export declare const UserMemorySchema: z.ZodObject<{
35
+ voiceExamples: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ voiceExamples: string[];
38
+ }, {
39
+ voiceExamples?: string[] | undefined;
40
+ }>;
41
+ export type UserMemory = z.infer<typeof UserMemorySchema>;
42
+ export declare const RssItemSchema: z.ZodObject<{
43
+ id: z.ZodString;
44
+ source: z.ZodString;
45
+ title: z.ZodString;
46
+ link: z.ZodString;
47
+ snippet: z.ZodString;
48
+ publishedAt: z.ZodOptional<z.ZodString>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ link: string;
51
+ id: string;
52
+ source: string;
53
+ title: string;
54
+ snippet: string;
55
+ publishedAt?: string | undefined;
56
+ }, {
57
+ link: string;
58
+ id: string;
59
+ source: string;
60
+ title: string;
61
+ snippet: string;
62
+ publishedAt?: string | undefined;
63
+ }>;
64
+ export type RssItem = z.infer<typeof RssItemSchema>;
65
+ export declare const EnrichedArticleSchema: z.ZodObject<{
66
+ id: z.ZodString;
67
+ source: z.ZodString;
68
+ title: z.ZodString;
69
+ link: z.ZodString;
70
+ snippet: z.ZodString;
71
+ enrichedContent: z.ZodString;
72
+ publishedAt: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ link: string;
75
+ id: string;
76
+ source: string;
77
+ title: string;
78
+ snippet: string;
79
+ enrichedContent: string;
80
+ publishedAt?: string | undefined;
81
+ }, {
82
+ link: string;
83
+ id: string;
84
+ source: string;
85
+ title: string;
86
+ snippet: string;
87
+ enrichedContent: string;
88
+ publishedAt?: string | undefined;
89
+ }>;
90
+ export type EnrichedArticle = z.infer<typeof EnrichedArticleSchema>;
91
+ export declare const CardInputSchema: z.ZodObject<{
92
+ title: z.ZodString;
93
+ source: z.ZodString;
94
+ link: z.ZodString;
95
+ thesis: z.ZodString;
96
+ relevanceScore: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
97
+ relevanceReason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
98
+ keyInsights: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
99
+ insightOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
100
+ takeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
101
+ angleOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
102
+ hookOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
103
+ wireframeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
104
+ trendTags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
105
+ transposabilityHint: z.ZodDefault<z.ZodOptional<z.ZodString>>;
106
+ }, "strip", z.ZodTypeAny, {
107
+ link: string;
108
+ source: string;
109
+ title: string;
110
+ thesis: string;
111
+ relevanceScore: number;
112
+ relevanceReason: string;
113
+ keyInsights: string[];
114
+ insightOptions: string[];
115
+ takeOptions: string[];
116
+ angleOptions: string[];
117
+ hookOptions: string[];
118
+ wireframeOptions: string[];
119
+ trendTags: string[];
120
+ transposabilityHint: string;
121
+ }, {
122
+ link: string;
123
+ source: string;
124
+ title: string;
125
+ thesis: string;
126
+ relevanceScore?: number | undefined;
127
+ relevanceReason?: string | undefined;
128
+ keyInsights?: string[] | undefined;
129
+ insightOptions?: string[] | undefined;
130
+ takeOptions?: string[] | undefined;
131
+ angleOptions?: string[] | undefined;
132
+ hookOptions?: string[] | undefined;
133
+ wireframeOptions?: string[] | undefined;
134
+ trendTags?: string[] | undefined;
135
+ transposabilityHint?: string | undefined;
136
+ }>;
137
+ export type CardInput = z.infer<typeof CardInputSchema>;
138
+ export declare const StructureCardSchema: z.ZodObject<{
139
+ title: z.ZodString;
140
+ source: z.ZodString;
141
+ link: z.ZodString;
142
+ thesis: z.ZodString;
143
+ relevanceScore: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
144
+ relevanceReason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
145
+ keyInsights: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
146
+ insightOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
147
+ takeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
148
+ angleOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
149
+ hookOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
150
+ wireframeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
151
+ trendTags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
152
+ transposabilityHint: z.ZodDefault<z.ZodOptional<z.ZodString>>;
153
+ } & {
154
+ id: z.ZodNumber;
155
+ references: z.ZodArray<z.ZodString, "many">;
156
+ }, "strip", z.ZodTypeAny, {
157
+ link: string;
158
+ id: number;
159
+ source: string;
160
+ title: string;
161
+ thesis: string;
162
+ relevanceScore: number;
163
+ relevanceReason: string;
164
+ keyInsights: string[];
165
+ insightOptions: string[];
166
+ takeOptions: string[];
167
+ angleOptions: string[];
168
+ hookOptions: string[];
169
+ wireframeOptions: string[];
170
+ trendTags: string[];
171
+ transposabilityHint: string;
172
+ references: string[];
173
+ }, {
174
+ link: string;
175
+ id: number;
176
+ source: string;
177
+ title: string;
178
+ thesis: string;
179
+ references: string[];
180
+ relevanceScore?: number | undefined;
181
+ relevanceReason?: string | undefined;
182
+ keyInsights?: string[] | undefined;
183
+ insightOptions?: string[] | undefined;
184
+ takeOptions?: string[] | undefined;
185
+ angleOptions?: string[] | undefined;
186
+ hookOptions?: string[] | undefined;
187
+ wireframeOptions?: string[] | undefined;
188
+ trendTags?: string[] | undefined;
189
+ transposabilityHint?: string | undefined;
190
+ }>;
191
+ export type StructureCard = z.infer<typeof StructureCardSchema>;
192
+ export declare const HarvestBundleSchema: z.ZodObject<{
193
+ generatedAt: z.ZodString;
194
+ dateLabel: z.ZodString;
195
+ cards: z.ZodArray<z.ZodObject<{
196
+ title: z.ZodString;
197
+ source: z.ZodString;
198
+ link: z.ZodString;
199
+ thesis: z.ZodString;
200
+ relevanceScore: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
201
+ relevanceReason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
202
+ keyInsights: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
203
+ insightOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
204
+ takeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
205
+ angleOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
206
+ hookOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
207
+ wireframeOptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
208
+ trendTags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
209
+ transposabilityHint: z.ZodDefault<z.ZodOptional<z.ZodString>>;
210
+ } & {
211
+ id: z.ZodNumber;
212
+ references: z.ZodArray<z.ZodString, "many">;
213
+ }, "strip", z.ZodTypeAny, {
214
+ link: string;
215
+ id: number;
216
+ source: string;
217
+ title: string;
218
+ thesis: string;
219
+ relevanceScore: number;
220
+ relevanceReason: string;
221
+ keyInsights: string[];
222
+ insightOptions: string[];
223
+ takeOptions: string[];
224
+ angleOptions: string[];
225
+ hookOptions: string[];
226
+ wireframeOptions: string[];
227
+ trendTags: string[];
228
+ transposabilityHint: string;
229
+ references: string[];
230
+ }, {
231
+ link: string;
232
+ id: number;
233
+ source: string;
234
+ title: string;
235
+ thesis: string;
236
+ references: string[];
237
+ relevanceScore?: number | undefined;
238
+ relevanceReason?: string | undefined;
239
+ keyInsights?: string[] | undefined;
240
+ insightOptions?: string[] | undefined;
241
+ takeOptions?: string[] | undefined;
242
+ angleOptions?: string[] | undefined;
243
+ hookOptions?: string[] | undefined;
244
+ wireframeOptions?: string[] | undefined;
245
+ trendTags?: string[] | undefined;
246
+ transposabilityHint?: string | undefined;
247
+ }>, "many">;
248
+ }, "strip", z.ZodTypeAny, {
249
+ generatedAt: string;
250
+ dateLabel: string;
251
+ cards: {
252
+ link: string;
253
+ id: number;
254
+ source: string;
255
+ title: string;
256
+ thesis: string;
257
+ relevanceScore: number;
258
+ relevanceReason: string;
259
+ keyInsights: string[];
260
+ insightOptions: string[];
261
+ takeOptions: string[];
262
+ angleOptions: string[];
263
+ hookOptions: string[];
264
+ wireframeOptions: string[];
265
+ trendTags: string[];
266
+ transposabilityHint: string;
267
+ references: string[];
268
+ }[];
269
+ }, {
270
+ generatedAt: string;
271
+ dateLabel: string;
272
+ cards: {
273
+ link: string;
274
+ id: number;
275
+ source: string;
276
+ title: string;
277
+ thesis: string;
278
+ references: string[];
279
+ relevanceScore?: number | undefined;
280
+ relevanceReason?: string | undefined;
281
+ keyInsights?: string[] | undefined;
282
+ insightOptions?: string[] | undefined;
283
+ takeOptions?: string[] | undefined;
284
+ angleOptions?: string[] | undefined;
285
+ hookOptions?: string[] | undefined;
286
+ wireframeOptions?: string[] | undefined;
287
+ trendTags?: string[] | undefined;
288
+ transposabilityHint?: string | undefined;
289
+ }[];
290
+ }>;
291
+ export type HarvestBundle = z.infer<typeof HarvestBundleSchema>;
292
+ export declare const DraftSchema: z.ZodObject<{
293
+ platform: z.ZodString;
294
+ content: z.ZodString;
295
+ cardId: z.ZodOptional<z.ZodNumber>;
296
+ }, "strip", z.ZodTypeAny, {
297
+ platform: string;
298
+ content: string;
299
+ cardId?: number | undefined;
300
+ }, {
301
+ platform: string;
302
+ content: string;
303
+ cardId?: number | undefined;
304
+ }>;
305
+ export type Draft = z.infer<typeof DraftSchema>;
package/dist/types.js ADDED
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ // ─── User context (built during onboarding) ───────────────────────────────────
3
+ export const UserContextSchema = z.object({
4
+ name: z.string().optional(),
5
+ role: z.string().describe("Professional role (founder, marketer, engineer, etc.)"),
6
+ industry: z.string().describe("Industry or niche"),
7
+ topics: z.array(z.string()).describe("Main topics to write about"),
8
+ voice: z.string().describe("Voice description — e.g. 'direct, analytical, no corporate speak'"),
9
+ audienceDescription: z.string().describe("Who the content is for"),
10
+ contentGoals: z.array(z.string()).describe("What content should achieve"),
11
+ excludeTopics: z.array(z.string()).optional().default([]).describe("Topics to avoid"),
12
+ platforms: z.array(z.string()).describe("Publishing platforms: linkedin, x, blog, newsletter, medium"),
13
+ });
14
+ // ─── User memory (grows over time, agent-written) ─────────────────────────────
15
+ export const UserMemorySchema = z.object({
16
+ voiceExamples: z.array(z.string()).default([]).describe("Approved posts in their voice — accumulated over sessions"),
17
+ });
18
+ // ─── RSS feed item ────────────────────────────────────────────────────────────
19
+ export const RssItemSchema = z.object({
20
+ id: z.string(),
21
+ source: z.string(),
22
+ title: z.string(),
23
+ link: z.string(),
24
+ snippet: z.string(),
25
+ publishedAt: z.string().optional(),
26
+ });
27
+ // ─── Enriched article (what quillby_fetch_articles returns to the host) ─────────
28
+ // The host model reads these and does its own relevance scoring + card generation.
29
+ export const EnrichedArticleSchema = z.object({
30
+ id: z.string(),
31
+ source: z.string(),
32
+ title: z.string(),
33
+ link: z.string(),
34
+ snippet: z.string(),
35
+ enrichedContent: z.string().describe("Full article text extracted from the URL, up to 6000 chars"),
36
+ publishedAt: z.string().optional(),
37
+ });
38
+ // ─── Structure card ───────────────────────────────────────────────────────────
39
+ // Cards are generated by the HOST model, then saved via quillby_save_cards.
40
+ // All fields except title/source/link/thesis are optional to accommodate
41
+ // hosts that provide varying levels of analysis.
42
+ export const CardInputSchema = z.object({
43
+ title: z.string(),
44
+ source: z.string(),
45
+ link: z.string(),
46
+ thesis: z.string().describe("Core insight in one sentence"),
47
+ relevanceScore: z.number().min(0).max(10).optional().default(0),
48
+ relevanceReason: z.string().optional().default(""),
49
+ keyInsights: z.array(z.string()).optional().default([]),
50
+ insightOptions: z.array(z.string()).optional().default([]),
51
+ takeOptions: z.array(z.string()).optional().default([]),
52
+ angleOptions: z.array(z.string()).optional().default([]),
53
+ hookOptions: z.array(z.string()).optional().default([]),
54
+ wireframeOptions: z.array(z.string()).optional().default([]),
55
+ trendTags: z.array(z.string()).optional().default([]),
56
+ transposabilityHint: z.string().optional().default(""),
57
+ });
58
+ export const StructureCardSchema = CardInputSchema.extend({
59
+ id: z.number(),
60
+ references: z.array(z.string()),
61
+ });
62
+ // ─── Harvest bundle ───────────────────────────────────────────────────────────
63
+ export const HarvestBundleSchema = z.object({
64
+ generatedAt: z.string(),
65
+ dateLabel: z.string(),
66
+ cards: z.array(StructureCardSchema),
67
+ });
68
+ // ─── Draft ────────────────────────────────────────────────────────────────────
69
+ export const DraftSchema = z.object({
70
+ platform: z.string(),
71
+ content: z.string(),
72
+ cardId: z.number().optional(),
73
+ });
74
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@vncsleal/quillby",
3
+ "version": "0.3.0",
4
+ "description": "Quillby — AI copywriting assistant. Reads the internet and writes content in your voice.",
5
+ "license": "MIT",
6
+ "author": "Vinicius Leal",
7
+ "keywords": [
8
+ "rss",
9
+ "agents",
10
+ "mcp",
11
+ "ai",
12
+ "content",
13
+ "research",
14
+ "typescript"
15
+ ],
16
+ "engines": {
17
+ "node": ">=20"
18
+ },
19
+ "main": "dist/mcp/server.js",
20
+ "bin": {
21
+ "quillby-mcp": "./bin/quillby-mcp"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "bin",
26
+ "config",
27
+ "README.md"
28
+ ],
29
+ "type": "module",
30
+ "scripts": {
31
+ "prepare": "npm run build",
32
+ "mcp": "node dist/mcp/server.js",
33
+ "mcp:dev": "tsx src/mcp/server.ts",
34
+ "mcp:start": "node dist/mcp/server.js",
35
+ "mcp:http": "QUILLBY_TRANSPORT=http node dist/mcp/server.js",
36
+ "mcp:http:dev": "QUILLBY_TRANSPORT=http tsx src/mcp/server.ts",
37
+ "dev": "tsx src/mcp/server.ts",
38
+ "clean": "rm -rf .cache dist",
39
+ "clean:all": "rm -rf .cache dist output",
40
+ "build": "tsc",
41
+ "typecheck": "tsc --noEmit",
42
+ "test": "vitest run tests/unit",
43
+ "test:unit": "vitest run tests/unit",
44
+ "test:integration": "npm run build && vitest run tests/integration",
45
+ "test:all": "npm run build && vitest run"
46
+ },
47
+ "dependencies": {
48
+ "@modelcontextprotocol/sdk": "^1.9.0",
49
+ "@mozilla/readability": "^0.6.0",
50
+ "chalk": "^5.6.2",
51
+ "dotenv": "^16.4.5",
52
+ "jsdom": "^29.0.0",
53
+ "rss-parser": "^3.13.0",
54
+ "zod": "^3.24.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/jsdom": "^28.0.0",
58
+ "@types/node": "^20.11.24",
59
+ "tsx": "^4.7.2",
60
+ "typescript": "^5.3.3",
61
+ "vitest": "^4.1.0"
62
+ }
63
+ }