chore: import upstream snapshot with attribution
CI / test (20, macos-latest) (push) Has been cancelled
CI / test (20, ubuntu-latest) (push) Has been cancelled
CI / test (22, macos-latest) (push) Has been cancelled
CI / test (22, ubuntu-latest) (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:01:18 +08:00
commit 979fb22d7c
613 changed files with 113494 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
:root {
--abyss: #000000;
--iron: #181818;
--charcoal: #202020;
--ash: #7d7d7d;
--steel: #969696;
--mist: #e6e6e6;
--white: #ffffff;
--gold: #ffc000;
--gold-deep: #917300;
--gold-soft: #ffce3e;
--cyan: #29abe2;
--blue: #3860be;
}
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
background: var(--abyss);
color: var(--white);
font-family: var(--font-archivo), "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
scroll-behavior: smooth;
}
a {
color: inherit;
text-decoration: none;
transition: color 160ms ease;
}
a:hover {
color: var(--blue);
}
button {
font-family: inherit;
cursor: pointer;
background: none;
border: none;
color: inherit;
}
::selection {
background: var(--gold);
color: var(--abyss);
}
/* Reveal animation */
.reveal {
opacity: 0;
transform: translateY(32px);
transition: opacity 600ms ease,
transform 600ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.reveal.is-visible {
opacity: 1;
transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.001ms !important;
transition-duration: 0.001ms !important;
}
}
/* Buttons shared */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 18px 28px;
font-size: 14.4px;
font-weight: 700;
letter-spacing: 0.2px;
text-transform: uppercase;
border: 1px solid transparent;
border-radius: 0;
transition:
background 200ms ease,
color 200ms ease,
border-color 200ms ease,
opacity 200ms ease;
cursor: pointer;
}
.btn--accent {
background: var(--gold);
color: var(--abyss);
padding: 22px 32px;
font-size: 16px;
}
.btn--accent:hover {
background: var(--gold-deep);
color: var(--white);
}
.btn--ghost {
background: transparent;
color: var(--white);
border-color: rgba(255, 255, 255, 0.5);
opacity: 0.85;
}
.btn--ghost:hover {
background: rgba(255, 255, 255, 0.08);
border-color: var(--white);
color: var(--white);
opacity: 1;
}
.btn--small {
padding: 10px 14px;
font-size: 12px;
}
/* Shared section head */
.section-head {
max-width: 1200px;
margin: 0 auto 56px;
padding: 0 40px;
}
.section-eyebrow {
display: inline-block;
font-size: 12px;
letter-spacing: 0.96px;
color: var(--gold);
text-transform: uppercase;
margin-bottom: 16px;
padding: 6px 10px;
border: 1px solid var(--gold);
}
.section-title {
font-size: clamp(32px, 5vw, 72px);
font-weight: 900;
line-height: 0.98;
letter-spacing: -0.01em;
margin: 0 0 24px;
text-transform: uppercase;
text-wrap: balance;
}
.section-lede {
max-width: 680px;
font-size: 16px;
letter-spacing: 0.12px;
color: var(--steel);
text-transform: uppercase;
margin: 0;
}
@media (max-width: 640px) {
.section-head {
padding: 0 20px;
}
}
+59
View File
@@ -0,0 +1,59 @@
import type { Metadata, Viewport } from "next";
import { Archivo, JetBrains_Mono } from "next/font/google";
import "./globals.css";
const archivo = Archivo({
subsets: ["latin"],
weight: ["400", "500", "700", "900"],
variable: "--font-archivo",
display: "swap",
});
const jetbrains = JetBrains_Mono({
subsets: ["latin"],
weight: ["400", "500"],
variable: "--font-mono",
display: "swap",
});
export const metadata: Metadata = {
metadataBase: new URL("https://agentmemory.dev"),
title: "AGENTMEMORY — PERSISTENT MEMORY FOR AI CODING AGENTS",
description:
"The memory layer your coding agent should have had from day one. 95.2% retrieval R@5. 92% fewer tokens. 0 external databases. Works with every agent.",
icons: {
icon: [{ url: "/icon.svg", type: "image/svg+xml" }],
apple: "/icon.svg",
},
openGraph: {
title: "agentmemory",
description:
"Persistent memory for AI coding agents. Runs locally. Zero external databases.",
type: "website",
url: "/",
},
twitter: {
card: "summary_large_image",
title: "agentmemory",
description:
"Persistent memory for AI coding agents. Runs locally. Zero external databases.",
},
};
export const viewport: Viewport = {
themeColor: "#000000",
width: "device-width",
initialScale: 1,
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en" className={`${archivo.variable} ${jetbrains.variable}`}>
<body>{children}</body>
</html>
);
}
+107
View File
@@ -0,0 +1,107 @@
import { ImageResponse } from "next/og";
export const alt = "agentmemory — persistent memory for AI coding agents";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
export default function Image() {
return new ImageResponse(
(
<div
style={{
width: "100%",
height: "100%",
display: "flex",
flexDirection: "column",
justifyContent: "space-between",
padding: "72px 80px",
background:
"radial-gradient(ellipse at 20% 0%, #1a1407 0%, #0a0a0a 55%, #000 100%)",
color: "#fff",
fontFamily: "system-ui, -apple-system, sans-serif",
}}
>
<div
style={{
display: "flex",
alignItems: "center",
gap: 16,
fontSize: 20,
letterSpacing: 3,
fontWeight: 700,
color: "#f3b840",
textTransform: "uppercase",
}}
>
<div
style={{
width: 14,
height: 14,
background: "#f3b840",
boxShadow: "0 0 24px #f3b840",
}}
/>
<span>AGENTMEMORY</span>
</div>
<div style={{ display: "flex", flexDirection: "column", gap: 28 }}>
<div
style={{
display: "flex",
flexDirection: "column",
fontSize: 128,
fontWeight: 900,
lineHeight: 0.95,
letterSpacing: -3,
textTransform: "uppercase",
}}
>
<span>AGENT</span>
<span style={{ color: "#f3b840" }}>MEMORY</span>
</div>
<div
style={{
display: "flex",
fontSize: 32,
color: "#b8b8b8",
letterSpacing: 0.5,
maxWidth: 900,
lineHeight: 1.35,
}}
>
Persistent memory for AI coding agents. Runs locally. Zero external
databases.
</div>
</div>
<div
style={{
display: "flex",
gap: 48,
fontSize: 22,
color: "#888",
letterSpacing: 2,
textTransform: "uppercase",
fontWeight: 700,
borderTop: "1px solid #222",
paddingTop: 28,
}}
>
<div style={{ display: "flex", gap: 10 }}>
<span style={{ color: "#f3b840" }}>95.2%</span>
<span>RETRIEVAL R@5</span>
</div>
<div style={{ display: "flex", gap: 10 }}>
<span style={{ color: "#f3b840" }}>92%</span>
<span>FEWER TOKENS</span>
</div>
<div style={{ display: "flex", gap: 10 }}>
<span style={{ color: "#f3b840" }}>0</span>
<span>EXTERNAL DBs</span>
</div>
</div>
</div>
),
{ ...size },
);
}
+45
View File
@@ -0,0 +1,45 @@
import { ScrollProgress } from "@/components/ScrollProgress";
import { Nav } from "@/components/Nav";
import { Hero } from "@/components/Hero";
import { Stats } from "@/components/Stats";
import { Primitives } from "@/components/Primitives";
import { Features } from "@/components/Features";
import { CommandCenter } from "@/components/CommandCenter";
import { LiveTerminal } from "@/components/LiveTerminal";
import { Compare } from "@/components/Compare";
import { Testimonials } from "@/components/Testimonials";
import { Agents } from "@/components/Agents";
import { Install } from "@/components/Install";
import { Footer } from "@/components/Footer";
import { getProjectMeta } from "@/lib/meta";
export default function Page() {
const meta = getProjectMeta();
return (
<>
<ScrollProgress />
<Nav />
<main id="top">
<Hero />
<Stats
mcpTools={meta.mcpTools}
hooks={meta.hooks}
testsPassing={meta.testsPassing}
/>
<Primitives />
<Features
hooks={meta.hooks}
mcpTools={meta.mcpTools}
restEndpoints={meta.restEndpoints}
/>
<CommandCenter />
<LiveTerminal mcpTools={meta.mcpTools} hooks={meta.hooks} />
<Compare />
<Testimonials />
<Agents />
<Install />
</main>
<Footer />
</>
);
}
+5
View File
@@ -0,0 +1,5 @@
export const alt = "agentmemory — persistent memory for AI coding agents";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
export { default } from "./opengraph-image";