mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-25 00:16:29 +02:00
add suggested topics using track blocks
This commit is contained in:
parent
4c46bf4c25
commit
93054066fa
2 changed files with 74 additions and 0 deletions
|
|
@ -53,6 +53,9 @@ ensureDefaultConfigs();
|
|||
import('../knowledge/ensure_daily_note.js').then(m => m.ensureDailyNote()).catch(err => {
|
||||
console.error('[DailyNote] Failed to ensure daily note:', err);
|
||||
});
|
||||
import('../knowledge/ensure_suggested_topics_note.js').then(m => m.ensureSuggestedTopicsNote()).catch(err => {
|
||||
console.error('[SuggestedTopicsNote] Failed to ensure note:', err);
|
||||
});
|
||||
|
||||
// Initialize version history repo (async, fire-and-forget on startup)
|
||||
import('../knowledge/version_history.js').then(m => m.initRepo()).catch(err => {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import { stringify as stringifyYaml } from 'yaml';
|
||||
import { WorkDir } from '../config/config.js';
|
||||
|
||||
const KNOWLEDGE_DIR = path.join(WorkDir, 'knowledge');
|
||||
const NOTE_PATH = path.join(KNOWLEDGE_DIR, 'Suggested Topics.md');
|
||||
const TRACK_ID = 'suggested-topics';
|
||||
|
||||
const INSTRUCTION = `Curate a shortlist of 8-12 items the user should consider exploring next: topics, projects, people, or organizations surfaced by recent activity.
|
||||
|
||||
Read source material via workspace tools:
|
||||
- Recent emails under \`gmail_sync/\`
|
||||
- Meeting transcripts under \`knowledge/Meetings/\` (fireflies, granola)
|
||||
|
||||
Prefer strategically relevant, near-term, actionable items. Skip transactional or low-signal noise. Skip entities that already have a canonical note under \`knowledge/People/\`, \`knowledge/Organizations/\`, \`knowledge/Topics/\`, or \`knowledge/Projects/\` unless there is a distinct new angle worth exploring.
|
||||
|
||||
## Output format
|
||||
|
||||
Write the target region as category-grouped stacks of fenced \`prompt\` code blocks. Omit empty categories. Use these headings in this order:
|
||||
|
||||
## Topics
|
||||
## Projects
|
||||
## People
|
||||
## Organizations
|
||||
|
||||
Under each heading, emit one \`prompt\`-language fenced code block per item. Each block is YAML with two fields:
|
||||
|
||||
- \`label\`: concise card title (~60 chars).
|
||||
- \`instruction\`: multi-line block scalar (\`|\`). The full prompt Copilot runs when the user clicks Run.
|
||||
|
||||
Write each \`instruction\` in first-person voice, asking Copilot to set up a track block for that suggestion. Include:
|
||||
- Which item to track and its category (topic / project / person / organization).
|
||||
- A 1-2 sentence hook explaining why it matters now.
|
||||
- Target folder: \`knowledge/<Topics|Projects|People|Organizations>/\`.
|
||||
- Ask Copilot to describe what the tracking note would monitor and confirm before creating or modifying anything.
|
||||
- On confirmation, load the \`tracks\` skill, check whether a matching note already exists in the target folder, and update it with an appropriate track block. If none exists, create a new note there with a suitable filename. Use a track block rather than only static content.
|
||||
|
||||
Rules: 8-12 cards total across categories. Be selective. Prefer freshness and near-term leverage.`;
|
||||
|
||||
function buildNoteContent(): string {
|
||||
const trackYaml = stringifyYaml({
|
||||
trackId: TRACK_ID,
|
||||
active: true,
|
||||
instruction: INSTRUCTION,
|
||||
schedule: {
|
||||
type: 'cron',
|
||||
expression: '0 */4 * * *',
|
||||
},
|
||||
}).trimEnd();
|
||||
|
||||
return [
|
||||
'# Suggested Topics',
|
||||
'',
|
||||
'> Auto-curated list of topics, people, organizations, and projects worth exploring next. Refreshes every 4 hours. Click any card to explore it with Copilot.',
|
||||
'',
|
||||
'```track',
|
||||
trackYaml,
|
||||
'```',
|
||||
'',
|
||||
`<!--track-target:${TRACK_ID}-->`,
|
||||
`<!--/track-target:${TRACK_ID}-->`,
|
||||
'',
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
export function ensureSuggestedTopicsNote(): void {
|
||||
if (fs.existsSync(NOTE_PATH)) return;
|
||||
fs.writeFileSync(NOTE_PATH, buildNoteContent(), 'utf-8');
|
||||
console.log('[SuggestedTopicsNote] Created Suggested Topics.md');
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue