heartbeads 0.6.2 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/docs.html +2 -2
- package/.next/server/app/api/docs.rsc +2 -2
- package/.next/server/app/api/docs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/api/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/api/docs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/api/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/docs.segments/api/docs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/api/docs.segments/api/docs.segment.rsc +1 -1
- package/.next/server/app/api/docs.segments/api.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__04e6e565._.js +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__04e6e565._.js.map +1 -1
- package/.next/server/middleware/middleware-manifest.json +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/static/chunks/{7e4fcecd4ca504d5.js → 2394a2e7d0fff196.js} +3 -3
- package/.next/static/chunks/295ab055d1c2269f.css +1 -0
- package/app/page.tsx +163 -0
- package/components/AllCommentsPanel.tsx +177 -128
- package/components/BeadsGraph.tsx +8 -2
- package/components/DescriptionModal.tsx +51 -0
- package/components/ProfilePanel.tsx +107 -86
- package/package.json +1 -1
- package/.next/static/chunks/5d4996401af7e2d1.css +0 -1
- /package/.next/static/{zq8Ew2hci2YIJ61-i832n → 9kusRFLCVoWHASQ-qfwqV}/_buildManifest.js +0 -0
- /package/.next/static/{zq8Ew2hci2YIJ61-i832n → 9kusRFLCVoWHASQ-qfwqV}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{zq8Ew2hci2YIJ61-i832n → 9kusRFLCVoWHASQ-qfwqV}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--zq8Ew2hci2YIJ61_i832n--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/chunks/5d4996401af7e2d1.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/e5ac26106782d82b.js"/><script src="/_next/static/chunks/040be5eaee80bfcd.js" async=""></script><script src="/_next/static/chunks/f078d10c72e18edc.js" async=""></script><script src="/_next/static/chunks/d4bed8662d109dce.js" async=""></script><script src="/_next/static/chunks/turbopack-cebd7bd849ead8ed.js" async=""></script><script src="/_next/static/chunks/e21a7306ef24b230.js" async=""></script><script src="/_next/static/chunks/09c8275104c531d4.js" async=""></script><script src="/_next/static/chunks/d1a8e99113ecf8a3.js" async=""></script><script src="/_next/static/chunks/d3b00e56f26cda4d.js" async=""></script><title>Heartbeads API Docs</title><meta name="description" content="Public REST API documentation for Heartbeads"/><meta property="og:title" content="Heartbeads"/><meta property="og:description" content="Interactive dependency graph viewer for beads issues — see your project's heartbeat"/><meta property="og:site_name" content="Heartbeads"/><meta property="og:image" content="http://localhost:3000/image.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Heartbeads — interactive dependency graph viewer"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Heartbeads"/><meta name="twitter:description" content="Interactive dependency graph viewer for beads issues — see your project's heartbeat"/><meta name="twitter:image" content="http://localhost:3000/image.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen"><div class="max-w-3xl mx-auto px-6 py-12"><div class="mb-10"><a href="/" class="text-xs text-zinc-400 hover:text-emerald-500 transition-colors">← Back to graph</a><h1 class="text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100">Heartbeads API</h1><p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed">Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers.</p><div class="flex items-center gap-3 mt-3"><span class="text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800">v1</span><span class="text-[11px] text-zinc-400">Base path: <code class="font-mono">/api/v1</code></span></div></div><nav class="mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><h2 class="text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2">Endpoints</h2><ul class="space-y-1.5 text-sm"><li><a href="#graph" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/graph</code><span class="text-zinc-400 ml-2">— Full project snapshot</span></a></li><li><a href="#issues" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/issues/:id</code><span class="text-zinc-400 ml-2">— Single issue detail</span></a></li><li><a href="#ready" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/ready</code><span class="text-zinc-400 ml-2">— Actionable issues</span></a></li></ul></nav><section class="mb-10"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3">Common Details</h2><div class="space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed"><p>All responses include CORS headers (<code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">Access-Control-Allow-Origin: *</code>) and are cached for 30 seconds.</p><p>Every response includes a <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">_meta</code> object with <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">generated_at</code> (ISO 8601), <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">api_version</code>, <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">heartbeads_version</code>, and optional <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">warnings</code>.</p><p>Error responses return <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">{ "error": "...", "hint": "..." }</code> with appropriate HTTP status codes (404, 500).</p></div></section><section class="mb-10"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3">Authentication</h2><div class="space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed"><p>By default, no authentication is required. When heartbeads is started with <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">--password</code>, all API requests must include the password:</p><div class="space-y-2"><div class="flex items-start gap-2"><span class="shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5">1</span><div><span class="font-medium text-zinc-700 dark:text-zinc-300">Bearer token</span> (recommended)<pre class="mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto">curl -H "Authorization: Bearer <password>" http://localhost:3000/api/v1/graph</pre></div></div><div class="flex items-start gap-2"><span class="shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5">2</span><div><span class="font-medium text-zinc-700 dark:text-zinc-300">Query parameter</span><pre class="mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto">curl "http://localhost:3000/api/v1/graph?token=<gate-token>"</pre></div></div></div><p>Unauthenticated API requests return <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">401</code> with a JSON error. Browser requests are redirected to a login page.</p></div></section><hr class="border-zinc-100 dark:border-zinc-800 mb-10"/><section id="graph" class="mb-12 scroll-mt-8"><div class="flex items-center gap-2 mb-3"><span class="text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800">GET</span><code class="text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100">/api/v1/graph</code></div><p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed">Returns the entire project state in a single response: all issues with comments and claims, dependency edges, summary statistics, and a recent activity feed. This is the primary endpoint for AI agents that need full project context.</p><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Query Parameters</h3><div class="overflow-x-auto mb-4"><table class="w-full text-sm border-collapse"><thead><tr class="text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800"><th class="py-2 pr-4 font-medium">Param</th><th class="py-2 pr-4 font-medium">Type</th><th class="py-2 pr-4 font-medium">Default</th><th class="py-2 font-medium">Description</th></tr></thead><tbody class="text-zinc-600 dark:text-zinc-400"><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">status</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Comma-separated status filter: <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">open,in_progress,blocked,deferred,closed</code></td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">priority</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Comma-separated priority filter: <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">0</code> (critical) to <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">4</code> (backlog)</td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">prefix</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Filter by repo prefix (e.g. <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">beads-map</code>)</td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">include</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">comments,activity</td><td class="py-2 text-xs">Opt-in to expensive fields. Empty string skips both. Omitting returns all.</td></tr><tr><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">limit</td><td class="py-2 pr-4 text-xs">number</td><td class="py-2 pr-4 text-xs text-zinc-400">50</td><td class="py-2 text-xs">Activity feed cap (max 200)</td></tr></tbody></table></div><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Example Request</h3><pre class="bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4">curl http://localhost:3000/api/v1/graph?status=open,in_progress&limit=10</pre><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Response Shape</h3><pre class="bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto">{
|
|
1
|
+
<!DOCTYPE html><!--9kusRFLCVoWHASQ_qfwqV--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/chunks/295ab055d1c2269f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/e5ac26106782d82b.js"/><script src="/_next/static/chunks/040be5eaee80bfcd.js" async=""></script><script src="/_next/static/chunks/f078d10c72e18edc.js" async=""></script><script src="/_next/static/chunks/d4bed8662d109dce.js" async=""></script><script src="/_next/static/chunks/turbopack-cebd7bd849ead8ed.js" async=""></script><script src="/_next/static/chunks/e21a7306ef24b230.js" async=""></script><script src="/_next/static/chunks/09c8275104c531d4.js" async=""></script><script src="/_next/static/chunks/d1a8e99113ecf8a3.js" async=""></script><script src="/_next/static/chunks/d3b00e56f26cda4d.js" async=""></script><title>Heartbeads API Docs</title><meta name="description" content="Public REST API documentation for Heartbeads"/><meta property="og:title" content="Heartbeads"/><meta property="og:description" content="Interactive dependency graph viewer for beads issues — see your project's heartbeat"/><meta property="og:site_name" content="Heartbeads"/><meta property="og:image" content="http://localhost:3000/image.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Heartbeads — interactive dependency graph viewer"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Heartbeads"/><meta name="twitter:description" content="Interactive dependency graph viewer for beads issues — see your project's heartbeat"/><meta name="twitter:image" content="http://localhost:3000/image.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen"><div class="max-w-3xl mx-auto px-6 py-12"><div class="mb-10"><a href="/" class="text-xs text-zinc-400 hover:text-emerald-500 transition-colors">← Back to graph</a><h1 class="text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100">Heartbeads API</h1><p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed">Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers.</p><div class="flex items-center gap-3 mt-3"><span class="text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800">v1</span><span class="text-[11px] text-zinc-400">Base path: <code class="font-mono">/api/v1</code></span></div></div><nav class="mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><h2 class="text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2">Endpoints</h2><ul class="space-y-1.5 text-sm"><li><a href="#graph" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/graph</code><span class="text-zinc-400 ml-2">— Full project snapshot</span></a></li><li><a href="#issues" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/issues/:id</code><span class="text-zinc-400 ml-2">— Single issue detail</span></a></li><li><a href="#ready" class="text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline"><code class="font-mono text-xs">GET /api/v1/ready</code><span class="text-zinc-400 ml-2">— Actionable issues</span></a></li></ul></nav><section class="mb-10"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3">Common Details</h2><div class="space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed"><p>All responses include CORS headers (<code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">Access-Control-Allow-Origin: *</code>) and are cached for 30 seconds.</p><p>Every response includes a <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">_meta</code> object with <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">generated_at</code> (ISO 8601), <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">api_version</code>, <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">heartbeads_version</code>, and optional <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">warnings</code>.</p><p>Error responses return <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">{ "error": "...", "hint": "..." }</code> with appropriate HTTP status codes (404, 500).</p></div></section><section class="mb-10"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3">Authentication</h2><div class="space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed"><p>By default, no authentication is required. When heartbeads is started with <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">--password</code>, all API requests must include the password:</p><div class="space-y-2"><div class="flex items-start gap-2"><span class="shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5">1</span><div><span class="font-medium text-zinc-700 dark:text-zinc-300">Bearer token</span> (recommended)<pre class="mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto">curl -H "Authorization: Bearer <password>" http://localhost:3000/api/v1/graph</pre></div></div><div class="flex items-start gap-2"><span class="shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5">2</span><div><span class="font-medium text-zinc-700 dark:text-zinc-300">Query parameter</span><pre class="mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto">curl "http://localhost:3000/api/v1/graph?token=<gate-token>"</pre></div></div></div><p>Unauthenticated API requests return <code class="text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded">401</code> with a JSON error. Browser requests are redirected to a login page.</p></div></section><hr class="border-zinc-100 dark:border-zinc-800 mb-10"/><section id="graph" class="mb-12 scroll-mt-8"><div class="flex items-center gap-2 mb-3"><span class="text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800">GET</span><code class="text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100">/api/v1/graph</code></div><p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed">Returns the entire project state in a single response: all issues with comments and claims, dependency edges, summary statistics, and a recent activity feed. This is the primary endpoint for AI agents that need full project context.</p><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Query Parameters</h3><div class="overflow-x-auto mb-4"><table class="w-full text-sm border-collapse"><thead><tr class="text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800"><th class="py-2 pr-4 font-medium">Param</th><th class="py-2 pr-4 font-medium">Type</th><th class="py-2 pr-4 font-medium">Default</th><th class="py-2 font-medium">Description</th></tr></thead><tbody class="text-zinc-600 dark:text-zinc-400"><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">status</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Comma-separated status filter: <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">open,in_progress,blocked,deferred,closed</code></td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">priority</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Comma-separated priority filter: <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">0</code> (critical) to <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">4</code> (backlog)</td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">prefix</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">all</td><td class="py-2 text-xs">Filter by repo prefix (e.g. <code class="bg-zinc-100 dark:bg-zinc-800 px-1 rounded">beads-map</code>)</td></tr><tr class="border-b border-zinc-50 dark:border-zinc-800"><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">include</td><td class="py-2 pr-4 text-xs">string</td><td class="py-2 pr-4 text-xs text-zinc-400">comments,activity</td><td class="py-2 text-xs">Opt-in to expensive fields. Empty string skips both. Omitting returns all.</td></tr><tr><td class="py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400">limit</td><td class="py-2 pr-4 text-xs">number</td><td class="py-2 pr-4 text-xs text-zinc-400">50</td><td class="py-2 text-xs">Activity feed cap (max 200)</td></tr></tbody></table></div><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Example Request</h3><pre class="bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4">curl http://localhost:3000/api/v1/graph?status=open,in_progress&limit=10</pre><h3 class="text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2">Response Shape</h3><pre class="bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto">{
|
|
2
2
|
"project": {
|
|
3
3
|
"name": "my-project",
|
|
4
4
|
"prefix": "my-proj",
|
|
@@ -117,4 +117,4 @@ curl "http://localhost:3000/api/v1/ready?limit=5"</pre><h3 class="text
|
|
|
117
117
|
"by_type": { "bug": 4, "feature": 6, "task": 2 }
|
|
118
118
|
},
|
|
119
119
|
"_meta": { ... }
|
|
120
|
-
}</pre></section><hr class="border-zinc-100 dark:border-zinc-800 mb-10"/><section class="mb-12"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4">Example Use Cases</h2><div class="space-y-3"><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Playwright test bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/ready?type=feature&unclaimed=true</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Finds untested features, writes E2E tests</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Code reviewer AI</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph?status=in_progress</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Reviews work in progress, posts feedback as comments</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Planning agent</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Analyzes the full dependency graph, identifies bottlenecks</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">CI/CD bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/issues/:id</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Checks a specific issue's status after deployment</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Standup bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph?include=activity&limit=20</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Summarizes the last 20 activities for daily standup</div></div></div></div></section><footer class="text-center text-xs text-zinc-300 dark:text-zinc-600 pt-6 border-t border-zinc-100 dark:border-zinc-800">Heartbeads API v1</footer></div></div><!--$--><!--/$--><script src="/_next/static/chunks/e5ac26106782d82b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[63398,[\"/_next/static/chunks/e21a7306ef24b230.js\"],\"AuthProvider\"]\n3:I[20446,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"default\"]\n4:I[2300,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"default\"]\n5:I[36768,[\"/_next/static/chunks/e21a7306ef24b230.js\",\"/_next/static/chunks/d3b00e56f26cda4d.js\"],\"default\"]\n14:I[61316,[],\"default\"]\n:HL[\"/_next/static/chunks/5d4996401af7e2d1.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"zq8Ew2hci2YIJ61-i832n\",\"c\":[\"\",\"api\",\"docs\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"api\",{\"children\":[\"docs\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/5d4996401af7e2d1.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/e21a7306ef24b230.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto px-6 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"text-xs text-zinc-400 hover:text-emerald-500 transition-colors\",\"children\":\"← Back to graph\"}],[\"$\",\"h1\",null,{\"className\":\"text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100\",\"children\":\"Heartbeads API\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed\",\"children\":\"Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers.\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mt-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"v1\"}],[\"$\",\"span\",null,{\"className\":\"text-[11px] text-zinc-400\",\"children\":[\"Base path: \",[\"$\",\"code\",null,{\"className\":\"font-mono\",\"children\":\"/api/v1\"}]]}]]}]]}],[\"$\",\"nav\",null,{\"className\":\"mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2\",\"children\":\"Endpoints\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-1.5 text-sm\",\"children\":[[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#graph\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/graph\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Full project snapshot\"}]]}]}],[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#issues\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/issues/:id\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Single issue detail\"}]]}]}],[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#ready\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/ready\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Actionable issues\"}]]}]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3\",\"children\":\"Common Details\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"All responses include CORS headers (\",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"Access-Control-Allow-Origin: *\"}],\") and are cached for 30 seconds.\"]}],\"$L6\",\"$L7\"]}]]}],\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\",\"$L10\",\"$L11\"]}]}],null,\"$L12\"]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],\"$L13\",false]],\"m\":\"$undefined\",\"G\":[\"$14\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"25:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"OutletBoundary\"]\n26:\"$Sreact.suspense\"\n28:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"ViewportBoundary\"]\n2a:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"MetadataBoundary\"]\n6:[\"$\",\"p\",null,{\"children\":[\"Every response includes a \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"_meta\"}],\" object with \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"generated_at\"}],\" (ISO 8601), \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"api_version\"}],\", \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"heartbeads_version\"}],\", and optional \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"warnings\"}],\".\"]}]\n7:[\"$\",\"p\",null,{\"children\":[\"Error responses return \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"{ \\\"error\\\": \\\"...\\\", \\\"hint\\\": \\\"...\\\" }\"}],\" with appropriate HTTP status codes (404, 500).\"]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"section\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3\",\"children\":\"Authentication\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"By default, no authentication is required. When heartbeads is started with \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"--password\"}],\", all API requests must include the password:\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5\",\"children\":\"1\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Bearer token\"}],\" (recommended)\",[\"$\",\"pre\",null,{\"className\":\"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto\",\"children\":\"curl -H \\\"Authorization: Bearer \u003cpassword\u003e\\\" http://localhost:3000/api/v1/graph\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-start gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5\",\"children\":\"2\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Query parameter\"}],[\"$\",\"pre\",null,{\"className\":\"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto\",\"children\":\"curl \\\"http://localhost:3000/api/v1/graph?token=\u003cgate-token\u003e\\\"\"}]]}]]}]]}],[\"$\",\"p\",null,{\"children\":[\"Unauthenticated API requests return \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"401\"}],\" with a JSON error. Browser requests are redirected to a login page.\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"section\",null,{\"id\":\"graph\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/graph\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":\"Returns the entire project state in a single response: all issues with comments and claims, dependency edges, summary statistics, and a recent activity feed. This is the primary endpoint for AI agents that need full project context.\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Query Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Type\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Default\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"status\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated status filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"open,in_progress,blocked,deferred,closed\"}]]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"priority\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated priority filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"0\"}],\" (critical) to \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"4\"}],\" (backlog)\"]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"prefix\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Filter by repo prefix (e.g. \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"beads-map\"}],\")\"]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"include\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"comments,activity\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Opt-in to expensive fields. Empty string skips both. Omitting returns all.\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"limit\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"number\"}],\"$L15\",\"$L16\"]}]]}]]}]}],\"$L17\",\"$L18\",\"$L19\",\"$L1a\"]}]\n"])</script><script>self.__next_f.push([1,"b:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"section\",null,{\"id\":\"issues\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/issues/:id\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"Returns a single issue with its full description, threaded comments, claim info, and enriched blockers/dependents (each includes \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"title\"}],\" and \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"status\"}],\" so you can understand the blocking context without extra requests).\"]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Path Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"id\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"The issue ID (e.g. \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"beads-map-abc\"}],\")\"]}]]}]}]]}]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Request\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"curl http://localhost:3000/api/v1/issues/beads-map-abc\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"{\\n \\\"issue\\\": {\\n \\\"id\\\": \\\"beads-map-abc\\\",\\n \\\"title\\\": \\\"Fix login redirect\\\",\\n \\\"description\\\": \\\"Full markdown description...\\\",\\n \\\"status\\\": \\\"open\\\",\\n \\\"priority\\\": 1,\\n \\\"issue_type\\\": \\\"bug\\\",\\n \\\"owner\\\": \\\"alice\\\",\\n \\\"assignee\\\": null,\\n \\\"labels\\\": [],\\n \\\"created_at\\\": \\\"2025-01-15T10:00:00Z\\\",\\n \\\"updated_at\\\": \\\"2025-01-16T14:30:00Z\\\",\\n \\\"closed_at\\\": null,\\n \\\"close_reason\\\": null,\\n \\\"prefix\\\": \\\"beads-map\\\",\\n \\\"blockers\\\": [\\n { \\\"id\\\": \\\"beads-map-xyz\\\", \\\"title\\\": \\\"Deploy auth service\\\", \\\"status\\\": \\\"in_progress\\\" }\\n ],\\n \\\"dependents\\\": [\\n { \\\"id\\\": \\\"beads-map-def\\\", \\\"title\\\": \\\"Add SSO support\\\", \\\"status\\\": \\\"open\\\" }\\n ],\\n \\\"comments\\\": [...],\\n \\\"claimed_by\\\": null\\n },\\n \\\"_meta\\\": { ... }\\n}\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Error Response (404)\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"{\\n \\\"error\\\": \\\"Issue not found\\\",\\n \\\"hint\\\": \\\"No issue with id \\\\\\\"nonexistent\\\\\\\". Use GET /api/v1/graph to list all issues.\\\"\\n}\"}]]}]\n"])</script><script>self.__next_f.push([1,"d:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"e:[\"$\",\"section\",null,{\"id\":\"ready\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/ready\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"Returns issues that are ready to work on: status is \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"open\"}],\" or \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"in_progress\"}],\" and all upstream blockers are \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"closed\"}],\". Sorted by priority (critical first), then by age (oldest first).\"]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"This is the “what should I work on?” endpoint. A Playwright test bot can hit \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"?type=feature\u0026unclaimed=true\"}],\" to find untested features. A code reviewer can query \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"?type=bug\"}],\" to find bugs needing review.\"]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Query Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Type\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Default\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"unclaimed\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"boolean\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"false\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Only return issues with no claim comment\"}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"type\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated issue type filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"task,bug,feature,chore,epic\"}]]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"assignee\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Filter by assignee handle\"}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"prefix\"}],\"$L1b\",\"$L1c\",\"$L1d\"]}],\"$L1e\"]}]]}]}],\"$L1f\",\"$L20\",\"$L21\",\"$L22\"]}]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"10:[\"$\",\"section\",null,{\"className\":\"mb-12\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4\",\"children\":\"Example Use Cases\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"div\",\"Playwright test bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Playwright test bot\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/ready?type=feature\u0026unclaimed=true\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Finds untested features, writes E2E tests\"}]]}]]}],[\"$\",\"div\",\"Code reviewer AI\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Code reviewer AI\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph?status=in_progress\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Reviews work in progress, posts feedback as comments\"}]]}]]}],[\"$\",\"div\",\"Planning agent\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Planning agent\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Analyzes the full dependency graph, identifies bottlenecks\"}]]}]]}],[\"$\",\"div\",\"CI/CD bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"CI/CD bot\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/issues/:id\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Checks a specific issue's status after deployment\"}]]}]]}],[\"$\",\"div\",\"Standup bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Standup bot\"}],\"$L23\",\"$L24\"]}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"footer\",null,{\"className\":\"text-center text-xs text-zinc-300 dark:text-zinc-600 pt-6 border-t border-zinc-100 dark:border-zinc-800\",\"children\":\"Heartbeads API v1\"}]\n12:[\"$\",\"$L25\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@27\"}]}]\n13:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L28\",null,{\"children\":\"$L29\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L2a\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L2b\"}]}]}],null]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"50\"}]\n16:[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Activity feed cap (max 200)\"}]\n17:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Request\"}]\n18:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"curl http://localhost:3000/api/v1/graph?status=open,in_progress\u0026limit=10\"}]\n19:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}]\n2c:T6bc,"])</script><script>self.__next_f.push([1,"{\n \"project\": {\n \"name\": \"my-project\",\n \"prefix\": \"my-proj\",\n \"repos\": [\".\", \"../backend\"],\n \"repoUrls\": { \"my-proj\": \"https://github.com/org/my-project\" }\n },\n \"issues\": [\n {\n \"id\": \"my-proj-abc\",\n \"title\": \"Fix login redirect\",\n \"description\": \"Full markdown description...\",\n \"status\": \"open\",\n \"priority\": 1,\n \"issue_type\": \"bug\",\n \"owner\": \"alice\",\n \"assignee\": \"bob\",\n \"labels\": [],\n \"created_at\": \"2025-01-15T10:00:00Z\",\n \"updated_at\": \"2025-01-16T14:30:00Z\",\n \"closed_at\": null,\n \"close_reason\": null,\n \"prefix\": \"my-proj\",\n \"blockers\": [\"my-proj-xyz\"],\n \"dependents\": [\"my-proj-def\"],\n \"comments\": [\n {\n \"author\": { \"handle\": \"alice.bsky.social\", \"did\": \"did:plc:...\" },\n \"text\": \"This needs to be fixed before release\",\n \"createdAt\": \"2025-01-16T14:30:00Z\",\n \"likes\": 2,\n \"replies\": []\n }\n ],\n \"claimed_by\": {\n \"handle\": \"bob.bsky.social\",\n \"did\": \"did:plc:...\",\n \"claimed_at\": \"2025-01-16T15:00:00Z\"\n }\n }\n ],\n \"dependencies\": [\n { \"from\": \"my-proj-xyz\", \"to\": \"my-proj-abc\", \"type\": \"blocks\" }\n ],\n \"stats\": {\n \"total\": 42, \"open\": 15, \"in_progress\": 8,\n \"blocked\": 3, \"closed\": 16, \"actionable\": 12\n },\n \"activity\": [\n {\n \"type\": \"comment-added\",\n \"time\": \"2025-01-16T14:30:00Z\",\n \"issue_id\": \"my-proj-abc\",\n \"issue_title\": \"Fix login redirect\",\n \"actor\": { \"handle\": \"alice.bsky.social\" },\n \"detail\": \"This needs to be fixed...\"\n }\n ],\n \"_meta\": {\n \"generated_at\": \"2025-01-17T09:00:00Z\",\n \"api_version\": \"v1\",\n \"heartbeads_version\": \"0.3.7\"\n }\n}"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"$2c\"}]\n1b:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}]\n1c:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}]\n1d:[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Filter by repo prefix\"}]\n1e:[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"limit\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"number\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Max issues returned\"}]]}]\n1f:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Requests\"}]\n20:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"# All actionable issues\\ncurl http://localhost:3000/api/v1/ready\\n\\n# Only unclaimed bugs\\ncurl \\\"http://localhost:3000/api/v1/ready?unclaimed=true\u0026type=bug\\\"\\n\\n# Top 5 highest priority\\ncurl \\\"http://localhost:3000/api/v1/ready?limit=5\\\"\"}]\n21:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}]\n22:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"{\\n \\\"issues\\\": [\\n {\\n \\\"id\\\": \\\"my-proj-abc\\\",\\n \\\"title\\\": \\\"Fix login redirect\\\",\\n \\\"status\\\": \\\"open\\\",\\n \\\"priority\\\": 0,\\n \\\"issue_type\\\": \\\"bug\\\",\\n ...\\n \\\"comments\\\": [...],\\n \\\"claimed_by\\\": null\\n }\\n ],\\n \\\"stats\\\": {\\n \\\"total_ready\\\": 12,\\n \\\"unclaimed\\\": 8,\\n \\\"by_priority\\\": { \\\"0\\\": 2, \\\"1\\\": 5, \\\"2\\\": 3, \\\"3\\\": 2 },\\n \\\"by_type\\\": { \\\"bug\\\": 4, \\\"feature\\\": 6, \\\"task\\\": 2 }\\n },\\n \\\"_meta\\\": { ... }\\n}\"}]\n23:[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph?include=activity\u0026limit=20\"}]\n24:[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Summarizes the last 20 activities for daily standup\"}]\n"])</script><script>self.__next_f.push([1,"29:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"27:null\n2b:[[\"$\",\"title\",\"0\",{\"children\":\"Heartbeads API Docs\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Public REST API documentation for Heartbeads\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Interactive dependency graph viewer for beads issues — see your project's heartbeat\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:site_name\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:image\",\"content\":\"http://localhost:3000/image.png\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:alt\",\"content\":\"Heartbeads — interactive dependency graph viewer\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:title\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:description\",\"content\":\"Interactive dependency graph viewer for beads issues — see your project's heartbeat\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"http://localhost:3000/image.png\"}]]\n"])</script></body></html>
|
|
120
|
+
}</pre></section><hr class="border-zinc-100 dark:border-zinc-800 mb-10"/><section class="mb-12"><h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4">Example Use Cases</h2><div class="space-y-3"><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Playwright test bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/ready?type=feature&unclaimed=true</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Finds untested features, writes E2E tests</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Code reviewer AI</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph?status=in_progress</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Reviews work in progress, posts feedback as comments</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Planning agent</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Analyzes the full dependency graph, identifies bottlenecks</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">CI/CD bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/issues/:id</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Checks a specific issue's status after deployment</div></div></div><div class="flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800"><div class="shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5"><div class="w-1.5 h-1.5 rounded-full bg-teal-500"></div></div><div><div class="text-xs font-semibold text-zinc-700 dark:text-zinc-300">Standup bot</div><code class="text-[11px] font-mono text-teal-600 dark:text-teal-400">GET /api/v1/graph?include=activity&limit=20</code><div class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">Summarizes the last 20 activities for daily standup</div></div></div></div></section><footer class="text-center text-xs text-zinc-300 dark:text-zinc-600 pt-6 border-t border-zinc-100 dark:border-zinc-800">Heartbeads API v1</footer></div></div><!--$--><!--/$--><script src="/_next/static/chunks/e5ac26106782d82b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[63398,[\"/_next/static/chunks/e21a7306ef24b230.js\"],\"AuthProvider\"]\n3:I[20446,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"default\"]\n4:I[2300,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"default\"]\n5:I[36768,[\"/_next/static/chunks/e21a7306ef24b230.js\",\"/_next/static/chunks/d3b00e56f26cda4d.js\"],\"default\"]\n14:I[61316,[],\"default\"]\n:HL[\"/_next/static/chunks/295ab055d1c2269f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"9kusRFLCVoWHASQ-qfwqV\",\"c\":[\"\",\"api\",\"docs\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"api\",{\"children\":[\"docs\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/295ab055d1c2269f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/e21a7306ef24b230.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-3xl mx-auto px-6 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"text-xs text-zinc-400 hover:text-emerald-500 transition-colors\",\"children\":\"← Back to graph\"}],[\"$\",\"h1\",null,{\"className\":\"text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100\",\"children\":\"Heartbeads API\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed\",\"children\":\"Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers.\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3 mt-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"v1\"}],[\"$\",\"span\",null,{\"className\":\"text-[11px] text-zinc-400\",\"children\":[\"Base path: \",[\"$\",\"code\",null,{\"className\":\"font-mono\",\"children\":\"/api/v1\"}]]}]]}]]}],[\"$\",\"nav\",null,{\"className\":\"mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2\",\"children\":\"Endpoints\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-1.5 text-sm\",\"children\":[[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#graph\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/graph\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Full project snapshot\"}]]}]}],[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#issues\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/issues/:id\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Single issue detail\"}]]}]}],[\"$\",\"li\",null,{\"children\":[\"$\",\"a\",null,{\"href\":\"#ready\",\"className\":\"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline\",\"children\":[[\"$\",\"code\",null,{\"className\":\"font-mono text-xs\",\"children\":\"GET /api/v1/ready\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 ml-2\",\"children\":\"— Actionable issues\"}]]}]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3\",\"children\":\"Common Details\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"All responses include CORS headers (\",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"Access-Control-Allow-Origin: *\"}],\") and are cached for 30 seconds.\"]}],\"$L6\",\"$L7\"]}]]}],\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\",\"$L10\",\"$L11\"]}]}],null,\"$L12\"]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],\"$L13\",false]],\"m\":\"$undefined\",\"G\":[\"$14\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"25:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"OutletBoundary\"]\n26:\"$Sreact.suspense\"\n28:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"ViewportBoundary\"]\n2a:I[63420,[\"/_next/static/chunks/09c8275104c531d4.js\",\"/_next/static/chunks/d1a8e99113ecf8a3.js\"],\"MetadataBoundary\"]\n6:[\"$\",\"p\",null,{\"children\":[\"Every response includes a \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"_meta\"}],\" object with \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"generated_at\"}],\" (ISO 8601), \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"api_version\"}],\", \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"heartbeads_version\"}],\", and optional \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"warnings\"}],\".\"]}]\n7:[\"$\",\"p\",null,{\"children\":[\"Error responses return \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"{ \\\"error\\\": \\\"...\\\", \\\"hint\\\": \\\"...\\\" }\"}],\" with appropriate HTTP status codes (404, 500).\"]}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"section\",null,{\"className\":\"mb-10\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3\",\"children\":\"Authentication\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed\",\"children\":[[\"$\",\"p\",null,{\"children\":[\"By default, no authentication is required. When heartbeads is started with \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"--password\"}],\", all API requests must include the password:\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5\",\"children\":\"1\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Bearer token\"}],\" (recommended)\",[\"$\",\"pre\",null,{\"className\":\"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto\",\"children\":\"curl -H \\\"Authorization: Bearer \u003cpassword\u003e\\\" http://localhost:3000/api/v1/graph\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-start gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5\",\"children\":\"2\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Query parameter\"}],[\"$\",\"pre\",null,{\"className\":\"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto\",\"children\":\"curl \\\"http://localhost:3000/api/v1/graph?token=\u003cgate-token\u003e\\\"\"}]]}]]}]]}],[\"$\",\"p\",null,{\"children\":[\"Unauthenticated API requests return \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"401\"}],\" with a JSON error. Browser requests are redirected to a login page.\"]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"a:[\"$\",\"section\",null,{\"id\":\"graph\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/graph\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":\"Returns the entire project state in a single response: all issues with comments and claims, dependency edges, summary statistics, and a recent activity feed. This is the primary endpoint for AI agents that need full project context.\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Query Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Type\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Default\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"status\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated status filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"open,in_progress,blocked,deferred,closed\"}]]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"priority\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated priority filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"0\"}],\" (critical) to \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"4\"}],\" (backlog)\"]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"prefix\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Filter by repo prefix (e.g. \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"beads-map\"}],\")\"]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"include\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"comments,activity\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Opt-in to expensive fields. Empty string skips both. Omitting returns all.\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"limit\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"number\"}],\"$L15\",\"$L16\"]}]]}]]}]}],\"$L17\",\"$L18\",\"$L19\",\"$L1a\"]}]\n"])</script><script>self.__next_f.push([1,"b:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"section\",null,{\"id\":\"issues\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/issues/:id\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"Returns a single issue with its full description, threaded comments, claim info, and enriched blockers/dependents (each includes \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"title\"}],\" and \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"status\"}],\" so you can understand the blocking context without extra requests).\"]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Path Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"id\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"The issue ID (e.g. \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"beads-map-abc\"}],\")\"]}]]}]}]]}]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Request\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"curl http://localhost:3000/api/v1/issues/beads-map-abc\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"{\\n \\\"issue\\\": {\\n \\\"id\\\": \\\"beads-map-abc\\\",\\n \\\"title\\\": \\\"Fix login redirect\\\",\\n \\\"description\\\": \\\"Full markdown description...\\\",\\n \\\"status\\\": \\\"open\\\",\\n \\\"priority\\\": 1,\\n \\\"issue_type\\\": \\\"bug\\\",\\n \\\"owner\\\": \\\"alice\\\",\\n \\\"assignee\\\": null,\\n \\\"labels\\\": [],\\n \\\"created_at\\\": \\\"2025-01-15T10:00:00Z\\\",\\n \\\"updated_at\\\": \\\"2025-01-16T14:30:00Z\\\",\\n \\\"closed_at\\\": null,\\n \\\"close_reason\\\": null,\\n \\\"prefix\\\": \\\"beads-map\\\",\\n \\\"blockers\\\": [\\n { \\\"id\\\": \\\"beads-map-xyz\\\", \\\"title\\\": \\\"Deploy auth service\\\", \\\"status\\\": \\\"in_progress\\\" }\\n ],\\n \\\"dependents\\\": [\\n { \\\"id\\\": \\\"beads-map-def\\\", \\\"title\\\": \\\"Add SSO support\\\", \\\"status\\\": \\\"open\\\" }\\n ],\\n \\\"comments\\\": [...],\\n \\\"claimed_by\\\": null\\n },\\n \\\"_meta\\\": { ... }\\n}\"}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Error Response (404)\"}],[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"{\\n \\\"error\\\": \\\"Issue not found\\\",\\n \\\"hint\\\": \\\"No issue with id \\\\\\\"nonexistent\\\\\\\". Use GET /api/v1/graph to list all issues.\\\"\\n}\"}]]}]\n"])</script><script>self.__next_f.push([1,"d:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"e:[\"$\",\"section\",null,{\"id\":\"ready\",\"className\":\"mb-12 scroll-mt-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] font-mono font-bold px-2 py-0.5 rounded bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800\",\"children\":\"GET\"}],[\"$\",\"code\",null,{\"className\":\"text-sm font-mono font-semibold text-zinc-900 dark:text-zinc-100\",\"children\":\"/api/v1/ready\"}]]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-600 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"Returns issues that are ready to work on: status is \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"open\"}],\" or \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"in_progress\"}],\" and all upstream blockers are \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"closed\"}],\". Sorted by priority (critical first), then by age (oldest first).\"]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400 mb-4 leading-relaxed\",\"children\":[\"This is the “what should I work on?” endpoint. A Playwright test bot can hit \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"?type=feature\u0026unclaimed=true\"}],\" to find untested features. A code reviewer can query \",[\"$\",\"code\",null,{\"className\":\"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded\",\"children\":\"?type=bug\"}],\" to find bugs needing review.\"]}],[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Query Parameters\"}],[\"$\",\"div\",null,{\"className\":\"overflow-x-auto mb-4\",\"children\":[\"$\",\"table\",null,{\"className\":\"w-full text-sm border-collapse\",\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"className\":\"text-left text-xs text-zinc-500 dark:text-zinc-400 border-b border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Param\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Type\"}],[\"$\",\"th\",null,{\"className\":\"py-2 pr-4 font-medium\",\"children\":\"Default\"}],[\"$\",\"th\",null,{\"className\":\"py-2 font-medium\",\"children\":\"Description\"}]]}]}],[\"$\",\"tbody\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400\",\"children\":[[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"unclaimed\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"boolean\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"false\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Only return issues with no claim comment\"}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"type\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":[\"Comma-separated issue type filter: \",[\"$\",\"code\",null,{\"className\":\"bg-zinc-100 dark:bg-zinc-800 px-1 rounded\",\"children\":\"task,bug,feature,chore,epic\"}]]}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"assignee\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Filter by assignee handle\"}]]}],[\"$\",\"tr\",null,{\"className\":\"border-b border-zinc-50 dark:border-zinc-800\",\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"prefix\"}],\"$L1b\",\"$L1c\",\"$L1d\"]}],\"$L1e\"]}]]}]}],\"$L1f\",\"$L20\",\"$L21\",\"$L22\"]}]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"hr\",null,{\"className\":\"border-zinc-100 dark:border-zinc-800 mb-10\"}]\n"])</script><script>self.__next_f.push([1,"10:[\"$\",\"section\",null,{\"className\":\"mb-12\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4\",\"children\":\"Example Use Cases\"}],[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"div\",\"Playwright test bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Playwright test bot\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/ready?type=feature\u0026unclaimed=true\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Finds untested features, writes E2E tests\"}]]}]]}],[\"$\",\"div\",\"Code reviewer AI\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Code reviewer AI\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph?status=in_progress\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Reviews work in progress, posts feedback as comments\"}]]}]]}],[\"$\",\"div\",\"Planning agent\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Planning agent\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Analyzes the full dependency graph, identifies bottlenecks\"}]]}]]}],[\"$\",\"div\",\"CI/CD bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"CI/CD bot\"}],[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/issues/:id\"}],[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Checks a specific issue's status after deployment\"}]]}]]}],[\"$\",\"div\",\"Standup bot\",{\"className\":\"flex items-start gap-3 p-3 rounded-lg bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"shrink-0 w-5 h-5 rounded-full bg-teal-100 dark:bg-teal-900 flex items-center justify-center mt-0.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-teal-500\"}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Standup bot\"}],\"$L23\",\"$L24\"]}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"footer\",null,{\"className\":\"text-center text-xs text-zinc-300 dark:text-zinc-600 pt-6 border-t border-zinc-100 dark:border-zinc-800\",\"children\":\"Heartbeads API v1\"}]\n12:[\"$\",\"$L25\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@27\"}]}]\n13:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L28\",null,{\"children\":\"$L29\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L2a\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L2b\"}]}]}],null]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"50\"}]\n16:[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Activity feed cap (max 200)\"}]\n17:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Request\"}]\n18:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"curl http://localhost:3000/api/v1/graph?status=open,in_progress\u0026limit=10\"}]\n19:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}]\n2c:T6bc,"])</script><script>self.__next_f.push([1,"{\n \"project\": {\n \"name\": \"my-project\",\n \"prefix\": \"my-proj\",\n \"repos\": [\".\", \"../backend\"],\n \"repoUrls\": { \"my-proj\": \"https://github.com/org/my-project\" }\n },\n \"issues\": [\n {\n \"id\": \"my-proj-abc\",\n \"title\": \"Fix login redirect\",\n \"description\": \"Full markdown description...\",\n \"status\": \"open\",\n \"priority\": 1,\n \"issue_type\": \"bug\",\n \"owner\": \"alice\",\n \"assignee\": \"bob\",\n \"labels\": [],\n \"created_at\": \"2025-01-15T10:00:00Z\",\n \"updated_at\": \"2025-01-16T14:30:00Z\",\n \"closed_at\": null,\n \"close_reason\": null,\n \"prefix\": \"my-proj\",\n \"blockers\": [\"my-proj-xyz\"],\n \"dependents\": [\"my-proj-def\"],\n \"comments\": [\n {\n \"author\": { \"handle\": \"alice.bsky.social\", \"did\": \"did:plc:...\" },\n \"text\": \"This needs to be fixed before release\",\n \"createdAt\": \"2025-01-16T14:30:00Z\",\n \"likes\": 2,\n \"replies\": []\n }\n ],\n \"claimed_by\": {\n \"handle\": \"bob.bsky.social\",\n \"did\": \"did:plc:...\",\n \"claimed_at\": \"2025-01-16T15:00:00Z\"\n }\n }\n ],\n \"dependencies\": [\n { \"from\": \"my-proj-xyz\", \"to\": \"my-proj-abc\", \"type\": \"blocks\" }\n ],\n \"stats\": {\n \"total\": 42, \"open\": 15, \"in_progress\": 8,\n \"blocked\": 3, \"closed\": 16, \"actionable\": 12\n },\n \"activity\": [\n {\n \"type\": \"comment-added\",\n \"time\": \"2025-01-16T14:30:00Z\",\n \"issue_id\": \"my-proj-abc\",\n \"issue_title\": \"Fix login redirect\",\n \"actor\": { \"handle\": \"alice.bsky.social\" },\n \"detail\": \"This needs to be fixed...\"\n }\n ],\n \"_meta\": {\n \"generated_at\": \"2025-01-17T09:00:00Z\",\n \"api_version\": \"v1\",\n \"heartbeads_version\": \"0.3.7\"\n }\n}"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"$2c\"}]\n1b:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"string\"}]\n1c:[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}]\n1d:[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Filter by repo prefix\"}]\n1e:[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 font-mono text-xs text-teal-600 dark:text-teal-400\",\"children\":\"limit\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs\",\"children\":\"number\"}],[\"$\",\"td\",null,{\"className\":\"py-2 pr-4 text-xs text-zinc-400\",\"children\":\"all\"}],[\"$\",\"td\",null,{\"className\":\"py-2 text-xs\",\"children\":\"Max issues returned\"}]]}]\n1f:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Example Requests\"}]\n20:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto mb-4\",\"children\":\"# All actionable issues\\ncurl http://localhost:3000/api/v1/ready\\n\\n# Only unclaimed bugs\\ncurl \\\"http://localhost:3000/api/v1/ready?unclaimed=true\u0026type=bug\\\"\\n\\n# Top 5 highest priority\\ncurl \\\"http://localhost:3000/api/v1/ready?limit=5\\\"\"}]\n21:[\"$\",\"h3\",null,{\"className\":\"text-xs font-semibold text-zinc-700 dark:text-zinc-300 mb-2\",\"children\":\"Response Shape\"}]\n22:[\"$\",\"pre\",null,{\"className\":\"bg-zinc-950 text-zinc-300 rounded-lg p-4 text-xs font-mono overflow-x-auto\",\"children\":\"{\\n \\\"issues\\\": [\\n {\\n \\\"id\\\": \\\"my-proj-abc\\\",\\n \\\"title\\\": \\\"Fix login redirect\\\",\\n \\\"status\\\": \\\"open\\\",\\n \\\"priority\\\": 0,\\n \\\"issue_type\\\": \\\"bug\\\",\\n ...\\n \\\"comments\\\": [...],\\n \\\"claimed_by\\\": null\\n }\\n ],\\n \\\"stats\\\": {\\n \\\"total_ready\\\": 12,\\n \\\"unclaimed\\\": 8,\\n \\\"by_priority\\\": { \\\"0\\\": 2, \\\"1\\\": 5, \\\"2\\\": 3, \\\"3\\\": 2 },\\n \\\"by_type\\\": { \\\"bug\\\": 4, \\\"feature\\\": 6, \\\"task\\\": 2 }\\n },\\n \\\"_meta\\\": { ... }\\n}\"}]\n23:[\"$\",\"code\",null,{\"className\":\"text-[11px] font-mono text-teal-600 dark:text-teal-400\",\"children\":\"GET /api/v1/graph?include=activity\u0026limit=20\"}]\n24:[\"$\",\"div\",null,{\"className\":\"text-xs text-zinc-500 dark:text-zinc-400 mt-0.5\",\"children\":\"Summarizes the last 20 activities for daily standup\"}]\n"])</script><script>self.__next_f.push([1,"29:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"27:null\n2b:[[\"$\",\"title\",\"0\",{\"children\":\"Heartbeads API Docs\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Public REST API documentation for Heartbeads\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Interactive dependency graph viewer for beads issues — see your project's heartbeat\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:site_name\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:image\",\"content\":\"http://localhost:3000/image.png\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:alt\",\"content\":\"Heartbeads — interactive dependency graph viewer\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:title\",\"content\":\"Heartbeads\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:description\",\"content\":\"Interactive dependency graph viewer for beads issues — see your project's heartbeat\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"http://localhost:3000/image.png\"}]]\n"])</script></body></html>
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
4:I[2300,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
5
5
|
5:I[36768,["/_next/static/chunks/e21a7306ef24b230.js","/_next/static/chunks/d3b00e56f26cda4d.js"],"default"]
|
|
6
6
|
14:I[61316,[],"default"]
|
|
7
|
-
:HL["/_next/static/chunks/
|
|
8
|
-
0:{"P":null,"b":"
|
|
7
|
+
:HL["/_next/static/chunks/295ab055d1c2269f.css","style"]
|
|
8
|
+
0:{"P":null,"b":"9kusRFLCVoWHASQ-qfwqV","c":["","api","docs"],"q":"","i":false,"f":[[["",{"children":["api",{"children":["docs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/295ab055d1c2269f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/e21a7306ef24b230.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$L5",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen","children":["$","div",null,{"className":"max-w-3xl mx-auto px-6 py-12","children":[["$","div",null,{"className":"mb-10","children":[["$","a",null,{"href":"/","className":"text-xs text-zinc-400 hover:text-emerald-500 transition-colors","children":"← Back to graph"}],["$","h1",null,{"className":"text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100","children":"Heartbeads API"}],["$","p",null,{"className":"text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed","children":"Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers."}],["$","div",null,{"className":"flex items-center gap-3 mt-3","children":[["$","span",null,{"className":"text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800","children":"v1"}],["$","span",null,{"className":"text-[11px] text-zinc-400","children":["Base path: ",["$","code",null,{"className":"font-mono","children":"/api/v1"}]]}]]}]]}],["$","nav",null,{"className":"mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800","children":[["$","h2",null,{"className":"text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2","children":"Endpoints"}],["$","ul",null,{"className":"space-y-1.5 text-sm","children":[["$","li",null,{"children":["$","a",null,{"href":"#graph","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/graph"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Full project snapshot"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#issues","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/issues/:id"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Single issue detail"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#ready","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/ready"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Actionable issues"}]]}]}]]}]]}],["$","section",null,{"className":"mb-10","children":[["$","h2",null,{"className":"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3","children":"Common Details"}],["$","div",null,{"className":"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed","children":[["$","p",null,{"children":["All responses include CORS headers (",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"Access-Control-Allow-Origin: *"}],") and are cached for 30 seconds."]}],"$L6","$L7"]}]]}],"$L8","$L9","$La","$Lb","$Lc","$Ld","$Le","$Lf","$L10","$L11"]}]}],null,"$L12"]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],"$L13",false]],"m":"$undefined","G":["$14",[]],"S":true}
|
|
9
9
|
25:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"OutletBoundary"]
|
|
10
10
|
26:"$Sreact.suspense"
|
|
11
11
|
28:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"ViewportBoundary"]
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
4:I[2300,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
5
5
|
5:I[36768,["/_next/static/chunks/e21a7306ef24b230.js","/_next/static/chunks/d3b00e56f26cda4d.js"],"default"]
|
|
6
6
|
14:I[61316,[],"default"]
|
|
7
|
-
:HL["/_next/static/chunks/
|
|
8
|
-
0:{"P":null,"b":"
|
|
7
|
+
:HL["/_next/static/chunks/295ab055d1c2269f.css","style"]
|
|
8
|
+
0:{"P":null,"b":"9kusRFLCVoWHASQ-qfwqV","c":["","api","docs"],"q":"","i":false,"f":[[["",{"children":["api",{"children":["docs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/295ab055d1c2269f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/e21a7306ef24b230.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$L5",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen","children":["$","div",null,{"className":"max-w-3xl mx-auto px-6 py-12","children":[["$","div",null,{"className":"mb-10","children":[["$","a",null,{"href":"/","className":"text-xs text-zinc-400 hover:text-emerald-500 transition-colors","children":"← Back to graph"}],["$","h1",null,{"className":"text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100","children":"Heartbeads API"}],["$","p",null,{"className":"text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed","children":"Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers."}],["$","div",null,{"className":"flex items-center gap-3 mt-3","children":[["$","span",null,{"className":"text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800","children":"v1"}],["$","span",null,{"className":"text-[11px] text-zinc-400","children":["Base path: ",["$","code",null,{"className":"font-mono","children":"/api/v1"}]]}]]}]]}],["$","nav",null,{"className":"mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800","children":[["$","h2",null,{"className":"text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2","children":"Endpoints"}],["$","ul",null,{"className":"space-y-1.5 text-sm","children":[["$","li",null,{"children":["$","a",null,{"href":"#graph","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/graph"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Full project snapshot"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#issues","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/issues/:id"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Single issue detail"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#ready","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/ready"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Actionable issues"}]]}]}]]}]]}],["$","section",null,{"className":"mb-10","children":[["$","h2",null,{"className":"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3","children":"Common Details"}],["$","div",null,{"className":"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed","children":[["$","p",null,{"children":["All responses include CORS headers (",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"Access-Control-Allow-Origin: *"}],") and are cached for 30 seconds."]}],"$L6","$L7"]}]]}],"$L8","$L9","$La","$Lb","$Lc","$Ld","$Le","$Lf","$L10","$L11"]}]}],null,"$L12"]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],"$L13",false]],"m":"$undefined","G":["$14",[]],"S":true}
|
|
9
9
|
25:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"OutletBoundary"]
|
|
10
10
|
26:"$Sreact.suspense"
|
|
11
11
|
28:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"ViewportBoundary"]
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"ViewportBoundary"]
|
|
3
3
|
3:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"buildId":"
|
|
5
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heartbeads API Docs"}],["$","meta","1",{"name":"description","content":"Public REST API documentation for Heartbeads"}],["$","meta","2",{"property":"og:title","content":"Heartbeads"}],["$","meta","3",{"property":"og:description","content":"Interactive dependency graph viewer for beads issues — see your project's heartbeat"}],["$","meta","4",{"property":"og:site_name","content":"Heartbeads"}],["$","meta","5",{"property":"og:image","content":"http://localhost:3000/image.png"}],["$","meta","6",{"property":"og:image:width","content":"1200"}],["$","meta","7",{"property":"og:image:height","content":"630"}],["$","meta","8",{"property":"og:image:alt","content":"Heartbeads — interactive dependency graph viewer"}],["$","meta","9",{"property":"og:type","content":"website"}],["$","meta","10",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","11",{"name":"twitter:title","content":"Heartbeads"}],["$","meta","12",{"name":"twitter:description","content":"Interactive dependency graph viewer for beads issues — see your project's heartbeat"}],["$","meta","13",{"name":"twitter:image","content":"http://localhost:3000/image.png"}]]}]}]}],null]}],"loading":null,"isPartial":false}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
3:I[20446,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
4
4
|
4:I[2300,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
5
5
|
5:I[36768,["/_next/static/chunks/e21a7306ef24b230.js","/_next/static/chunks/d3b00e56f26cda4d.js"],"default"]
|
|
6
|
-
:HL["/_next/static/chunks/
|
|
7
|
-
0:{"buildId":"
|
|
6
|
+
:HL["/_next/static/chunks/295ab055d1c2269f.css","style"]
|
|
7
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/295ab055d1c2269f.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/e21a7306ef24b230.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",null,{}],"notFound":[["$","$L5",null,{}],[]]}]}]}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
:HL["/_next/static/chunks/
|
|
2
|
-
0:{"buildId":"
|
|
1
|
+
:HL["/_next/static/chunks/295ab055d1c2269f.css","style"]
|
|
2
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"api","paramType":null,"paramKey":"api","hasRuntimePrefetch":false,"slots":{"children":{"name":"docs","paramType":null,"paramKey":"docs","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
1e:I[63420,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"OutletBoundary"]
|
|
3
3
|
1f:"$Sreact.suspense"
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","rsc":["$","$1","c",{"children":[["$","div",null,{"className":"min-h-screen bg-white dark:bg-black text-zinc-800 dark:text-zinc-200 antialiased overflow-y-auto h-screen","children":["$","div",null,{"className":"max-w-3xl mx-auto px-6 py-12","children":[["$","div",null,{"className":"mb-10","children":[["$","a",null,{"href":"/","className":"text-xs text-zinc-400 hover:text-emerald-500 transition-colors","children":"← Back to graph"}],["$","h1",null,{"className":"text-2xl font-semibold mt-3 text-zinc-900 dark:text-zinc-100","children":"Heartbeads API"}],["$","p",null,{"className":"text-sm text-zinc-500 dark:text-zinc-400 mt-1.5 leading-relaxed","children":"Read-only REST API for AI agents, CI/CD bots, and integrations. No authentication required. All endpoints return JSON with CORS headers."}],["$","div",null,{"className":"flex items-center gap-3 mt-3","children":[["$","span",null,{"className":"text-[11px] font-mono px-2 py-0.5 rounded-full bg-emerald-50 dark:bg-emerald-950 text-emerald-600 dark:text-emerald-400 border border-emerald-200 dark:border-emerald-800","children":"v1"}],["$","span",null,{"className":"text-[11px] text-zinc-400","children":["Base path: ",["$","code",null,{"className":"font-mono","children":"/api/v1"}]]}]]}]]}],["$","nav",null,{"className":"mb-10 p-4 rounded-xl bg-zinc-50 dark:bg-zinc-900 border border-zinc-100 dark:border-zinc-800","children":[["$","h2",null,{"className":"text-[11px] font-semibold uppercase tracking-widest text-zinc-400 mb-2","children":"Endpoints"}],["$","ul",null,{"className":"space-y-1.5 text-sm","children":[["$","li",null,{"children":["$","a",null,{"href":"#graph","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/graph"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Full project snapshot"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#issues","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/issues/:id"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Single issue detail"}]]}]}],["$","li",null,{"children":["$","a",null,{"href":"#ready","className":"text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300 underline-offset-2 hover:underline","children":[["$","code",null,{"className":"font-mono text-xs","children":"GET /api/v1/ready"}],["$","span",null,{"className":"text-zinc-400 ml-2","children":"— Actionable issues"}]]}]}]]}]]}],["$","section",null,{"className":"mb-10","children":[["$","h2",null,{"className":"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3","children":"Common Details"}],["$","div",null,{"className":"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed","children":[["$","p",null,{"children":["All responses include CORS headers (",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"Access-Control-Allow-Origin: *"}],") and are cached for 30 seconds."]}],["$","p",null,{"children":["Every response includes a ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"_meta"}]," object with ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"generated_at"}]," (ISO 8601), ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"api_version"}],", ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"heartbeads_version"}],", and optional ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"warnings"}],"."]}],"$L2"]}]]}],"$L3","$L4","$L5","$L6","$L7","$L8","$L9","$La","$Lb","$Lc"]}]}],null,"$Ld"]}],"loading":null,"isPartial":false}
|
|
5
5
|
2:["$","p",null,{"children":["Error responses return ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"{ \"error\": \"...\", \"hint\": \"...\" }"}]," with appropriate HTTP status codes (404, 500)."]}]
|
|
6
6
|
3:["$","section",null,{"className":"mb-10","children":[["$","h2",null,{"className":"text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-3","children":"Authentication"}],["$","div",null,{"className":"space-y-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed","children":[["$","p",null,{"children":["By default, no authentication is required. When heartbeads is started with ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"--password"}],", all API requests must include the password:"]}],["$","div",null,{"className":"space-y-2","children":[["$","div",null,{"className":"flex items-start gap-2","children":[["$","span",null,{"className":"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5","children":"1"}],["$","div",null,{"children":[["$","span",null,{"className":"font-medium text-zinc-700 dark:text-zinc-300","children":"Bearer token"}]," (recommended)",["$","pre",null,{"className":"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto","children":"curl -H \"Authorization: Bearer <password>\" http://localhost:3000/api/v1/graph"}]]}]]}],["$","div",null,{"className":"flex items-start gap-2","children":[["$","span",null,{"className":"shrink-0 text-[11px] font-mono px-1.5 py-0.5 rounded bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 mt-0.5","children":"2"}],["$","div",null,{"children":[["$","span",null,{"className":"font-medium text-zinc-700 dark:text-zinc-300","children":"Query parameter"}],["$","pre",null,{"className":"mt-1 bg-zinc-950 text-zinc-300 rounded-lg p-3 text-xs font-mono overflow-x-auto","children":"curl \"http://localhost:3000/api/v1/graph?token=<gate-token>\""}]]}]]}]]}],["$","p",null,{"children":["Unauthenticated API requests return ",["$","code",null,{"className":"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1.5 py-0.5 rounded","children":"401"}]," with a JSON error. Browser requests are redirected to a login page."]}]]}]]}]
|
|
7
7
|
4:["$","hr",null,{"className":"border-zinc-100 dark:border-zinc-800 mb-10"}]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[20446,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
3
3
|
3:I[2300,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[20446,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
3
3
|
3:I[2300,["/_next/static/chunks/09c8275104c531d4.js","/_next/static/chunks/d1a8e99113ecf8a3.js"],"default"]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"9kusRFLCVoWHASQ-qfwqV","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
|