trybeacon 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +3 -3
- package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
- package/.next/server/app/feedback.html +1 -1
- package/.next/server/app/feedback.rsc +2 -2
- package/.next/server/app/feedback.segments/_full.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
- package/.next/server/app/feedback.segments/_index.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
- package/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/server/app/help.html +1 -1
- package/.next/server/app/help.rsc +3 -3
- package/.next/server/app/help.segments/_full.segment.rsc +3 -3
- package/.next/server/app/help.segments/_head.segment.rsc +1 -1
- package/.next/server/app/help.segments/_index.segment.rsc +2 -2
- package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/help.segments/help.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/map/page/server-reference-manifest.json +7 -7
- package/.next/server/app/map/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/plan/page/server-reference-manifest.json +7 -7
- package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ka373l._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ka373l._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0vwbior._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0vwbior._.js.map +1 -1
- package/.next/server/chunks/ssr/_0nsx3ly._.js +1 -1
- package/.next/server/chunks/ssr/_0nsx3ly._.js.map +1 -1
- package/.next/server/chunks/ssr/_1b27afu._.js +1 -1
- package/.next/server/chunks/ssr/_1b27afu._.js.map +1 -1
- package/.next/server/chunks/ssr/_1vt70iy._.js +1 -1
- package/.next/server/chunks/ssr/components_docs_docs_tsx_1g3nv7e._.js +1 -1
- package/.next/server/chunks/ssr/components_docs_docs_tsx_1g3nv7e._.js.map +1 -1
- package/.next/server/chunks/ssr/components_landing_landing_tsx_1_9k5z7._.js +1 -1
- package/.next/server/chunks/ssr/components_landing_landing_tsx_1_9k5z7._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +8 -8
- package/.next/static/chunks/{2x-z20vs93ie0.js → 0p1wdy6s53p1i.js} +1 -1
- package/.next/static/chunks/{17a681z25-prj.js → 16z3npc00nhcm.js} +1 -1
- package/.next/static/chunks/{0alixwdkq2y3o.js → 2b9_zx8q-4lq7.js} +1 -1
- package/.next/static/chunks/2bo2w3atald1f.css +1 -0
- package/.next/static/chunks/{2prdsirqilbse.js → 3u3-_bvi82cj7.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/package.json +2 -2
- package/.next/static/chunks/2cnfhc7c9q27r.css +0 -1
- /package/.next/static/{6Yk54I6-GVp00tL5rfT3j → kH69l7huFFOPQ9YL0CEEX}/_buildManifest.js +0 -0
- /package/.next/static/{6Yk54I6-GVp00tL5rfT3j → kH69l7huFFOPQ9YL0CEEX}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{6Yk54I6-GVp00tL5rfT3j → kH69l7huFFOPQ9YL0CEEX}/_ssgManifest.js +0 -0
|
@@ -13,6 +13,6 @@ Read more at https://nextjs.org/docs/messages/missing-root-layout-tags"
|
|
|
13
13
|
|
|
14
14
|
Read more: https://nextjs.org/docs/messages/middleware-new-signature
|
|
15
15
|
`)}}class g extends Error{constructor(){super("The request.page has been deprecated in favour of `URLPattern`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n ")}}class h extends Error{constructor(){super("The request.ua has been removed in favour of `userAgent` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n ")}}},88491,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={INTERNALS:function(){return j},NextRequest:function(){return k}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(22670),g=a.r(92273),h=a.r(89753),i=a.r(63681),j=Symbol("internal request");class k extends Request{constructor(a,b={}){const c="string"!=typeof a&&"url"in a?a.url:String(a);(0,g.validateURL)(c),b.body&&"half"!==b.duplex&&(b.duplex="half"),a instanceof Request?super(a,b):super(c,b);const d=new f.NextURL(c,{headers:(0,g.toNodeOutgoingHttpHeaders)(this.headers),nextConfig:b.nextConfig});this[j]={cookies:new i.RequestCookies(this.headers),nextUrl:d,url:d.toString()}}[Symbol.for("edge-runtime.inspect.custom")](){return{cookies:this.cookies,nextUrl:this.nextUrl,url:this.url,bodyUsed:this.bodyUsed,cache:this.cache,credentials:this.credentials,destination:this.destination,headers:Object.fromEntries(this.headers),integrity:this.integrity,keepalive:this.keepalive,method:this.method,mode:this.mode,redirect:this.redirect,referrer:this.referrer,referrerPolicy:this.referrerPolicy,signal:this.signal}}get cookies(){return this[j].cookies}get nextUrl(){return this[j].nextUrl}get page(){throw new h.RemovedPageError}get ua(){throw new h.RemovedUAError}get url(){return this[j].url}}},50965,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isNodeNextRequest:function(){return h},isNodeNextResponse:function(){return i},isWebNextRequest:function(){return f},isWebNextResponse:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a=>!1,g=a=>!1,h=a=>!0,i=a=>!0},17498,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={NextRequestAdapter:function(){return n},ResponseAborted:function(){return k},ResponseAbortedName:function(){return j},createAbortController:function(){return l},signalFromNodeResponse:function(){return m}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(49697),g=a.r(92273),h=a.r(88491),i=a.r(50965),j="ResponseAborted";class k extends Error{constructor(...a){super(...a),this.name=j}}function l(a){let b=new AbortController;return a.once("close",()=>{a.writableFinished||b.abort(new k)}),b}function m(a){let{errored:b,destroyed:c}=a;if(b||c)return AbortSignal.abort(b??new k);let{signal:d}=l(a);return d}class n{static fromBaseNextRequest(a,b){if((0,i.isNodeNextRequest)(a))return n.fromNodeNextRequest(a,b);throw Object.defineProperty(Error("Invariant: Unsupported NextRequest type"),"__NEXT_ERROR_CODE",{value:"E345",enumerable:!1,configurable:!0})}static fromNodeNextRequest(a,b){let c,d=null;if("GET"!==a.method&&"HEAD"!==a.method&&a.body&&(d=a.body),a.url.startsWith("http"))c=new URL(a.url);else{let b=(0,f.getRequestMeta)(a,"initURL");c=b&&b.startsWith("http")?new URL(a.url,b):new URL(a.url,"http://n")}return new h.NextRequest(c,{method:a.method,headers:(0,g.fromNodeOutgoingHttpHeaders)(a.headers),duplex:"half",signal:b,...b.aborted?{}:{body:d}})}static fromWebNextRequest(a){let b=null;return"GET"!==a.method&&"HEAD"!==a.method&&(b=a.body),new h.NextRequest(a.url,{method:a.method,headers:(0,g.fromNodeOutgoingHttpHeaders)(a.headers),duplex:"half",signal:a.request.signal,...a.request.signal.aborted?{}:{body:b}})}}},86131,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getClientComponentLoaderMetrics:function(){return j},wrapClientComponentLoader:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=0,g=0,h=0;function i(a){return"performance"in globalThis?{require:(...b)=>{let c=performance.now();0===f&&(f=c);try{return h+=1,a.__next_app__.require(...b)}finally{g+=performance.now()-c}},loadChunk:(...b)=>{let c=performance.now(),d=a.__next_app__.loadChunk(...b);return d.finally(()=>{g+=performance.now()-c}),d}}:a.__next_app__}function j(a={}){let b=0===f?void 0:{clientComponentLoadStart:f,clientComponentLoadTimes:g,clientComponentLoadCount:h};return a.reset&&(f=0,g=0,h=0),b}},76178,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isAbortError:function(){return k},pipeToNodeResponse:function(){return l}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(17498),g=a.r(96194),h=a.r(35842),i=a.r(76391),j=a.r(86131);function k(a){return(null==a?void 0:a.name)==="AbortError"||(null==a?void 0:a.name)===f.ResponseAbortedName}async function l(a,b,c){try{let{errored:d,destroyed:e}=b;if(d||e)return;let k=(0,f.createAbortController)(b),l=function(a,b){let c=!1,d=new g.DetachedPromise;function e(){d.resolve()}a.on("drain",e),a.once("close",()=>{a.off("drain",e),d.resolve()});let f=new g.DetachedPromise;return a.once("finish",()=>{f.resolve()}),new WritableStream({write:async b=>{if(!c){if(c=!0,"performance"in globalThis&&process.env.NEXT_OTEL_PERFORMANCE_PREFIX){let a=(0,j.getClientComponentLoaderMetrics)();a&&performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,{start:a.clientComponentLoadStart,end:a.clientComponentLoadStart+a.clientComponentLoadTimes})}a.flushHeaders(),(0,h.getTracer)().trace(i.NextNodeServerSpan.startResponse,{spanName:"start response"},()=>void 0)}try{let c=a.write(b);"flush"in a&&"function"==typeof a.flush&&a.flush(),c||(await d.promise,d=new g.DetachedPromise)}catch(b){throw a.end(),Object.defineProperty(Error("failed to write chunk to response",{cause:b}),"__NEXT_ERROR_CODE",{value:"E321",enumerable:!1,configurable:!0})}},abort:b=>{a.writableFinished||a.destroy(b)},close:async()=>{if(b&&await b,!a.writableFinished)return a.end(),f.promise}})}(b,c);await a.pipeTo(l,{signal:k.signal})}catch(a){if(k(a))return;throw Object.defineProperty(Error("failed to pipe response",{cause:a}),"__NEXT_ERROR_CODE",{value:"E180",enumerable:!1,configurable:!0})}}},25393,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return g}});let d=a.r(75406),e=a.r(76178),f=a.r(50640);class g{static #a=this.EMPTY=new g(null,{metadata:{},contentType:null});static fromStatic(a,b){return new g(a,{metadata:{},contentType:b})}constructor(a,{contentType:b,waitUntil:c,metadata:d}){this.response=a,this.contentType=b,this.metadata=d,this.waitUntil=c}assignMetadata(a){Object.assign(this.metadata,a)}get isNull(){return null===this.response}get isDynamic(){return"string"!=typeof this.response}toUnchunkedString(a=!1){if(null===this.response)return"";if("string"!=typeof this.response){if(!a)throw Object.defineProperty(new f.InvariantError("dynamic responses cannot be unchunked. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E732",enumerable:!1,configurable:!0});return(0,d.streamToString)(this.readable)}return this.response}get readable(){return null===this.response?new ReadableStream({start(a){a.close()}}):"string"==typeof this.response?(0,d.streamFromString)(this.response):Buffer.isBuffer(this.response)?(0,d.streamFromBuffer)(this.response):Array.isArray(this.response)?(0,d.chainStreams)(...this.response):this.response}coerce(){return null===this.response?[]:"string"==typeof this.response?[(0,d.streamFromString)(this.response)]:Array.isArray(this.response)?this.response:Buffer.isBuffer(this.response)?[(0,d.streamFromBuffer)(this.response)]:[this.response]}pipeThrough(a){this.response=this.readable.pipeThrough(a)}unshift(a){this.response=this.coerce(),this.response.unshift(a)}push(a){this.response=this.coerce(),this.response.push(a)}async pipeTo(a){try{await this.readable.pipeTo(a,{preventClose:!0}),this.waitUntil&&await this.waitUntil,await a.close()}catch(b){if((0,e.isAbortError)(b))return void await a.abort(b);throw b}}async pipeToNodeResponse(a){await (0,e.pipeToNodeResponse)(this.readable,a,this.waitUntil)}}},29756,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RouteKind",{enumerable:!0,get:function(){return e}});var d,e=((d={}).PAGES="PAGES",d.PAGES_API="PAGES_API",d.APP_PAGE="APP_PAGE",d.APP_ROUTE="APP_ROUTE",d.IMAGE="IMAGE",d)},41333,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e={fromResponseCacheEntry:function(){return k},routeKindToIncrementalCacheKind:function(){return m},toResponseCacheEntry:function(){return l}};for(var f in e)Object.defineProperty(c,f,{enumerable:!0,get:e[f]});let g=a.r(41733),h=(d=a.r(25393))&&d.__esModule?d:{default:d},i=a.r(29756),j=a.r(99870);async function k(a){var b,c;return{...a,value:(null==(b=a.value)?void 0:b.kind)===g.CachedRouteKind.PAGES?{kind:g.CachedRouteKind.PAGES,html:await a.value.html.toUnchunkedString(!0),pageData:a.value.pageData,headers:a.value.headers,status:a.value.status}:(null==(c=a.value)?void 0:c.kind)===g.CachedRouteKind.APP_PAGE?{kind:g.CachedRouteKind.APP_PAGE,html:await a.value.html.toUnchunkedString(!0),postponed:a.value.postponed,rscData:a.value.rscData,headers:a.value.headers,status:a.value.status,segmentData:a.value.segmentData}:a.value}}async function l(a){var b,c;return a?{isMiss:a.isMiss,isStale:a.isStale,cacheControl:a.cacheControl,isFallback:a.isFallback,value:(null==(b=a.value)?void 0:b.kind)===g.CachedRouteKind.PAGES?{kind:g.CachedRouteKind.PAGES,html:h.default.fromStatic(a.value.html,j.HTML_CONTENT_TYPE_HEADER),pageData:a.value.pageData,headers:a.value.headers,status:a.value.status}:(null==(c=a.value)?void 0:c.kind)===g.CachedRouteKind.APP_PAGE?{kind:g.CachedRouteKind.APP_PAGE,html:h.default.fromStatic(a.value.html,j.HTML_CONTENT_TYPE_HEADER),rscData:a.value.rscData,headers:a.value.headers,status:a.value.status,postponed:a.value.postponed,segmentData:a.value.segmentData}:a.value}:null}function m(a){switch(a){case i.RouteKind.PAGES:return g.IncrementalCacheKind.PAGES;case i.RouteKind.APP_PAGE:return g.IncrementalCacheKind.APP_PAGE;case i.RouteKind.IMAGE:return g.IncrementalCacheKind.IMAGE;case i.RouteKind.APP_ROUTE:return g.IncrementalCacheKind.APP_ROUTE;case i.RouteKind.PAGES_API:throw Object.defineProperty(Error(`Unexpected route kind ${a}`),"__NEXT_ERROR_CODE",{value:"E64",enumerable:!1,configurable:!0});default:return a}}},24653,(a,b,c)=>{"use strict";var d,e;Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return p}});let f=a.r(88690),g=a.r(10184),h=a.r(51402),i=a.r(61933),j=a.r(41333);function k(a,b){if(!a)return b;let c=parseInt(a,10);return Number.isFinite(c)&&c>0?c:b}d=a.r(41733),e=c,Object.keys(d).forEach(function(a){"default"===a||Object.prototype.hasOwnProperty.call(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:function(){return d[a]}})});let l=k(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,1e4),m=k(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,150),n="__ttl_sentinel__";function o(a,b){return`${a}\0${b??n}`}class p{constructor(a,b=m,c=l){this.getBatcher=f.Batcher.create({cacheKeyFn:({key:a,isOnDemandRevalidate:b})=>`${a}-${b?"1":"0"}`,schedulerFn:i.scheduleOnNextTick}),this.revalidateBatcher=f.Batcher.create({schedulerFn:i.scheduleOnNextTick}),this.evictedInvocationIDs=new Set,this.minimal_mode=a,this.maxSize=b,this.ttl=c,this.cache=new g.LRUCache(b,void 0,a=>{let b=function(a){let b=a.lastIndexOf("\0");if(-1===b)return;let c=a.slice(b+1);return c===n?void 0:c}(a);if(b){if(this.evictedInvocationIDs.size>=100){let a=this.evictedInvocationIDs.values().next().value;a&&this.evictedInvocationIDs.delete(a)}this.evictedInvocationIDs.add(b)}})}async get(a,b,c){if(!a)return b({hasResolved:!1,previousCacheEntry:null});if(this.minimal_mode){let b=o(a,c.invocationID),d=this.cache.get(b);if(d){if(void 0!==c.invocationID)return(0,j.toResponseCacheEntry)(d.entry);let a=Date.now();if(d.expiresAt>a)return(0,j.toResponseCacheEntry)(d.entry);this.cache.remove(b)}c.invocationID&&this.evictedInvocationIDs.has(c.invocationID)&&(0,h.warnOnce)(`Response cache entry was evicted for invocation ${c.invocationID}. Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`)}let{incrementalCache:d,isOnDemandRevalidate:e=!1,isFallback:f=!1,isRoutePPREnabled:g=!1,isPrefetch:i=!1,waitUntil:k,routeKind:l,invocationID:m}=c,n=await this.getBatcher.batch({key:a,isOnDemandRevalidate:e},({resolve:c})=>{let h=this.handleGet(a,b,{incrementalCache:d,isOnDemandRevalidate:e,isFallback:f,isRoutePPREnabled:g,isPrefetch:i,routeKind:l,invocationID:m},c);return k&&k(h),h});return(0,j.toResponseCacheEntry)(n)}async handleGet(a,b,c,d){let e=null,f=!1;try{if((e=this.minimal_mode?null:await c.incrementalCache.get(a,{kind:(0,j.routeKindToIncrementalCacheKind)(c.routeKind),isRoutePPREnabled:c.isRoutePPREnabled,isFallback:c.isFallback}))&&!c.isOnDemandRevalidate&&(d(e),f=!0,!e.isStale||c.isPrefetch))return e;let g=await this.revalidate(a,c.incrementalCache,c.isRoutePPREnabled,c.isFallback,b,e,null!==e&&!c.isOnDemandRevalidate,void 0,c.invocationID);if(!g){if(this.minimal_mode){let b=o(a,c.invocationID);this.cache.remove(b)}return null}return c.isOnDemandRevalidate,g}catch(a){if(f)return console.error(a),null;throw a}}async revalidate(a,b,c,d,e,f,g,h,i){return this.revalidateBatcher.batch(a,()=>{let j=this.handleRevalidate(a,b,c,d,e,f,g,i);return h&&h(j),j})}async handleRevalidate(a,b,c,d,e,f,g,h){try{let i=await e({hasResolved:g,previousCacheEntry:f,isRevalidating:!0});if(!i)return null;let k=await (0,j.fromResponseCacheEntry)({...i,isMiss:!f});if(k.cacheControl)if(this.minimal_mode){let b=o(a,h);this.cache.set(b,{entry:k,expiresAt:Date.now()+this.ttl})}else await b.set(a,k.value,{cacheControl:k.cacheControl,isRoutePPREnabled:c,isFallback:d});return k}catch(e){if(null==f?void 0:f.cacheControl){let e=Math.min(Math.max(f.cacheControl.revalidate||3,3),30),g=void 0===f.cacheControl.expire?void 0:Math.max(e+3,f.cacheControl.expire);await b.set(a,f.value,{cacheControl:{revalidate:e,expire:g},isRoutePPREnabled:c,isFallback:d})}throw e}}}},86465,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"encodeCacheTag",{enumerable:!0,get:function(){return f}});let d=/[^\t\x20-\x7e]/,e=/[^\t\x20-\x7e]+/g;function f(a){return d.test(a)?a.replace(e,a=>encodeURIComponent(a)):a}},26095,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={NEXT_PATCH_SYMBOL:function(){return p},createPatchedFetcher:function(){return v},patchFetch:function(){return w},validateRevalidate:function(){return q},validateTags:function(){return r}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(76391),g=a.r(35842),h=a.r(99870),i=a.r(60384),j=a.r(13091),k=a.r(1786),l=a.r(32319),m=a.r(24653),n=a.r(5723);a.r(31382);let o=a.r(86465),p=Symbol.for("next-patch");function q(a,b){try{let c;if(!1===a)c=h.INFINITE_CACHE;else if("number"==typeof a&&!isNaN(a)&&a>-1)c=a;else if(void 0!==a)throw Object.defineProperty(Error(`Invalid revalidate value "${a}" on "${b}", must be a non-negative number or false`),"__NEXT_ERROR_CODE",{value:"E179",enumerable:!1,configurable:!0});return c}catch(a){if(a instanceof Error&&a.message.includes("Invalid revalidate"))throw a;return}}function r(a,b){let c=[],d=[];for(let e=0;e<a.length;e++){let f=a[e];if("string"!=typeof f?d.push({tag:f,reason:"invalid type, must be a string"}):f.length>h.NEXT_CACHE_TAG_MAX_LENGTH?d.push({tag:f,reason:`exceeded max length of ${h.NEXT_CACHE_TAG_MAX_LENGTH}`}):c.push((0,o.encodeCacheTag)(f)),c.length>h.NEXT_CACHE_TAG_MAX_ITEMS){console.warn(`Warning: exceeded max tag count for ${b}, dropped tags:`,a.slice(e).join(", "));break}}if(d.length>0)for(let{tag:a,reason:c}of(console.warn(`Warning: invalid tags passed to ${b}: `),d))console.log(`tag: "${a}" ${c}`);return c}function s(a,b){a.shouldTrackFetchMetrics&&(a.fetchMetrics??=[],a.fetchMetrics.push({...b,end:performance.timeOrigin+performance.now(),idx:a.nextFetchId||0}))}async function t(a,b,c,d,e,f){let g=await a.arrayBuffer(),h={headers:Object.fromEntries(a.headers.entries()),body:Buffer.from(g).toString("base64"),status:a.status,url:a.url};return c&&await d.set(b,{kind:m.CachedRouteKind.FETCH,data:h,revalidate:e},c),await f(),new Response(g,{headers:a.headers,status:a.status,statusText:a.statusText})}async function u(a,b,c,d,e,f,g,h,i,j){let[k,l]=(0,n.cloneResponse)(b),o=k.arrayBuffer().then(async a=>{let b=Buffer.from(a),h={headers:Object.fromEntries(k.headers.entries()),body:b.toString("base64"),status:k.status,url:k.url};null==f||f.set(c,h),d&&await e.set(c,{kind:m.CachedRouteKind.FETCH,data:h,revalidate:g},d)}).catch(a=>{(null==j?void 0:j.aborted)||console.warn("Failed to set fetch cache",h,a)}).finally(i),p=`cache-set-${c}`,q=a.pendingRevalidates??={},r=Promise.resolve();return p in q&&(r=q[p]),q[p]=r.then(()=>o).finally(()=>{(null==q?void 0:q[p])&&delete q[p]}),l}function v(a,{workAsyncStorage:b,workUnitAsyncStorage:c}){let d=async function(d,e){var k,o;let p;try{(p=new URL(d instanceof Request?d.url:d)).username="",p.password=""}catch{p=void 0}let v=(null==p?void 0:p.href)??"",w=(null==e||null==(k=e.method)?void 0:k.toUpperCase())||"GET",y=(null==e||null==(o=e.next)?void 0:o.internal)===!0,z="1"===process.env.NEXT_OTEL_FETCH_DISABLED,A=y?void 0:performance.timeOrigin+performance.now(),B=b.getStore(),C=c.getStore(),D=C?(0,l.getCacheSignal)(C):null;D&&D.beginRead();let E=(0,g.getTracer)().trace(y?f.NextNodeServerSpan.internalFetch:f.AppRenderSpan.fetch,{hideSpan:z,kind:g.SpanKind.CLIENT,spanName:["fetch",w,v].filter(Boolean).join(" "),attributes:{"http.url":v,"http.method":w,"net.peer.name":null==p?void 0:p.hostname,"net.peer.port":(null==p?void 0:p.port)||void 0}},async()=>{var b;let c,f,g,k,l,o;if(y||!B||B.isDraftMode)return a(d,e);let p=d&&"object"==typeof d&&"string"==typeof d.method,w=a=>(null==e?void 0:e[a])||(p?d[a]:null),z=a=>{var b,c,f;return void 0!==(null==e||null==(b=e.next)?void 0:b[a])?null==e||null==(c=e.next)?void 0:c[a]:p?null==(f=d.next)?void 0:f[a]:void 0},E=z("revalidate"),F=E,G=r(z("tags")||[],`fetch ${d.toString()}`);if(C)switch(C.type){case"prerender":case"prerender-runtime":case"prerender-client":case"validation-client":case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":c=C}if(c&&Array.isArray(G)){let a=c.tags??(c.tags=[]);for(let b of G)a.includes(b)||a.push(b)}let H=null==C?void 0:C.implicitTags,I=B.fetchCache;C&&"unstable-cache"===C.type&&(I="force-no-store");let J=!!B.isUnstableNoStore,K=w("cache"),L="";"string"==typeof K&&void 0!==F&&("force-cache"===K&&0===F||"no-store"===K&&(F>0||!1===F))&&(f=`Specified "cache: ${K}" and "revalidate: ${F}", only one should be specified.`,K=void 0,F=void 0);let M="no-cache"===K||"no-store"===K||"force-no-store"===I||"only-no-store"===I,N=!I&&!K&&!F&&B.forceDynamic;"force-cache"===K&&void 0===F?F=!1:(M||N)&&(F=0),("no-cache"===K||"no-store"===K)&&(L=`cache: ${K}`),o=q(F,B.route);let O=w("headers"),P="function"==typeof(null==O?void 0:O.get)?O:new Headers(O||{}),Q=P.get("authorization")||P.get("cookie"),R=!["get","head"].includes((null==(b=w("method"))?void 0:b.toLowerCase())||"get"),S=void 0==I&&(void 0==K||"default"===K)&&void 0==F,T=!!((Q||R)&&(null==c?void 0:c.revalidate)===0),U=!1;if(!T&&S&&(B.isBuildTimePrerendering?U=!0:T=!0),S&&void 0!==C)switch(C.type){case"prerender":case"prerender-runtime":case"prerender-client":return D&&(D.endRead(),D=null),(0,j.makeHangingPromise)(C.renderSignal,B.route,"fetch()")}switch(I){case"force-no-store":L="fetchCache = force-no-store";break;case"only-no-store":if("force-cache"===K||void 0!==o&&o>0)throw Object.defineProperty(Error(`cache: 'force-cache' used on fetch for ${v} with 'export const fetchCache = 'only-no-store'`),"__NEXT_ERROR_CODE",{value:"E448",enumerable:!1,configurable:!0});L="fetchCache = only-no-store";break;case"only-cache":if("no-store"===K)throw Object.defineProperty(Error(`cache: 'no-store' used on fetch for ${v} with 'export const fetchCache = 'only-cache'`),"__NEXT_ERROR_CODE",{value:"E521",enumerable:!1,configurable:!0});break;case"force-cache":(void 0===F||0===F)&&(L="fetchCache = force-cache",o=h.INFINITE_CACHE)}if(void 0===o?"default-cache"!==I||J?"default-no-store"===I?(o=0,L="fetchCache = default-no-store"):J?(o=0,L="noStore call"):T?(o=0,L="auto no cache"):(L="auto cache",o=c?c.revalidate:h.INFINITE_CACHE):(o=h.INFINITE_CACHE,L="fetchCache = default-cache"):L||(L=`revalidate: ${o}`),!(B.forceStatic&&0===o)&&!T&&c&&o<c.revalidate){if(0===o){if(C)switch(C.type){case"prerender":case"prerender-client":case"prerender-runtime":case"validation-client":return D&&(D.endRead(),D=null),(0,j.makeHangingPromise)(C.renderSignal,B.route,"fetch()")}(0,i.markCurrentScopeAsDynamic)(B,C,`revalidate: 0 fetch ${d} ${B.route}`)}c&&E===o&&(c.revalidate=o)}let V="number"==typeof o&&o>0,{incrementalCache:W}=B,X=!1;if(C)switch(C.type){case"request":case"cache":case"private-cache":X=C.isHmrRefresh??!1,k=C.serverComponentsHmrCache}if(W&&(V||k))try{g=await W.generateCacheKey(v,p?d:e)}catch(a){console.error("Failed to generate cache key for",d)}let Y=B.nextFetchId??1;B.nextFetchId=Y+1;let Z=()=>{},$=async(b,c)=>{let i=["cache","credentials","headers","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","window","duplex",...b?[]:["signal"]];if(p){let a=d,b={body:a._ogBody||a.body};for(let c of i)b[c]=a[c];d=new Request(a.url,b)}else if(e){let{_ogBody:a,body:c,signal:d,...f}=e;e={...f,body:a||c,signal:b?void 0:d}}let j={...e,next:{...null==e?void 0:e.next,fetchType:"origin",fetchIdx:Y}};return a(d,j).then(async a=>{if(!b&&A&&s(B,{start:A,url:v,cacheReason:c||L,cacheStatus:0===o||c?"skip":"miss",cacheWarning:f,status:a.status,method:j.method||"GET"}),200===a.status&&W&&g&&(V||k)){let b=o>=h.INFINITE_CACHE?h.CACHE_ONE_YEAR_SECONDS:o,c=V?{fetchCache:!0,fetchUrl:v,fetchIdx:Y,tags:G,isImplicitBuildTimeCache:U}:void 0;switch(null==C?void 0:C.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":return t(a,g,c,W,b,Z);case"request":case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":case"unstable-cache":case"generate-static-params":case void 0:return u(B,a,g,c,W,k,b,d,Z,w("signal"))}}return await Z(),a}).catch(a=>{throw Z(),a})},_=!1,aa=!1;if(g&&W){let a;if(X&&k&&(a=k.get(g),aa=!0),V&&!a){Z=await W.lock(g);let b=B.isOnDemandRevalidate?null:await W.get(g,{kind:m.IncrementalCacheKind.FETCH,revalidate:o,fetchUrl:v,fetchIdx:Y,tags:G,softTags:null==H?void 0:H.tags});if(S&&C)switch(C.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":await (x||(x=new Promise(a=>{setTimeout(()=>{x=null,a()},0)})),x)}if(b?await Z():l="cache-control: no-cache (hard refresh)",(null==b?void 0:b.value)&&b.value.kind===m.CachedRouteKind.FETCH)if(B.isStaticGeneration&&b.isStale)_=!0;else{if(b.isStale&&(B.pendingRevalidates??={},!B.pendingRevalidates[g])){let a=$(!0).then(async a=>({body:await a.arrayBuffer(),headers:a.headers,status:a.status,statusText:a.statusText})).finally(()=>{B.pendingRevalidates??={},delete B.pendingRevalidates[g||""]});a.catch(console.error),B.pendingRevalidates[g]=a}a=b.value.data}}if(a){A&&s(B,{start:A,url:v,cacheReason:L,cacheStatus:aa?"hmr":"hit",cacheWarning:f,status:a.status||200,method:(null==e?void 0:e.method)||"GET"});let b=new Response(Buffer.from(a.body,"base64"),{headers:a.headers,status:a.status});return Object.defineProperty(b,"url",{value:a.url}),b}}if(B.isStaticGeneration&&e&&"object"==typeof e){let{cache:a}=e;if("no-store"===a){if(C)switch(C.type){case"prerender":case"prerender-client":case"prerender-runtime":case"validation-client":return D&&(D.endRead(),D=null),(0,j.makeHangingPromise)(C.renderSignal,B.route,"fetch()")}(0,i.markCurrentScopeAsDynamic)(B,C,`no-store fetch ${d} ${B.route}`)}let b="next"in e,{next:f={}}=e;if("number"==typeof f.revalidate&&c&&f.revalidate<c.revalidate){if(0===f.revalidate){if(C)switch(C.type){case"prerender":case"prerender-client":case"prerender-runtime":case"validation-client":return(0,j.makeHangingPromise)(C.renderSignal,B.route,"fetch()")}(0,i.markCurrentScopeAsDynamic)(B,C,`revalidate: 0 fetch ${d} ${B.route}`)}B.forceStatic&&0===f.revalidate||(c.revalidate=f.revalidate)}b&&delete e.next}if(!g||!_)return $(!1,l);{let a=g;B.pendingRevalidates??={};let b=B.pendingRevalidates[a];if(b){let a=await b;return new Response(a.body,{headers:a.headers,status:a.status,statusText:a.statusText})}let c=$(!0,l).then(n.cloneResponse);return(b=c.then(async a=>{let b=a[0];return{body:await b.arrayBuffer(),headers:b.headers,status:b.status,statusText:b.statusText}}).finally(()=>{var b;(null==(b=B.pendingRevalidates)?void 0:b[a])&&delete B.pendingRevalidates[a]})).catch(()=>{}),B.pendingRevalidates[a]=b,c.then(a=>a[1])}});if(D)try{return await E}finally{D&&D.endRead()}return E};return d.__nextPatched=!0,d.__nextGetStaticStore=()=>b,d._nextOriginalFetch=a,globalThis[p]=!0,Object.defineProperty(d,"name",{value:"fetch",writable:!1}),d}function w(a){if(!0===globalThis[p])return;let b=(0,k.createDedupeFetch)(globalThis.fetch);globalThis.fetch=v(b,a)}let x=null},71632,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_cache",{enumerable:!0,get:function(){return k}});let d=a.r(99870),e=a.r(26095),f=a.r(56704),g=a.r(32319),h=a.r(24653),i=0;async function j(a,b,c,e,f,g,i){await b.set(c,{kind:h.CachedRouteKind.FETCH,data:{headers:{},body:JSON.stringify(a),status:200,url:""},revalidate:"number"!=typeof f?d.CACHE_ONE_YEAR_SECONDS:f},{fetchCache:!0,tags:e,fetchIdx:g,fetchUrl:i})}function k(a,b,c={}){if(0===c.revalidate)throw Object.defineProperty(Error(`Invariant revalidate: 0 can not be passed to unstable_cache(), must be "false" or "> 0" ${a.toString()}`),"__NEXT_ERROR_CODE",{value:"E57",enumerable:!1,configurable:!0});let d=c.tags?(0,e.validateTags)(c.tags,`unstable_cache ${a.toString()}`):[];(0,e.validateRevalidate)(c.revalidate,`unstable_cache ${a.name||a.toString()}`);let l=`${a.toString()}-${Array.isArray(b)&&b.join(",")}`;return async(...b)=>{let e=f.workAsyncStorage.getStore(),k=g.workUnitAsyncStorage.getStore(),m=(null==e?void 0:e.incrementalCache)||globalThis.__incrementalCache;if(!m)throw Object.defineProperty(Error(`Invariant: incrementalCache missing in unstable_cache ${a.toString()}`),"__NEXT_ERROR_CODE",{value:"E469",enumerable:!1,configurable:!0});let n=k?(0,g.getCacheSignal)(k):null;n&&n.beginRead();try{let f=e&&k?function(a,b){switch(b.type){case"request":let c=b.url.pathname,d=new URLSearchParams(b.url.search),e=[...d.keys()].sort((a,b)=>a.localeCompare(b)).map(a=>`${a}=${d.get(a)}`).join("&");return`${c}${e.length?"?":""}${e}`;case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":case"unstable-cache":case"generate-static-params":return a.route;default:return b}}(e,k):"",n=`${l}-${JSON.stringify(b)}`,o=await m.generateCacheKey(n),p=`unstable_cache ${f} ${a.name?` ${a.name}`:o}`,q=(e?e.nextFetchId:i)??1,r=null==k?void 0:k.implicitTags,s={type:"unstable-cache",phase:"render",implicitTags:r,draftMode:k&&e&&(0,g.getDraftModeProviderForCacheScope)(e,k),rootParams:void 0};if(e){e.nextFetchId=q+1;let f=!1;if(k)switch(k.type){case"cache":case"private-cache":case"prerender":case"prerender-runtime":case"prerender-ppr":case"prerender-legacy":"number"==typeof c.revalidate&&(k.revalidate<c.revalidate||(k.revalidate=c.revalidate));let i=k.tags;if(null===i)k.tags=d.slice();else for(let a of d)i.includes(a)||i.push(a);break;case"unstable-cache":f=!0}if(!f&&"force-no-store"!==e.fetchCache&&!e.isOnDemandRevalidate&&!m.isOnDemandRevalidate&&!e.isDraftMode){let f=await m.get(o,{kind:h.IncrementalCacheKind.FETCH,revalidate:c.revalidate,tags:d,softTags:null==r?void 0:r.tags,fetchIdx:q,fetchUrl:p});if(f&&f.value)if(f.value.kind!==h.CachedRouteKind.FETCH)console.error(`Invariant invalid cacheEntry returned for ${n}`);else{let h=void 0!==f.value.data.body?JSON.parse(f.value.data.body):void 0;if(f.isStale){if(e.pendingRevalidates||(e.pendingRevalidates={}),!e.pendingRevalidates[n]){let f=g.workUnitAsyncStorage.run(s,a,...b).then(async a=>(await j(a,m,o,d,c.revalidate,q,p),a)).catch(a=>(console.error(`revalidating cache with key: ${n}`,a),h));e.isStaticGeneration&&f.catch(()=>{}),e.pendingRevalidates[n]=f}if(e.isStaticGeneration)return await e.pendingRevalidates[n]}return h}}let l=await g.workUnitAsyncStorage.run(s,a,...b);return e.isDraftMode||(e.pendingRevalidates||(e.pendingRevalidates={}),e.pendingRevalidates[n]=j(l,m,o,d,c.revalidate,q,p)),l}{if(i+=1,!m.isOnDemandRevalidate){let a=await m.get(o,{kind:h.IncrementalCacheKind.FETCH,revalidate:c.revalidate,tags:d,fetchIdx:q,fetchUrl:p,softTags:null==r?void 0:r.tags});if(a&&a.value){if(a.value.kind!==h.CachedRouteKind.FETCH)console.error(`Invariant invalid cacheEntry returned for ${n}`);else if(!a.isStale)return void 0!==a.value.data.body?JSON.parse(a.value.data.body):void 0}}let e=await g.workUnitAsyncStorage.run(s,a,...b);return await j(e,m,o,d,c.revalidate,q,p),e}}finally{n&&n.endRead()}}}},46043,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getSortedRouteObjects:function(){return h},getSortedRoutes:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});class f{insert(a){this._insert(a.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(a="/"){let b=[...this.children.keys()].sort();null!==this.slugName&&b.splice(b.indexOf("[]"),1),null!==this.restSlugName&&b.splice(b.indexOf("[...]"),1),null!==this.optionalRestSlugName&&b.splice(b.indexOf("[[...]]"),1);let c=b.map(b=>this.children.get(b)._smoosh(`${a}${b}/`)).reduce((a,b)=>[...a,...b],[]);if(null!==this.slugName&&c.push(...this.children.get("[]")._smoosh(`${a}[${this.slugName}]/`)),!this.placeholder){let b="/"===a?"/":a.slice(0,-1);if(null!=this.optionalRestSlugName)throw Object.defineProperty(Error(`You cannot define a route with the same specificity as a optional catch-all route ("${b}" and "${b}[[...${this.optionalRestSlugName}]]").`),"__NEXT_ERROR_CODE",{value:"E458",enumerable:!1,configurable:!0});c.unshift(b)}return null!==this.restSlugName&&c.push(...this.children.get("[...]")._smoosh(`${a}[...${this.restSlugName}]/`)),null!==this.optionalRestSlugName&&c.push(...this.children.get("[[...]]")._smoosh(`${a}[[...${this.optionalRestSlugName}]]/`)),c}_insert(a,b,c){if(0===a.length){this.placeholder=!1;return}if(c)throw Object.defineProperty(Error("Catch-all must be the last part of the URL."),"__NEXT_ERROR_CODE",{value:"E392",enumerable:!1,configurable:!0});let d=a[0];if(d.startsWith("[")&&d.endsWith("]")){let f=d.slice(1,-1),g=!1;if(f.startsWith("[")&&f.endsWith("]")&&(f=f.slice(1,-1),g=!0),f.startsWith("…"))throw Object.defineProperty(Error(`Detected a three-dot character ('…') at ('${f}'). Did you mean ('...')?`),"__NEXT_ERROR_CODE",{value:"E147",enumerable:!1,configurable:!0});if(f.startsWith("...")&&(f=f.substring(3),c=!0),f.startsWith("[")||f.endsWith("]"))throw Object.defineProperty(Error(`Segment names may not start or end with extra brackets ('${f}').`),"__NEXT_ERROR_CODE",{value:"E421",enumerable:!1,configurable:!0});if(f.startsWith("."))throw Object.defineProperty(Error(`Segment names may not start with erroneous periods ('${f}').`),"__NEXT_ERROR_CODE",{value:"E288",enumerable:!1,configurable:!0});function e(a,c){if(null!==a&&a!==c)throw Object.defineProperty(Error(`You cannot use different slug names for the same dynamic path ('${a}' !== '${c}').`),"__NEXT_ERROR_CODE",{value:"E337",enumerable:!1,configurable:!0});b.forEach(a=>{if(a===c)throw Object.defineProperty(Error(`You cannot have the same slug name "${c}" repeat within a single dynamic path`),"__NEXT_ERROR_CODE",{value:"E247",enumerable:!1,configurable:!0});if(a.replace(/\W/g,"")===d.replace(/\W/g,""))throw Object.defineProperty(Error(`You cannot have the slug names "${a}" and "${c}" differ only by non-word symbols within a single dynamic path`),"__NEXT_ERROR_CODE",{value:"E499",enumerable:!1,configurable:!0})}),b.push(c)}if(c)if(g){if(null!=this.restSlugName)throw Object.defineProperty(Error(`You cannot use both an required and optional catch-all route at the same level ("[...${this.restSlugName}]" and "${a[0]}" ).`),"__NEXT_ERROR_CODE",{value:"E299",enumerable:!1,configurable:!0});e(this.optionalRestSlugName,f),this.optionalRestSlugName=f,d="[[...]]"}else{if(null!=this.optionalRestSlugName)throw Object.defineProperty(Error(`You cannot use both an optional and required catch-all route at the same level ("[[...${this.optionalRestSlugName}]]" and "${a[0]}").`),"__NEXT_ERROR_CODE",{value:"E300",enumerable:!1,configurable:!0});e(this.restSlugName,f),this.restSlugName=f,d="[...]"}else{if(g)throw Object.defineProperty(Error(`Optional route parameters are not yet supported ("${a[0]}").`),"__NEXT_ERROR_CODE",{value:"E435",enumerable:!1,configurable:!0});e(this.slugName,f),this.slugName=f,d="[]"}}this.children.has(d)||this.children.set(d,new f),this.children.get(d)._insert(a.slice(1),b,c)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null}}function g(a){let b=new f;return a.forEach(a=>b.insert(a)),b.smoosh()}function h(a,b){let c={},d=[];for(let e=0;e<a.length;e++){let f=b(a[e]);c[f]=e,d[e]=f}return g(d).map(b=>a[c[b]])}},82966,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isDynamicRoute",{enumerable:!0,get:function(){return g}});let d=a.r(97908),e=/\/[^/]*\[[^/]+\][^/]*(?=\/|$)/,f=/\/\[[^/]+\](?=\/|$)/;function g(a,b=!0){return((0,d.isInterceptionRouteAppPath)(a)&&(a=(0,d.extractInterceptionRouteInformation)(a).interceptedRoute),b)?f.test(a):e.test(a)}},19228,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getSortedRouteObjects:function(){return f.getSortedRouteObjects},getSortedRoutes:function(){return f.getSortedRoutes},isDynamicRoute:function(){return g.isDynamicRoute}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(46043),g=a.r(82966)},65819,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={refresh:function(){return r},revalidatePath:function(){return s},revalidateTag:function(){return p},updateTag:function(){return q}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(60384),g=a.r(19228),h=a.r(99870),i=a.r(56704),j=a.r(32319),k=a.r(96556),l=a.r(50640),m=a.r(4712),n=a.r(74993),o=a.r(86465);function p(a,b){return b||console.warn('"revalidateTag" without the second argument is now deprecated, add second argument of "max" or use "updateTag". See more info here: https://nextjs.org/docs/messages/revalidate-tag-single-arg'),t([(0,o.encodeCacheTag)(a)],`revalidateTag ${a}`,b)}function q(a){let b=i.workAsyncStorage.getStore();if(!b||b.page.endsWith("/route"))throw Object.defineProperty(Error("updateTag can only be called from within a Server Action. To invalidate cache tags in Route Handlers or other contexts, use revalidateTag instead. See more info here: https://nextjs.org/docs/app/api-reference/functions/updateTag"),"__NEXT_ERROR_CODE",{value:"E872",enumerable:!1,configurable:!0});return t([(0,o.encodeCacheTag)(a)],`updateTag ${a}`,void 0)}function r(){let a=i.workAsyncStorage.getStore(),b=j.workUnitAsyncStorage.getStore();if(!a||a.page.endsWith("/route")||(null==b?void 0:b.phase)!=="action")throw Object.defineProperty(Error("refresh can only be called from within a Server Action. See more info here: https://nextjs.org/docs/app/api-reference/functions/refresh"),"__NEXT_ERROR_CODE",{value:"E870",enumerable:!1,configurable:!0});a&&(a.pathWasRevalidated=m.ActionDidRevalidateDynamicOnly)}function s(a,b){if(a.length>h.NEXT_CACHE_SOFT_TAG_MAX_LENGTH)return void console.warn(`Warning: revalidatePath received "${a}" which exceeded max length of ${h.NEXT_CACHE_SOFT_TAG_MAX_LENGTH}. See more info here https://nextjs.org/docs/app/api-reference/functions/revalidatePath`);let c=`${h.NEXT_CACHE_IMPLICIT_TAG_ID}${(0,o.encodeCacheTag)((0,n.removeTrailingSlash)(a))}`;b?c+=`${c.endsWith("/")?"":"/"}${b}`:(0,g.isDynamicRoute)(a)&&console.warn(`Warning: a dynamic page path "${a}" was passed to "revalidatePath", but the "type" parameter is missing. This has no effect by default, see more info here https://nextjs.org/docs/app/api-reference/functions/revalidatePath`);let d=[c];return c===`${h.NEXT_CACHE_IMPLICIT_TAG_ID}/`?d.push(`${h.NEXT_CACHE_IMPLICIT_TAG_ID}/index`):c===`${h.NEXT_CACHE_IMPLICIT_TAG_ID}/index`&&d.push(`${h.NEXT_CACHE_IMPLICIT_TAG_ID}/`),t(d,`revalidatePath ${a}`)}function t(a,b,c){var d;let e=i.workAsyncStorage.getStore();if(!e||!e.incrementalCache)throw Object.defineProperty(Error(`Invariant: static generation store missing in ${b}`),"__NEXT_ERROR_CODE",{value:"E263",enumerable:!1,configurable:!0});let g=j.workUnitAsyncStorage.getStore();if(g){if("render"===g.phase)throw Object.defineProperty(Error(`Route ${e.route} used "${b}" during render which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E7",enumerable:!1,configurable:!0});switch(g.type){case"cache":case"private-cache":throw Object.defineProperty(Error(`Route ${e.route} used "${b}" inside a "use cache" which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E181",enumerable:!1,configurable:!0});case"unstable-cache":throw Object.defineProperty(Error(`Route ${e.route} used "${b}" inside a function cached with "unstable_cache(...)" which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E306",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${e.route} used "${b}" inside \`generateStaticParams\` which is unsupported. To ensure revalidation is performed consistently it must always happen outside of renders and cached functions. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E1127",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":let a=Object.defineProperty(Error(`Route ${e.route} used ${b} without first calling \`await connection()\`.`),"__NEXT_ERROR_CODE",{value:"E406",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(e.route,b,a,g);case"prerender-client":case"validation-client":throw Object.defineProperty(new l.InvariantError(`${b} must not be used within a client component. Next.js should be preventing ${b} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E693",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(e.route,b,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let c=Object.defineProperty(new k.DynamicServerError(`Route ${e.route} couldn't be rendered statically because it used \`${b}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw e.dynamicUsageDescription=b,e.dynamicUsageStack=c.stack,c}}for(let b of(e.pendingRevalidatedTags||(e.pendingRevalidatedTags=[]),a))-1===e.pendingRevalidatedTags.findIndex(a=>a.tag===b&&("string"==typeof a.profile&&"string"==typeof c?a.profile===c:"object"==typeof a.profile&&"object"==typeof c?JSON.stringify(a.profile)===JSON.stringify(c):a.profile===c))&&e.pendingRevalidatedTags.push({tag:b,profile:c});let h=c&&"object"==typeof c?c:c&&"string"==typeof c&&(null==e||null==(d=e.cacheLifeProfiles)?void 0:d[c])?e.cacheLifeProfiles[c]:void 0;c&&(null==h?void 0:h.expire)!==0||(e.pathWasRevalidated=m.ActionDidRevalidateStaticAndDynamic)}},1247,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_noStore",{enumerable:!0,get:function(){return g}});let d=a.r(56704),e=a.r(32319),f=a.r(60384);function g(){let a=d.workAsyncStorage.getStore(),b=e.workUnitAsyncStorage.getStore();if(a){if(!a.forceStatic){if(a.isUnstableNoStore=!0,b)switch(b.type){case"prerender":case"prerender-client":case"validation-client":case"prerender-runtime":return}(0,f.markCurrentScopeAsDynamic)(a,b,"unstable_noStore()")}}}},32621,(a,b,c)=>{"use strict";function d(a){throw Object.defineProperty(Error("`cacheLife()` is only available with the `cacheComponents` config."),"__NEXT_ERROR_CODE",{value:"E887",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cacheLife",{enumerable:!0,get:function(){return d}}),a.r(50640),a.r(56704),a.r(32319)},72835,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`cacheTag()` is only available with the `cacheComponents` config."),"__NEXT_ERROR_CODE",{value:"E886",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cacheTag",{enumerable:!0,get:function(){return d}}),a.r(32319),a.r(26095)},18558,(a,b,c)=>{let d;d={unstable_cache:a.r(71632).unstable_cache,updateTag:a.r(65819).updateTag,revalidateTag:a.r(65819).revalidateTag,revalidatePath:a.r(65819).revalidatePath,refresh:a.r(65819).refresh,unstable_noStore:a.r(1247).unstable_noStore,cacheLife:a.r(32621).cacheLife,cacheTag:a.r(72835).cacheTag};let e=!1,f=!1;d.unstable_cacheLife=function(){return e||(e=!0,console.error(Error("`unstable_cacheLife` was recently stabilized and should be imported as `cacheLife`. The `unstable` prefixed form will be removed in a future version of Next.js."))),d.cacheLife.apply(this,arguments)},d.unstable_cacheTag=function(){return f||(f=!0,console.error(Error("`unstable_cacheTag` was recently stabilized and should be imported as `cacheTag`. The `unstable` prefixed form will be removed in a future version of Next.js."))),d.cacheTag.apply(this,arguments)},b.exports=d,c.unstable_cache=d.unstable_cache,c.revalidatePath=d.revalidatePath,c.revalidateTag=d.revalidateTag,c.updateTag=d.updateTag,c.unstable_noStore=d.unstable_noStore,c.cacheLife=d.cacheLife,c.unstable_cacheLife=d.unstable_cacheLife,c.cacheTag=d.cacheTag,c.unstable_cacheTag=d.unstable_cacheTag,c.refresh=d.refresh},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
16
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},78403,a=>a.a(async(b,c)=>{try{var d=a.i(37936),e=a.i(18558),f=a.i(93321),g=a.i(80384),h=a.i(17781),i=a.i(56643),j=a.i(13095),k=b([g,i]);function l(){(0,e.revalidatePath)("/map")}async function m(a){let b=await (0,i.createNode)(a);return l(),b}async function n(a,b){let c=await (0,i.updateNode)(a,b);return l(),c}async function o(a,b){let c=await (0,i.setNodeStatus)(a,b);return l(),c}async function p(a){let b=await (0,i.deprioritizeNode)(a);return l(),b}async function q(a){let b=await (0,i.cancelNode)(a);return l(),b}async function r(a){await (0,i.deleteNode)(a),l()}async function s(a){await g.db.update(h.node).set({source:"MANUAL"}).where((0,f.eq)(h.node.id,a)),l()}[g,i]=k.then?(await k)():k,(0,j.ensureServerEntryExports)([m,n,o,p,q,r,s]),(0,d.registerServerReference)(m,"
|
|
16
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},78403,a=>a.a(async(b,c)=>{try{var d=a.i(37936),e=a.i(18558),f=a.i(93321),g=a.i(80384),h=a.i(17781),i=a.i(56643),j=a.i(13095),k=b([g,i]);function l(){(0,e.revalidatePath)("/map")}async function m(a){let b=await (0,i.createNode)(a);return l(),b}async function n(a,b){let c=await (0,i.updateNode)(a,b);return l(),c}async function o(a,b){let c=await (0,i.setNodeStatus)(a,b);return l(),c}async function p(a){let b=await (0,i.deprioritizeNode)(a);return l(),b}async function q(a){let b=await (0,i.cancelNode)(a);return l(),b}async function r(a){await (0,i.deleteNode)(a),l()}async function s(a){await g.db.update(h.node).set({source:"MANUAL"}).where((0,f.eq)(h.node.id,a)),l()}[g,i]=k.then?(await k)():k,(0,j.ensureServerEntryExports)([m,n,o,p,q,r,s]),(0,d.registerServerReference)(m,"40efcbe81ebca94818efb747558c7eee9989c72bb9",null),(0,d.registerServerReference)(n,"6097b53660c1edc709043c4947fd531143d38c436f",null),(0,d.registerServerReference)(o,"6002f3e219bb249de37c6b167be22024c2318023ce",null),(0,d.registerServerReference)(p,"40490f69858e7535ed5108d40db8b256866be8ca4d",null),(0,d.registerServerReference)(q,"40e611804e45c384d54f6277a79b0d3ed72b0bc55b",null),(0,d.registerServerReference)(r,"4029b59852c7595ad1c5c6a44fab31ff0686bd56e7",null),(0,d.registerServerReference)(s,"40f86c2571ea2c646bc6c6f470de8719d77386e96d",null),a.s(["acceptSuggestionAction",0,s,"cancelAction",0,q,"createNodeAction",0,m,"deleteNodeAction",0,r,"deprioritizeAction",0,p,"setStatusAction",0,o,"updateNodeAction",0,n]),c()}catch(a){c(a)}},!1)];
|
|
17
17
|
|
|
18
18
|
//# sourceMappingURL=_1vt70iy._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[324,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(15290),e=a.i(83864),f=a.i(10293);let g=[{id:"overview",title:"What is Beacon"},{id:"install",title:"Install"},{id:"quickstart",title:"Quickstart"},{id:"loop",title:"The planning loop"},{id:"canvases",title:"The canvases"},{id:"cli",title:"CLI reference"},{id:"integration",title:"Claude Code integration"},{id:"config",title:"Configuration"},{id:"troubleshooting",title:"Troubleshooting"}],h=[{cmd:"beacon",what:"Register the current repo, ensure the shared server is running, and open the panel on this repo. The everyday command."},{cmd:"beacon doctor",what:"Audit what's wired — the global Claude Code hooks + skills, this repo's .mcp.json, and the running daemon."},{cmd:"beacon stop",what:"Stop the shared background server. It restarts the next time you run beacon."},{cmd:"beacon setup",what:"(Re)install Beacon's per-repo helpers — the skills and .mcp.json — in the current repo without opening the panel."},{cmd:"beacon uninstall",what:"Reverse every Beacon artifact: the global ~/.claude wiring and the per-repo files."},{cmd:"beacon mcp",what:"The stdio MCP server Claude Code spawns automatically. You never run this by hand."}],i=[{name:"/beacon-init",when:"First time you point Beacon at a repo.",what:"The agent reads the codebase and fills Beacon's map — the main components, the rough roadmap themes, the database schema, and the endpoints. Run it once per repo to bootstrap the picture."},{name:"/beacon-refresh",when:"Every few weeks, or after a big set of changes.",what:"The agent re-surveys the repo and updates what /beacon-init produced — adds new components, drops removed ones, picks up new tables and routes. Anything you added by hand on the canvas survives."},{name:"/beacon-plan",when:"Whenever you want to review an approach on the canvas.",what:"Present the current plan or approach on Beacon's /plan page for annotation instead of asking for approval as a wall of text."}],j=[{name:"beacon_context_for_feature",what:"Before touching code, the agent pulls the files attached to a feature plus their imports, the endpoints in that domain, the tables those endpoints touch, and the surrounding components — one round-trip instead of a blind Glob/Grep scan."},{name:"beacon_blast_radius",what:"Mid-feature, the agent runs this on a file it's about to edit to see what imports it and what it imports — so it can judge whether a change is safe."},{name:"beacon_propose_plan",what:"When the agent has a feature plan (tables + relations + endpoints), this opens it on /plan and BLOCKS the session until you Approve, Discard, or Submit feedback."},{name:"beacon_describe_feature",what:"When a feature is done, the agent records a short markdown summary and the files it touched, keeping the next session's context accurate."},{name:"beacon_map",what:"A quick list of features already on the roadmap. The agent calls it near the start of work to avoid duplicating what's planned."},{name:"beacon_entities",what:"A raw readout of everything mapped — features, architecture, tables, endpoints — when the agent just needs the planning data."}],k=[{trigger:"Plan mode (ExitPlanMode)",what:"When the agent shows you a plan, Beacon intercepts it and renders the markdown on /plan with a native annotation panel. Select text and type → it becomes a comment. Approve / Discard / Submit feedback flows back to the session as the next instruction."},{trigger:"File edits (PostToolUse)",what:"Every Edit/Write the agent runs is reported to Beacon and the file is attached to whichever feature the session is working on. The /map view fills in with the real files behind each feature, without you tagging anything."},{trigger:"Code-graph watcher",what:"While the panel is open, a background watcher rebuilds the Files view as you save code — the maps stay current with the repo on their own."}],l=[{key:"BEACON_HOME",what:"Where per-workspace data lives — the SQLite databases and the server record. Defaults to ~/.beacon."},{key:"PORT",what:"Port for the shared local server. Defaults to 4319."},{key:"Settings → intel",what:"In the panel, the Settings page drives the code-intelligence model/provider and your editor, and triggers a code-map sync."}];function m({text:a,label:d="Copy"}){let[e,f]=(0,c.useState)(!1);return(0,b.jsx)("button",{onClick:()=>{navigator.clipboard?.writeText(a),f(!0),setTimeout(()=>f(!1),1500)},className:"glass-soft w-hover grid h-8 w-8 shrink-0 place-items-center rounded-md","aria-label":d,children:e?(0,b.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#ff7a45",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M20 6 9 17l-5-5"})}):(0,b.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),(0,b.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})}function n({children:a,copy:c}){return(0,b.jsxs)("div",{className:"glass-soft flex items-center gap-3 rounded-lg px-4 py-2.5",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$"}),(0,b.jsx)("code",{className:"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.85rem] text-foreground",children:a}),c&&(0,b.jsx)(m,{text:a})]})}function o({id:a,eyebrow:c,children:d}){return(0,b.jsxs)("div",{className:"mb-5 scroll-mt-28",id:a,children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-2",children:c}),(0,b.jsx)("h2",{className:"text-[1.6rem] font-semibold tracking-tight",children:d})]})}a.s(["Docs",0,function(){let[a,m]=(0,c.useState)(g[0].id),p=(0,c.useRef)(null);return(0,c.useEffect)(()=>{let a=new IntersectionObserver(a=>{let b=a.filter(a=>a.isIntersecting).sort((a,b)=>a.boundingClientRect.top-b.boundingClientRect.top);b[0]&&m(b[0].target.id)},{rootMargin:"-20% 0px -70% 0px",threshold:0});return g.forEach(b=>{let c=document.getElementById(b.id);c&&a.observe(c)}),()=>a.disconnect()},[]),(0,b.jsxs)("div",{className:"welcome",ref:p,children:[(0,b.jsx)("div",{className:"welcome-bg","aria-hidden":!0}),(0,b.jsx)("header",{className:"fixed inset-x-0 top-0 z-50",children:(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6",children:(0,b.jsxs)("div",{className:"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3",style:{animationDelay:".05s"},children:[(0,b.jsxs)(d.default,{href:"/",className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:20,className:"text-foreground"}),(0,b.jsx)("span",{className:"font-semibold tracking-tight",children:"Beacon"}),(0,b.jsx)("span",{className:"w-mono w-eyebrow w-muted ml-1 hidden sm:inline",children:"docs"})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)(d.default,{href:"/",className:"transition-colors hover:text-foreground",children:"Home"}),(0,b.jsx)("a",{href:"#install",className:"transition-colors hover:text-foreground",children:"Install"})]})]})})}),(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6 pb-24 pt-32",children:(0,b.jsxs)("div",{className:"lg:grid lg:grid-cols-[15rem_1fr] lg:gap-14",children:[(0,b.jsx)("aside",{className:"hidden lg:block",children:(0,b.jsxs)("nav",{className:"sticky top-28",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-muted mb-4",children:"On this page"}),(0,b.jsx)("ul",{className:"space-y-1.5 text-sm",children:g.map(c=>(0,b.jsx)("li",{children:(0,b.jsx)("a",{href:`#${c.id}`,className:`block border-l-2 py-1 pl-3 transition-colors ${a===c.id?"w-signal border-[#ff7a45]":"w-muted border-transparent hover:text-foreground"}`,children:c.title})},c.id))})]})}),(0,b.jsxs)("main",{className:"min-w-0 max-w-2xl",children:[(0,b.jsxs)("section",{className:"w-load",children:[(0,b.jsx)(o,{id:"overview",eyebrow:"Overview",children:"What is Beacon"}),(0,b.jsxs)("p",{className:"w-muted leading-relaxed",children:["Beacon is the ",(0,b.jsx)("span",{className:"text-foreground",children:"visual planning surface for the coding agent in your terminal"}),". That session is the brain; Beacon is its eyes and hands. The agent proposes a feature plan — roadmap features, database schema, and endpoints — you review it on a canvas instead of a wall of text, give scoped feedback, and approve or discard with a click. The verdict flows straight back to your session."]}),(0,b.jsxs)("p",{className:"w-muted mt-4 leading-relaxed",children:["It runs entirely on your machine — ",(0,b.jsx)("span",{className:"text-foreground",children:"local, no account, no API key"}),". One shared server quietly serves every repo you open; each keeps its own data under ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"~/.beacon"}),"."]})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"install",eyebrow:"Get started",children:"Install"}),(0,b.jsxs)("p",{className:"w-muted mb-4 leading-relaxed",children:["One command. It installs ",(0,b.jsx)("span",{className:"text-foreground",children:"Bun"})," if you don't have it, then puts the"," ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," CLI on your PATH. Re-run it any time to update."]}),(0,b.jsx)(n,{copy:!0,children:f.INSTALL_COMMAND}),(0,b.jsx)("p",{className:"w-muted mt-4 leading-relaxed",children:"Then, inside any repository:"}),(0,b.jsx)("div",{className:"mt-3",children:(0,b.jsx)(n,{copy:!0,children:"beacon"})})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"quickstart",eyebrow:"Get started",children:"Quickstart"}),(0,b.jsx)("ol",{className:"space-y-5",children:[(0,b.jsxs)(b.Fragment,{children:["Install with the command above, then run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," inside a repo. It registers the repo, starts the shared server, and opens the panel in your browser."]}),(0,b.jsxs)(b.Fragment,{children:["In your Claude Code session, run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"/beacon-init"}),". The agent reads the repo and draws its architecture, schema, and roadmap onto the canvas."]}),(0,b.jsxs)(b.Fragment,{children:["Ask the agent to plan a feature. It calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," and the plan renders live on ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"}),"."]}),(0,b.jsxs)(b.Fragment,{children:["Review it — annotate inline, edit the boards — then ",(0,b.jsx)("span",{className:"text-foreground",children:"Approve"}),", ",(0,b.jsx)("span",{className:"text-foreground",children:"Submit feedback"}),", or ",(0,b.jsx)("span",{className:"text-foreground",children:"Discard"}),". Your verdict returns to the session."]})].map((a,c)=>(0,b.jsxs)("li",{className:"relative pl-11",children:[(0,b.jsx)("span",{className:"w-mono glass absolute left-0 top-0 grid h-7 w-7 place-items-center rounded-md text-[0.72rem] font-semibold text-foreground",children:c+1}),(0,b.jsx)("p",{className:"w-muted leading-relaxed",children:a})]},c))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"loop",eyebrow:"Concepts",children:"The planning loop"}),(0,b.jsx)("p",{className:"w-muted leading-relaxed",children:"The loop is the whole point. It closes in five steps:"}),(0,b.jsx)("ol",{className:"mt-4 space-y-3",children:[(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Propose."})," The agent calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," (or you present a plan in plan mode). The tool ",(0,b.jsx)("span",{className:"text-foreground",children:"blocks"})," — the session waits for your verdict."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Review."})," The plan renders on ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"}),": a native annotation panel on the left, the roadmap and database boards on the right. Select text to comment; edit the boards directly."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Decide."})," Approve, Discard, or Submit feedback. Feedback bundles your inline notes plus any board edits."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Return."})," The verdict flows back to the terminal. On feedback, the agent revises and re-proposes — the loop continues."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Record."})," On approval the schema and roadmap drafts persist, and when the work is done the agent calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_describe_feature"})," so the next session has accurate context."]})].map((a,c)=>(0,b.jsx)("li",{className:"glass w-hover rounded-lg p-4",children:(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a})},c))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"canvases",eyebrow:"Concepts",children:"The canvases"}),(0,b.jsx)("div",{className:"space-y-4",children:[{path:"/map",what:"The roadmap: feature cards, their sub-tasks, and dependency links — plus a separate architecture view of the real components. Files the agent edits attach themselves here."},{path:"/db",what:"The database design board: tables and columns, endpoints, and the endpoint→table links. Proposed schema lands as a distinct draft layer you can approve or discard."},{path:"/plan",what:"The split-screen review page: annotations on the left, the roadmap + database boards tabbed on the right, plus a history of every plan and its verdict."}].map(a=>(0,b.jsxs)("div",{className:"glass w-hover rounded-lg p-5",children:[(0,b.jsx)("p",{className:"w-mono text-foreground mb-1",children:a.path}),(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a.what})]},a.path))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"cli",eyebrow:"Reference",children:"CLI reference"}),(0,b.jsx)("div",{className:"space-y-3",children:h.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsxs)("code",{className:"w-mono text-foreground text-[0.9rem]",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$ "}),a.cmd]}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.cmd))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"integration",eyebrow:"Reference",children:"Claude Code integration"}),(0,b.jsx)("h3",{className:"mb-1 mt-2 font-semibold text-foreground",children:"Skills — you type these"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"Slash commands that tell the agent to do something Beacon-shaped."}),(0,b.jsx)("div",{className:"space-y-3",children:i.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.name}),(0,b.jsxs)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:[(0,b.jsx)("span",{className:"text-foreground",children:"When:"})," ",a.when," ",a.what]})]},a.name))}),(0,b.jsx)("h3",{className:"mb-1 mt-8 font-semibold text-foreground",children:"MCP tools — the agent calls these"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"You don't run these; the agent reaches for them when they fit. Knowing they exist makes its moves legible."}),(0,b.jsx)("div",{className:"space-y-3",children:j.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.name}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.name))}),(0,b.jsx)("h3",{className:"mb-1 mt-8 font-semibold text-foreground",children:"Hooks — these run on their own"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"Wired into Claude Code globally; they react to what the session is already doing."}),(0,b.jsx)("div",{className:"space-y-3",children:k.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("p",{className:"font-medium text-foreground text-[0.92rem]",children:a.trigger}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.trigger))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"config",eyebrow:"Reference",children:"Configuration"}),(0,b.jsx)("div",{className:"space-y-3",children:l.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.key}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.key))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"troubleshooting",eyebrow:"Help",children:"Troubleshooting"}),(0,b.jsx)("p",{className:"w-muted mb-4 leading-relaxed",children:"When something looks off, start here:"}),(0,b.jsx)("div",{className:"mb-4",children:(0,b.jsx)(n,{copy:!0,children:"beacon doctor"})}),(0,b.jsx)("div",{className:"space-y-3",children:[{q:"The panel won't open",a:(0,b.jsxs)(b.Fragment,{children:["Make sure the server is up — run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," again, or ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon stop"})," then ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," to restart it."]})},{q:"The @beacon tools or skills are missing in Claude Code",a:(0,b.jsxs)(b.Fragment,{children:["Run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon setup"})," in the repo, then restart your Claude Code session so it re-reads the MCP registration."]})},{q:"How do I update?",a:(0,b.jsx)(b.Fragment,{children:"Re-run the install command — it fetches the latest and relinks. Nothing else to do."})}].map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("p",{className:"font-medium text-foreground text-[0.92rem]",children:a.q}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.a})]},a.q))})]})]})]})}),(0,b.jsx)("footer",{className:"px-6 pb-12 pt-8",children:(0,b.jsxs)("div",{className:"mx-auto max-w-6xl",children:[(0,b.jsx)("div",{className:"w-accent-line mb-8 h-px w-full opacity-60"}),(0,b.jsxs)("div",{className:"flex flex-col items-center justify-between gap-5 md:flex-row",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:26,className:"text-foreground"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-semibold leading-tight",children:"Beacon"}),(0,b.jsx)("p",{className:"w-mono w-muted text-[0.72rem]",children:"the visual planning surface for your terminal"})]})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)(d.default,{href:"/",className:"transition-colors hover:text-foreground",children:"Home"}),(0,b.jsx)("a",{href:"#overview",className:"transition-colors hover:text-foreground",children:"Docs"})]}),(0,b.jsxs)("p",{className:"w-mono w-muted text-[0.72rem]",children:["Created by"," ",(0,b.jsxs)("a",{href:"https://www.instagram.com/wenzorithelly/",target:"_blank",rel:"noreferrer",className:"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[(0,b.jsx)("rect",{x:"2",y:"2",width:"20",height:"20",rx:"5",ry:"5"}),(0,b.jsx)("path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}),(0,b.jsx)("line",{x1:"17.5",y1:"6.5",x2:"17.51",y2:"6.5"})]}),"Wenzo"]}),(0,b.jsx)("span",{className:"mx-2 opacity-40",children:"·"}),"© 2026 Beacon"]})]})]})})]})}])}];
|
|
1
|
+
module.exports=[324,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(15290),e=a.i(83864),f=a.i(10293);let g=[{id:"overview",title:"What is Beacon"},{id:"install",title:"Install"},{id:"quickstart",title:"Quickstart"},{id:"loop",title:"The planning loop"},{id:"canvases",title:"The canvases"},{id:"cli",title:"CLI reference"},{id:"integration",title:"Claude Code integration"},{id:"config",title:"Configuration"},{id:"troubleshooting",title:"Troubleshooting"}],h=[{cmd:"beacon",what:"Register the current repo, ensure the shared server is running, and open the panel on this repo. The everyday command."},{cmd:"beacon doctor",what:"Audit what's wired — the global Claude Code hooks + skills, this repo's .mcp.json, and the running daemon."},{cmd:"beacon stop",what:"Stop the shared background server. It restarts the next time you run beacon."},{cmd:"beacon setup",what:"(Re)install Beacon's per-repo helpers — the skills and .mcp.json — in the current repo without opening the panel."},{cmd:"beacon uninstall",what:"Reverse every Beacon artifact: the global ~/.claude wiring and the per-repo files."},{cmd:"beacon mcp",what:"The stdio MCP server Claude Code spawns automatically. You never run this by hand."}],i=[{name:"/beacon-init",when:"First time you point Beacon at a repo.",what:"The agent reads the codebase and fills Beacon's map — the main components, the rough roadmap themes, the database schema, and the endpoints. Run it once per repo to bootstrap the picture."},{name:"/beacon-refresh",when:"Every few weeks, or after a big set of changes.",what:"The agent re-surveys the repo and updates what /beacon-init produced — adds new components, drops removed ones, picks up new tables and routes. Anything you added by hand on the canvas survives."},{name:"/beacon-plan",when:"Whenever you want to review an approach on the canvas.",what:"Present the current plan or approach on Beacon's /plan page for annotation instead of asking for approval as a wall of text."}],j=[{name:"beacon_context_for_feature",what:"Before touching code, the agent pulls the files attached to a feature plus their imports, the endpoints in that domain, the tables those endpoints touch, and the surrounding components — one round-trip instead of a blind Glob/Grep scan."},{name:"beacon_blast_radius",what:"Mid-feature, the agent runs this on a file it's about to edit to see what imports it and what it imports — so it can judge whether a change is safe."},{name:"beacon_propose_plan",what:"When the agent has a feature plan (tables + relations + endpoints), this opens it on /plan and BLOCKS the session until you Approve, Discard, or Submit feedback."},{name:"beacon_describe_feature",what:"When a feature is done, the agent records a short markdown summary and the files it touched, keeping the next session's context accurate."},{name:"beacon_map",what:"A quick list of features already on the roadmap. The agent calls it near the start of work to avoid duplicating what's planned."},{name:"beacon_entities",what:"A raw readout of everything mapped — features, architecture, tables, endpoints — when the agent just needs the planning data."}],k=[{trigger:"Plan mode (ExitPlanMode)",what:"When the agent shows you a plan, Beacon intercepts it and renders the markdown on /plan with a native annotation panel. Select text and type → it becomes a comment. Approve / Discard / Submit feedback flows back to the session as the next instruction."},{trigger:"File edits (PostToolUse)",what:"Every Edit/Write the agent runs is reported to Beacon and the file is attached to whichever feature the session is working on. The /map view fills in with the real files behind each feature, without you tagging anything."},{trigger:"Code-graph watcher",what:"While the panel is open, a background watcher rebuilds the Files view as you save code — the maps stay current with the repo on their own."}],l=[{key:"BEACON_HOME",what:"Where per-workspace data lives — the SQLite databases and the server record. Defaults to ~/.beacon."},{key:"PORT",what:"Port for the shared local server. Defaults to 4319."},{key:"Settings → intel",what:"In the panel, the Settings page drives the code-intelligence model/provider and your editor, and triggers a code-map sync."}];function m({text:a,label:d="Copy"}){let[e,f]=(0,c.useState)(!1);return(0,b.jsx)("button",{onClick:()=>{navigator.clipboard?.writeText(a),f(!0),setTimeout(()=>f(!1),1500)},className:"glass-soft w-hover grid h-8 w-8 shrink-0 place-items-center rounded-md","aria-label":d,children:e?(0,b.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"#ff7a45",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M20 6 9 17l-5-5"})}):(0,b.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),(0,b.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})}function n({children:a,copy:c}){return(0,b.jsxs)("div",{className:"glass-soft flex items-center gap-3 rounded-lg px-4 py-2.5",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$"}),(0,b.jsx)("code",{className:"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.85rem] text-foreground",children:a}),c&&(0,b.jsx)(m,{text:a})]})}function o({id:a,eyebrow:c,children:d}){return(0,b.jsxs)("div",{className:"mb-5 scroll-mt-28",id:a,children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-2",children:c}),(0,b.jsx)("h2",{className:"text-[1.6rem] font-semibold tracking-tight",children:d})]})}a.s(["Docs",0,function(){let[a,m]=(0,c.useState)(g[0].id),p=(0,c.useRef)(null);return(0,c.useEffect)(()=>{let a=new IntersectionObserver(a=>{let b=a.filter(a=>a.isIntersecting).sort((a,b)=>a.boundingClientRect.top-b.boundingClientRect.top);b[0]&&m(b[0].target.id)},{rootMargin:"-20% 0px -70% 0px",threshold:0});return g.forEach(b=>{let c=document.getElementById(b.id);c&&a.observe(c)}),()=>a.disconnect()},[]),(0,b.jsxs)("div",{className:"welcome",ref:p,children:[(0,b.jsx)("div",{className:"welcome-bg","aria-hidden":!0}),(0,b.jsx)("header",{className:"fixed inset-x-0 top-0 z-50",children:(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6",children:(0,b.jsxs)("div",{className:"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3",style:{animationDelay:".05s"},children:[(0,b.jsxs)(d.default,{href:"/",className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:20,className:"text-foreground"}),(0,b.jsx)("span",{className:"font-semibold tracking-tight",children:"Beacon"}),(0,b.jsx)("span",{className:"w-mono w-eyebrow w-muted ml-1 hidden sm:inline",children:"docs"})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)(d.default,{href:"/",className:"transition-colors hover:text-foreground",children:"Home"}),(0,b.jsx)("a",{href:"#install",className:"transition-colors hover:text-foreground",children:"Install"})]})]})})}),(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6 pb-24 pt-20",children:(0,b.jsxs)("div",{className:"lg:grid lg:grid-cols-[15rem_1fr] lg:gap-14",children:[(0,b.jsx)("aside",{className:"hidden lg:block",children:(0,b.jsxs)("nav",{className:"sticky top-28",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-muted mb-4",children:"On this page"}),(0,b.jsx)("ul",{className:"space-y-1.5 text-sm",children:g.map(c=>(0,b.jsx)("li",{children:(0,b.jsx)("a",{href:`#${c.id}`,className:`block border-l-2 py-1 pl-3 transition-colors ${a===c.id?"w-signal border-[#ff7a45]":"w-muted border-transparent hover:text-foreground"}`,children:c.title})},c.id))})]})}),(0,b.jsxs)("main",{className:"min-w-0 max-w-2xl",children:[(0,b.jsxs)("section",{className:"w-load",children:[(0,b.jsx)(o,{id:"overview",eyebrow:"Overview",children:"What is Beacon"}),(0,b.jsxs)("p",{className:"w-muted leading-relaxed",children:["Beacon is the ",(0,b.jsx)("span",{className:"text-foreground",children:"visual planning surface for the coding agent in your terminal"}),". That session is the brain; Beacon is its eyes and hands. The agent proposes a feature plan — roadmap features, database schema, and endpoints — you review it on a canvas instead of a wall of text, give scoped feedback, and approve or discard with a click. The verdict flows straight back to your session."]}),(0,b.jsxs)("p",{className:"w-muted mt-4 leading-relaxed",children:["It runs entirely on your machine — ",(0,b.jsx)("span",{className:"text-foreground",children:"local, no account, no API key"}),". One shared server quietly serves every repo you open; each keeps its own data under ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"~/.beacon"}),"."]})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"install",eyebrow:"Get started",children:"Install"}),(0,b.jsxs)("p",{className:"w-muted mb-4 leading-relaxed",children:["One command. It installs ",(0,b.jsx)("span",{className:"text-foreground",children:"Bun"})," if you don't have it, then puts the"," ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," CLI on your PATH. Re-run it any time to update."]}),(0,b.jsx)(n,{copy:!0,children:f.INSTALL_COMMAND}),(0,b.jsx)("p",{className:"w-muted mt-4 leading-relaxed",children:"Then, inside any repository:"}),(0,b.jsx)("div",{className:"mt-3",children:(0,b.jsx)(n,{copy:!0,children:"beacon"})})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"quickstart",eyebrow:"Get started",children:"Quickstart"}),(0,b.jsx)("ol",{className:"space-y-5",children:[(0,b.jsxs)(b.Fragment,{children:["Install with the command above, then run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," inside a repo. It registers the repo, starts the shared server, and opens the panel in your browser."]}),(0,b.jsxs)(b.Fragment,{children:["In your Claude Code session, run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"/beacon-init"}),". The agent reads the repo and draws its architecture, schema, and roadmap onto the canvas."]}),(0,b.jsxs)(b.Fragment,{children:["Ask the agent to plan a feature. It calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," and the plan renders live on ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"}),"."]}),(0,b.jsxs)(b.Fragment,{children:["Review it — annotate inline, edit the boards — then ",(0,b.jsx)("span",{className:"text-foreground",children:"Approve"}),", ",(0,b.jsx)("span",{className:"text-foreground",children:"Submit feedback"}),", or ",(0,b.jsx)("span",{className:"text-foreground",children:"Discard"}),". Your verdict returns to the session."]})].map((a,c)=>(0,b.jsxs)("li",{className:"relative pl-11",children:[(0,b.jsx)("span",{className:"w-mono glass absolute left-0 top-0 grid h-7 w-7 place-items-center rounded-md text-[0.72rem] font-semibold text-foreground",children:c+1}),(0,b.jsx)("p",{className:"w-muted leading-relaxed",children:a})]},c))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"loop",eyebrow:"Concepts",children:"The planning loop"}),(0,b.jsx)("p",{className:"w-muted leading-relaxed",children:"The loop is the whole point. It closes in five steps:"}),(0,b.jsx)("ol",{className:"mt-4 space-y-3",children:[(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Propose."})," The agent calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," (or you present a plan in plan mode). The tool ",(0,b.jsx)("span",{className:"text-foreground",children:"blocks"})," — the session waits for your verdict."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Review."})," The plan renders on ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"}),": a native annotation panel on the left, the roadmap and database boards on the right. Select text to comment; edit the boards directly."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Decide."})," Approve, Discard, or Submit feedback. Feedback bundles your inline notes plus any board edits."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Return."})," The verdict flows back to the terminal. On feedback, the agent revises and re-proposes — the loop continues."]}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"Record."})," On approval the schema and roadmap drafts persist, and when the work is done the agent calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_describe_feature"})," so the next session has accurate context."]})].map((a,c)=>(0,b.jsx)("li",{className:"glass w-hover rounded-lg p-4",children:(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a})},c))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"canvases",eyebrow:"Concepts",children:"The canvases"}),(0,b.jsx)("div",{className:"space-y-4",children:[{path:"/map",what:"The roadmap: feature cards, their sub-tasks, and dependency links — plus a separate architecture view of the real components. Files the agent edits attach themselves here."},{path:"/db",what:"The database design board: tables and columns, endpoints, and the endpoint→table links. Proposed schema lands as a distinct draft layer you can approve or discard."},{path:"/plan",what:"The split-screen review page: annotations on the left, the roadmap + database boards tabbed on the right, plus a history of every plan and its verdict."}].map(a=>(0,b.jsxs)("div",{className:"glass w-hover rounded-lg p-5",children:[(0,b.jsx)("p",{className:"w-mono text-foreground mb-1",children:a.path}),(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a.what})]},a.path))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"cli",eyebrow:"Reference",children:"CLI reference"}),(0,b.jsx)("div",{className:"space-y-3",children:h.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsxs)("code",{className:"w-mono text-foreground text-[0.9rem]",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$ "}),a.cmd]}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.cmd))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"integration",eyebrow:"Reference",children:"Claude Code integration"}),(0,b.jsx)("h3",{className:"mb-1 mt-2 font-semibold text-foreground",children:"Skills — you type these"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"Slash commands that tell the agent to do something Beacon-shaped."}),(0,b.jsx)("div",{className:"space-y-3",children:i.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.name}),(0,b.jsxs)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:[(0,b.jsx)("span",{className:"text-foreground",children:"When:"})," ",a.when," ",a.what]})]},a.name))}),(0,b.jsx)("h3",{className:"mb-1 mt-8 font-semibold text-foreground",children:"MCP tools — the agent calls these"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"You don't run these; the agent reaches for them when they fit. Knowing they exist makes its moves legible."}),(0,b.jsx)("div",{className:"space-y-3",children:j.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.name}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.name))}),(0,b.jsx)("h3",{className:"mb-1 mt-8 font-semibold text-foreground",children:"Hooks — these run on their own"}),(0,b.jsx)("p",{className:"w-muted mb-4 text-[0.92rem]",children:"Wired into Claude Code globally; they react to what the session is already doing."}),(0,b.jsx)("div",{className:"space-y-3",children:k.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("p",{className:"font-medium text-foreground text-[0.92rem]",children:a.trigger}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.trigger))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"config",eyebrow:"Reference",children:"Configuration"}),(0,b.jsx)("div",{className:"space-y-3",children:l.map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("code",{className:"w-mono text-foreground text-[0.9rem]",children:a.key}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.what})]},a.key))})]}),(0,b.jsxs)("section",{className:"mt-16",children:[(0,b.jsx)(o,{id:"troubleshooting",eyebrow:"Help",children:"Troubleshooting"}),(0,b.jsx)("p",{className:"w-muted mb-4 leading-relaxed",children:"When something looks off, start here:"}),(0,b.jsx)("div",{className:"mb-4",children:(0,b.jsx)(n,{copy:!0,children:"beacon doctor"})}),(0,b.jsx)("div",{className:"space-y-3",children:[{q:"The panel won't open",a:(0,b.jsxs)(b.Fragment,{children:["Make sure the server is up — run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," again, or ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon stop"})," then ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon"})," to restart it."]})},{q:"The @beacon tools or skills are missing in Claude Code",a:(0,b.jsxs)(b.Fragment,{children:["Run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon setup"})," in the repo, then restart your Claude Code session so it re-reads the MCP registration."]})},{q:"How do I update?",a:(0,b.jsx)(b.Fragment,{children:"Re-run the install command — it fetches the latest and relinks. Nothing else to do."})}].map(a=>(0,b.jsxs)("div",{className:"glass rounded-lg p-4",children:[(0,b.jsx)("p",{className:"font-medium text-foreground text-[0.92rem]",children:a.q}),(0,b.jsx)("p",{className:"w-muted mt-1.5 text-[0.92rem] leading-relaxed",children:a.a})]},a.q))})]})]})]})}),(0,b.jsx)("footer",{className:"px-6 pb-12 pt-8",children:(0,b.jsxs)("div",{className:"mx-auto max-w-6xl",children:[(0,b.jsx)("div",{className:"w-accent-line mb-8 h-px w-full opacity-60"}),(0,b.jsxs)("div",{className:"flex flex-col items-center justify-between gap-5 md:flex-row",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:26,className:"text-foreground"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-semibold leading-tight",children:"Beacon"}),(0,b.jsx)("p",{className:"w-mono w-muted text-[0.72rem]",children:"the visual planning surface for your terminal"})]})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)(d.default,{href:"/",className:"transition-colors hover:text-foreground",children:"Home"}),(0,b.jsx)("a",{href:"#overview",className:"transition-colors hover:text-foreground",children:"Docs"})]}),(0,b.jsxs)("p",{className:"w-mono w-muted text-[0.72rem]",children:["Created by"," ",(0,b.jsxs)("a",{href:"https://www.instagram.com/wenzorithelly/",target:"_blank",rel:"noreferrer",className:"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[(0,b.jsx)("rect",{x:"2",y:"2",width:"20",height:"20",rx:"5",ry:"5"}),(0,b.jsx)("path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}),(0,b.jsx)("line",{x1:"17.5",y1:"6.5",x2:"17.51",y2:"6.5"})]}),"Wenzo"]}),(0,b.jsx)("span",{className:"mx-2 opacity-40",children:"·"}),"© 2026 Beacon"]})]})]})})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=components_docs_docs_tsx_1g3nv7e._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../components/docs/docs.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport Link from \"next/link\";\nimport { BeaconMark } from \"@/components/beacon-mark\";\nimport { INSTALL_COMMAND } from \"@/lib/release\";\nimport \"../landing/landing.css\";\n\n// Public, self-contained docs page (rendered bare in public mode — no app chrome). Mirrors the\n// landing's design system (glass / dark / #ff7a45) via landing.css. Two columns on desktop: a\n// sticky scroll-spy TOC + a prose column; single column on mobile.\n\nconst SECTIONS = [\n { id: \"overview\", title: \"What is Beacon\" },\n { id: \"install\", title: \"Install\" },\n { id: \"quickstart\", title: \"Quickstart\" },\n { id: \"loop\", title: \"The planning loop\" },\n { id: \"canvases\", title: \"The canvases\" },\n { id: \"cli\", title: \"CLI reference\" },\n { id: \"integration\", title: \"Claude Code integration\" },\n { id: \"config\", title: \"Configuration\" },\n { id: \"troubleshooting\", title: \"Troubleshooting\" },\n];\n\nconst CLI: { cmd: string; what: string }[] = [\n { cmd: \"beacon\", what: \"Register the current repo, ensure the shared server is running, and open the panel on this repo. The everyday command.\" },\n { cmd: \"beacon doctor\", what: \"Audit what's wired — the global Claude Code hooks + skills, this repo's .mcp.json, and the running daemon.\" },\n { cmd: \"beacon stop\", what: \"Stop the shared background server. It restarts the next time you run beacon.\" },\n { cmd: \"beacon setup\", what: \"(Re)install Beacon's per-repo helpers — the skills and .mcp.json — in the current repo without opening the panel.\" },\n { cmd: \"beacon uninstall\", what: \"Reverse every Beacon artifact: the global ~/.claude wiring and the per-repo files.\" },\n { cmd: \"beacon mcp\", what: \"The stdio MCP server Claude Code spawns automatically. You never run this by hand.\" },\n];\n\nconst SKILLS: { name: string; when: string; what: string }[] = [\n { name: \"/beacon-init\", when: \"First time you point Beacon at a repo.\", what: \"The agent reads the codebase and fills Beacon's map — the main components, the rough roadmap themes, the database schema, and the endpoints. Run it once per repo to bootstrap the picture.\" },\n { name: \"/beacon-refresh\", when: \"Every few weeks, or after a big set of changes.\", what: \"The agent re-surveys the repo and updates what /beacon-init produced — adds new components, drops removed ones, picks up new tables and routes. Anything you added by hand on the canvas survives.\" },\n { name: \"/beacon-plan\", when: \"Whenever you want to review an approach on the canvas.\", what: \"Present the current plan or approach on Beacon's /plan page for annotation instead of asking for approval as a wall of text.\" },\n];\n\nconst MCP_TOOLS: { name: string; what: string }[] = [\n { name: \"beacon_context_for_feature\", what: \"Before touching code, the agent pulls the files attached to a feature plus their imports, the endpoints in that domain, the tables those endpoints touch, and the surrounding components — one round-trip instead of a blind Glob/Grep scan.\" },\n { name: \"beacon_blast_radius\", what: \"Mid-feature, the agent runs this on a file it's about to edit to see what imports it and what it imports — so it can judge whether a change is safe.\" },\n { name: \"beacon_propose_plan\", what: \"When the agent has a feature plan (tables + relations + endpoints), this opens it on /plan and BLOCKS the session until you Approve, Discard, or Submit feedback.\" },\n { name: \"beacon_describe_feature\", what: \"When a feature is done, the agent records a short markdown summary and the files it touched, keeping the next session's context accurate.\" },\n { name: \"beacon_map\", what: \"A quick list of features already on the roadmap. The agent calls it near the start of work to avoid duplicating what's planned.\" },\n { name: \"beacon_entities\", what: \"A raw readout of everything mapped — features, architecture, tables, endpoints — when the agent just needs the planning data.\" },\n];\n\nconst HOOKS: { trigger: string; what: string }[] = [\n { trigger: \"Plan mode (ExitPlanMode)\", what: \"When the agent shows you a plan, Beacon intercepts it and renders the markdown on /plan with a native annotation panel. Select text and type → it becomes a comment. Approve / Discard / Submit feedback flows back to the session as the next instruction.\" },\n { trigger: \"File edits (PostToolUse)\", what: \"Every Edit/Write the agent runs is reported to Beacon and the file is attached to whichever feature the session is working on. The /map view fills in with the real files behind each feature, without you tagging anything.\" },\n { trigger: \"Code-graph watcher\", what: \"While the panel is open, a background watcher rebuilds the Files view as you save code — the maps stay current with the repo on their own.\" },\n];\n\nconst CONFIG: { key: string; what: string }[] = [\n { key: \"BEACON_HOME\", what: \"Where per-workspace data lives — the SQLite databases and the server record. Defaults to ~/.beacon.\" },\n { key: \"PORT\", what: \"Port for the shared local server. Defaults to 4319.\" },\n { key: \"Settings → intel\", what: \"In the panel, the Settings page drives the code-intelligence model/provider and your editor, and triggers a code-map sync.\" },\n];\n\nfunction Copy({ text, label = \"Copy\" }: { text: string; label?: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <button\n onClick={() => {\n navigator.clipboard?.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }}\n className=\"glass-soft w-hover grid h-8 w-8 shrink-0 place-items-center rounded-md\"\n aria-label={label}\n >\n {copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#ff7a45\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n}\n\nfunction Cmd({ children, copy }: { children: string; copy?: boolean }) {\n return (\n <div className=\"glass-soft flex items-center gap-3 rounded-lg px-4 py-2.5\">\n <span className=\"w-signal select-none\">$</span>\n <code className=\"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.85rem] text-foreground\">\n {children}\n </code>\n {copy && <Copy text={children} />}\n </div>\n );\n}\n\nfunction Heading({ id, eyebrow, children }: { id: string; eyebrow: string; children: React.ReactNode }) {\n return (\n <div className=\"mb-5 scroll-mt-28\" id={id}>\n <p className=\"w-mono w-eyebrow w-signal mb-2\">{eyebrow}</p>\n <h2 className=\"text-[1.6rem] font-semibold tracking-tight\">{children}</h2>\n </div>\n );\n}\n\nexport function Docs() {\n const [active, setActive] = useState(SECTIONS[0].id);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const io = new IntersectionObserver(\n (entries) => {\n const visible = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);\n if (visible[0]) setActive(visible[0].target.id);\n },\n { rootMargin: \"-20% 0px -70% 0px\", threshold: 0 },\n );\n SECTIONS.forEach((s) => {\n const el = document.getElementById(s.id);\n if (el) io.observe(el);\n });\n return () => io.disconnect();\n }, []);\n\n return (\n <div className=\"welcome\" ref={rootRef}>\n <div className=\"welcome-bg\" aria-hidden />\n\n {/* ===== nav ===== */}\n <header className=\"fixed inset-x-0 top-0 z-50\">\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3\" style={{ animationDelay: \".05s\" }}>\n <Link href=\"/\" className=\"flex items-center gap-2.5\">\n <BeaconMark size={20} className=\"text-foreground\" />\n <span className=\"font-semibold tracking-tight\">Beacon</span>\n <span className=\"w-mono w-eyebrow w-muted ml-1 hidden sm:inline\">docs</span>\n </Link>\n <nav className=\"flex items-center gap-6 text-sm w-muted\">\n <Link href=\"/\" className=\"transition-colors hover:text-foreground\">Home</Link>\n <a href=\"#install\" className=\"transition-colors hover:text-foreground\">Install</a>\n </nav>\n </div>\n </div>\n </header>\n\n {/* ===== body ===== */}\n <div className=\"mx-auto max-w-6xl px-6 pb-24 pt-32\">\n <div className=\"lg:grid lg:grid-cols-[15rem_1fr] lg:gap-14\">\n {/* TOC */}\n <aside className=\"hidden lg:block\">\n <nav className=\"sticky top-28\">\n <p className=\"w-mono w-eyebrow w-muted mb-4\">On this page</p>\n <ul className=\"space-y-1.5 text-sm\">\n {SECTIONS.map((s) => (\n <li key={s.id}>\n <a\n href={`#${s.id}`}\n className={`block border-l-2 py-1 pl-3 transition-colors ${\n active === s.id\n ? \"w-signal border-[#ff7a45]\"\n : \"w-muted border-transparent hover:text-foreground\"\n }`}\n >\n {s.title}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </aside>\n\n {/* content */}\n <main className=\"min-w-0 max-w-2xl\">\n {/* overview */}\n <section className=\"w-load\">\n <Heading id=\"overview\" eyebrow=\"Overview\">What is Beacon</Heading>\n <p className=\"w-muted leading-relaxed\">\n Beacon is the <span className=\"text-foreground\">visual planning surface for the coding agent in your terminal</span>.\n That session is the brain; Beacon is its eyes and hands. The agent proposes a feature plan — roadmap features,\n database schema, and endpoints — you review it on a canvas instead of a wall of text, give scoped feedback, and\n approve or discard with a click. The verdict flows straight back to your session.\n </p>\n <p className=\"w-muted mt-4 leading-relaxed\">\n It runs entirely on your machine — <span className=\"text-foreground\">local, no account, no API key</span>. One shared\n server quietly serves every repo you open; each keeps its own data under <span className=\"w-mono text-foreground\">~/.beacon</span>.\n </p>\n </section>\n\n {/* install */}\n <section className=\"mt-16\">\n <Heading id=\"install\" eyebrow=\"Get started\">Install</Heading>\n <p className=\"w-muted mb-4 leading-relaxed\">\n One command. It installs <span className=\"text-foreground\">Bun</span> if you don't have it, then puts the{\" \"}\n <span className=\"w-mono text-foreground\">beacon</span> CLI on your PATH. Re-run it any time to update.\n </p>\n <Cmd copy>{INSTALL_COMMAND}</Cmd>\n <p className=\"w-muted mt-4 leading-relaxed\">Then, inside any repository:</p>\n <div className=\"mt-3\"><Cmd copy>beacon</Cmd></div>\n </section>\n\n {/* quickstart */}\n <section className=\"mt-16\">\n <Heading id=\"quickstart\" eyebrow=\"Get started\">Quickstart</Heading>\n <ol className=\"space-y-5\">\n {[\n <>Install with the command above, then run <span className=\"w-mono text-foreground\">beacon</span> inside a repo. It registers the repo, starts the shared server, and opens the panel in your browser.</>,\n <>In your Claude Code session, run <span className=\"w-mono text-foreground\">/beacon-init</span>. The agent reads the repo and draws its architecture, schema, and roadmap onto the canvas.</>,\n <>Ask the agent to plan a feature. It calls <span className=\"w-mono text-foreground\">beacon_propose_plan</span> and the plan renders live on <span className=\"text-foreground\">/plan</span>.</>,\n <>Review it — annotate inline, edit the boards — then <span className=\"text-foreground\">Approve</span>, <span className=\"text-foreground\">Submit feedback</span>, or <span className=\"text-foreground\">Discard</span>. Your verdict returns to the session.</>,\n ].map((body, i) => (\n <li key={i} className=\"relative pl-11\">\n <span className=\"w-mono glass absolute left-0 top-0 grid h-7 w-7 place-items-center rounded-md text-[0.72rem] font-semibold text-foreground\">{i + 1}</span>\n <p className=\"w-muted leading-relaxed\">{body}</p>\n </li>\n ))}\n </ol>\n </section>\n\n {/* loop */}\n <section className=\"mt-16\">\n <Heading id=\"loop\" eyebrow=\"Concepts\">The planning loop</Heading>\n <p className=\"w-muted leading-relaxed\">\n The loop is the whole point. It closes in five steps:\n </p>\n <ol className=\"mt-4 space-y-3\">\n {[\n <><span className=\"text-foreground\">Propose.</span> The agent calls <span className=\"w-mono text-foreground\">beacon_propose_plan</span> (or you present a plan in plan mode). The tool <span className=\"text-foreground\">blocks</span> — the session waits for your verdict.</>,\n <><span className=\"text-foreground\">Review.</span> The plan renders on <span className=\"text-foreground\">/plan</span>: a native annotation panel on the left, the roadmap and database boards on the right. Select text to comment; edit the boards directly.</>,\n <><span className=\"text-foreground\">Decide.</span> Approve, Discard, or Submit feedback. Feedback bundles your inline notes plus any board edits.</>,\n <><span className=\"text-foreground\">Return.</span> The verdict flows back to the terminal. On feedback, the agent revises and re-proposes — the loop continues.</>,\n <><span className=\"text-foreground\">Record.</span> On approval the schema and roadmap drafts persist, and when the work is done the agent calls <span className=\"w-mono text-foreground\">beacon_describe_feature</span> so the next session has accurate context.</>,\n ].map((body, i) => (\n <li key={i} className=\"glass w-hover rounded-lg p-4\">\n <p className=\"w-muted text-[0.95rem] leading-relaxed\">{body}</p>\n </li>\n ))}\n </ol>\n </section>\n\n {/* canvases */}\n <section className=\"mt-16\">\n <Heading id=\"canvases\" eyebrow=\"Concepts\">The canvases</Heading>\n <div className=\"space-y-4\">\n {[\n { path: \"/map\", what: \"The roadmap: feature cards, their sub-tasks, and dependency links — plus a separate architecture view of the real components. Files the agent edits attach themselves here.\" },\n { path: \"/db\", what: \"The database design board: tables and columns, endpoints, and the endpoint→table links. Proposed schema lands as a distinct draft layer you can approve or discard.\" },\n { path: \"/plan\", what: \"The split-screen review page: annotations on the left, the roadmap + database boards tabbed on the right, plus a history of every plan and its verdict.\" },\n ].map((c) => (\n <div key={c.path} className=\"glass w-hover rounded-lg p-5\">\n <p className=\"w-mono text-foreground mb-1\">{c.path}</p>\n <p className=\"w-muted text-[0.95rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* cli */}\n <section className=\"mt-16\">\n <Heading id=\"cli\" eyebrow=\"Reference\">CLI reference</Heading>\n <div className=\"space-y-3\">\n {CLI.map((c) => (\n <div key={c.cmd} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\"><span className=\"w-signal select-none\">$ </span>{c.cmd}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* integration */}\n <section className=\"mt-16\">\n <Heading id=\"integration\" eyebrow=\"Reference\">Claude Code integration</Heading>\n\n <h3 className=\"mb-1 mt-2 font-semibold text-foreground\">Skills — you type these</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">Slash commands that tell the agent to do something Beacon-shaped.</p>\n <div className=\"space-y-3\">\n {SKILLS.map((s) => (\n <div key={s.name} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{s.name}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\"><span className=\"text-foreground\">When:</span> {s.when} {s.what}</p>\n </div>\n ))}\n </div>\n\n <h3 className=\"mb-1 mt-8 font-semibold text-foreground\">MCP tools — the agent calls these</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">You don't run these; the agent reaches for them when they fit. Knowing they exist makes its moves legible.</p>\n <div className=\"space-y-3\">\n {MCP_TOOLS.map((t) => (\n <div key={t.name} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{t.name}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{t.what}</p>\n </div>\n ))}\n </div>\n\n <h3 className=\"mb-1 mt-8 font-semibold text-foreground\">Hooks — these run on their own</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">Wired into Claude Code globally; they react to what the session is already doing.</p>\n <div className=\"space-y-3\">\n {HOOKS.map((h) => (\n <div key={h.trigger} className=\"glass rounded-lg p-4\">\n <p className=\"font-medium text-foreground text-[0.92rem]\">{h.trigger}</p>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{h.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* config */}\n <section className=\"mt-16\">\n <Heading id=\"config\" eyebrow=\"Reference\">Configuration</Heading>\n <div className=\"space-y-3\">\n {CONFIG.map((c) => (\n <div key={c.key} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{c.key}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* troubleshooting */}\n <section className=\"mt-16\">\n <Heading id=\"troubleshooting\" eyebrow=\"Help\">Troubleshooting</Heading>\n <p className=\"w-muted mb-4 leading-relaxed\">\n When something looks off, start here:\n </p>\n <div className=\"mb-4\"><Cmd copy>beacon doctor</Cmd></div>\n <div className=\"space-y-3\">\n {[\n { q: \"The panel won't open\", a: <>Make sure the server is up — run <span className=\"w-mono text-foreground\">beacon</span> again, or <span className=\"w-mono text-foreground\">beacon stop</span> then <span className=\"w-mono text-foreground\">beacon</span> to restart it.</> },\n { q: \"The @beacon tools or skills are missing in Claude Code\", a: <>Run <span className=\"w-mono text-foreground\">beacon setup</span> in the repo, then restart your Claude Code session so it re-reads the MCP registration.</> },\n { q: \"How do I update?\", a: <>Re-run the install command — it fetches the latest and relinks. Nothing else to do.</> },\n ].map((t) => (\n <div key={t.q} className=\"glass rounded-lg p-4\">\n <p className=\"font-medium text-foreground text-[0.92rem]\">{t.q}</p>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{t.a}</p>\n </div>\n ))}\n </div>\n </section>\n </main>\n </div>\n </div>\n\n {/* ===== footer ===== */}\n <footer className=\"px-6 pb-12 pt-8\">\n <div className=\"mx-auto max-w-6xl\">\n <div className=\"w-accent-line mb-8 h-px w-full opacity-60\" />\n <div className=\"flex flex-col items-center justify-between gap-5 md:flex-row\">\n <div className=\"flex items-center gap-2.5\">\n <BeaconMark size={26} className=\"text-foreground\" />\n <div>\n <p className=\"font-semibold leading-tight\">Beacon</p>\n <p className=\"w-mono w-muted text-[0.72rem]\">the visual planning surface for your terminal</p>\n </div>\n </div>\n <nav className=\"flex items-center gap-6 text-sm w-muted\">\n <Link href=\"/\" className=\"transition-colors hover:text-foreground\">Home</Link>\n <a href=\"#overview\" className=\"transition-colors hover:text-foreground\">Docs</a>\n </nav>\n <p className=\"w-mono w-muted text-[0.72rem]\">\n Created by{\" \"}\n <a\n href=\"https://www.instagram.com/wenzorithelly/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\" />\n </svg>\n Wenzo\n </a>\n <span className=\"mx-2 opacity-40\">·</span>© 2026 Beacon\n </p>\n </div>\n </div>\n </footer>\n </div>\n );\n}\n"],"names":["SECTIONS","id","title","CLI","cmd","what","SKILLS","name","when","MCP_TOOLS","HOOKS","trigger","CONFIG","key","Copy","text","label","copied","setCopied","onClick","navigator","clipboard","writeText","setTimeout","className","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","x","y","rx","Cmd","children","copy","Heading","eyebrow","Docs","active","setActive","rootRef","io","IntersectionObserver","entries","visible","filter","e","isIntersecting","sort","a","b","boundingClientRect","top","target","rootMargin","threshold","forEach","s","el","document","getElementById","observe","disconnect","ref","style","animationDelay","href","size","map","body","i","path","c","t","h","q","rel","ry","x1","y1","x2","y2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../components/docs/docs.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport Link from \"next/link\";\nimport { BeaconMark } from \"@/components/beacon-mark\";\nimport { INSTALL_COMMAND } from \"@/lib/release\";\nimport \"../landing/landing.css\";\n\n// Public, self-contained docs page (rendered bare in public mode — no app chrome). Mirrors the\n// landing's design system (glass / dark / #ff7a45) via landing.css. Two columns on desktop: a\n// sticky scroll-spy TOC + a prose column; single column on mobile.\n\nconst SECTIONS = [\n { id: \"overview\", title: \"What is Beacon\" },\n { id: \"install\", title: \"Install\" },\n { id: \"quickstart\", title: \"Quickstart\" },\n { id: \"loop\", title: \"The planning loop\" },\n { id: \"canvases\", title: \"The canvases\" },\n { id: \"cli\", title: \"CLI reference\" },\n { id: \"integration\", title: \"Claude Code integration\" },\n { id: \"config\", title: \"Configuration\" },\n { id: \"troubleshooting\", title: \"Troubleshooting\" },\n];\n\nconst CLI: { cmd: string; what: string }[] = [\n { cmd: \"beacon\", what: \"Register the current repo, ensure the shared server is running, and open the panel on this repo. The everyday command.\" },\n { cmd: \"beacon doctor\", what: \"Audit what's wired — the global Claude Code hooks + skills, this repo's .mcp.json, and the running daemon.\" },\n { cmd: \"beacon stop\", what: \"Stop the shared background server. It restarts the next time you run beacon.\" },\n { cmd: \"beacon setup\", what: \"(Re)install Beacon's per-repo helpers — the skills and .mcp.json — in the current repo without opening the panel.\" },\n { cmd: \"beacon uninstall\", what: \"Reverse every Beacon artifact: the global ~/.claude wiring and the per-repo files.\" },\n { cmd: \"beacon mcp\", what: \"The stdio MCP server Claude Code spawns automatically. You never run this by hand.\" },\n];\n\nconst SKILLS: { name: string; when: string; what: string }[] = [\n { name: \"/beacon-init\", when: \"First time you point Beacon at a repo.\", what: \"The agent reads the codebase and fills Beacon's map — the main components, the rough roadmap themes, the database schema, and the endpoints. Run it once per repo to bootstrap the picture.\" },\n { name: \"/beacon-refresh\", when: \"Every few weeks, or after a big set of changes.\", what: \"The agent re-surveys the repo and updates what /beacon-init produced — adds new components, drops removed ones, picks up new tables and routes. Anything you added by hand on the canvas survives.\" },\n { name: \"/beacon-plan\", when: \"Whenever you want to review an approach on the canvas.\", what: \"Present the current plan or approach on Beacon's /plan page for annotation instead of asking for approval as a wall of text.\" },\n];\n\nconst MCP_TOOLS: { name: string; what: string }[] = [\n { name: \"beacon_context_for_feature\", what: \"Before touching code, the agent pulls the files attached to a feature plus their imports, the endpoints in that domain, the tables those endpoints touch, and the surrounding components — one round-trip instead of a blind Glob/Grep scan.\" },\n { name: \"beacon_blast_radius\", what: \"Mid-feature, the agent runs this on a file it's about to edit to see what imports it and what it imports — so it can judge whether a change is safe.\" },\n { name: \"beacon_propose_plan\", what: \"When the agent has a feature plan (tables + relations + endpoints), this opens it on /plan and BLOCKS the session until you Approve, Discard, or Submit feedback.\" },\n { name: \"beacon_describe_feature\", what: \"When a feature is done, the agent records a short markdown summary and the files it touched, keeping the next session's context accurate.\" },\n { name: \"beacon_map\", what: \"A quick list of features already on the roadmap. The agent calls it near the start of work to avoid duplicating what's planned.\" },\n { name: \"beacon_entities\", what: \"A raw readout of everything mapped — features, architecture, tables, endpoints — when the agent just needs the planning data.\" },\n];\n\nconst HOOKS: { trigger: string; what: string }[] = [\n { trigger: \"Plan mode (ExitPlanMode)\", what: \"When the agent shows you a plan, Beacon intercepts it and renders the markdown on /plan with a native annotation panel. Select text and type → it becomes a comment. Approve / Discard / Submit feedback flows back to the session as the next instruction.\" },\n { trigger: \"File edits (PostToolUse)\", what: \"Every Edit/Write the agent runs is reported to Beacon and the file is attached to whichever feature the session is working on. The /map view fills in with the real files behind each feature, without you tagging anything.\" },\n { trigger: \"Code-graph watcher\", what: \"While the panel is open, a background watcher rebuilds the Files view as you save code — the maps stay current with the repo on their own.\" },\n];\n\nconst CONFIG: { key: string; what: string }[] = [\n { key: \"BEACON_HOME\", what: \"Where per-workspace data lives — the SQLite databases and the server record. Defaults to ~/.beacon.\" },\n { key: \"PORT\", what: \"Port for the shared local server. Defaults to 4319.\" },\n { key: \"Settings → intel\", what: \"In the panel, the Settings page drives the code-intelligence model/provider and your editor, and triggers a code-map sync.\" },\n];\n\nfunction Copy({ text, label = \"Copy\" }: { text: string; label?: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <button\n onClick={() => {\n navigator.clipboard?.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }}\n className=\"glass-soft w-hover grid h-8 w-8 shrink-0 place-items-center rounded-md\"\n aria-label={label}\n >\n {copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#ff7a45\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n}\n\nfunction Cmd({ children, copy }: { children: string; copy?: boolean }) {\n return (\n <div className=\"glass-soft flex items-center gap-3 rounded-lg px-4 py-2.5\">\n <span className=\"w-signal select-none\">$</span>\n <code className=\"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.85rem] text-foreground\">\n {children}\n </code>\n {copy && <Copy text={children} />}\n </div>\n );\n}\n\nfunction Heading({ id, eyebrow, children }: { id: string; eyebrow: string; children: React.ReactNode }) {\n return (\n <div className=\"mb-5 scroll-mt-28\" id={id}>\n <p className=\"w-mono w-eyebrow w-signal mb-2\">{eyebrow}</p>\n <h2 className=\"text-[1.6rem] font-semibold tracking-tight\">{children}</h2>\n </div>\n );\n}\n\nexport function Docs() {\n const [active, setActive] = useState(SECTIONS[0].id);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const io = new IntersectionObserver(\n (entries) => {\n const visible = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);\n if (visible[0]) setActive(visible[0].target.id);\n },\n { rootMargin: \"-20% 0px -70% 0px\", threshold: 0 },\n );\n SECTIONS.forEach((s) => {\n const el = document.getElementById(s.id);\n if (el) io.observe(el);\n });\n return () => io.disconnect();\n }, []);\n\n return (\n <div className=\"welcome\" ref={rootRef}>\n <div className=\"welcome-bg\" aria-hidden />\n\n {/* ===== nav ===== */}\n <header className=\"fixed inset-x-0 top-0 z-50\">\n <div className=\"mx-auto max-w-6xl px-6\">\n <div className=\"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3\" style={{ animationDelay: \".05s\" }}>\n <Link href=\"/\" className=\"flex items-center gap-2.5\">\n <BeaconMark size={20} className=\"text-foreground\" />\n <span className=\"font-semibold tracking-tight\">Beacon</span>\n <span className=\"w-mono w-eyebrow w-muted ml-1 hidden sm:inline\">docs</span>\n </Link>\n <nav className=\"flex items-center gap-6 text-sm w-muted\">\n <Link href=\"/\" className=\"transition-colors hover:text-foreground\">Home</Link>\n <a href=\"#install\" className=\"transition-colors hover:text-foreground\">Install</a>\n </nav>\n </div>\n </div>\n </header>\n\n {/* ===== body ===== */}\n <div className=\"mx-auto max-w-6xl px-6 pb-24 pt-20\">\n <div className=\"lg:grid lg:grid-cols-[15rem_1fr] lg:gap-14\">\n {/* TOC */}\n <aside className=\"hidden lg:block\">\n <nav className=\"sticky top-28\">\n <p className=\"w-mono w-eyebrow w-muted mb-4\">On this page</p>\n <ul className=\"space-y-1.5 text-sm\">\n {SECTIONS.map((s) => (\n <li key={s.id}>\n <a\n href={`#${s.id}`}\n className={`block border-l-2 py-1 pl-3 transition-colors ${\n active === s.id\n ? \"w-signal border-[#ff7a45]\"\n : \"w-muted border-transparent hover:text-foreground\"\n }`}\n >\n {s.title}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </aside>\n\n {/* content */}\n <main className=\"min-w-0 max-w-2xl\">\n {/* overview */}\n <section className=\"w-load\">\n <Heading id=\"overview\" eyebrow=\"Overview\">What is Beacon</Heading>\n <p className=\"w-muted leading-relaxed\">\n Beacon is the <span className=\"text-foreground\">visual planning surface for the coding agent in your terminal</span>.\n That session is the brain; Beacon is its eyes and hands. The agent proposes a feature plan — roadmap features,\n database schema, and endpoints — you review it on a canvas instead of a wall of text, give scoped feedback, and\n approve or discard with a click. The verdict flows straight back to your session.\n </p>\n <p className=\"w-muted mt-4 leading-relaxed\">\n It runs entirely on your machine — <span className=\"text-foreground\">local, no account, no API key</span>. One shared\n server quietly serves every repo you open; each keeps its own data under <span className=\"w-mono text-foreground\">~/.beacon</span>.\n </p>\n </section>\n\n {/* install */}\n <section className=\"mt-16\">\n <Heading id=\"install\" eyebrow=\"Get started\">Install</Heading>\n <p className=\"w-muted mb-4 leading-relaxed\">\n One command. It installs <span className=\"text-foreground\">Bun</span> if you don't have it, then puts the{\" \"}\n <span className=\"w-mono text-foreground\">beacon</span> CLI on your PATH. Re-run it any time to update.\n </p>\n <Cmd copy>{INSTALL_COMMAND}</Cmd>\n <p className=\"w-muted mt-4 leading-relaxed\">Then, inside any repository:</p>\n <div className=\"mt-3\"><Cmd copy>beacon</Cmd></div>\n </section>\n\n {/* quickstart */}\n <section className=\"mt-16\">\n <Heading id=\"quickstart\" eyebrow=\"Get started\">Quickstart</Heading>\n <ol className=\"space-y-5\">\n {[\n <>Install with the command above, then run <span className=\"w-mono text-foreground\">beacon</span> inside a repo. It registers the repo, starts the shared server, and opens the panel in your browser.</>,\n <>In your Claude Code session, run <span className=\"w-mono text-foreground\">/beacon-init</span>. The agent reads the repo and draws its architecture, schema, and roadmap onto the canvas.</>,\n <>Ask the agent to plan a feature. It calls <span className=\"w-mono text-foreground\">beacon_propose_plan</span> and the plan renders live on <span className=\"text-foreground\">/plan</span>.</>,\n <>Review it — annotate inline, edit the boards — then <span className=\"text-foreground\">Approve</span>, <span className=\"text-foreground\">Submit feedback</span>, or <span className=\"text-foreground\">Discard</span>. Your verdict returns to the session.</>,\n ].map((body, i) => (\n <li key={i} className=\"relative pl-11\">\n <span className=\"w-mono glass absolute left-0 top-0 grid h-7 w-7 place-items-center rounded-md text-[0.72rem] font-semibold text-foreground\">{i + 1}</span>\n <p className=\"w-muted leading-relaxed\">{body}</p>\n </li>\n ))}\n </ol>\n </section>\n\n {/* loop */}\n <section className=\"mt-16\">\n <Heading id=\"loop\" eyebrow=\"Concepts\">The planning loop</Heading>\n <p className=\"w-muted leading-relaxed\">\n The loop is the whole point. It closes in five steps:\n </p>\n <ol className=\"mt-4 space-y-3\">\n {[\n <><span className=\"text-foreground\">Propose.</span> The agent calls <span className=\"w-mono text-foreground\">beacon_propose_plan</span> (or you present a plan in plan mode). The tool <span className=\"text-foreground\">blocks</span> — the session waits for your verdict.</>,\n <><span className=\"text-foreground\">Review.</span> The plan renders on <span className=\"text-foreground\">/plan</span>: a native annotation panel on the left, the roadmap and database boards on the right. Select text to comment; edit the boards directly.</>,\n <><span className=\"text-foreground\">Decide.</span> Approve, Discard, or Submit feedback. Feedback bundles your inline notes plus any board edits.</>,\n <><span className=\"text-foreground\">Return.</span> The verdict flows back to the terminal. On feedback, the agent revises and re-proposes — the loop continues.</>,\n <><span className=\"text-foreground\">Record.</span> On approval the schema and roadmap drafts persist, and when the work is done the agent calls <span className=\"w-mono text-foreground\">beacon_describe_feature</span> so the next session has accurate context.</>,\n ].map((body, i) => (\n <li key={i} className=\"glass w-hover rounded-lg p-4\">\n <p className=\"w-muted text-[0.95rem] leading-relaxed\">{body}</p>\n </li>\n ))}\n </ol>\n </section>\n\n {/* canvases */}\n <section className=\"mt-16\">\n <Heading id=\"canvases\" eyebrow=\"Concepts\">The canvases</Heading>\n <div className=\"space-y-4\">\n {[\n { path: \"/map\", what: \"The roadmap: feature cards, their sub-tasks, and dependency links — plus a separate architecture view of the real components. Files the agent edits attach themselves here.\" },\n { path: \"/db\", what: \"The database design board: tables and columns, endpoints, and the endpoint→table links. Proposed schema lands as a distinct draft layer you can approve or discard.\" },\n { path: \"/plan\", what: \"The split-screen review page: annotations on the left, the roadmap + database boards tabbed on the right, plus a history of every plan and its verdict.\" },\n ].map((c) => (\n <div key={c.path} className=\"glass w-hover rounded-lg p-5\">\n <p className=\"w-mono text-foreground mb-1\">{c.path}</p>\n <p className=\"w-muted text-[0.95rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* cli */}\n <section className=\"mt-16\">\n <Heading id=\"cli\" eyebrow=\"Reference\">CLI reference</Heading>\n <div className=\"space-y-3\">\n {CLI.map((c) => (\n <div key={c.cmd} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\"><span className=\"w-signal select-none\">$ </span>{c.cmd}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* integration */}\n <section className=\"mt-16\">\n <Heading id=\"integration\" eyebrow=\"Reference\">Claude Code integration</Heading>\n\n <h3 className=\"mb-1 mt-2 font-semibold text-foreground\">Skills — you type these</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">Slash commands that tell the agent to do something Beacon-shaped.</p>\n <div className=\"space-y-3\">\n {SKILLS.map((s) => (\n <div key={s.name} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{s.name}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\"><span className=\"text-foreground\">When:</span> {s.when} {s.what}</p>\n </div>\n ))}\n </div>\n\n <h3 className=\"mb-1 mt-8 font-semibold text-foreground\">MCP tools — the agent calls these</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">You don't run these; the agent reaches for them when they fit. Knowing they exist makes its moves legible.</p>\n <div className=\"space-y-3\">\n {MCP_TOOLS.map((t) => (\n <div key={t.name} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{t.name}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{t.what}</p>\n </div>\n ))}\n </div>\n\n <h3 className=\"mb-1 mt-8 font-semibold text-foreground\">Hooks — these run on their own</h3>\n <p className=\"w-muted mb-4 text-[0.92rem]\">Wired into Claude Code globally; they react to what the session is already doing.</p>\n <div className=\"space-y-3\">\n {HOOKS.map((h) => (\n <div key={h.trigger} className=\"glass rounded-lg p-4\">\n <p className=\"font-medium text-foreground text-[0.92rem]\">{h.trigger}</p>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{h.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* config */}\n <section className=\"mt-16\">\n <Heading id=\"config\" eyebrow=\"Reference\">Configuration</Heading>\n <div className=\"space-y-3\">\n {CONFIG.map((c) => (\n <div key={c.key} className=\"glass rounded-lg p-4\">\n <code className=\"w-mono text-foreground text-[0.9rem]\">{c.key}</code>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{c.what}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* troubleshooting */}\n <section className=\"mt-16\">\n <Heading id=\"troubleshooting\" eyebrow=\"Help\">Troubleshooting</Heading>\n <p className=\"w-muted mb-4 leading-relaxed\">\n When something looks off, start here:\n </p>\n <div className=\"mb-4\"><Cmd copy>beacon doctor</Cmd></div>\n <div className=\"space-y-3\">\n {[\n { q: \"The panel won't open\", a: <>Make sure the server is up — run <span className=\"w-mono text-foreground\">beacon</span> again, or <span className=\"w-mono text-foreground\">beacon stop</span> then <span className=\"w-mono text-foreground\">beacon</span> to restart it.</> },\n { q: \"The @beacon tools or skills are missing in Claude Code\", a: <>Run <span className=\"w-mono text-foreground\">beacon setup</span> in the repo, then restart your Claude Code session so it re-reads the MCP registration.</> },\n { q: \"How do I update?\", a: <>Re-run the install command — it fetches the latest and relinks. Nothing else to do.</> },\n ].map((t) => (\n <div key={t.q} className=\"glass rounded-lg p-4\">\n <p className=\"font-medium text-foreground text-[0.92rem]\">{t.q}</p>\n <p className=\"w-muted mt-1.5 text-[0.92rem] leading-relaxed\">{t.a}</p>\n </div>\n ))}\n </div>\n </section>\n </main>\n </div>\n </div>\n\n {/* ===== footer ===== */}\n <footer className=\"px-6 pb-12 pt-8\">\n <div className=\"mx-auto max-w-6xl\">\n <div className=\"w-accent-line mb-8 h-px w-full opacity-60\" />\n <div className=\"flex flex-col items-center justify-between gap-5 md:flex-row\">\n <div className=\"flex items-center gap-2.5\">\n <BeaconMark size={26} className=\"text-foreground\" />\n <div>\n <p className=\"font-semibold leading-tight\">Beacon</p>\n <p className=\"w-mono w-muted text-[0.72rem]\">the visual planning surface for your terminal</p>\n </div>\n </div>\n <nav className=\"flex items-center gap-6 text-sm w-muted\">\n <Link href=\"/\" className=\"transition-colors hover:text-foreground\">Home</Link>\n <a href=\"#overview\" className=\"transition-colors hover:text-foreground\">Docs</a>\n </nav>\n <p className=\"w-mono w-muted text-[0.72rem]\">\n Created by{\" \"}\n <a\n href=\"https://www.instagram.com/wenzorithelly/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\" />\n </svg>\n Wenzo\n </a>\n <span className=\"mx-2 opacity-40\">·</span>© 2026 Beacon\n </p>\n </div>\n </div>\n </footer>\n </div>\n );\n}\n"],"names":["SECTIONS","id","title","CLI","cmd","what","SKILLS","name","when","MCP_TOOLS","HOOKS","trigger","CONFIG","key","Copy","text","label","copied","setCopied","onClick","navigator","clipboard","writeText","setTimeout","className","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","x","y","rx","Cmd","children","copy","Heading","eyebrow","Docs","active","setActive","rootRef","io","IntersectionObserver","entries","visible","filter","e","isIntersecting","sort","a","b","boundingClientRect","top","target","rootMargin","threshold","forEach","s","el","document","getElementById","observe","disconnect","ref","style","animationDelay","href","size","map","body","i","path","c","t","h","q","rel","ry","x1","y1","x2","y2"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[56379,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(15290),e=a.i(83864);let f=a.i(10293).INSTALL_COMMAND,g=[{n:"01",title:"Install",body:"One binary. No account, nothing to configure.",cmd:(0,b.jsx)("span",{className:"text-foreground",children:f})},{n:"02",title:"Run it in your repo",body:"Registers the repo, starts one shared local server, and opens the panel in your browser.",cmd:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"w-signal",children:"$"})," ",(0,b.jsx)("span",{className:"text-foreground",children:"beacon"})]})},{n:"03",title:"Map your codebase",body:(0,b.jsxs)(b.Fragment,{children:["In your terminal session, run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"/beacon-init"}),". Beacon reads the repo and draws its architecture, schema, and roadmap."]}),cmd:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"/beacon-init"})," ",(0,b.jsx)("span",{className:"w-muted",children:"· beacon doctor"})]})},{n:"04",title:"Propose your first plan",body:(0,b.jsxs)(b.Fragment,{children:["Ask the agent to plan a feature. It calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," ","and the plan renders live on the ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"})," canvas — features, tables, and endpoints."]})},{n:"05",title:"Review & close the loop",body:(0,b.jsxs)(b.Fragment,{children:["Annotate inline, edit the boards, then ",(0,b.jsx)("span",{className:"text-foreground",children:"Approve"}),","," ",(0,b.jsx)("span",{className:"text-foreground",children:"Submit feedback"}),", or ",(0,b.jsx)("span",{className:"text-foreground",children:"Discard"}),". Your verdict flows straight back to your terminal session."]})}],h=[{label:"Reuse first",body:"Beacon blocks duplicate features — check the map before you create."},{label:"Design data first",body:(0,b.jsxs)(b.Fragment,{children:["Plan tables and endpoints before code; review the schema as a draft on"," ",(0,b.jsx)("span",{className:"text-foreground",children:"/db"}),"."]})},{label:"Close every loop",body:"Register finished work so the map and context stay accurate next session."}],i={boxShadow:"0 0 0 1px var(--border), 0 0 24px -9px rgba(255,122,69,0.75)"};a.s(["Landing",0,function(){let a=(0,c.useRef)(null),[j,k]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let b=new IntersectionObserver(a=>{a.forEach(a=>{a.isIntersecting&&(a.target.classList.add("in"),b.unobserve(a.target))})},{threshold:.12});return a.current?.querySelectorAll(".w-reveal").forEach(a=>b.observe(a)),()=>b.disconnect()},[]),(0,b.jsxs)("div",{className:"welcome",ref:a,children:[(0,b.jsx)("div",{className:"welcome-bg","aria-hidden":!0}),(0,b.jsx)("header",{className:"fixed inset-x-0 top-0 z-50",children:(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6",children:(0,b.jsxs)("div",{className:"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3",style:{animationDelay:".05s"},children:[(0,b.jsxs)(d.default,{href:"#top",className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:20,className:"text-foreground"}),(0,b.jsx)("span",{className:"font-semibold tracking-tight",children:"Beacon"})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)("a",{href:"#start",className:"transition-colors hover:text-foreground",children:"How it works"}),(0,b.jsx)("a",{href:"/docs",className:"transition-colors hover:text-foreground",children:"Docs"})]})]})})}),(0,b.jsx)("span",{id:"top"}),(0,b.jsxs)("section",{className:"flex min-h-screen flex-col items-center px-6 pb-12 pt-28 text-center",children:[(0,b.jsxs)("div",{className:"w-load glass-soft mb-6 flex items-center gap-2 rounded-full px-3.5 py-1.5",style:{animationDelay:".12s"},children:[(0,b.jsx)("span",{className:"w-live h-1.5 w-1.5 rounded-full",style:{background:"#ff7a45",boxShadow:"0 0 8px #ff7a45"}}),(0,b.jsx)("span",{className:"w-mono w-eyebrow w-muted",children:"Local · no account · no API key"})]}),(0,b.jsxs)("h1",{className:"w-load max-w-4xl font-semibold text-[clamp(2.25rem,5vw,3.6rem)]",style:{letterSpacing:"-0.025em",lineHeight:1.06,animationDelay:".18s"},children:["Plan features on a canvas,",(0,b.jsx)("br",{}),"not in a wall of text."]}),(0,b.jsx)("p",{className:"w-load w-muted mt-5 max-w-xl text-[1.02rem] leading-relaxed",style:{animationDelay:".26s"},children:"Beacon is the visual planning surface for the coding agent in your terminal. Your session proposes the plan — you review, annotate, and approve with a click."}),(0,b.jsxs)("div",{className:"w-load mt-8 w-full max-w-2xl",style:{animationDelay:".34s"},children:[(0,b.jsxs)("div",{className:"glass overflow-hidden rounded-lg text-left",style:{boxShadow:"0 24px 70px -22px rgba(0,0,0,.85), inset 0 1px 0 oklch(1 0 0 /.08), 0 18px 60px -30px rgba(255,122,69,.4)"},children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 border-b px-4 py-3",style:{borderColor:"var(--border)"},children:[(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"#ff7a45",boxShadow:"0 0 7px rgba(255,122,69,.7)"}}),(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"oklch(1 0 0 / .16)"}}),(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"oklch(1 0 0 / .16)"}}),(0,b.jsx)("span",{className:"w-mono ml-2 text-[0.72rem] w-muted",children:"install — bash"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-4 px-5 py-5",children:[(0,b.jsxs)("code",{className:"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.95rem]",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$"}),(0,b.jsx)("span",{className:"ml-2",children:f}),(0,b.jsx)("span",{className:"w-caret ml-1 inline-block h-4 w-2 align-middle",style:{background:"#ff7a45"}})]}),(0,b.jsx)("button",{onClick:function(){navigator.clipboard?.writeText(f),k(!0),setTimeout(()=>k(!1),1600)},className:"glass-soft w-hover grid h-10 w-10 shrink-0 place-items-center rounded-md","aria-label":"Copy install command",children:j?(0,b.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#ff7a45",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M20 6 9 17l-5-5"})}):(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),(0,b.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})]})]}),(0,b.jsxs)("p",{className:"w-mono w-muted mt-4 text-[0.8rem]",children:["then run ",(0,b.jsx)("span",{className:"text-foreground",children:"beacon"})," inside any repo"]})]}),(0,b.jsxs)("a",{href:"#start",className:"w-load mt-auto pt-16 flex flex-col items-center gap-2 w-muted transition-colors hover:text-foreground",style:{animationDelay:".6s"},children:[(0,b.jsx)("span",{className:"w-mono w-eyebrow",children:"How it works"}),(0,b.jsx)("svg",{className:"w-cue",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"m6 9 6 6 6-6"})})]})]}),(0,b.jsxs)("section",{id:"start",className:"px-6 py-28",children:[(0,b.jsxs)("div",{className:"mx-auto max-w-2xl",children:[(0,b.jsxs)("div",{className:"w-reveal mb-16 text-center",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-4",children:"Get the best out of Beacon"}),(0,b.jsx)("h2",{className:"text-[clamp(1.9rem,4vw,2.75rem)] font-semibold tracking-tight",children:"From install to your first approved plan"}),(0,b.jsx)("div",{className:"w-accent-line mx-auto mt-6 h-px w-40"})]}),(0,b.jsxs)("ol",{className:"relative",children:[(0,b.jsx)("span",{className:"w-beam absolute bottom-7 left-[1.45rem] top-5 w-px","aria-hidden":!0}),g.map((a,c)=>(0,b.jsxs)("li",{className:`w-reveal relative pl-[4.75rem] ${c<g.length-1?"pb-6":""}`,children:[(0,b.jsx)("span",{className:"w-mono glass absolute left-0 top-0 grid h-[2.9rem] w-[2.9rem] place-items-center rounded-lg text-[0.82rem] font-semibold text-foreground",style:i,children:a.n}),(0,b.jsxs)("div",{className:"glass w-hover rounded-lg p-5",children:[(0,b.jsx)("h3",{className:"mb-1.5 font-semibold",children:a.title}),(0,b.jsx)("p",{className:`w-muted text-[0.92rem] leading-relaxed ${a.cmd?"mb-3":""}`,children:a.body}),a.cmd&&(0,b.jsx)("code",{className:"w-mono glass-soft inline-block rounded-md px-3 py-1.5 text-[0.78rem]",children:a.cmd})]})]},a.n))]})]}),(0,b.jsx)("div",{className:"mx-auto mt-28 grid max-w-5xl gap-5 md:grid-cols-3",children:h.map(a=>(0,b.jsxs)("div",{className:"w-reveal glass w-hover rounded-lg p-6",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-3",children:a.label}),(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a.body})]},a.label))})]}),(0,b.jsx)("footer",{className:"px-6 pb-12 pt-8",children:(0,b.jsxs)("div",{className:"mx-auto max-w-5xl",children:[(0,b.jsx)("div",{className:"w-accent-line mb-8 h-px w-full opacity-60"}),(0,b.jsxs)("div",{className:"flex flex-col items-center justify-between gap-5 md:flex-row",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:26,className:"text-foreground"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-semibold leading-tight",children:"Beacon"}),(0,b.jsx)("p",{className:"w-mono w-muted text-[0.72rem]",children:"the visual planning surface for your terminal"})]})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)("a",{href:"/docs",className:"transition-colors hover:text-foreground",children:"Docs"}),(0,b.jsx)("a",{href:"#",className:"transition-colors hover:text-foreground",children:"Changelog"})]}),(0,b.jsxs)("p",{className:"w-mono w-muted text-[0.72rem]",children:["Created by"," ",(0,b.jsxs)("a",{href:"https://www.instagram.com/wenzorithelly/",target:"_blank",rel:"noreferrer",className:"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[(0,b.jsx)("rect",{x:"2",y:"2",width:"20",height:"20",rx:"5",ry:"5"}),(0,b.jsx)("path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}),(0,b.jsx)("line",{x1:"17.5",y1:"6.5",x2:"17.51",y2:"6.5"})]}),"Wenzo"]}),(0,b.jsx)("span",{className:"mx-2 opacity-40",children:"·"}),"© 2026 Beacon"]})]})]})})]})}])}];
|
|
1
|
+
module.exports=[56379,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(15290),e=a.i(83864);let f=a.i(10293).INSTALL_COMMAND,g=[{n:"01",title:"Install",body:"One binary. No account, nothing to configure.",cmd:(0,b.jsx)("span",{className:"text-foreground",children:f})},{n:"02",title:"Run it in your repo",body:"Registers the repo, starts one shared local server, and opens the panel in your browser.",cmd:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"w-signal",children:"$"})," ",(0,b.jsx)("span",{className:"text-foreground",children:"beacon"})]})},{n:"03",title:"Map your codebase",body:(0,b.jsxs)(b.Fragment,{children:["In your terminal session, run ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"/beacon-init"}),". Beacon reads the repo and draws its architecture, schema, and roadmap."]}),cmd:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-foreground",children:"/beacon-init"})," ",(0,b.jsx)("span",{className:"w-muted",children:"· beacon doctor"})]})},{n:"04",title:"Propose your first plan",body:(0,b.jsxs)(b.Fragment,{children:["Ask the agent to plan a feature. It calls ",(0,b.jsx)("span",{className:"w-mono text-foreground",children:"beacon_propose_plan"})," ","and the plan renders live on the ",(0,b.jsx)("span",{className:"text-foreground",children:"/plan"})," canvas — features, tables, and endpoints."]})},{n:"05",title:"Review & close the loop",body:(0,b.jsxs)(b.Fragment,{children:["Annotate inline, edit the boards, then ",(0,b.jsx)("span",{className:"text-foreground",children:"Approve"}),","," ",(0,b.jsx)("span",{className:"text-foreground",children:"Submit feedback"}),", or ",(0,b.jsx)("span",{className:"text-foreground",children:"Discard"}),". Your verdict flows straight back to your terminal session."]})}],h=[{label:"Reuse first",body:"Beacon blocks duplicate features — check the map before you create."},{label:"Design data first",body:(0,b.jsxs)(b.Fragment,{children:["Plan tables and endpoints before code; review the schema as a draft on"," ",(0,b.jsx)("span",{className:"text-foreground",children:"/db"}),"."]})},{label:"Close every loop",body:"Register finished work so the map and context stay accurate next session."}],i={boxShadow:"0 0 0 1px var(--border), 0 0 24px -9px rgba(255,122,69,0.75)"};a.s(["Landing",0,function(){let a=(0,c.useRef)(null),[j,k]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let b=new IntersectionObserver(a=>{a.forEach(a=>{a.isIntersecting&&(a.target.classList.add("in"),b.unobserve(a.target))})},{threshold:.12});return a.current?.querySelectorAll(".w-reveal").forEach(a=>b.observe(a)),()=>b.disconnect()},[]),(0,b.jsxs)("div",{className:"welcome",ref:a,children:[(0,b.jsx)("div",{className:"welcome-bg","aria-hidden":!0}),(0,b.jsx)("header",{className:"fixed inset-x-0 top-0 z-50",children:(0,b.jsx)("div",{className:"mx-auto max-w-6xl px-6",children:(0,b.jsxs)("div",{className:"w-load mt-4 glass flex items-center justify-between rounded-full py-2.5 pl-5 pr-3",style:{animationDelay:".05s"},children:[(0,b.jsxs)(d.default,{href:"#top",className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:20,className:"text-foreground"}),(0,b.jsx)("span",{className:"font-semibold tracking-tight",children:"Beacon"})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)("a",{href:"#start",className:"transition-colors hover:text-foreground",children:"How it works"}),(0,b.jsx)("a",{href:"/docs",className:"transition-colors hover:text-foreground",children:"Docs"})]})]})})}),(0,b.jsx)("span",{id:"top"}),(0,b.jsxs)("section",{className:"flex min-h-screen flex-col items-center px-6 pb-12 pt-20 text-center",children:[(0,b.jsxs)("div",{className:"w-load glass-soft mb-6 flex items-center gap-2 rounded-full px-3.5 py-1.5",style:{animationDelay:".12s"},children:[(0,b.jsx)("span",{className:"w-live h-1.5 w-1.5 rounded-full",style:{background:"#ff7a45",boxShadow:"0 0 8px #ff7a45"}}),(0,b.jsx)("span",{className:"w-mono w-eyebrow w-muted",children:"Local · no account · no API key"})]}),(0,b.jsxs)("h1",{className:"w-load max-w-4xl font-semibold text-[clamp(2.25rem,5vw,3.6rem)]",style:{letterSpacing:"-0.025em",lineHeight:1.06,animationDelay:".18s"},children:["Plan features on a canvas,",(0,b.jsx)("br",{}),"not in a wall of text."]}),(0,b.jsx)("p",{className:"w-load w-muted mt-5 max-w-xl text-[1.02rem] leading-relaxed",style:{animationDelay:".26s"},children:"Beacon is the visual planning surface for the coding agent in your terminal. Your session proposes the plan — you review, annotate, and approve with a click."}),(0,b.jsxs)("div",{className:"w-load mt-8 w-full max-w-2xl",style:{animationDelay:".34s"},children:[(0,b.jsxs)("div",{className:"glass overflow-hidden rounded-lg text-left",style:{boxShadow:"0 24px 70px -22px rgba(0,0,0,.85), inset 0 1px 0 oklch(1 0 0 /.08), 0 18px 60px -30px rgba(255,122,69,.4)"},children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 border-b px-4 py-3",style:{borderColor:"var(--border)"},children:[(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"#ff7a45",boxShadow:"0 0 7px rgba(255,122,69,.7)"}}),(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"oklch(1 0 0 / .16)"}}),(0,b.jsx)("span",{className:"h-3 w-3 rounded-full",style:{background:"oklch(1 0 0 / .16)"}}),(0,b.jsx)("span",{className:"w-mono ml-2 text-[0.72rem] w-muted",children:"install — bash"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-4 px-5 py-5",children:[(0,b.jsxs)("code",{className:"w-mono w-scrollbar-none flex-1 overflow-x-auto whitespace-nowrap text-[0.95rem]",children:[(0,b.jsx)("span",{className:"w-signal select-none",children:"$"}),(0,b.jsx)("span",{className:"ml-2",children:f}),(0,b.jsx)("span",{className:"w-caret ml-1 inline-block h-4 w-2 align-middle",style:{background:"#ff7a45"}})]}),(0,b.jsx)("button",{onClick:function(){navigator.clipboard?.writeText(f),k(!0),setTimeout(()=>k(!1),1600)},className:"glass-soft w-hover grid h-10 w-10 shrink-0 place-items-center rounded-md","aria-label":"Copy install command",children:j?(0,b.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#ff7a45",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M20 6 9 17l-5-5"})}):(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),(0,b.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})]})]}),(0,b.jsxs)("p",{className:"w-mono w-muted mt-4 text-[0.8rem]",children:["then run ",(0,b.jsx)("span",{className:"text-foreground",children:"beacon"})," inside any repo"]})]}),(0,b.jsxs)("a",{href:"#start",className:"w-load mt-auto pt-16 flex flex-col items-center gap-2 w-muted transition-colors hover:text-foreground",style:{animationDelay:".6s"},children:[(0,b.jsx)("span",{className:"w-mono w-eyebrow",children:"How it works"}),(0,b.jsx)("svg",{className:"w-cue",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"m6 9 6 6 6-6"})})]})]}),(0,b.jsxs)("section",{id:"start",className:"px-6 py-28",children:[(0,b.jsxs)("div",{className:"mx-auto max-w-2xl",children:[(0,b.jsxs)("div",{className:"w-reveal mb-16 text-center",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-4",children:"Get the best out of Beacon"}),(0,b.jsx)("h2",{className:"text-[clamp(1.9rem,4vw,2.75rem)] font-semibold tracking-tight",children:"From install to your first approved plan"}),(0,b.jsx)("div",{className:"w-accent-line mx-auto mt-6 h-px w-40"})]}),(0,b.jsxs)("ol",{className:"relative",children:[(0,b.jsx)("span",{className:"w-beam absolute bottom-7 left-[1.45rem] top-5 w-px","aria-hidden":!0}),g.map((a,c)=>(0,b.jsxs)("li",{className:`w-reveal relative pl-[4.75rem] ${c<g.length-1?"pb-6":""}`,children:[(0,b.jsx)("span",{className:"w-mono glass absolute left-0 top-0 grid h-[2.9rem] w-[2.9rem] place-items-center rounded-lg text-[0.82rem] font-semibold text-foreground",style:i,children:a.n}),(0,b.jsxs)("div",{className:"glass w-hover rounded-lg p-5",children:[(0,b.jsx)("h3",{className:"mb-1.5 font-semibold",children:a.title}),(0,b.jsx)("p",{className:`w-muted text-[0.92rem] leading-relaxed ${a.cmd?"mb-3":""}`,children:a.body}),a.cmd&&(0,b.jsx)("code",{className:"w-mono glass-soft inline-block rounded-md px-3 py-1.5 text-[0.78rem]",children:a.cmd})]})]},a.n))]})]}),(0,b.jsx)("div",{className:"mx-auto mt-28 grid max-w-5xl gap-5 md:grid-cols-3",children:h.map(a=>(0,b.jsxs)("div",{className:"w-reveal glass w-hover rounded-lg p-6",children:[(0,b.jsx)("p",{className:"w-mono w-eyebrow w-signal mb-3",children:a.label}),(0,b.jsx)("p",{className:"w-muted text-[0.95rem] leading-relaxed",children:a.body})]},a.label))})]}),(0,b.jsx)("footer",{className:"px-6 pb-12 pt-8",children:(0,b.jsxs)("div",{className:"mx-auto max-w-5xl",children:[(0,b.jsx)("div",{className:"w-accent-line mb-8 h-px w-full opacity-60"}),(0,b.jsxs)("div",{className:"flex flex-col items-center justify-between gap-5 md:flex-row",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(e.BeaconMark,{size:26,className:"text-foreground"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-semibold leading-tight",children:"Beacon"}),(0,b.jsx)("p",{className:"w-mono w-muted text-[0.72rem]",children:"the visual planning surface for your terminal"})]})]}),(0,b.jsxs)("nav",{className:"flex items-center gap-6 text-sm w-muted",children:[(0,b.jsx)("a",{href:"/docs",className:"transition-colors hover:text-foreground",children:"Docs"}),(0,b.jsx)("a",{href:"#",className:"transition-colors hover:text-foreground",children:"Changelog"})]}),(0,b.jsxs)("p",{className:"w-mono w-muted text-[0.72rem]",children:["Created by"," ",(0,b.jsxs)("a",{href:"https://www.instagram.com/wenzorithelly/",target:"_blank",rel:"noreferrer",className:"w-signal inline-flex items-center gap-1 underline decoration-dotted underline-offset-2 transition-opacity hover:opacity-80",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[(0,b.jsx)("rect",{x:"2",y:"2",width:"20",height:"20",rx:"5",ry:"5"}),(0,b.jsx)("path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}),(0,b.jsx)("line",{x1:"17.5",y1:"6.5",x2:"17.51",y2:"6.5"})]}),"Wenzo"]}),(0,b.jsx)("span",{className:"mx-2 opacity-40",children:"·"}),"© 2026 Beacon"]})]})]})})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=components_landing_landing_tsx_1_9k5z7._.js.map
|