@skill-map/cli 0.16.2 → 0.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/tutorial/sm-tutorial.md +167 -119
- package/dist/cli.js +11 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.js +5 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/ui/{chunk-3NHGIRPN.js → chunk-ULHJUHKH.js} +3 -3
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-ZNVY5M44.js → main-JPEDQQLJ.js} +1 -1
- package/package.json +5 -1
package/dist/ui/index.html
CHANGED
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
<style>:root{--ff-white:#ffffff;--ff-black:#000000;--ff-gray-0:#ffffff;--ff-gray-25:#fcfcfc;--ff-gray-50:#f8f8f7;--ff-gray-75:#f2f2f0;--ff-gray-100:#e9e9e6;--ff-gray-150:#dcdcd7;--ff-gray-200:#c9c9c1;--ff-gray-300:#afafa5;--ff-gray-400:#8d8d81;--ff-gray-500:#69695f;--ff-gray-600:#505048;--ff-gray-700:#3c3c36;--ff-gray-800:#272722;--ff-gray-900:#1b1b18;--ff-gray-950:#141412;--ff-gray-1000:#0f0f0d;--ff-alpha-black-04:rgba(15, 15, 13, .04);--ff-alpha-black-06:rgba(15, 15, 13, .06);--ff-alpha-black-08:rgba(15, 15, 13, .08);--ff-alpha-black-10:rgba(15, 15, 13, .1);--ff-alpha-black-12:rgba(15, 15, 13, .12);--ff-alpha-black-15:rgba(15, 15, 13, .15);--ff-alpha-black-20:rgba(15, 15, 13, .2);--ff-alpha-black-30:rgba(15, 15, 13, .3);--ff-alpha-black-40:rgba(15, 15, 13, .4);--ff-alpha-black-60:rgba(15, 15, 13, .6);--ff-alpha-white-04:rgba(255, 255, 255, .04);--ff-alpha-white-06:rgba(255, 255, 255, .06);--ff-alpha-white-08:rgba(255, 255, 255, .08);--ff-alpha-white-10:rgba(255, 255, 255, .1);--ff-alpha-white-12:rgba(255, 255, 255, .12);--ff-alpha-white-15:rgba(255, 255, 255, .15);--ff-alpha-white-20:rgba(255, 255, 255, .2);--ff-alpha-white-30:rgba(255, 255, 255, .3);--ff-alpha-white-40:rgba(255, 255, 255, .4);--ff-alpha-white-60:rgba(255, 255, 255, .6);--ff-blue-100:#e8f2ff;--ff-blue-200:#bad8ff;--ff-blue-300:#7db7ff;--ff-blue-400:#4176ff;--ff-blue-500:#2759db;--ff-blue-600:#1b3f9e;--ff-green-100:#e7f7ef;--ff-green-300:#71c795;--ff-green-400:#2b9b5f;--ff-green-500:#1e7748;--ff-yellow-100:#fff5de;--ff-yellow-300:#e1b354;--ff-yellow-400:#bb8121;--ff-yellow-500:#916112;--ff-red-100:#feeceb;--ff-red-300:#e48d85;--ff-red-400:#c55245;--ff-red-500:#9e3a2f;--ff-radius-4:4px;--ff-radius-6:6px;--ff-radius-pill:999px;--ff-font-family-sans:"Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ff-font-family-mono:ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;--ff-font-size-xs:12px;--ff-font-size-sm:14px;--ff-font-size-md:16px;--ff-font-size-lg:18px;--ff-shadow-1:0 1px 2px rgba(15, 15, 13, .05), 0 8px 20px rgba(15, 15, 13, .04);--ff-shadow-2:0 10px 28px rgba(15, 15, 13, .08), 0 3px 10px rgba(15, 15, 13, .05);--ff-shadow-3:0 18px 48px rgba(15, 15, 13, .12), 0 6px 16px rgba(15, 15, 13, .08)}:root{--ff-color-surface-page:var(--ff-gray-25);--ff-color-surface-canvas:var(--ff-gray-25);--ff-color-surface-card:var(--ff-white);--ff-color-surface-group:rgba(65, 118, 255, .14);--ff-color-surface-group-active:rgba(65, 118, 255, .2);--ff-color-surface-muted:var(--ff-gray-50);--ff-color-surface-soft:var(--ff-gray-75);--ff-color-surface-accent-soft:rgba(65, 118, 255, .1);--ff-color-border-default:var(--ff-alpha-black-12);--ff-color-border-subtle:var(--ff-alpha-black-08);--ff-color-border-strong:var(--ff-alpha-black-20);--ff-color-border-accent:var(--ff-blue-500);--ff-color-text-primary:var(--ff-gray-800);--ff-color-text-secondary:var(--ff-gray-500);--ff-color-text-tertiary:var(--ff-gray-400);--ff-color-text-inverse:var(--ff-white);--ff-color-accent:var(--ff-blue-500);--ff-color-accent-strong:var(--ff-blue-600);--ff-color-success:var(--ff-green-400);--ff-color-warning:var(--ff-yellow-400);--ff-color-danger:var(--ff-red-400);--ff-color-disabled-surface:var(--ff-gray-100);--ff-color-disabled-border:var(--ff-alpha-black-10);--ff-color-disabled-text:var(--ff-gray-300);--ff-color-selection-fill:rgba(65, 118, 255, .12);--ff-color-selection-stroke:rgba(65, 118, 255, .28);--ff-color-grid:var(--ff-alpha-black-08);--ff-color-grid-strong:var(--ff-alpha-black-15);--ff-color-connector-connected:var(--ff-blue-500);--ff-color-connection:var(--ff-gray-600);--ff-color-connection-muted:var(--ff-gray-300);--ff-color-connection-hover:var(--ff-alpha-black-12);--ff-color-grouping-drop-target-border:var(--ff-gray-800);--ff-color-grouping-drop-target-border-active:var(--ff-gray-800);--ff-color-waypoint-fill:var(--ff-white);--ff-color-waypoint-stroke:var(--ff-blue-500);--ff-color-waypoint-candidate-fill:var(--ff-white);--ff-color-waypoint-candidate-stroke:var(--ff-green-400);--ff-color-minimap-surface:var(--ff-white);--ff-color-minimap-node:var(--ff-gray-700);--ff-color-minimap-view:rgba(65, 118, 255, .14);--ff-color-magnetic-line:var(--ff-blue-500);--ff-color-magnetic-rect-fill:rgba(65, 118, 255, .08);--ff-color-magnetic-rect-border:rgba(65, 118, 255, .24);--ff-radius-node:var(--ff-radius-4);--ff-radius-group:var(--ff-radius-4);--ff-radius-control:var(--ff-radius-4);--ff-radius-socket-square:var(--ff-radius-6);--ff-radius-pill:var(--ff-radius-pill);--ff-font-sans:var(--ff-font-family-sans);--ff-font-mono:var(--ff-font-family-mono);--ff-font-size-body:var(--ff-font-size-sm);--ff-font-size-label:var(--ff-font-size-xs);--ff-shadow-surface:var(--ff-shadow-1);--ff-shadow-floating:var(--ff-shadow-2)}:root{--ff-flow-background-color:var(--ff-color-surface-page);--ff-flow-text-color:var(--ff-color-text-primary);--ff-flow-font-family:var(--ff-font-sans);--ff-flow-font-size:var(--ff-font-size-body);--ff-canvas-background-color:var(--ff-color-surface-canvas);--ff-node-background-color:var(--ff-color-surface-card);--ff-node-background-color-inverse:var(--ff-color-text-primary);--ff-node-border-color:var(--ff-color-border-default);--ff-node-border-color-selected:var(--ff-color-border-accent);--ff-node-color:var(--ff-color-text-primary);--ff-node-border-radius:var(--ff-radius-node);--ff-node-shadow:var(--ff-shadow-surface);--ff-node-shadow-selected:var(--ff-shadow-floating);--ff-node-width:120px;--ff-node-min-height:56px;--ff-node-padding:24px;--ff-group-background-color:var(--ff-color-surface-group);--ff-group-background-color-active:var(--ff-color-surface-group-active);--ff-group-border-color:var(--ff-color-border-subtle);--ff-group-border-color-selected:var(--ff-color-border-accent);--ff-group-border-color-active:var(--ff-color-border-accent);--ff-group-color:var(--ff-color-text-secondary);--ff-group-border-radius:var(--ff-radius-group);--ff-group-min-width:180px;--ff-group-min-height:120px;--ff-group-padding:24px;--ff-grouping-drop-target-border-color:var(--ff-color-grouping-drop-target-border);--ff-grouping-drop-target-border-style:dashed;--ff-grouping-drop-target-border-width:1px;--ff-grouping-drop-target-border-color-active:var(--ff-color-grouping-drop-target-border-active);--ff-grouping-drop-target-border-style-active:dashed;--ff-grouping-drop-target-border-width-active:2px;--ff-handle-background-color:var(--ff-color-surface-card);--ff-handle-border-color:var(--ff-color-border-strong);--ff-handle-color:var(--ff-color-text-secondary);--ff-handle-size:12px;--ff-handle-radius:var(--ff-radius-control);--ff-rotate-handle-size:16px;--ff-connector-background-color:var(--ff-color-surface-card);--ff-connector-border-color:var(--ff-color-border-default);--ff-connector-connected-color:var(--ff-color-connector-connected);--ff-connector-accent-color:var(--ff-color-accent);--ff-connector-disabled-color:var(--ff-color-disabled-surface);--ff-connector-disabled-border-color:var(--ff-color-disabled-border);--ff-connector-size:16px;--ff-connector-node-ring-color:var(--ff-canvas-background-color);--ff-outlet-background-color:var(--ff-color-surface-muted);--ff-outlet-border-color:var(--ff-color-border-default);--ff-outlet-color:var(--ff-color-accent);--ff-outlet-disabled-background-color:var(--ff-color-disabled-surface);--ff-outlet-disabled-border-color:var(--ff-color-disabled-border);--ff-outlet-disabled-color:var(--ff-color-disabled-text);--ff-outlet-border-radius:var(--ff-radius-pill);--ff-outlet-padding-y:6px;--ff-outlet-padding-x:12px;--ff-connection-color:var(--ff-color-connection);--ff-snap-connection-color:var(--ff-color-connection-muted);--ff-connection-hover-color:var(--ff-color-connection-hover);--ff-connection-selected-color:var(--ff-color-accent);--ff-connection-label-color:var(--ff-color-text-secondary);--ff-connection-content-color:var(--ff-node-color);--ff-connection-content-background-color:var(--ff-node-background-color);--ff-connection-content-border-color:var(--ff-node-border-color);--ff-connection-content-border-color-selected:var(--ff-connection-selected-color);--ff-connection-content-border-radius:var(--ff-node-border-radius);--ff-connection-content-font-size:13px;--ff-connection-content-padding-y:2px;--ff-connection-content-padding-x:8px;--ff-connection-width:2px;--ff-connection-hit-width:14px;--ff-connection-drag-handle-fill:var(--ff-color-surface-card);--ff-connection-drag-handle-stroke:var(--ff-color-accent);--ff-marker-color:var(--ff-connection-color);--ff-waypoint-fill:var(--ff-color-waypoint-fill);--ff-waypoint-stroke:var(--ff-color-waypoint-stroke);--ff-waypoint-candidate-fill:var(--ff-color-waypoint-candidate-fill);--ff-waypoint-candidate-stroke:var(--ff-color-waypoint-candidate-stroke);--ff-background-line-color:var(--ff-color-grid);--ff-background-dot-color:var(--ff-color-grid-strong);--ff-selection-area-color:var(--ff-color-selection-fill);--ff-selection-area-border-color:var(--ff-color-selection-stroke);--ff-minimap-background-color:var(--ff-color-minimap-surface);--ff-minimap-border-color:var(--ff-color-border-default);--ff-minimap-node-color:var(--ff-color-minimap-node);--ff-minimap-node-selected-color:var(--ff-color-accent);--ff-minimap-view-color:var(--ff-color-minimap-view);--ff-minimap-view-border-color:var(--ff-color-selection-stroke);--ff-minimap-border-radius:var(--ff-radius-node);--ff-minimap-shadow:var(--ff-shadow-floating);--ff-magnetic-line-color:var(--ff-color-magnetic-line);--ff-magnetic-rect-fill:var(--ff-color-magnetic-rect-fill);--ff-magnetic-rect-border-color:var(--ff-color-magnetic-rect-border);--ff-external-item-background-color:var(--ff-color-surface-card);--ff-external-item-border-color:var(--ff-color-border-default);--ff-external-item-color:var(--ff-color-text-primary);--ff-external-item-disabled-color:var(--ff-color-disabled-text);--ff-external-item-disabled-background-color:var(--ff-color-disabled-surface);--ff-external-item-border-radius:var(--ff-radius-node);--ff-external-item-shadow:var(--ff-shadow-surface);--ff-external-item-preview-shadow:var(--ff-shadow-floating);--ff-external-item-placeholder-background-color:var(--ff-color-surface-soft);--ff-external-item-placeholder-border-color:var(--ff-color-border-subtle)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}:root{--sm-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--sm-bg-page:#f8fafc;--sm-bg-content:#ffffff;--sm-bg-hover:#f1f5f9;--sm-border:#e2e8f0;--sm-nav-active-bg:#eff6ff;--sm-edge-invokes:#f59e0b;--sm-edge-references:#3b82f6;--sm-edge-mentions:#9ca3af;--sm-edge-supersedes:#8b5cf6;--sm-link-in-bg:#e0e7ff;--sm-link-in-fg:#3730a3;--sm-link-out-bg:#fef3c7;--sm-link-out-fg:#92400e;--sm-severity-info:#1e3a8a;--sm-severity-success:#065f46;--sm-severity-warn:#92400e;--sm-severity-error:#991b1b;--sm-severity-warn-bg:rgba(254, 243, 199, .35);--sm-severity-error-bg:rgba(254, 226, 226, .35);--sm-shadow-topbar:0 1px 2px rgba(0, 0, 0, .03);--sm-shadow-eventlog:0 -4px 16px rgba(0, 0, 0, .08);--sm-shadow-floating:0 4px 14px rgba(0, 0, 0, .08);--sm-shadow-card:0 1px 2px rgba(0, 0, 0, .05);--sm-shadow-card-hover:0 3px 12px rgba(0, 0, 0, .12)}html,body{margin:0;padding:0;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--sm-bg-page);color:var(--p-text-color)}*,*:before,*:after{box-sizing:border-box}</style><link rel="stylesheet" href="styles-TCK5JUQE.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-TCK5JUQE.css"></noscript></head>
|
|
24
24
|
<body>
|
|
25
25
|
<app-root></app-root>
|
|
26
|
-
<link rel="modulepreload" href="chunk-UGEECDPV.js"><link rel="modulepreload" href="chunk-7PFTODKS.js"><link rel="modulepreload" href="chunk-Q7L6LLAK.js"><script src="main-
|
|
26
|
+
<link rel="modulepreload" href="chunk-UGEECDPV.js"><link rel="modulepreload" href="chunk-7PFTODKS.js"><link rel="modulepreload" href="chunk-Q7L6LLAK.js"><script src="main-JPEDQQLJ.js" type="module"></script></body>
|
|
27
27
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as xe,b as Me}from"./chunk-UGEECDPV.js";import{$c as Pe,A as M,Ab as fe,B as O,Bb as ye,Cb as ve,Db as Ie,Eb as be,Ec as Se,Fb as ke,Fc as _e,Ga as d,Gb as we,H as oe,Ha as m,I as l,Ia as F,O as W,V as se,Vc as j,W as ae,Wc as $,Z as le,_ as ce,_c as Ee,a as X,ab as I,b as Y,bd as Ae,c as D,ca as R,cd as p,da as a,dd as Te,ea as c,ed as b,f as V,fa as A,j as Z,l as v,n as q,o as L,oa as de,p as s,qa as N,r as ee,ra as G,s as te,tb as me,ub as pe,v as ne,vb as T,w as re,wb as ue,xb as he,z as ie,zb as ge}from"./chunk-7PFTODKS.js";import"./chunk-Q7L6LLAK.js";var Re=[{path:"",pathMatch:"full",redirectTo:"graph"},{path:"graph",loadComponent:()=>import("./chunk-3NHGIRPN.js").then(n=>n.GraphView),data:{title:"Graph"}},{path:"list",loadComponent:()=>import("./chunk-S5C4U3I3.js").then(n=>n.ListView),data:{title:"List"}},{path:"inspector",loadComponent:()=>import("./chunk-A4RBO3TD.js").then(n=>n.InspectorView),data:{title:"Inspector"}},{path:"**",redirectTo:"graph"}];var f={errors:{unknownMode:n=>`SKILL_MAP_MODE: unknown value "${n}"`,restPrefix:n=>`BFF error [${n}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(n,e)=>`Demo bundle fetch failed for "${n}": ${e}`,demoParseFailed:(n,e)=>`Demo bundle parse failed for "${n}": ${e}`,graphFormatNotInDemo:n=>`Graph format "${n}" is not bundled in demo mode (only "ascii").`}};function Ce(n){if(typeof n!="object"||n===null)return!1;let e=n;if(typeof e.type!="string"||e.type.length===0)return!1;let t=e.timestamp;return!(typeof t!="number"&&typeof t!="string"||!("data"in e))}var k=new q("SKILL_MAP_MODE");function De(){return typeof document>"u"?"live":document.querySelector('meta[name="skill-map-mode"]')?.content==="demo"?"demo":"live"}var u={connected:n=>`[ws] connected to ${n}`,closed:(n,e)=>`[ws] closed (code=${n}, reason="${e}")`,malformedFrame:n=>`[ws] malformed frame dropped: ${n}`,socketError:n=>`[ws] socket error: ${n}`,reconnectScheduled:(n,e)=>`[ws] reconnect attempt ${e} scheduled in ${n}ms`,reconnectGiveUp:n=>`[ws] giving up after ${n} failed reconnect attempts`};var Le=[1e3,2e3,4e3,8e3,16e3,3e4],J=10,Je=new Set([1e3,1001]);function Xe(){return typeof window>"u"||!window.location?"ws://127.0.0.1:4242/ws":`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`}var w=class n{mode=s(k);destroyRef=s(re);subject=new Y;socket=null;reconnectTimer=null;reconnectAttempt=0;disposed=!1;socketFactory=e=>new WebSocket(e);url=Xe();events$;_setSocketFactory(e){this.socketFactory=e}_setUrl(e){this.url=e}constructor(){this.mode!=="live"?this.events$=D:this.events$=new X(e=>{!this.socket&&!this.disposed&&this.connect();let t=this.subject.subscribe(e);return()=>t.unsubscribe()}).pipe(Z({resetOnRefCountZero:!1})),this.destroyRef.onDestroy(()=>this.disconnect())}disconnect(){if(!this.disposed){if(this.disposed=!0,this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.socket){try{this.socket.close(1e3,"client disconnect")}catch{}this.socket=null}this.subject.complete()}}ngOnDestroy(){this.disconnect()}connect(){if(this.disposed)return;let e;try{e=this.socketFactory(this.url)}catch(t){let r=t instanceof Error?t.message:String(t);console.warn(u.socketError(r)),this.scheduleReconnect();return}this.socket=e,e.onopen=()=>{this.reconnectAttempt=0,console.info(u.connected(this.url))},e.onmessage=t=>{this.handleFrame(t.data)},e.onerror=t=>{let r=typeof t=="object"&&t!==null&&"message"in t?String(t.message??"unknown"):"unknown";console.warn(u.socketError(r))},e.onclose=t=>{console.info(u.closed(t.code,t.reason)),this.socket=null,!this.disposed&&(Je.has(t.code)||this.scheduleReconnect())}}handleFrame(e){if(typeof e!="string"){console.warn(u.malformedFrame("non-string frame"));return}let t;try{t=JSON.parse(e)}catch(r){let i=r instanceof Error?r.message:String(r);console.warn(u.malformedFrame(i));return}if(!Ce(t)){console.warn(u.malformedFrame("envelope shape"));return}this.subject.next(t)}scheduleReconnect(){if(this.disposed)return;if(this.reconnectAttempt>=J){console.warn(u.reconnectGiveUp(J)),this.subject.error(new Error(u.reconnectGiveUp(J)));return}let e=Math.min(this.reconnectAttempt,Le.length-1),t=Le[e];this.reconnectAttempt+=1,console.info(u.reconnectScheduled(t,this.reconnectAttempt)),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}get _reconnectAttempt(){return this.reconnectAttempt}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function Oe(n){let e=new TextEncoder().encode(n),t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var y="/api",U=class n{http;ws;kindRegistry;constructor(e,t,r){this.http=e??s(T),this.ws=t??s(w),this.kindRegistry=r??s(b)}async health(){return this.getJson(`${y}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${y}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async listNodes(e={}){let t=Ze(e),r=await this.getJson(`${y}/nodes${t}`);return this.ingestRegistry(r.kindRegistry),r}async getNode(e,t={}){let r=Oe(e),i=t.includeBody?"?include=body":"";try{let o=await this.getJson(`${y}/nodes/${r}${i}`);return this.ingestRegistry(o.kindRegistry),o}catch(o){if(o instanceof p&&o.code==="not-found")return null;throw o}}async listLinks(e={}){let t=qe(e),r=await this.getJson(`${y}/links${t}`);return this.ingestRegistry(r.kindRegistry),r}async listIssues(e={}){let t=et(e),r=await this.getJson(`${y}/issues${t}`);return this.ingestRegistry(r.kindRegistry),r}async loadGraph(e="ascii"){let t=`${y}/graph?format=${encodeURIComponent(e)}`;try{return await V(this.http.get(t,{responseType:"text"}))}catch(r){throw this.translateError(r)}}async loadConfig(){let e=await this.getJson(`${y}/config`);return this.ingestRegistry(e.kindRegistry),e.value}async listPlugins(){let e=await this.getJson(`${y}/plugins`);return this.ingestRegistry(e.kindRegistry),e}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}events(){return this.ws.events$}async getJson(e){try{return await V(this.http.get(e))}catch(t){throw this.translateError(t)}}translateError(e){if(e instanceof p)return e;if(e instanceof pe){let r=tt(e.error);return r?new p(r.error.code,r.error.message,r.error.details):new p("internal",e.message||f.errors.malformedResponse)}let t=e instanceof Error?e.message:String(e);return new p("internal",t)}static \u0275fac=function(t){return new(t||n)(L(T),L(w),L(b))};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function Ze(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.hasIssues!==void 0&&e.set("hasIssues",String(n.hasIssues)),n.path&&e.set("path",n.path),n.limit!==void 0&&e.set("limit",String(n.limit)),n.offset!==void 0&&e.set("offset",String(n.offset));let t=e.toString();return t?`?${t}`:""}function qe(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.from&&e.set("from",n.from),n.to&&e.set("to",n.to);let t=e.toString();return t?`?${t}`:""}function et(n){let e=new URLSearchParams;n.severity&&e.set("severity",n.severity),n.ruleId&&e.set("ruleId",n.ruleId),n.node&&e.set("node",n.node);let t=e.toString();return t?`?${t}`:""}function tt(n){if(typeof n!="object"||n===null)return null;let e=n;if(e.ok!==!1)return null;let t=e.error;if(typeof t!="object"||t===null)return null;let r=t;return typeof r.code!="string"||typeof r.message!="string"?null:{ok:!1,error:{code:r.code,message:r.message,details:r.details}}}var nt="data.json",rt="data.meta.json",K=class{constructor(e=globalThis.fetch.bind(globalThis),t){this.fetchImpl=e;this.kindRegistry=t??s(b)}metaPromise=null;dataPromise=null;kindRegistry;async health(){return(await this.loadMeta()).health}async loadScan(){let[e,t]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(t.nodes.kindRegistry),e}async listNodes(e={}){let t=await this.loadMeta();if(it(e))return this.kindRegistry.ingest(t.nodes.kindRegistry),t.nodes;let r=await this.loadData(),i=r.issues,o=r.nodes;if(e.kind&&e.kind.length>0){let S=new Set(e.kind);o=o.filter(_=>S.has(_.kind))}if(e.path){let S=at(e.path);o=o.filter(_=>S.test(_.path))}if(e.hasIssues===!0){let S=We(i);o=o.filter(_=>S.has(_.path))}else if(e.hasIssues===!1){let S=We(i);o=o.filter(_=>!S.has(_.path))}let g=o.length,P=e.offset??0,x=e.limit??1e3,h=o.slice(P,P+x);return this.kindRegistry.ingest(t.nodes.kindRegistry),{schemaVersion:"1",kind:"nodes",items:h,filters:{kind:e.kind??null,hasIssues:e.hasIssues??null,path:e.path?[e.path]:null},counts:{total:g,returned:h.length,page:{offset:P,limit:x}},kindRegistry:t.nodes.kindRegistry}}async getNode(e,t={}){let[r,i]=await Promise.all([this.loadData(),this.loadMeta()]),o=r.nodes.find(h=>h.path===e);if(!o)return null;let g=r.links.filter(h=>h.target===e),P=r.links.filter(h=>h.source===e),x=r.issues.filter(h=>h.nodeIds.includes(e));return this.kindRegistry.ingest(i.nodes.kindRegistry),{schemaVersion:"1",kind:"node",item:o,links:{incoming:g,outgoing:P},issues:x,kindRegistry:i.nodes.kindRegistry}}async listLinks(e={}){let t=await this.loadMeta();if(ot(e))return this.kindRegistry.ingest(t.links.kindRegistry),t.links;let i=(await this.loadData()).links;if(e.kind&&e.kind.length>0){let o=new Set(e.kind);i=i.filter(g=>o.has(g.kind))}return e.from&&(i=i.filter(o=>o.source===e.from)),e.to&&(i=i.filter(o=>o.target===e.to)),this.kindRegistry.ingest(t.links.kindRegistry),{schemaVersion:"1",kind:"links",items:i,filters:{kind:e.kind??null,from:e.from??null,to:e.to??null},counts:{total:i.length,returned:i.length},kindRegistry:t.links.kindRegistry}}async listIssues(e={}){let t=await this.loadMeta();if(st(e))return this.kindRegistry.ingest(t.issues.kindRegistry),t.issues;let i=(await this.loadData()).issues;return e.severity&&(i=i.filter(o=>o.severity===e.severity)),e.ruleId&&(i=i.filter(o=>o.ruleId===e.ruleId)),e.node&&(i=i.filter(o=>o.nodeIds.includes(e.node))),this.kindRegistry.ingest(t.issues.kindRegistry),{schemaVersion:"1",kind:"issues",items:i,filters:{severity:e.severity??null,ruleId:e.ruleId??null,node:e.node??null},counts:{total:i.length,returned:i.length},kindRegistry:t.issues.kindRegistry}}async loadGraph(e="ascii"){if(e!=="ascii")throw new p("bad-query",f.errors.graphFormatNotInDemo(e));return(await this.loadMeta()).graph.ascii}async loadConfig(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.config.kindRegistry),e.config.value}async listPlugins(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.plugins.kindRegistry),e.plugins}events(){return D}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(rt)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(nt)),this.dataPromise}async fetchJson(e){let t;try{t=await this.fetchImpl(e)}catch(r){let i=r instanceof Error?r.message:String(r);throw new p("internal",f.errors.demoFetchFailed(e,i))}if(!t.ok)throw new p("internal",f.errors.demoFetchFailed(e,`HTTP ${t.status}`));try{return await t.json()}catch(r){let i=r instanceof Error?r.message:String(r);throw new p("internal",f.errors.demoParseFailed(e,i))}}};function it(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 ot(n){return!(n.kind&&n.kind.length>0||n.from||n.to)}function st(n){return!(n.severity||n.ruleId||n.node)}function We(n){let e=new Set;for(let t of n)for(let r of t.nodeIds)e.add(r);return e}function at(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${t}$`)}function Ne(){let n=s(k);if(n==="live")return new U(s(T),s(w));if(n==="demo")return new K;let e=n;throw new Error(f.errors.unknownMode(String(e)))}var Fe={providers:[ie(),ke(Re,we()),ue(he()),_e({}),se(async()=>{let n=s(Se),{default:e}=await import("./chunk-FWFBO7KA.js");n.setThemeConfig({theme:{preset:e,options:{darkModeSelector:".app-dark"}}})}),{provide:k,useFactory:De},{provide:Ae,useFactory:Ne}]};var je={brand:"skill-map",tag:"ui prototype \xB7 Step 3",nav:{graph:"Graph",list:"List",inspector:"Inspector"},actions:{},badge:{nodes:"nodes"},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The graph and inspector need room to breathe. Pop this open on a screen at least 768px wide \u2014 see you there."}};var E={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 $e="search",Ue="kinds",Ke="stabilities",Be="hasIssues",B=class n{filters=s(Me);router=s(ve);activatedRoute=s(fe);kindRegistry=s(b);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.subscribe(e=>{if(e instanceof ge){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),O(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),t=new URLSearchParams;for(let[r,i]of Object.entries(e.queryParams))Array.isArray(i)?t.set(r,i.join(",")):i!=null&&t.set(r,String(i));return this.activatedRoute,t}applyUrlToFilters(e){let t=e.get($e)??"";t!==this.filters.searchText()&&this.filters.setSearchText(t);let r=lt(e.get(Ue),this.kindRegistry.kinds().map(g=>g.name));Qe(r,this.filters.selectedKinds())||this.filters.setKinds(r);let i=ct(e.get(Ke));Qe(i,this.filters.selectedStabilities())||this.filters.setStabilities(i);let o=e.get(Be)==="true";o!==this.filters.hasIssuesOnly()&&this.filters.setHasIssuesOnly(o)}computeQueryParams(){let e=this.filters.searchText().trim(),t=this.filters.selectedKinds(),r=this.filters.selectedStabilities(),i=this.filters.hasIssuesOnly();return{[$e]:e.length>0?e:null,[Ue]:t.length>0?t.join(","):null,[Ke]:r.length>0?r.join(","):null,[Be]:i?"true":null}}writeQueryParams(e){let t=this.currentParams(),r=new Map(Object.entries(e)),i=!1;for(let[o,g]of r)if((t.get(o)??null)!==g){i=!0;break}i&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function lt(n,e){if(!n)return[];let t=new Set(e);return n.split(",").map(r=>r.trim()).filter(r=>t.has(r))}function ct(n){if(!n)return[];let e=new Set(xe);return n.split(",").map(t=>t.trim()).filter(t=>e.has(t))}function Qe(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}var He="skill-map.ui.theme",dt="app-dark",mt="dark",ze="(prefers-color-scheme: dark)",Q=class n{doc=s(ne);mode=M(this.readInitial());systemPrefersDark=M(this.readSystemPref());resolved=I(()=>{let e=this.mode();return e==="auto"?this.systemPrefersDark()?"dark":"light":e});constructor(){this.subscribeToSystemPref(),O(()=>{let e=this.resolved()==="dark",t=this.doc.documentElement;t.classList.toggle(dt,e),t.classList.toggle(mt,e);try{this.doc.defaultView?.localStorage.setItem(He,this.mode())}catch{}})}toggle(){this.mode.update(e=>e==="auto"?"light":e==="light"?"dark":"auto")}set(e){this.mode.set(e)}readInitial(){try{let e=this.doc.defaultView?.localStorage.getItem(He);if(e==="auto"||e==="light"||e==="dark")return e}catch{}return"auto"}readSystemPref(){try{return this.doc.defaultView?.matchMedia(ze).matches??!1}catch{return!1}}subscribeToSystemPref(){let e=this.doc.defaultView;if(!e||typeof e.matchMedia!="function")return;e.matchMedia(ze).addEventListener("change",r=>{this.systemPrefersDark.set(r.matches)})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};var Ve={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.dev",homeHref:"/",dismissAria:"Dismiss demo banner"};function ht(n,e){if(n&1){let t=de();a(0,"div",0),A(1,"span",1),a(2,"p",2),d(3),a(4,"code",3),d(5),c()(),a(6,"a",4),d(7),c(),a(8,"p-button",5),N("onClick",function(){ee(t);let i=G();return te(i.dismiss())}),c()()}if(n&2){let t=G();l(3),F(" ",t.texts.body," "),l(2),m(t.texts.installCommand),l(),R("href",t.texts.homeHref,oe),l(),m(t.texts.homeCta),l(),R("ariaLabel",t.texts.dismissAria)("text",!0)("rounded",!0)}}var Ge="sm.demoBannerDismissed",H=class n{mode=s(k);texts=Ve;dismissed=M(this.readDismissed());visible=I(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Ge,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Ge)==="1"}catch{return!1}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=W({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","pi","pi-info-circle"],[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","pi pi-times","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(t,r){t&1&&le(0,ht,9,7,"div",0),t&2&&ce(r.visible()?0:-1)},dependencies:[$,j],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(--font-family-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:.25rem;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})};var z=class n{loader=s(Te);theme=s(Q);_filterUrlSync=s(B);texts=je;count=this.loader.count;themeMode=this.theme.mode;themeIcon=I(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"pi pi-moon"}});themeLabel=I(()=>{switch(this.themeMode()){case"auto":return E.toggleToLight;case"light":return E.toggleToDark;case"dark":return E.toggleToAuto}});themeTooltip=I(()=>{switch(this.themeMode()){case"auto":return E.currentAuto;case"light":return E.currentLight;case"dark":return E.currentDark}});ngOnInit(){this.loader.load()}toggleTheme(){this.theme.toggle()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=W({type:n,selectors:[["app-root"]],decls:35,vars:16,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"pi","pi-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],[1,"shell__brand-mark"],[1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["routerLink","/graph","routerLinkActive","is-active","data-testid","nav-graph"],["routerLink","/list","routerLinkActive","is-active","data-testid","nav-list"],["routerLink","/inspector","routerLinkActive","is-active","data-testid","nav-inspector"],[1,"shell__actions"],["severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["aria-live","polite","data-testid","shell-nodes-badge",1,"shell__badge"],[1,"shell__main"]],template:function(t,r){t&1&&(a(0,"div",0)(1,"div",1),A(2,"i",2),a(3,"h2",3),d(4),c(),a(5,"p",4),d(6),c(),a(7,"p",5),d(8),c()()(),a(9,"div",6),A(10,"sm-demo-banner"),a(11,"header",7)(12,"div",8)(13,"span",9),d(14,"sm"),c(),a(15,"div")(16,"h1"),d(17),c(),a(18,"p",10),d(19),c()()(),a(20,"nav",11)(21,"a",12),d(22),c(),a(23,"a",13),d(24),c(),a(25,"a",14),d(26),c()(),a(27,"div",15)(28,"p-button",16),N("onClick",function(){return r.toggleTheme()}),c(),a(29,"div",17)(30,"strong"),d(31),c(),d(32),c()()(),a(33,"main",18),A(34,"router-outlet"),c()()),t&2&&(l(4),m(r.texts.viewportWarning.title),l(2),m(r.texts.viewportWarning.subtitle),l(2),m(r.texts.viewportWarning.body),l(9),m(r.texts.brand),l(2),m(r.texts.tag),l(),ae("aria-label",r.texts.a11y.viewSwitcher),l(2),m(r.texts.nav.graph),l(2),m(r.texts.nav.list),l(2),m(r.texts.nav.inspector),l(2),R("icon",r.themeIcon())("ariaLabel",r.themeLabel())("pTooltip",r.themeTooltip())("text",!0)("rounded",!0),l(3),m(r.count()),l(),F(" ",r.texts.badge.nodes," "))},dependencies:[ye,Ie,be,$,j,Pe,Ee,H],styles:["[_nghost-%COMP%]{display:block;height:100dvh}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2rem;padding:.75rem 1.5rem;background:var(--sm-bg-content);border-bottom:1px solid var(--sm-border);box-shadow:var(--sm-shadow-topbar)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.5rem;background:var(--p-primary-color);color:var(--p-primary-contrast-color);font-weight:700;font-size:.85rem;letter-spacing:.04em}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em}.shell__tag[_ngcontent-%COMP%]{margin:0;font-size:.72rem;color:var(--p-text-muted-color);letter-spacing:.02em;text-transform:uppercase}.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(--p-text-muted-color);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--sm-bg-hover);color:var(--p-text-color)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--sm-nav-active-bg);color:var(--p-primary-color)}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__badge[_ngcontent-%COMP%]{padding:.4rem .8rem;border-radius:999px;background:var(--sm-bg-hover);color:var(--p-text-muted-color);font-size:.85rem}.shell__badge[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--p-text-color);margin-right:.25rem}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:1.5rem;max-width:1400px;width:100%;margin:0 auto}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{display:none}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}.shell__main[_ngcontent-%COMP%]{padding:1rem}}.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})};me(z,Fe).catch(n=>console.error(n));
|
|
1
|
+
import{a as xe,b as Me}from"./chunk-UGEECDPV.js";import{$c as Pe,A as M,Ab as fe,B as O,Bb as ye,Cb as ve,Db as Ie,Eb as be,Ec as Se,Fb as ke,Fc as _e,Ga as d,Gb as we,H as oe,Ha as m,I as l,Ia as F,O as W,V as se,Vc as j,W as ae,Wc as $,Z as le,_ as ce,_c as Ee,a as X,ab as I,b as Y,bd as Ae,c as D,ca as R,cd as p,da as a,dd as Te,ea as c,ed as b,f as V,fa as A,j as Z,l as v,n as q,o as L,oa as de,p as s,qa as N,r as ee,ra as G,s as te,tb as me,ub as pe,v as ne,vb as T,w as re,wb as ue,xb as he,z as ie,zb as ge}from"./chunk-7PFTODKS.js";import"./chunk-Q7L6LLAK.js";var Re=[{path:"",pathMatch:"full",redirectTo:"graph"},{path:"graph",loadComponent:()=>import("./chunk-ULHJUHKH.js").then(n=>n.GraphView),data:{title:"Graph"}},{path:"list",loadComponent:()=>import("./chunk-S5C4U3I3.js").then(n=>n.ListView),data:{title:"List"}},{path:"inspector",loadComponent:()=>import("./chunk-A4RBO3TD.js").then(n=>n.InspectorView),data:{title:"Inspector"}},{path:"**",redirectTo:"graph"}];var f={errors:{unknownMode:n=>`SKILL_MAP_MODE: unknown value "${n}"`,restPrefix:n=>`BFF error [${n}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(n,e)=>`Demo bundle fetch failed for "${n}": ${e}`,demoParseFailed:(n,e)=>`Demo bundle parse failed for "${n}": ${e}`,graphFormatNotInDemo:n=>`Graph format "${n}" is not bundled in demo mode (only "ascii").`}};function Ce(n){if(typeof n!="object"||n===null)return!1;let e=n;if(typeof e.type!="string"||e.type.length===0)return!1;let t=e.timestamp;return!(typeof t!="number"&&typeof t!="string"||!("data"in e))}var k=new q("SKILL_MAP_MODE");function De(){return typeof document>"u"?"live":document.querySelector('meta[name="skill-map-mode"]')?.content==="demo"?"demo":"live"}var u={connected:n=>`[ws] connected to ${n}`,closed:(n,e)=>`[ws] closed (code=${n}, reason="${e}")`,malformedFrame:n=>`[ws] malformed frame dropped: ${n}`,socketError:n=>`[ws] socket error: ${n}`,reconnectScheduled:(n,e)=>`[ws] reconnect attempt ${e} scheduled in ${n}ms`,reconnectGiveUp:n=>`[ws] giving up after ${n} failed reconnect attempts`};var Le=[1e3,2e3,4e3,8e3,16e3,3e4],J=10,Je=new Set([1e3,1001]);function Xe(){return typeof window>"u"||!window.location?"ws://127.0.0.1:4242/ws":`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`}var w=class n{mode=s(k);destroyRef=s(re);subject=new Y;socket=null;reconnectTimer=null;reconnectAttempt=0;disposed=!1;socketFactory=e=>new WebSocket(e);url=Xe();events$;_setSocketFactory(e){this.socketFactory=e}_setUrl(e){this.url=e}constructor(){this.mode!=="live"?this.events$=D:this.events$=new X(e=>{!this.socket&&!this.disposed&&this.connect();let t=this.subject.subscribe(e);return()=>t.unsubscribe()}).pipe(Z({resetOnRefCountZero:!1})),this.destroyRef.onDestroy(()=>this.disconnect())}disconnect(){if(!this.disposed){if(this.disposed=!0,this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.socket){try{this.socket.close(1e3,"client disconnect")}catch{}this.socket=null}this.subject.complete()}}ngOnDestroy(){this.disconnect()}connect(){if(this.disposed)return;let e;try{e=this.socketFactory(this.url)}catch(t){let r=t instanceof Error?t.message:String(t);console.warn(u.socketError(r)),this.scheduleReconnect();return}this.socket=e,e.onopen=()=>{this.reconnectAttempt=0,console.info(u.connected(this.url))},e.onmessage=t=>{this.handleFrame(t.data)},e.onerror=t=>{let r=typeof t=="object"&&t!==null&&"message"in t?String(t.message??"unknown"):"unknown";console.warn(u.socketError(r))},e.onclose=t=>{console.info(u.closed(t.code,t.reason)),this.socket=null,!this.disposed&&(Je.has(t.code)||this.scheduleReconnect())}}handleFrame(e){if(typeof e!="string"){console.warn(u.malformedFrame("non-string frame"));return}let t;try{t=JSON.parse(e)}catch(r){let i=r instanceof Error?r.message:String(r);console.warn(u.malformedFrame(i));return}if(!Ce(t)){console.warn(u.malformedFrame("envelope shape"));return}this.subject.next(t)}scheduleReconnect(){if(this.disposed)return;if(this.reconnectAttempt>=J){console.warn(u.reconnectGiveUp(J)),this.subject.error(new Error(u.reconnectGiveUp(J)));return}let e=Math.min(this.reconnectAttempt,Le.length-1),t=Le[e];this.reconnectAttempt+=1,console.info(u.reconnectScheduled(t,this.reconnectAttempt)),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}get _reconnectAttempt(){return this.reconnectAttempt}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function Oe(n){let e=new TextEncoder().encode(n),t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var y="/api",U=class n{http;ws;kindRegistry;constructor(e,t,r){this.http=e??s(T),this.ws=t??s(w),this.kindRegistry=r??s(b)}async health(){return this.getJson(`${y}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${y}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async listNodes(e={}){let t=Ze(e),r=await this.getJson(`${y}/nodes${t}`);return this.ingestRegistry(r.kindRegistry),r}async getNode(e,t={}){let r=Oe(e),i=t.includeBody?"?include=body":"";try{let o=await this.getJson(`${y}/nodes/${r}${i}`);return this.ingestRegistry(o.kindRegistry),o}catch(o){if(o instanceof p&&o.code==="not-found")return null;throw o}}async listLinks(e={}){let t=qe(e),r=await this.getJson(`${y}/links${t}`);return this.ingestRegistry(r.kindRegistry),r}async listIssues(e={}){let t=et(e),r=await this.getJson(`${y}/issues${t}`);return this.ingestRegistry(r.kindRegistry),r}async loadGraph(e="ascii"){let t=`${y}/graph?format=${encodeURIComponent(e)}`;try{return await V(this.http.get(t,{responseType:"text"}))}catch(r){throw this.translateError(r)}}async loadConfig(){let e=await this.getJson(`${y}/config`);return this.ingestRegistry(e.kindRegistry),e.value}async listPlugins(){let e=await this.getJson(`${y}/plugins`);return this.ingestRegistry(e.kindRegistry),e}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}events(){return this.ws.events$}async getJson(e){try{return await V(this.http.get(e))}catch(t){throw this.translateError(t)}}translateError(e){if(e instanceof p)return e;if(e instanceof pe){let r=tt(e.error);return r?new p(r.error.code,r.error.message,r.error.details):new p("internal",e.message||f.errors.malformedResponse)}let t=e instanceof Error?e.message:String(e);return new p("internal",t)}static \u0275fac=function(t){return new(t||n)(L(T),L(w),L(b))};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function Ze(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.hasIssues!==void 0&&e.set("hasIssues",String(n.hasIssues)),n.path&&e.set("path",n.path),n.limit!==void 0&&e.set("limit",String(n.limit)),n.offset!==void 0&&e.set("offset",String(n.offset));let t=e.toString();return t?`?${t}`:""}function qe(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.from&&e.set("from",n.from),n.to&&e.set("to",n.to);let t=e.toString();return t?`?${t}`:""}function et(n){let e=new URLSearchParams;n.severity&&e.set("severity",n.severity),n.ruleId&&e.set("ruleId",n.ruleId),n.node&&e.set("node",n.node);let t=e.toString();return t?`?${t}`:""}function tt(n){if(typeof n!="object"||n===null)return null;let e=n;if(e.ok!==!1)return null;let t=e.error;if(typeof t!="object"||t===null)return null;let r=t;return typeof r.code!="string"||typeof r.message!="string"?null:{ok:!1,error:{code:r.code,message:r.message,details:r.details}}}var nt="data.json",rt="data.meta.json",K=class{constructor(e=globalThis.fetch.bind(globalThis),t){this.fetchImpl=e;this.kindRegistry=t??s(b)}metaPromise=null;dataPromise=null;kindRegistry;async health(){return(await this.loadMeta()).health}async loadScan(){let[e,t]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(t.nodes.kindRegistry),e}async listNodes(e={}){let t=await this.loadMeta();if(it(e))return this.kindRegistry.ingest(t.nodes.kindRegistry),t.nodes;let r=await this.loadData(),i=r.issues,o=r.nodes;if(e.kind&&e.kind.length>0){let S=new Set(e.kind);o=o.filter(_=>S.has(_.kind))}if(e.path){let S=at(e.path);o=o.filter(_=>S.test(_.path))}if(e.hasIssues===!0){let S=We(i);o=o.filter(_=>S.has(_.path))}else if(e.hasIssues===!1){let S=We(i);o=o.filter(_=>!S.has(_.path))}let g=o.length,P=e.offset??0,x=e.limit??1e3,h=o.slice(P,P+x);return this.kindRegistry.ingest(t.nodes.kindRegistry),{schemaVersion:"1",kind:"nodes",items:h,filters:{kind:e.kind??null,hasIssues:e.hasIssues??null,path:e.path?[e.path]:null},counts:{total:g,returned:h.length,page:{offset:P,limit:x}},kindRegistry:t.nodes.kindRegistry}}async getNode(e,t={}){let[r,i]=await Promise.all([this.loadData(),this.loadMeta()]),o=r.nodes.find(h=>h.path===e);if(!o)return null;let g=r.links.filter(h=>h.target===e),P=r.links.filter(h=>h.source===e),x=r.issues.filter(h=>h.nodeIds.includes(e));return this.kindRegistry.ingest(i.nodes.kindRegistry),{schemaVersion:"1",kind:"node",item:o,links:{incoming:g,outgoing:P},issues:x,kindRegistry:i.nodes.kindRegistry}}async listLinks(e={}){let t=await this.loadMeta();if(ot(e))return this.kindRegistry.ingest(t.links.kindRegistry),t.links;let i=(await this.loadData()).links;if(e.kind&&e.kind.length>0){let o=new Set(e.kind);i=i.filter(g=>o.has(g.kind))}return e.from&&(i=i.filter(o=>o.source===e.from)),e.to&&(i=i.filter(o=>o.target===e.to)),this.kindRegistry.ingest(t.links.kindRegistry),{schemaVersion:"1",kind:"links",items:i,filters:{kind:e.kind??null,from:e.from??null,to:e.to??null},counts:{total:i.length,returned:i.length},kindRegistry:t.links.kindRegistry}}async listIssues(e={}){let t=await this.loadMeta();if(st(e))return this.kindRegistry.ingest(t.issues.kindRegistry),t.issues;let i=(await this.loadData()).issues;return e.severity&&(i=i.filter(o=>o.severity===e.severity)),e.ruleId&&(i=i.filter(o=>o.ruleId===e.ruleId)),e.node&&(i=i.filter(o=>o.nodeIds.includes(e.node))),this.kindRegistry.ingest(t.issues.kindRegistry),{schemaVersion:"1",kind:"issues",items:i,filters:{severity:e.severity??null,ruleId:e.ruleId??null,node:e.node??null},counts:{total:i.length,returned:i.length},kindRegistry:t.issues.kindRegistry}}async loadGraph(e="ascii"){if(e!=="ascii")throw new p("bad-query",f.errors.graphFormatNotInDemo(e));return(await this.loadMeta()).graph.ascii}async loadConfig(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.config.kindRegistry),e.config.value}async listPlugins(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.plugins.kindRegistry),e.plugins}events(){return D}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(rt)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(nt)),this.dataPromise}async fetchJson(e){let t;try{t=await this.fetchImpl(e)}catch(r){let i=r instanceof Error?r.message:String(r);throw new p("internal",f.errors.demoFetchFailed(e,i))}if(!t.ok)throw new p("internal",f.errors.demoFetchFailed(e,`HTTP ${t.status}`));try{return await t.json()}catch(r){let i=r instanceof Error?r.message:String(r);throw new p("internal",f.errors.demoParseFailed(e,i))}}};function it(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 ot(n){return!(n.kind&&n.kind.length>0||n.from||n.to)}function st(n){return!(n.severity||n.ruleId||n.node)}function We(n){let e=new Set;for(let t of n)for(let r of t.nodeIds)e.add(r);return e}function at(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${t}$`)}function Ne(){let n=s(k);if(n==="live")return new U(s(T),s(w));if(n==="demo")return new K;let e=n;throw new Error(f.errors.unknownMode(String(e)))}var Fe={providers:[ie(),ke(Re,we()),ue(he()),_e({}),se(async()=>{let n=s(Se),{default:e}=await import("./chunk-FWFBO7KA.js");n.setThemeConfig({theme:{preset:e,options:{darkModeSelector:".app-dark"}}})}),{provide:k,useFactory:De},{provide:Ae,useFactory:Ne}]};var je={brand:"skill-map",tag:"ui prototype \xB7 Step 3",nav:{graph:"Graph",list:"List",inspector:"Inspector"},actions:{},badge:{nodes:"nodes"},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The graph and inspector need room to breathe. Pop this open on a screen at least 768px wide \u2014 see you there."}};var E={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 $e="search",Ue="kinds",Ke="stabilities",Be="hasIssues",B=class n{filters=s(Me);router=s(ve);activatedRoute=s(fe);kindRegistry=s(b);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.subscribe(e=>{if(e instanceof ge){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),O(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),t=new URLSearchParams;for(let[r,i]of Object.entries(e.queryParams))Array.isArray(i)?t.set(r,i.join(",")):i!=null&&t.set(r,String(i));return this.activatedRoute,t}applyUrlToFilters(e){let t=e.get($e)??"";t!==this.filters.searchText()&&this.filters.setSearchText(t);let r=lt(e.get(Ue),this.kindRegistry.kinds().map(g=>g.name));Qe(r,this.filters.selectedKinds())||this.filters.setKinds(r);let i=ct(e.get(Ke));Qe(i,this.filters.selectedStabilities())||this.filters.setStabilities(i);let o=e.get(Be)==="true";o!==this.filters.hasIssuesOnly()&&this.filters.setHasIssuesOnly(o)}computeQueryParams(){let e=this.filters.searchText().trim(),t=this.filters.selectedKinds(),r=this.filters.selectedStabilities(),i=this.filters.hasIssuesOnly();return{[$e]:e.length>0?e:null,[Ue]:t.length>0?t.join(","):null,[Ke]:r.length>0?r.join(","):null,[Be]:i?"true":null}}writeQueryParams(e){let t=this.currentParams(),r=new Map(Object.entries(e)),i=!1;for(let[o,g]of r)if((t.get(o)??null)!==g){i=!0;break}i&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};function lt(n,e){if(!n)return[];let t=new Set(e);return n.split(",").map(r=>r.trim()).filter(r=>t.has(r))}function ct(n){if(!n)return[];let e=new Set(xe);return n.split(",").map(t=>t.trim()).filter(t=>e.has(t))}function Qe(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}var He="skill-map.ui.theme",dt="app-dark",mt="dark",ze="(prefers-color-scheme: dark)",Q=class n{doc=s(ne);mode=M(this.readInitial());systemPrefersDark=M(this.readSystemPref());resolved=I(()=>{let e=this.mode();return e==="auto"?this.systemPrefersDark()?"dark":"light":e});constructor(){this.subscribeToSystemPref(),O(()=>{let e=this.resolved()==="dark",t=this.doc.documentElement;t.classList.toggle(dt,e),t.classList.toggle(mt,e);try{this.doc.defaultView?.localStorage.setItem(He,this.mode())}catch{}})}toggle(){this.mode.update(e=>e==="auto"?"light":e==="light"?"dark":"auto")}set(e){this.mode.set(e)}readInitial(){try{let e=this.doc.defaultView?.localStorage.getItem(He);if(e==="auto"||e==="light"||e==="dark")return e}catch{}return"auto"}readSystemPref(){try{return this.doc.defaultView?.matchMedia(ze).matches??!1}catch{return!1}}subscribeToSystemPref(){let e=this.doc.defaultView;if(!e||typeof e.matchMedia!="function")return;e.matchMedia(ze).addEventListener("change",r=>{this.systemPrefersDark.set(r.matches)})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=v({token:n,factory:n.\u0275fac,providedIn:"root"})};var Ve={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.dev",homeHref:"/",dismissAria:"Dismiss demo banner"};function ht(n,e){if(n&1){let t=de();a(0,"div",0),A(1,"span",1),a(2,"p",2),d(3),a(4,"code",3),d(5),c()(),a(6,"a",4),d(7),c(),a(8,"p-button",5),N("onClick",function(){ee(t);let i=G();return te(i.dismiss())}),c()()}if(n&2){let t=G();l(3),F(" ",t.texts.body," "),l(2),m(t.texts.installCommand),l(),R("href",t.texts.homeHref,oe),l(),m(t.texts.homeCta),l(),R("ariaLabel",t.texts.dismissAria)("text",!0)("rounded",!0)}}var Ge="sm.demoBannerDismissed",H=class n{mode=s(k);texts=Ve;dismissed=M(this.readDismissed());visible=I(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Ge,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Ge)==="1"}catch{return!1}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=W({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","pi","pi-info-circle"],[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","pi pi-times","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(t,r){t&1&&le(0,ht,9,7,"div",0),t&2&&ce(r.visible()?0:-1)},dependencies:[$,j],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(--font-family-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:.25rem;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})};var z=class n{loader=s(Te);theme=s(Q);_filterUrlSync=s(B);texts=je;count=this.loader.count;themeMode=this.theme.mode;themeIcon=I(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"pi pi-moon"}});themeLabel=I(()=>{switch(this.themeMode()){case"auto":return E.toggleToLight;case"light":return E.toggleToDark;case"dark":return E.toggleToAuto}});themeTooltip=I(()=>{switch(this.themeMode()){case"auto":return E.currentAuto;case"light":return E.currentLight;case"dark":return E.currentDark}});ngOnInit(){this.loader.load()}toggleTheme(){this.theme.toggle()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=W({type:n,selectors:[["app-root"]],decls:35,vars:16,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"pi","pi-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],[1,"shell__brand-mark"],[1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["routerLink","/graph","routerLinkActive","is-active","data-testid","nav-graph"],["routerLink","/list","routerLinkActive","is-active","data-testid","nav-list"],["routerLink","/inspector","routerLinkActive","is-active","data-testid","nav-inspector"],[1,"shell__actions"],["severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["aria-live","polite","data-testid","shell-nodes-badge",1,"shell__badge"],[1,"shell__main"]],template:function(t,r){t&1&&(a(0,"div",0)(1,"div",1),A(2,"i",2),a(3,"h2",3),d(4),c(),a(5,"p",4),d(6),c(),a(7,"p",5),d(8),c()()(),a(9,"div",6),A(10,"sm-demo-banner"),a(11,"header",7)(12,"div",8)(13,"span",9),d(14,"sm"),c(),a(15,"div")(16,"h1"),d(17),c(),a(18,"p",10),d(19),c()()(),a(20,"nav",11)(21,"a",12),d(22),c(),a(23,"a",13),d(24),c(),a(25,"a",14),d(26),c()(),a(27,"div",15)(28,"p-button",16),N("onClick",function(){return r.toggleTheme()}),c(),a(29,"div",17)(30,"strong"),d(31),c(),d(32),c()()(),a(33,"main",18),A(34,"router-outlet"),c()()),t&2&&(l(4),m(r.texts.viewportWarning.title),l(2),m(r.texts.viewportWarning.subtitle),l(2),m(r.texts.viewportWarning.body),l(9),m(r.texts.brand),l(2),m(r.texts.tag),l(),ae("aria-label",r.texts.a11y.viewSwitcher),l(2),m(r.texts.nav.graph),l(2),m(r.texts.nav.list),l(2),m(r.texts.nav.inspector),l(2),R("icon",r.themeIcon())("ariaLabel",r.themeLabel())("pTooltip",r.themeTooltip())("text",!0)("rounded",!0),l(3),m(r.count()),l(),F(" ",r.texts.badge.nodes," "))},dependencies:[ye,Ie,be,$,j,Pe,Ee,H],styles:["[_nghost-%COMP%]{display:block;height:100dvh}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2rem;padding:.75rem 1.5rem;background:var(--sm-bg-content);border-bottom:1px solid var(--sm-border);box-shadow:var(--sm-shadow-topbar)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.5rem;background:var(--p-primary-color);color:var(--p-primary-contrast-color);font-weight:700;font-size:.85rem;letter-spacing:.04em}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em}.shell__tag[_ngcontent-%COMP%]{margin:0;font-size:.72rem;color:var(--p-text-muted-color);letter-spacing:.02em;text-transform:uppercase}.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(--p-text-muted-color);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--sm-bg-hover);color:var(--p-text-color)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--sm-nav-active-bg);color:var(--p-primary-color)}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__badge[_ngcontent-%COMP%]{padding:.4rem .8rem;border-radius:999px;background:var(--sm-bg-hover);color:var(--p-text-muted-color);font-size:.85rem}.shell__badge[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--p-text-color);margin-right:.25rem}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:1.5rem;max-width:1400px;width:100%;margin:0 auto}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{display:none}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}.shell__main[_ngcontent-%COMP%]{padding:1rem}}.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})};me(z,Fe).catch(n=>console.error(n));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skill-map/cli",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.4",
|
|
4
4
|
"description": "skill-map reference implementation — kernel + CLI + adapters.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -51,6 +51,10 @@
|
|
|
51
51
|
"typecheck": "tsc --noEmit",
|
|
52
52
|
"lint": "eslint .",
|
|
53
53
|
"lint:fix": "eslint . --fix",
|
|
54
|
+
"pretest": "tsup",
|
|
55
|
+
"pretest:ci": "tsup",
|
|
56
|
+
"pretest:coverage": "tsup",
|
|
57
|
+
"pretest:coverage:html": "tsup",
|
|
54
58
|
"test": "tsc --noEmit && node --import tsx --test --test-reporter=spec 'test/**/*.test.ts' 'built-in-plugins/**/*.test.ts' 'kernel/**/*.test.ts'",
|
|
55
59
|
"test:ci": "tsc --noEmit && node --import tsx --test 'test/**/*.test.ts' 'built-in-plugins/**/*.test.ts' 'kernel/**/*.test.ts'",
|
|
56
60
|
"test:coverage": "tsc --noEmit && SKILL_MAP_SKIP_BENCHMARK=1 node --experimental-default-config-file --import tsx --test --experimental-test-coverage 'test/**/*.test.ts' 'built-in-plugins/**/*.test.ts' 'kernel/**/*.test.ts'",
|