@ulpi/cli 0.1.10 → 0.1.12

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.
Files changed (199) hide show
  1. package/dist/{chunk-F32YQRFR.js → chunk-3YFN5ZOR.js} +1 -1
  2. package/dist/{ci-QBXWR3GW.js → ci-EXYAXQVI.js} +1 -1
  3. package/dist/{doctor-SRJIZM2T.js → doctor-2EHFGL6W.js} +1 -1
  4. package/dist/{history-UGYO7Z3U.js → history-MXKIYCX4.js} +1 -1
  5. package/dist/index.js +8 -8
  6. package/dist/portal/apps/portal/.next/BUILD_ID +1 -1
  7. package/dist/portal/apps/portal/.next/app-build-manifest.json +107 -107
  8. package/dist/portal/apps/portal/.next/app-path-routes-manifest.json +18 -18
  9. package/dist/portal/apps/portal/.next/build-manifest.json +2 -2
  10. package/dist/portal/apps/portal/.next/prerender-manifest.json +109 -109
  11. package/dist/portal/apps/portal/.next/server/app/(dashboard)/billing/page_client-reference-manifest.js +1 -1
  12. package/dist/portal/apps/portal/.next/server/app/(dashboard)/codemap/page_client-reference-manifest.js +1 -1
  13. package/dist/portal/apps/portal/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  14. package/dist/portal/apps/portal/.next/server/app/(dashboard)/history/[sha]/transcript/page_client-reference-manifest.js +1 -1
  15. package/dist/portal/apps/portal/.next/server/app/(dashboard)/history/page.js +1 -1
  16. package/dist/portal/apps/portal/.next/server/app/(dashboard)/history/page_client-reference-manifest.js +1 -1
  17. package/dist/portal/apps/portal/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
  18. package/dist/portal/apps/portal/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
  19. package/dist/portal/apps/portal/.next/server/app/(dashboard)/loop/page.js +1 -1
  20. package/dist/portal/apps/portal/.next/server/app/(dashboard)/loop/page_client-reference-manifest.js +1 -1
  21. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/[name]/page_client-reference-manifest.js +1 -1
  22. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/catalog/page_client-reference-manifest.js +1 -1
  23. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/page_client-reference-manifest.js +1 -1
  24. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/secrets/page_client-reference-manifest.js +1 -1
  25. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/submissions/page_client-reference-manifest.js +1 -1
  26. package/dist/portal/apps/portal/.next/server/app/(dashboard)/mcps/usage/page_client-reference-manifest.js +1 -1
  27. package/dist/portal/apps/portal/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
  28. package/dist/portal/apps/portal/.next/server/app/(dashboard)/memory/settings/page_client-reference-manifest.js +1 -1
  29. package/dist/portal/apps/portal/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
  30. package/dist/portal/apps/portal/.next/server/app/(dashboard)/notifications/page_client-reference-manifest.js +1 -1
  31. package/dist/portal/apps/portal/.next/server/app/(dashboard)/parallel/page.js +1 -1
  32. package/dist/portal/apps/portal/.next/server/app/(dashboard)/parallel/page_client-reference-manifest.js +1 -1
  33. package/dist/portal/apps/portal/.next/server/app/(dashboard)/prd/page_client-reference-manifest.js +1 -1
  34. package/dist/portal/apps/portal/.next/server/app/(dashboard)/repos/[id]/guards/page_client-reference-manifest.js +1 -1
  35. package/dist/portal/apps/portal/.next/server/app/(dashboard)/repos/[id]/page_client-reference-manifest.js +1 -1
  36. package/dist/portal/apps/portal/.next/server/app/(dashboard)/repos/page_client-reference-manifest.js +1 -1
  37. package/dist/portal/apps/portal/.next/server/app/(dashboard)/review/config/page_client-reference-manifest.js +1 -1
  38. package/dist/portal/apps/portal/.next/server/app/(dashboard)/review/page_client-reference-manifest.js +1 -1
  39. package/dist/portal/apps/portal/.next/server/app/(dashboard)/review/plan/page_client-reference-manifest.js +1 -1
  40. package/dist/portal/apps/portal/.next/server/app/(dashboard)/review/queue/page_client-reference-manifest.js +1 -1
  41. package/dist/portal/apps/portal/.next/server/app/(dashboard)/rules/[id]/page_client-reference-manifest.js +1 -1
  42. package/dist/portal/apps/portal/.next/server/app/(dashboard)/rules/new/page_client-reference-manifest.js +1 -1
  43. package/dist/portal/apps/portal/.next/server/app/(dashboard)/rules/page_client-reference-manifest.js +1 -1
  44. package/dist/portal/apps/portal/.next/server/app/(dashboard)/rules/pipelines/page_client-reference-manifest.js +1 -1
  45. package/dist/portal/apps/portal/.next/server/app/(dashboard)/sessions/[sessionId]/page_client-reference-manifest.js +1 -1
  46. package/dist/portal/apps/portal/.next/server/app/(dashboard)/sessions/page.js +1 -1
  47. package/dist/portal/apps/portal/.next/server/app/(dashboard)/sessions/page_client-reference-manifest.js +1 -1
  48. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/github/page_client-reference-manifest.js +1 -1
  49. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/installations/page_client-reference-manifest.js +1 -1
  50. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/keys/page_client-reference-manifest.js +1 -1
  51. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/members/page_client-reference-manifest.js +1 -1
  52. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/orgs/new/page_client-reference-manifest.js +1 -1
  53. package/dist/portal/apps/portal/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  54. package/dist/portal/apps/portal/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
  55. package/dist/portal/apps/portal/.next/server/app/(dashboard)/sprints/[batchId]/page_client-reference-manifest.js +1 -1
  56. package/dist/portal/apps/portal/.next/server/app/(dashboard)/sprints/page_client-reference-manifest.js +1 -1
  57. package/dist/portal/apps/portal/.next/server/app/(dashboard)/templates/page_client-reference-manifest.js +1 -1
  58. package/dist/portal/apps/portal/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  59. package/dist/portal/apps/portal/.next/server/app/_not-found.html +1 -1
  60. package/dist/portal/apps/portal/.next/server/app/_not-found.rsc +1 -1
  61. package/dist/portal/apps/portal/.next/server/app/auth/callback/page_client-reference-manifest.js +1 -1
  62. package/dist/portal/apps/portal/.next/server/app/auth/callback.html +1 -1
  63. package/dist/portal/apps/portal/.next/server/app/auth/callback.rsc +1 -1
  64. package/dist/portal/apps/portal/.next/server/app/billing.html +1 -1
  65. package/dist/portal/apps/portal/.next/server/app/billing.rsc +3 -3
  66. package/dist/portal/apps/portal/.next/server/app/codemap.html +1 -1
  67. package/dist/portal/apps/portal/.next/server/app/codemap.rsc +3 -3
  68. package/dist/portal/apps/portal/.next/server/app/dashboard.html +1 -1
  69. package/dist/portal/apps/portal/.next/server/app/dashboard.rsc +3 -3
  70. package/dist/portal/apps/portal/.next/server/app/history.html +1 -1
  71. package/dist/portal/apps/portal/.next/server/app/history.rsc +3 -3
  72. package/dist/portal/apps/portal/.next/server/app/jobs.html +1 -1
  73. package/dist/portal/apps/portal/.next/server/app/jobs.rsc +3 -3
  74. package/dist/portal/apps/portal/.next/server/app/loop.html +1 -1
  75. package/dist/portal/apps/portal/.next/server/app/loop.rsc +3 -3
  76. package/dist/portal/apps/portal/.next/server/app/mcps/catalog.html +1 -1
  77. package/dist/portal/apps/portal/.next/server/app/mcps/catalog.rsc +3 -3
  78. package/dist/portal/apps/portal/.next/server/app/mcps/secrets.html +1 -1
  79. package/dist/portal/apps/portal/.next/server/app/mcps/secrets.rsc +3 -3
  80. package/dist/portal/apps/portal/.next/server/app/mcps/submissions.html +1 -1
  81. package/dist/portal/apps/portal/.next/server/app/mcps/submissions.rsc +3 -3
  82. package/dist/portal/apps/portal/.next/server/app/mcps/usage.html +1 -1
  83. package/dist/portal/apps/portal/.next/server/app/mcps/usage.rsc +3 -3
  84. package/dist/portal/apps/portal/.next/server/app/mcps.html +1 -1
  85. package/dist/portal/apps/portal/.next/server/app/mcps.rsc +3 -3
  86. package/dist/portal/apps/portal/.next/server/app/memory/settings.html +1 -1
  87. package/dist/portal/apps/portal/.next/server/app/memory/settings.rsc +3 -3
  88. package/dist/portal/apps/portal/.next/server/app/memory/timeline.html +1 -1
  89. package/dist/portal/apps/portal/.next/server/app/memory/timeline.rsc +3 -3
  90. package/dist/portal/apps/portal/.next/server/app/memory.html +1 -1
  91. package/dist/portal/apps/portal/.next/server/app/memory.rsc +3 -3
  92. package/dist/portal/apps/portal/.next/server/app/notifications.html +1 -1
  93. package/dist/portal/apps/portal/.next/server/app/notifications.rsc +3 -3
  94. package/dist/portal/apps/portal/.next/server/app/parallel.html +1 -1
  95. package/dist/portal/apps/portal/.next/server/app/parallel.rsc +3 -3
  96. package/dist/portal/apps/portal/.next/server/app/prd.html +1 -1
  97. package/dist/portal/apps/portal/.next/server/app/prd.rsc +3 -3
  98. package/dist/portal/apps/portal/.next/server/app/repos.html +1 -1
  99. package/dist/portal/apps/portal/.next/server/app/repos.rsc +3 -3
  100. package/dist/portal/apps/portal/.next/server/app/review/config.html +1 -1
  101. package/dist/portal/apps/portal/.next/server/app/review/config.rsc +3 -3
  102. package/dist/portal/apps/portal/.next/server/app/review/plan.html +1 -1
  103. package/dist/portal/apps/portal/.next/server/app/review/plan.rsc +3 -3
  104. package/dist/portal/apps/portal/.next/server/app/review/queue.html +1 -1
  105. package/dist/portal/apps/portal/.next/server/app/review/queue.rsc +3 -3
  106. package/dist/portal/apps/portal/.next/server/app/review.html +1 -1
  107. package/dist/portal/apps/portal/.next/server/app/review.meta +2 -0
  108. package/dist/portal/apps/portal/.next/server/app/review.rsc +2 -2
  109. package/dist/portal/apps/portal/.next/server/app/rules/new.html +1 -1
  110. package/dist/portal/apps/portal/.next/server/app/rules/new.rsc +3 -3
  111. package/dist/portal/apps/portal/.next/server/app/rules/pipelines.html +1 -1
  112. package/dist/portal/apps/portal/.next/server/app/rules/pipelines.rsc +3 -3
  113. package/dist/portal/apps/portal/.next/server/app/rules.html +1 -1
  114. package/dist/portal/apps/portal/.next/server/app/rules.rsc +3 -3
  115. package/dist/portal/apps/portal/.next/server/app/sessions.html +1 -1
  116. package/dist/portal/apps/portal/.next/server/app/sessions.rsc +3 -3
  117. package/dist/portal/apps/portal/.next/server/app/settings/github.html +1 -1
  118. package/dist/portal/apps/portal/.next/server/app/settings/github.rsc +3 -3
  119. package/dist/portal/apps/portal/.next/server/app/settings/installations.html +1 -1
  120. package/dist/portal/apps/portal/.next/server/app/settings/installations.rsc +2 -2
  121. package/dist/portal/apps/portal/.next/server/app/settings/keys.html +1 -1
  122. package/dist/portal/apps/portal/.next/server/app/settings/keys.rsc +3 -3
  123. package/dist/portal/apps/portal/.next/server/app/settings/members.html +1 -1
  124. package/dist/portal/apps/portal/.next/server/app/settings/members.rsc +3 -3
  125. package/dist/portal/apps/portal/.next/server/app/settings/orgs/new.html +1 -1
  126. package/dist/portal/apps/portal/.next/server/app/settings/orgs/new.rsc +3 -3
  127. package/dist/portal/apps/portal/.next/server/app/settings.html +1 -1
  128. package/dist/portal/apps/portal/.next/server/app/settings.rsc +3 -3
  129. package/dist/portal/apps/portal/.next/server/app/skills.html +1 -1
  130. package/dist/portal/apps/portal/.next/server/app/skills.rsc +3 -3
  131. package/dist/portal/apps/portal/.next/server/app/sprints.html +1 -1
  132. package/dist/portal/apps/portal/.next/server/app/sprints.rsc +3 -3
  133. package/dist/portal/apps/portal/.next/server/app/templates.html +1 -1
  134. package/dist/portal/apps/portal/.next/server/app/templates.rsc +3 -3
  135. package/dist/portal/apps/portal/.next/server/app-paths-manifest.json +18 -18
  136. package/dist/portal/apps/portal/.next/server/chunks/1522.js +1 -1
  137. package/dist/portal/apps/portal/.next/server/next-font-manifest.js +1 -1
  138. package/dist/portal/apps/portal/.next/server/next-font-manifest.json +1 -1
  139. package/dist/portal/apps/portal/.next/server/pages/404.html +1 -1
  140. package/dist/portal/apps/portal/.next/server/pages/500.html +1 -1
  141. package/dist/portal/apps/portal/.next/server/pages-manifest.json +1 -1
  142. package/dist/portal/apps/portal/.next/static/chunks/380-71bdca6a9260da3e.js +1 -0
  143. package/dist/portal/apps/portal/.next/static/chunks/7525-85f4ca4276511230.js +1 -0
  144. package/dist/portal/apps/portal/.next/static/chunks/7889-a8be276e20a74863.js +1 -0
  145. package/dist/portal/apps/portal/.next/static/chunks/8744-29d969a2ddf40afe.js +1 -0
  146. package/dist/portal/apps/portal/.next/static/chunks/{8934-bb365eb647fb2d5a.js → 8934-9fbad2b348b6ada1.js} +1 -1
  147. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/codemap/page-e85b24075b2ae8e9.js +1 -0
  148. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/dashboard/page-701be25e4930fcb6.js +1 -0
  149. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/history/{page-264989cf873cd3de.js → page-0275ca43fdd64bf2.js} +1 -1
  150. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js +1 -0
  151. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/loop/page-c3f658ffb8d7397b.js +1 -0
  152. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/[name]/page-f5283ca4a2a1141b.js +1 -0
  153. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/catalog/page-9b228ecfe1982eba.js +1 -0
  154. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/page-d8028301dcd11348.js +1 -0
  155. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/page-34fe9bf93ef853d0.js +1 -0
  156. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/settings/page-5c9c471c9425d814.js +1 -0
  157. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/timeline/page-590f707b60b9ba47.js +1 -0
  158. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/notifications/page-46a9b033af7430e6.js +1 -0
  159. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/parallel/{page-85690140ff82dd58.js → page-49a26690ced20482.js} +1 -1
  160. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/repos/page-155cd1007250e5da.js +1 -0
  161. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/review/config/page-5ffb558d24a57b2c.js +1 -0
  162. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/review/queue/page-9fe0df848d23c383.js +1 -0
  163. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/rules/page-e17685f3220da942.js +1 -0
  164. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/rules/pipelines/page-589f30a41f066568.js +1 -0
  165. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/sessions/page-4ff5d7490cc0d260.js +1 -0
  166. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/settings/page-045a30e0bd843279.js +1 -0
  167. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/skills/page-2bd816bd8e62dc04.js +1 -0
  168. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/templates/page-28a51e2788c5798d.js +1 -0
  169. package/dist/portal/package.json +1 -1
  170. package/dist/{start-DWZHVBUO.js → start-6SLTMLI4.js} +1 -1
  171. package/dist/{update-IBPDEBEK.js → update-563P3ZIS.js} +1 -1
  172. package/dist/{version-checker-XKFQNN3I.js → version-checker-JHHM4OTR.js} +1 -1
  173. package/package.json +6 -6
  174. package/dist/portal/apps/portal/.next/static/chunks/380-52bab5fc966d7cf9.js +0 -1
  175. package/dist/portal/apps/portal/.next/static/chunks/7525-d6350803a451284c.js +0 -1
  176. package/dist/portal/apps/portal/.next/static/chunks/7889-a3331988a8344d05.js +0 -1
  177. package/dist/portal/apps/portal/.next/static/chunks/8744-d545a53c9709467b.js +0 -1
  178. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/codemap/page-bf1ece66c1b05822.js +0 -1
  179. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/dashboard/page-936391d6b330f0cc.js +0 -1
  180. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/layout-05fc9732a636a609.js +0 -1
  181. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/loop/page-faeaacd95742c754.js +0 -1
  182. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/[name]/page-f24841b78e8c05c0.js +0 -1
  183. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/catalog/page-2ff0e6b6a5d76dac.js +0 -1
  184. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/mcps/page-2476b9c29c44c372.js +0 -1
  185. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/page-79f977cd348c57ae.js +0 -1
  186. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/settings/page-a3be96ef297c8e33.js +0 -1
  187. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/memory/timeline/page-30db4506366d09f4.js +0 -1
  188. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/notifications/page-df5f393a51d8e17b.js +0 -1
  189. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/repos/page-a0bcc68a119f63e1.js +0 -1
  190. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/review/config/page-770321f5a71a29a3.js +0 -1
  191. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/review/queue/page-33687733a5398264.js +0 -1
  192. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/rules/page-ac19551ab9f2128d.js +0 -1
  193. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/rules/pipelines/page-96ecfcce3a60ebb2.js +0 -1
  194. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/sessions/page-6b199747e9f587de.js +0 -1
  195. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/settings/page-ec4076cedf8df275.js +0 -1
  196. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/skills/page-81f63d5d894b0b03.js +0 -1
  197. package/dist/portal/apps/portal/.next/static/chunks/app/(dashboard)/templates/page-263e03b6690d36f5.js +0 -1
  198. /package/dist/portal/apps/portal/.next/static/{02AzZdYDA5HVAwITp37Ql → p-7mo3JdIgTzhlpqhShmK}/_buildManifest.js +0 -0
  199. /package/dist/portal/apps/portal/.next/static/{02AzZdYDA5HVAwITp37Ql → p-7mo3JdIgTzhlpqhShmK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--02AzZdYDA5HVAwITp37Ql--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/bb3ef058b751a6ad-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/cf8a94d8f0136ff9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d8d33dd99ab06e3d.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-474e7ba2d816be4a.js"/><script src="/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/_next/static/chunks/9743-95b86e1be6debaf2.js" async=""></script><script src="/_next/static/chunks/main-app-c430e897f4183333.js" async=""></script><script src="/_next/static/chunks/app/error-78a7677dcd24ca1b.js" async=""></script><script src="/_next/static/chunks/5935-a39f44cf0cbaf28b.js" async=""></script><script src="/_next/static/chunks/8934-bb365eb647fb2d5a.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-05fc9732a636a609.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/codemap/page-bf1ece66c1b05822.js" async=""></script><meta name="next-size-adjust" content=""/><title>ULPI — The Intelligence Layer for AI Coding Agents</title><meta name="description" content="Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git."/><meta name="keywords" content="AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI"/><meta property="og:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta property="og:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><meta property="og:url" content="https://app.ulpi.io"/><meta property="og:site_name" content="ULPI"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta name="twitter:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen items-center justify-center bg-surface-950"><div class="flex flex-col items-center gap-4"><div class="h-8 w-8 animate-spin rounded-full border-2 border-primary-500 border-t-transparent"></div><p class="text-sm text-gray-400">Loading...</p></div></div><script src="/_next/static/chunks/webpack-474e7ba2d816be4a.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[8954,[],\"\"]\n3:I[7704,[\"8039\",\"static/chunks/app/error-78a7677dcd24ca1b.js\"],\"default\"]\n4:I[5640,[],\"\"]\n5:I[4033,[],\"ClientSegmentRoot\"]\n6:I[8535,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-bb365eb647fb2d5a.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-05fc9732a636a609.js\"],\"default\"]\n8:I[3339,[],\"ClientPageRoot\"]\n9:I[5282,[\"5808\",\"static/chunks/app/(dashboard)/codemap/page-bf1ece66c1b05822.js\"],\"default\"]\nc:I[2051,[],\"OutletBoundary\"]\ne:I[6658,[],\"AsyncMetadataOutlet\"]\n10:I[2051,[],\"ViewportBoundary\"]\n12:I[2051,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[7698,[],\"\"]\n:HL[\"/_next/static/media/bb3ef058b751a6ad-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/cf8a94d8f0136ff9.css\",\"style\"]\n:HL[\"/_next/static/css/d8d33dd99ab06e3d.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"02AzZdYDA5HVAwITp37Ql\",\"p\":\"\",\"c\":[\"\",\"codemap\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"codemap\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/cf8a94d8f0136ff9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d8d33dd99ab06e3d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"(dashboard)\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"slots\":{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"params\":{},\"promise\":\"$@7\"}]]}],{\"children\":[\"codemap\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L8\",null,{\"Component\":\"$9\",\"searchParams\":{},\"params\":\"$0:f:0:1:2:children:1:props:children:1:props:params\",\"promises\":[\"$@a\",\"$@b\"]}],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\na:{}\nb:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://app.ulpi.io\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"ULPI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--p_7mo3JdIgTzhlpqhShmK--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/bb3ef058b751a6ad-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/cf8a94d8f0136ff9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d8d33dd99ab06e3d.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-474e7ba2d816be4a.js"/><script src="/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/_next/static/chunks/9743-95b86e1be6debaf2.js" async=""></script><script src="/_next/static/chunks/main-app-c430e897f4183333.js" async=""></script><script src="/_next/static/chunks/app/error-78a7677dcd24ca1b.js" async=""></script><script src="/_next/static/chunks/5935-a39f44cf0cbaf28b.js" async=""></script><script src="/_next/static/chunks/8934-9fbad2b348b6ada1.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/codemap/page-e85b24075b2ae8e9.js" async=""></script><meta name="next-size-adjust" content=""/><title>ULPI — The Intelligence Layer for AI Coding Agents</title><meta name="description" content="Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git."/><meta name="keywords" content="AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI"/><meta property="og:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta property="og:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><meta property="og:url" content="https://app.ulpi.io"/><meta property="og:site_name" content="ULPI"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta name="twitter:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen bg-surface-950"><button class="fixed left-4 top-4 z-40 rounded-lg bg-surface-800 p-2 text-gray-400 shadow-lg lg:hidden"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path></svg></button><aside class="fixed inset-y-0 left-0 z-50 w-60 border-r border-white/[0.06] bg-surface-900 transition-transform lg:hidden -translate-x-full"><button class="absolute right-3 top-3 rounded p-1 text-gray-500 hover:text-white"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"></path></svg></button><div class="flex h-full flex-col"><div class="relative border-b border-white/[0.06] px-3 py-3"><button class="flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 transition-colors hover:bg-white/[0.04]"><div class="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-primary-500"><span class="text-[10px] font-bold text-white">U</span></div><span class="flex-1 truncate text-left text-sm font-medium text-gray-200">No repo</span><span class="rounded-full bg-primary-500/20 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Local</span></button></div><nav class="flex-1 overflow-y-auto px-3 pt-3 pb-2"><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Overview</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/dashboard"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"></path></svg></span><span class="flex-1">Dashboard</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">D</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Execution</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/prd"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">PRD</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">Q</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/loop"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182"></path></svg></span><span class="flex-1">Loop</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">L</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/parallel"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5-6L16.5 15m0 0L12 10.5m4.5 4.5V1.5"></path></svg></span><span class="flex-1">Parallel</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">A</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z"></path></svg></span><span class="flex-1">Jobs</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z"></path></svg></span><span class="flex-1">Sprints</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Governance</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/rules"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"></path></svg></span><span class="flex-1">Rules</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">R</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/templates"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">Templates</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">T</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/skills"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 0 0-2.455 2.456Z"></path></svg></span><span class="flex-1">Skills</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">K</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Intelligence</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 border-l-2 border-primary-500 bg-white/[0.04] pl-[6px] text-white" href="/codemap"><span class="text-primary-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg></span><span class="flex-1">CodeMap</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">C</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/memory"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Memory</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">M</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/mcps"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.959.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z"></path></svg></span><span class="flex-1">MCP Tools</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">I</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Monitoring</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/sessions"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Sessions</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">E</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/history"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path></svg></span><span class="flex-1">History</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">H</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Review</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/review"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15a2.25 2.25 0 0 1 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"></path></svg></span><span class="flex-1">Review Queue</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">V</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Repos</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/repos"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"></path></svg></span><span class="flex-1">Repos</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">P</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Settings</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/settings"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></svg></span><span class="flex-1">Settings</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">S</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/notifications"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"></path></svg></span><span class="flex-1">Notifications</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">N</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 0 0 2.25-2.25V6.75A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25v10.5A2.25 2.25 0 0 0 4.5 19.5Z"></path></svg></span><span class="flex-1">Billing</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div></nav><div class="hidden border-t border-white/[0.06] px-3 py-2 lg:block"><button class="flex w-full items-center justify-center rounded-md py-1 text-gray-600 transition-colors hover:bg-white/[0.03] hover:text-gray-400"><svg class="h-3.5 w-3.5 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"></path></svg></button></div></div></aside><aside class="hidden shrink-0 border-r border-white/[0.06] bg-surface-900 lg:block w-60 transition-all duration-200"><div class="flex h-full flex-col"><div class="relative border-b border-white/[0.06] px-3 py-3"><button class="flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 transition-colors hover:bg-white/[0.04]"><div class="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-primary-500"><span class="text-[10px] font-bold text-white">U</span></div><span class="flex-1 truncate text-left text-sm font-medium text-gray-200">No repo</span><span class="rounded-full bg-primary-500/20 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Local</span></button></div><nav class="flex-1 overflow-y-auto px-3 pt-3 pb-2"><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Overview</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/dashboard"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"></path></svg></span><span class="flex-1">Dashboard</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">D</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Execution</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/prd"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">PRD</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">Q</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/loop"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182"></path></svg></span><span class="flex-1">Loop</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">L</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/parallel"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5-6L16.5 15m0 0L12 10.5m4.5 4.5V1.5"></path></svg></span><span class="flex-1">Parallel</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">A</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z"></path></svg></span><span class="flex-1">Jobs</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z"></path></svg></span><span class="flex-1">Sprints</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Governance</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/rules"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"></path></svg></span><span class="flex-1">Rules</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">R</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/templates"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">Templates</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">T</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/skills"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 0 0-2.455 2.456Z"></path></svg></span><span class="flex-1">Skills</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">K</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Intelligence</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 border-l-2 border-primary-500 bg-white/[0.04] pl-[6px] text-white" href="/codemap"><span class="text-primary-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg></span><span class="flex-1">CodeMap</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">C</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/memory"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Memory</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">M</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/mcps"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.959.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z"></path></svg></span><span class="flex-1">MCP Tools</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">I</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Monitoring</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/sessions"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Sessions</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">E</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/history"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path></svg></span><span class="flex-1">History</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">H</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Review</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/review"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15a2.25 2.25 0 0 1 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"></path></svg></span><span class="flex-1">Review Queue</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">V</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Repos</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/repos"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"></path></svg></span><span class="flex-1">Repos</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">P</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Settings</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/settings"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></svg></span><span class="flex-1">Settings</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">S</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/notifications"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"></path></svg></span><span class="flex-1">Notifications</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">N</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 0 0 2.25-2.25V6.75A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25v10.5A2.25 2.25 0 0 0 4.5 19.5Z"></path></svg></span><span class="flex-1">Billing</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div></nav><div class="hidden border-t border-white/[0.06] px-3 py-2 lg:block"><button class="flex w-full items-center justify-center rounded-md py-1 text-gray-600 transition-colors hover:bg-white/[0.03] hover:text-gray-400"><svg class="h-3.5 w-3.5 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"></path></svg></button></div></div></aside><main class="flex-1 overflow-y-auto"><div class="px-4 py-4 lg:px-6"><div class="space-y-6"><div class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between"><div><h1 class="text-xl font-semibold text-white">CodeMap</h1><p class="mt-1 text-sm text-gray-400">Semantic code discovery and dependency analysis.</p></div><div class="flex flex-wrap items-center gap-2"><button class="inline-flex items-center gap-1.5 rounded-lg border border-white/[0.08] bg-surface-900 px-3 py-2 text-xs font-medium text-gray-300 transition-colors hover:bg-surface-800 hover:text-white disabled:cursor-not-allowed disabled:opacity-50"><svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12M12 16.5V3"></path></svg>Import</button></div></div><div class="space-y-3 "><div class="animate-pulse rounded-xl border border-white/[0.04] bg-surface-800/50 p-4"><div class="flex items-center gap-4"><div class="h-8 w-8 rounded-lg bg-white/[0.06]"></div><div class="flex-1 space-y-2"><div class="h-3.5 w-1/3 rounded bg-white/[0.06]"></div><div class="h-3 w-2/3 rounded bg-white/[0.04]"></div></div><div class="h-5 w-16 rounded-full bg-white/[0.04]"></div></div></div></div><div class="flex gap-1 rounded-lg bg-surface-800/50 p-1"><button class="relative rounded-md px-4 py-2 text-xs font-medium transition-colors bg-primary-500/15 text-primary-400">Search</button><button class="relative rounded-md px-4 py-2 text-xs font-medium transition-colors text-gray-500 hover:text-gray-300">Ranking</button><button class="relative rounded-md px-4 py-2 text-xs font-medium transition-colors text-gray-500 hover:text-gray-300">Cycles</button><button class="relative rounded-md px-4 py-2 text-xs font-medium transition-colors text-gray-500 hover:text-gray-300">Coupling</button></div><div class="grid grid-cols-1 gap-6 lg:grid-cols-12"><div class="lg:col-span-8 space-y-5"><div class="rounded-xl border border-white/[0.06] bg-surface-900 p-5"><form class="space-y-3"><div><label class="block text-xs font-medium text-gray-400">Query</label><input type="text" placeholder="Where is authentication handled?" class="mt-1 w-full rounded-lg border border-white/[0.08] bg-surface-800 px-3 py-2.5 text-sm text-white placeholder-gray-600 outline-none focus:border-primary-500/50 transition-colors" value=""/></div><div class="flex gap-3"><div class="w-24"><label class="block text-xs font-medium text-gray-400">Limit</label><input type="number" min="1" max="50" class="mt-1 w-full rounded-lg border border-white/[0.08] bg-surface-800 px-3 py-2.5 text-sm text-white outline-none focus:border-primary-500/50 transition-colors" value="10"/></div><div class="w-28"><label class="block text-xs font-medium text-gray-400">Threshold</label><input type="number" min="0" max="1" step="0.05" class="mt-1 w-full rounded-lg border border-white/[0.08] bg-surface-800 px-3 py-2.5 text-sm text-white outline-none focus:border-primary-500/50 transition-colors" value="0.3"/></div><div class="flex-1"><label class="block text-xs font-medium text-gray-400">Path Prefix</label><input type="text" placeholder="packages/guards-engine" class="mt-1 w-full rounded-lg border border-white/[0.08] bg-surface-800 px-3 py-2.5 text-sm text-white placeholder-gray-600 outline-none focus:border-primary-500/50 transition-colors" value=""/></div></div><div class="flex items-center justify-between"><div class="flex items-center gap-5"><label class="flex items-center gap-2 cursor-pointer"><input type="checkbox" class="h-3.5 w-3.5 rounded border-white/20 bg-surface-800 text-primary-500 focus:ring-primary-500/30 focus:ring-offset-0"/><span class="text-xs text-gray-400">Include tests</span></label><label class="flex items-center gap-2 cursor-pointer"><input type="checkbox" class="h-3.5 w-3.5 rounded border-white/20 bg-surface-800 text-primary-500 focus:ring-primary-500/30 focus:ring-offset-0"/><span class="text-xs text-gray-400">Include docs</span></label></div><button type="submit" disabled="" class="inline-flex items-center gap-2 rounded-lg bg-primary-500 px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-primary-600 disabled:cursor-not-allowed disabled:opacity-50"><svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg>Search</button></div></form></div><div><div class="flex flex-col items-center justify-center rounded-2xl border border-dashed border-white/[0.06] bg-surface-800/30 px-6 py-16 text-center "><div class="mb-4"><svg class="h-10 w-10 text-gray-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg></div><h3 class="text-sm font-medium text-gray-300">Search your codebase</h3><p class="mt-1.5 max-w-sm text-xs text-gray-500">Enter a natural language query above to find relevant code using semantic search.</p></div></div></div><div class="lg:col-span-4 space-y-4"><div class="rounded-xl border border-white/[0.06] bg-surface-900 p-4"><h3 class="text-xs font-semibold uppercase tracking-wider text-gray-500">Live Signals</h3><div class="mt-3 space-y-2.5"><div class="flex items-center justify-between text-xs"><span class="text-gray-400">MCP endpoint</span><span class="text-amber-400">pending</span></div><div class="flex items-center justify-between text-xs"><span class="text-gray-400">Watch mode</span><span class="text-gray-600">idle</span></div><div class="flex items-center justify-between text-xs"><span class="text-gray-400">Initialization</span><span class="text-amber-400">required</span></div></div></div><div class="rounded-xl border border-white/[0.06] bg-surface-900 p-4"><h3 class="text-xs font-semibold uppercase tracking-wider text-gray-500">About CodeMap</h3><p class="mt-2 text-xs leading-relaxed text-gray-500">CodeMap uses hybrid vector + BM25 indexing to provide semantic code search across your entire codebase. It chunks source files, generates embeddings, and stores them in a LanceDB vector index for fast retrieval.</p><p class="mt-2 text-xs leading-relaxed text-gray-500">The dependency graph (DepGraph) analyzes import relationships using tree-sitter tag extraction to compute file importance (PageRank), detect circular dependencies, and measure coupling metrics.</p></div></div></div></div><!--$--><!--/$--></div></main></div><script src="/_next/static/chunks/webpack-474e7ba2d816be4a.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[8954,[],\"\"]\n3:I[7704,[\"8039\",\"static/chunks/app/error-78a7677dcd24ca1b.js\"],\"default\"]\n4:I[5640,[],\"\"]\n5:I[4033,[],\"ClientSegmentRoot\"]\n6:I[8535,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-9fbad2b348b6ada1.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js\"],\"default\"]\n8:I[3339,[],\"ClientPageRoot\"]\n9:I[5282,[\"5808\",\"static/chunks/app/(dashboard)/codemap/page-e85b24075b2ae8e9.js\"],\"default\"]\nc:I[2051,[],\"OutletBoundary\"]\ne:I[6658,[],\"AsyncMetadataOutlet\"]\n10:I[2051,[],\"ViewportBoundary\"]\n12:I[2051,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[7698,[],\"\"]\n:HL[\"/_next/static/media/bb3ef058b751a6ad-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/cf8a94d8f0136ff9.css\",\"style\"]\n:HL[\"/_next/static/css/d8d33dd99ab06e3d.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"p-7mo3JdIgTzhlpqhShmK\",\"p\":\"\",\"c\":[\"\",\"codemap\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"codemap\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/cf8a94d8f0136ff9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d8d33dd99ab06e3d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"(dashboard)\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"slots\":{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"params\":{},\"promise\":\"$@7\"}]]}],{\"children\":[\"codemap\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L8\",null,{\"Component\":\"$9\",\"searchParams\":{},\"params\":\"$0:f:0:1:2:children:1:props:children:1:props:params\",\"promises\":[\"$@a\",\"$@b\"]}],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\na:{}\nb:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://app.ulpi.io\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"ULPI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>
@@ -3,9 +3,9 @@
3
3
  3:I[7704,["8039","static/chunks/app/error-78a7677dcd24ca1b.js"],"default"]
4
4
  4:I[5640,[],""]
5
5
  5:I[4033,[],"ClientSegmentRoot"]
6
- 6:I[8535,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-bb365eb647fb2d5a.js","9305","static/chunks/app/(dashboard)/layout-05fc9732a636a609.js"],"default"]
6
+ 6:I[8535,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-9fbad2b348b6ada1.js","9305","static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js"],"default"]
7
7
  8:I[3339,[],"ClientPageRoot"]
8
- 9:I[5282,["5808","static/chunks/app/(dashboard)/codemap/page-bf1ece66c1b05822.js"],"default"]
8
+ 9:I[5282,["5808","static/chunks/app/(dashboard)/codemap/page-e85b24075b2ae8e9.js"],"default"]
9
9
  c:I[2051,[],"OutletBoundary"]
10
10
  e:I[6658,[],"AsyncMetadataOutlet"]
11
11
  10:I[2051,[],"ViewportBoundary"]
@@ -16,7 +16,7 @@ e:I[6658,[],"AsyncMetadataOutlet"]
16
16
  :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
17
17
  :HL["/_next/static/css/cf8a94d8f0136ff9.css","style"]
18
18
  :HL["/_next/static/css/d8d33dd99ab06e3d.css","style"]
19
- 0:{"P":null,"b":"02AzZdYDA5HVAwITp37Ql","p":"","c":["","codemap"],"i":false,"f":[[["",{"children":["(dashboard)",{"children":["codemap",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/cf8a94d8f0136ff9.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/d8d33dd99ab06e3d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$3","errorStyles":[],"errorScripts":[],"template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["(dashboard)",["$","$1","c",{"children":[null,["$","$L5",null,{"Component":"$6","slots":{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"params":{},"promise":"$@7"}]]}],{"children":["codemap",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L8",null,{"Component":"$9","searchParams":{},"params":"$0:f:0:1:2:children:1:props:children:1:props:params","promises":["$@a","$@b"]}],null,["$","$Lc",null,{"children":["$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L12",null,{"children":["$","div",null,{"hidden":true,"children":["$","$13",null,{"fallback":null,"children":"$L14"}]}]}]]}],false]],"m":"$undefined","G":["$15",[]],"s":false,"S":true}
19
+ 0:{"P":null,"b":"p-7mo3JdIgTzhlpqhShmK","p":"","c":["","codemap"],"i":false,"f":[[["",{"children":["(dashboard)",{"children":["codemap",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/cf8a94d8f0136ff9.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/d8d33dd99ab06e3d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$3","errorStyles":[],"errorScripts":[],"template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["(dashboard)",["$","$1","c",{"children":[null,["$","$L5",null,{"Component":"$6","slots":{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"params":{},"promise":"$@7"}]]}],{"children":["codemap",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L8",null,{"Component":"$9","searchParams":{},"params":"$0:f:0:1:2:children:1:props:children:1:props:params","promises":["$@a","$@b"]}],null,["$","$Lc",null,{"children":["$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L12",null,{"children":["$","div",null,{"hidden":true,"children":["$","$13",null,{"fallback":null,"children":"$L14"}]}]}]]}],false]],"m":"$undefined","G":["$15",[]],"s":false,"S":true}
20
20
  7:"$0:f:0:1:2:children:1:props:children:1:props:params"
21
21
  a:{}
22
22
  b:"$0:f:0:1:2:children:1:props:children:1:props:params"
@@ -1 +1 @@
1
- <!DOCTYPE html><!--02AzZdYDA5HVAwITp37Ql--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/bb3ef058b751a6ad-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/cf8a94d8f0136ff9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d8d33dd99ab06e3d.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-474e7ba2d816be4a.js"/><script src="/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/_next/static/chunks/9743-95b86e1be6debaf2.js" async=""></script><script src="/_next/static/chunks/main-app-c430e897f4183333.js" async=""></script><script src="/_next/static/chunks/app/error-78a7677dcd24ca1b.js" async=""></script><script src="/_next/static/chunks/5935-a39f44cf0cbaf28b.js" async=""></script><script src="/_next/static/chunks/8934-bb365eb647fb2d5a.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-05fc9732a636a609.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/dashboard/page-936391d6b330f0cc.js" async=""></script><meta name="next-size-adjust" content=""/><title>ULPI — The Intelligence Layer for AI Coding Agents</title><meta name="description" content="Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git."/><meta name="keywords" content="AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI"/><meta property="og:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta property="og:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><meta property="og:url" content="https://app.ulpi.io"/><meta property="og:site_name" content="ULPI"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta name="twitter:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen items-center justify-center bg-surface-950"><div class="flex flex-col items-center gap-4"><div class="h-8 w-8 animate-spin rounded-full border-2 border-primary-500 border-t-transparent"></div><p class="text-sm text-gray-400">Loading...</p></div></div><script src="/_next/static/chunks/webpack-474e7ba2d816be4a.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[8954,[],\"\"]\n3:I[7704,[\"8039\",\"static/chunks/app/error-78a7677dcd24ca1b.js\"],\"default\"]\n4:I[5640,[],\"\"]\n5:I[4033,[],\"ClientSegmentRoot\"]\n6:I[8535,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-bb365eb647fb2d5a.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-05fc9732a636a609.js\"],\"default\"]\n8:I[3339,[],\"ClientPageRoot\"]\n9:I[6188,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-bb365eb647fb2d5a.js\",\"6337\",\"static/chunks/app/(dashboard)/dashboard/page-936391d6b330f0cc.js\"],\"default\"]\nc:I[2051,[],\"OutletBoundary\"]\ne:I[6658,[],\"AsyncMetadataOutlet\"]\n10:I[2051,[],\"ViewportBoundary\"]\n12:I[2051,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[7698,[],\"\"]\n:HL[\"/_next/static/media/bb3ef058b751a6ad-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/cf8a94d8f0136ff9.css\",\"style\"]\n:HL[\"/_next/static/css/d8d33dd99ab06e3d.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"02AzZdYDA5HVAwITp37Ql\",\"p\":\"\",\"c\":[\"\",\"dashboard\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"dashboard\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/cf8a94d8f0136ff9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d8d33dd99ab06e3d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"(dashboard)\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"slots\":{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"params\":{},\"promise\":\"$@7\"}]]}],{\"children\":[\"dashboard\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L8\",null,{\"Component\":\"$9\",\"searchParams\":{},\"params\":\"$0:f:0:1:2:children:1:props:children:1:props:params\",\"promises\":[\"$@a\",\"$@b\"]}],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\na:{}\nb:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://app.ulpi.io\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"ULPI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--p_7mo3JdIgTzhlpqhShmK--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/bb3ef058b751a6ad-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/cf8a94d8f0136ff9.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/d8d33dd99ab06e3d.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-474e7ba2d816be4a.js"/><script src="/_next/static/chunks/8e6518bb-ac69cad76942bec4.js" async=""></script><script src="/_next/static/chunks/9743-95b86e1be6debaf2.js" async=""></script><script src="/_next/static/chunks/main-app-c430e897f4183333.js" async=""></script><script src="/_next/static/chunks/app/error-78a7677dcd24ca1b.js" async=""></script><script src="/_next/static/chunks/5935-a39f44cf0cbaf28b.js" async=""></script><script src="/_next/static/chunks/8934-9fbad2b348b6ada1.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/dashboard/page-701be25e4930fcb6.js" async=""></script><meta name="next-size-adjust" content=""/><title>ULPI — The Intelligence Layer for AI Coding Agents</title><meta name="description" content="Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git."/><meta name="keywords" content="AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI"/><meta property="og:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta property="og:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><meta property="og:url" content="https://app.ulpi.io"/><meta property="og:site_name" content="ULPI"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="ULPI — The Intelligence Layer for AI Coding Agents"/><meta name="twitter:description" content="Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen bg-surface-950"><button class="fixed left-4 top-4 z-40 rounded-lg bg-surface-800 p-2 text-gray-400 shadow-lg lg:hidden"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path></svg></button><aside class="fixed inset-y-0 left-0 z-50 w-60 border-r border-white/[0.06] bg-surface-900 transition-transform lg:hidden -translate-x-full"><button class="absolute right-3 top-3 rounded p-1 text-gray-500 hover:text-white"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"></path></svg></button><div class="flex h-full flex-col"><div class="relative border-b border-white/[0.06] px-3 py-3"><button class="flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 transition-colors hover:bg-white/[0.04]"><div class="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-primary-500"><span class="text-[10px] font-bold text-white">U</span></div><span class="flex-1 truncate text-left text-sm font-medium text-gray-200">No repo</span><span class="rounded-full bg-primary-500/20 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Local</span></button></div><nav class="flex-1 overflow-y-auto px-3 pt-3 pb-2"><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Overview</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 border-l-2 border-primary-500 bg-white/[0.04] pl-[6px] text-white" href="/dashboard"><span class="text-primary-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"></path></svg></span><span class="flex-1">Dashboard</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">D</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Execution</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/prd"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">PRD</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">Q</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/loop"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182"></path></svg></span><span class="flex-1">Loop</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">L</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/parallel"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5-6L16.5 15m0 0L12 10.5m4.5 4.5V1.5"></path></svg></span><span class="flex-1">Parallel</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">A</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z"></path></svg></span><span class="flex-1">Jobs</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z"></path></svg></span><span class="flex-1">Sprints</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Governance</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/rules"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"></path></svg></span><span class="flex-1">Rules</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">R</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/templates"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">Templates</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">T</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/skills"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 0 0-2.455 2.456Z"></path></svg></span><span class="flex-1">Skills</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">K</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Intelligence</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/codemap"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg></span><span class="flex-1">CodeMap</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">C</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/memory"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Memory</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">M</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/mcps"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.959.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z"></path></svg></span><span class="flex-1">MCP Tools</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">I</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Monitoring</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/sessions"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Sessions</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">E</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/history"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path></svg></span><span class="flex-1">History</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">H</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Review</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/review"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15a2.25 2.25 0 0 1 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"></path></svg></span><span class="flex-1">Review Queue</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">V</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Repos</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/repos"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"></path></svg></span><span class="flex-1">Repos</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">P</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Settings</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/settings"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></svg></span><span class="flex-1">Settings</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">S</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/notifications"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"></path></svg></span><span class="flex-1">Notifications</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">N</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 0 0 2.25-2.25V6.75A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25v10.5A2.25 2.25 0 0 0 4.5 19.5Z"></path></svg></span><span class="flex-1">Billing</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div></nav><div class="hidden border-t border-white/[0.06] px-3 py-2 lg:block"><button class="flex w-full items-center justify-center rounded-md py-1 text-gray-600 transition-colors hover:bg-white/[0.03] hover:text-gray-400"><svg class="h-3.5 w-3.5 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"></path></svg></button></div></div></aside><aside class="hidden shrink-0 border-r border-white/[0.06] bg-surface-900 lg:block w-60 transition-all duration-200"><div class="flex h-full flex-col"><div class="relative border-b border-white/[0.06] px-3 py-3"><button class="flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 transition-colors hover:bg-white/[0.04]"><div class="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-primary-500"><span class="text-[10px] font-bold text-white">U</span></div><span class="flex-1 truncate text-left text-sm font-medium text-gray-200">No repo</span><span class="rounded-full bg-primary-500/20 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Local</span></button></div><nav class="flex-1 overflow-y-auto px-3 pt-3 pb-2"><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Overview</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 border-l-2 border-primary-500 bg-white/[0.04] pl-[6px] text-white" href="/dashboard"><span class="text-primary-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"></path></svg></span><span class="flex-1">Dashboard</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">D</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Execution</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/prd"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">PRD</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">Q</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/loop"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182"></path></svg></span><span class="flex-1">Loop</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">L</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/parallel"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5-6L16.5 15m0 0L12 10.5m4.5 4.5V1.5"></path></svg></span><span class="flex-1">Parallel</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">A</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z"></path></svg></span><span class="flex-1">Jobs</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z"></path></svg></span><span class="flex-1">Sprints</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Governance</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/rules"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"></path></svg></span><span class="flex-1">Rules</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">R</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/templates"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"></path></svg></span><span class="flex-1">Templates</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">T</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/skills"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 0 0-2.455 2.456Z"></path></svg></span><span class="flex-1">Skills</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">K</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Intelligence</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/codemap"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"></path></svg></span><span class="flex-1">CodeMap</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">C</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/memory"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Memory</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">M</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/mcps"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.959.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z"></path></svg></span><span class="flex-1">MCP Tools</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">I</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Monitoring</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/sessions"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"></path></svg></span><span class="flex-1">Sessions</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">E</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/history"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path></svg></span><span class="flex-1">History</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">H</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Review</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/review"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15a2.25 2.25 0 0 1 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z"></path></svg></span><span class="flex-1">Review Queue</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">V</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Repos</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/repos"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"></path></svg></span><span class="flex-1">Repos</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">P</kbd></span></a></div></div><div class="mt-4 first:mt-0"><p class="mb-1.5 px-2 text-[10px] font-medium uppercase tracking-widest text-gray-600">Settings</p><div class="space-y-0.5"><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/settings"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></svg></span><span class="flex-1">Settings</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">S</kbd></span></a><a class="group flex items-center rounded-md text-sm transition-colors gap-2.5 px-2 py-1.5 text-gray-400 hover:bg-white/[0.03] hover:text-gray-200" href="/notifications"><span class="text-gray-500 group-hover:text-gray-400 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"></path></svg></span><span class="flex-1">Notifications</span><span class="flex items-center gap-0.5"><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">⌘</kbd><kbd class="inline-flex h-4 min-w-[16px] items-center justify-center rounded border border-white/[0.06] bg-surface-800 px-1 text-[9px] font-medium text-gray-600 group-hover:text-gray-500">N</kbd></span></a><div class="group flex items-center rounded-md text-sm opacity-50 pointer-events-none text-gray-500 gap-2.5 px-2 py-1.5"><span class="text-gray-600 "><svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 0 0 2.25-2.25V6.75A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25v10.5A2.25 2.25 0 0 0 4.5 19.5Z"></path></svg></span><span class="flex-1">Billing</span><span class="ml-auto rounded-full bg-primary-500/15 px-1.5 py-0.5 text-[9px] font-medium text-primary-400">Cloud</span></div></div></div></nav><div class="hidden border-t border-white/[0.06] px-3 py-2 lg:block"><button class="flex w-full items-center justify-center rounded-md py-1 text-gray-600 transition-colors hover:bg-white/[0.03] hover:text-gray-400"><svg class="h-3.5 w-3.5 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"></path></svg></button></div></div></aside><main class="flex-1 overflow-y-auto"><div class="px-4 py-4 lg:px-6"><div class="space-y-6"><h1 class="text-xl font-semibold text-white">Dashboard</h1><div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-4"><div class="h-24 animate-pulse rounded-xl border border-white/[0.06] bg-surface-900"></div><div class="h-24 animate-pulse rounded-xl border border-white/[0.06] bg-surface-900"></div><div class="h-24 animate-pulse rounded-xl border border-white/[0.06] bg-surface-900"></div><div class="h-24 animate-pulse rounded-xl border border-white/[0.06] bg-surface-900"></div></div></div><!--$--><!--/$--></div></main></div><script src="/_next/static/chunks/webpack-474e7ba2d816be4a.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[8954,[],\"\"]\n3:I[7704,[\"8039\",\"static/chunks/app/error-78a7677dcd24ca1b.js\"],\"default\"]\n4:I[5640,[],\"\"]\n5:I[4033,[],\"ClientSegmentRoot\"]\n6:I[8535,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-9fbad2b348b6ada1.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js\"],\"default\"]\n8:I[3339,[],\"ClientPageRoot\"]\n9:I[6188,[\"5935\",\"static/chunks/5935-a39f44cf0cbaf28b.js\",\"8934\",\"static/chunks/8934-9fbad2b348b6ada1.js\",\"6337\",\"static/chunks/app/(dashboard)/dashboard/page-701be25e4930fcb6.js\"],\"default\"]\nc:I[2051,[],\"OutletBoundary\"]\ne:I[6658,[],\"AsyncMetadataOutlet\"]\n10:I[2051,[],\"ViewportBoundary\"]\n12:I[2051,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[7698,[],\"\"]\n:HL[\"/_next/static/media/bb3ef058b751a6ad-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/cf8a94d8f0136ff9.css\",\"style\"]\n:HL[\"/_next/static/css/d8d33dd99ab06e3d.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"p-7mo3JdIgTzhlpqhShmK\",\"p\":\"\",\"c\":[\"\",\"dashboard\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"dashboard\",{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/cf8a94d8f0136ff9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d8d33dd99ab06e3d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"(dashboard)\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"slots\":{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"params\":{},\"promise\":\"$@7\"}]]}],{\"children\":[\"dashboard\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L8\",null,{\"Component\":\"$9\",\"searchParams\":{},\"params\":\"$0:f:0:1:2:children:1:props:children:1:props:params\",\"promises\":[\"$@a\",\"$@b\"]}],null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\na:{}\nb:\"$0:f:0:1:2:children:1:props:children:1:props:params\"\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n"])</script><script>self.__next_f.push([1,"f:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Semantic code search, agent memory, dependency graphs, guard rules, session history — zero infrastructure, everything stored in git.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AI coding agent,Claude Code,guard rules,code review,plan review,CodeMap,semantic code search,agent memory,dependency graph,DepGraph,shadow branches,zero infrastructure,MCP tools,developer tools,ULPI\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://app.ulpi.io\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"ULPI\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"ULPI — The Intelligence Layer for AI Coding Agents\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"Free intelligence and governance layer for AI coding agents. Zero infrastructure — everything stored in git shadow branches.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"14:\"$f:metadata\"\n"])</script></body></html>
@@ -3,9 +3,9 @@
3
3
  3:I[7704,["8039","static/chunks/app/error-78a7677dcd24ca1b.js"],"default"]
4
4
  4:I[5640,[],""]
5
5
  5:I[4033,[],"ClientSegmentRoot"]
6
- 6:I[8535,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-bb365eb647fb2d5a.js","9305","static/chunks/app/(dashboard)/layout-05fc9732a636a609.js"],"default"]
6
+ 6:I[8535,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-9fbad2b348b6ada1.js","9305","static/chunks/app/(dashboard)/layout-4232b69653c5fbbf.js"],"default"]
7
7
  8:I[3339,[],"ClientPageRoot"]
8
- 9:I[6188,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-bb365eb647fb2d5a.js","6337","static/chunks/app/(dashboard)/dashboard/page-936391d6b330f0cc.js"],"default"]
8
+ 9:I[6188,["5935","static/chunks/5935-a39f44cf0cbaf28b.js","8934","static/chunks/8934-9fbad2b348b6ada1.js","6337","static/chunks/app/(dashboard)/dashboard/page-701be25e4930fcb6.js"],"default"]
9
9
  c:I[2051,[],"OutletBoundary"]
10
10
  e:I[6658,[],"AsyncMetadataOutlet"]
11
11
  10:I[2051,[],"ViewportBoundary"]
@@ -16,7 +16,7 @@ e:I[6658,[],"AsyncMetadataOutlet"]
16
16
  :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
17
17
  :HL["/_next/static/css/cf8a94d8f0136ff9.css","style"]
18
18
  :HL["/_next/static/css/d8d33dd99ab06e3d.css","style"]
19
- 0:{"P":null,"b":"02AzZdYDA5HVAwITp37Ql","p":"","c":["","dashboard"],"i":false,"f":[[["",{"children":["(dashboard)",{"children":["dashboard",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/cf8a94d8f0136ff9.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/d8d33dd99ab06e3d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$3","errorStyles":[],"errorScripts":[],"template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["(dashboard)",["$","$1","c",{"children":[null,["$","$L5",null,{"Component":"$6","slots":{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"params":{},"promise":"$@7"}]]}],{"children":["dashboard",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L8",null,{"Component":"$9","searchParams":{},"params":"$0:f:0:1:2:children:1:props:children:1:props:params","promises":["$@a","$@b"]}],null,["$","$Lc",null,{"children":["$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L12",null,{"children":["$","div",null,{"hidden":true,"children":["$","$13",null,{"fallback":null,"children":"$L14"}]}]}]]}],false]],"m":"$undefined","G":["$15",[]],"s":false,"S":true}
19
+ 0:{"P":null,"b":"p-7mo3JdIgTzhlpqhShmK","p":"","c":["","dashboard"],"i":false,"f":[[["",{"children":["(dashboard)",{"children":["dashboard",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/cf8a94d8f0136ff9.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/d8d33dd99ab06e3d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"__variable_f367f3 __variable_3c557b font-sans bg-surface-950 text-gray-100 antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$3","errorStyles":[],"errorScripts":[],"template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["(dashboard)",["$","$1","c",{"children":[null,["$","$L5",null,{"Component":"$6","slots":{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"params":{},"promise":"$@7"}]]}],{"children":["dashboard",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L8",null,{"Component":"$9","searchParams":{},"params":"$0:f:0:1:2:children:1:props:children:1:props:params","promises":["$@a","$@b"]}],null,["$","$Lc",null,{"children":["$Ld",["$","$Le",null,{"promise":"$@f"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L10",null,{"children":"$L11"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L12",null,{"children":["$","div",null,{"hidden":true,"children":["$","$13",null,{"fallback":null,"children":"$L14"}]}]}]]}],false]],"m":"$undefined","G":["$15",[]],"s":false,"S":true}
20
20
  7:"$0:f:0:1:2:children:1:props:children:1:props:params"
21
21
  a:{}
22
22
  b:"$0:f:0:1:2:children:1:props:children:1:props:params"