edsger 0.83.0 → 0.84.0
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 +65 -2
- package/assets/README.md +20 -10
- package/assets/audit/base.yaml +187 -0
- package/assets/audit/csharp.yaml +46 -0
- package/assets/audit/dart.yaml +46 -0
- package/assets/audit/go.yaml +46 -0
- package/assets/audit/java.yaml +46 -0
- package/assets/audit/python.yaml +49 -0
- package/assets/audit/typescript.yaml +51 -0
- package/assets/audit-viewer/assets/audit--os0TXXZ.css +1 -0
- package/assets/audit-viewer/assets/audit-CSblYELs.js +2 -0
- package/assets/audit-viewer/audit.html +31 -0
- package/assets/audit-viewer-single.html +32 -0
- package/assets/diagrams-viewer/assets/{abnfDiagram-VRR7QNED-BuBTl7CD.js → abnfDiagram-VRR7QNED-CWLpbgGU.js} +1 -1
- package/assets/diagrams-viewer/assets/{arc-OMyuAfpK.js → arc-B4VipCr_.js} +1 -1
- package/assets/diagrams-viewer/assets/{architectureDiagram-ZJ3FMSHR-BtZuD4Oc.js → architectureDiagram-ZJ3FMSHR-BMDodQXV.js} +1 -1
- package/assets/diagrams-viewer/assets/{blockDiagram-677ZJIJ3-BXUV3Kw8.js → blockDiagram-677ZJIJ3-DbHoVVH-.js} +1 -1
- package/assets/diagrams-viewer/assets/{c4Diagram-LMCZKHZV-CB6FLms7.js → c4Diagram-LMCZKHZV-CyUEj98S.js} +1 -1
- package/assets/diagrams-viewer/assets/channel-DWh7ErxY.js +1 -0
- package/assets/diagrams-viewer/assets/{chunk-2Q5K7J3B-mPN4SRuj.js → chunk-2Q5K7J3B-CWu0p0os.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-32BRIVSS-DVv1-dcH.js → chunk-32BRIVSS-BhVWSCoK.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-5VM5RSS4-CV1HWp5i.js → chunk-5VM5RSS4-B_2wZBAn.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-EX3LRPZG-Dka-2CXP.js → chunk-EX3LRPZG-D_MRgtfL.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-JWPE2WC7-D18DLD3z.js → chunk-JWPE2WC7-dsh1qiy0.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-MOJQB5TN-DZ8recee.js → chunk-MOJQB5TN-BvLm4a6B.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-RYQCIY6F-D-T7U7G_.js → chunk-RYQCIY6F-gJyPbIpx.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-V7JOEXUC-CycRbumY.js → chunk-V7JOEXUC-BMvj0zJM.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-VR4S4FIN-CgtEJekm.js → chunk-VR4S4FIN-Di2iBUXs.js} +1 -1
- package/assets/diagrams-viewer/assets/{chunk-XXDRQBXY-N1fSDz2n.js → chunk-XXDRQBXY-Cfajbd4I.js} +1 -1
- package/assets/diagrams-viewer/assets/classDiagram-OUVF2IWQ-winWhRce.js +1 -0
- package/assets/diagrams-viewer/assets/classDiagram-v2-EOCWNBFH-winWhRce.js +1 -0
- package/assets/diagrams-viewer/assets/{cose-bilkent-JH36ORCC-x2DnNSLL.js → cose-bilkent-JH36ORCC-ClE2EhTL.js} +1 -1
- package/assets/diagrams-viewer/assets/{cynefin-VYW2F7L2-CWCJCs-i.js → cynefin-VYW2F7L2-nm5z0Jwc.js} +1 -1
- package/assets/diagrams-viewer/assets/{cynefinDiagram-TSTJHNR4-mn39JWqG.js → cynefinDiagram-TSTJHNR4-CGhnRh5V.js} +1 -1
- package/assets/diagrams-viewer/assets/{dagre-VKFMJZFB-iOjB5Pax.js → dagre-VKFMJZFB-COlahHKk.js} +1 -1
- package/assets/diagrams-viewer/assets/{diagram-FQU43EPY-DIFXEG6K.js → diagram-FQU43EPY-DsUclBK0.js} +1 -1
- package/assets/diagrams-viewer/assets/{diagram-G47NLZAW-CUFys0Kk.js → diagram-G47NLZAW-CnjT9SvX.js} +1 -1
- package/assets/diagrams-viewer/assets/{diagram-NH7WQ7WH-ByXjnNJR.js → diagram-NH7WQ7WH-DiGoGOyA.js} +1 -1
- package/assets/diagrams-viewer/assets/{diagram-OA4YK3LP-B7VCnnms.js → diagram-OA4YK3LP-qi8nz9qe.js} +1 -1
- package/assets/diagrams-viewer/assets/{diagram-WEI45ONY-DdmQeP2M.js → diagram-WEI45ONY-BV3PGzwL.js} +1 -1
- package/assets/diagrams-viewer/assets/diagrams-8nCc1utO.css +1 -0
- package/assets/diagrams-viewer/assets/{diagrams-DFlErBCY.js → diagrams-CF48btj0.js} +100 -100
- package/assets/diagrams-viewer/assets/{ebnfDiagram-CCIWWBDH-B54UVMil.js → ebnfDiagram-CCIWWBDH-CtKWe-dh.js} +1 -1
- package/assets/diagrams-viewer/assets/{erDiagram-Q63AITRT-zkOgYlyz.js → erDiagram-Q63AITRT-Aajee3Fz.js} +1 -1
- package/assets/diagrams-viewer/assets/{flowDiagram-23GEKE2U-CCNIfraz.js → flowDiagram-23GEKE2U-N3Xe2K9t.js} +1 -1
- package/assets/diagrams-viewer/assets/{ganttDiagram-NO4QXBWP-DCn2zVSV.js → ganttDiagram-NO4QXBWP-Bjicdg8S.js} +1 -1
- package/assets/diagrams-viewer/assets/{gitGraphDiagram-IHSO6WYX-lB6SW9xm.js → gitGraphDiagram-IHSO6WYX-CacIXKIe.js} +1 -1
- package/assets/diagrams-viewer/assets/{infoDiagram-FWYZ7A6U-CvGfGSmH.js → infoDiagram-FWYZ7A6U-CVmDapTx.js} +1 -1
- package/assets/diagrams-viewer/assets/{ishikawaDiagram-FXEZZL3T-DnwhjgE5.js → ishikawaDiagram-FXEZZL3T-DMJf1YQN.js} +1 -1
- package/assets/diagrams-viewer/assets/{journeyDiagram-5HDEW3XC-C8LVhqZM.js → journeyDiagram-5HDEW3XC-Bk_U6MPk.js} +1 -1
- package/assets/diagrams-viewer/assets/{kanban-definition-HUTT4EX6-PYOrsIQc.js → kanban-definition-HUTT4EX6-n05wGXiD.js} +1 -1
- package/assets/diagrams-viewer/assets/{linear-CIU4B3PA.js → linear-DD_zky65.js} +1 -1
- package/assets/diagrams-viewer/assets/{mindmap-definition-LN4V7U3C-B-HjOMSw.js → mindmap-definition-LN4V7U3C-BWt_I9vr.js} +1 -1
- package/assets/diagrams-viewer/assets/{pegDiagram-2B236MQR-dAvsUVxy.js → pegDiagram-2B236MQR-CCZTIXBZ.js} +1 -1
- package/assets/diagrams-viewer/assets/{pieDiagram-ENE6RG2P-W-6EgmyD.js → pieDiagram-ENE6RG2P-BmIQql1w.js} +1 -1
- package/assets/diagrams-viewer/assets/{quadrantDiagram-ABIIQ3AL-SlUlWOO8.js → quadrantDiagram-ABIIQ3AL-BPvOH5QN.js} +1 -1
- package/assets/diagrams-viewer/assets/{railroadDiagram-RFXS5EU6-KjtAtTVy.js → railroadDiagram-RFXS5EU6-DpgVbjSl.js} +1 -1
- package/assets/diagrams-viewer/assets/{requirementDiagram-TGXJPOKE-DZtlwaER.js → requirementDiagram-TGXJPOKE-CDVpI3MH.js} +1 -1
- package/assets/diagrams-viewer/assets/{sankeyDiagram-HTMAVEWB-1Ae4oRc3.js → sankeyDiagram-HTMAVEWB-DU2J23Xy.js} +1 -1
- package/assets/diagrams-viewer/assets/{sequenceDiagram-DBY2YBRQ-DU-x0cLP.js → sequenceDiagram-DBY2YBRQ-BIVlCWU4.js} +1 -1
- package/assets/diagrams-viewer/assets/{sizeCapture-X5ZJPWSS-Cemh16BZ.js → sizeCapture-X5ZJPWSS-C9KxyKN2.js} +1 -1
- package/assets/diagrams-viewer/assets/{stateDiagram-2N3HPSRC-CtfrA6gP.js → stateDiagram-2N3HPSRC-Ba5mRI9d.js} +1 -1
- package/assets/diagrams-viewer/assets/stateDiagram-v2-6OUMAXLB-Dw-0OG6b.js +1 -0
- package/assets/diagrams-viewer/assets/{swimlanes-5IMT3BWC-BkZY9GJ7.js → swimlanes-5IMT3BWC-aOsD2O80.js} +2 -2
- package/assets/diagrams-viewer/assets/swimlanesDiagram-G3AALYLV-KujklZml.js +8 -0
- package/assets/diagrams-viewer/assets/{timeline-definition-FHXFAJF6-DikyXYB3.js → timeline-definition-FHXFAJF6-CmYd84Hc.js} +1 -1
- package/assets/diagrams-viewer/assets/{vennDiagram-L72KCM5P-C_7veK57.js → vennDiagram-L72KCM5P-CDiMK-z9.js} +1 -1
- package/assets/diagrams-viewer/assets/{wardleyDiagram-EHGQE667-Das_YJGv.js → wardleyDiagram-EHGQE667-BKLsv25u.js} +1 -1
- package/assets/diagrams-viewer/assets/{xychartDiagram-FW5EYKEG-B5fwef3a.js → xychartDiagram-FW5EYKEG-Bpj6Ub-a.js} +1 -1
- package/assets/diagrams-viewer/diagrams.html +19 -2
- package/assets/diagrams-viewer-single.html +382 -365
- package/assets/manifest.yaml +9 -1
- package/assets/mindmap/base.yaml +115 -0
- package/assets/mindmap/csharp.yaml +32 -0
- package/assets/mindmap/dart.yaml +42 -0
- package/assets/mindmap/go.yaml +33 -0
- package/assets/mindmap/java.yaml +40 -0
- package/assets/mindmap/python.yaml +43 -0
- package/assets/mindmap/typescript.yaml +47 -0
- package/assets/mindmap-viewer/assets/mindmap-D7KMR9EM.css +1 -0
- package/assets/mindmap-viewer/assets/mindmap-Di5RM-4N.js +4 -0
- package/assets/mindmap-viewer/mindmap.html +31 -0
- package/assets/mindmap-viewer-single.html +34 -0
- package/assets/schema/audit.schema.json +66 -0
- package/assets/schema/mindmap.schema.json +69 -0
- package/assets/skills/audit/SKILL.md +76 -0
- package/assets/skills/mindmap/SKILL.md +69 -0
- package/assets/viewer/assets/index-BFtGar9N.css +1 -0
- package/assets/viewer/assets/index-XOKyyudT.js +3 -0
- package/assets/viewer/index.html +19 -2
- package/assets/viewer-single.html +21 -4
- package/dist/index.js +1311 -416
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/assets/diagrams-viewer/assets/channel-DfIqGUHQ.js +0 -1
- package/assets/diagrams-viewer/assets/classDiagram-OUVF2IWQ-D7S3taPH.js +0 -1
- package/assets/diagrams-viewer/assets/classDiagram-v2-EOCWNBFH-D7S3taPH.js +0 -1
- package/assets/diagrams-viewer/assets/diagrams-hdYg_gGB.css +0 -1
- package/assets/diagrams-viewer/assets/stateDiagram-v2-6OUMAXLB-BU13FASH.js +0 -1
- package/assets/diagrams-viewer/assets/swimlanesDiagram-G3AALYLV-03GXtgC-.js +0 -8
- package/assets/viewer/assets/index-C7hwGkuU.js +0 -3
- package/assets/viewer/assets/index-Dhc-7q5o.css +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<script>
|
|
7
|
+
(function () {
|
|
8
|
+
try {
|
|
9
|
+
var t = localStorage.getItem("edsger-theme");
|
|
10
|
+
if (t !== "light" && t !== "dark") {
|
|
11
|
+
t =
|
|
12
|
+
window.matchMedia &&
|
|
13
|
+
window.matchMedia("(prefers-color-scheme: light)").matches
|
|
14
|
+
? "light"
|
|
15
|
+
: "dark";
|
|
16
|
+
}
|
|
17
|
+
document.documentElement.setAttribute("data-theme", t);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
document.documentElement.setAttribute("data-theme", "dark");
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
</script>
|
|
23
|
+
<title>Edsger — Mind Map</title>
|
|
24
|
+
<!-- __EDSGER_MINDMAP__ is injected here when exported as a single self-contained file. -->
|
|
25
|
+
<script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const _ of r.addedNodes)_.tagName==="LINK"&&_.rel==="modulepreload"&&l(_)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var le,b,Ve,F,Pe,Ge,Ke,se,Z,W,Qe,me,ue,de,te={},ne=[],dt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ie=Array.isArray;function L(e,t){for(var n in t)e[n]=t[n];return e}function ge(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ft(e,t,n){var l,i,r,_={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:_[r]=t[r];if(arguments.length>2&&(_.children=arguments.length>3?le.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)_[r]===void 0&&(_[r]=e.defaultProps[r]);return X(e,_,l,i,null)}function X(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++Ve,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function oe(e){return e.children}function ee(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function ht(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=L({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),ve(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,Xe(l,r,i),t.__e=t.__=null,r.__e!=n&&Je(r)}}function Je(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Je(e)}function Te(e){(!e.__d&&(e.__d=!0)&&F.push(e)&&!re.__r++||Pe!=b.debounceRendering)&&((Pe=b.debounceRendering)||Ge)(re)}function re(){try{for(var e,t=1;F.length;)F.length>t&&F.sort(Ke),e=F.shift(),t=F.length,ht(e)}finally{F.length=re.__r=0}}function Ye(e,t,n,l,i,r,_,a,d,c,u){var y,o,h,f,C,g,m,v=l&&l.__k||ne,k=t.length;for(d=pt(n,t,v,d,k),y=0;y<k;y++)(h=n.__k[y])!=null&&(o=h.__i!=-1&&v[h.__i]||te,h.__i=y,g=ve(e,h,o,i,r,_,a,d,c,u),f=h.__e,h.ref&&o.ref!=h.ref&&(o.ref&&ye(o.ref,null,h),u.push(h.ref,h.__c||f,h)),C==null&&f!=null&&(C=f),(m=!!(4&h.__u))||o.__k===h.__k?(d=Ze(h,d,e,m),m&&o.__e&&(o.__e=null)):typeof h.type=="function"&&g!==void 0?d=g:f&&(d=f.nextSibling),h.__u&=-7);return n.__e=C,d}function pt(e,t,n,l,i){var r,_,a,d,c,u=n.length,y=u,o=0;for(e.__k=new Array(i),r=0;r<i;r++)(_=t[r])!=null&&typeof _!="boolean"&&typeof _!="function"?(typeof _=="string"||typeof _=="number"||typeof _=="bigint"||_.constructor==String?_=e.__k[r]=X(null,_,null,null,null):ie(_)?_=e.__k[r]=X(oe,{children:_},null,null,null):_.constructor===void 0&&_.__b>0?_=e.__k[r]=X(_.type,_.props,_.key,_.ref?_.ref:null,_.__v):e.__k[r]=_,d=r+o,_.__=e,_.__b=e.__b+1,a=null,(c=_.__i=mt(_,n,d,y))!=-1&&(y--,(a=n[c])&&(a.__u|=2)),a==null||a.__v==null?(c==-1&&(i>u?o--:i<u&&o++),typeof _.type!="function"&&(_.__u|=4)):c!=d&&(c==d-1?o--:c==d+1?o++:(c>d?o--:o++,_.__u|=4))):e.__k[r]=null;if(y)for(r=0;r<u;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),tt(a,a));return l}function Ze(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=Ze(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function mt(e,t,n,l){var i,r,_,a=e.key,d=e.type,c=t[n],u=c!=null&&(2&c.__u)==0;if(c===null&&a==null||u&&a==c.key&&d==c.type)return n;if(l>(u?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((c=t[_=i>=0?i--:r++])!=null&&!(2&c.__u)&&a==c.key&&d==c.type)return _}return-1}function De(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||dt.test(t)?n:n+"px"}function J(e,t,n,l,i){var r,_;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||De(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||De(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(Qe,"$1")),_=t.toLowerCase(),t=_ in e||t=="onFocusOut"||t=="onFocusIn"?_.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[W]=l[W]:(n[W]=me,e.addEventListener(t,r?de:ue,r)):e.removeEventListener(t,r?de:ue,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function Ie(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[Z]==null)t[Z]=me++;else if(t[Z]<n[W])return;return n(b.event?b.event(t):t)}}}function ve(e,t,n,l,i,r,_,a,d,c){var u,y,o,h,f,C,g,m,v,k,N,H,D,R,P,z,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(u=b.__b)&&u(t);e:if(typeof T=="function"){y=_.length;try{if(v=t.props,k=T.prototype&&T.prototype.render,N=(u=T.contextType)&&l[u.__c],H=u?N?N.props.value:u.__:l,n.__c?m=(o=t.__c=n.__c).__=o.__E:(k?t.__c=o=new T(v,H):(t.__c=o=new ee(v,H),o.constructor=T,o.render=vt),N&&N.sub(o),o.state||(o.state={}),o.__n=l,h=o.__d=!0,o.__h=[],o._sb=[]),k&&o.__s==null&&(o.__s=o.state),k&&T.getDerivedStateFromProps!=null&&(o.__s==o.state&&(o.__s=L({},o.__s)),L(o.__s,T.getDerivedStateFromProps(v,o.__s))),f=o.props,C=o.state,o.__v=t,h)k&&T.getDerivedStateFromProps==null&&o.componentWillMount!=null&&o.componentWillMount(),k&&o.componentDidMount!=null&&o.__h.push(o.componentDidMount);else{if(k&&T.getDerivedStateFromProps==null&&v!==f&&o.componentWillReceiveProps!=null&&o.componentWillReceiveProps(v,H),t.__v==n.__v||!o.__e&&o.shouldComponentUpdate!=null&&o.shouldComponentUpdate(v,o.__s,H)===!1){t.__v!=n.__v&&(o.props=v,o.state=o.__s,o.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(M){M&&(M.__=t)}),ne.push.apply(o.__h,o._sb),o._sb=[],o.__h.length&&_.push(o);break e}o.componentWillUpdate!=null&&o.componentWillUpdate(v,o.__s,H),k&&o.componentDidUpdate!=null&&o.__h.push(function(){o.componentDidUpdate(f,C,g)})}if(o.context=H,o.props=v,o.__P=e,o.__e=!1,D=b.__r,R=0,k)o.state=o.__s,o.__d=!1,D&&D(t),u=o.render(o.props,o.state,o.context),ne.push.apply(o.__h,o._sb),o._sb=[];else do o.__d=!1,D&&D(t),u=o.render(o.props,o.state,o.context),o.state=o.__s;while(o.__d&&++R<25);o.state=o.__s,o.getChildContext!=null&&(l=L(L({},l),o.getChildContext())),k&&!h&&o.getSnapshotBeforeUpdate!=null&&(g=o.getSnapshotBeforeUpdate(f,C)),P=u!=null&&u.type===oe&&u.key==null?et(u.props.children):u,a=Ye(e,ie(P)?P:[P],t,n,l,i,r,_,a,d,c),o.base=t.__e,t.__u&=-161,o.__h.length&&_.push(o),m&&(o.__E=o.__=null)}catch(M){if(_.length=y,t.__v=null,d||r!=null)if(M.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(z=r.length;z--;)ge(r[z]);fe(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),M.then||fe(t);b.__e(M,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=gt(n.__e,t,n,l,i,r,_,d,c);return(u=b.diffed)&&u(t),128&t.__u?void 0:a}function fe(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(fe))}function Xe(e,t,n){for(var l=0;l<n.length;l++)ye(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function et(e){return typeof e!="object"||e==null||e.__b>0?e:ie(e)?e.map(et):e.constructor!==void 0?null:L({},e)}function gt(e,t,n,l,i,r,_,a,d){var c,u,y,o,h,f,C,g=n.props||te,m=t.props,v=t.type;if(v=="svg"?i="http://www.w3.org/2000/svg":v=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(c=0;c<r.length;c++)if((h=r[c])&&"setAttribute"in h==!!v&&(v?h.localName==v:h.nodeType==3)){e=h,r[c]=null;break}}if(e==null){if(v==null)return document.createTextNode(m);e=document.createElementNS(i,v,m.is&&m),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(v==null)g===m||a&&e.data==m||(e.data=m);else{if(r=v=="textarea"&&m.defaultValue!=null?null:r&&le.call(e.childNodes),!a&&r!=null)for(g={},c=0;c<e.attributes.length;c++)g[(h=e.attributes[c]).name]=h.value;for(c in g)h=g[c],c=="dangerouslySetInnerHTML"?y=h:c=="children"||c in m||c=="value"&&"defaultValue"in m||c=="checked"&&"defaultChecked"in m||J(e,c,null,h,i);for(c in m)h=m[c],c=="children"?o=h:c=="dangerouslySetInnerHTML"?u=h:c=="value"?f=h:c=="checked"?C=h:a&&typeof h!="function"||g[c]===h||J(e,c,h,g[c],i);if(u)a||y&&(u.__html==y.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(y&&(e.innerHTML=""),Ye(t.type=="template"?e.content:e,ie(o)?o:[o],t,n,l,v=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,_,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(c=r.length;c--;)ge(r[c]);a&&v!="textarea"||(c="value",v=="progress"&&f==null?e.removeAttribute("value"):f!=null&&(f!==e[c]||v=="progress"&&!f||v=="option"&&f!=g[c])&&J(e,c,f,g[c],i),c="checked",C!=null&&C!=e[c]&&J(e,c,C,g[c],i))}return e}function ye(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function tt(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||ye(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&tt(l[i],t,n||typeof e.type!="function");n||ge(e.__e),e.__c=e.__=e.__e=void 0}function vt(e,t,n){return this.constructor(e,n)}function yt(e,t,n){var l,i,r,_;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],_=[],ve(t,e=t.__k=ft(oe,null,[e]),i||te,te,t.namespaceURI,i?null:t.firstChild?le.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,_),Xe(r,e,_),e.props.children=null}le=ne.slice,b={__e:function(e,t,n,l){for(var i,r,_;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),_=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),_=i.__d),_)return i.__E=i}catch(a){e=a}throw e}},Ve=0,ee.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=L({},this.state),typeof e=="function"&&(e=e(L({},n),this.props)),e&&L(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Te(this))},ee.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Te(this))},ee.prototype.render=oe,F=[],Ge=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ke=function(e,t){return e.__v.__b-t.__v.__b},re.__r=0,se=Math.random().toString(8),Z="__d"+se,W="__a"+se,Qe=/(PointerCapture)$|Capture$/i,me=0,ue=Ie(!1),de=Ie(!0);var bt=0;function s(e,t,n,l,i,r){t||(t={});var _,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?_=t[a]:d[a]=t[a];var c={type:e,props:d,key:n,ref:_,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--bt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(_=e.defaultProps))for(a in _)d[a]===void 0&&(d[a]=_[a]);return b.vnode&&b.vnode(c),c}var B,E,ce,He,V=0,nt=[],S=b,Me=S.__b,Le=S.__r,Ue=S.diffed,Fe=S.__c,Re=S.unmount,Oe=S.__;function be(e,t){S.__h&&S.__h(E,e,V||t),V=0;var n=E.__H||(E.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function U(e){return V=1,kt(ot,e)}function kt(e,t,n){var l=be(B++,2);if(l.t=e,!l.__c&&(l.__=[ot(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],c=l.t(d,a);d!==c&&(l.__N=[c,l.__[1]],l.__c.setState({}))}],l.__c=E,!E.__f)){var i=function(a,d,c){if(!l.__c.__H)return!0;var u=!1,y=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){u=!0;var f=h.__[0];h.__=h.__N,h.__N=void 0,f!==h.__[0]&&(y=!0)}}),r){var o=r.call(this,a,d,c);return u?o||y:o}return!u||y};E.__f=!0;var r=E.shouldComponentUpdate,_=E.componentWillUpdate;E.componentWillUpdate=function(a,d,c){if(this.__e){var u=r;r=void 0,i(a,d,c),r=u}_&&_.call(this,a,d,c)},E.shouldComponentUpdate=i}return l.__N||l.__}function j(e,t){var n=be(B++,3);!S.__s&&it(n.__H,t)&&(n.__=e,n.u=t,E.__H.__h.push(n))}function rt(e){return V=5,I(function(){return{current:e}},[])}function I(e,t){var n=be(B++,7);return it(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Y(e,t){return V=8,I(function(){return e},t)}function je(){for(var e;e=nt.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(he),t.__h.some(lt),t.__h=[]}catch(n){t.__h=[],S.__e(n,e.__v)}}}S.__b=function(e){E=null,Me&&Me(e)},S.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Oe&&Oe(e,t)},S.__r=function(e){Le&&Le(e),B=0;var t=(E=e.__c).__H;t&&(ce===E?(t.__h=[],E.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&je(),B=0)),ce=E},S.diffed=function(e){Ue&&Ue(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(nt.push(t)!==1&&He===S.requestAnimationFrame||((He=S.requestAnimationFrame)||wt)(je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),ce=E=null},S.__c=function(e,t){t.some(function(n){try{n.__h.some(he),n.__h=n.__h.filter(function(l){return!l.__||lt(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],S.__e(l,n.__v)}}),Fe&&Fe(e,t)},S.unmount=function(e){Re&&Re(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{he(l)}catch(i){t=i}}),n.__H=void 0,t&&S.__e(t,n.__v))};var qe=typeof requestAnimationFrame=="function";function wt(e){var t,n=function(){clearTimeout(l),qe&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);qe&&(t=requestAnimationFrame(n))}function he(e){var t=E,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),E=t}function lt(e){var t=E;e.__c=e.__(),E=t}function it(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function ot(e,t){return typeof t=="function"?t(e):t}async function xt(){if(window.__EDSGER_MINDMAP__)return ze(window.__EDSGER_MINDMAP__);const e=await fetch("./edsger-mindmap.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-mindmap.json (HTTP ${e.status})`);return ze(await e.json())}function ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Et(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function _t(e,t){return`${e.title}
|
|
26
|
+
${e.summary}
|
|
27
|
+
${e.files.join(`
|
|
28
|
+
`)}`.toLowerCase().includes(t)}function St(e,t){if(!t)return null;const n=new Set,l=i=>{let r=_t(i,t);for(const _ of i.children)l(_)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function st(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function $t(e,t,n){const l=[],i=r=>{for(const _ of r.children)t&&!t.has(_.id)||(l.push(_.id),st(_,t,n)&&i(_))};return i(e),l}function Ct(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function At(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}function ct(e){return e.children.reduce((t,n)=>t+1+ct(n),0)}function ae({text:e,query:t}){return t?At(e,t).map((n,l)=>n.hit?s("mark",{children:n.text},l):n.text):e}function Nt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,_=t.isExpanded(e),a=t.selectedId===e.id,d=rt(null);j(()=>{var u;a&&((u=d.current)==null||u.scrollIntoView({block:"nearest"}))},[a]);const c=["row",a?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" ");return s("div",{class:"node","data-kind":e.kind,children:[s("div",{class:c,ref:d,onClick:()=>i(e.id),children:[r?s("button",{class:`disclosure ${_?"open":""}`,title:_?"Collapse":"Expand",onClick:u=>{u.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):s("span",{class:"disclosure spacer"}),s("button",{class:`dot ${r&&!_?"loaded":""}`,title:"Zoom in",onClick:u=>{u.stopPropagation(),l(e.id)},children:s("span",{})}),s("div",{class:"node-text",children:[s("span",{class:"title",onDblClick:()=>l(e.id),children:s(ae,{text:e.title,query:t.query})}),e.kind&&e.kind!=="topic"?s("span",{class:"kind-badge",children:e.kind}):null,r&&!_?s("span",{class:"count-badge",children:ct(e)}):null,e.summary?s("span",{class:"summary",children:s(ae,{text:e.summary,query:t.query})}):null,e.files.length?s("span",{class:"files",children:e.files.map(u=>s("code",{class:"file",children:s(ae,{text:u,query:t.query})},u))}):null]})]}),r&&_?s("div",{class:"children",children:s(at,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function at({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return s("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>s(Nt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const ut="edsger-theme",pe=new Set;function Pt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Tt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(ut);if(e==="light"||e==="dark")return e}catch{}return Pt()}let G=Tt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",G);function Dt(){return G}function It(e){G=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(ut,e)}catch{}for(const t of pe)t()}function Ht(){It(G==="dark"?"light":"dark")}function Mt(e){return pe.add(e),()=>{pe.delete(e)}}function Lt(){const[e,t]=U(G);return j(()=>Mt(()=>t(Dt())),[]),e}function Ut(){const e=Lt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return s("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Ht(),children:s("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function We(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Ft(){var we;const[e,t]=U(null),[n,l]=U(null),[i,r]=U(null),[_,a]=U(null),[d,c]=U(new Set),[u,y]=U(null),[o,h]=U("");j(()=>{xt().then(t).catch(p=>l(p instanceof Error?p.message:String(p)))},[]);const f=I(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),C=I(()=>e?[...e.history].reverse():[],[e]),g=I(()=>f?Et(f.root):null,[f]);j(()=>{f&&(a(null),y(null),c(new Set(f.root.children.map(p=>p.id))))},[f]);const m=I(()=>f?_&&(g!=null&&g.get(_))?g.get(_).node:f.root:null,[f,g,_]),v=I(()=>g?Ct(g,_):[],[g,_]),k=o.trim().toLowerCase(),N=I(()=>m?St(m,k):null,[k,m]),H=I(()=>({isVisible:p=>N?N.has(p.id):!0,isExpanded:p=>st(p,N,d),isMatch:p=>!!k&&_t(p,k),query:k,selectedId:u}),[N,d,k,u]),D=I(()=>m?$t(m,N,d):[],[m,N,d]),R=Y(p=>{c(w=>{const x=new Set(w);return x.has(p)?x.delete(p):x.add(p),x})},[]),P=Y(p=>{if(a(p),y(null),h(""),p&&(g!=null&&g.get(p))){const w=g.get(p).node;c(x=>{const $=new Set(x);$.add(p);for(const A of w.children)$.add(A.id);return $})}},[g]),z=Y(()=>{m&&c(p=>{const w=new Set(p),x=$=>{$.children.length&&w.add($.id),$.children.forEach(x)};return x(m),w})},[m]),T=Y(()=>{m&&c(p=>{const w=new Set(p),x=$=>{w.delete($.id),$.children.forEach(x)};for(const $ of m.children)x($);return w})},[m]),M=rt({index:g,flat:D,selected:u,expanded:d,zoomId:_});M.current={index:g,flat:D,selected:u,expanded:d,zoomId:_},j(()=>{const p=w=>{var Se,$e,Ce,Ae,Ne;const{index:x,flat:$,selected:A,expanded:xe,zoomId:K}=M.current,Q=w.target;if(Q&&(Q.tagName==="INPUT"||Q.tagName==="SELECT")){w.key==="Escape"&&Q.blur();return}if(!x||!$.length){w.key==="Escape"&&K&&(w.preventDefault(),P(((Se=x==null?void 0:x.get(K))==null?void 0:Se.parent)??null));return}const Ee=A?$.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),y($[Math.min(Ee+1,$.length-1)]??null);break;case"ArrowUp":w.preventDefault(),y($[Math.max(Ee-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const O=($e=x.get(A))==null?void 0:$e.node;O!=null&&O.children.length&&!xe.has(A)&&R(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const O=(Ce=x.get(A))==null?void 0:Ce.node;if(O!=null&&O.children.length&&xe.has(A))R(A);else{const _e=(Ae=x.get(A))==null?void 0:Ae.parent;_e&&$.includes(_e)&&y(_e)}break}case"Enter":A&&(w.preventDefault(),P(A));break;case"Escape":K&&(w.preventDefault(),P(((Ne=x.get(K))==null?void 0:Ne.parent)??null));break}};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[R,P]),j(()=>{u&&!D.includes(u)&&y(null)},[D,u]);const ke=(e==null?void 0:e.repo)??(f==null?void 0:f.repo)??"";return s("div",{class:"app",children:[s("header",{class:"topbar",children:[s("div",{class:"brand",children:[s("span",{class:"logo",children:"edsger"}),s("span",{class:"subtitle",children:"mind map"})]}),s("div",{class:"topbar-actions",children:[ke?s("div",{class:"repo",children:ke}):null,s(Ut,{})]})]}),s("main",{class:"content",children:n?s("div",{class:"empty",children:[s("strong",{children:"Failed to load data."}),s("div",{class:"muted",children:n})]}):e?!f||!m?s("div",{class:"empty",children:["No mind map yet. Run ",s("code",{children:"edsger mindmap"}),"."]}):s("div",{class:"stack",children:[_?null:s("section",{class:"profile",children:[s("p",{class:"summary",children:f.profile.summary}),f.profile.kinds.length?s("div",{class:"chips",children:f.profile.kinds.map(p=>s("span",{class:"chip kind",children:p},p))}):null,s("dl",{class:"facts",children:[s("div",{children:[s("dt",{children:"Languages"}),s("dd",{children:f.languages.join(", ")||"generic"})]}),s("div",{children:[s("dt",{children:"Nodes"}),s("dd",{children:[f.nodeCount," · depth ",f.depth]})]}),s("div",{children:[s("dt",{children:"Commit"}),s("dd",{children:(we=f.git)!=null&&we.commit?s("code",{children:[f.git.commit,f.git.branch?` (${f.git.branch})`:"",f.git.dirty?" ✻":""]}):"—"})]}),s("div",{children:[s("dt",{children:"Generated"}),s("dd",{children:We(f.generatedAt)})]}),C.length>1?s("div",{children:[s("dt",{children:"Run"}),s("dd",{children:s("select",{class:"run-select",value:i??f.runId,onChange:p=>r(p.target.value),children:C.map(p=>s("option",{value:p.runId,children:[We(p.generatedAt)," · ",p.nodeCount," nodes"]},p.runId))})})]}):null]})]}),s("section",{class:"outline-panel",children:[s("div",{class:"outline-toolbar",children:[v.length?s("nav",{class:"breadcrumb",children:[s("button",{class:"crumb",onClick:()=>P(null),children:f.root.title}),v.slice(1,-1).map(p=>s("span",{children:[s("span",{class:"crumb-sep",children:"›"}),s("button",{class:"crumb",onClick:()=>P(p.id),children:p.title})]},p.id)),s("span",{class:"crumb-sep",children:"›"}),s("span",{class:"crumb current",children:m.title})]}):s("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),s("div",{class:"outline-actions",children:[s("input",{class:"search",type:"search",placeholder:"Search titles, summaries, files…",value:o,onInput:p=>h(p.target.value)}),s("button",{class:"ghost-btn",onClick:z,children:"Expand all"}),s("button",{class:"ghost-btn",onClick:T,children:"Collapse all"})]})]}),s("div",{class:"zoom-head",children:[s("h2",{class:"zoom-title",children:m.title}),m.summary?s("p",{class:"zoom-summary",children:m.summary}):null,m.files.length?s("div",{class:"files",children:m.files.map(p=>s("code",{class:"file",children:p},p))}):null]}),k&&!D.length?s("div",{class:"empty muted",children:["No nodes match “",o,"”."]}):s(at,{nodes:m.children,view:H,onToggle:R,onZoom:P,onSelect:y})]}),f.notes&&!_?s("section",{class:"notes",children:[s("h2",{children:"Notes"}),s("p",{children:f.notes})]}):null]}):s("div",{class:"empty",children:"Loading…"})}),s("footer",{class:"foot",children:s("span",{children:"Generated by edsger"})})]})}const Be=document.getElementById("app");Be&&yt(s(Ft,{}),Be);</script>
|
|
29
|
+
<style rel="stylesheet" crossorigin>:root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}</style>
|
|
30
|
+
</head>
|
|
31
|
+
<body>
|
|
32
|
+
<div id="app"></div>
|
|
33
|
+
</body>
|
|
34
|
+
</html>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/stevenzg/edsger-assets/schema/audit.schema.json",
|
|
4
|
+
"title": "Edsger Repository Audit Standard",
|
|
5
|
+
"description": "Dimensions an auditor (human or agent) inspects across a whole repository to surface unprofessional, outdated, or fragile implementations. A `base` standard is merged with zero or more language overlays.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["id", "name", "version", "kind", "dimensions"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
11
|
+
"name": { "type": "string" },
|
|
12
|
+
"version": { "type": "string" },
|
|
13
|
+
"kind": { "const": "audit" },
|
|
14
|
+
"extends": { "type": ["string", "null"] },
|
|
15
|
+
"appliesTo": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": { "type": "string" },
|
|
18
|
+
"default": ["*"]
|
|
19
|
+
},
|
|
20
|
+
"guidance": {
|
|
21
|
+
"description": "Overall prose guidance on the tone and rigour of the audit.",
|
|
22
|
+
"type": "string"
|
|
23
|
+
},
|
|
24
|
+
"policy": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"properties": {
|
|
28
|
+
"maxFindings": {
|
|
29
|
+
"description": "Cap on reported findings; the lowest-severity tail beyond it is omitted (and counted) so reports stay readable.",
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"minimum": 1,
|
|
32
|
+
"default": 60
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"dimensions": {
|
|
37
|
+
"type": "array",
|
|
38
|
+
"minItems": 1,
|
|
39
|
+
"items": { "$ref": "#/definitions/dimension" }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"definitions": {
|
|
43
|
+
"dimension": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": ["id", "title", "guidance"],
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"properties": {
|
|
48
|
+
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
49
|
+
"title": { "type": "string" },
|
|
50
|
+
"defaultSeverity": {
|
|
51
|
+
"enum": ["critical", "high", "medium", "low", "info"],
|
|
52
|
+
"default": "medium"
|
|
53
|
+
},
|
|
54
|
+
"guidance": { "type": "string" },
|
|
55
|
+
"checklist": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"items": { "type": "string" }
|
|
58
|
+
},
|
|
59
|
+
"references": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": { "type": "string" }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/stevenzg/edsger-assets/schema/mindmap.schema.json",
|
|
4
|
+
"title": "Edsger Mind Map Standard",
|
|
5
|
+
"description": "Guidance for building an implementation mind map of a repository: an outline tree (Workflowy-style) whose root is the project and whose branches explain how the code is actually implemented. A `base` standard is merged with zero or more language overlays. The `aspects` are candidate top-level branches — for each project the agent keeps only the aspects the code supports, and grows each into a faithful subtree grounded in real files.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["id", "name", "version", "kind", "aspects"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
11
|
+
"name": { "type": "string" },
|
|
12
|
+
"version": { "type": "string" },
|
|
13
|
+
"kind": { "const": "mindmap" },
|
|
14
|
+
"extends": {
|
|
15
|
+
"description": "id of a standard this overlay merges on top of (usually 'base').",
|
|
16
|
+
"type": ["string", "null"]
|
|
17
|
+
},
|
|
18
|
+
"appliesTo": {
|
|
19
|
+
"description": "Language ids this standard targets, or ['*'] for any.",
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": { "type": "string" },
|
|
22
|
+
"default": ["*"]
|
|
23
|
+
},
|
|
24
|
+
"guidance": {
|
|
25
|
+
"description": "Overall prose guidance on the shape of the tree: what the root is, how deep to go, what makes a good node.",
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"maxDepth": {
|
|
29
|
+
"description": "Recommended maximum depth of the tree, root inclusive.",
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"minimum": 2,
|
|
32
|
+
"maximum": 10
|
|
33
|
+
},
|
|
34
|
+
"aspects": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"minItems": 1,
|
|
37
|
+
"items": { "$ref": "#/definitions/aspect" }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"definitions": {
|
|
41
|
+
"aspect": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"required": ["id", "name", "appliesWhen", "guidance"],
|
|
44
|
+
"additionalProperties": false,
|
|
45
|
+
"properties": {
|
|
46
|
+
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
47
|
+
"name": { "type": "string" },
|
|
48
|
+
"appliesWhen": {
|
|
49
|
+
"description": "Prose describing the project characteristics that make this branch valuable, so the agent can decide whether to include it.",
|
|
50
|
+
"type": "string"
|
|
51
|
+
},
|
|
52
|
+
"detect": {
|
|
53
|
+
"description": "Coarse signals (file globs, marker filenames, or keywords) that hint this aspect is relevant. '*' means 'almost always useful'. Advisory only — the agent still decides from real evidence.",
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": { "type": "string" },
|
|
56
|
+
"default": []
|
|
57
|
+
},
|
|
58
|
+
"guidance": {
|
|
59
|
+
"description": "How to grow this branch from the repository: what to read, what child nodes to create, and how to keep the subtree faithful and legible.",
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"references": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": { "type": "string" }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit
|
|
3
|
+
description: >
|
|
4
|
+
Deep-audit the current repository across every professionalism dimension —
|
|
5
|
+
correctness, security, outdated/deprecated patterns, dependency health,
|
|
6
|
+
craftsmanship, error handling, architecture, testing, tooling, docs, and
|
|
7
|
+
performance — and produce an organised, evidence-backed issue list. Use when
|
|
8
|
+
the user asks to audit, review, critique, nitpick, or "find everything wrong
|
|
9
|
+
with" a repo, or to make it more professional/modern.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Audit a repository
|
|
13
|
+
|
|
14
|
+
You will comb through the repository in the current working directory looking
|
|
15
|
+
for anything unprofessional, outdated, fragile, or sloppy, and organise the
|
|
16
|
+
findings into a prioritised, evidence-backed report.
|
|
17
|
+
|
|
18
|
+
## 1. Prefer the CLI if it is installed
|
|
19
|
+
|
|
20
|
+
If the `edsger` CLI is available, use it:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
command -v edsger >/dev/null 2>&1 && edsger audit || echo "no-cli"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If it ran, summarise `.edsger/audit/report.md` for the user and stop.
|
|
27
|
+
Otherwise continue with the native flow below.
|
|
28
|
+
|
|
29
|
+
## 2. Detect the language(s)
|
|
30
|
+
|
|
31
|
+
Look for manifest files to decide which overlays apply: `package.json`/`tsconfig.json`
|
|
32
|
+
→ typescript; `pyproject.toml`/`requirements.txt` → python; `go.mod` → go;
|
|
33
|
+
`*.csproj`/`*.sln` → csharp; `pom.xml`/`build.gradle` → java; `pubspec.yaml` → dart.
|
|
34
|
+
A repo may match several.
|
|
35
|
+
|
|
36
|
+
## 3. Load the audit standard
|
|
37
|
+
|
|
38
|
+
Read the base standard and any matching language overlays from this plugin:
|
|
39
|
+
|
|
40
|
+
- `${CLAUDE_PLUGIN_ROOT}/audit/base.yaml` (always)
|
|
41
|
+
- `${CLAUDE_PLUGIN_ROOT}/audit/<language>.yaml` (for each detected language)
|
|
42
|
+
|
|
43
|
+
Merge overlays onto the base **by id**: a dimension with the same `id` extends
|
|
44
|
+
the base one; new ids are added. If the repo has a `.edsger/audit/` directory,
|
|
45
|
+
those files override the bundled standard (same id-merge rules).
|
|
46
|
+
|
|
47
|
+
## 4. Hunt for findings in every dimension
|
|
48
|
+
|
|
49
|
+
Explore the repository thoroughly with read-only tools (read files, grep,
|
|
50
|
+
`ls`, `git log`). Do **not** modify the repo. For every dimension, actively
|
|
51
|
+
look for violations of its guidance and checklist. Each finding needs:
|
|
52
|
+
|
|
53
|
+
- the dimension id and a severity (`critical`/`high`/`medium`/`low`/`info`)
|
|
54
|
+
- the file path (and line where it applies)
|
|
55
|
+
- what is wrong, **why it is unprofessional or outdated**, and a concrete fix
|
|
56
|
+
- an effort estimate: `quick`, `moderate`, or `involved`
|
|
57
|
+
|
|
58
|
+
Be exacting — this is a deliberate nitpicking pass — but every finding must be
|
|
59
|
+
grounded in evidence you actually saw. When the same issue recurs across many
|
|
60
|
+
files, consolidate it into ONE finding whose detail lists the affected
|
|
61
|
+
locations. Respect the standard's `policy.maxFindings` cap (drop the
|
|
62
|
+
lowest-severity tail and say how many were omitted). Also record what the repo
|
|
63
|
+
does well (`positives`), so the critique stays fair.
|
|
64
|
+
|
|
65
|
+
## 5. Organise and report
|
|
66
|
+
|
|
67
|
+
Write `.edsger/audit/report.md` containing:
|
|
68
|
+
|
|
69
|
+
- a short overall assessment and finding counts by severity
|
|
70
|
+
- **Quick wins** — high-impact findings with `quick` effort
|
|
71
|
+
- findings grouped by dimension, each group sorted by severity, with
|
|
72
|
+
file/line, explanation, and suggested fix
|
|
73
|
+
- the positives list
|
|
74
|
+
|
|
75
|
+
Then give the user a concise summary: total findings, the severity breakdown,
|
|
76
|
+
the top 3–5 most important fixes, and the quickest wins.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mindmap
|
|
3
|
+
description: >
|
|
4
|
+
Generate an implementation mind map of a repository — an outline tree
|
|
5
|
+
(Workflowy-style) whose root is the project and whose branches explain how
|
|
6
|
+
the code is actually implemented (entry points, core flows, module
|
|
7
|
+
structure, domain model, integrations), with every leaf grounded in real
|
|
8
|
+
files. Use when the user asks for a mind map, outline, tree, or structured
|
|
9
|
+
overview of how a codebase is implemented.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Mind-map a repository
|
|
13
|
+
|
|
14
|
+
You will inspect the repository in the current working directory and build an
|
|
15
|
+
**implementation mind map**: a tree whose root is the project and whose
|
|
16
|
+
branches explain how the code is implemented, deep enough that leaves point at
|
|
17
|
+
concrete files.
|
|
18
|
+
|
|
19
|
+
## 1. Prefer the CLI if it is installed
|
|
20
|
+
|
|
21
|
+
If the `edsger` CLI is available, it runs the agent and produces a browsable
|
|
22
|
+
Workflowy-style viewer — use it:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
command -v edsger >/dev/null 2>&1 && edsger mindmap || echo "no-cli"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If it ran, summarise `.edsger/mindmap/mindmap.md` for the user and stop.
|
|
29
|
+
Otherwise continue with the native flow below.
|
|
30
|
+
|
|
31
|
+
## 2. Detect the language(s)
|
|
32
|
+
|
|
33
|
+
Look for manifest files to decide which overlays apply: `package.json`/`tsconfig.json`
|
|
34
|
+
→ typescript; `pyproject.toml`/`requirements.txt` → python; `go.mod` → go;
|
|
35
|
+
`*.csproj`/`*.sln` → csharp; `pom.xml`/`build.gradle` → java; `pubspec.yaml` → dart.
|
|
36
|
+
A repo may match several.
|
|
37
|
+
|
|
38
|
+
## 3. Load the standard
|
|
39
|
+
|
|
40
|
+
Read the base standard and any matching language overlays from this plugin:
|
|
41
|
+
|
|
42
|
+
- `${CLAUDE_PLUGIN_ROOT}/mindmap/base.yaml` (always)
|
|
43
|
+
- `${CLAUDE_PLUGIN_ROOT}/mindmap/<language>.yaml` (for each detected language)
|
|
44
|
+
|
|
45
|
+
Merge overlays onto the base **by aspect id** (new ids are appended). If the
|
|
46
|
+
repo has a `.edsger/mindmap/` directory, those files override the bundled
|
|
47
|
+
standard.
|
|
48
|
+
|
|
49
|
+
## 4. Explore and build the tree
|
|
50
|
+
|
|
51
|
+
Explore the repo (Read/Grep/Glob, read-only) and characterise it. The
|
|
52
|
+
standard's `aspects` are **candidate top-level branches** — keep only the ones
|
|
53
|
+
this project's code supports (use `detect` and `appliesWhen`), rename them to
|
|
54
|
+
the project's own vocabulary where clearer, and grow each into a subtree by
|
|
55
|
+
following its `guidance`. Rules:
|
|
56
|
+
|
|
57
|
+
- Root = the project: name + one-line summary of what it does.
|
|
58
|
+
- 3-7 first-level branches; respect the standard's `maxDepth`.
|
|
59
|
+
- Every node: a short title (2-6 words) plus a one-or-two-sentence summary
|
|
60
|
+
that is true and specific to THIS codebase.
|
|
61
|
+
- Leaf nodes cite the file(s) they describe. Never invent structure that is
|
|
62
|
+
not in the code.
|
|
63
|
+
|
|
64
|
+
## 5. Write the report
|
|
65
|
+
|
|
66
|
+
Write `.edsger/mindmap/mindmap.md` as a nested Markdown outline: a header with
|
|
67
|
+
the project profile, then the tree as indented bullets — `**Title** — summary`
|
|
68
|
+
with file references in backticks. Then give the user a concise summary of the
|
|
69
|
+
top-level branches and anything surprising you found.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.uplot,.uplot *,.uplot *:before,.uplot *:after{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;-webkit-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607D8B}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607D8B}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}:root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}
|