diff --git a/packages/landing/public/images/docs/lobu-home.png b/packages/landing/public/images/docs/lobu-home.png deleted file mode 100644 index 4875c2524..000000000 Binary files a/packages/landing/public/images/docs/lobu-home.png and /dev/null differ diff --git a/packages/landing/public/images/docs/security-permissions-section.png b/packages/landing/public/images/docs/security-permissions-section.png deleted file mode 100644 index 4e793185f..000000000 Binary files a/packages/landing/public/images/docs/security-permissions-section.png and /dev/null differ diff --git a/packages/landing/src/components/ArchitectureSection.tsx b/packages/landing/src/components/ArchitectureSection.tsx index 93c22650f..17dd3a6f6 100644 --- a/packages/landing/src/components/ArchitectureSection.tsx +++ b/packages/landing/src/components/ArchitectureSection.tsx @@ -7,18 +7,8 @@ export function ArchitectureSection(props: { return (
-
- - [06] Architecture - - / Gateway ↔ Workers -
-
= { - Member: "πŸ‘€", - Person: "πŸ‘€", - Company: "🏒", - Founder: "πŸ§‘β€πŸš€", - Investor: "🏦", - "Fund Round": "πŸ’°", - Sector: "🏭", - Contract: "πŸ“œ", - Clause: "πŸ“‘", - Risk: "⚠️", - Incident: "🚨", - Service: "🧩", - Deploy: "πŸš€", - "Pull Request": "πŸ”§", - Customer: "πŸ‘₯", - Ticket: "🎫", - Issue: "🐞", - Organization: "🏒", - Deal: "πŸ’°", - Task: "βœ…", - Project: "πŸ“", - Decision: "βœ…", - Topic: "πŸ—‚", - Match: "πŸ”—", - Post: "πŸ“", -}; - -const ATTRIBUTE_ICONS: Record = { - Type: "🏷", - Name: "πŸͺͺ", - Company: "🏒", - Founder: "πŸ§‘β€πŸš€", - Founders: "πŸ§‘β€πŸš€", - Funding: "πŸ’°", - Stage: "πŸ“ˆ", - Valuation: "πŸ“Š", - Sector: "🏭", - Role: "πŸ‘€", - Amount: "πŸ’Έ", - Lead: "🏦", - Risk: "⚠️", - Status: "βœ…", - Owner: "πŸ§‘β€πŸ’Ό", - Source: "πŸ”—", -}; - -const FALLBACK_ENTITIES: EntityCard[] = [ - { - id: "user", - label: "User", - emoji: "πŸ‘€", - badge: "Entity", - attributes: [ - { name: "Identity", icon: "πŸͺͺ" }, - { name: "Sources", icon: "πŸ”—" }, - { name: "Preferences", icon: "βš™οΈ" }, - ], - moreCount: 3, - }, - { - id: "source", - label: "Source", - emoji: "πŸ“„", - badge: "Entity", - attributes: [ - { name: "Content", icon: "πŸ“" }, - { name: "Evidence", icon: "πŸ”Ž" }, - { name: "Owner", icon: "πŸ§‘β€πŸ’Ό" }, - ], - moreCount: 2, - }, - { - id: "topic", - label: "Topic", - emoji: "πŸ—‚", - badge: "Entity", - attributes: [ - { name: "Summary", icon: "πŸ“" }, - { name: "Watchers", icon: "πŸ””" }, - { name: "Linked records", icon: "πŸ”" }, - ], - moreCount: 2, - }, -]; - -function entityEmoji(label: string): string { - if (ENTITY_EMOJI_FALLBACKS[label]) return ENTITY_EMOJI_FALLBACKS[label]; - if (label.endsWith("s") && ENTITY_EMOJI_FALLBACKS[label.slice(0, -1)]) { - return ENTITY_EMOJI_FALLBACKS[label.slice(0, -1)]; - } - return "πŸ“„"; -} - -function attributeIcon(label: string): string { - return ATTRIBUTE_ICONS[label] ?? "β€’"; -} - -function buildUseCaseCards(useCaseId?: LandingUseCaseId): { - entities: EntityCard[]; - relationships: { afterIndex: number; label: string }[]; - description: string; -} { - const useCase = useCaseId ? landingUseCases[useCaseId] : null; - if (!useCase) { - return { - entities: FALLBACK_ENTITIES, - relationships: [ - { afterIndex: 0, label: "connects" }, - { afterIndex: 1, label: "links to" }, - ], - description: - "Users, sources, and topics become typed memory. Extend the schema with your own objects and relationships.", - }; - } - - const children = useCase.memory.recordTree.children ?? []; - const entities = useCase.model.entities.slice(0, 3).map((label) => { - const selectedId = useCase.memory.entitySelections?.[label]; - const child = children.find((node) => node.kind === label); - const highlights = - (selectedId && useCase.memory.nodeHighlights?.[selectedId]) || - (child && useCase.memory.nodeHighlights?.[child.id]) || - []; - const attributes = ( - highlights.length ? highlights : useCase.memory.highlights - ) - .slice(0, 3) - .map((field) => ({ - name: field.label, - icon: attributeIcon(field.label), - })); - - return { - id: selectedId ?? child?.id ?? label.toLowerCase().replace(/\s+/g, "-"), - label, - emoji: entityEmoji(label), - badge: "Entity", - attributes, - moreCount: Math.max(0, highlights.length - attributes.length), - }; - }); - - const relationships = entities.slice(0, -1).map((entity, index) => { - const next = entities[index + 1]; - const matchingRelation = useCase.memory.relations.find((rel) => { - const sourceType = rel.sourceType.toLowerCase().replace(/_/g, " "); - const targetType = rel.targetType.toLowerCase().replace(/_/g, " "); - const left = entity.label.toLowerCase(); - const right = next.label.toLowerCase(); - return ( - (sourceType === left && targetType === right) || - (sourceType === right && targetType === left) - ); - }); - return { - afterIndex: index, - label: matchingRelation?.label.replace(/_/g, " ") ?? "linked to", - }; - }); - - return { - entities: entities.length ? entities : FALLBACK_ENTITIES, - relationships, - description: `${useCase.label} agents use ${useCase.model.entities.slice(0, 5).join(", ")} as typed memory. Add your own entities and relationships as the workflow grows.`, - }; -} - -function EntityCardView({ entity }: { entity: EntityCard }) { - return ( -
-
- - - {entity.label} - - - {entity.badge} - -
-
    - {entity.attributes.map((attr) => ( -
  • - - {attr.name} -
  • - ))} -
  • - - {entity.moreCount} more attributes -
  • -
-
- ); -} - -function AddObjectCard() { - return ( -
- - - Add object - -
- ); -} - -function Connector({ label }: { label: string }) { - return ( -
- {/* */} - - } /> - + - } reverse /> - - - - } - /> - - - - } - reverse - /> - - - - } - /> - + -
- -
- {props.latestPosts?.length ? ( diff --git a/packages/landing/src/components/SectionCornerLabels.tsx b/packages/landing/src/components/SectionCornerLabels.tsx deleted file mode 100644 index 8c7370e4c..000000000 --- a/packages/landing/src/components/SectionCornerLabels.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { ComponentChildren } from "preact"; - -type Props = { - index: number; - leftLabel: string; - rightLabel: string; - children: ComponentChildren; - id?: string; -}; - -export function SectionCornerLabels({ - index, - leftLabel, - rightLabel, - children, - id, -}: Props) { - const indexLabel = `[${index.toString().padStart(2, "0")}]`; - - return ( -
-
- - {indexLabel} {leftLabel} - - / {rightLabel} -
- {children} -
- ); -} diff --git a/packages/landing/src/content/docs/guides/troubleshooting.md b/packages/landing/src/content/docs/guides/troubleshooting.md index 80d8ce1a3..49b28a88a 100644 --- a/packages/landing/src/content/docs/guides/troubleshooting.md +++ b/packages/landing/src/content/docs/guides/troubleshooting.md @@ -58,7 +58,7 @@ curl -v http://localhost:8118 ## Platform connection issues -Platform connections are usually configured from the **Connections** UI or the `/api/v1/connections` API. +Platform connections are usually configured from the **Connectors** UI or the `/api/v1/connections` API. **Slack**: Reconnect or reinstall the workspace after adding scopes. If you use Slack OAuth install flows on a self-hosted gateway, also verify `SLACK_CLIENT_ID` and `SLACK_CLIENT_SECRET` on the gateway. diff --git a/packages/landing/src/pages/index.astro b/packages/landing/src/pages/index.astro index ebed418c7..610c4c747 100644 --- a/packages/landing/src/pages/index.astro +++ b/packages/landing/src/pages/index.astro @@ -19,7 +19,7 @@ const latestPosts = await getLatestPosts(3); >