diff --git a/Makefile b/Makefile index 2fb7fcc4..12964d71 100644 --- a/Makefile +++ b/Makefile @@ -95,10 +95,8 @@ check-main: @ENV_FILE=$(MAIN_ENV_FILE) bash scripts/check.sh setup-worktree: - @if [ ! -f "$(WORKTREE_ENV_FILE)" ]; then \ - echo "==> No $(WORKTREE_ENV_FILE) found, generating..."; \ - bash scripts/init-worktree-env.sh $(WORKTREE_ENV_FILE); \ - fi + @echo "==> Generating $(WORKTREE_ENV_FILE) with unique ports..." + @FORCE=1 bash scripts/init-worktree-env.sh $(WORKTREE_ENV_FILE) @$(MAKE) setup ENV_FILE=$(WORKTREE_ENV_FILE) start-worktree: diff --git a/apps/web/app/(dashboard)/_components/app-sidebar.tsx b/apps/web/app/(dashboard)/_components/app-sidebar.tsx index 4bdf6bc1..64f84698 100644 --- a/apps/web/app/(dashboard)/_components/app-sidebar.tsx +++ b/apps/web/app/(dashboard)/_components/app-sidebar.tsx @@ -7,7 +7,6 @@ import { ListTodo, Bot, Monitor, - BookOpen, ChevronDown, Settings, LogOut, @@ -53,7 +52,6 @@ const workspaceNav = [ { href: "/agents", label: "Agents", icon: Bot }, { href: "/runtimes", label: "Runtimes", icon: Monitor }, { href: "/skills", label: "Skills", icon: Sparkles }, - { href: "/knowledge-base", label: "Knowledge Base", icon: BookOpen }, { href: "/settings", label: "Settings", icon: Settings }, ]; diff --git a/apps/web/app/(dashboard)/knowledge-base/page.tsx b/apps/web/app/(dashboard)/knowledge-base/page.tsx deleted file mode 100644 index 740d37fe..00000000 --- a/apps/web/app/(dashboard)/knowledge-base/page.tsx +++ /dev/null @@ -1,360 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { useDefaultLayout } from "react-resizable-panels"; -import { - FileText, - Plus, - Search, - Link as LinkIcon, -} from "lucide-react"; -import { Input } from "@/components/ui/input"; -import { Button } from "@/components/ui/button"; -import { - ResizablePanelGroup, - ResizablePanel, - ResizableHandle, -} from "@/components/ui/resizable"; -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -function timeAgo(dateStr: string): string { - const diff = Date.now() - new Date(dateStr).getTime(); - const hours = Math.floor(diff / 3600000); - if (hours < 24) return `${hours}h ago`; - const days = Math.floor(hours / 24); - return `${days}d ago`; -} - -interface KBDocument { - id: string; - title: string; - content: string; - createdBy: string; - updatedAt: string; - referencedBy: string[]; -} - -// --------------------------------------------------------------------------- -// Simple Markdown-ish renderer (handles headers, code blocks, tables, lists) -// --------------------------------------------------------------------------- - -function renderMarkdown(text: string): React.ReactNode[] { - const lines = text.split("\n"); - const elements: React.ReactNode[] = []; - let i = 0; - - while (i < lines.length) { - const line = lines[i]!; - - // Code block - if (line.startsWith("```")) { - const lang = line.slice(3).trim(); - const codeLines: string[] = []; - i++; - while (i < lines.length && !lines[i]!.startsWith("```")) { - codeLines.push(lines[i]!); - i++; - } - i++; // skip closing ``` - elements.push( -
- {codeLines.join("\n")}
-
- );
- continue;
- }
-
- // Table (simplified: detect | pipes)
- if (line.includes("|") && line.trim().startsWith("|")) {
- const tableRows: string[] = [];
- while (i < lines.length && lines[i]!.includes("|") && lines[i]!.trim().startsWith("|")) {
- tableRows.push(lines[i]!);
- i++;
- }
- // Filter out separator rows (|---|---|)
- const dataRows = tableRows.filter((r) => !r.match(/^\|[\s-|]+\|$/));
- if (dataRows.length > 0) {
- const parseRow = (row: string) =>
- row.split("|").filter((c) => c.trim() !== "").map((c) => c.trim());
- const header = parseRow(dataRows[0]!);
- const body = dataRows.slice(1).map(parseRow);
- elements.push(
- | - {h} - | - ))} -
|---|
| - {cell} - | - ))} -
- {renderInline(line)} -
- ); - i++; - } - - return elements; -} - -function renderInline(text: string): React.ReactNode { - // Handle inline code `...` - const parts = text.split(/(`[^`]+`)/); - return parts.map((part, i) => { - if (part.startsWith("`") && part.endsWith("`")) { - return ( -
- {part.slice(1, -1)}
-
- );
- }
- return part;
- });
-}
-
-// ---------------------------------------------------------------------------
-// Components
-// ---------------------------------------------------------------------------
-
-function DocListItem({
- doc,
- isSelected,
- onClick,
-}: {
- doc: KBDocument;
- isSelected: boolean;
- onClick: () => void;
-}) {
- return (
-
- );
-}
-
-function DocDetail({ doc }: { doc: KBDocument }) {
- return (
-