mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-05-09 15:22:39 +02:00
voice notes update knowledge
This commit is contained in:
parent
ab3a433390
commit
5fc05f279b
4 changed files with 79 additions and 16 deletions
|
|
@ -89,7 +89,19 @@ function moveVoiceMemosToKnowledge(state: GraphState): { sourcePath: string; tar
|
||||||
// Read original content and wrap in markdown format
|
// Read original content and wrap in markdown format
|
||||||
const originalContent = fs.readFileSync(sourcePath, 'utf-8');
|
const originalContent = fs.readFileSync(sourcePath, 'utf-8');
|
||||||
|
|
||||||
const mdContent = `# Voice Memo - ${date}\n\n**Recorded:** ${date}\n\n## Transcript\n\n${originalContent}\n`;
|
// Create a relative path for linking (from knowledge/ root)
|
||||||
|
const relativePath = `Voice Memos/${date}/${baseName}`;
|
||||||
|
|
||||||
|
const mdContent = `# Voice Memo - ${date}
|
||||||
|
|
||||||
|
**Type:** voice memo
|
||||||
|
**Recorded:** ${date}
|
||||||
|
**Path:** ${relativePath}
|
||||||
|
|
||||||
|
## Transcript
|
||||||
|
|
||||||
|
${originalContent}
|
||||||
|
`;
|
||||||
|
|
||||||
// Write to knowledge directory
|
// Write to knowledge directory
|
||||||
fs.writeFileSync(targetPath, mdContent);
|
fs.writeFileSync(targetPath, mdContent);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ tools:
|
||||||
---
|
---
|
||||||
# Task
|
# Task
|
||||||
|
|
||||||
You are a memory agent. Given a single source file (email or meeting transcript), you will:
|
You are a memory agent. Given a single source file (email, meeting transcript, or voice memo), you will:
|
||||||
|
|
||||||
1. **Determine source type (meeting or email)**
|
1. **Determine source type (meeting or email)**
|
||||||
2. **Evaluate if the source is worth processing**
|
2. **Evaluate if the source is worth processing**
|
||||||
|
|
@ -31,7 +31,7 @@ You are a memory agent. Given a single source file (email or meeting transcript)
|
||||||
8. Create new notes (meetings only) or update existing notes
|
8. Create new notes (meetings only) or update existing notes
|
||||||
9. **Apply state changes to existing notes**
|
9. **Apply state changes to existing notes**
|
||||||
|
|
||||||
The core rule: **Meetings create notes. Emails enrich them.**
|
The core rule: **Meetings and voice memos create notes. Emails enrich them.**
|
||||||
|
|
||||||
You have full read access to the existing knowledge directory. Use this extensively to:
|
You have full read access to the existing knowledge directory. Use this extensively to:
|
||||||
- Find existing notes for people, organizations, projects mentioned
|
- Find existing notes for people, organizations, projects mentioned
|
||||||
|
|
@ -126,9 +126,15 @@ executeCommand("cat '{source_file}'")
|
||||||
- Has \`Subject:\` field
|
- Has \`Subject:\` field
|
||||||
- Email signature
|
- Email signature
|
||||||
|
|
||||||
|
**Voice memo indicators:**
|
||||||
|
- Has \`**Type:** voice memo\` field
|
||||||
|
- Has \`**Path:**\` field with path like \`Voice Memos/YYYY-MM-DD/...\`
|
||||||
|
- Has \`## Transcript\` section
|
||||||
|
|
||||||
**Set processing mode:**
|
**Set processing mode:**
|
||||||
- \`source_type = "meeting"\` → Can create new notes
|
- \`source_type = "meeting"\` → Can create new notes
|
||||||
- \`source_type = "email"\` → Can only update existing notes
|
- \`source_type = "email"\` → Can only update existing notes
|
||||||
|
- \`source_type = "voice_memo"\` → Can create new notes (treat like meetings)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -844,7 +850,12 @@ If role is unknown but context suggests it, say so:
|
||||||
|
|
||||||
One line summarizing this source's relevance to the entity:
|
One line summarizing this source's relevance to the entity:
|
||||||
\`\`\`
|
\`\`\`
|
||||||
**{YYYY-MM-DD}** ({meeting|email}): {Summary with [[links]]}
|
**{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[links]]}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
**For voice memos:** Include a link to the voice memo file using the Path field:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed [[Projects/Acme Integration]] timeline. See [[Voice Memos/2025-01-15/voice-memo-2025-01-15T10-30-00-000Z]]
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
**Important:** Use canonical names with absolute paths from resolution map in all summaries:
|
**Important:** Use canonical names with absolute paths from resolution map in all summaries:
|
||||||
|
|
@ -1179,7 +1190,7 @@ If not found, update Jennifer.md to add the link.
|
||||||
- [[Projects/{Project}]] — {role}
|
- [[Projects/{Project}]] — {role}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary with [[Folder/Name]] links} {[State changes if any]}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[Folder/Name]] links} {[State changes if any]}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none. Never include data gap commentary.}
|
{Substantive facts only. Leave empty if none. Never include data gap commentary.}
|
||||||
|
|
@ -1216,7 +1227,7 @@ If not found, update Jennifer.md to add the link.
|
||||||
- [[Projects/{Project}]] — {relationship}
|
- [[Projects/{Project}]] — {relationship}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary with [[Folder/Name]] links} {[State changes if any]}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[Folder/Name]] links} {[State changes if any]}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none.}
|
{Substantive facts only. Leave empty if none.}
|
||||||
|
|
@ -1803,10 +1814,16 @@ Business banking provider. Account setup completed January 2025.
|
||||||
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
||||||
|-------------|---------------|----------------|------------------------|
|
|-------------|---------------|----------------|------------------------|
|
||||||
| Meeting | Yes | Yes | Yes |
|
| Meeting | Yes | Yes | Yes |
|
||||||
|
| Voice memo | Yes | Yes | Yes |
|
||||||
| Email (known contact) | No | Yes | Yes |
|
| Email (known contact) | No | Yes | Yes |
|
||||||
| Email (unknown contact) | No | No (SKIP) | No |
|
| Email (unknown contact) | No | No (SKIP) | No |
|
||||||
| Email (warm intro) | Yes (exception) | Yes | Yes |
|
| Email (warm intro) | Yes (exception) | Yes | Yes |
|
||||||
|
|
||||||
|
**Voice memo activity format:** Always include a link to the source voice memo:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed project timeline with [[People/Sarah Chen]]. See [[Voice Memos/2025-01-15/voice-memo-...]]
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# State Change Reference
|
# State Change Reference
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ tools:
|
||||||
---
|
---
|
||||||
# Task
|
# Task
|
||||||
|
|
||||||
You are a memory agent. Given a single source file (email or meeting transcript), you will:
|
You are a memory agent. Given a single source file (email, meeting transcript, or voice memo), you will:
|
||||||
|
|
||||||
1. **Determine source type (meeting or email)**
|
1. **Determine source type (meeting or email)**
|
||||||
2. **Evaluate if the source is worth processing**
|
2. **Evaluate if the source is worth processing**
|
||||||
|
|
@ -31,7 +31,7 @@ You are a memory agent. Given a single source file (email or meeting transcript)
|
||||||
8. Create new notes or update existing notes
|
8. Create new notes or update existing notes
|
||||||
9. **Apply state changes to existing notes**
|
9. **Apply state changes to existing notes**
|
||||||
|
|
||||||
The core rule: **Capture broadly. Both meetings and emails create notes for most external contacts.**
|
The core rule: **Capture broadly. Meetings, voice memos, and emails create notes for most external contacts.**
|
||||||
|
|
||||||
You have full read access to the existing knowledge directory. Use this extensively to:
|
You have full read access to the existing knowledge directory. Use this extensively to:
|
||||||
- Find existing notes for people, organizations, projects mentioned
|
- Find existing notes for people, organizations, projects mentioned
|
||||||
|
|
@ -133,9 +133,15 @@ executeCommand("cat '{source_file}'")
|
||||||
- Has \`Subject:\` field
|
- Has \`Subject:\` field
|
||||||
- Email signature
|
- Email signature
|
||||||
|
|
||||||
|
**Voice memo indicators:**
|
||||||
|
- Has \`**Type:** voice memo\` field
|
||||||
|
- Has \`**Path:**\` field with path like \`Voice Memos/YYYY-MM-DD/...\`
|
||||||
|
- Has \`## Transcript\` section
|
||||||
|
|
||||||
**Set processing mode:**
|
**Set processing mode:**
|
||||||
- \`source_type = "meeting"\` → Create notes for all external attendees
|
- \`source_type = "meeting"\` → Create notes for all external attendees
|
||||||
- \`source_type = "email"\` → Create notes for sender if identifiable human
|
- \`source_type = "email"\` → Create notes for sender if identifiable human
|
||||||
|
- \`source_type = "voice_memo"\` → Create notes for all mentioned entities (treat like meetings)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -509,7 +515,12 @@ Write 2-3 sentences covering their role/function, context of the relationship, a
|
||||||
|
|
||||||
One line summarizing this source's relevance to the entity:
|
One line summarizing this source's relevance to the entity:
|
||||||
\`\`\`
|
\`\`\`
|
||||||
**{YYYY-MM-DD}** ({meeting|email}): {Summary with [[links]]}
|
**{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[links]]}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
**For voice memos:** Include a link to the voice memo file using the Path field:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed [[Projects/Acme Integration]] timeline. See [[Voice Memos/2025-01-15/voice-memo-2025-01-15T10-30-00-000Z]]
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -638,7 +649,7 @@ After writing, verify links go both ways.
|
||||||
- [[Projects/{Project}]] — {role}
|
- [[Projects/{Project}]] — {role}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary with [[Folder/Name]] links}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[Folder/Name]] links}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none.}
|
{Substantive facts only. Leave empty if none.}
|
||||||
|
|
@ -673,7 +684,7 @@ After writing, verify links go both ways.
|
||||||
- [[Projects/{Project}]] — {relationship}
|
- [[Projects/{Project}]] — {relationship}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none.}
|
{Substantive facts only. Leave empty if none.}
|
||||||
|
|
@ -705,7 +716,7 @@ After writing, verify links go both ways.
|
||||||
- [[Topics/{Topic}]] — {relationship}
|
- [[Topics/{Topic}]] — {relationship}
|
||||||
|
|
||||||
## Timeline
|
## Timeline
|
||||||
**{YYYY-MM-DD}** ({meeting|email})
|
**{YYYY-MM-DD}** ({meeting|email|voice memo})
|
||||||
{What happened.}
|
{What happened.}
|
||||||
|
|
||||||
## Decisions
|
## Decisions
|
||||||
|
|
@ -756,9 +767,15 @@ After writing, verify links go both ways.
|
||||||
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
||||||
|-------------|---------------|----------------|------------------------|
|
|-------------|---------------|----------------|------------------------|
|
||||||
| Meeting | Yes — ALL external attendees | Yes | Yes |
|
| Meeting | Yes — ALL external attendees | Yes | Yes |
|
||||||
|
| Voice memo | Yes — all mentioned entities | Yes | Yes |
|
||||||
| Email (any human sender) | Yes | Yes | Yes |
|
| Email (any human sender) | Yes | Yes | Yes |
|
||||||
| Email (automated/newsletter) | No (SKIP) | No | No |
|
| Email (automated/newsletter) | No (SKIP) | No | No |
|
||||||
|
|
||||||
|
**Voice memo activity format:** Always include a link to the source voice memo:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed project timeline with [[People/Sarah Chen]]. See [[Voice Memos/2025-01-15/voice-memo-...]]
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
**Philosophy:** Capture broadly, filter later if needed.
|
**Philosophy:** Capture broadly, filter later if needed.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ tools:
|
||||||
---
|
---
|
||||||
# Task
|
# Task
|
||||||
|
|
||||||
You are a memory agent. Given a single source file (email or meeting transcript), you will:
|
You are a memory agent. Given a single source file (email, meeting transcript, or voice memo), you will:
|
||||||
|
|
||||||
1. **Determine source type (meeting or email)**
|
1. **Determine source type (meeting or email)**
|
||||||
2. **Evaluate if the source is worth processing**
|
2. **Evaluate if the source is worth processing**
|
||||||
|
|
@ -132,9 +132,15 @@ executeCommand("cat '{source_file}'")
|
||||||
- Has \`Subject:\` field
|
- Has \`Subject:\` field
|
||||||
- Email signature
|
- Email signature
|
||||||
|
|
||||||
|
**Voice memo indicators:**
|
||||||
|
- Has \`**Type:** voice memo\` field
|
||||||
|
- Has \`**Path:**\` field with path like \`Voice Memos/YYYY-MM-DD/...\`
|
||||||
|
- Has \`## Transcript\` section
|
||||||
|
|
||||||
**Set processing mode:**
|
**Set processing mode:**
|
||||||
- \`source_type = "meeting"\` → Can create new notes
|
- \`source_type = "meeting"\` → Can create new notes
|
||||||
- \`source_type = "email"\` → Can create notes if personalized and relevant
|
- \`source_type = "email"\` → Can create notes if personalized and relevant
|
||||||
|
- \`source_type = "voice_memo"\` → Can create new notes (treat like meetings)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -784,7 +790,12 @@ The summary should answer: **"Who is this person and why do I know them?"**
|
||||||
|
|
||||||
One line summarizing this source's relevance to the entity:
|
One line summarizing this source's relevance to the entity:
|
||||||
\`\`\`
|
\`\`\`
|
||||||
**{YYYY-MM-DD}** ({meeting|email}): {Summary with [[links]]}
|
**{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[links]]}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
**For voice memos:** Include a link to the voice memo file using the Path field:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed [[Projects/Acme Integration]] timeline. See [[Voice Memos/2025-01-15/voice-memo-2025-01-15T10-30-00-000Z]]
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
**Important:** Use canonical names with absolute paths from resolution map in all summaries:
|
**Important:** Use canonical names with absolute paths from resolution map in all summaries:
|
||||||
|
|
@ -1000,7 +1011,7 @@ After writing, verify links go both ways.
|
||||||
- [[Projects/{Project}]] — {role}
|
- [[Projects/{Project}]] — {role}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary with [[Folder/Name]] links}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[Folder/Name]] links}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none.}
|
{Substantive facts only. Leave empty if none.}
|
||||||
|
|
@ -1035,7 +1046,7 @@ After writing, verify links go both ways.
|
||||||
- [[Projects/{Project}]] — {relationship}
|
- [[Projects/{Project}]] — {relationship}
|
||||||
|
|
||||||
## Activity
|
## Activity
|
||||||
- **{YYYY-MM-DD}** ({meeting|email}): {Summary with [[Folder/Name]] links}
|
- **{YYYY-MM-DD}** ({meeting|email|voice memo}): {Summary with [[Folder/Name]] links}
|
||||||
|
|
||||||
## Key facts
|
## Key facts
|
||||||
{Substantive facts only. Leave empty if none.}
|
{Substantive facts only. Leave empty if none.}
|
||||||
|
|
@ -1119,11 +1130,17 @@ After writing, verify links go both ways.
|
||||||
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
| Source Type | Creates Notes? | Updates Notes? | Detects State Changes? |
|
||||||
|-------------|---------------|----------------|------------------------|
|
|-------------|---------------|----------------|------------------------|
|
||||||
| Meeting | Yes | Yes | Yes |
|
| Meeting | Yes | Yes | Yes |
|
||||||
|
| Voice memo | Yes | Yes | Yes |
|
||||||
| Email (personalized, business-relevant) | Yes | Yes | Yes |
|
| Email (personalized, business-relevant) | Yes | Yes | Yes |
|
||||||
| Email (mass/automated/consumer) | No (SKIP) | No | No |
|
| Email (mass/automated/consumer) | No (SKIP) | No | No |
|
||||||
| Email (cold outreach with personalization) | Yes | Yes | Yes |
|
| Email (cold outreach with personalization) | Yes | Yes | Yes |
|
||||||
| Email (generic cold outreach) | No | No | No |
|
| Email (generic cold outreach) | No | No | No |
|
||||||
|
|
||||||
|
**Voice memo activity format:** Always include a link to the source voice memo:
|
||||||
|
\`\`\`
|
||||||
|
**2025-01-15** (voice memo): Discussed project timeline with [[People/Sarah Chen]]. See [[Voice Memos/2025-01-15/voice-memo-...]]
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Error Handling
|
# Error Handling
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue