@skill-map/cli 0.68.0 → 0.68.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +14 -15
  2. package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +0 -3
  3. package/dist/cli/tutorial/sm-tutorial/references/_core.md +1 -1
  4. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +30 -56
  5. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +11 -35
  6. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +6 -7
  7. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +2 -2
  8. package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +25 -51
  9. package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +20 -19
  10. package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +150 -5
  11. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
  12. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +41 -73
  13. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +25 -29
  14. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
  15. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +170 -13
  16. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  17. package/dist/cli/tutorial/sm-tutorial/scripts/state.js +4 -4
  18. package/dist/cli.js +12 -11
  19. package/dist/index.js +3 -3
  20. package/dist/kernel/index.js +3 -3
  21. package/dist/ui/{chunk-4F53HBGG.js → chunk-22EQLC23.js} +1 -1
  22. package/dist/ui/chunk-TLMV4LOQ.js +3 -0
  23. package/dist/ui/index.html +1 -1
  24. package/dist/ui/{main-ZYRIR6DB.js → main-R7BIU4HU.js} +3 -3
  25. package/package.json +2 -2
  26. package/dist/cli/tutorial/sm-tutorial/references/part-basic-connect.md +0 -166
  27. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +0 -175
  28. package/dist/ui/chunk-BJUBDHJR.js +0 -3
  29. /package/dist/ui/{chunk-3GDWM5VM.js → chunk-K3ZRQNN5.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{D as ut,E as fe,F as ft,G as vt,H as bt,I as ie,J as yt,f as pt,j as mt,k as gt,u as J,v as ht,w as Z}from"./chunk-3GDWM5VM.js";import{b as qe,f as et,g as tt,h as le,i as nt,j as it,k as rt}from"./chunk-KHDWXSGR.js";import{a as M,b as ge,c as Ct,d as kt}from"./chunk-PU5OP5RN.js";import{a as ct,c as ne,d as u,f as N,g as dt,h as F,i as V,k as _t,l as K}from"./chunk-KMHXNOFZ.js";import{a as He,b as We,c as Qe,d as G,e as Ye,f as Ge,g as Ze}from"./chunk-Z7SOKILO.js";import{b as pe,c as me}from"./chunk-CG25RHMO.js";import{$ as ot,aa as st,ga as at,oa as lt,wa as ce,xa as de}from"./chunk-JKPG5PO7.js";import{r as Xe}from"./chunk-7WMT2LX4.js";import"./chunk-TQBXK5JN.js";import{$ as Ee,$b as g,Ab as U,Bb as Y,Cb as te,Dc as Ke,H as Pe,Ha as oe,Ib as A,Ja as l,K as R,Kb as T,Lb as se,Mb as f,N as Se,Na as Fe,O as Q,P as s,Q as Me,Qa as $e,Ta as Le,V as O,W as I,Xb as Ue,Yb as Ve,Z as Re,Za as D,_ as Te,_b as Je,ac as _,bc as S,ca as Oe,da as Ie,db as je,f as we,fa as Ae,ga as B,gb as ee,ha as De,ja as re,jb as ze,kb as Be,m as W,nb as C,qb as x,ra as Ne,rb as w,wb as b,wc as d,xb as c,xc as ae,yb as p,zb as P}from"./chunk-EJVWTBMV.js";import{a as ke,b as xe}from"./chunk-ZRJ5ZCFR.js";var Zt="@",qt=(()=>{class n{doc;delegate;zone;animationType;moduleImpl;_rendererFactoryPromise=null;scheduler=null;injector=s(Re);loadingSchedulerFn=s(en,{optional:!0});_engine;constructor(e,r,i,o,a){this.doc=e,this.delegate=r,this.zone=i,this.animationType=o,this.moduleImpl=a}ngOnDestroy(){this._engine?.flush()}loadImpl(){let e=()=>this.moduleImpl??import("./chunk-6FGV5O5J.js").then(i=>i),r;return this.loadingSchedulerFn?r=this.loadingSchedulerFn(e):r=e(),r.catch(i=>{throw new Pe(5300,!1)}).then(({\u0275createEngine:i,\u0275AnimationRendererFactory:o})=>{this._engine=i(this.animationType,this.doc);let a=new o(this.delegate,this._engine,this.zone);return this.delegate=a,a})}createRenderer(e,r){let i=this.delegate.createRenderer(e,r);if(i.\u0275type===0)return i;typeof i.throwOnSyntheticProps=="boolean"&&(i.throwOnSyntheticProps=!1);let o=new ve(i);return r?.data?.animation&&!this._rendererFactoryPromise&&(this._rendererFactoryPromise=this.loadImpl()),this._rendererFactoryPromise?.then(a=>{let h=a.createRenderer(e,r);o.use(h),this.scheduler??=this.injector.get(De,null,{optional:!0}),this.scheduler?.notify(10)}).catch(a=>{o.use(i)}),o}begin(){this.delegate.begin?.()}end(){this.delegate.end?.()}whenRenderingDone(){return this.delegate.whenRenderingDone?.()??Promise.resolve()}componentReplaced(e){this._engine?.flush(),this.delegate.componentReplaced?.(e)}static \u0275fac=function(r){Le()};static \u0275prov=R({token:n,factory:n.\u0275fac})}return n})(),ve=class{delegate;replay=[];\u0275type=1;constructor(t){this.delegate=t}use(t){if(this.delegate=t,this.replay!==null){for(let e of this.replay)e(t);this.replay=null}}get data(){return this.delegate.data}destroy(){this.replay=null,this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}get destroyNode(){return this.delegate.destroyNode}appendChild(t,e){this.delegate.appendChild(t,e)}insertBefore(t,e,r,i){this.delegate.insertBefore(t,e,r,i)}removeChild(t,e,r,i){this.delegate.removeChild(t,e,r,i)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,r,i){this.delegate.setAttribute(t,e,r,i)}removeAttribute(t,e,r){this.delegate.removeAttribute(t,e,r)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,r,i){this.delegate.setStyle(t,e,r,i)}removeStyle(t,e,r){this.delegate.removeStyle(t,e,r)}setProperty(t,e,r){this.shouldReplay(e)&&this.replay.push(i=>i.setProperty(t,e,r)),this.delegate.setProperty(t,e,r)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,r,i){return this.shouldReplay(e)&&this.replay.push(o=>o.listen(t,e,r,i)),this.delegate.listen(t,e,r,i)}shouldReplay(t){return this.replay!==null&&t.startsWith(Zt)}},en=new Se("");function xt(n="animations"){return Fe("NgAsyncAnimations"),Me([{provide:$e,useFactory:()=>new qt(s(Te),s(He),s(Oe),n)},{provide:Ne,useValue:n==="noop"?"NoopAnimations":"BrowserAnimations"}])}var be="skill-map",j={brand:be,beta:"BETA - do not use in production",betaDemo:"BETA",devChip:"dev",devChipTooltip:"BFF launched from a local checkout (not the npm install).",devChipA11y:"Development build: BFF is running from a local checkout.",lensChipTooltip:n=>`Active lens: ${n}. The map reflects how ${n} interprets your files.`,lensChipA11y:n=>`Active provider lens: ${n}.`,nav:{searchLabel:"Search nodes by name or tag",searchTooltip:"Search",searchPlaceholder:"Search by name or tag...",searchAriaLabel:"Search nodes by name or tag",searchClearLabel:"Clear search"},actions:{},badge:{nodes:"nodes",mapInfo:(n,t)=>{let e=`Run scan
1
+ import{D as ut,E as fe,F as ft,G as vt,H as bt,I as ie,J as yt,f as pt,j as mt,k as gt,u as J,v as ht,w as Z}from"./chunk-K3ZRQNN5.js";import{b as qe,f as et,g as tt,h as le,i as nt,j as it,k as rt}from"./chunk-KHDWXSGR.js";import{a as M,b as ge,c as Ct,d as kt}from"./chunk-PU5OP5RN.js";import{a as ct,c as ne,d as u,f as N,g as dt,h as F,i as V,k as _t,l as K}from"./chunk-KMHXNOFZ.js";import{a as He,b as We,c as Qe,d as G,e as Ye,f as Ge,g as Ze}from"./chunk-Z7SOKILO.js";import{b as pe,c as me}from"./chunk-CG25RHMO.js";import{$ as ot,aa as st,ga as at,oa as lt,wa as ce,xa as de}from"./chunk-JKPG5PO7.js";import{r as Xe}from"./chunk-7WMT2LX4.js";import"./chunk-TQBXK5JN.js";import{$ as Ee,$b as g,Ab as U,Bb as Y,Cb as te,Dc as Ke,H as Pe,Ha as oe,Ib as A,Ja as l,K as R,Kb as T,Lb as se,Mb as f,N as Se,Na as Fe,O as Q,P as s,Q as Me,Qa as $e,Ta as Le,V as O,W as I,Xb as Ue,Yb as Ve,Z as Re,Za as D,_ as Te,_b as Je,ac as _,bc as S,ca as Oe,da as Ie,db as je,f as we,fa as Ae,ga as B,gb as ee,ha as De,ja as re,jb as ze,kb as Be,m as W,nb as C,qb as x,ra as Ne,rb as w,wb as b,wc as d,xb as c,xc as ae,yb as p,zb as P}from"./chunk-EJVWTBMV.js";import{a as ke,b as xe}from"./chunk-ZRJ5ZCFR.js";var Zt="@",qt=(()=>{class n{doc;delegate;zone;animationType;moduleImpl;_rendererFactoryPromise=null;scheduler=null;injector=s(Re);loadingSchedulerFn=s(en,{optional:!0});_engine;constructor(e,r,i,o,a){this.doc=e,this.delegate=r,this.zone=i,this.animationType=o,this.moduleImpl=a}ngOnDestroy(){this._engine?.flush()}loadImpl(){let e=()=>this.moduleImpl??import("./chunk-6FGV5O5J.js").then(i=>i),r;return this.loadingSchedulerFn?r=this.loadingSchedulerFn(e):r=e(),r.catch(i=>{throw new Pe(5300,!1)}).then(({\u0275createEngine:i,\u0275AnimationRendererFactory:o})=>{this._engine=i(this.animationType,this.doc);let a=new o(this.delegate,this._engine,this.zone);return this.delegate=a,a})}createRenderer(e,r){let i=this.delegate.createRenderer(e,r);if(i.\u0275type===0)return i;typeof i.throwOnSyntheticProps=="boolean"&&(i.throwOnSyntheticProps=!1);let o=new ve(i);return r?.data?.animation&&!this._rendererFactoryPromise&&(this._rendererFactoryPromise=this.loadImpl()),this._rendererFactoryPromise?.then(a=>{let h=a.createRenderer(e,r);o.use(h),this.scheduler??=this.injector.get(De,null,{optional:!0}),this.scheduler?.notify(10)}).catch(a=>{o.use(i)}),o}begin(){this.delegate.begin?.()}end(){this.delegate.end?.()}whenRenderingDone(){return this.delegate.whenRenderingDone?.()??Promise.resolve()}componentReplaced(e){this._engine?.flush(),this.delegate.componentReplaced?.(e)}static \u0275fac=function(r){Le()};static \u0275prov=R({token:n,factory:n.\u0275fac})}return n})(),ve=class{delegate;replay=[];\u0275type=1;constructor(t){this.delegate=t}use(t){if(this.delegate=t,this.replay!==null){for(let e of this.replay)e(t);this.replay=null}}get data(){return this.delegate.data}destroy(){this.replay=null,this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}get destroyNode(){return this.delegate.destroyNode}appendChild(t,e){this.delegate.appendChild(t,e)}insertBefore(t,e,r,i){this.delegate.insertBefore(t,e,r,i)}removeChild(t,e,r,i){this.delegate.removeChild(t,e,r,i)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,r,i){this.delegate.setAttribute(t,e,r,i)}removeAttribute(t,e,r){this.delegate.removeAttribute(t,e,r)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,r,i){this.delegate.setStyle(t,e,r,i)}removeStyle(t,e,r){this.delegate.removeStyle(t,e,r)}setProperty(t,e,r){this.shouldReplay(e)&&this.replay.push(i=>i.setProperty(t,e,r)),this.delegate.setProperty(t,e,r)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,r,i){return this.shouldReplay(e)&&this.replay.push(o=>o.listen(t,e,r,i)),this.delegate.listen(t,e,r,i)}shouldReplay(t){return this.replay!==null&&t.startsWith(Zt)}},en=new Se("");function xt(n="animations"){return Fe("NgAsyncAnimations"),Me([{provide:$e,useFactory:()=>new qt(s(Te),s(He),s(Oe),n)},{provide:Ne,useValue:n==="noop"?"NoopAnimations":"BrowserAnimations"}])}var be="skill-map",j={brand:be,beta:"BETA - do not use in production",betaDemo:"BETA",devChip:"dev",devChipTooltip:"BFF launched from a local checkout (not the npm install).",devChipA11y:"Development build: BFF is running from a local checkout.",lensChipTooltip:n=>`Active lens: ${n}. The map reflects how ${n} interprets your files.`,lensChipA11y:n=>`Active provider lens: ${n}.`,nav:{searchLabel:"Search nodes by name or tag",searchTooltip:"Search",searchPlaceholder:"Search by name or tag...",searchAriaLabel:"Search nodes by name or tag",searchClearLabel:"Clear search"},actions:{},badge:{nodes:"nodes",mapInfo:(n,t)=>{let e=`Run scan
2
2
  ${n.toLocaleString()} nodes \xB7 ${t.raw.toLocaleString()} links`;if(t.raw===t.drawn)return e;let r=[],i=t.brokenSource+t.brokenTarget;return i>0&&r.push(`${i} broken`),t.selfLoops>0&&r.push(`${t.selfLoops} self-loop${t.selfLoops===1?"":"s"}`),t.duplicates>0&&r.push(`${t.duplicates} duplicate${t.duplicates===1?"":"s"}`),`${e}
3
- ${t.drawn.toLocaleString()} drawn (${r.join(", ")})`},mapInfoA11y:(n,t)=>`Map contains ${n} nodes and ${t.raw} links; ${t.drawn} drawn on the canvas`},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The map and inspector need room to breathe. Pop this open on a screen at least 768px wide. See you there."},documentTitle:(n,t)=>{let e=n?`${n} - ${be}`:be;return t?`${e} v${t}`:e}};var wt=[{path:"",pathMatch:"full",loadComponent:()=>import("./chunk-4F53HBGG.js").then(n=>n.WorkspaceView),title:j.brand},{path:"intentional-fail",loadComponent:()=>import("./chunk-HLALESGR.js").then(n=>n.IntentionalFail)},{path:"**",redirectTo:""}];var z={errors:{unknownMode:n=>`SKILL_MAP_MODE: unknown value "${n}"`,restPrefix:n=>`BFF error [${n}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(n,t)=>`Demo bundle fetch failed for "${n}": ${t}`,demoParseFailed:(n,t)=>`Demo bundle parse failed for "${n}": ${t}`,graphFormatNotInDemo:n=>`Graph format "${n}" is not bundled in demo mode (only "ascii").`}};function he(n){let t=new TextEncoder().encode(n),e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var m="/api",Pt=(()=>{class n{http;ws;kindRegistry;providerRegistry;contributionsRegistry;constructor(e,r,i,o,a){this.http=e??s(G),this.ws=r??s(F),this.kindRegistry=i??s(J),this.contributionsRegistry=o??s(Z),this.providerRegistry=a??s(K)}async health(){return this.getJson(`${m}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${m}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async loadScanMeta(){return this.getJson(`${m}/scan?meta=1`)}async loadFolders(){let e=await this.getJson(`${m}/folders`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.items}async loadBranch(e=[],r){let i=new URLSearchParams;for(let a of e)a&&i.append("path",a);r!==void 0&&i.set("limit",String(r));let o=i.toString();return this.getJson(`${m}/branch${o?`?${o}`:""}`)}async runScan(){return this.patchJson(`${m}/scan`,{},"POST")}async listNodes(e={}){let r=tn(e),i=await this.getJson(`${m}/nodes${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async getNode(e,r={}){let i=he(e),o=r.includeBody?"?include=body":"";try{let a=await this.getJson(`${m}/nodes/${i}${o}`);return this.ingestRegistry(a.kindRegistry),this.ingestContributionsRegistry(a.contributionsRegistry),this.ingestProviderRegistry(a.providerRegistry),a}catch(a){if(a instanceof u&&a.code==="not-found")return null;throw a}}async listLinks(e={}){let r=nn(e),i=await this.getJson(`${m}/links${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async listIssues(e={}){let r=rn(e),i=await this.getJson(`${m}/issues${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async loadGraph(e="ascii"){let r=`${m}/graph?format=${encodeURIComponent(e)}`;try{return await W(this.http.get(r,{responseType:"text"}))}catch(i){throw this.translateError(i)}}async loadConfig(){let e=await this.getJson(`${m}/config`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.value}async listPlugins(){let e=await this.getJson(`${m}/plugins`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e}async setPluginEnabled(e,r){let i=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}`,{enabled:r});return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async setPluginExtensionEnabled(e,r,i){let o=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}/extensions/${encodeURIComponent(r)}`,{enabled:i});return this.ingestRegistry(o.kindRegistry),this.ingestContributionsRegistry(o.contributionsRegistry),this.ingestProviderRegistry(o.providerRegistry),o}async applyPluginChanges(e){let r=await this.patchJson(`${m}/plugins`,{changes:e});return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async getPreferences(){return await this.getJson(`${m}/preferences`)}async setPreferences(e){return await this.patchJson(`${m}/preferences`,e)}async getProjectPreferences(){return await this.getJson(`${m}/project-preferences`)}async setProjectPreferences(e){return await this.patchJson(`${m}/project-preferences`,e)}async getProjectIgnore(){return await this.getJson(`${m}/project-ignore`)}async setProjectIgnore(e){return await this.patchJson(`${m}/project-ignore`,e)}async getActiveProvider(){return await this.getJson(`${m}/active-provider`)}async setActiveProvider(e){return await this.patchJson(`${m}/active-provider`,{activeProvider:e})}async setFavorite(e){let r=he(e);try{await W(this.http.put(`${m}/favorites/${r}`,null))}catch(i){throw this.translateError(i)}}async unsetFavorite(e){let r=he(e);try{await W(this.http.delete(`${m}/favorites/${r}`))}catch(i){throw this.translateError(i)}}async bumpSidecar(e,r={}){let i={nodePath:e};return r.force!==void 0&&(i.force=r.force),r.confirm!==void 0&&(i.confirm=r.confirm),this.patchJson(`${m}/sidecar/bump`,i,"POST")}async dispatchAction(e,r,i={}){let o=e.split("/").map(encodeURIComponent).join("/"),a={nodePath:r};return i.input!==void 0&&(a.input=i.input),i.confirm!==void 0&&(a.confirm=i.confirm),i.always!==void 0&&(a.always=i.always),this.patchJson(`${m}/actions/${o}`,a,"POST")}async getUpdateStatus(){return this.getJson(`${m}/update-status`)}async getRegisteredAnnotations(){return(await this.getJson(`${m}/annotations/registered`)).items}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}ingestProviderRegistry(e){e&&this.providerRegistry.ingest(e)}ingestContributionsRegistry(e){this.contributionsRegistry.setRegistry(e)}async lookupContribution(e,r,i){let o=new URLSearchParams({path:i});try{return(await this.getJson(`${m}/contributions/${encodeURIComponent(e)}/${encodeURIComponent(r)}?${o.toString()}`)).items[0]??null}catch{return null}}events(){return this.ws.events$}async getJson(e){try{return await W(this.http.get(e))}catch(r){throw this.translateError(r)}}async patchJson(e,r,i="PATCH"){try{let o=i==="POST"?this.http.post(e,r):this.http.patch(e,r);return await W(o)}catch(o){throw this.translateError(o)}}translateError(e){if(e instanceof u)return e;if(e instanceof Qe){let i=on(e.error);return i?new u(i.error.code,i.error.message,i.error.details):new u("internal",e.message||z.errors.malformedResponse)}let r=e instanceof Error?e.message:String(e);return new u("internal",r)}static \u0275fac=function(r){return new(r||n)(Q(G),Q(F),Q(J),Q(Z),Q(K))};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function tn(n){let t=new URLSearchParams;n.kind&&n.kind.length>0&&t.set("kind",n.kind.join(",")),n.hasIssues!==void 0&&t.set("hasIssues",String(n.hasIssues)),n.path&&t.set("path",n.path),n.limit!==void 0&&t.set("limit",String(n.limit)),n.offset!==void 0&&t.set("offset",String(n.offset));let e=t.toString();return e?`?${e}`:""}function nn(n){let t=new URLSearchParams;n.kind&&n.kind.length>0&&t.set("kind",n.kind.join(",")),n.from&&t.set("from",n.from),n.to&&t.set("to",n.to);let e=t.toString();return e?`?${e}`:""}function rn(n){let t=new URLSearchParams;n.severity&&t.set("severity",n.severity),n.analyzerId&&t.set("analyzerId",n.analyzerId),n.node&&t.set("node",n.node),n.nodes&&n.nodes.length>0&&t.set("nodes",n.nodes.join(","));let e=t.toString();return e?`?${e}`:""}function on(n){if(typeof n!="object"||n===null)return null;let t=n;if(t.ok!==!1)return null;let e=t.error;if(typeof e!="object"||e===null)return null;let r=e;return typeof r.code!="string"||typeof r.message!="string"?null:{ok:!1,error:{code:r.code,message:r.message,details:r.details}}}var sn="data.json",an="data.meta.json",ue=class{fetchImpl;metaPromise=null;dataPromise=null;kindRegistry;providerRegistry;contributionsRegistry;constructor(t=globalThis.fetch.bind(globalThis),e,r,i){this.fetchImpl=t,this.kindRegistry=e??s(J),this.providerRegistry=r??s(K),this.contributionsRegistry=i??s(Z)}async health(){return(await this.loadMeta()).health}async loadScan(){let[t,e]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),t}async loadScanMeta(){let t=await this.loadScan();return xe(ke({},t),{nodes:[],links:[],issues:[]})}async loadFolders(){let t=await this.loadScan(),e=new Map,r=new Map;for(let i of t.issues){let o=i.severity==="error"?e:i.severity==="warn"?r:null;if(o)for(let a of i.nodeIds)o.set(a,(o.get(a)??0)+1)}return t.nodes.map(i=>({path:i.path,kind:i.kind,linksInCount:i.linksInCount,linksOutCount:i.linksOutCount,tokensTotal:i.tokens?.total??null,modifiedAtMs:i.modifiedAtMs??null,errorCount:e.get(i.path)??0,warnCount:r.get(i.path)??0,sidecarStatus:i.sidecar?.status??null}))}async loadBranch(t=[],e){let r=await this.loadScan(),i=t.filter(y=>y!==""),o=y=>i.length===0||i.some(H=>y===H||y.startsWith(`${H}/`)),a=r.nodes.filter(y=>o(y.path)).sort((y,H)=>y.path.localeCompare(H.path)),h=a.length,k=e!==void 0&&e>0?e:h,v=a.slice(0,k),E=new Set(v.map(y=>y.path)),L=r.links.filter(y=>E.has(y.source)&&E.has(y.resolvedTarget??y.target)),Gt=r.issues.filter(y=>y.nodeIds.some(H=>E.has(H)));return{schemaVersion:"1",kind:"branch",branch:{paths:[...i],total:h,rendered:v.length,truncated:h>k,cap:k},nodes:v,links:L,issues:Gt}}primeContributionsRegistry(t){this.contributionsRegistry.setRegistry(t.contributionsRegistry)}async listNodes(t={}){let e=await this.loadMeta();if(ln(t))return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),e.nodes;let r=await this.loadData(),i=r.issues,o=r.nodes;if(t.kind&&t.kind.length>0){let E=new Set(t.kind);o=o.filter(L=>E.has(L.kind))}if(t.path){let E=pn(t.path);o=o.filter(L=>E.test(L.path))}if(t.hasIssues===!0){let E=St(i);o=o.filter(L=>E.has(L.path))}else if(t.hasIssues===!1){let E=St(i);o=o.filter(L=>!E.has(L.path))}let a=o.length,h=t.offset??0,k=t.limit??1e3,v=o.slice(h,h+k);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"nodes",items:v,filters:{kind:t.kind??null,hasIssues:t.hasIssues??null,path:t.path?[t.path]:null},counts:{total:a,returned:v.length,page:{offset:h,limit:k}},kindRegistry:e.nodes.kindRegistry,providerRegistry:e.nodes.providerRegistry}}async getNode(t,e={}){let[r,i]=await Promise.all([this.loadData(),this.loadMeta()]),o=r.nodes.find(v=>v.path===t);if(!o)return null;let a=r.links.filter(v=>v.target===t),h=r.links.filter(v=>v.source===t),k=r.issues.filter(v=>v.nodeIds.includes(t));return this.kindRegistry.ingest(i.nodes.kindRegistry),this.providerRegistry.ingest(i.nodes.providerRegistry),this.primeContributionsRegistry(i),{schemaVersion:"1",kind:"node",item:o,links:{incoming:a,outgoing:h},issues:k,kindRegistry:i.nodes.kindRegistry,providerRegistry:i.nodes.providerRegistry}}async listLinks(t={}){let e=await this.loadMeta();if(cn(t))return this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),e.links;let i=(await this.loadData()).links;if(t.kind&&t.kind.length>0){let o=new Set(t.kind);i=i.filter(a=>o.has(a.kind))}return t.from&&(i=i.filter(o=>o.source===t.from)),t.to&&(i=i.filter(o=>o.target===t.to)),this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"links",items:i,filters:{kind:t.kind??null,from:t.from??null,to:t.to??null},counts:{total:i.length,returned:i.length},kindRegistry:e.links.kindRegistry,providerRegistry:e.links.providerRegistry}}async listIssues(t={}){let e=await this.loadMeta();if(dn(t))return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),e.issues;let i=(await this.loadData()).issues;if(t.severity&&(i=i.filter(o=>o.severity===t.severity)),t.analyzerId&&(i=i.filter(o=>o.analyzerId===t.analyzerId)),t.node&&(i=i.filter(o=>o.nodeIds.includes(t.node))),t.nodes&&t.nodes.length>0){let o=new Set(t.nodes);i=i.filter(a=>a.nodeIds.some(h=>o.has(h)))}return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"issues",items:i,filters:{severity:t.severity??null,analyzerId:t.analyzerId??null,node:t.node??null,nodes:t.nodes&&t.nodes.length>0?[...t.nodes]:null},counts:{total:i.length,returned:i.length},kindRegistry:e.issues.kindRegistry,providerRegistry:e.issues.providerRegistry}}async loadGraph(t="ascii"){if(t!=="ascii")throw new u("bad-query",z.errors.graphFormatNotInDemo(t));return(await this.loadMeta()).graph.ascii}async loadConfig(){let t=await this.loadMeta();return this.kindRegistry.ingest(t.config.kindRegistry),this.providerRegistry.ingest(t.config.providerRegistry),this.primeContributionsRegistry(t),t.config.value}async listPlugins(){let t=await this.loadMeta();return this.kindRegistry.ingest(t.plugins.kindRegistry),this.providerRegistry.ingest(t.plugins.providerRegistry),this.primeContributionsRegistry(t),t.plugins}async setFavorite(t){throw new u("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async unsetFavorite(t){throw new u("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async setPluginEnabled(t,e){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async setPluginExtensionEnabled(t,e,r){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async applyPluginChanges(t){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async runScan(){throw new u("demo-readonly","Manual scan is not available in demo mode (static bundle is immutable).")}async getPreferences(){return{updateCheck:{enabled:!0},telemetry:{errorsEnabled:!1,usageCliEnabled:!1,usageUiEnabled:!1,anonymousId:null,environment:"prod"}}}async setPreferences(t){throw new u("demo-readonly","Preference toggles are not available in demo mode (static bundle is immutable).")}async getProjectPreferences(){return{allowSidecarWriters:!0,scan:{referencePaths:[]}}}async setProjectPreferences(t){throw new u("demo-readonly","Project preferences are not available in demo mode (static bundle is immutable).")}async getProjectIgnore(){return{patterns:[]}}async setProjectIgnore(t){throw new u("demo-readonly","Ignore patterns are not available in demo mode (static bundle is immutable).")}async getActiveProvider(){return(await this.loadMeta()).activeProvider??{activeProvider:"markdown",detected:[],source:"default",selectable:[]}}async setActiveProvider(t){throw new u("demo-readonly","Active provider lens is not available in demo mode (static bundle is immutable).")}async lookupContribution(){return null}async bumpSidecar(t,e={}){throw new u("demo-readonly","Sidecar bump is not available in demo mode (static bundle is immutable).")}async dispatchAction(t,e,r={}){throw new u("demo-readonly","Actions are not available in demo mode (static bundle is immutable).")}async getUpdateStatus(){return{current:(await this.loadMeta()).health.implVersion,latest:null,isOutdated:!1,checkedAt:null,shownAt:null}}async getRegisteredAnnotations(){return[]}events(){return we}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(an)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(sn)),this.dataPromise}async fetchJson(t){let e;try{e=await this.fetchImpl(t)}catch(r){let i=r instanceof Error?r.message:String(r);throw new u("internal",z.errors.demoFetchFailed(t,i))}if(!e.ok)throw new u("internal",z.errors.demoFetchFailed(t,`HTTP ${e.status}`));try{return await e.json()}catch(r){let i=r instanceof Error?r.message:String(r);throw new u("internal",z.errors.demoParseFailed(t,i))}}};function ln(n){return!(n.kind&&n.kind.length>0||n.hasIssues!==void 0||n.path||n.offset!==void 0&&n.offset!==0||n.limit!==void 0)}function cn(n){return!(n.kind&&n.kind.length>0||n.from||n.to)}function dn(n){return!(n.severity||n.analyzerId||n.node||n.nodes&&n.nodes.length>0)}function St(n){let t=new Set;for(let e of n)for(let r of e.nodeIds)t.add(r);return t}function pn(n){let e=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function Mt(){let n=s(N);if(n==="live")return new Pt(s(G),s(F));if(n==="demo")return new ue;let t=n;throw new Error(z.errors.unknownMode(String(t)))}var Rt="search",Tt="kinds",Et="linkKinds",Ot="favoritesOnly",It="severities",mn=["error","warn"],At=(()=>{class n{filters=s(gt);router=s(nt);activatedRoute=s(et);kindRegistry=s(J);destroyRef=s(Ee);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.pipe(ct(this.destroyRef)).subscribe(e=>{if(e instanceof qe){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),re(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),r=new URLSearchParams;for(let[i,o]of Object.entries(e.queryParams))Array.isArray(o)?r.set(i,o.join(",")):o!=null&&r.set(i,String(o));return this.activatedRoute,r}applyUrlToFilters(e){let r=e.get(Rt)??"";r!==this.filters.searchText()&&this.filters.setSearchText(r);let i=gn(e.get(Tt),this.kindRegistry.kinds().map(v=>v.name));_e(i,this.filters.selectedKinds())||this.filters.setKinds(i);let o=e.get(Ot)==="true";o!==this.filters.favoritesOnly()&&this.filters.setFavoritesOnly(o);let a=hn(e.get(Et));_e(a,this.filters.selectedLinkKinds())||this.filters.setLinkKinds(a);let h=un(e.get(It)),k=[];this.filters.severityErrorActive()&&k.push("error"),this.filters.severityWarnActive()&&k.push("warn"),_e(h,k)||this.filters.setSeverityFilters(h)}computeQueryParams(){let e=this.filters.searchText().trim(),r=this.filters.selectedKinds(),i=this.filters.selectedLinkKinds(),o=this.filters.favoritesOnly(),a=[];return this.filters.severityErrorActive()&&a.push("error"),this.filters.severityWarnActive()&&a.push("warn"),{[Rt]:e.length>0?e:null,[Tt]:r.length>0?r.join(","):null,[Et]:i.length>0?i.join(","):null,[Ot]:o?"true":null,[It]:a.length>0?a.join(","):null}}writeQueryParams(e){let r=this.currentParams(),i=new Map(Object.entries(e)),o=!1;for(let[a,h]of i)if((r.get(a)??null)!==h){o=!0;break}o&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function gn(n,t){if(!n)return[];let e=new Set(t);return n.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function hn(n){if(!n)return[];let t=new Set(mt);return n.split(",").map(e=>e.trim()).filter(e=>t.has(e))}function un(n){if(!n)return[];let t=new Set(mn);return n.split(",").map(e=>e.trim()).filter(e=>t.has(e))}function _e(n,t){if(n.length!==t.length)return!1;for(let e=0;e<n.length;e++)if(n[e]!==t[e])return!1;return!0}var Dt={healthFailed:n=>`ProjectInfoService: /api/health probe failed (${n})`};var q=(()=>{class n{dataSource=s(ne);status=B(null);cwd=d(()=>this.status()?.cwd??null);implVersion=d(()=>this.status()?.implVersion??null);dev=d(()=>this.status()?.dev===!0);activeProviderState=B(null);activeProvider=d(()=>this.activeProviderState());async load(){try{let e=await this.dataSource.health();this.status.set(e)}catch(e){let r=e instanceof Error?e.message:String(e);console.warn(Dt.healthFailed(r))}await this.reloadActiveProvider()}async reloadActiveProvider(){try{let e=await this.dataSource.getActiveProvider();this.activeProviderState.set(e.activeProvider)}catch{}}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Ft=(()=>{class n extends le{title=s(Ze);projectInfo=s(q);constructor(){super(),re(()=>{let e=Nt(this.projectInfo.cwd()),r=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(e,r))})}updateTitle(e){let r=Nt(this.projectInfo.cwd()),i=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(r,i))}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Nt(n){if(!n)return null;let t=n.replace(/[\\/]+$/,"");if(!t||t===".")return null;let e=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return(e>=0?t.slice(e+1):t)||null}var ye=!1,Ce=null;async function $t(n){if(ye||fe===""||!n.consentEnabled)return;let t=await import("./chunk-3ANNEMV4.js");t.init({dsn:fe,release:n.release??void 0,environment:n.environment,integrations:e=>fn(t.breadcrumbsIntegration,e),tracesSampleRate:0,sendDefaultPii:!1,allowUrls:[/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?\//],beforeSend:e=>ft(e)}),Ce=t,ye=!0}function Lt(n){!ye||Ce===null||Ce.captureException(n)}function fn(n,t){return t.filter(e=>e.name!=="BrowserSession").map(e=>e.name==="Breadcrumbs"?n({console:!1,fetch:!1,xhr:!1,dom:!1}):e)}var jt=(()=>{class n{handleError(e){console.error(e),Lt(e)}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac})}return n})();function vn(...n){for(let t of n)Promise.resolve(t.load())}var zt={providers:[Ae(),{provide:Ie,useClass:jt},it(wt,rt()),{provide:le,useClass:Ft},Ye(Ge()),xt(),st({}),ee(async()=>{let n=s(ot),[{default:t},{definePreset:e}]=await Promise.all([import("./chunk-OGEE252A.js"),import("./chunk-3ZAHOYQ7.js")]),r=e(t,{semantic:{primary:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#4C1D95",900:"#2E1065",950:"#1E0A4D"}}});n.setThemeConfig({theme:{preset:r,options:{darkModeSelector:".app-dark"}}})}),{provide:N,useFactory:dt},{provide:ne,useFactory:Mt},ee(async()=>{let n=s(ne),t=s(ie);try{let[e,r]=await Promise.all([n.getPreferences(),n.health()]);await Promise.all([$t({consentEnabled:e.telemetry.errorsEnabled,release:r.implVersion?`skill-map-cli@${r.implVersion}`:null,environment:e.telemetry.environment}),vt({consentEnabled:e.telemetry.usageUiEnabled,distinctId:e.telemetry.anonymousId})]),bt({environment:e.telemetry.environment}),t.syncTheme()}catch{}}),ee(()=>{vn(s(V),s(ge),s(q))}),ee(()=>{s(At),s(ht),s(ie)})]};var X={toggleToAuto:"Switch to auto theme (follow system)",toggleToLight:"Switch to light theme",toggleToDark:"Switch to dark theme",currentAuto:"Auto theme (follows system)",currentLight:"Light theme",currentDark:"Dark theme"};var Bt={body:"You are viewing a static demo of skill-map's UI. Install it:",installCommand:"npm i -g @skill-map/cli",homeCta:"\u2190 Back to skill-map.ai",homeHref:"/",dismissAria:"Dismiss demo banner"};function _n(n,t){if(n&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"code",3),g(5),p()(),c(6,"a",4),g(7),p(),c(8,"p-button",5),T("onClick",function(){O(e);let i=f();return I(i.dismiss())}),p()()}if(n&2){let e=f();l(3),S(" ",e.texts.body," "),l(2),_(e.texts.installCommand),l(),b("href",e.texts.homeHref,oe),l(),_(e.texts.homeCta),l(),b("ariaLabel",e.texts.dismissAria)("text",!0)("rounded",!0)}}var Ut="sm.demoBannerDismissed",Vt=(()=>{class n{mode=s(N);texts=Bt;dismissed=B(this.readDismissed());visible=d(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Ut,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Ut)==="1"}catch{return!1}}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-demo-banner"]],decls:1,vars:1,consts:[["role","status","data-testid","demo-banner",1,"demo-banner"],["aria-hidden","true",1,"demo-banner__icon","fa-solid","fa-circle-info"],[1,"demo-banner__body"],["data-testid","demo-banner-install",1,"demo-banner__cmd"],["data-testid","demo-banner-home",1,"demo-banner__home",3,"href"],["icon","fa-solid fa-xmark","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(r,i){r&1&&x(0,_n,9,7,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[me,pe],styles:["[_nghost-%COMP%]{display:block}.demo-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--p-highlight-background);color:var(--p-text-color);font-size:.875rem}.demo-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--p-primary-color)}.demo-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.demo-banner__cmd[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-md);padding:.05rem .4rem;font-size:.85em;margin-left:.25rem}.demo-banner__home[_ngcontent-%COMP%]{color:var(--p-primary-color);font-weight:500;text-decoration:none;white-space:nowrap}.demo-banner__home[_ngcontent-%COMP%]:hover, .demo-banner__home[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}"],changeDetection:0})}return n})();var Jt={body:n=>`The scan hit its ceiling of ${n} ${n===1?"file":"files"}; some files were dropped from the corpus. Trim .skillmapignore or raise --max-scan.`,cta:"Edit .skillmapignore",ctaAria:"Open Settings to edit ignored patterns"};function yn(n,t){if(n&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.onCta())}),g(5),Y()()}if(n&2){let e=f();l(3),S(" ",e.state().body," "),l(),C("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var Kt=(()=>{class n{loader=s(V);texts=Jt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta();if(!e||e.scanTruncated!==!0)return{visible:!1,body:""};let r=e.scanCeiling;return r===void 0?{visible:!1,body:""}:{visible:!0,body:this.texts.body(r)}});visible=d(()=>this.state().visible);onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-oversized-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","oversized-banner",1,"oversized-banner"],["aria-hidden","true",1,"oversized-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","oversized-banner-body",1,"oversized-banner__body"],["type","button","data-testid","oversized-banner-cta",1,"oversized-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,yn,6,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.oversized-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.oversized-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.oversized-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.oversized-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.oversized-banner__cta[_ngcontent-%COMP%]:hover, .oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Xt={headline:n=>`${n} ${n===1?"file":"files"} skipped, ${n===1?"it exceeds":"they exceed"} the max file size.`,more:"...",seeConsole:"See the full list in the console.",cta:"Open Project settings",ctaAria:"Open Settings to adjust the max file size or ignore patterns"};function kn(n,t){if(n&1&&(c(0,"span",4),g(1),p()),n&2){let e=f(2);b("pTooltip",e.state().tooltip),l(),_(e.texts.more)}}function xn(n,t){if(n&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"span",3),g(5),p(),x(6,kn,2,2,"span",4),p(),c(7,"button",5),T("click",function(){O(e);let i=f();return I(i.onCta())}),g(8),p()()}if(n&2){let e=f();l(3),S(" ",e.texts.headline(e.state().count)," "),l(2),S(" ",e.state().first," "),l(),w(e.state().hasMore?6:-1),l(),C("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var wn=5,Ht=(()=>{class n{loader=s(V);texts=Xt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta(),r=e?.oversizedFiles??[],i=e?.stats?.filesOversized??r.length;if(i<=0)return{visible:!1,count:0,first:"",hasMore:!1,tooltip:""};let o=r[0]?this.describe(r[0]):"",a=i>1,h="";if(a){let k=r.slice(1);i-1>wn?h=this.texts.seeConsole:h=k.map(v=>this.describe(v)).join(`
4
- `)}return{visible:!0,count:i,first:o,hasMore:a,tooltip:h}});visible=d(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${pt(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,xn,9,5,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[de,ce],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Wt={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function Pn(n,t){if(n&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.reconnect())}),te(5,"span",4),g(6),Y()()}if(n&2){let e=f();l(3),_(e.texts.body),l(),C("aria-label",e.texts.reconnectAria),l(2),S(" ",e.texts.reconnectCta," ")}}var Qt=(()=>{class n{mode=s(N);ws=s(F);texts=Wt;visible=d(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(r,i){r&1&&x(0,Pn,7,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Sn=()=>[import("./chunk-BJUBDHJR.js").then(n=>n.SettingsModal)];function Mn(n,t){if(n&1&&(c(0,"span",11),g(1),p()),n&2){let e=f();b("pTooltip",e.versionTooltip()),C("aria-label",e.texts.devChipA11y),l(),_(e.texts.devChip)}}function Rn(n,t){if(n&1&&(c(0,"span",12),g(1),p()),n&2){let e=f();b("pTooltip",e.versionTooltip()),C("aria-label",e.versionA11y()),l(),_(e.versionLabel())}}function Tn(n,t){if(n&1&&(c(0,"span",24),g(1),p()),n&2){let e=t,r=f();Ue("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",r.texts.lensChipTooltip(e.label)),C("aria-label",r.texts.lensChipA11y(e.label)),l(),_(e.label)}}function En(n,t){if(n&1){let e=A();c(0,"button",25),T("click",function(){O(e);let i=f();return I(i.copyUpdateCommand())}),P(1,"i",26),c(2,"span"),g(3),p()(),c(4,"a",27),P(5,"i",28),p()}if(n&2){let e=f();b("pTooltip",e.updateChipTooltip()),C("aria-label",e.updateChipA11y()),l(),Je(e.updateChipIcon()),l(2),_(e.updateChipText()),l(),b("href",e.npmLinkUrl,oe)("pTooltip",e.npmLinkTooltip),C("aria-label",e.npmLinkA11y)}}function On(n,t){if(n&1&&(c(0,"p",15)(1,"bdi",29),g(2),p()()),n&2){let e=t;C("title",e),l(2),_(e)}}function In(n,t){if(n&1){let e=A();c(0,"sm-settings-modal",30),T("visibleChange",function(i){O(e);let o=f();return I(o.onSettingsVisibleChange(i))}),p()}if(n&2){let e=f();b("visible",e.settingsOpen())}}var Yt=(()=>{class n{loader=s(V);theme=s(_t);projectInfo=s(q);providerRegistry=s(K);scanTrigger=s(kt);wsEvents=s(F);usageTracker=s(ie);updateCheck=s(ge);texts=j;isDemo=s(N)==="demo";betaLabel=this.isDemo?this.texts.betaDemo:this.texts.beta;settingsTexts=Ct;settingsOpen=B(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=d(()=>this.scanTrigger.scanning()||this.wsEvents.scanActive());scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=B(!1);updateChipText=d(()=>this.updateChipCopied()?M.copiedLabel:M.available);updateChipIcon=d(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=d(()=>this.updateChipCopied()?M.copiedTooltip:M.tooltip(this.updateCheck.latest()??""));updateChipA11y=d(()=>M.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=M.npmLinkUrl;npmLinkTooltip=M.npmLinkTooltip;npmLinkA11y=M.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(M.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=d(()=>M.versionLabel(this.updateCheck.current()??""));versionTooltip=d(()=>M.versionTooltip(this.updateCheck.current()??""));versionA11y=d(()=>M.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=d(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=d(()=>yt(this.loader.nodes(),this.loader.scan()));linkCount=d(()=>this.linkAnalysis().raw);mapInfoTooltip=d(()=>j.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=d(()=>j.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=d(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let r=this.loader.scan()?.roots??[];if(r.length===0)return"";let i=r[0].replace(/[\\/]+$/,"");return!i||i==="."?"":i});isDevMode=Ke();themeMode=this.theme.mode;markSrc=d(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=d(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=d(()=>{switch(this.themeMode()){case"auto":return X.toggleToLight;case"light":return X.toggleToDark;case"dark":return X.toggleToAuto}});themeTooltip=d(()=>{switch(this.themeMode()){case"auto":return X.currentAuto;case"light":return X.currentLight;case"dark":return X.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-root"]],decls:39,vars:28,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__beta"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(r,i){if(r&1&&(c(0,"div",0)(1,"div",1),P(2,"i",2),c(3,"h2",3),g(4),p(),c(5,"p",4),g(6),p(),c(7,"p",5),g(8),p()()(),c(9,"div",6),P(10,"sm-demo-banner"),c(11,"sm-oversized-banner",7),T("openSettings",function(){return i.openSettings()}),p(),c(12,"sm-skipped-files-banner",7),T("openSettings",function(){return i.openSettings()}),p(),P(13,"sm-connection-banner"),c(14,"header",8)(15,"div",9),P(16,"img",10),c(17,"div")(18,"h1"),g(19),x(20,Mn,2,3,"span",11)(21,Rn,2,3,"span",12),x(22,Tn,2,7,"span",13),c(23,"span",14),g(24),p(),x(25,En,6,8),p(),x(26,On,3,2,"p",15),p()(),c(27,"nav",16),P(28,"sm-view-contributions-host",17),p(),c(29,"div",18)(30,"button",19),T("click",function(){return i.triggerScan()}),P(31,"i",20),p(),c(32,"p-button",21),T("onClick",function(){return i.toggleTheme()}),p(),c(33,"p-button",22),T("onClick",function(){return i.openSettings()}),p()()(),c(34,"main",23),P(35,"router-outlet"),p(),je(36,In,1,1),ze(37,36,Sn),p()),r&2){let o,a,h;l(4),_(i.texts.viewportWarning.title),l(2),_(i.texts.viewportWarning.subtitle),l(2),_(i.texts.viewportWarning.body),l(8),b("ngSrc",i.markSrc()),l(3),S(" ",i.texts.brand," "),l(),w(i.isDevBuild()?20:(o=i.updateCheck.current())?21:-1,o),l(2),w((a=i.lensChip())?22:-1,a),l(),C("aria-label",i.betaLabel),l(),_(i.betaLabel),l(),w(i.updateCheck.isOutdated()&&!i.isDevMode?25:-1),l(),w((h=i.rootLabel())?26:-1,h),l(),C("aria-label",i.texts.a11y.viewSwitcher),l(),b("node",null),l(2),Ve("is-spinning",i.scanning()),b("pTooltip",i.mapInfoTooltip())("disabled",i.scanning()),C("aria-label",i.mapInfoA11y()),l(2),b("icon",i.themeIcon())("ariaLabel",i.themeLabel())("pTooltip",i.themeTooltip())("text",!0)("rounded",!0),l(),b("ariaLabel",i.settingsTexts.a11y.triggerLabel)("pTooltip",i.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),l(4),Be(i.settingsOpen())}},dependencies:[tt,me,pe,lt,de,ce,at,Xe,Vt,Kt,Ht,Qt,ut],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__beta[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__refresh.is-spinning[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_shell-refresh-spin 1s linear infinite}@keyframes _ngcontent-%COMP%_shell-refresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return n})();We(Yt,zt).catch(n=>console.error(n));
3
+ ${t.drawn.toLocaleString()} drawn (${r.join(", ")})`},mapInfoA11y:(n,t)=>`Map contains ${n} nodes and ${t.raw} links; ${t.drawn} drawn on the canvas`},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The map and inspector need room to breathe. Pop this open on a screen at least 768px wide. See you there."},documentTitle:(n,t)=>{let e=n?`${n} - ${be}`:be;return t?`${e} v${t}`:e}};var wt=[{path:"",pathMatch:"full",loadComponent:()=>import("./chunk-22EQLC23.js").then(n=>n.WorkspaceView),title:j.brand},{path:"intentional-fail",loadComponent:()=>import("./chunk-HLALESGR.js").then(n=>n.IntentionalFail)},{path:"**",redirectTo:""}];var z={errors:{unknownMode:n=>`SKILL_MAP_MODE: unknown value "${n}"`,restPrefix:n=>`BFF error [${n}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(n,t)=>`Demo bundle fetch failed for "${n}": ${t}`,demoParseFailed:(n,t)=>`Demo bundle parse failed for "${n}": ${t}`,graphFormatNotInDemo:n=>`Graph format "${n}" is not bundled in demo mode (only "ascii").`}};function he(n){let t=new TextEncoder().encode(n),e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var m="/api",Pt=(()=>{class n{http;ws;kindRegistry;providerRegistry;contributionsRegistry;constructor(e,r,i,o,a){this.http=e??s(G),this.ws=r??s(F),this.kindRegistry=i??s(J),this.contributionsRegistry=o??s(Z),this.providerRegistry=a??s(K)}async health(){return this.getJson(`${m}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${m}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async loadScanMeta(){return this.getJson(`${m}/scan?meta=1`)}async loadFolders(){let e=await this.getJson(`${m}/folders`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.items}async loadBranch(e=[],r){let i=new URLSearchParams;for(let a of e)a&&i.append("path",a);r!==void 0&&i.set("limit",String(r));let o=i.toString();return this.getJson(`${m}/branch${o?`?${o}`:""}`)}async runScan(){return this.patchJson(`${m}/scan`,{},"POST")}async listNodes(e={}){let r=tn(e),i=await this.getJson(`${m}/nodes${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async getNode(e,r={}){let i=he(e),o=r.includeBody?"?include=body":"";try{let a=await this.getJson(`${m}/nodes/${i}${o}`);return this.ingestRegistry(a.kindRegistry),this.ingestContributionsRegistry(a.contributionsRegistry),this.ingestProviderRegistry(a.providerRegistry),a}catch(a){if(a instanceof u&&a.code==="not-found")return null;throw a}}async listLinks(e={}){let r=nn(e),i=await this.getJson(`${m}/links${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async listIssues(e={}){let r=rn(e),i=await this.getJson(`${m}/issues${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async loadGraph(e="ascii"){let r=`${m}/graph?format=${encodeURIComponent(e)}`;try{return await W(this.http.get(r,{responseType:"text"}))}catch(i){throw this.translateError(i)}}async loadConfig(){let e=await this.getJson(`${m}/config`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.value}async listPlugins(){let e=await this.getJson(`${m}/plugins`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e}async setPluginEnabled(e,r){let i=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}`,{enabled:r});return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async setPluginExtensionEnabled(e,r,i){let o=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}/extensions/${encodeURIComponent(r)}`,{enabled:i});return this.ingestRegistry(o.kindRegistry),this.ingestContributionsRegistry(o.contributionsRegistry),this.ingestProviderRegistry(o.providerRegistry),o}async applyPluginChanges(e){let r=await this.patchJson(`${m}/plugins`,{changes:e});return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async getPreferences(){return await this.getJson(`${m}/preferences`)}async setPreferences(e){return await this.patchJson(`${m}/preferences`,e)}async getProjectPreferences(){return await this.getJson(`${m}/project-preferences`)}async setProjectPreferences(e){return await this.patchJson(`${m}/project-preferences`,e)}async getProjectIgnore(){return await this.getJson(`${m}/project-ignore`)}async setProjectIgnore(e){return await this.patchJson(`${m}/project-ignore`,e)}async getActiveProvider(){return await this.getJson(`${m}/active-provider`)}async setActiveProvider(e){return await this.patchJson(`${m}/active-provider`,{activeProvider:e})}async setFavorite(e){let r=he(e);try{await W(this.http.put(`${m}/favorites/${r}`,null))}catch(i){throw this.translateError(i)}}async unsetFavorite(e){let r=he(e);try{await W(this.http.delete(`${m}/favorites/${r}`))}catch(i){throw this.translateError(i)}}async bumpSidecar(e,r={}){let i={nodePath:e};return r.force!==void 0&&(i.force=r.force),r.confirm!==void 0&&(i.confirm=r.confirm),this.patchJson(`${m}/sidecar/bump`,i,"POST")}async dispatchAction(e,r,i={}){let o=e.split("/").map(encodeURIComponent).join("/"),a={nodePath:r};return i.input!==void 0&&(a.input=i.input),i.confirm!==void 0&&(a.confirm=i.confirm),i.always!==void 0&&(a.always=i.always),this.patchJson(`${m}/actions/${o}`,a,"POST")}async getUpdateStatus(){return this.getJson(`${m}/update-status`)}async getRegisteredAnnotations(){return(await this.getJson(`${m}/annotations/registered`)).items}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}ingestProviderRegistry(e){e&&this.providerRegistry.ingest(e)}ingestContributionsRegistry(e){this.contributionsRegistry.setRegistry(e)}async lookupContribution(e,r,i){let o=new URLSearchParams({path:i});try{return(await this.getJson(`${m}/contributions/${encodeURIComponent(e)}/${encodeURIComponent(r)}?${o.toString()}`)).items[0]??null}catch{return null}}events(){return this.ws.events$}async getJson(e){try{return await W(this.http.get(e))}catch(r){throw this.translateError(r)}}async patchJson(e,r,i="PATCH"){try{let o=i==="POST"?this.http.post(e,r):this.http.patch(e,r);return await W(o)}catch(o){throw this.translateError(o)}}translateError(e){if(e instanceof u)return e;if(e instanceof Qe){let i=on(e.error);return i?new u(i.error.code,i.error.message,i.error.details):new u("internal",e.message||z.errors.malformedResponse)}let r=e instanceof Error?e.message:String(e);return new u("internal",r)}static \u0275fac=function(r){return new(r||n)(Q(G),Q(F),Q(J),Q(Z),Q(K))};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function tn(n){let t=new URLSearchParams;n.kind&&n.kind.length>0&&t.set("kind",n.kind.join(",")),n.hasIssues!==void 0&&t.set("hasIssues",String(n.hasIssues)),n.path&&t.set("path",n.path),n.limit!==void 0&&t.set("limit",String(n.limit)),n.offset!==void 0&&t.set("offset",String(n.offset));let e=t.toString();return e?`?${e}`:""}function nn(n){let t=new URLSearchParams;n.kind&&n.kind.length>0&&t.set("kind",n.kind.join(",")),n.from&&t.set("from",n.from),n.to&&t.set("to",n.to);let e=t.toString();return e?`?${e}`:""}function rn(n){let t=new URLSearchParams;n.severity&&t.set("severity",n.severity),n.analyzerId&&t.set("analyzerId",n.analyzerId),n.node&&t.set("node",n.node),n.nodes&&n.nodes.length>0&&t.set("nodes",n.nodes.join(","));let e=t.toString();return e?`?${e}`:""}function on(n){if(typeof n!="object"||n===null)return null;let t=n;if(t.ok!==!1)return null;let e=t.error;if(typeof e!="object"||e===null)return null;let r=e;return typeof r.code!="string"||typeof r.message!="string"?null:{ok:!1,error:{code:r.code,message:r.message,details:r.details}}}var sn="data.json",an="data.meta.json",ue=class{fetchImpl;metaPromise=null;dataPromise=null;kindRegistry;providerRegistry;contributionsRegistry;constructor(t=globalThis.fetch.bind(globalThis),e,r,i){this.fetchImpl=t,this.kindRegistry=e??s(J),this.providerRegistry=r??s(K),this.contributionsRegistry=i??s(Z)}async health(){return(await this.loadMeta()).health}async loadScan(){let[t,e]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),t}async loadScanMeta(){let t=await this.loadScan();return xe(ke({},t),{nodes:[],links:[],issues:[]})}async loadFolders(){let t=await this.loadScan(),e=new Map,r=new Map;for(let i of t.issues){let o=i.severity==="error"?e:i.severity==="warn"?r:null;if(o)for(let a of i.nodeIds)o.set(a,(o.get(a)??0)+1)}return t.nodes.map(i=>({path:i.path,kind:i.kind,linksInCount:i.linksInCount,linksOutCount:i.linksOutCount,tokensTotal:i.tokens?.total??null,modifiedAtMs:i.modifiedAtMs??null,errorCount:e.get(i.path)??0,warnCount:r.get(i.path)??0,sidecarStatus:i.sidecar?.status??null}))}async loadBranch(t=[],e){let r=await this.loadScan(),i=t.filter(y=>y!==""),o=y=>i.length===0||i.some(H=>y===H||y.startsWith(`${H}/`)),a=r.nodes.filter(y=>o(y.path)).sort((y,H)=>y.path.localeCompare(H.path)),h=a.length,k=e!==void 0&&e>0?e:h,v=a.slice(0,k),E=new Set(v.map(y=>y.path)),L=r.links.filter(y=>E.has(y.source)&&E.has(y.resolvedTarget??y.target)),Gt=r.issues.filter(y=>y.nodeIds.some(H=>E.has(H)));return{schemaVersion:"1",kind:"branch",branch:{paths:[...i],total:h,rendered:v.length,truncated:h>k,cap:k},nodes:v,links:L,issues:Gt}}primeContributionsRegistry(t){this.contributionsRegistry.setRegistry(t.contributionsRegistry)}async listNodes(t={}){let e=await this.loadMeta();if(ln(t))return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),e.nodes;let r=await this.loadData(),i=r.issues,o=r.nodes;if(t.kind&&t.kind.length>0){let E=new Set(t.kind);o=o.filter(L=>E.has(L.kind))}if(t.path){let E=pn(t.path);o=o.filter(L=>E.test(L.path))}if(t.hasIssues===!0){let E=St(i);o=o.filter(L=>E.has(L.path))}else if(t.hasIssues===!1){let E=St(i);o=o.filter(L=>!E.has(L.path))}let a=o.length,h=t.offset??0,k=t.limit??1e3,v=o.slice(h,h+k);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"nodes",items:v,filters:{kind:t.kind??null,hasIssues:t.hasIssues??null,path:t.path?[t.path]:null},counts:{total:a,returned:v.length,page:{offset:h,limit:k}},kindRegistry:e.nodes.kindRegistry,providerRegistry:e.nodes.providerRegistry}}async getNode(t,e={}){let[r,i]=await Promise.all([this.loadData(),this.loadMeta()]),o=r.nodes.find(v=>v.path===t);if(!o)return null;let a=r.links.filter(v=>v.target===t),h=r.links.filter(v=>v.source===t),k=r.issues.filter(v=>v.nodeIds.includes(t));return this.kindRegistry.ingest(i.nodes.kindRegistry),this.providerRegistry.ingest(i.nodes.providerRegistry),this.primeContributionsRegistry(i),{schemaVersion:"1",kind:"node",item:o,links:{incoming:a,outgoing:h},issues:k,kindRegistry:i.nodes.kindRegistry,providerRegistry:i.nodes.providerRegistry}}async listLinks(t={}){let e=await this.loadMeta();if(cn(t))return this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),e.links;let i=(await this.loadData()).links;if(t.kind&&t.kind.length>0){let o=new Set(t.kind);i=i.filter(a=>o.has(a.kind))}return t.from&&(i=i.filter(o=>o.source===t.from)),t.to&&(i=i.filter(o=>o.target===t.to)),this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"links",items:i,filters:{kind:t.kind??null,from:t.from??null,to:t.to??null},counts:{total:i.length,returned:i.length},kindRegistry:e.links.kindRegistry,providerRegistry:e.links.providerRegistry}}async listIssues(t={}){let e=await this.loadMeta();if(dn(t))return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),e.issues;let i=(await this.loadData()).issues;if(t.severity&&(i=i.filter(o=>o.severity===t.severity)),t.analyzerId&&(i=i.filter(o=>o.analyzerId===t.analyzerId)),t.node&&(i=i.filter(o=>o.nodeIds.includes(t.node))),t.nodes&&t.nodes.length>0){let o=new Set(t.nodes);i=i.filter(a=>a.nodeIds.some(h=>o.has(h)))}return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"issues",items:i,filters:{severity:t.severity??null,analyzerId:t.analyzerId??null,node:t.node??null,nodes:t.nodes&&t.nodes.length>0?[...t.nodes]:null},counts:{total:i.length,returned:i.length},kindRegistry:e.issues.kindRegistry,providerRegistry:e.issues.providerRegistry}}async loadGraph(t="ascii"){if(t!=="ascii")throw new u("bad-query",z.errors.graphFormatNotInDemo(t));return(await this.loadMeta()).graph.ascii}async loadConfig(){let t=await this.loadMeta();return this.kindRegistry.ingest(t.config.kindRegistry),this.providerRegistry.ingest(t.config.providerRegistry),this.primeContributionsRegistry(t),t.config.value}async listPlugins(){let t=await this.loadMeta();return this.kindRegistry.ingest(t.plugins.kindRegistry),this.providerRegistry.ingest(t.plugins.providerRegistry),this.primeContributionsRegistry(t),t.plugins}async setFavorite(t){throw new u("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async unsetFavorite(t){throw new u("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async setPluginEnabled(t,e){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async setPluginExtensionEnabled(t,e,r){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async applyPluginChanges(t){throw new u("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async runScan(){throw new u("demo-readonly","Manual scan is not available in demo mode (static bundle is immutable).")}async getPreferences(){return{updateCheck:{enabled:!0},telemetry:{errorsEnabled:!1,usageCliEnabled:!1,usageUiEnabled:!1,anonymousId:null,environment:"prod"}}}async setPreferences(t){throw new u("demo-readonly","Preference toggles are not available in demo mode (static bundle is immutable).")}async getProjectPreferences(){return{allowSidecarWriters:!0,scan:{referencePaths:[]}}}async setProjectPreferences(t){throw new u("demo-readonly","Project preferences are not available in demo mode (static bundle is immutable).")}async getProjectIgnore(){return{patterns:[]}}async setProjectIgnore(t){throw new u("demo-readonly","Ignore patterns are not available in demo mode (static bundle is immutable).")}async getActiveProvider(){return(await this.loadMeta()).activeProvider??{activeProvider:"markdown",detected:[],source:"default",selectable:[]}}async setActiveProvider(t){throw new u("demo-readonly","Active provider lens is not available in demo mode (static bundle is immutable).")}async lookupContribution(){return null}async bumpSidecar(t,e={}){throw new u("demo-readonly","Sidecar bump is not available in demo mode (static bundle is immutable).")}async dispatchAction(t,e,r={}){throw new u("demo-readonly","Actions are not available in demo mode (static bundle is immutable).")}async getUpdateStatus(){return{current:(await this.loadMeta()).health.implVersion,latest:null,isOutdated:!1,checkedAt:null,shownAt:null}}async getRegisteredAnnotations(){return[]}events(){return we}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(an)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(sn)),this.dataPromise}async fetchJson(t){let e;try{e=await this.fetchImpl(t)}catch(r){let i=r instanceof Error?r.message:String(r);throw new u("internal",z.errors.demoFetchFailed(t,i))}if(!e.ok)throw new u("internal",z.errors.demoFetchFailed(t,`HTTP ${e.status}`));try{return await e.json()}catch(r){let i=r instanceof Error?r.message:String(r);throw new u("internal",z.errors.demoParseFailed(t,i))}}};function ln(n){return!(n.kind&&n.kind.length>0||n.hasIssues!==void 0||n.path||n.offset!==void 0&&n.offset!==0||n.limit!==void 0)}function cn(n){return!(n.kind&&n.kind.length>0||n.from||n.to)}function dn(n){return!(n.severity||n.analyzerId||n.node||n.nodes&&n.nodes.length>0)}function St(n){let t=new Set;for(let e of n)for(let r of e.nodeIds)t.add(r);return t}function pn(n){let e=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function Mt(){let n=s(N);if(n==="live")return new Pt(s(G),s(F));if(n==="demo")return new ue;let t=n;throw new Error(z.errors.unknownMode(String(t)))}var Rt="search",Tt="kinds",Et="linkKinds",Ot="favoritesOnly",It="severities",mn=["error","warn"],At=(()=>{class n{filters=s(gt);router=s(nt);activatedRoute=s(et);kindRegistry=s(J);destroyRef=s(Ee);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.pipe(ct(this.destroyRef)).subscribe(e=>{if(e instanceof qe){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),re(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),r=new URLSearchParams;for(let[i,o]of Object.entries(e.queryParams))Array.isArray(o)?r.set(i,o.join(",")):o!=null&&r.set(i,String(o));return this.activatedRoute,r}applyUrlToFilters(e){let r=e.get(Rt)??"";r!==this.filters.searchText()&&this.filters.setSearchText(r);let i=gn(e.get(Tt),this.kindRegistry.kinds().map(v=>v.name));_e(i,this.filters.selectedKinds())||this.filters.setKinds(i);let o=e.get(Ot)==="true";o!==this.filters.favoritesOnly()&&this.filters.setFavoritesOnly(o);let a=hn(e.get(Et));_e(a,this.filters.selectedLinkKinds())||this.filters.setLinkKinds(a);let h=un(e.get(It)),k=[];this.filters.severityErrorActive()&&k.push("error"),this.filters.severityWarnActive()&&k.push("warn"),_e(h,k)||this.filters.setSeverityFilters(h)}computeQueryParams(){let e=this.filters.searchText().trim(),r=this.filters.selectedKinds(),i=this.filters.selectedLinkKinds(),o=this.filters.favoritesOnly(),a=[];return this.filters.severityErrorActive()&&a.push("error"),this.filters.severityWarnActive()&&a.push("warn"),{[Rt]:e.length>0?e:null,[Tt]:r.length>0?r.join(","):null,[Et]:i.length>0?i.join(","):null,[Ot]:o?"true":null,[It]:a.length>0?a.join(","):null}}writeQueryParams(e){let r=this.currentParams(),i=new Map(Object.entries(e)),o=!1;for(let[a,h]of i)if((r.get(a)??null)!==h){o=!0;break}o&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function gn(n,t){if(!n)return[];let e=new Set(t);return n.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function hn(n){if(!n)return[];let t=new Set(mt);return n.split(",").map(e=>e.trim()).filter(e=>t.has(e))}function un(n){if(!n)return[];let t=new Set(mn);return n.split(",").map(e=>e.trim()).filter(e=>t.has(e))}function _e(n,t){if(n.length!==t.length)return!1;for(let e=0;e<n.length;e++)if(n[e]!==t[e])return!1;return!0}var Dt={healthFailed:n=>`ProjectInfoService: /api/health probe failed (${n})`};var q=(()=>{class n{dataSource=s(ne);status=B(null);cwd=d(()=>this.status()?.cwd??null);implVersion=d(()=>this.status()?.implVersion??null);dev=d(()=>this.status()?.dev===!0);activeProviderState=B(null);activeProvider=d(()=>this.activeProviderState());async load(){try{let e=await this.dataSource.health();this.status.set(e)}catch(e){let r=e instanceof Error?e.message:String(e);console.warn(Dt.healthFailed(r))}await this.reloadActiveProvider()}async reloadActiveProvider(){try{let e=await this.dataSource.getActiveProvider();this.activeProviderState.set(e.activeProvider)}catch{}}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Ft=(()=>{class n extends le{title=s(Ze);projectInfo=s(q);constructor(){super(),re(()=>{let e=Nt(this.projectInfo.cwd()),r=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(e,r))})}updateTitle(e){let r=Nt(this.projectInfo.cwd()),i=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(r,i))}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Nt(n){if(!n)return null;let t=n.replace(/[\\/]+$/,"");if(!t||t===".")return null;let e=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return(e>=0?t.slice(e+1):t)||null}var ye=!1,Ce=null;async function $t(n){if(ye||fe===""||!n.consentEnabled)return;let t=await import("./chunk-3ANNEMV4.js");t.init({dsn:fe,release:n.release??void 0,environment:n.environment,integrations:e=>fn(t.breadcrumbsIntegration,e),tracesSampleRate:0,sendDefaultPii:!1,allowUrls:[/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?\//],beforeSend:e=>ft(e)}),Ce=t,ye=!0}function Lt(n){!ye||Ce===null||Ce.captureException(n)}function fn(n,t){return t.filter(e=>e.name!=="BrowserSession").map(e=>e.name==="Breadcrumbs"?n({console:!1,fetch:!1,xhr:!1,dom:!1}):e)}var jt=(()=>{class n{handleError(e){console.error(e),Lt(e)}static \u0275fac=function(r){return new(r||n)};static \u0275prov=R({token:n,factory:n.\u0275fac})}return n})();function vn(...n){for(let t of n)Promise.resolve(t.load())}var zt={providers:[Ae(),{provide:Ie,useClass:jt},it(wt,rt()),{provide:le,useClass:Ft},Ye(Ge()),xt(),st({}),ee(async()=>{let n=s(ot),[{default:t},{definePreset:e}]=await Promise.all([import("./chunk-OGEE252A.js"),import("./chunk-3ZAHOYQ7.js")]),r=e(t,{semantic:{primary:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#4C1D95",900:"#2E1065",950:"#1E0A4D"}}});n.setThemeConfig({theme:{preset:r,options:{darkModeSelector:".app-dark"}}})}),{provide:N,useFactory:dt},{provide:ne,useFactory:Mt},ee(async()=>{let n=s(ne),t=s(ie);try{let[e,r]=await Promise.all([n.getPreferences(),n.health()]);await Promise.all([$t({consentEnabled:e.telemetry.errorsEnabled,release:r.implVersion?`skill-map-cli@${r.implVersion}`:null,environment:e.telemetry.environment}),vt({consentEnabled:e.telemetry.usageUiEnabled,distinctId:e.telemetry.anonymousId})]),bt({environment:e.telemetry.environment}),t.syncTheme()}catch{}}),ee(()=>{vn(s(V),s(ge),s(q))}),ee(()=>{s(At),s(ht),s(ie)})]};var X={toggleToAuto:"Switch to auto theme (follow system)",toggleToLight:"Switch to light theme",toggleToDark:"Switch to dark theme",currentAuto:"Auto theme (follows system)",currentLight:"Light theme",currentDark:"Dark theme"};var Bt={body:"You are viewing a static demo of skill-map's UI. Install it:",installCommand:"npm i -g @skill-map/cli",homeCta:"\u2190 Back to skill-map.ai",homeHref:"/",dismissAria:"Dismiss demo banner"};function _n(n,t){if(n&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"code",3),g(5),p()(),c(6,"a",4),g(7),p(),c(8,"p-button",5),T("onClick",function(){O(e);let i=f();return I(i.dismiss())}),p()()}if(n&2){let e=f();l(3),S(" ",e.texts.body," "),l(2),_(e.texts.installCommand),l(),b("href",e.texts.homeHref,oe),l(),_(e.texts.homeCta),l(),b("ariaLabel",e.texts.dismissAria)("text",!0)("rounded",!0)}}var Ut="sm.demoBannerDismissed",Vt=(()=>{class n{mode=s(N);texts=Bt;dismissed=B(this.readDismissed());visible=d(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Ut,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Ut)==="1"}catch{return!1}}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-demo-banner"]],decls:1,vars:1,consts:[["role","status","data-testid","demo-banner",1,"demo-banner"],["aria-hidden","true",1,"demo-banner__icon","fa-solid","fa-circle-info"],[1,"demo-banner__body"],["data-testid","demo-banner-install",1,"demo-banner__cmd"],["data-testid","demo-banner-home",1,"demo-banner__home",3,"href"],["icon","fa-solid fa-xmark","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(r,i){r&1&&x(0,_n,9,7,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[me,pe],styles:["[_nghost-%COMP%]{display:block}.demo-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--p-highlight-background);color:var(--p-text-color);font-size:.875rem}.demo-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--p-primary-color)}.demo-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.demo-banner__cmd[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-md);padding:.05rem .4rem;font-size:.85em;margin-left:.25rem}.demo-banner__home[_ngcontent-%COMP%]{color:var(--p-primary-color);font-weight:500;text-decoration:none;white-space:nowrap}.demo-banner__home[_ngcontent-%COMP%]:hover, .demo-banner__home[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}"],changeDetection:0})}return n})();var Jt={body:n=>`The scan hit its ceiling of ${n} ${n===1?"file":"files"}; some files were dropped from the corpus. Trim .skillmapignore or raise --max-scan.`,cta:"Edit .skillmapignore",ctaAria:"Open Settings to edit ignored patterns"};function yn(n,t){if(n&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.onCta())}),g(5),Y()()}if(n&2){let e=f();l(3),S(" ",e.state().body," "),l(),C("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var Kt=(()=>{class n{loader=s(V);texts=Jt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta();if(!e||e.scanTruncated!==!0)return{visible:!1,body:""};let r=e.scanCeiling;return r===void 0?{visible:!1,body:""}:{visible:!0,body:this.texts.body(r)}});visible=d(()=>this.state().visible);onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-oversized-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","oversized-banner",1,"oversized-banner"],["aria-hidden","true",1,"oversized-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","oversized-banner-body",1,"oversized-banner__body"],["type","button","data-testid","oversized-banner-cta",1,"oversized-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,yn,6,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.oversized-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.oversized-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.oversized-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.oversized-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.oversized-banner__cta[_ngcontent-%COMP%]:hover, .oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Xt={headline:n=>`${n} ${n===1?"file":"files"} skipped, ${n===1?"it exceeds":"they exceed"} the max file size.`,more:"...",seeConsole:"See the full list in the console.",cta:"Open Project settings",ctaAria:"Open Settings to adjust the max file size or ignore patterns"};function kn(n,t){if(n&1&&(c(0,"span",4),g(1),p()),n&2){let e=f(2);b("pTooltip",e.state().tooltip),l(),_(e.texts.more)}}function xn(n,t){if(n&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"span",3),g(5),p(),x(6,kn,2,2,"span",4),p(),c(7,"button",5),T("click",function(){O(e);let i=f();return I(i.onCta())}),g(8),p()()}if(n&2){let e=f();l(3),S(" ",e.texts.headline(e.state().count)," "),l(2),S(" ",e.state().first," "),l(),w(e.state().hasMore?6:-1),l(),C("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var wn=5,Ht=(()=>{class n{loader=s(V);texts=Xt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta(),r=e?.oversizedFiles??[],i=e?.stats?.filesOversized??r.length;if(i<=0)return{visible:!1,count:0,first:"",hasMore:!1,tooltip:""};let o=r[0]?this.describe(r[0]):"",a=i>1,h="";if(a){let k=r.slice(1);i-1>wn?h=this.texts.seeConsole:h=k.map(v=>this.describe(v)).join(`
4
+ `)}return{visible:!0,count:i,first:o,hasMore:a,tooltip:h}});visible=d(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${pt(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,xn,9,5,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[de,ce],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Wt={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function Pn(n,t){if(n&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.reconnect())}),te(5,"span",4),g(6),Y()()}if(n&2){let e=f();l(3),_(e.texts.body),l(),C("aria-label",e.texts.reconnectAria),l(2),S(" ",e.texts.reconnectCta," ")}}var Qt=(()=>{class n{mode=s(N);ws=s(F);texts=Wt;visible=d(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(r,i){r&1&&x(0,Pn,7,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return n})();var Sn=()=>[import("./chunk-TLMV4LOQ.js").then(n=>n.SettingsModal)];function Mn(n,t){if(n&1&&(c(0,"span",11),g(1),p()),n&2){let e=f();b("pTooltip",e.versionTooltip()),C("aria-label",e.texts.devChipA11y),l(),_(e.texts.devChip)}}function Rn(n,t){if(n&1&&(c(0,"span",12),g(1),p()),n&2){let e=f();b("pTooltip",e.versionTooltip()),C("aria-label",e.versionA11y()),l(),_(e.versionLabel())}}function Tn(n,t){if(n&1&&(c(0,"span",24),g(1),p()),n&2){let e=t,r=f();Ue("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",r.texts.lensChipTooltip(e.label)),C("aria-label",r.texts.lensChipA11y(e.label)),l(),_(e.label)}}function En(n,t){if(n&1){let e=A();c(0,"button",25),T("click",function(){O(e);let i=f();return I(i.copyUpdateCommand())}),P(1,"i",26),c(2,"span"),g(3),p()(),c(4,"a",27),P(5,"i",28),p()}if(n&2){let e=f();b("pTooltip",e.updateChipTooltip()),C("aria-label",e.updateChipA11y()),l(),Je(e.updateChipIcon()),l(2),_(e.updateChipText()),l(),b("href",e.npmLinkUrl,oe)("pTooltip",e.npmLinkTooltip),C("aria-label",e.npmLinkA11y)}}function On(n,t){if(n&1&&(c(0,"p",15)(1,"bdi",29),g(2),p()()),n&2){let e=t;C("title",e),l(2),_(e)}}function In(n,t){if(n&1){let e=A();c(0,"sm-settings-modal",30),T("visibleChange",function(i){O(e);let o=f();return I(o.onSettingsVisibleChange(i))}),p()}if(n&2){let e=f();b("visible",e.settingsOpen())}}var Yt=(()=>{class n{loader=s(V);theme=s(_t);projectInfo=s(q);providerRegistry=s(K);scanTrigger=s(kt);wsEvents=s(F);usageTracker=s(ie);updateCheck=s(ge);texts=j;isDemo=s(N)==="demo";betaLabel=this.isDemo?this.texts.betaDemo:this.texts.beta;settingsTexts=Ct;settingsOpen=B(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=d(()=>this.scanTrigger.scanning()||this.wsEvents.scanActive());scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=B(!1);updateChipText=d(()=>this.updateChipCopied()?M.copiedLabel:M.available);updateChipIcon=d(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=d(()=>this.updateChipCopied()?M.copiedTooltip:M.tooltip(this.updateCheck.latest()??""));updateChipA11y=d(()=>M.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=M.npmLinkUrl;npmLinkTooltip=M.npmLinkTooltip;npmLinkA11y=M.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(M.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=d(()=>M.versionLabel(this.updateCheck.current()??""));versionTooltip=d(()=>M.versionTooltip(this.updateCheck.current()??""));versionA11y=d(()=>M.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=d(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=d(()=>yt(this.loader.nodes(),this.loader.scan()));linkCount=d(()=>this.linkAnalysis().raw);mapInfoTooltip=d(()=>j.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=d(()=>j.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=d(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let r=this.loader.scan()?.roots??[];if(r.length===0)return"";let i=r[0].replace(/[\\/]+$/,"");return!i||i==="."?"":i});isDevMode=Ke();themeMode=this.theme.mode;markSrc=d(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=d(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=d(()=>{switch(this.themeMode()){case"auto":return X.toggleToLight;case"light":return X.toggleToDark;case"dark":return X.toggleToAuto}});themeTooltip=d(()=>{switch(this.themeMode()){case"auto":return X.currentAuto;case"light":return X.currentLight;case"dark":return X.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(r){return new(r||n)};static \u0275cmp=D({type:n,selectors:[["sm-root"]],decls:39,vars:28,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__beta"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(r,i){if(r&1&&(c(0,"div",0)(1,"div",1),P(2,"i",2),c(3,"h2",3),g(4),p(),c(5,"p",4),g(6),p(),c(7,"p",5),g(8),p()()(),c(9,"div",6),P(10,"sm-demo-banner"),c(11,"sm-oversized-banner",7),T("openSettings",function(){return i.openSettings()}),p(),c(12,"sm-skipped-files-banner",7),T("openSettings",function(){return i.openSettings()}),p(),P(13,"sm-connection-banner"),c(14,"header",8)(15,"div",9),P(16,"img",10),c(17,"div")(18,"h1"),g(19),x(20,Mn,2,3,"span",11)(21,Rn,2,3,"span",12),x(22,Tn,2,7,"span",13),c(23,"span",14),g(24),p(),x(25,En,6,8),p(),x(26,On,3,2,"p",15),p()(),c(27,"nav",16),P(28,"sm-view-contributions-host",17),p(),c(29,"div",18)(30,"button",19),T("click",function(){return i.triggerScan()}),P(31,"i",20),p(),c(32,"p-button",21),T("onClick",function(){return i.toggleTheme()}),p(),c(33,"p-button",22),T("onClick",function(){return i.openSettings()}),p()()(),c(34,"main",23),P(35,"router-outlet"),p(),je(36,In,1,1),ze(37,36,Sn),p()),r&2){let o,a,h;l(4),_(i.texts.viewportWarning.title),l(2),_(i.texts.viewportWarning.subtitle),l(2),_(i.texts.viewportWarning.body),l(8),b("ngSrc",i.markSrc()),l(3),S(" ",i.texts.brand," "),l(),w(i.isDevBuild()?20:(o=i.updateCheck.current())?21:-1,o),l(2),w((a=i.lensChip())?22:-1,a),l(),C("aria-label",i.betaLabel),l(),_(i.betaLabel),l(),w(i.updateCheck.isOutdated()&&!i.isDevMode?25:-1),l(),w((h=i.rootLabel())?26:-1,h),l(),C("aria-label",i.texts.a11y.viewSwitcher),l(),b("node",null),l(2),Ve("is-spinning",i.scanning()),b("pTooltip",i.mapInfoTooltip())("disabled",i.scanning()),C("aria-label",i.mapInfoA11y()),l(2),b("icon",i.themeIcon())("ariaLabel",i.themeLabel())("pTooltip",i.themeTooltip())("text",!0)("rounded",!0),l(),b("ariaLabel",i.settingsTexts.a11y.triggerLabel)("pTooltip",i.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),l(4),Be(i.settingsOpen())}},dependencies:[tt,me,pe,lt,de,ce,at,Xe,Vt,Kt,Ht,Qt,ut],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__beta[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__refresh.is-spinning[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_shell-refresh-spin 1s linear infinite}@keyframes _ngcontent-%COMP%_shell-refresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return n})();We(Yt,zt).catch(n=>console.error(n));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skill-map/cli",
3
- "version": "0.68.0",
3
+ "version": "0.68.1",
4
4
  "description": "skill-map reference implementation — kernel + CLI + adapters.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -61,7 +61,7 @@
61
61
  "smol-toml": "1.7.0",
62
62
  "typanion": "3.14.0",
63
63
  "ws": "8.21.0",
64
- "@skill-map/spec": "0.62.0"
64
+ "@skill-map/spec": "0.62.1"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@eslint/js": "10.0.1",
@@ -1,166 +0,0 @@
1
- # Part 2 (basic track): Connect the harness (step library, `connect-harness`)
2
-
3
- The wiring part, basic track. Part 1 grew a small set of standalone nodes around
4
- the handbook; here the tester turns that scatter into a connected graph: a link
5
- checker, a publish skill that pulls three pieces together, the handbook becoming
6
- a real hub, and a close-up on confidence. Every connector on this lens is a
7
- **markdown reference** (`[text](path)`); there is no `/`-invoke or `@`-mention
8
- here, those are rich-track features. `pace: auto-advance`, `preflight: seed`
9
- (builds on the Part 1 harness; `harness-built`). Shared conventions live in
10
- `_core.md`. Narrate with `<provider_dir>` = `.agents/skills`.
11
-
12
- ## Chapter `check-links` - The link checker (~3 min)
13
-
14
- **Context**: the harness needs a guard that runs before publishing: a skill that
15
- walks every page and checks the internal links resolve. We create it here (a
16
- standalone `skill` node); the `publish` skill in the next chapter is what calls
17
- it.
18
-
19
- Lay the `check-links` skill (content lives in `fixtures-data/`). Backstage
20
- (silent):
21
-
22
- ```
23
- node .claude/skills/sm-tutorial/scripts/fixtures.js lay harness --only "__PROVIDER__/skills/check-links/SKILL.md" --provider <provider> --lang <lang>
24
- ```
25
-
26
- Tell the tester:
27
-
28
- > I added a new helper to your harness: a skill called `check-links` (its job is
29
- > to make sure every internal link on the site works before you publish). A new
30
- > `skill` node appeared on the **Map**. It stands alone for now, the next step
31
- > gives it a caller.
32
- >
33
- > See the new skill node?
34
-
35
- Wait for confirmation. Mark `check-links`: done.
36
-
37
- ## Chapter `publish` - The publish skill (~4 min)
38
-
39
- **Context**: the chapter where the graph comes alive. The `publish` skill ties
40
- three pieces together in one body: it points at the link checker, at the content
41
- editor, and at the deploy runbook. On this lens all three are **markdown
42
- references**, so three reference arrows light up from a single new node.
43
-
44
- Tell the tester to create the file themselves (Inviolable rule #2). Render the
45
- block as a **top-level fenced code block** at column 0, NOT inside the `> `
46
- blockquote, so the frontmatter fences (`---`) land on column 0 (indented fences
47
- never parse, and `sm check` then warns `frontmatter-malformed`).
48
-
49
- > Create `<provider_dir>/publish/SKILL.md` with exactly this content (the first
50
- > line is `---`, nothing before it):
51
-
52
- ```markdown
53
- ---
54
- name: publish
55
- description: |
56
- Publishes the portfolio: runs the link check, hands off to the
57
- content editor for any last fixes, then follows the deploy runbook.
58
- ---
59
-
60
- # publish
61
-
62
- The one skill you run when the site is ready to go out.
63
-
64
- ## Steps
65
- 1. Run the [check-links](../check-links/SKILL.md) skill on the pages in public/. If it reports broken links, stop and fix them first.
66
- 2. If a page needs a content fix, hand the change to [content-editor](../content-editor/SKILL.md).
67
- 3. Follow the [deploy runbook](../../../docs/DEPLOY.md): regenerate pages, run the link check, start the server.
68
- ```
69
-
70
- Continue the tester message:
71
-
72
- > Save it. Watch the **Map**: **three** new arrows light up at once from the new
73
- > `publish` node, all of them `references` (the open standard's one connector),
74
- > each landing on a real file:
75
- >
76
- > - `publish -> check-links` (the `[check-links](../check-links/SKILL.md)` link)
77
- > - `publish -> content-editor` (the `[content-editor](../content-editor/SKILL.md)` link)
78
- > - `publish -> docs/DEPLOY.md` (the `[deploy runbook](../../../docs/DEPLOY.md)` link)
79
- >
80
- > One node, three connectors, all references. On a vendor lens (claude/codex) the
81
- > first two would be a `/`-invoke and an `@`-mention; the open standard wires
82
- > everything with file links, and that is all this lens emits. The harness is
83
- > starting to look like a real graph.
84
- >
85
- > 💡 Tip: to tidy the layout, click **Re-arrange layout** in the map toolbar.
86
- >
87
- > Did the three arrows appear?
88
-
89
- Wait for confirmation. You MAY `Read` the file to verify the `---` fences are
90
- flush at column 0 (if `sm check` flags `frontmatter-malformed`, the fences got
91
- indented on paste, re-align every line flush left). Mark `publish`: done.
92
-
93
- ## Chapter `links` - The handbook becomes the hub (~4 min)
94
-
95
- **Context**: the handbook (`AGENTS.md`) has been a lonely node since Part 1. Here
96
- it becomes the hub: two bullets point it at the content editor and the publish
97
- skill. We also give the content editor a reference to the style guide it follows.
98
-
99
- Apply both edits (content lives in `fixtures-data/`). The first appends two hub
100
- bullets (markdown links) to `AGENTS.md`; the second adds the style-guide
101
- reference to the content-editor skill. Backstage (silent):
102
-
103
- ```
104
- node .claude/skills/sm-tutorial/scripts/fixtures.js edit agents-hub --provider <provider> --lang <lang>
105
- node .claude/skills/sm-tutorial/scripts/fixtures.js edit content-editor-style --provider <provider> --lang <lang>
106
- ```
107
-
108
- Tell the tester:
109
-
110
- > Two edits, and the **Map** fills in. Your handbook (`AGENTS.md`) is now the hub:
111
- > it points at the content editor and at the publish skill. And the content
112
- > editor now reaches the style guide it follows. New arrows, all `references`:
113
- >
114
- > - `AGENTS.md -> content-editor` (a `[content-editor](...)` link)
115
- > - `AGENTS.md -> publish` (a `[publish](...)` link)
116
- > - `content-editor -> docs/STYLE.md` (a `[style guide](...)` link)
117
- >
118
- > The whole harness is wired end to end now: the handbook reaches the work, the
119
- > work reaches the docs, and `publish` pulls the publish flow together, every
120
- > connection a markdown reference, the one link the open standard documents.
121
- >
122
- > Did the new arrows light up?
123
-
124
- Wait for confirmation. You MAY `Read` the two files to verify. Mark `links`: done.
125
-
126
- ## Chapter `confidence` - How sure is each link (~3 min)
127
-
128
- **Context**: skill-map records how sure it is of every connection and draws it as
129
- opacity. In this harness every link resolves to a real file, so they all read
130
- solid (1.00); the broken case is the one from the prologue (the `demo-guideline`
131
- link with no `.md`, drawn as no arrow and flagged at 0.50, then fixed by hand).
132
-
133
- No file edits, pure observation.
134
-
135
- Tell the tester:
136
-
137
- > Last beat of this part: how sure is skill-map about each connection? It records
138
- > a **confidence** for every link and draws it as opacity: a link that resolves
139
- > to a real file is solid (**1.00**), one that does not lands fainter, so a glance
140
- > at the **Map** separates solid wiring from problem links.
141
- >
142
- > Open the Inspector for the `publish` node (click it). Scroll to the
143
- > **Connections** panel and read the **Outgoing** rows. Each shows the link kind
144
- > (`references`, the only kind here) and a confidence badge, every one reads
145
- > **1.00**, because each link lands on a file that exists on disk.
146
- >
147
- > Your whole harness reads solid because every link resolves. So what does a link
148
- > that does NOT resolve look like? You met one in the prologue: the
149
- > `demo-guideline` link had no `.md`, so it pointed at a path that did not exist,
150
- > skill-map drew no arrow and flagged it as a **broken reference**, confidence
151
- > knocked to **0.50**. Adding `.md` turned it into a link that landed on the real
152
- > file, and it drew a solid arrow at **1.00**.
153
- >
154
- > So confidence here is really about resolution: **1.00** for a link that lands on
155
- > a real file, **0.50** for one flagged broken. The opacity on the canvas is just
156
- > that number drawn as transparency.
157
- >
158
- > **Note:** why does confidence matter? It mirrors how an agent resolves a
159
- > reference, a deterministic name-and-path lookup, no guessing. That is cheaper
160
- > and does not fail, the same reason a clean, well-named harness is worth keeping.
161
- >
162
- > Do you see every badge reading 1.00 in the Inspector?
163
-
164
- Wait for confirmation. Mark `confidence`: done. Last chapter of the part: apply
165
- §Closing a part (name the part by its title, route back to the menu; do NOT lead
166
- into the next part from here).