@codeursenior/pek 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- :root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#26332d;background:#fafbf8;font-synthesis:none;--green: #557750;--purple: #9781b1;--line: #e3e8df;--muted: #798278}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #6a9261;outline-offset:3px}textarea:focus-visible{outline:2px solid #6a9261;outline-offset:3px}button{color:inherit}button:disabled{cursor:wait;opacity:.5}.app{display:flex;min-height:100vh}.sidebar{width:234px;flex-shrink:0;background:#f1f3ec;border-right:1px solid var(--line);padding:30px 18px 16px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{display:flex;flex-direction:column;align-items:center;gap:10px;color:#25342b;text-decoration:none;padding:0;flex-shrink:0;text-align:center;font-weight:750;font-size:24px;letter-spacing:-1px}.brand-sub{font-size:8px;display:block;letter-spacing:2px;margin-top:3px;font-weight:600}.brand img{flex-shrink:0;width:100%;height:auto;aspect-ratio:1;border-radius:50%;object-fit:cover}.brand-text{min-width:0;max-width:100%}.agent-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-avatar{border-radius:50%;object-fit:cover}.workspace{margin:38px 11px 30px;display:flex;flex-direction:column;gap:9px}.eyebrow,.nav-label{font-size:10px;font-weight:650;letter-spacing:1.8px;color:#7d8778}.workspace strong{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.workspace .mono{font-size:10px;color:#84907e;white-space:normal;overflow-wrap:anywhere;line-height:1.6}.local-label{font-size:10px;color:#63775c;margin-top:5px;display:flex;gap:6px;align-items:center}.local-label i,.safe-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:#84a071}.nav-label{padding:0 12px;margin:5px 0 14px;font-size:9px;letter-spacing:1.4px}nav{display:grid;gap:7px}.nav-item{border:0;background:transparent;text-align:left;padding:13px 12px;border-radius:7px;display:flex;align-items:center;gap:12px;font-size:13px;color:#7c8478}.nav-item:hover{background:#e9ede3}.nav-item.active{background:#e2e9d9;color:#36522e;font-weight:650}.nav-icon{font-size:20px;line-height:20px;width:20px;text-align:center}.count{font-size:10px;margin-left:auto;background:#e7eadf;padding:3px 6px;border-radius:4px;font-weight:500}.active .count{background:#d2dfc6}.sidebar-note{margin:auto 12px 12px;padding-top:35px}.orbit-mark{font-size:40px;color:#8f9f82;line-height:1;margin-bottom:18px}.sidebar-note strong{font-family:Georgia,serif;font-weight:400;font-size:23px;line-height:1.3;letter-spacing:-.5px}.sidebar-note p{font-size:11px;line-height:1.8;color:#87907f}.sidebar-rescan{margin:0 12px 42px;display:flex;gap:8px}.sidebar-rescan #refresh{flex:1}.sidebar-rescan #theme-toggle{width:35px;flex-shrink:0;padding:8px;font-size:16px;line-height:1}.sidebar-footer{border-top:1px solid #dde3d5;padding:20px 6px 2px;font-size:9px;color:#8b9385;display:flex;align-items:center;gap:6px}.version{margin-left:auto}main{min-width:0;flex:1}.small-button{background:#fff;border:1px solid var(--line);border-radius:6px;padding:8px 12px;font-size:11px}.page-heading{padding:36px 38px 27px;display:flex;align-items:center;justify-content:space-between;gap:20px}.page-heading .eyebrow{font-size:9px;color:#8c9781}h1{font-size:32px;letter-spacing:-1.2px;font-weight:520;margin:9px 0 11px}.page-heading p{font-size:12px;color:#87917e;margin:0}.view-switch{display:flex;border:1px solid var(--line);border-radius:7px;padding:3px;background:#f1f3ed;gap:2px}.view-switch button{border:0;background:none;border-radius:4px;padding:7px 11px;color:#8a9382;font-size:11px}.view-switch .selected{background:#fff;color:#465a3d;box-shadow:0 1px 4px #25392310}.toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:0 38px 22px;gap:12px}.scope-tabs{display:flex;flex-wrap:wrap;gap:6px}.scope-tabs button{border:0;border-radius:5px;background:transparent;padding:8px 12px;font-size:11px;color:#8b9483;display:flex;align-items:center;gap:6px}.scope-tabs .selected{background:#e9eee2;color:#516548}.dot{display:inline-block;height:6px;width:6px;border-radius:50%}.dot.project{background:#71965e}.dot.user{background:#a18bbb}.filters{display:flex;gap:10px;align-items:center}.search{border:1px solid var(--line);display:flex;align-items:center;gap:8px;padding:7px 10px;background:#fff;border-radius:6px;color:#87907e;font-size:17px}.search input{border:0;background:transparent;outline:none;font-size:11px;width:130px;color:#53614b}.search kbd{border:1px solid var(--line);font-size:9px;padding:0 4px;border-radius:3px;color:#a1a998}select{border:1px solid var(--line);border-radius:5px;background:#fff;color:#7d8775;font-size:11px;padding:8px;max-width:130px}#canvas{margin:0 38px;min-height:390px;height:calc(100vh - 330px);border:1px solid var(--line);border-radius:10px;position:relative;background-color:#fcfdf9;overflow:auto}#canvas.graph-canvas{background-image:radial-gradient(#dce3d4 .8px,transparent .8px);background-size:18px 18px;overflow:hidden}svg.graph{width:100%;height:100%;display:block;cursor:grab;touch-action:none}svg.graph:active{cursor:grabbing}.graph-key{position:absolute;left:22px;top:20px;display:flex;gap:18px;align-items:center;font-size:10px;color:#89947f;pointer-events:none}.graph-key span{display:flex;align-items:center;gap:6px}.key-line{width:20px;border-top:1px solid #a2b196}.key-line.dashed{border-top-style:dashed}.graph-controls{position:absolute;bottom:20px;left:20px;display:flex;border:1px solid #dfe6d6;border-radius:6px;background:#fffffff5;box-shadow:0 2px 7px #3c51210a;overflow:hidden}.graph-controls button{border:0;background:transparent;width:34px;height:32px;font-size:16px;border-right:1px solid var(--line)}.graph-controls button:last-child{border-right:0;width:46px;font-size:10px}.graph-hint{position:absolute;bottom:24px;right:22px;font-size:9px;color:#99a18f;pointer-events:none}.graph-node{cursor:pointer;outline:none}.graph-node circle{stroke-width:1.5}.graph-node:hover circle,.graph-node:focus circle{stroke:#344d2e;stroke-width:3}.graph-node text{font-family:Inter,-apple-system,sans-serif;text-anchor:middle;fill:#687960;pointer-events:none;font-size:10px;paint-order:stroke;stroke:#fcfdf9;stroke-width:4px;stroke-linejoin:round}.graph-node .node-icon{font-size:14px;fill:#5d7752;stroke:none}.graph-node.user text{fill:#8a769e}.graph-node .node-label.root-label{font-size:12px;font-weight:650;fill:#344c2b}.main-footer{display:flex;justify-content:space-between;padding:15px 40px;font-size:10px;color:#929b88}.notice{margin:0 38px 15px;padding:10px 13px;border-radius:6px;background:#f4f0df;color:#8a7948;font-size:11px;line-height:1.5}.loading,.empty{height:100%;min-height:350px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8b957f;font-size:13px;gap:10px;padding:30px;text-align:center}.empty strong{font-size:18px;font-weight:500;color:#657559}.empty p{max-width:430px;line-height:1.7;margin:0}.empty-mark{font-size:38px;color:#abb99d;margin-bottom:10px}.table-wrap{overflow:auto;height:100%}table{width:100%;border-collapse:collapse;font-size:12px;text-align:left}th{position:sticky;top:0;z-index:1;background:#f4f6ee;font-size:9px;letter-spacing:1px;text-transform:uppercase;font-weight:600;color:#869078;padding:16px;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:17px 16px;border-bottom:1px solid #eaf0e2;vertical-align:middle;color:#6d7e61}tbody tr:hover{background:#f3f6ed}td.name{max-width:330px}td.name button{border:0;background:none;padding:0;text-align:left;color:#344b2b;font-weight:600;font-size:12px}td.name p{color:#98a18b;font-size:10px;margin:6px 0 0;max-width:330px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line-count{font-variant-numeric:tabular-nums;white-space:nowrap}.badge{font-size:9px;white-space:nowrap;padding:4px 7px;border-radius:4px;background:#edf2e7;color:#6b8258;display:inline-flex;align-items:center;gap:5px}.badge.user{background:#f0ecf5;color:#9a84b1}.badge.neutral{background:#f1f1e9;color:#8d927d}.badge.warn{background:#f7f0dd;color:#a58a44}.client-icons{display:flex;gap:7px}.client-icon{width:27px;height:27px;border:1px solid #dce5d5;display:flex;align-items:center;justify-content:center;border-radius:6px;background:#f0f5e9;color:#607952}.client-icon.off{background:#f8f9f5;border-color:#e9ede4;color:#cdd4c6}.client-icon img{width:18px;height:18px;object-fit:contain}.client-icon--codex img{width:22px;height:22px}.client-icon.off img{opacity:.3}.table-help{font-size:10px;padding:14px 16px;background:#f6f8f0;color:#879378;line-height:1.65;border-bottom:1px solid var(--line)}.detail{position:fixed;right:0;top:0;height:100vh;width:min(450px,90vw);background:#fffffc;z-index:5;border-left:1px solid #d9e1d1;box-shadow:-12px 0 60px #2d42201a;padding:40px 26px;overflow:auto}.detail[hidden]{display:none}.close-button{position:absolute;right:18px;top:14px;border:0;background:#f0f3eb;border-radius:5px;font-size:22px;color:#7d8b72;width:28px;height:28px}.detail h2{font-size:24px;letter-spacing:-.7px;margin:17px 0 10px;overflow-wrap:anywhere}.detail p{font-size:12px;line-height:1.8;color:#87917b;overflow-wrap:anywhere}.detail h3{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:#7d8c70;margin-top:27px}.detail pre{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.8;color:#6b7a5f;background:#f6f8f1;border:1px solid #e7ecdf;border-radius:6px;padding:14px}.detail .source-path{font-size:10px;line-height:1.8}.detail .client-line{display:flex;gap:8px;align-items:center;margin:9px 0;font-size:11px;color:#7e8d72}.detail .edit-source{display:grid;gap:7px;margin:14px 0;color:#7d8c70;font-size:11px}.detail .edit-source select{max-width:100%;width:100%}.detail .edit-button,.detail .delete-button,.detail .delete-confirm button,.detail .edit-actions button{border:1px solid #c9d7bf;border-radius:6px;background:#e9f0e2;color:#36522e;padding:9px 13px;font-size:11px}.detail .delete-button{margin-left:8px;background:#fff;border-color:#d9b9ad;color:#8a4233}.detail .delete-confirm{margin-top:12px;padding:12px;border:1px solid #e4c9bd;border-radius:6px;background:#fff8f5}.detail .delete-confirm[hidden]{display:none}.detail .delete-confirm p{margin:0 0 10px;color:#743b2e}.detail .delete-confirm button:first-of-type{background:#8a4233;border-color:#8a4233;color:#fff}.detail .delete-confirm button:last-of-type{margin-left:8px;background:#fff}.detail .edit-form{margin-top:12px}.detail .edit-form[hidden]{display:none}.detail .edit-form textarea{width:100%;min-height:340px;resize:vertical;border:1px solid #c9d7bf;border-radius:6px;background:#fcfdf9;color:#26332d;padding:12px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.6}.detail .edit-actions{display:flex;gap:8px;margin-top:10px}.detail .edit-actions button:last-child{background:#fff}.detail .edit-status{color:#526f48}@media(min-width:1550px){.page-heading,.toolbar{padding-left:54px;padding-right:54px}#canvas{margin:0 54px}}@media(max-width:950px){.sidebar{width:188px;padding-left:10px;padding-right:10px}.page-heading{padding:28px 22px 22px}.toolbar{padding:0 22px 18px}#canvas{margin:0 22px}.filters{gap:5px}.search input{width:100px}.scope-tabs button{padding:8px}.view-switch{flex-shrink:0}h1{font-size:28px}.notice{margin:0 22px 15px}}@media(max-width:700px){.app{display:block}.sidebar{position:static;width:100%;height:auto;padding:16px}.brand{font-size:20px}.workspace{margin:24px 0}.brand img{max-width:198px}.nav-label,.sidebar-note,.sidebar-footer{display:none}nav{display:flex;flex-wrap:wrap;margin-top:16px}.sidebar-rescan{margin:12px 0 0}.nav-item{flex:1 1 140px;font-size:11px;padding:10px 6px;gap:5px}.count{font-size:9px}.page-heading{padding:25px 18px 20px}.page-heading p{line-height:1.6;max-width:270px}.page-heading .view-switch{display:none}h1{font-size:25px}.toolbar{padding:0 18px 18px;flex-wrap:wrap}.filters{width:100%;justify-content:space-between}.search{flex:1}.search input{width:100%}#canvas{margin:0 18px;height:55vh;min-height:360px}.graph-hint{display:none}.main-footer{padding:14px 20px;gap:20px;font-size:9px}.graph-key{gap:12px;font-size:9px}.notice{margin:0 18px 15px}}[hidden]{display:none!important}:root[data-theme=dark]{color-scheme:dark;color:#e3eade;background:#131a16;--line: #344238}[data-theme=dark] .sidebar{background:#1c261f}[data-theme=dark] .brand,[data-theme=dark] .workspace strong,[data-theme=dark] .detail h2{color:#edf4e9}[data-theme=dark] .eyebrow,[data-theme=dark] .nav-label,[data-theme=dark] .workspace .mono,[data-theme=dark] .nav-item,[data-theme=dark] .sidebar-note p,[data-theme=dark] .sidebar-footer,[data-theme=dark] .page-heading p,[data-theme=dark] .page-heading .eyebrow,[data-theme=dark] .view-switch button,[data-theme=dark] .scope-tabs button,[data-theme=dark] .search,[data-theme=dark] .search kbd,[data-theme=dark] select,[data-theme=dark] .graph-key,[data-theme=dark] .graph-hint,[data-theme=dark] .main-footer,[data-theme=dark] .loading,[data-theme=dark] .empty,[data-theme=dark] .table-help,[data-theme=dark] th,[data-theme=dark] td,[data-theme=dark] td.name p,[data-theme=dark] .detail p,[data-theme=dark] .detail h3,[data-theme=dark] .detail .client-line,[data-theme=dark] .detail .edit-source{color:#aab9a8}[data-theme=dark] .local-label,[data-theme=dark] .nav-item.active,[data-theme=dark] .view-switch .selected,[data-theme=dark] .scope-tabs .selected,[data-theme=dark] td.name button,[data-theme=dark] .detail .edit-status{color:#b5dda3}[data-theme=dark] .nav-item:hover,[data-theme=dark] tbody tr:hover{background:#2b392e}[data-theme=dark] .nav-item.active,[data-theme=dark] .scope-tabs .selected,[data-theme=dark] .detail .edit-button,[data-theme=dark] .detail .edit-actions button{background:#304431}[data-theme=dark] .count,[data-theme=dark] .active .count,[data-theme=dark] .view-switch,[data-theme=dark] .close-button{background:#344138}[data-theme=dark] .sidebar-footer,[data-theme=dark] td,[data-theme=dark] .detail,[data-theme=dark] .detail pre{border-color:var(--line)}[data-theme=dark] .small-button,[data-theme=dark] .view-switch .selected,[data-theme=dark] .search,[data-theme=dark] select,[data-theme=dark] .graph-controls,[data-theme=dark] .detail,[data-theme=dark] .detail .edit-actions button:last-child{background:#222e26;color:#e3eade}[data-theme=dark] .search input,[data-theme=dark] .detail .edit-form textarea{color:#e3eade}[data-theme=dark] #canvas,[data-theme=dark] .detail .edit-form textarea{background-color:#19221c}[data-theme=dark] #canvas.graph-canvas{background-image:radial-gradient(#364638 .8px,transparent .8px)}[data-theme=dark] .graph-controls,[data-theme=dark] .client-icon{border-color:var(--line)}[data-theme=dark] svg.graph line{stroke:#526c53}[data-theme=dark] .graph-node circle{fill:#344836;stroke:#6e9b6b}[data-theme=dark] .graph-node.user circle{fill:#483c54;stroke:#af92c3}[data-theme=dark] .graph-node.instruction circle{fill:#3d573e}[data-theme=dark] .graph-node.root circle{fill:#526e4d}[data-theme=dark] .graph-node text{fill:#c9dec1;stroke:#19221c}[data-theme=dark] .graph-node.user text{fill:#d1b6e4}[data-theme=dark] .graph-node .node-icon,[data-theme=dark] .graph-node .node-label.root-label{fill:#e7f3e0}[data-theme=dark] .graph-node .node-icon{stroke:none}[data-theme=dark] .key-line{border-color:#789171}[data-theme=dark] th,[data-theme=dark] .table-help,[data-theme=dark] .detail pre{background:#243027}[data-theme=dark] .detail pre{color:#d3e2ce}[data-theme=dark] .badge,[data-theme=dark] .client-icon{background:#2e4330;color:#b9dda8}[data-theme=dark] .client-icon--copilot img{filter:invert(1)}[data-theme=dark] .badge.user{background:#45394f;color:#d5b9e7}[data-theme=dark] .badge.neutral,[data-theme=dark] .client-icon.off{background:#303a32;color:#aab7a7}[data-theme=dark] .badge.warn,[data-theme=dark] .notice{background:#493e29;color:#e9ca81}:root{color-scheme:light;color:#171412;background:#f7f5f1;--line: #dad7d1}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline-color:#0057e6}.sidebar{background:#252b27;border-right:0;padding-top:27px}.brand,.workspace strong{color:#f7f5f1}.brand{font-size:23px;letter-spacing:-.7px}.brand-sub{margin-top:0;font-size:10px;letter-spacing:0;font-weight:450;color:#b9c0b8}.workspace{margin-top:45px;margin-bottom:34px}.eyebrow,.nav-label{color:#aab5aa;letter-spacing:0;font-size:11px;font-weight:550}.workspace .mono,.local-label,.sidebar-footer{color:#aab5aa}.nav-label{margin-bottom:9px}nav{gap:3px}.nav-item{border-left:2px solid transparent;border-radius:0;color:#d2d9d0;padding:11px 12px;font-size:13px}.nav-item:hover,.nav-item.active{background:#354238;color:#fff}.nav-item.active{border-left-color:#b5c9a6;font-weight:650}.count,.active .count{background:transparent;color:#acbaab;font-size:11px;padding-right:0}.sidebar-rescan{margin:auto 12px 21px}.sidebar .small-button{color:#edf1e9;background:#354238;border:1px solid #536256}.sidebar .small-button:hover{background:#435348}.sidebar-footer{border-top-color:#465149}main{background:#f7f5f1}.page-heading{isolation:isolate;position:relative;min-height:275px;overflow:hidden;align-items:flex-end;padding:36px 42px 39px;border-bottom:1px solid var(--line)}.page-heading-image{position:absolute;inset:0;z-index:-2;display:block;width:100%;height:100%;object-fit:cover;object-position:center 61%}.page-heading:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#f7f5f1,#f7f5f1f5 26%,#f7f5f1bd 48%,#f7f5f10a)}.page-heading-copy{max-width:480px}.page-heading h1{margin:0 0 15px;max-width:430px;color:#171412;font-size:clamp(34px,3.4vw,49px);line-height:1.03;letter-spacing:-1.7px;font-weight:650}.page-heading p{max-width:390px;color:#34332f;font-size:14px;line-height:1.5}.view-switch{position:absolute;top:25px;right:30px;background:#ffffffe5;border-color:#252b2726}.view-switch button{color:#5d645c;font-size:12px}.view-switch .selected{color:#202923;background:#e7ece3;box-shadow:none}.toolbar{padding:24px 42px 18px}.scope-tabs button{border-bottom:2px solid transparent;border-radius:0;color:#66685f;font-size:12px}.scope-tabs .selected{background:transparent;border-bottom-color:#536450;color:#273528;font-weight:650}.dot.project,.local-label i,.safe-dot{background:#769274}.search,select{background:#fffdf9;color:#66685f}.search input{color:#171412}#canvas{height:calc(100vh - 430px);min-height:440px;margin:0 42px;background-color:#fffdf9;border-radius:5px}#canvas.graph-canvas{background-image:radial-gradient(#e1e4dc .7px,transparent .7px);background-size:22px 22px}.graph-key{color:#626d61}.graph-node text{fill:#505f4e;stroke:#fffdf9}.graph-node .node-label.root-label{fill:#273528}.graph-controls{border-color:var(--line);background:#fffdf9}.notice{margin-right:42px;margin-left:42px;background:#f1eadb;color:#665637}.table-help,th{background:#f1f1eb}.table-help{color:#626d61;font-size:11px}th{color:#555e53;font-size:11px;letter-spacing:0;text-transform:none}td{color:#4d594d;border-bottom-color:#e9e8e1}td.name button{color:#273528;font-size:13px}td.name p{color:#777e73;font-size:11px}tbody tr:hover{background:#f3f4ee}.detail{background:#fffdf9}.detail h2{color:#171412}.detail pre{background:#f3f4ee}:root[data-theme=dark]{color:#eeeae4;background:#171a18;--line: #3d443e}[data-theme=dark] .sidebar{background:#1c231e}[data-theme=dark] .brand,[data-theme=dark] .workspace strong,[data-theme=dark] .detail h2{color:#f7f5f1}[data-theme=dark] .brand-sub,[data-theme=dark] .eyebrow,[data-theme=dark] .nav-label,[data-theme=dark] .workspace .mono,[data-theme=dark] .local-label,[data-theme=dark] .sidebar-footer{color:#b6c0b5}[data-theme=dark] .nav-item{color:#d2d9d0}[data-theme=dark] .nav-item:hover,[data-theme=dark] .nav-item.active{background:#354238;color:#fff}[data-theme=dark] .sidebar .small-button{background:#354238;color:#edf1e9;border-color:#536256}[data-theme=dark] main{background:#171a18}[data-theme=dark] .page-heading{border-bottom-color:var(--line)}[data-theme=dark] .page-heading:before{background:linear-gradient(90deg,#171a18,#171a18f2 27%,#171a18bf 53%,#171a183d)}[data-theme=dark] .page-heading h1{color:#f7f5f1}[data-theme=dark] .page-heading p{color:#d9ded7}[data-theme=dark] .view-switch{background:#1e241fe5;border-color:#4a544b}[data-theme=dark] .view-switch button{color:#d0d8cb}[data-theme=dark] .view-switch .selected{background:#435348;color:#fff}[data-theme=dark] .scope-tabs button{color:#abb7a9}[data-theme=dark] .scope-tabs .selected{color:#ecf2e9;border-bottom-color:#9cb793}[data-theme=dark] .search,[data-theme=dark] select,[data-theme=dark] #canvas,[data-theme=dark] .detail{background-color:#202722}[data-theme=dark] #canvas.graph-canvas{background-image:radial-gradient(#39463c .7px,transparent .7px)}[data-theme=dark] .graph-node text{stroke:#202722}[data-theme=dark] .table-help,[data-theme=dark] th{background:#2a332c;color:#c5d0c1}[data-theme=dark] td{border-bottom-color:#3d443e}[data-theme=dark] td.name button{color:#e0ecda}[data-theme=dark] .notice{background:#403928;color:#ead7aa}@media(max-width:950px){.page-heading,.toolbar{padding-right:24px;padding-left:24px}#canvas{margin-right:24px;margin-left:24px}}@media(max-width:700px){.sidebar{background:#252b27}.sidebar-rescan{margin:12px 0 0}.page-heading{min-height:290px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:32px 20px 24px}.page-heading h1{max-width:330px;font-size:35px}.page-heading:before{background:linear-gradient(90deg,#f7f5f1,#f7f5f1e5 48%,#f7f5f142)}[data-theme=dark] .page-heading:before{background:linear-gradient(90deg,#171a18,#171a18e8 48%,#171a185c)}.page-heading .view-switch{display:flex;position:static;margin-top:18px}.toolbar{padding:20px 18px 16px}#canvas{margin:0 18px}.notice{margin:0 18px 15px}}
1
+ :root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#26332d;background:#fafbf8;font-synthesis:none;--green: #557750;--purple: #9781b1;--line: #e3e8df;--muted: #798278}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #6a9261;outline-offset:3px}textarea:focus-visible{outline:2px solid #6a9261;outline-offset:3px}button{color:inherit}button:disabled{cursor:wait;opacity:.5}.app{display:flex;min-height:100vh}.sidebar{width:234px;flex-shrink:0;background:#f1f3ec;border-right:1px solid var(--line);padding:30px 18px 16px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{display:flex;flex-direction:column;align-items:center;gap:10px;color:#25342b;text-decoration:none;padding:0;flex-shrink:0;text-align:center;font-weight:750;font-size:24px;letter-spacing:-1px}.brand-sub{font-size:8px;display:block;letter-spacing:2px;margin-top:3px;font-weight:600}.brand img{flex-shrink:0;width:100%;height:auto;aspect-ratio:1;border-radius:50%;object-fit:cover}.brand-text{min-width:0;max-width:100%}.agent-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-avatar{border-radius:50%;object-fit:cover}.workspace{margin:38px 11px 30px;display:flex;flex-direction:column;gap:9px}.eyebrow,.nav-label{font-size:10px;font-weight:650;letter-spacing:1.8px;color:#7d8778}.workspace strong{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.workspace .mono{font-size:10px;color:#84907e;white-space:normal;overflow-wrap:anywhere;line-height:1.6}.local-label{font-size:10px;color:#63775c;margin-top:5px;display:flex;gap:6px;align-items:center}.local-label i,.safe-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:#84a071}.nav-label{padding:0 12px;margin:5px 0 14px;font-size:9px;letter-spacing:1.4px}nav{display:grid;gap:7px}.nav-item{border:0;background:transparent;text-align:left;padding:13px 12px;border-radius:7px;display:flex;align-items:center;gap:12px;font-size:13px;color:#7c8478}.nav-item:hover{background:#e9ede3}.nav-item.active{background:#e2e9d9;color:#36522e;font-weight:650}.nav-icon{font-size:20px;line-height:20px;width:20px;text-align:center}.count{font-size:10px;margin-left:auto;background:#e7eadf;padding:3px 6px;border-radius:4px;font-weight:500}.active .count{background:#d2dfc6}.sidebar-note{margin:auto 12px 12px;padding-top:35px}.orbit-mark{font-size:40px;color:#8f9f82;line-height:1;margin-bottom:18px}.sidebar-note strong{font-family:Georgia,serif;font-weight:400;font-size:23px;line-height:1.3;letter-spacing:-.5px}.sidebar-note p{font-size:11px;line-height:1.8;color:#87907f}.sidebar-rescan{margin:0 12px 42px;display:flex;gap:8px}.sidebar-rescan #refresh{flex:1}.sidebar-rescan #theme-toggle{width:35px;flex-shrink:0;padding:8px;font-size:16px;line-height:1}.sidebar-footer{border-top:1px solid #dde3d5;padding:20px 6px 2px;font-size:9px;color:#8b9385;display:flex;align-items:center;gap:6px}.version{margin-left:auto}main{min-width:0;flex:1}.small-button{background:#fff;border:1px solid var(--line);border-radius:6px;padding:8px 12px;font-size:11px}.page-heading{padding:36px 38px 27px;display:flex;align-items:center;justify-content:space-between;gap:20px}.page-heading .eyebrow{font-size:9px;color:#8c9781}h1{font-size:32px;letter-spacing:-1.2px;font-weight:520;margin:9px 0 11px}.page-heading p{font-size:12px;color:#87917e;margin:0}.view-switch{display:flex;border:1px solid var(--line);border-radius:7px;padding:3px;background:#f1f3ed;gap:2px}.view-switch button{border:0;background:none;border-radius:4px;padding:7px 11px;color:#8a9382;font-size:11px}.view-switch .selected{background:#fff;color:#465a3d;box-shadow:0 1px 4px #25392310}.toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:0 38px 22px;gap:12px}.scope-tabs{display:flex;flex-wrap:wrap;gap:6px}.scope-tabs button{border:0;border-radius:5px;background:transparent;padding:8px 12px;font-size:11px;color:#8b9483;display:flex;align-items:center;gap:6px}.scope-tabs .selected{background:#e9eee2;color:#516548}.dot{display:inline-block;height:6px;width:6px;border-radius:50%}.dot.project{background:#71965e}.dot.user{background:#a18bbb}.filters{display:flex;gap:10px;align-items:center}.search{border:1px solid var(--line);display:flex;align-items:center;gap:8px;padding:7px 10px;background:#fff;border-radius:6px;color:#87907e;font-size:17px}.search input{border:0;background:transparent;outline:none;font-size:11px;width:130px;color:#53614b}.search kbd{border:1px solid var(--line);font-size:9px;padding:0 4px;border-radius:3px;color:#a1a998}select{border:1px solid var(--line);border-radius:5px;background:#fff;color:#7d8775;font-size:11px;padding:8px;max-width:130px}#canvas{margin:0 38px;min-height:390px;height:calc(100vh - 330px);border:1px solid var(--line);border-radius:10px;position:relative;background-color:#fcfdf9;overflow:auto}#canvas.graph-canvas{background-image:radial-gradient(#dce3d4 .8px,transparent .8px);background-size:18px 18px;overflow:hidden}svg.graph{width:100%;height:100%;display:block;cursor:grab;touch-action:none}svg.graph:active{cursor:grabbing}.graph-key{position:absolute;left:22px;top:20px;display:flex;gap:18px;align-items:center;font-size:10px;color:#89947f;pointer-events:none}.graph-key span{display:flex;align-items:center;gap:6px}.key-line{width:20px;border-top:1px solid #a2b196}.key-line.dashed{border-top-style:dashed}.graph-controls{position:absolute;bottom:20px;left:20px;display:flex;border:1px solid #dfe6d6;border-radius:6px;background:#fffffff5;box-shadow:0 2px 7px #3c51210a;overflow:hidden}.graph-controls button{border:0;background:transparent;width:34px;height:32px;font-size:16px;border-right:1px solid var(--line)}.graph-controls button:last-child{border-right:0;width:46px;font-size:10px}.graph-hint{position:absolute;bottom:24px;right:22px;font-size:9px;color:#99a18f;pointer-events:none}.graph-node{cursor:pointer;outline:none}.graph-node circle{stroke-width:1.5}.graph-node:hover circle,.graph-node:focus circle{stroke:#344d2e;stroke-width:3}.graph-node text{font-family:Inter,-apple-system,sans-serif;text-anchor:middle;fill:#687960;pointer-events:none;font-size:10px;paint-order:stroke;stroke:#fcfdf9;stroke-width:4px;stroke-linejoin:round}.graph-node .node-icon{font-size:14px;fill:#5d7752;stroke:none}.graph-node.user text{fill:#8a769e}.graph-node .node-label.root-label{font-size:12px;font-weight:650;fill:#344c2b}.main-footer{display:flex;justify-content:space-between;padding:15px 40px;font-size:10px;color:#929b88}.notice{margin:0 38px 15px;padding:10px 13px;border-radius:6px;background:#f4f0df;color:#8a7948;font-size:11px;line-height:1.5}.loading,.empty{height:100%;min-height:350px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8b957f;font-size:13px;gap:10px;padding:30px;text-align:center}.empty strong{font-size:18px;font-weight:500;color:#657559}.empty p{max-width:430px;line-height:1.7;margin:0}.empty-mark{font-size:38px;color:#abb99d;margin-bottom:10px}.table-wrap{overflow:auto;height:100%}table{width:100%;border-collapse:collapse;font-size:12px;text-align:left}th{position:sticky;top:0;z-index:1;background:#f4f6ee;font-size:9px;letter-spacing:1px;text-transform:uppercase;font-weight:600;color:#869078;padding:16px;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:17px 16px;border-bottom:1px solid #eaf0e2;vertical-align:middle;color:#6d7e61}tbody tr:hover{background:#f3f6ed}td.name{max-width:330px}td.name button{border:0;background:none;padding:0;text-align:left;color:#344b2b;font-weight:600;font-size:12px}td.name p{color:#98a18b;font-size:10px;margin:6px 0 0;max-width:330px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.line-count{font-variant-numeric:tabular-nums;white-space:nowrap}.badge{font-size:9px;white-space:nowrap;padding:4px 7px;border-radius:4px;background:#edf2e7;color:#6b8258;display:inline-flex;align-items:center;gap:5px}.badge.user{background:#f0ecf5;color:#9a84b1}.badge.neutral{background:#f1f1e9;color:#8d927d}.badge.warn{background:#f7f0dd;color:#a58a44}.client-icons{display:flex;gap:7px}.client-icon{width:27px;height:27px;border:1px solid #dce5d5;display:flex;align-items:center;justify-content:center;border-radius:6px;background:#f0f5e9;color:#607952}.client-icon.off{background:#f8f9f5;border-color:#e9ede4;color:#cdd4c6}.client-icon img{width:18px;height:18px;object-fit:contain}.client-icon--codex img{width:22px;height:22px}.client-icon.off img{opacity:.3}.table-help{font-size:10px;padding:14px 16px;background:#f6f8f0;color:#879378;line-height:1.65;border-bottom:1px solid var(--line)}.detail{position:fixed;right:0;top:0;height:100vh;width:min(450px,90vw);background:#fffffc;z-index:5;border-left:1px solid #d9e1d1;box-shadow:-12px 0 60px #2d42201a;padding:40px 26px;overflow:auto}.detail[hidden]{display:none}.close-button{position:absolute;right:18px;top:14px;border:0;background:#f0f3eb;border-radius:5px;font-size:22px;color:#7d8b72;width:28px;height:28px}.detail h2{font-size:24px;letter-spacing:-.7px;margin:17px 0 10px;overflow-wrap:anywhere}.detail p{font-size:12px;line-height:1.8;color:#87917b;overflow-wrap:anywhere}.detail h3{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:#7d8c70;margin-top:27px}.detail pre{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.8;color:#6b7a5f;background:#f6f8f1;border:1px solid #e7ecdf;border-radius:6px;padding:14px}.detail .source-path{font-size:10px;line-height:1.8}.detail .client-line{display:flex;gap:8px;align-items:center;margin:9px 0;font-size:11px;color:#7e8d72}.detail .edit-source{display:grid;gap:7px;margin:14px 0;color:#7d8c70;font-size:11px}.detail .edit-source select{max-width:100%;width:100%}.detail .edit-button,.detail .delete-button,.detail .delete-confirm button,.detail .edit-actions button{border:1px solid #c9d7bf;border-radius:6px;background:#e9f0e2;color:#36522e;padding:9px 13px;font-size:11px}.detail .delete-button{margin-left:8px;background:#fff;border-color:#d9b9ad;color:#8a4233}.detail .delete-confirm{margin-top:12px;padding:12px;border:1px solid #e4c9bd;border-radius:6px;background:#fff8f5}.detail .delete-confirm[hidden]{display:none}.detail .delete-confirm p{margin:0 0 10px;color:#743b2e}.detail .delete-confirm button:first-of-type{background:#8a4233;border-color:#8a4233;color:#fff}.detail .delete-confirm button:last-of-type{margin-left:8px;background:#fff}.detail .edit-form{margin-top:12px}.detail .edit-form[hidden]{display:none}.detail .edit-form textarea{width:100%;min-height:340px;resize:vertical;border:1px solid #c9d7bf;border-radius:6px;background:#fcfdf9;color:#26332d;padding:12px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.6}.detail .edit-actions{display:flex;gap:8px;margin-top:10px}.detail .edit-actions button:last-child{background:#fff}.detail .edit-status{color:#526f48}@media(min-width:1550px){.page-heading,.toolbar{padding-left:54px;padding-right:54px}#canvas{margin:0 54px}}@media(max-width:950px){.sidebar{width:188px;padding-left:10px;padding-right:10px}.page-heading{padding:28px 22px 22px}.toolbar{padding:0 22px 18px}#canvas{margin:0 22px}.filters{gap:5px}.search input{width:100px}.scope-tabs button{padding:8px}.view-switch{flex-shrink:0}h1{font-size:28px}.notice{margin:0 22px 15px}}@media(max-width:700px){.app{display:block}.sidebar{position:static;width:100%;height:auto;padding:16px}.brand{font-size:20px}.workspace{margin:24px 0}.brand img{max-width:198px}.nav-label,.sidebar-note,.sidebar-footer{display:none}nav{display:flex;flex-wrap:wrap;margin-top:16px}.sidebar-rescan{margin:12px 0 0}.nav-item{flex:1 1 140px;font-size:11px;padding:10px 6px;gap:5px}.count{font-size:9px}.page-heading{padding:25px 18px 20px}.page-heading p{line-height:1.6;max-width:270px}.page-heading .view-switch{display:none}h1{font-size:25px}.toolbar{padding:0 18px 18px;flex-wrap:wrap}.filters{width:100%;justify-content:space-between}.search{flex:1}.search input{width:100%}#canvas{margin:0 18px;height:55vh;min-height:360px}.graph-hint{display:none}.main-footer{padding:14px 20px;gap:20px;font-size:9px}.graph-key{gap:12px;font-size:9px}.notice{margin:0 18px 15px}}[hidden]{display:none!important}:root[data-theme=dark]{color-scheme:dark;color:#e3eade;background:#131a16;--line: #344238}[data-theme=dark] .sidebar{background:#1c261f}[data-theme=dark] .brand,[data-theme=dark] .workspace strong,[data-theme=dark] .detail h2{color:#edf4e9}[data-theme=dark] .eyebrow,[data-theme=dark] .nav-label,[data-theme=dark] .workspace .mono,[data-theme=dark] .nav-item,[data-theme=dark] .sidebar-note p,[data-theme=dark] .sidebar-footer,[data-theme=dark] .page-heading p,[data-theme=dark] .page-heading .eyebrow,[data-theme=dark] .view-switch button,[data-theme=dark] .scope-tabs button,[data-theme=dark] .search,[data-theme=dark] .search kbd,[data-theme=dark] select,[data-theme=dark] .graph-key,[data-theme=dark] .graph-hint,[data-theme=dark] .main-footer,[data-theme=dark] .loading,[data-theme=dark] .empty,[data-theme=dark] .table-help,[data-theme=dark] th,[data-theme=dark] td,[data-theme=dark] td.name p,[data-theme=dark] .detail p,[data-theme=dark] .detail h3,[data-theme=dark] .detail .client-line,[data-theme=dark] .detail .edit-source{color:#aab9a8}[data-theme=dark] .local-label,[data-theme=dark] .nav-item.active,[data-theme=dark] .view-switch .selected,[data-theme=dark] .scope-tabs .selected,[data-theme=dark] td.name button,[data-theme=dark] .detail .edit-status{color:#b5dda3}[data-theme=dark] .nav-item:hover,[data-theme=dark] tbody tr:hover{background:#2b392e}[data-theme=dark] .nav-item.active,[data-theme=dark] .scope-tabs .selected,[data-theme=dark] .detail .edit-button,[data-theme=dark] .detail .edit-actions button{background:#304431}[data-theme=dark] .count,[data-theme=dark] .active .count,[data-theme=dark] .view-switch,[data-theme=dark] .close-button{background:#344138}[data-theme=dark] .sidebar-footer,[data-theme=dark] td,[data-theme=dark] .detail,[data-theme=dark] .detail pre{border-color:var(--line)}[data-theme=dark] .small-button,[data-theme=dark] .view-switch .selected,[data-theme=dark] .search,[data-theme=dark] select,[data-theme=dark] .graph-controls,[data-theme=dark] .detail,[data-theme=dark] .detail .edit-actions button:last-child{background:#222e26;color:#e3eade}[data-theme=dark] .search input,[data-theme=dark] .detail .edit-form textarea{color:#e3eade}[data-theme=dark] #canvas,[data-theme=dark] .detail .edit-form textarea{background-color:#19221c}[data-theme=dark] #canvas.graph-canvas{background-image:radial-gradient(#364638 .8px,transparent .8px)}[data-theme=dark] .graph-controls,[data-theme=dark] .client-icon{border-color:var(--line)}[data-theme=dark] svg.graph line{stroke:#526c53}[data-theme=dark] .graph-node circle{fill:#344836;stroke:#6e9b6b}[data-theme=dark] .graph-node.user circle{fill:#483c54;stroke:#af92c3}[data-theme=dark] .graph-node.instruction circle{fill:#3d573e}[data-theme=dark] .graph-node.root circle{fill:#526e4d}[data-theme=dark] .graph-node text{fill:#c9dec1;stroke:#19221c}[data-theme=dark] .graph-node.user text{fill:#d1b6e4}[data-theme=dark] .graph-node .node-icon,[data-theme=dark] .graph-node .node-label.root-label{fill:#e7f3e0}[data-theme=dark] .graph-node .node-icon{stroke:none}[data-theme=dark] .key-line{border-color:#789171}[data-theme=dark] th,[data-theme=dark] .table-help,[data-theme=dark] .detail pre{background:#243027}[data-theme=dark] .detail pre{color:#d3e2ce}[data-theme=dark] .badge,[data-theme=dark] .client-icon{background:#2e4330;color:#b9dda8}[data-theme=dark] .client-icon--copilot img{filter:invert(1)}[data-theme=dark] .badge.user{background:#45394f;color:#d5b9e7}[data-theme=dark] .badge.neutral,[data-theme=dark] .client-icon.off{background:#303a32;color:#aab7a7}[data-theme=dark] .badge.warn,[data-theme=dark] .notice{background:#493e29;color:#e9ca81}:root{color-scheme:light;color:#171412;background:#f7f5f1;--line: #dad7d1}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline-color:#0057e6}.sidebar{background:#252b27;border-right:0;padding-top:27px}.brand,.workspace strong{color:#f7f5f1}.brand{font-size:23px;letter-spacing:-.7px}.brand-sub{margin-top:0;font-size:10px;letter-spacing:0;font-weight:450;color:#b9c0b8}.workspace{margin-top:45px;margin-bottom:34px}.eyebrow,.nav-label{color:#aab5aa;letter-spacing:0;font-size:11px;font-weight:550}.workspace .mono,.local-label,.sidebar-footer{color:#aab5aa}.nav-label{margin-bottom:9px}nav{gap:3px}.nav-item{border-left:2px solid transparent;border-radius:0;color:#d2d9d0;padding:11px 12px;font-size:13px}.nav-item:hover,.nav-item.active{background:#354238;color:#fff}.nav-item.active{border-left-color:#b5c9a6;font-weight:650}.count,.active .count{background:transparent;color:#acbaab;font-size:11px;padding-right:0}.sidebar-rescan{margin:auto 12px 21px}.sidebar .small-button{color:#edf1e9;background:#354238;border:1px solid #536256}.sidebar .small-button:hover{background:#435348}.sidebar-footer{border-top-color:#465149}main{background:#f7f5f1}.page-heading{isolation:isolate;position:relative;min-height:275px;overflow:hidden;align-items:flex-end;padding:36px 42px 39px;border-bottom:1px solid var(--line)}.page-heading-image{position:absolute;inset:0;z-index:-2;display:block;width:100%;height:100%;object-fit:cover;object-position:center 61%}.page-heading:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#f7f5f1,#f7f5f1f5 26%,#f7f5f1bd 48%,#f7f5f10a)}.page-heading-copy{max-width:480px}.page-heading h1{margin:0 0 15px;max-width:430px;color:#171412;font-size:clamp(34px,3.4vw,49px);line-height:1.03;letter-spacing:-1.7px;font-weight:650}.page-heading p{max-width:390px;color:#34332f;font-size:14px;line-height:1.5}.view-switch{position:absolute;top:25px;right:30px;background:#ffffffe5;border-color:#252b2726}.view-switch button{color:#5d645c;font-size:12px}.view-switch .selected{color:#202923;background:#e7ece3;box-shadow:none}.toolbar{padding:24px 42px 18px}.scope-tabs button{border-bottom:2px solid transparent;border-radius:0;color:#66685f;font-size:12px}.scope-tabs .selected{background:transparent;border-bottom-color:#536450;color:#273528;font-weight:650}.dot.project,.local-label i,.safe-dot{background:#769274}.search,select{background:#fffdf9;color:#66685f}.search input{color:#171412}#canvas{height:calc(100vh - 430px);min-height:440px;margin:0 42px;background-color:#fffdf9;border-radius:5px}#canvas.graph-canvas{background-image:radial-gradient(#e1e4dc .7px,transparent .7px);background-size:22px 22px}.graph-key{color:#626d61}.graph-node text{fill:#505f4e;stroke:#fffdf9}.graph-node .node-label.root-label{fill:#273528}.graph-controls{border-color:var(--line);background:#fffdf9}.notice{margin-right:42px;margin-left:42px;background:#f1eadb;color:#665637}.table-help,th{background:#f1f1eb}.table-help{color:#626d61;font-size:11px}th{color:#555e53;font-size:11px;letter-spacing:0;text-transform:none}td{color:#4d594d;border-bottom-color:#e9e8e1}td.name button{color:#273528;font-size:13px}td.name p{color:#777e73;font-size:11px}tbody tr:hover{background:#f3f4ee}.detail{background:#fffdf9}.detail h2{color:#171412}.detail pre{background:#f3f4ee}:root[data-theme=dark]{color:#eeeae4;background:#171a18;--line: #3d443e}[data-theme=dark] .sidebar{background:#1c231e}[data-theme=dark] .brand,[data-theme=dark] .workspace strong,[data-theme=dark] .detail h2{color:#f7f5f1}[data-theme=dark] .brand-sub,[data-theme=dark] .eyebrow,[data-theme=dark] .nav-label,[data-theme=dark] .workspace .mono,[data-theme=dark] .local-label,[data-theme=dark] .sidebar-footer{color:#b6c0b5}[data-theme=dark] .nav-item{color:#d2d9d0}[data-theme=dark] .nav-item:hover,[data-theme=dark] .nav-item.active{background:#354238;color:#fff}[data-theme=dark] .sidebar .small-button{background:#354238;color:#edf1e9;border-color:#536256}[data-theme=dark] main{background:#171a18}[data-theme=dark] .page-heading{border-bottom-color:var(--line)}[data-theme=dark] .page-heading:before{background:linear-gradient(90deg,#171a18,#171a18f2 27%,#171a18bf 53%,#171a183d)}[data-theme=dark] .page-heading h1{color:#f7f5f1}[data-theme=dark] .page-heading p{color:#d9ded7}[data-theme=dark] .view-switch{background:#1e241fe5;border-color:#4a544b}[data-theme=dark] .view-switch button{color:#d0d8cb}[data-theme=dark] .view-switch .selected{background:#435348;color:#fff}[data-theme=dark] .scope-tabs button{color:#abb7a9}[data-theme=dark] .scope-tabs .selected{color:#ecf2e9;border-bottom-color:#9cb793}[data-theme=dark] .search,[data-theme=dark] select,[data-theme=dark] #canvas,[data-theme=dark] .detail{background-color:#202722}[data-theme=dark] #canvas.graph-canvas{background-image:radial-gradient(#39463c .7px,transparent .7px)}[data-theme=dark] .graph-node text{stroke:#202722}[data-theme=dark] .table-help,[data-theme=dark] th{background:#2a332c;color:#c5d0c1}[data-theme=dark] td{border-bottom-color:#3d443e}[data-theme=dark] td.name button{color:#e0ecda}[data-theme=dark] .notice{background:#403928;color:#ead7aa}@media(max-width:950px){.page-heading,.toolbar{padding-right:24px;padding-left:24px}#canvas{margin-right:24px;margin-left:24px}}@media(max-width:700px){.sidebar{background:#252b27}.sidebar-rescan{margin:12px 0 0}.page-heading{min-height:290px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:32px 20px 24px}.page-heading h1{max-width:330px;font-size:35px}.page-heading:before{background:linear-gradient(90deg,#f7f5f1,#f7f5f1e5 48%,#f7f5f142)}[data-theme=dark] .page-heading:before{background:linear-gradient(90deg,#171a18,#171a18e8 48%,#171a185c)}.page-heading .view-switch{display:flex;position:static;margin-top:18px}.toolbar{padding:20px 18px 16px}#canvas{margin:0 18px}.notice{margin:0 18px 15px}}.agent-portrait{display:block;width:100%;max-width:198px}.agent-filter{display:grid;justify-items:center;gap:7px;margin:4px 0;font-size:11px;font-weight:450;letter-spacing:0;color:#b9c0b8}.agent-filter-icons{display:flex;justify-content:center;gap:7px}.agent-filter .client-icon{width:30px;height:30px;cursor:pointer;border:2px solid transparent;background:#f7f5f1;opacity:1}.agent-filter .client-icon.dimmed{opacity:.65}.agent-filter .client-icon:hover,.agent-filter .client-icon.selected{opacity:1}.agent-filter .client-icon.selected{border-color:#b5d3a3;background:#e7f2df;box-shadow:0 0 0 2px #b5d3a340}.agent-filter .client-icon img{width:18px;height:18px;border-radius:0;aspect-ratio:auto}.agent-filter .client-icon--codex img{width:22px;height:22px}.sidebar-rescan{margin-bottom:10px}.brand-credit{align-self:center;text-align:center;margin:0;color:#b9c0b8;font-size:11px;font-weight:450;letter-spacing:0;text-decoration:none}.brand-credit:hover{color:#fff;text-decoration:underline}.brand{margin-bottom:32px}.brand-text{width:100%}.agent-name{color:inherit;text-decoration:none}.agent-name:hover{text-decoration:underline}.factory-path{display:block;margin:12px 10px 0;font-size:10px;font-weight:400;letter-spacing:0;line-height:1.6;overflow-wrap:anywhere;color:#aab5aa;text-decoration:none}.factory-path:hover{color:#fff;text-decoration:underline}.main-footer #updated{margin-left:auto}
@@ -8,6 +8,7 @@ export async function discoverAssets(entries, env) {
8
8
  const context = new Map();
9
9
  const rules = new Map();
10
10
  const skills = new Map();
11
+ const skillCatalogClients = new Map();
11
12
  const content = new Map();
12
13
  const editable = new Map();
13
14
  function addContext(entry) {
@@ -86,6 +87,8 @@ export async function discoverAssets(entries, env) {
86
87
  catch {
87
88
  /* Optional metadata. */
88
89
  }
90
+ const descriptionClients = new Set();
91
+ skillCatalogClients.set(entry.id, descriptionClients);
89
92
  for (const alias of entry.aliases) {
90
93
  const p = display(alias, entry.scope);
91
94
  skill.paths.push(p);
@@ -99,6 +102,11 @@ export async function discoverAssets(entries, env) {
99
102
  for (const client of discovered) {
100
103
  if (!skill.clients.includes(client))
101
104
  skill.clients.push(client);
105
+ const descriptionVisible = client === "codex"
106
+ ? !falsehood(policy.allow_implicit_invocation)
107
+ : !truth(meta["disable-model-invocation"]);
108
+ if (descriptionVisible)
109
+ descriptionClients.add(client);
102
110
  const invocation = client === "codex"
103
111
  ? falsehood(policy.allow_implicit_invocation)
104
112
  ? "User only"
@@ -167,5 +175,13 @@ export async function discoverAssets(entries, env) {
167
175
  addContext(entry);
168
176
  }
169
177
  }
170
- return { context, rules, skills, content, editable, addContext };
178
+ return {
179
+ context,
180
+ rules,
181
+ skills,
182
+ skillCatalogClients,
183
+ content,
184
+ editable,
185
+ addContext,
186
+ };
171
187
  }
@@ -16,6 +16,9 @@ export const ruleClient = (file) => {
16
16
  return null;
17
17
  };
18
18
  export const toolsForSkill = (p) => {
19
+ // Bundled Codex skills are not part of Cursor's third-party skill import.
20
+ if (/(^|\/)\.codex\/skills\/\.system\//.test(p))
21
+ return ["codex"];
19
22
  const result = [];
20
23
  if (/(^|\/)\.(agents|cursor|claude|codex)\/skills\//.test(p))
21
24
  result.push("cursor");
package/dist/scanner.js CHANGED
@@ -45,7 +45,7 @@ export async function scanProject(project, options = {}) {
45
45
  },
46
46
  };
47
47
  const { entries, projectConfigs, inspected, capped } = await collectFiles(env);
48
- const { context, rules, skills, content, editable, addContext } = await discoverAssets(entries, env);
48
+ const { context, rules, skills, skillCatalogClients, content, editable, addContext, } = await discoverAssets(entries, env);
49
49
  const edges = buildGraph(entries, context, addContext, env);
50
50
  const mcp = await discoverMcp(projectConfigs, env);
51
51
  const data = {
@@ -63,7 +63,7 @@ export async function scanProject(project, options = {}) {
63
63
  };
64
64
  return {
65
65
  data,
66
- tokenInventory: contextInventory(entries, data, env),
66
+ tokenInventory: contextInventory(entries, data, env, skillCatalogClients),
67
67
  content,
68
68
  editable,
69
69
  };
@@ -5,31 +5,63 @@ import { referenceResolver } from "./scan/references.js";
5
5
  import { inside, slash } from "./scan/values.js";
6
6
  export const modelPrices = [
7
7
  {
8
- id: "gpt-5.3-codex",
9
- name: "GPT-5.3 Codex",
10
- inputPerMillion: 1.75,
8
+ id: "gpt-6-astra",
9
+ name: "GPT-6 Astra",
10
+ inputPerMillion: 10,
11
+ longContext: { aboveTokens: 272000, inputPerMillion: 20 },
11
12
  source: "https://developers.openai.com/api/docs/pricing",
12
- verifiedAt: "2026-10-10",
13
+ verifiedAt: "2026-10-17",
13
14
  },
14
15
  {
15
- id: "claude-sonnet-5.5",
16
- name: "Claude Sonnet 5.5",
16
+ id: "gpt-6.1-sol",
17
+ name: "GPT-6.1 Sol",
17
18
  inputPerMillion: 2,
19
+ longContext: { aboveTokens: 272000, inputPerMillion: 4 },
20
+ source: "https://developers.openai.com/api/docs/pricing",
21
+ verifiedAt: "2026-10-17",
22
+ },
23
+ {
24
+ id: "gpt-6-luna",
25
+ name: "GPT-6 Luna",
26
+ inputPerMillion: 0.1,
27
+ longContext: { aboveTokens: 272000, inputPerMillion: 0.2 },
28
+ source: "https://developers.openai.com/api/docs/pricing",
29
+ verifiedAt: "2026-10-17",
30
+ },
31
+ {
32
+ id: "claude-fable-5-1",
33
+ name: "Claude Fable 5.1",
34
+ inputPerMillion: 10,
18
35
  source: "https://platform.claude.com/docs/en/about-claude/pricing",
19
- verifiedAt: "2026-10-10",
36
+ verifiedAt: "2026-10-17",
20
37
  },
21
38
  {
22
- id: "claude-opus-5.5",
39
+ id: "claude-opus-5-5",
23
40
  name: "Claude Opus 5.5",
24
41
  inputPerMillion: 4,
25
42
  source: "https://platform.claude.com/docs/en/about-claude/pricing",
26
- verifiedAt: "2026-10-10",
43
+ verifiedAt: "2026-10-17",
44
+ },
45
+ {
46
+ id: "claude-sonnet-5-5",
47
+ name: "Claude Sonnet 5.5",
48
+ inputPerMillion: 2,
49
+ source: "https://platform.claude.com/docs/en/about-claude/pricing",
50
+ verifiedAt: "2026-10-17",
51
+ },
52
+ {
53
+ id: "claude-haiku-5-5",
54
+ name: "Claude Haiku 5.5",
55
+ inputPerMillion: 0.1,
56
+ longContext: { aboveTokens: 100000, inputPerMillion: 0.5 },
57
+ source: "https://platform.claude.com/docs/en/about-claude/pricing",
58
+ verifiedAt: "2026-10-17",
27
59
  },
28
60
  ];
29
61
  const clients = ["codex", "claude", "cursor", "copilot"];
30
62
  export const estimationMethod = "Local heuristic: Unicode characters / 4, rounded up per entry. Words are whitespace-separated; sizes are UTF-8 bytes. Not a model tokenizer or live usage measurement.";
31
63
  /** Counts discovered text only; references never promote their targets to startup. */
32
- export function contextInventory(entries, data, env) {
64
+ export function contextInventory(entries, data, env, skillCatalogClients) {
33
65
  const byAlias = new Map(entries.flatMap((entry) => entry.aliases.map((alias) => [alias, entry])));
34
66
  const result = {
35
67
  codex: [],
@@ -104,11 +136,12 @@ export function contextInventory(entries, data, env) {
104
136
  inside(path.join(env.codexHome, "skills"), alias)))) {
105
137
  // Identical copies and symlink aliases represent one discovered skill.
106
138
  const catalog = `${skill.name}\n${skill.description}`;
107
- const startup = entry.scope === "user" ||
108
- entry.aliases.some((alias) => {
109
- const relative = slash(path.relative(env.root, alias));
110
- return (/^\.(?:agents|codex|claude|cursor|github)\/skills\//.test(relative) && toolsForSkill(relative).includes(client));
111
- });
139
+ const startup = skillCatalogClients.get(entry.id)?.has(client) === true &&
140
+ (entry.scope === "user" ||
141
+ entry.aliases.some((alias) => {
142
+ const relative = slash(path.relative(env.root, alias));
143
+ return (/^\.(?:agents|codex|claude|cursor|github)\/skills\//.test(relative) && toolsForSkill(relative).includes(client));
144
+ }));
112
145
  add(entry, "skill-catalog", startup, catalog, skill.name, `${skill.id}:skill-catalog`);
113
146
  add(entry, "skill-body", false, entry.text.replace(/^---\r?\n[\s\S]*?\r?\n---(?:\r?\n|$)/, ""), skill.name, `${skill.id}:skill-body`);
114
147
  }
@@ -129,13 +162,30 @@ export function contextInventory(entries, data, env) {
129
162
  return result;
130
163
  }
131
164
  export function estimateTokens(snapshot, clientId, modelId) {
132
- const client = clients.find((client) => client === clientId);
165
+ const client = clientId === "all" ? "all" : clients.find((client) => client === clientId);
133
166
  const model = modelPrices.find((model) => model.id === modelId);
134
167
  if (!client || !model)
135
- throw new HttpError(400, "Select one supported agent and model.");
136
- const entries = snapshot.tokenInventory[client].map((entry) => ({
168
+ throw new HttpError(400, "Select supported agents and a model.");
169
+ const inventory = new Map();
170
+ for (const selected of client === "all" ? clients : [client]) {
171
+ for (const entry of snapshot.tokenInventory[selected]) {
172
+ const existing = inventory.get(entry.id);
173
+ if (!existing ||
174
+ (existing.portion !== "startup" && entry.portion === "startup"))
175
+ inventory.set(entry.id, entry);
176
+ }
177
+ }
178
+ const portionTokens = { startup: 0, "on-demand": 0 };
179
+ for (const entry of inventory.values())
180
+ portionTokens[entry.portion] += entry.tokens;
181
+ const inputRate = (portion) => model.longContext && portionTokens[portion] > model.longContext.aboveTokens
182
+ ? model.longContext.inputPerMillion
183
+ : model.inputPerMillion;
184
+ const entries = [...inventory.values()]
185
+ .sort((a, b) => b.tokens - a.tokens || a.path.localeCompare(b.path))
186
+ .map((entry) => ({
137
187
  ...entry,
138
- inputCost: (entry.tokens * model.inputPerMillion) / 1_000_000,
188
+ inputCost: (entry.tokens * inputRate(entry.portion)) / 1_000_000,
139
189
  }));
140
190
  const total = (portion) => entries
141
191
  .filter((entry) => entry.portion === portion)
@@ -36,7 +36,7 @@ Behavior was checked against official documentation on 2026-09-30. Runtime behav
36
36
  - [Codex MCP](https://developers.openai.com/codex/mcp/): TOML server definitions and project/user configuration.
37
37
  - [Claude Code skills](https://code.claude.com/docs/en/skills): `.claude/skills`, invocation metadata, and nested discovery.
38
38
  - [Claude Code MCP](https://code.claude.com/docs/en/mcp): `.mcp.json` plus user and project-local entries in `~/.claude.json`.
39
- - [Cursor skills](https://cursor.com/docs/skills): `.agents/skills`, `.cursor/skills`, and compatibility with Claude/Codex directories.
39
+ - [Cursor skills](https://cursor.com/docs/skills): `.agents/skills`, `.cursor/skills`, and compatibility with Claude/Codex directories. Exclude Codex internal `.codex/skills/.system/` skills from Cursor discovery; [Cursor identified this import as a bug](https://forum.cursor.com/t/i-installed-codex-and-cursor-is-adding-to-the-system-prompt-codex-specific-skills/155112).
40
40
  - [Cursor MCP](https://cursor.com/docs/context/model-context-protocol): `.cursor/mcp.json` project/user configuration.
41
41
  - [Cursor rules](https://cursor.com/docs/context/rules): `.cursor/rules` and legacy `.cursorrules`.
42
42
  - [Cursor rules help](https://prod.cursor.com/help/customization/rules): project-root `AGENTS.md` and `CLAUDE.md` are both read by Cursor.
@@ -8,7 +8,7 @@ Status: implemented. The implementation request approved the confirmed decisions
8
8
  - Above water: applicable startup instruction contents and skill catalog entries, including names and descriptions.
9
9
  - Below water: linked documents, skill bodies, and instructions applicable only in specific subfolders.
10
10
  - Count a reference's text in its containing instruction file. Do not automatically include the referenced document's contents in the startup estimate.
11
- - Require one selected agent: Codex, Claude Code, Cursor, or GitHub Copilot. Include its project and user context. Do not offer an aggregate "All clients" estimate.
11
+ - Select all agents at startup: Codex, Claude Code, Cursor, and GitHub Copilot. Include their project and user context, counting shared entries once. A shared entry belongs to startup if any agent loads it at startup. Selecting one agent narrows the estimate; clicking it again restores all agents. Reloading starts with all agents regardless of the previous filter.
12
12
  - These estimates describe discoverable local context, not observed usage in a running conversation.
13
13
  - Estimate the input cost of loading each iceberg portion once, using the selected model's input price without caching discounts.
14
14
  - The on-demand price is hypothetical: it assumes all available on-demand content is loaded once. Neither price predicts session spending.
@@ -16,8 +16,9 @@ Status: implemented. The implementation request approved the confirmed decisions
16
16
  - Include an extensible checklist starting with "Install RTK". Its checkbox reflects detected installation status, not a user's manual declaration.
17
17
  - When RTK is detected, show the checkbox checked and disabled.
18
18
  - When RTK is missing, show the checkbox unchecked and provide installation instructions with a "Check again" button. Do not install RTK from the application. Check and disable the checkbox only after detection succeeds.
19
- - Show only above-water (startup) entries in the breakdown by file or skill, sorted by token count from largest to smallest, with word count and estimated input cost. Omit the byte-size column.
20
- - Show context metrics and price estimates for both iceberg portions. Keep the visualization free of the illustration caption and repeated context/pricing caveats; retain the estimation method and official pricing in the expandable details.
19
+ - Show only above-water (startup) entries in the breakdown by file or skill, sorted by token count from largest to smallest, with token and word counts. Omit the redundant context, input-cost and byte-size columns. Display the two total prices in USD rounded to four decimal places, with the full unrounded amount in the native browser tooltip. Keep full precision in the API and calculations. Show token and word counts in both portions, without bytes.
20
+ - Show context metrics and price estimates for both iceberg portions. Keep the visualization free of the illustration caption and repeated context/pricing caveats. Keep the estimation method and official pricing documented here; omit the expandable details from the dashboard.
21
+ - Label the startup-only table "Startup context breakdown". Keep the existing iceberg and table rendered while repricing so that changing the model preserves the page height and scroll position. On refresh failure, retain the previous estimate with an explicit error.
21
22
  - Exclude quality scores and rewrite suggestions from V1.
22
23
 
23
24
  ## Implementation research
@@ -27,25 +28,48 @@ Status: implemented. The implementation request approved the confirmed decisions
27
28
 
28
29
  ## V1 implementation
29
30
 
30
- The authenticated `/api/token-estimate` endpoint requires exactly one supported `client` and `model`. It uses the latest scan snapshot, including a refreshed snapshot after Rescan. `/api/optimization-checks` runs bounded, fixed RTK identity probes on demand. Neither endpoint installs anything or contacts a model provider.
31
+ The authenticated `/api/token-estimate` endpoint accepts a supported `client` (including `all`) and `model`. It uses the latest scan snapshot, including a refreshed snapshot after Rescan. `/api/optimization-checks` runs bounded, fixed RTK identity probes on demand. Neither endpoint installs anything or contacts a model provider.
31
32
 
32
33
  ### Estimation method
33
34
 
34
35
  V1 uses `ceil(Unicode code points / 4)` per entry, whitespace-separated word counts and UTF-8 byte sizes. This lightweight, deterministic heuristic needs no network service or tokenizer dependency. It is approximate, particularly for code and non-Latin text, and is not interchangeable with any provider's tokenizer. Empty text has zero tokens. Totals sum the rounded entry estimates.
35
36
 
36
- A skill catalog entry contains its name, a newline and its description. Its on-demand body excludes YAML frontmatter. Other skill metadata and client-generated catalog wrappers are not modeled. Identical skill copies are grouped; physical context-file aliases are counted once. References are followed locally, including references from rules and skills, with cycle protection. Link text stays in the referring file; linked contents stay on demand unless independently applicable at startup.
37
+ A skill catalog entry contains its name, a newline and its description. Description visibility is tracked per agent separately from invocation permissions:
38
+
39
+ | Agent | Manual-only configuration | Description loaded at startup |
40
+ | -------------- | ----------------------------------------------------------------- | ----------------------------- |
41
+ | Claude Code | `disable-model-invocation: true` | No |
42
+ | Cursor | `disable-model-invocation: true` | No |
43
+ | GitHub Copilot | `disable-model-invocation: true` | No |
44
+ | Native Codex | `policy.allow_implicit_invocation: false` in `agents/openai.yaml` | No |
45
+
46
+ For Claude Code, Cursor and Copilot, a manual-only skill's catalog entry stays on demand even at project-root or user scope. Its body also remains on demand. `user-invocable: false` alone controls the user's menu access; it does not remove an automatically visible description. Native Codex excludes the skill from its model-facing catalog when `policy.allow_implicit_invocation: false` is set in `agents/openai.yaml`, while explicit `$skill` invocation remains available. Codex does not interpret Claude's frontmatter flag as a catalog exclusion. Visibility is tracked per physical skill copy, so an automatic nested copy cannot promote an explicitly manual root copy into startup. Both flags disabling invocation hide the description from Claude/Cursor/Copilot as well; the local discoverable content remains in the hypothetical on-demand inventory.
47
+
48
+ Sources checked on 2026-10-17: [Claude Code context-loading table](https://code.claude.com/docs/en/skills#control-who-invokes-a-skill), [Cursor manual invocation](https://cursor.com/docs/skills#disabling-automatic-invocation), [Copilot invocation controls](https://code.visualstudio.com/docs/agent-customization/agent-skills#use-skills-as-slash-commands), [Copilot's catalog filtering implementation](https://github.com/microsoft/vscode/blob/70cda9d07db24af8754e4a5b6fdb19d94ab66602/extensions/copilot/src/platform/promptFiles/node/automaticInstructionsCollector.ts), and [Codex host catalog filtering](https://github.com/openai/codex/blob/ce0323f2f2d3b25e82806cd555237da3db4e1897/codex-rs/ext/skills/src/provider/host.rs), [Codex executor catalog filtering](https://github.com/openai/codex/blob/ce0323f2f2d3b25e82806cd555237da3db4e1897/codex-rs/ext/skills/src/provider/executor.rs), and [Codex policy reference](https://github.com/openai/codex/blob/ce0323f2f2d3b25e82806cd555237da3db4e1897/codex-rs/skills/src/assets/samples/skill-creator/references/openai_yaml.md). Installed plugin stores, session overrides, active custom modes and preloaded subagent skills are outside this scanner's scope.
49
+
50
+ In all-agents mode, shared entries still count once. A catalog belongs to startup if any selected agent loads its description at startup; a skill hidden from one agent can therefore remain in the combined startup table when another agent still loads its description. A skill hidden from every discovering agent stays entirely on demand.
51
+
52
+ A skill's on-demand body excludes YAML frontmatter. Other skill metadata and client-generated catalog wrappers are not modeled. Identical skill copies are grouped; physical context-file aliases are counted once. References are followed locally, including references from rules and skills, with cycle protection. Link text stays in the referring file; linked contents stay on demand unless independently applicable at startup.
37
53
 
38
54
  Startup means a session at the scanned project root. Root instructions, supported user instructions, unconditional rules and root/user skill catalogs qualify. Nested instructions and nested skill catalogs are on demand. Codex override files replace AGENTS.md in the same folder. Rule conditions use Cursor `alwaysApply`, Claude `paths`, and universal Copilot `applyTo` patterns. Other rules are on demand. Estimates inherit the scanner's file-size, directory-depth, symlink and discovery boundaries. Ancestor instructions outside the scanned root, remote sources, installed plugin stores and session-specific client settings are not inspected. The UI reports when user discovery was disabled and displays scan warnings.
39
55
 
40
56
  ### Maintained pricing
41
57
 
42
- Prices verified on 2026-10-10, USD per million standard uncached input tokens:
58
+ Prices verified on 2026-10-17, USD per million standard uncached input tokens:
59
+
60
+ | Preset | Input price | Long-context input price | Official source |
61
+ | ----------------- | ----------: | --------------------------- | -------------------------------------------------------------------------- |
62
+ | GPT-6 Astra | $10.00 | $20.00 above 272,000 tokens | [OpenAI API pricing](https://developers.openai.com/api/docs/pricing) |
63
+ | GPT-6.1 Sol | $2.00 | $4.00 above 272,000 tokens | [OpenAI API pricing](https://developers.openai.com/api/docs/pricing) |
64
+ | GPT-6 Luna | $0.10 | $0.20 above 272,000 tokens | [OpenAI API pricing](https://developers.openai.com/api/docs/pricing) |
65
+ | Claude Fable 5.1 | $10.00 | Same rate | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
66
+ | Claude Opus 5.5 | $4.00 | Same rate | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
67
+ | Claude Sonnet 5.5 | $2.00 | Same rate | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
68
+ | Claude Haiku 5.5 | $0.10 | $0.50 above 100,000 tokens | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
69
+
70
+ GPT-6.1 Sol is selected by default. Use the official API IDs: `gpt-6-astra`, `gpt-6.1-sol`, `gpt-6-luna`, `claude-fable-5-1`, `claude-opus-5-5`, `claude-sonnet-5-5`, and `claude-haiku-5-5`. These are the latest verified versions in the requested model families.
43
71
 
44
- | Preset | Input price | Official source |
45
- | ----------------- | ----------: | -------------------------------------------------------------------------- |
46
- | GPT-5.3 Codex | $1.75 | [OpenAI API pricing](https://developers.openai.com/api/docs/pricing) |
47
- | Claude Sonnet 5.5 | $2.00 | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
48
- | Claude Opus 5.5 | $4.00 | [Claude pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
72
+ Each iceberg portion is priced as a separate hypothetical request. When its total tokens exceed a model's threshold, apply the higher rate to every token in that portion, including entries smaller than the threshold. Exactly at the threshold, use the base rate. The other portion retains its own applicable rate. See [OpenAI's long-context rule](https://developers.openai.com/api/docs/models/gpt-6.1-sol) and [Anthropic's prompt-length rule](https://platform.claude.com/docs/en/about-claude/pricing#long-context-pricing).
49
73
 
50
74
  Presets are pricing scenarios, not a promise that each client exposes each model. Maintainers update `src/token-estimator.ts` and this table together when prices change. Calculations exclude output tokens, caching, batch discounts, regional surcharges, subscription pricing and repeated session loads.
51
75
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeursenior/pek",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Agent Visualizer by Product Engineer Kit: explore local AI instructions, rules, skills and MCP configuration.",
5
5
  "type": "module",
6
6
  "bin": {