trykora 1.0.1 → 1.1.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.
package/dist/bin/kora.js CHANGED
@@ -5,12 +5,6 @@ program
5
5
  .name('kora')
6
6
  .description('Your build-in-public brain — capture learnings, draft tweets')
7
7
  .version('0.1.0');
8
- program
9
- .command('serve')
10
- .description('Start the MCP stdio server (used by Claude Desktop, Cursor, etc.)')
11
- .action(async () => {
12
- await startMcpServer();
13
- });
14
8
  async function main() {
15
9
  // Dynamically import CLI commands to avoid loading heavy deps in serve mode
16
10
  const { registerCommands } = await import('../src/cli/index.js');
@@ -1 +1 @@
1
- {"version":3,"file":"kora.js","sourceRoot":"","sources":["../../bin/kora.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,IAAI;IACjB,4EAA4E;IAC5E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,iDAAiD;AACjD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;IAChC,cAAc,EAAE,CAAC;AACnB,CAAC;KAAM,CAAC;IACN,IAAI,EAAE,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"kora.js","sourceRoot":"","sources":["../../bin/kora.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,KAAK,UAAU,IAAI;IACjB,4EAA4E;IAC5E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,iDAAiD;AACjD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;IAChC,cAAc,EAAE,CAAC;AACnB,CAAC;KAAM,CAAC;IACN,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAUhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAWhD"}
@@ -6,6 +6,7 @@ import { listCommand } from './list.js';
6
6
  import { backupCommand } from './backup.js';
7
7
  import { notionCommand } from './notion.js';
8
8
  import { resetKeyCommand } from './reset-key.js';
9
+ import { syncCommand } from './sync.js';
9
10
  export function registerCommands(program) {
10
11
  showBanner();
11
12
  loginCommand(program);
@@ -15,5 +16,6 @@ export function registerCommands(program) {
15
16
  backupCommand(program);
16
17
  notionCommand(program);
17
18
  resetKeyCommand(program);
19
+ syncCommand(program);
18
20
  }
19
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,UAAU,EAAE,CAAC;IAEb,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,UAAU,EAAE,CAAC;IAEb,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,WAAW,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function syncCommand(program: Command): void;
3
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/cli/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAyC3C"}
@@ -0,0 +1,40 @@
1
+ import chalk from 'chalk';
2
+ import { readConfig } from '../config.js';
3
+ import { getDb, retryUnsynced } from '../storage/sqlite.js';
4
+ import { showHeader, spinner, successBox, errorBox } from '../ui.js';
5
+ export function syncCommand(program) {
6
+ program
7
+ .command('sync')
8
+ .description('Manually sync pending learnings to Notion')
9
+ .action(async () => {
10
+ showHeader('sync');
11
+ const config = readConfig();
12
+ if (!config.key) {
13
+ errorBox('Not logged in. Run `kora login` first.');
14
+ return;
15
+ }
16
+ if (!config.hasNotion) {
17
+ errorBox('Notion not connected. Run `kora notion` first.');
18
+ return;
19
+ }
20
+ const db = getDb();
21
+ const count = db.prepare('SELECT COUNT(*) as n FROM learnings WHERE synced = 0').get().n;
22
+ if (count === 0) {
23
+ successBox('All caught up', 'No pending learnings to sync.');
24
+ return;
25
+ }
26
+ const spin = spinner(`Syncing ${count} learning${count === 1 ? '' : 's'} to Notion...`);
27
+ spin.start();
28
+ await retryUnsynced(config.key, 'manual');
29
+ const remaining = db.prepare('SELECT COUNT(*) as n FROM learnings WHERE synced = 0').get().n;
30
+ if (remaining === 0) {
31
+ spin.succeed('Sync complete!');
32
+ console.log(chalk.dim(` Synced ${count} learning${count === 1 ? '' : 's'} successfully.\n`));
33
+ }
34
+ else {
35
+ spin.fail('Partial sync');
36
+ console.log(chalk.red(` Failed to sync ${remaining} learning${remaining === 1 ? '' : 's'}. Try again later.\n`));
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/cli/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErE,MAAM,UAAU,WAAW,CAAC,OAAgB;IACxC,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACd,QAAQ,CAAC,wCAAwC,CAAC,CAAC;YACnD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACpB,QAAQ,CAAC,gDAAgD,CAAC,CAAC;YAC3D,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,KAAK,GAAI,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,EAAU,CAAC,CAAC,CAAC;QAElG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACd,UAAU,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;YAC7D,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAI,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,EAAU,CAAC,CAAC,CAAC;QAEtG,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;QAClG,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,SAAS,YAAY,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC;QACtH,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,QAyP3F"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,QAwX3F"}
@@ -3,18 +3,21 @@ import { ulid } from 'ulid';
3
3
  import { getDb, retryUnsynced } from '../storage/sqlite.js';
4
4
  import { validateKey } from '../auth.js';
5
5
  function bgSync(key) {
6
- retryUnsynced(key).catch(() => { });
6
+ retryUnsynced(key, 'auto').catch(() => { });
7
7
  }
8
8
  export function registerTools(server, config) {
9
9
  // ── save_learning ──────────────────────────────────────────────
10
- server.tool('save_learning', [
11
- 'Save a learning from the current session.',
12
- 'Use this whenever the user discovers an insight, makes a mistake, ships something, or learns a lesson worth sharing on X.',
13
- 'Call this proactively when you notice something worth capturing do not wait to be asked.',
14
- ].join(' '), {
15
- raw: z.string().describe('The raw insight or learning in the user\'s own words'),
16
- tags: z.array(z.enum(['win', 'mistake', 'lesson', 'shipit'])).optional(),
17
- project: z.string().optional().describe('Current project name'),
10
+ server.registerTool('save_learning', {
11
+ description: [
12
+ 'Save a learning from the current session.',
13
+ 'Use this whenever the user discovers an insight, makes a mistake, ships something, or learns a lesson worth sharing.',
14
+ 'Call this proactively when you notice something worth capturing — do not wait to be asked.',
15
+ ].join(' '),
16
+ inputSchema: {
17
+ raw: z.string().describe('The raw insight or learning in the user\'s own words'),
18
+ tags: z.array(z.enum(['win', 'mistake', 'lesson', 'shipit'])).optional(),
19
+ project: z.string().optional().describe('Current project name'),
20
+ },
18
21
  }, async ({ raw, tags = [], project }) => {
19
22
  await validateKey(config.key, 'save_learning');
20
23
  bgSync(config.key);
@@ -34,19 +37,23 @@ export function registerTools(server, config) {
34
37
  `Tags: ${tags.length ? tags.join(', ') : 'none'}`,
35
38
  `Total learnings: ${total}`,
36
39
  '',
37
- 'You can now:',
38
- '- "draft a tweet from this learning" — turn it into an X post',
39
- '- "list my recent learnings" see everything saved',
40
- '- "build a thread from my last 5 wins" — create a thread',
40
+ 'To create content from this:',
41
+ '"draft a post for X from my last learning"',
42
+ '"draft a LinkedIn post from this"',
43
+ '"draft a Reddit post about this mistake"',
44
+ '"write a Show HN post about what I built today"',
41
45
  ].join('\n'),
42
46
  }],
43
47
  };
44
48
  });
45
49
  // ── list_learnings ─────────────────────────────────────────────
46
- server.tool('list_learnings', 'Browse saved learnings. Returns a list of learnings with IDs for use in draft_tweet and draft_thread.', {
47
- tag: z.enum(['win', 'mistake', 'lesson', 'shipit']).optional(),
48
- limit: z.number().min(1).max(50).optional().default(10),
49
- since: z.string().optional().describe("'7d', '30d', or ISO date"),
50
+ server.registerTool('list_learnings', {
51
+ description: 'Browse saved learnings. Returns a list of learnings with IDs for use in draft_post and draft_thread.',
52
+ inputSchema: {
53
+ tag: z.enum(['win', 'mistake', 'lesson', 'shipit']).optional(),
54
+ limit: z.number().min(1).max(50).optional().default(10),
55
+ since: z.string().optional().describe("'7d', '30d', or ISO date"),
56
+ },
50
57
  }, async ({ tag, limit, since }) => {
51
58
  await validateKey(config.key, 'list_learnings');
52
59
  bgSync(config.key);
@@ -80,7 +87,7 @@ export function registerTools(server, config) {
80
87
  return [
81
88
  `${i + 1}. ID: ${r.id}`,
82
89
  ` "${r.raw}"`,
83
- ` Tags: ${tags.join(', ') || 'none'} | ${new Date(r.created_at).toLocaleDateString()} | ${r.tweet_draft ? 'tweet drafted ✓' : 'no draft yet'}`,
90
+ ` Tags: ${tags.join(', ') || 'none'} | ${new Date(r.created_at).toLocaleDateString()} | ${r.tweet_draft ? 'drafted ✓' : 'no draft yet'}`,
84
91
  ].join('\n');
85
92
  }).join('\n\n');
86
93
  return {
@@ -90,21 +97,36 @@ export function registerTools(server, config) {
90
97
  `${rows.length} learning${rows.length === 1 ? '' : 's'} found:\n`,
91
98
  formatted,
92
99
  '',
93
- 'Use these IDs with draft_tweet or draft_thread.',
100
+ 'Use these IDs with draft_post or draft_thread.',
101
+ '- "draft a post for X from this learning" — turn it into a tweet',
102
+ '- "draft a Reddit post from this learning" — format for r/startups',
103
+ '- "draft a LinkedIn post from this learning" — professional format',
104
+ '- "draft a Show HN post from this learning" — Hacker News format',
94
105
  ].join('\n'),
95
106
  }],
96
107
  };
97
108
  });
98
- // ── draft_tweet ────────────────────────────────────────────────
99
- server.tool('draft_tweet', [
100
- 'Fetch a saved learning and return it formatted for the AI to turn into a tweet.',
101
- 'The AI should draft a tweet under 280 characters with a strong hook.',
102
- 'After getting this tool result, immediately write the tweet draft — do not ask the user for more input.',
103
- ].join(' '), {
104
- id: z.string().describe('Learning ID from list_learnings. Use "last" to get the most recent.'),
105
- style: z.enum(['hook', 'story', 'tip', 'hot-take']).optional().default('hook'),
106
- }, async ({ id, style }) => {
107
- await validateKey(config.key, 'draft_tweet');
109
+ // ── draft_post ─────────────────────────────────────────────────
110
+ server.registerTool('draft_post', {
111
+ description: [
112
+ 'Fetch a saved learning and return it formatted for the AI to draft a social media post.',
113
+ 'Works for X/Twitter, Reddit, LinkedIn, Hacker News, newsletter, and Bluesky formats.',
114
+ 'After getting this tool result, immediately write the post — do not ask for more input.',
115
+ ].join(' '),
116
+ inputSchema: {
117
+ id: z.string().describe('Learning ID from list_learnings. Use "last" to get the most recent.'),
118
+ platform: z.enum([
119
+ 'twitter',
120
+ 'reddit',
121
+ 'linkedin',
122
+ 'hackernews',
123
+ 'newsletter',
124
+ 'bluesky',
125
+ ]).optional().default('twitter'),
126
+ style: z.enum(['hook', 'story', 'tip', 'hot-take']).optional().default('hook'),
127
+ },
128
+ }, async ({ id, platform, style }) => {
129
+ await validateKey(config.key, 'draft_post');
108
130
  bgSync(config.key);
109
131
  const db = getDb();
110
132
  const learning = id === 'last'
@@ -119,45 +141,146 @@ export function registerTools(server, config) {
119
141
  };
120
142
  }
121
143
  const tags = JSON.parse(learning.tags || '[]');
144
+ const PLATFORM_GUIDES = {
145
+ twitter: [
146
+ '## Draft a tweet from this learning',
147
+ '',
148
+ `Learning: "${learning.raw}"`,
149
+ `Tags: ${tags.join(', ') || 'none'}`,
150
+ `Style: ${style}`,
151
+ '',
152
+ '## Tweet drafting rules',
153
+ '- Under 280 characters',
154
+ '- First line must be a hook that stops scrolling',
155
+ '- One concrete insight only — no padding or fluff',
156
+ '- Sound like a real builder, not a marketer',
157
+ '- No buzzwords (game-changer, revolutionary, unlock, etc)',
158
+ '- No emojis unless they genuinely add meaning',
159
+ '- No hashtags',
160
+ '- End with something that makes people want to follow',
161
+ '',
162
+ '## Style guide',
163
+ 'hook: Bold opening statement that challenges a common assumption',
164
+ 'story: "I did X, it went wrong/right, here\'s what I learned"',
165
+ 'tip: Direct actionable advice from first-hand experience',
166
+ 'hot-take: Controversial but defensible opinion from your experience',
167
+ '',
168
+ 'Now write the tweet. Output only the tweet text, nothing else.',
169
+ ].join('\n'),
170
+ reddit: [
171
+ '## Draft a Reddit post from this learning',
172
+ '',
173
+ `Learning: "${learning.raw}"`,
174
+ `Tags: ${tags.join(', ') || 'none'}`,
175
+ '',
176
+ '## Rules',
177
+ '- Write a compelling title (max 300 chars)',
178
+ '- Body is 2-4 paragraphs, conversational',
179
+ '- Tell the story — what happened, what you learned',
180
+ '- End with a question to spark discussion',
181
+ '- Suggest a subreddit: r/startups, r/SideProject, r/Entrepreneur, r/indiehackers',
182
+ '',
183
+ '## Format',
184
+ 'Title: [your title]',
185
+ '',
186
+ '[body paragraphs]',
187
+ '',
188
+ 'Suggested subreddit: r/[name]',
189
+ '',
190
+ 'Output only the post. Nothing else.',
191
+ ].join('\n'),
192
+ linkedin: [
193
+ '## Draft a LinkedIn post from this learning',
194
+ '',
195
+ `Learning: "${learning.raw}"`,
196
+ `Tags: ${tags.join(', ') || 'none'}`,
197
+ '',
198
+ '## Rules',
199
+ '- Professional but human tone — not corporate speak',
200
+ '- 3-5 short paragraphs',
201
+ '- Start with a bold first line that hooks',
202
+ '- Include the lesson clearly',
203
+ '- End with an insight or question',
204
+ '- No hashtag spam (max 2 if needed)',
205
+ '- 150-300 words ideal',
206
+ '',
207
+ 'Output only the post. Nothing else.',
208
+ ].join('\n'),
209
+ hackernews: [
210
+ '## Draft a Hacker News post from this learning',
211
+ '',
212
+ `Learning: "${learning.raw}"`,
213
+ `Tags: ${tags.join(', ') || 'none'}`,
214
+ '',
215
+ '## Rules',
216
+ '- Decide: is this a Show HN, Ask HN, or regular submission?',
217
+ '- Title is factual, specific, non-clickbait',
218
+ '- Body (for Ask/Show HN) is 2-3 paragraphs max',
219
+ '- Technical and honest tone',
220
+ '- No marketing language whatsoever',
221
+ '- HN readers value substance over story',
222
+ '',
223
+ '## Format',
224
+ 'Type: [Show HN / Ask HN / Submission]',
225
+ 'Title: [your title]',
226
+ '',
227
+ '[body if Ask HN or Show HN]',
228
+ '',
229
+ 'Output only the post. Nothing else.',
230
+ ].join('\n'),
231
+ newsletter: [
232
+ '## Draft a newsletter section from this learning',
233
+ '',
234
+ `Learning: "${learning.raw}"`,
235
+ `Tags: ${tags.join(', ') || 'none'}`,
236
+ '',
237
+ '## Rules',
238
+ '- 1-3 paragraphs, flows as a standalone section',
239
+ '- Conversational, first-person',
240
+ '- Start with what happened',
241
+ '- Middle: the insight or lesson',
242
+ '- End: why it matters to the reader',
243
+ '- 100-250 words',
244
+ '- Could have a heading (##) or stand alone without one',
245
+ '',
246
+ 'Output only the newsletter section. Nothing else.',
247
+ ].join('\n'),
248
+ bluesky: [
249
+ '## Draft a Bluesky post from this learning',
250
+ '',
251
+ `Learning: "${learning.raw}"`,
252
+ `Tags: ${tags.join(', ') || 'none'}`,
253
+ `Style: ${style}`,
254
+ '',
255
+ '## Rules',
256
+ '- Under 300 characters (Bluesky limit)',
257
+ '- Slightly more casual and community-first than Twitter',
258
+ '- Same hook principles but warmer tone',
259
+ '- No hashtag spam',
260
+ '- Threads work well on Bluesky if one post isn\'t enough',
261
+ '',
262
+ 'Output only the post text. Nothing else.',
263
+ ].join('\n'),
264
+ };
265
+ const guide = PLATFORM_GUIDES[platform] || PLATFORM_GUIDES.twitter;
122
266
  return {
123
267
  content: [{
124
268
  type: 'text',
125
- text: [
126
- '## Draft a tweet from this learning',
127
- '',
128
- `Learning: "${learning.raw}"`,
129
- `Tags: ${tags.join(', ') || 'none'}`,
130
- `Style: ${style}`,
131
- '',
132
- '## Tweet drafting rules',
133
- '- Under 280 characters',
134
- '- First line must be a hook that stops scrolling',
135
- '- One concrete insight only — no padding or fluff',
136
- '- Sound like a real builder, not a marketer',
137
- '- No buzzwords (game-changer, revolutionary, unlock, etc)',
138
- '- No emojis unless they genuinely add meaning',
139
- '- No hashtags',
140
- '- End with something that makes people want to follow',
141
- '',
142
- '## Style guide',
143
- 'hook: Bold opening statement that challenges a common assumption',
144
- 'story: "I did X, it went wrong/right, here\'s what I learned"',
145
- 'tip: Direct actionable advice from first-hand experience',
146
- 'hot-take: Controversial but defensible opinion from your experience',
147
- '',
148
- 'Now write the tweet. Output only the tweet text, nothing else.',
149
- ].join('\n'),
269
+ text: guide,
150
270
  }],
151
271
  };
152
272
  });
153
273
  // ── draft_thread ───────────────────────────────────────────────
154
- server.tool('draft_thread', [
155
- 'Fetch multiple saved learnings and return them formatted for the AI to turn into an X thread.',
156
- 'The AI should draft a numbered thread with a hook tweet at the top.',
157
- 'After getting this tool result, immediately write the thread do not ask the user for more input.',
158
- ].join(' '), {
159
- ids: z.array(z.string()).describe('Learning IDs. Pass ["last5"] to auto-select 5 most recent.'),
160
- topic: z.string().optional().describe('Optional theme or title for the thread'),
274
+ server.registerTool('draft_thread', {
275
+ description: [
276
+ 'Fetch multiple saved learnings and return them formatted for the AI to turn into an X thread.',
277
+ 'The AI should draft a numbered thread with a hook tweet at the top.',
278
+ 'After getting this tool result, immediately write the thread — do not ask the user for more input.',
279
+ ].join(' '),
280
+ inputSchema: {
281
+ ids: z.array(z.string()).describe('Learning IDs. Pass ["last5"] to auto-select 5 most recent.'),
282
+ topic: z.string().optional().describe('Optional theme or title for the thread'),
283
+ },
161
284
  }, async ({ ids, topic }) => {
162
285
  await validateKey(config.key, 'draft_thread');
163
286
  bgSync(config.key);
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import Database from 'better-sqlite3';
2
2
  export declare function initDb(): void;
3
3
  export declare function getDb(): Database.Database;
4
- export declare function retryUnsynced(apiKey: string): Promise<void>;
4
+ export declare function retryUnsynced(apiKey: string, source?: 'auto' | 'manual'): Promise<void>;
5
5
  //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAUtC,wBAAgB,MAAM,SAkBrB;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAGzC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAUtC,wBAAgB,MAAM,SAkBrB;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAGzC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,QAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBrG"}
@@ -29,7 +29,7 @@ export function getDb() {
29
29
  initDb();
30
30
  return db;
31
31
  }
32
- export async function retryUnsynced(apiKey) {
32
+ export async function retryUnsynced(apiKey, source = 'auto') {
33
33
  const database = getDb();
34
34
  const pending = database.prepare('SELECT * FROM learnings WHERE synced = 0 LIMIT 10').all();
35
35
  for (const learning of pending) {
@@ -37,7 +37,7 @@ export async function retryUnsynced(apiKey) {
37
37
  const res = await fetch('https://trykora.xyz/api/sync', {
38
38
  method: 'POST',
39
39
  headers: { 'Content-Type': 'application/json' },
40
- body: JSON.stringify({ key: apiKey, learning }),
40
+ body: JSON.stringify({ key: apiKey, learning, source }),
41
41
  });
42
42
  const { success, notionId } = await res.json();
43
43
  if (success) {
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAElD,IAAI,EAAqB,CAAC;AAE1B,MAAM,UAAU,MAAM;IACpB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,EAAE,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAC9B,mDAAmD,CACpD,CAAC,GAAG,EAAW,CAAC;IAEjB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,8BAA8B,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aAChD,CAAC,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,OAAO,CACd,6DAA6D,CAC9D,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAElD,IAAI,EAAqB,CAAC;AAE1B,MAAM,UAAU,MAAM;IACpB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,EAAE,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,SAA4B,MAAM;IACpF,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAC9B,mDAAmD,CACpD,CAAC,GAAG,EAAW,CAAC;IAEjB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,8BAA8B,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,OAAO,CACd,6DAA6D,CAC9D,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "trykora",
3
- "version": "1.0.1",
4
- "description": "Your build-in-public brain works with Claude, Cursor, Windsurf, Antigravity and any MCP-compatible AI tool",
3
+ "version": "1.1.0",
4
+ "description": "Grow your audience while you build — capture insights and turn them into X, Reddit, LinkedIn, and HN posts inside any AI tool",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "trykora": "./dist/bin/kora.js",