diff --git a/docs/ensnode.io/src/components/atoms/icons/ChatGptIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/ChatGptIcon.tsx new file mode 100644 index 000000000..0efceb1b6 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/ChatGptIcon.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from "react"; + +export const ChatGptIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/ChevronDownIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/ChevronDownIcon.tsx new file mode 100644 index 000000000..2615343e7 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/ChevronDownIcon.tsx @@ -0,0 +1,16 @@ +import type { SVGProps } from "react"; + +export const ChevronDownIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/ClaudeIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/ClaudeIcon.tsx new file mode 100644 index 000000000..f21f7813b --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/ClaudeIcon.tsx @@ -0,0 +1,17 @@ +import type { SVGProps } from "react"; + +export const ClaudeIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/CopyIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/CopyIcon.tsx new file mode 100644 index 000000000..bc87e47b0 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/CopyIcon.tsx @@ -0,0 +1,17 @@ +import type { SVGProps } from "react"; + +export const CopyIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/FileTextIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/FileTextIcon.tsx new file mode 100644 index 000000000..3c9d41cdf --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/FileTextIcon.tsx @@ -0,0 +1,19 @@ +import type { SVGProps } from "react"; + +export const FileTextIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/LinkIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/LinkIcon.tsx new file mode 100644 index 000000000..cdcc68901 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/LinkIcon.tsx @@ -0,0 +1,17 @@ +import type { SVGProps } from "react"; + +export const LinkIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/MarkdownIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/MarkdownIcon.tsx new file mode 100644 index 000000000..b55991295 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/MarkdownIcon.tsx @@ -0,0 +1,14 @@ +import type { SVGProps } from "react"; + +export const MarkdownIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/atoms/icons/SparklesIcon.tsx b/docs/ensnode.io/src/components/atoms/icons/SparklesIcon.tsx new file mode 100644 index 000000000..1444bcc39 --- /dev/null +++ b/docs/ensnode.io/src/components/atoms/icons/SparklesIcon.tsx @@ -0,0 +1,23 @@ +import type { SVGProps } from "react"; + +export const SparklesIcon = (props: SVGProps) => ( + +); diff --git a/docs/ensnode.io/src/components/molecules/PageActionsMenu.astro b/docs/ensnode.io/src/components/molecules/PageActionsMenu.astro new file mode 100644 index 000000000..30d8b4fb3 --- /dev/null +++ b/docs/ensnode.io/src/components/molecules/PageActionsMenu.astro @@ -0,0 +1,533 @@ +--- +import { ChevronDownIcon } from "../atoms/icons/ChevronDownIcon"; +import { ClaudeIcon } from "../atoms/icons/ClaudeIcon"; +import { CopyIcon } from "../atoms/icons/CopyIcon"; +import { FileTextIcon } from "../atoms/icons/FileTextIcon"; +import { LinkIcon } from "../atoms/icons/LinkIcon"; +import { MarkdownIcon } from "../atoms/icons/MarkdownIcon"; +import { SparklesIcon } from "../atoms/icons/SparklesIcon"; + +const RAW_CONTENT_BASE_URL = "https://raw.githubusercontent.com/namehash/ensnode/main/"; + +const entry = Astro.locals.starlightRoute.entry; +const entryData = entry?.data; +const entryDataFile = + entryData && typeof entryData === "object" && "file" in entryData ? entryData.file : undefined; + +const entryFilePath = `${entryDataFile ?? entry?.filePath ?? ""}`.replace(/^\.?\//, ""); + +const sourceMarkdownUrl = + entryFilePath.length === 0 + ? null + : new URL( + entryFilePath.startsWith("docs/ensnode.io/") + ? entryFilePath + : `docs/ensnode.io/${entryFilePath}`, + RAW_CONTENT_BASE_URL, + ).toString(); +--- + + + + + + diff --git a/docs/ensnode.io/src/components/overrides/TableOfContents.astro b/docs/ensnode.io/src/components/overrides/TableOfContents.astro index 32d4c6766..d85cb90f4 100644 --- a/docs/ensnode.io/src/components/overrides/TableOfContents.astro +++ b/docs/ensnode.io/src/components/overrides/TableOfContents.astro @@ -1,6 +1,7 @@ --- import Default from "@astrojs/starlight/components/TableOfContents.astro"; +import PageActionsMenu from "../molecules/PageActionsMenu.astro"; import ScalarTableOfContents from "../molecules/ScalarTableOfContents.astro"; import TelegramInvite from "../molecules/TelegramInvite.astro"; @@ -8,6 +9,8 @@ const { starlightRoute } = Astro.locals; const isApiReference = starlightRoute.slug === "ensapi/reference/api-reference"; --- + +
{isApiReference ? : }
diff --git a/docs/ensnode.io/src/content/docs/docs/integrate/ai-llm.mdx b/docs/ensnode.io/src/content/docs/docs/integrate/ai-llm.mdx index 913adcf96..111163c03 100644 --- a/docs/ensnode.io/src/content/docs/docs/integrate/ai-llm.mdx +++ b/docs/ensnode.io/src/content/docs/docs/integrate/ai-llm.mdx @@ -9,7 +9,7 @@ import HostedInstanceVersionWarning from "@components/molecules/HostedInstanceVe We're building the infrastructure to make ENS a first-class citizen for AI agents. -The foundation for how developers and their AI agents reach for ENS is [`ensskills`](/docs/integrate/integration-options/ensskills), that teach your AI assistant about ENS, ENSNode, the ENS Omnigraph, and how to drive [`enscli`](/docs/integrate/integration-options/enscli) — an agent- and human-friendly CLI — on your behalf. +The foundation for how developers and their AI agents reach for ENS is [`ensskills`](/docs/integrate/integration-options/ensskills), which teach your AI assistant about ENS, ENSNode, the ENS Omnigraph, and how to drive [`enscli`](/docs/integrate/integration-options/enscli) — an agent- and human-friendly CLI — on your behalf. @@ -36,6 +36,8 @@ Add `ensskills` and [`skills-npm`](https://github.com/antfu/skills-npm) to your npm install # symlinks the skills for your detected agents ``` +Use this path when you're already in a Node project and want skills to stay synced automatically via `prepare`. + ## Quickstart (`npx skills`) Not in a Node project? [`skills`](https://github.com/vercel-labs/skills) installs every ENS skill straight from the repo, pinned to the matching `v…` release tag: @@ -45,10 +47,22 @@ Not in a Node project? [`skills`](https://github.com/vercel-labs/skills) install code={`npx skills add https://github.com/namehash/ensnode/tree/v${snapshot.sdkVersion}/packages/ensskills/skills --skill '*'`} /> +Use this path when you're not in a Node project or want to install skills directly without wiring package scripts. + +Pinning to the matching `v${snapshot.sdkVersion}` tag keeps your installed skills aligned with this docs/API version. + ## Next Steps That's it — your AI agent now has all of [`ensskills`](/docs/integrate/integration-options/ensskills) at its disposal. +## Verify Installation + +Before you continue, ask your assistant to confirm it can see the installed ENS skills: + +```md title="prompt.md" +What ENS skills are available to you? +``` + ```md title=prompt.md Which address currently owns vitalik.eth and how many other domains do they own? @@ -73,6 +87,8 @@ If you aren't using `ensskills`, the entire documentation site is also published - [`/llms.txt`](https://ensnode.io/llms.txt) — a structured index of the documentation with links to every page. - [`/llms-full.txt`](https://ensnode.io/llms-full.txt) — the entire documentation concatenated into a single file, ready to drop into a model's context window. +Use `/llms.txt` when context is limited, and `/llms-full.txt` when you want maximum coverage. + Paste this at the top of a prompt to point your agent at the full documentation before asking your question: ```md title="prompt.md"