removed welcome note and reordered

This commit is contained in:
Arjun 2026-03-31 17:08:51 +05:30
parent 71d69516c2
commit 8f44980bcd
3 changed files with 16 additions and 71 deletions

View file

@ -267,8 +267,8 @@ const normalizeUsage = (usage?: Partial<LanguageModelUsage> | null): LanguageMod
}
}
// Pinned folders appear first in the sidebar (in this order)
const PINNED_FOLDERS = ['Notes']
// Sidebar folder ordering — listed folders appear in this order, unlisted ones follow alphabetically
const FOLDER_ORDER = ['People', 'Organizations', 'Projects', 'Topics', 'Meetings', 'Agent Notes', 'Notes']
/**
* Per-folder base view config: which columns to show and default sort.
@ -301,15 +301,15 @@ const FOLDER_BASE_CONFIGS: Record<string, { visibleColumns: string[]; sort: { fi
},
}
// Sort nodes (dirs first, pinned folders at top, then alphabetically)
// Sort nodes (dirs first, ordered folders by FOLDER_ORDER, then alphabetically)
function sortNodes(nodes: TreeNode[]): TreeNode[] {
return nodes.sort((a, b) => {
if (a.kind !== b.kind) return a.kind === 'dir' ? -1 : 1
const aPinned = PINNED_FOLDERS.indexOf(a.name)
const bPinned = PINNED_FOLDERS.indexOf(b.name)
if (aPinned !== -1 && bPinned !== -1) return aPinned - bPinned
if (aPinned !== -1) return -1
if (bPinned !== -1) return 1
const aOrder = FOLDER_ORDER.indexOf(a.name)
const bOrder = FOLDER_ORDER.indexOf(b.name)
if (aOrder !== -1 && bOrder !== -1) return aOrder - bOrder
if (aOrder !== -1) return -1
if (bOrder !== -1) return 1
return a.name.localeCompare(b.name)
}).map(node => {
if (node.children) {

View file

@ -986,6 +986,11 @@ function countFiles(node: TreeNode): number {
return (node.children ?? []).reduce((sum, child) => sum + countFiles(child), 0)
}
/** Display name overrides for top-level knowledge folders */
const FOLDER_DISPLAY_NAMES: Record<string, string> = {
Notes: 'My Notes',
}
// Tree component for file browser
function Tree({
item,
@ -1005,6 +1010,7 @@ function Tree({
const isSelected = selectedPath === item.path
const [isRenaming, setIsRenaming] = useState(false)
const isSubmittingRef = React.useRef(false)
const displayName = (isDir && FOLDER_DISPLAY_NAMES[item.name]) || item.name
// For files, strip .md extension for editing
const baseName = !isDir && item.name.endsWith('.md')
@ -1145,7 +1151,7 @@ function Tree({
<SidebarMenuButton onClick={() => onSelect(item.path, item.kind)}>
<Folder className="size-4 shrink-0" />
<div className="flex w-full items-center gap-1 min-w-0">
<span className="min-w-0 flex-1 truncate">{item.name}</span>
<span className="min-w-0 flex-1 truncate">{displayName}</span>
<span className="text-xs text-sidebar-foreground/50 tabular-nums shrink-0">{countFiles(item)}</span>
</div>
</SidebarMenuButton>
@ -1199,7 +1205,7 @@ function Tree({
<SidebarMenuButton>
<ChevronRight className="transition-transform size-4" />
<div className="flex w-full items-center gap-1 min-w-0">
<span className="min-w-0 flex-1 truncate">{item.name}</span>
<span className="min-w-0 flex-1 truncate">{displayName}</span>
<span className="text-xs text-sidebar-foreground/50 tabular-nums shrink-0">{countFiles(item)}</span>
</div>
</SidebarMenuButton>

View file

@ -29,69 +29,8 @@ function ensureDefaultConfigs() {
}
}
// Welcome content inlined to work with bundled builds (esbuild changes __dirname)
const WELCOME_CONTENT = `# Welcome to Rowboat
This vault is your work memory.
Rowboat extracts context from your emails and meetings and turns it into long-lived, editable Markdown notes. The goal is not to store everything, but to preserve the context that stays useful over time.
---
## How it works
**Entity-based notes**
Notes represent people, projects, organizations, or topics that matter to your work.
**Auto-updating context**
As new emails and meetings come in, Rowboat adds decisions, commitments, and relevant context to the appropriate notes.
**Living notes**
These are not static summaries. Context accumulates over time, and notes evolve as your work evolves.
---
## Your AI coworker
Rowboat uses this shared memory to help with everyday work, such as:
- Drafting emails
- Preparing for meetings
- Summarizing the current state of a project
- Taking local actions when appropriate
The AI works with deep context, but you stay in control. All notes are visible, editable, and yours.
---
## Design principles
**Reduce noise**
Rowboat focuses on recurring contacts and active projects instead of trying to capture everything.
**Local and inspectable**
All data is stored locally as plain Markdown. You can read, edit, or delete any file at any time.
**Built to improve over time**
As you keep using Rowboat, context accumulates across notes instead of being reconstructed from scratch.
---
If something feels confusing or limiting, we'd love to hear about it.
Rowboat is still evolving, and your workflow matters.
`;
function ensureWelcomeFile() {
// Create Welcome.md in knowledge directory if it doesn't exist
const welcomeDest = path.join(WorkDir, "knowledge", "Welcome.md");
if (!fs.existsSync(welcomeDest)) {
fs.writeFileSync(welcomeDest, WELCOME_CONTENT);
}
}
ensureDirs();
ensureDefaultConfigs();
ensureWelcomeFile();
// Initialize version history repo (async, fire-and-forget on startup)
import('../knowledge/version_history.js').then(m => m.initRepo()).catch(err => {