@koishi-ce/plugin-market 1.0.7 → 1.0.9

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/dist/style.css CHANGED
@@ -1,2 +1,2 @@
1
- .confirm-panel td.arrow{padding:0}.confirm-panel td.arrow span{justify-content:center;align-items:center;display:flex}.confirm-panel .el-dialog__footer{justify-content:space-between;align-items:center;display:flex}.manual-panel .k-comment{margin-top:0}.dep-package-view[data-v-9e4faa43]{height:3rem;position:relative}.dep-package-view .el-button[data-v-9e4faa43]{width:4rem}.page-deps{flex-flow:column;display:flex}.page-deps .body-container{margin-top:-1px;transform:translateY(1px)}.page-deps table tr:first-child{border-top:none}.page-deps tbody tr{transition:all .3s}.page-deps tbody tr:hover{background-color:var(--k-side-bg)}@media (width<=768px){.page-deps td{padding:.5em}}.theme-color.primary{color:var(--primary)}.theme-color.success{color:var(--success)}.theme-color.warning{color:var(--warning)}.theme-color.danger{color:var(--danger)}.install-panel .el-dialog__header{align-items:center;gap:0 .5em;padding-bottom:4px;padding-right:36px;display:flex}.install-panel .el-dialog__header .el-dialog__title{color:var(--fg1);flex:none;margin-right:.5rem;font-weight:500}.install-panel .el-dialog__header .el-select{flex:auto;max-width:12.5rem;margin:-2px 0 -4px}.install-panel .warning{color:var(--k-color-warning)}.install-panel .danger{color:var(--k-color-danger)}.install-panel .version-badges{float:right;margin-right:-12px}.install-panel .el-dialog__body{min-height:40px;padding:0 20px}.install-panel .el-dialog__body>div{margin:1rem 0}.install-panel .el-dialog__body:last-child{padding-bottom:1rem}.install-panel table thead td,.install-panel table thead th,.install-panel table tbody td,.install-panel table tbody th{white-space:nowrap;padding:.5em .875em}.install-panel span.link:hover{cursor:pointer;text-decoration:underline}.install-panel .el-button+.el-button{margin-left:1rem}.install-panel .el-dialog__footer{justify-content:space-between;align-items:center;display:flex}.install-panel .wrapper{display:inline-flex;position:relative}.install-panel .wrapper .shadow{letter-spacing:1px;visibility:hidden;padding-right:22px}.install-panel .wrapper .el-select{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.dot-hint:before{content:"";background-color:currentColor;border-radius:100%;width:.5rem;height:.5rem;transition:background-color .3s;position:absolute;top:50%;right:20px;transform:translateY(-50%);box-shadow:1px 1px 2px #3333}.market-filter-item[data-v-aaf12c1e]{color:var(--k-text-normal);z-index:2;cursor:pointer;align-items:center;height:24px;margin:4px 0;transition:color .5s;display:flex}.market-filter-item[data-v-aaf12c1e]:hover{color:var(--k-text-dark)}.market-filter-item.active[data-v-aaf12c1e]{color:var(--k-text-active)}.market-filter-item.active.verified[data-v-aaf12c1e],.market-filter-item.active.newborn[data-v-aaf12c1e]{color:var(--k-color-success)}.market-filter-item.active.preview[data-v-aaf12c1e],.market-filter-item.active.portable[data-v-aaf12c1e]{color:var(--k-color-warning)}.market-filter-item.active.insecure[data-v-aaf12c1e]{color:var(--k-color-danger)}.market-filter-item.disabled[data-v-aaf12c1e]{opacity:.5;text-decoration:line-through;text-decoration-thickness:2px}.market-filter-item .icon[data-v-aaf12c1e]{justify-content:center;align-items:center;width:1.75rem;margin-right:4px;display:inline-flex}.market-filter-item:not(.active) .order[data-v-aaf12c1e]{display:none}.market-filter-item .order[data-v-aaf12c1e]{justify-content:center;align-items:center;width:1.75rem;display:inline-flex}.market-filter-item svg[data-v-aaf12c1e]{max-width:1.125rem;height:1rem}.market-filter-item .text[data-v-aaf12c1e],.market-filter-item .count[data-v-aaf12c1e]{font-size:14px;font-weight:500;line-height:20px}.market-filter-item .count[data-v-aaf12c1e]{margin-right:4px}.market-filter-item .spacer[data-v-aaf12c1e]{flex:1}.k-schema-item p{margin:.25rem;font-size:.875rem;line-height:1.7}.k-schema-item .markdown p{margin:0}.k-schema-item ul{width:100%;padding-left:1rem;font-size:.875rem;list-style:none}.k-schema-item ul .el-radio,.k-schema-item ul .el-checkbox{height:1.375rem}.k-schema-item .el-button+.el-button{margin-left:0}.k-schema-item .k-schema-main{grid-template-columns:1fr auto 2rem;justify-content:space-between;align-items:center;gap:.25rem 1rem;min-height:3rem;display:grid}.k-schema-item h3{-webkit-user-select:none;user-select:none;align-items:center;margin:0;font-size:1rem;line-height:1.7;display:flex;position:relative}.k-schema-item h3>*{flex:none}.k-schema-item h3 .prefix{text-overflow:ellipsis;flex:0 auto;font-weight:400;overflow:hidden}.k-schema-item .k-schema-right{flex:1;justify-content:flex-end;gap:1rem;display:flex}.k-schema-item .el-button.ellipsis{padding:8px 9px}.k-schema-item .el-button.ellipsis .k-icon{width:12px}.k-schema-item .bottom{margin:.5rem 0 .25rem}.k-schema-item .actions{width:.5rem;height:100%;transition:var(--color-transition);border-left:2px solid #0000;position:absolute;top:0;left:0}.k-schema-item.changed .actions{border-left-color:var(--el-color-primary)}.k-schema-item.required .actions{border-left-color:var(--el-color-error)}.k-schema-item.invalid .actions{border-left-color:var(--el-color-warning)}.k-schema-item .el-input .suffix-icon{justify-content:center;align-items:center;width:1rem;margin-left:6px;display:flex}.k-schema-item .el-input .k-icon{color:var(--k-text-light);transition:var(--color-transition);cursor:pointer;height:.75rem}.k-schema-item .el-input .k-icon:hover{color:var(--k-text-dark)}.k-schema-item .el-input .k-icon.invalid{cursor:auto;color:var(--k-color-danger)}.k-schema-item .el-input.nullable:not(:focus-within) .el-input__prefix{border-top:var(--el-border);width:40%;transition:var(--color-transition);display:block;position:absolute;top:50%}.k-schema-item .el-input .el-input__wrapper{padding-right:9px}.k-schema-item .el-input:not(.minimal).invalid .el-input__wrapper:hover,.k-schema-item .el-input:not(.minimal).invalid .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--k-color-danger) inset}.k-schema-item .el-input-number .el-input__wrapper{padding-right:42px}.k-schema-item .el-switch.nullable .el-switch__core{border:1px solid var(--el-border-color);background-color:#0000}.k-schema-item .el-switch.nullable .el-switch__action{background-color:var(--el-border-color);border-radius:0;width:16px;height:1px;left:11px}.k-schema-item .el-switch.nullable:hover .el-switch__core{border-color:var(--el-color-primary)}.entry-input[data-v-e26e0849]{position:relative}.entry-input .shadow[data-v-e26e0849]{visibility:hidden;white-space:pre}.entry-input .placeholder[data-v-e26e0849]{min-width:2rem;display:inline-block}.entry-input input[data-v-e26e0849]{font-size:1em;font-weight:inherit;border:none;border-radius:0;outline:none;margin:0;padding:0 .5em;font-family:inherit;position:absolute;left:-.5em;right:-.5em}.k-schema-table-container{position:relative}.k-schema-table-container .cell-outline{box-sizing:border-box;border:1px solid var(--k-color-active);pointer-events:none;position:absolute}.k-schema-table-container .cell-outline.invalid{border-color:var(--k-color-danger)}.k-schema-table td,.k-schema-table th{border:1px solid var(--el-border-color)}.k-schema-table th{padding:.5rem .75rem;line-height:1.25rem}.k-schema-table td{transition:var(--color-transition);padding:0}.k-schema-table td:hover{background-color:var(--k-button-hover-bg)}.k-schema-table td.k-schema-table-button{width:2rem;max-width:2rem;color:var(--k-text-light);cursor:pointer}.k-schema-table td.k-schema-table-button:hover{color:var(--k-color-active)}.k-schema-table td.k-schema-table-button .inner{box-sizing:border-box;justify-content:center;align-items:center;height:2rem;display:flex}.k-schema-table td.k-schema-table-button .k-icon{height:1rem}.k-schema-table td.k-schema-table-button.disabled{color:var(--k-color-disabled);pointer-events:none}.k-badge{color:#fff;white-space:nowrap;vertical-align:baseline;border-radius:4px;height:1.25rem;margin-left:.5rem;padding:0 6px;font-size:14px;font-weight:500;line-height:1.25rem;display:inline-block}.k-badge.primary{background-color:var(--k-color-primary)}.k-badge.warning{background-color:var(--k-color-warning)}.k-badge.success{background-color:var(--k-color-success)}.k-badge.danger{background-color:var(--k-color-danger)}.k-form:not(:first-child){margin-top:2rem}@media screen and (width<=480px){.k-form{margin:0 -1.5rem}.k-form .k-schema-header{padding:0 1.5rem}.k-form .k-schema-item{padding:.5rem 1.5rem}.k-form .k-schema-item .k-schema-main{min-height:unset;grid-template-rows:auto auto;grid-template-columns:auto 2rem}.k-form .k-schema-item .k-schema-right{grid-area:2/1/auto/2;display:block}.k-form .k-schema-item .k-schema-right>:first-child{margin-top:.25rem}.k-form .k-schema-item .k-schema-right>:last-child{margin-bottom:.25rem}}.k-menu,.k-menu.el-popper.is-light{z-index:1000;background-color:var(--el-bg-color-overlay);min-width:12rem;box-shadow:var(--k-menu-shadow);border-radius:6px;padding:.375rem 0;font-size:14px;position:fixed}.k-menu-separator{border-top:1px solid var(--el-border-color-light);margin:.375rem 0}.k-menu-separator:first-child,.k-menu-separator:last-child,.k-menu-separator+.k-menu-separator{display:none}.k-menu-item{-webkit-user-select:none;user-select:none;cursor:pointer;transition:var(--color-transition);border-radius:4px;margin:0 .375rem;padding:.375rem 0 .375rem 2.5rem;position:relative}.k-menu-item.disabled{color:var(--k-color-disabled);pointer-events:none}.k-menu-item:not(.disabled):hover{background-color:var(--k-hover-bg);color:inherit!important}.k-menu-item:not(.disabled).primary{color:var(--el-color-primary)}.k-menu-item:not(.disabled).primary:hover{background-color:var(--el-color-primary)}.k-menu-item:not(.disabled).danger{color:var(--el-color-error)}.k-menu-item:not(.disabled).danger:hover{background-color:var(--el-color-error)}.k-menu-item:not(.disabled).warning{color:var(--el-color-warning)}.k-menu-item:not(.disabled).warning:hover{background-color:var(--el-color-warning)}.k-menu-icon{justify-content:center;align-items:center;width:2.5rem;height:100%;display:flex;position:absolute;top:0;left:0}.k-menu-icon .k-icon{height:1rem}.k-schema-item{border-bottom:1px solid var(--el-border-color-light);transition:var(--color-transition);padding:.5rem 1rem;position:relative}.k-schema-item:first-child,:not(.k-schema-item):not(.k-schema-group)+.k-schema-item{border-top:1px solid var(--el-border-color-light)}.k-schema-item+h2{margin-top:2rem}.k-schema-item:hover{background-color:var(--el-fill-color)}.k-schema-item .k-schema-right .el-select{width:12rem}.k-schema-header{margin:1rem 0;font-size:1.25rem}.k-schema-header:not(:first-child){margin-top:2rem}.k-schema-group{position:relative}.k-schema-group:empty{border-bottom:none}.k-schema-group>:first-child{border-top:none}.k-schema-table .el-input,.k-schema-table .el-input-number{width:100%}.k-schema-table-cell-input,.k-schema-table-cell-input-number,.k-schema-table-cell-select{min-width:6rem}.k-schema-table .el-input__wrapper,.k-schema-table .el-select__wrapper{box-shadow:none!important}.el-input.invalid .el-input__wrapper,.el-textarea.invalid .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.k-schema-edit-dialog .el-dialog__footer{justify-content:space-between;display:flex}.k-filter-expr{flex:1 0 auto;display:inline-flex}.k-filter-expr .entity,.k-filter-expr .operator{flex:none;width:7.5rem}.k-filter-expr .value{flex:1 0 auto;width:auto}.k-filter-item{display:flex}.overlay-enter-from,.overlay-leave-to{opacity:0}.overlay-enter,.overlay-leave{opacity:1}.image-viewer{position:absolute;inset:0}.image-viewer .button{cursor:pointer;-webkit-user-select:none;user-select:none;opacity:.5;background-color:#303133;border-radius:3rem;justify-content:space-evenly;align-items:center;height:3rem;font-size:1.5rem;transition:all .4s;display:flex;position:absolute}.image-viewer .button .k-icon{height:1.25rem;transition:all .4s}.image-viewer .button:not(.disabled):hover{opacity:.8}.image-viewer .button:not(.disabled) .k-icon:hover{color:#f4f4f5cc}.image-viewer .button.left{z-index:2000;width:3rem;top:50%;left:3rem;transform:translateY(-50%)}.image-viewer .button.left .k-icon{margin-left:-3px}.image-viewer .button.right{z-index:2000;width:3rem;top:50%;right:3rem;transform:translateY(-50%)}.image-viewer .button.right .k-icon{margin-right:-3px}.image-viewer .button.bottom{z-index:2000;width:18rem;bottom:3rem;left:50%;transform:translate(-50%)}.image-viewer .button.disabled{cursor:not-allowed}.image-viewer img{transition:all .3s;position:absolute}.k-link{cursor:pointer;text-decoration:underline}.k-link:hover{text-decoration:underline}.cursor-pointer[data-v-282a8a69]{cursor:pointer}.market-package[data-v-282a8a69]{box-sizing:border-box;width:100%;max-width:540px;height:calc(12.5rem + 2px);margin:0;padding:1rem 1.25rem;transition:box-shadow .3s;box-shadow:inset 0 0 0 2px #0000}.market-package[data-v-282a8a69]:hover{box-shadow:0 0 0 2px inset var(--k-color-primary)}.market-package .market-icon[data-v-282a8a69]{height:1em;display:inline}.market-package .header[data-v-282a8a69],.market-package .footer[data-v-282a8a69]{flex:none}.market-package .header[data-v-282a8a69]{position:relative}.market-package .header .left[data-v-282a8a69]{border:1px solid var(--k-color-border);box-sizing:border-box;border-radius:8px;width:3.5rem;height:3.5rem}.market-package .header .left svg[data-v-282a8a69]{height:1.75rem}.market-package .header h2[data-v-282a8a69]{align-items:center;margin:0;font-size:1.125rem;line-height:1;display:flex}.market-package .header h2 .title[data-v-282a8a69]{flex:0 auto;line-height:1.5rem;display:inline-block}.market-package .header h2 .icon[data-v-282a8a69]{vertical-align:-2px;cursor:pointer;width:1.125rem;height:1.125rem;margin-left:.6rem;display:inline-block;position:relative}.market-package .header h2 .icon .market-icon[data-v-282a8a69]{z-index:10;height:100%;transition:color .3s;position:relative}.market-package .header h2 .icon.verified[data-v-282a8a69],.market-package .header h2 .icon.newborn[data-v-282a8a69]{color:var(--k-color-success)}.market-package .header h2 .icon.preview[data-v-282a8a69]{color:var(--k-color-warning)}.market-package .header h2 .icon.insecure[data-v-282a8a69]{color:var(--k-color-danger)}.market-package .header h2 .icon.verified[data-v-282a8a69]:before,.market-package .header h2 .icon.insecure[data-v-282a8a69]:before{content:"";z-index:0;background-color:#fff;border-radius:100%;position:absolute;inset:25%}.market-package .header .rating[data-v-282a8a69]{align-items:center;gap:0 .25rem;width:fit-content;height:1.5rem;display:inline-flex}.market-package .header .rating .market-icon[data-v-282a8a69]{color:var(--k-color-warning);height:.875rem;transition:color .3s}.market-package .desc[data-v-282a8a69]{word-break:break-word;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:auto;margin:0;font-size:15px;line-height:1.5;display:-webkit-box;overflow:hidden}.market-package .footer[data-v-282a8a69]{cursor:default;align-items:center;gap:.5rem;height:1.5rem;margin-bottom:-.25rem;font-size:14px;transition:color .3s;display:flex;overflow:hidden}.market-package .footer[data-v-282a8a69]>*{flex:none}.market-package .footer .spacer[data-v-282a8a69]{flex:0 2 .5rem}.market-package .footer .long-spacer[data-v-282a8a69]{flex:auto}.market-package .footer .market-icon[data-v-282a8a69]{vertical-align:-1px;width:16px;height:12px;margin-right:6px}.market-package .footer .avatars[data-v-282a8a69]{gap:.25rem;display:flex}.market-package .footer .avatars .avatar[data-v-282a8a69]{cursor:pointer}.market-package .footer .avatars img[data-v-282a8a69]{vertical-align:middle;border-radius:100%;width:1.5rem;height:1.5rem}.package-list[data-v-97828332]{gap:var(--card-margin);flex:1 0 auto;grid-template-columns:repeat(auto-fill,minmax(336px,1fr));justify-items:center;display:grid}.pagination[data-v-97828332]{margin:var(--card-margin) 0;justify-content:center}.k-empty[data-v-97828332]{flex:1 0 auto}.search-box[data-v-df170aee]{border-radius:1.5rem;align-items:center;width:100%;max-width:600px;margin:2rem auto 0;display:flex}.search-container[data-v-df170aee]{flex-wrap:wrap;flex:auto;align-items:center;gap:8px 6px;padding:.75rem 0 .75rem 1.25rem;display:flex}.search-container input[data-v-df170aee]{box-sizing:border-box;min-width:10rem;height:1.25rem;color:inherit;background-color:#0000;border:none;outline:none;flex:auto;padding:0;font-size:.9em}.search-action[data-v-df170aee]{cursor:pointer;flex-direction:column;flex:none;justify-content:center;align-items:center;width:3rem;height:2.5rem;display:flex}.search-action .market-icon[data-v-df170aee]{opacity:.5;height:1rem}.search-action:hover .market-icon.search[data-v-df170aee],.search-action:not(:hover) .market-icon.close[data-v-df170aee]{display:none}.search-word[data-v-df170aee]{box-sizing:border-box;color:#fff;white-space:nowrap;vertical-align:baseline;background-color:var(--k-fill-normal);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;flex:none;height:1.25rem;padding:2px 6px;font-size:14px;font-weight:500;line-height:1rem;transition:opacity .3s,background-color .3s;display:inline-block}.search-word.invalid[data-v-df170aee]{opacity:.5;text-decoration:line-through}.search-word.invalid[data-v-df170aee]:hover{opacity:1}.page-market .layout-main .el-scrollbar__view{padding:0 var(--card-margin);flex-direction:column;min-height:100%;display:flex}.page-market .layout-left .market-filter-group{margin:2rem 0;padding:0 1.5rem}.page-market .layout-left h2{margin:0;padding:8px 0;font-size:14px}.search-box{background-color:var(--k-card-bg);box-shadow:var(--k-card-shadow);transition:var(--color-transition)}.market-hint{width:100%;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);font-weight:var(--el-font-weight-primary);margin:1rem 0 -.5rem;transition:color .3s}.market-hint .el-checkbox{margin-left:1.5rem}.market-container .k-button{margin-left:1rem;padding:.35em .85em;transform:translateY(-1px)}.market-error.k-comment{margin-left:2rem;margin-right:2rem}.k-status .el-progress-bar{width:120px;margin-right:2px}.dialog-config-fork .el-dialog__header .el-dialog__title{color:var(--fg1);flex:none;margin-right:.5rem;font-weight:500}.dialog-config-fork .status-light{margin-right:.75rem}.dialog-config-fork .actions{justify-content:flex-end;align-items:center;gap:0 .5rem;display:flex}.dialog-config-fork .action{cursor:pointer;width:1.25rem;color:var(--fg2);transition:var(--color-transition);justify-content:center;display:inline-flex}.dialog-config-fork .action:hover{color:var(--fg1)}.dialog-config-fork .el-dialog__footer{justify-content:space-between;align-items:center;font-size:.9em;display:flex}.modifier,.plugin-view .markdown.usage{margin-bottom:2rem}.plugin-view .markdown.usage h2{font-size:1.25rem}.plugin-tree{width:100%;height:100%;overflow:auto}.plugin-tree .el-scrollbar__view{padding:1rem 0;line-height:2.25rem}.plugin-tree .search{padding:0 1.5rem}.plugin-tree .k-icon-filter{height:15px}.plugin-tree .el-tree-node.is-group>.el-tree-node__content{font-weight:700}.plugin-tree .el-tree-node__content .item{flex:1;justify-content:space-between;align-items:center;height:100%;display:flex;overflow:hidden}.plugin-tree .el-tree-node__content .label{text-overflow:ellipsis;transition:var(--color-transition);overflow:hidden}.plugin-tree .el-tree-node__content .right{height:100%;margin:0 1.5rem 0 .5rem}.end{margin-right:.5rem}.config-header{margin:0 0 2rem;font-size:1.375rem;line-height:2rem}.config-header .k-button{float:right}.plugin-view .k-content>:first-child{margin-top:0}.plugin-select .el-dialog__header{border-bottom:1px solid var(--k-color-divider);justify-content:space-between;align-items:center;margin-right:0;padding:12px 20px;display:flex}.plugin-select .el-dialog__header button{top:2px}.plugin-select .el-dialog__header .title{flex:none}.plugin-select .el-dialog__header .el-input{width:220px;height:2rem;display:inline-block}.plugin-select .el-dialog__body{height:50vh;padding:0;display:flex}.plugin-select .el-dialog__body .tabs{border-right:1px solid var(--k-color-divider);flex:none;width:7.5rem;font-size:15px}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs{width:3rem}}.plugin-select .el-dialog__body .tabs .el-scrollbar__view{padding:.5rem 0}.plugin-select .el-dialog__body .tabs .tab-item{cursor:pointer;height:2rem;transition:var(--color-transition);justify-content:center;align-items:center;padding:0 1rem;font-size:.875rem;display:flex}.plugin-select .el-dialog__body .tabs .tab-item:hover{background-color:var(--k-hover-bg)}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs .tab-item{padding:0}}.plugin-select .el-dialog__body .tabs .tab-item .market-icon{width:1.25rem;height:1rem}.plugin-select .el-dialog__body .tabs .tab-item.active{color:var(--primary)}.plugin-select .el-dialog__body .tabs .tab-item .title{width:3.5rem;margin-left:.5rem}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs .tab-item .title{display:none}}.plugin-select .el-dialog__body .content{flex:auto}.plugin-select .el-dialog__body .content .package{cursor:pointer;transition:var(--color-transition);padding:.5rem 1rem}.plugin-select .el-dialog__body .content .package h3{margin:0 0 .25rem;font-size:16px}.plugin-select .el-dialog__body .content .package p{margin:0;font-size:14px}.plugin-select .el-dialog__body .content .package:hover{background-color:var(--k-hover-bg)}.absolute{position:absolute}.relative{position:relative}.grid{display:grid}.my-8{margin-top:2rem;margin-bottom:2rem}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.h2{height:.5rem}.h3{height:.75rem}.flex{display:flex}.inline-flex{display:inline-flex}.shrink-0{flex-shrink:0}.grow-1{flex-grow:1}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.items-center{align-items:center}.justify-center{justify-content:center}.justify-around{justify-content:space-around}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-4{column-gap:1rem}.gap-y-2{row-gap:.5rem}.overflow-hidden{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.b,.border{border-width:1px}.px{padding-left:1rem;padding-right:1rem}.pl-8{padding-left:2rem}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.shadow{--un-shadow:var(--un-shadow-inset) 0 1px 3px 0 var(--un-shadow-color,#0000001a),var(--un-shadow-inset) 0 1px 2px -1px var(--un-shadow-color,#0000001a);box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.outline{outline-style:solid}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.dialog-config-fork .status-light,.plugin-tree .status-light{width:.625rem;height:.625rem;transition:var(--color-transition);border-radius:100%;display:inline-block}.dialog-config-fork .status-light.active,.plugin-tree .status-light.active{background-color:var(--k-color-success)}.dialog-config-fork .status-light.pending,.plugin-tree .status-light.pending{background-color:var(--k-color-warning)}.dialog-config-fork .status-light.loading,.plugin-tree .status-light.loading{background-color:var(--k-color-warning);animation:1s infinite status-flash}.dialog-config-fork .status-light.failed,.plugin-tree .status-light.failed{background-color:var(--k-color-danger)}.dialog-config-fork .status-light.disabled:not(.ignore-disabled),.plugin-tree .status-light.disabled:not(.ignore-disabled){opacity:.5;background-color:var(--k-color-disabled)}@keyframes status-flash{0%,to{opacity:0}50%{opacity:1}}
1
+ .confirm-panel td.arrow{padding:0}.confirm-panel td.arrow span{justify-content:center;align-items:center;display:flex}.confirm-panel .el-dialog__footer{justify-content:space-between;align-items:center;display:flex}.manual-panel .k-comment{margin-top:0}.dep-package-view[data-v-b74d2359]{height:3rem;position:relative}.dep-package-view .el-button[data-v-b74d2359]{width:4rem}.page-deps{flex-flow:column;display:flex}.page-deps .body-container{margin-top:-1px;transform:translateY(1px)}.page-deps table tr:first-child{border-top:none}.page-deps tbody tr{transition:all .3s}.page-deps tbody tr:hover{background-color:var(--k-side-bg)}@media (width<=768px){.page-deps td{padding:.5em}}.theme-color.primary{color:var(--primary)}.theme-color.success{color:var(--success)}.theme-color.warning{color:var(--warning)}.theme-color.danger{color:var(--danger)}.install-panel .el-dialog__header{align-items:center;gap:0 .5em;padding-bottom:4px;padding-right:36px;display:flex}.install-panel .el-dialog__header .el-dialog__title{color:var(--fg1);flex:none;margin-right:.5rem;font-weight:500}.install-panel .el-dialog__header .el-select{flex:auto;max-width:12.5rem;margin:-2px 0 -4px}.install-panel .warning{color:var(--k-color-warning)}.install-panel .danger{color:var(--k-color-danger)}.install-panel .version-badges{float:right;margin-right:-12px}.install-panel .el-dialog__body{min-height:40px;padding:0 20px}.install-panel .el-dialog__body>div{margin:1rem 0}.install-panel .el-dialog__body:last-child{padding-bottom:1rem}.install-panel table thead td,.install-panel table thead th,.install-panel table tbody td,.install-panel table tbody th{white-space:nowrap;padding:.5em .875em}.install-panel span.link:hover{cursor:pointer;text-decoration:underline}.install-panel .el-button+.el-button{margin-left:1rem}.install-panel .el-dialog__footer{justify-content:space-between;align-items:center;display:flex}.install-panel .wrapper{display:inline-flex;position:relative}.install-panel .wrapper .shadow{letter-spacing:1px;visibility:hidden;padding-right:22px}.install-panel .wrapper .el-select{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.dot-hint:before{content:"";background-color:currentColor;border-radius:100%;width:.5rem;height:.5rem;transition:background-color .3s;position:absolute;top:50%;right:20px;transform:translateY(-50%);box-shadow:1px 1px 2px #3333}.market-filter-item[data-v-6ec52c5f]{color:var(--k-text-normal);z-index:2;cursor:pointer;align-items:center;height:24px;margin:4px 0;transition:color .5s;display:flex}.market-filter-item[data-v-6ec52c5f]:hover{color:var(--k-text-dark)}.market-filter-item.active[data-v-6ec52c5f]{color:var(--k-text-active)}.market-filter-item.active.verified[data-v-6ec52c5f],.market-filter-item.active.newborn[data-v-6ec52c5f]{color:var(--k-color-success)}.market-filter-item.active.preview[data-v-6ec52c5f],.market-filter-item.active.portable[data-v-6ec52c5f]{color:var(--k-color-warning)}.market-filter-item.active.insecure[data-v-6ec52c5f]{color:var(--k-color-danger)}.market-filter-item.disabled[data-v-6ec52c5f]{opacity:.5;text-decoration:line-through;text-decoration-thickness:2px}.market-filter-item .icon[data-v-6ec52c5f]{justify-content:center;align-items:center;width:1.75rem;margin-right:4px;display:inline-flex}.market-filter-item:not(.active) .order[data-v-6ec52c5f]{display:none}.market-filter-item .order[data-v-6ec52c5f]{justify-content:center;align-items:center;width:1.75rem;display:inline-flex}.market-filter-item svg[data-v-6ec52c5f]{max-width:1.125rem;height:1rem}.market-filter-item .text[data-v-6ec52c5f],.market-filter-item .count[data-v-6ec52c5f]{font-size:14px;font-weight:500;line-height:20px}.market-filter-item .count[data-v-6ec52c5f]{margin-right:4px}.market-filter-item .spacer[data-v-6ec52c5f]{flex:1}.k-schema-item p{margin:.25rem;font-size:.875rem;line-height:1.7}.k-schema-item .markdown p{margin:0}.k-schema-item ul{width:100%;padding-left:1rem;font-size:.875rem;list-style:none}.k-schema-item ul .el-radio,.k-schema-item ul .el-checkbox{height:1.375rem}.k-schema-item .el-button+.el-button{margin-left:0}.k-schema-item .k-schema-main{grid-template-columns:1fr auto 2rem;justify-content:space-between;align-items:center;gap:.25rem 1rem;min-height:3rem;display:grid}.k-schema-item h3{-webkit-user-select:none;user-select:none;align-items:center;margin:0;font-size:1rem;line-height:1.7;display:flex;position:relative}.k-schema-item h3>*{flex:none}.k-schema-item h3 .prefix{text-overflow:ellipsis;flex:0 auto;font-weight:400;overflow:hidden}.k-schema-item .k-schema-right{flex:1;justify-content:flex-end;gap:1rem;display:flex}.k-schema-item .el-button.ellipsis{padding:8px 9px}.k-schema-item .el-button.ellipsis .k-icon{width:12px}.k-schema-item .bottom{margin:.5rem 0 .25rem}.k-schema-item .actions{width:.5rem;height:100%;transition:var(--color-transition);border-left:2px solid #0000;position:absolute;top:0;left:0}.k-schema-item.changed .actions{border-left-color:var(--el-color-primary)}.k-schema-item.required .actions{border-left-color:var(--el-color-error)}.k-schema-item.invalid .actions{border-left-color:var(--el-color-warning)}.k-schema-item .el-input .suffix-icon{justify-content:center;align-items:center;width:1rem;margin-left:6px;display:flex}.k-schema-item .el-input .k-icon{color:var(--k-text-light);transition:var(--color-transition);cursor:pointer;height:.75rem}.k-schema-item .el-input .k-icon:hover{color:var(--k-text-dark)}.k-schema-item .el-input .k-icon.invalid{cursor:auto;color:var(--k-color-danger)}.k-schema-item .el-input.nullable:not(:focus-within) .el-input__prefix{border-top:var(--el-border);width:40%;transition:var(--color-transition);display:block;position:absolute;top:50%}.k-schema-item .el-input .el-input__wrapper{padding-right:9px}.k-schema-item .el-input:not(.minimal).invalid .el-input__wrapper:hover,.k-schema-item .el-input:not(.minimal).invalid .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--k-color-danger) inset}.k-schema-item .el-input-number .el-input__wrapper{padding-right:42px}.k-schema-item .el-switch.nullable .el-switch__core{border:1px solid var(--el-border-color);background-color:#0000}.k-schema-item .el-switch.nullable .el-switch__action{background-color:var(--el-border-color);border-radius:0;width:16px;height:1px;left:11px}.k-schema-item .el-switch.nullable:hover .el-switch__core{border-color:var(--el-color-primary)}.entry-input[data-v-e26e0849]{position:relative}.entry-input .shadow[data-v-e26e0849]{visibility:hidden;white-space:pre}.entry-input .placeholder[data-v-e26e0849]{min-width:2rem;display:inline-block}.entry-input input[data-v-e26e0849]{font-size:1em;font-weight:inherit;border:none;border-radius:0;outline:none;margin:0;padding:0 .5em;font-family:inherit;position:absolute;left:-.5em;right:-.5em}.k-schema-table-container{position:relative}.k-schema-table-container .cell-outline{box-sizing:border-box;border:1px solid var(--k-color-active);pointer-events:none;position:absolute}.k-schema-table-container .cell-outline.invalid{border-color:var(--k-color-danger)}.k-schema-table td,.k-schema-table th{border:1px solid var(--el-border-color)}.k-schema-table th{padding:.5rem .75rem;line-height:1.25rem}.k-schema-table td{transition:var(--color-transition);padding:0}.k-schema-table td:hover{background-color:var(--k-button-hover-bg)}.k-schema-table td.k-schema-table-button{width:2rem;max-width:2rem;color:var(--k-text-light);cursor:pointer}.k-schema-table td.k-schema-table-button:hover{color:var(--k-color-active)}.k-schema-table td.k-schema-table-button .inner{box-sizing:border-box;justify-content:center;align-items:center;height:2rem;display:flex}.k-schema-table td.k-schema-table-button .k-icon{height:1rem}.k-schema-table td.k-schema-table-button.disabled{color:var(--k-color-disabled);pointer-events:none}.k-badge{color:#fff;white-space:nowrap;vertical-align:baseline;border-radius:4px;height:1.25rem;margin-left:.5rem;padding:0 6px;font-size:14px;font-weight:500;line-height:1.25rem;display:inline-block}.k-badge.primary{background-color:var(--k-color-primary)}.k-badge.warning{background-color:var(--k-color-warning)}.k-badge.success{background-color:var(--k-color-success)}.k-badge.danger{background-color:var(--k-color-danger)}.k-form:not(:first-child){margin-top:2rem}@media screen and (width<=480px){.k-form{margin:0 -1.5rem}.k-form .k-schema-header{padding:0 1.5rem}.k-form .k-schema-item{padding:.5rem 1.5rem}.k-form .k-schema-item .k-schema-main{min-height:unset;grid-template-rows:auto auto;grid-template-columns:auto 2rem}.k-form .k-schema-item .k-schema-right{grid-area:2/1/auto/2;display:block}.k-form .k-schema-item .k-schema-right>:first-child{margin-top:.25rem}.k-form .k-schema-item .k-schema-right>:last-child{margin-bottom:.25rem}}.k-menu,.k-menu.el-popper.is-light{z-index:1000;background-color:var(--el-bg-color-overlay);min-width:12rem;box-shadow:var(--k-menu-shadow);border-radius:6px;padding:.375rem 0;font-size:14px;position:fixed}.k-menu-separator{border-top:1px solid var(--el-border-color-light);margin:.375rem 0}.k-menu-separator:first-child,.k-menu-separator:last-child,.k-menu-separator+.k-menu-separator{display:none}.k-menu-item{-webkit-user-select:none;user-select:none;cursor:pointer;transition:var(--color-transition);border-radius:4px;margin:0 .375rem;padding:.375rem 0 .375rem 2.5rem;position:relative}.k-menu-item.disabled{color:var(--k-color-disabled);pointer-events:none}.k-menu-item:not(.disabled):hover{background-color:var(--k-hover-bg);color:inherit!important}.k-menu-item:not(.disabled).primary{color:var(--el-color-primary)}.k-menu-item:not(.disabled).primary:hover{background-color:var(--el-color-primary)}.k-menu-item:not(.disabled).danger{color:var(--el-color-error)}.k-menu-item:not(.disabled).danger:hover{background-color:var(--el-color-error)}.k-menu-item:not(.disabled).warning{color:var(--el-color-warning)}.k-menu-item:not(.disabled).warning:hover{background-color:var(--el-color-warning)}.k-menu-icon{justify-content:center;align-items:center;width:2.5rem;height:100%;display:flex;position:absolute;top:0;left:0}.k-menu-icon .k-icon{height:1rem}.k-schema-item{border-bottom:1px solid var(--el-border-color-light);transition:var(--color-transition);padding:.5rem 1rem;position:relative}.k-schema-item:first-child,:not(.k-schema-item):not(.k-schema-group)+.k-schema-item{border-top:1px solid var(--el-border-color-light)}.k-schema-item+h2{margin-top:2rem}.k-schema-item:hover{background-color:var(--el-fill-color)}.k-schema-item .k-schema-right .el-select{width:12rem}.k-schema-header{margin:1rem 0;font-size:1.25rem}.k-schema-header:not(:first-child){margin-top:2rem}.k-schema-group{position:relative}.k-schema-group:empty{border-bottom:none}.k-schema-group>:first-child{border-top:none}.k-schema-table .el-input,.k-schema-table .el-input-number{width:100%}.k-schema-table-cell-input,.k-schema-table-cell-input-number,.k-schema-table-cell-select{min-width:6rem}.k-schema-table .el-input__wrapper,.k-schema-table .el-select__wrapper{box-shadow:none!important}.el-input.invalid .el-input__wrapper,.el-textarea.invalid .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.k-schema-edit-dialog .el-dialog__footer{justify-content:space-between;display:flex}.k-filter-expr{flex:1 0 auto;display:inline-flex}.k-filter-expr .entity,.k-filter-expr .operator{flex:none;width:7.5rem}.k-filter-expr .value{flex:1 0 auto;width:auto}.k-filter-item{display:flex}.overlay-enter-from,.overlay-leave-to{opacity:0}.overlay-enter,.overlay-leave{opacity:1}.image-viewer{position:absolute;inset:0}.image-viewer .button{cursor:pointer;-webkit-user-select:none;user-select:none;opacity:.5;background-color:#303133;border-radius:3rem;justify-content:space-evenly;align-items:center;height:3rem;font-size:1.5rem;transition:all .4s;display:flex;position:absolute}.image-viewer .button .k-icon{height:1.25rem;transition:all .4s}.image-viewer .button:not(.disabled):hover{opacity:.8}.image-viewer .button:not(.disabled) .k-icon:hover{color:#f4f4f5cc}.image-viewer .button.left{z-index:2000;width:3rem;top:50%;left:3rem;transform:translateY(-50%)}.image-viewer .button.left .k-icon{margin-left:-3px}.image-viewer .button.right{z-index:2000;width:3rem;top:50%;right:3rem;transform:translateY(-50%)}.image-viewer .button.right .k-icon{margin-right:-3px}.image-viewer .button.bottom{z-index:2000;width:18rem;bottom:3rem;left:50%;transform:translate(-50%)}.image-viewer .button.disabled{cursor:not-allowed}.image-viewer img{transition:all .3s;position:absolute}.k-link{cursor:pointer;text-decoration:underline}.k-link:hover{text-decoration:underline}.cursor-pointer[data-v-c57f6ae3]{cursor:pointer}.market-package[data-v-c57f6ae3]{box-sizing:border-box;width:100%;max-width:540px;height:calc(12.5rem + 2px);margin:0;padding:1rem 1.25rem;transition:box-shadow .3s;box-shadow:inset 0 0 0 2px #0000}.market-package[data-v-c57f6ae3]:hover{box-shadow:0 0 0 2px inset var(--k-color-primary)}.market-package .market-icon[data-v-c57f6ae3]{height:1em;display:inline}.market-package .header[data-v-c57f6ae3],.market-package .footer[data-v-c57f6ae3]{flex:none}.market-package .header[data-v-c57f6ae3]{position:relative}.market-package .header .left[data-v-c57f6ae3]{border:1px solid var(--k-color-border);box-sizing:border-box;border-radius:8px;width:3.5rem;height:3.5rem}.market-package .header .left svg[data-v-c57f6ae3]{height:1.75rem}.market-package .header h2[data-v-c57f6ae3]{align-items:center;margin:0;font-size:1.125rem;line-height:1;display:flex}.market-package .header h2 .title[data-v-c57f6ae3]{flex:0 auto;line-height:1.5rem;display:inline-block}.market-package .header h2 .icon[data-v-c57f6ae3]{vertical-align:-2px;cursor:pointer;width:1.125rem;height:1.125rem;margin-left:.6rem;display:inline-block;position:relative}.market-package .header h2 .icon .market-icon[data-v-c57f6ae3]{z-index:10;height:100%;transition:color .3s;position:relative}.market-package .header h2 .icon.verified[data-v-c57f6ae3],.market-package .header h2 .icon.newborn[data-v-c57f6ae3]{color:var(--k-color-success)}.market-package .header h2 .icon.preview[data-v-c57f6ae3]{color:var(--k-color-warning)}.market-package .header h2 .icon.insecure[data-v-c57f6ae3]{color:var(--k-color-danger)}.market-package .header h2 .icon.verified[data-v-c57f6ae3]:before,.market-package .header h2 .icon.insecure[data-v-c57f6ae3]:before{content:"";z-index:0;background-color:#fff;border-radius:100%;position:absolute;inset:25%}.market-package .header .rating[data-v-c57f6ae3]{align-items:center;gap:0 .25rem;width:fit-content;height:1.5rem;display:inline-flex}.market-package .header .rating .market-icon[data-v-c57f6ae3]{color:var(--k-color-warning);height:.875rem;transition:color .3s}.market-package .desc[data-v-c57f6ae3]{word-break:break-word;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:auto;margin:0;font-size:15px;line-height:1.5;display:-webkit-box;overflow:hidden}.market-package .footer[data-v-c57f6ae3]{cursor:default;align-items:center;gap:.5rem;height:1.5rem;margin-bottom:-.25rem;font-size:14px;transition:color .3s;display:flex;overflow:hidden}.market-package .footer[data-v-c57f6ae3]>*{flex:none}.market-package .footer .spacer[data-v-c57f6ae3]{flex:0 2 .5rem}.market-package .footer .long-spacer[data-v-c57f6ae3]{flex:auto}.market-package .footer .market-icon[data-v-c57f6ae3]{vertical-align:-1px;width:16px;height:12px;margin-right:6px}.market-package .footer .avatars[data-v-c57f6ae3]{gap:.25rem;display:flex}.market-package .footer .avatars .avatar[data-v-c57f6ae3]{cursor:pointer}.market-package .footer .avatars img[data-v-c57f6ae3]{vertical-align:middle;border-radius:100%;width:1.5rem;height:1.5rem}.package-list[data-v-a0cd1fb0]{gap:var(--card-margin);flex:1 0 auto;grid-template-columns:repeat(auto-fill,minmax(336px,1fr));justify-items:center;display:grid}.pagination[data-v-a0cd1fb0]{margin:var(--card-margin) 0;justify-content:center}.k-empty[data-v-a0cd1fb0]{flex:1 0 auto}.search-box[data-v-ddf3d744]{border-radius:1.5rem;align-items:center;width:100%;max-width:600px;margin:2rem auto 0;display:flex}.search-container[data-v-ddf3d744]{flex-wrap:wrap;flex:auto;align-items:center;gap:8px 6px;padding:.75rem 0 .75rem 1.25rem;display:flex}.search-container input[data-v-ddf3d744]{box-sizing:border-box;min-width:10rem;height:1.25rem;color:inherit;background-color:#0000;border:none;outline:none;flex:auto;padding:0;font-size:.9em}.search-action[data-v-ddf3d744]{cursor:pointer;flex-direction:column;flex:none;justify-content:center;align-items:center;width:3rem;height:2.5rem;display:flex}.search-action .market-icon[data-v-ddf3d744]{opacity:.5;height:1rem}.search-action:hover .market-icon.search[data-v-ddf3d744],.search-action:not(:hover) .market-icon.close[data-v-ddf3d744]{display:none}.search-word[data-v-ddf3d744]{box-sizing:border-box;color:#fff;white-space:nowrap;vertical-align:baseline;background-color:var(--k-fill-normal);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;flex:none;height:1.25rem;padding:2px 6px;font-size:14px;font-weight:500;line-height:1rem;transition:opacity .3s,background-color .3s;display:inline-block}.search-word.invalid[data-v-ddf3d744]{opacity:.5;text-decoration:line-through}.search-word.invalid[data-v-ddf3d744]:hover{opacity:1}.page-market .layout-main .el-scrollbar__view{padding:0 var(--card-margin);flex-direction:column;min-height:100%;display:flex}.page-market .layout-left .market-filter-group{margin:2rem 0;padding:0 1.5rem}.page-market .layout-left h2{margin:0;padding:8px 0;font-size:14px}.search-box{background-color:var(--k-card-bg);box-shadow:var(--k-card-shadow);transition:var(--color-transition)}.market-hint{width:100%;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);font-weight:var(--el-font-weight-primary);margin:1rem 0 -.5rem;transition:color .3s}.market-hint .el-checkbox{margin-left:1.5rem}.market-container .k-button{margin-left:1rem;padding:.35em .85em;transform:translateY(-1px)}.market-error.k-comment{margin-left:2rem;margin-right:2rem}.k-status .el-progress-bar{width:120px;margin-right:2px}.dialog-config-fork .el-dialog__header .el-dialog__title{color:var(--fg1);flex:none;margin-right:.5rem;font-weight:500}.dialog-config-fork .status-light{margin-right:.75rem}.dialog-config-fork .actions{justify-content:flex-end;align-items:center;gap:0 .5rem;display:flex}.dialog-config-fork .action{cursor:pointer;width:1.25rem;color:var(--fg2);transition:var(--color-transition);justify-content:center;display:inline-flex}.dialog-config-fork .action:hover{color:var(--fg1)}.dialog-config-fork .el-dialog__footer{justify-content:space-between;align-items:center;font-size:.9em;display:flex}.modifier,.plugin-view .markdown.usage{margin-bottom:2rem}.plugin-view .markdown.usage h2{font-size:1.25rem}.plugin-tree{width:100%;height:100%;overflow:auto}.plugin-tree .el-scrollbar__view{padding:1rem 0;line-height:2.25rem}.plugin-tree .search{padding:0 1.5rem}.plugin-tree .k-icon-filter{height:15px}.plugin-tree .el-tree-node.is-group>.el-tree-node__content{font-weight:700}.plugin-tree .el-tree-node__content .item{flex:1;justify-content:space-between;align-items:center;height:100%;display:flex;overflow:hidden}.plugin-tree .el-tree-node__content .label{text-overflow:ellipsis;transition:var(--color-transition);overflow:hidden}.plugin-tree .el-tree-node__content .right{height:100%;margin:0 1.5rem 0 .5rem}.end{margin-right:.5rem}.config-header{margin:0 0 2rem;font-size:1.375rem;line-height:2rem}.config-header .k-button{float:right}.plugin-view .k-content>:first-child{margin-top:0}.plugin-select .el-dialog__header{border-bottom:1px solid var(--k-color-divider);justify-content:space-between;align-items:center;margin-right:0;padding:12px 20px;display:flex}.plugin-select .el-dialog__header button{top:2px}.plugin-select .el-dialog__header .title{flex:none}.plugin-select .el-dialog__header .el-input{width:220px;height:2rem;display:inline-block}.plugin-select .el-dialog__body{height:50vh;padding:0;display:flex}.plugin-select .el-dialog__body .tabs{border-right:1px solid var(--k-color-divider);flex:none;width:7.5rem;font-size:15px}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs{width:3rem}}.plugin-select .el-dialog__body .tabs .el-scrollbar__view{padding:.5rem 0}.plugin-select .el-dialog__body .tabs .tab-item{cursor:pointer;height:2rem;transition:var(--color-transition);justify-content:center;align-items:center;padding:0 1rem;font-size:.875rem;display:flex}.plugin-select .el-dialog__body .tabs .tab-item:hover{background-color:var(--k-hover-bg)}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs .tab-item{padding:0}}.plugin-select .el-dialog__body .tabs .tab-item .market-icon{width:1.25rem;height:1rem}.plugin-select .el-dialog__body .tabs .tab-item.active{color:var(--primary)}.plugin-select .el-dialog__body .tabs .tab-item .title{width:3.5rem;margin-left:.5rem}@media screen and (width<=768px){.plugin-select .el-dialog__body .tabs .tab-item .title{display:none}}.plugin-select .el-dialog__body .content{flex:auto}.plugin-select .el-dialog__body .content .package{cursor:pointer;transition:var(--color-transition);padding:.5rem 1rem}.plugin-select .el-dialog__body .content .package h3{margin:0 0 .25rem;font-size:16px}.plugin-select .el-dialog__body .content .package p{margin:0;font-size:14px}.plugin-select .el-dialog__body .content .package:hover{background-color:var(--k-hover-bg)}.absolute{position:absolute}.relative{position:relative}.grid{display:grid}.my-8{margin-top:2rem;margin-bottom:2rem}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.h2{height:.5rem}.h3{height:.75rem}.flex{display:flex}.inline-flex{display:inline-flex}.shrink-0{flex-shrink:0}.grow-1{flex-grow:1}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.items-center{align-items:center}.justify-center{justify-content:center}.justify-around{justify-content:space-around}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-4{column-gap:1rem}.gap-y-2{row-gap:.5rem}.overflow-hidden{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.b,.border{border-width:1px}.px{padding-left:1rem;padding-right:1rem}.pl-8{padding-left:2rem}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.shadow{--un-shadow:var(--un-shadow-inset) 0 1px 3px 0 var(--un-shadow-color,#0000001a),var(--un-shadow-inset) 0 1px 2px -1px var(--un-shadow-color,#0000001a);box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.outline{outline-style:solid}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.dialog-config-fork .status-light,.plugin-tree .status-light{width:.625rem;height:.625rem;transition:var(--color-transition);border-radius:100%;display:inline-block}.dialog-config-fork .status-light.active,.plugin-tree .status-light.active{background-color:var(--k-color-success)}.dialog-config-fork .status-light.pending,.plugin-tree .status-light.pending{background-color:var(--k-color-warning)}.dialog-config-fork .status-light.loading,.plugin-tree .status-light.loading{background-color:var(--k-color-warning);animation:1s infinite status-flash}.dialog-config-fork .status-light.failed,.plugin-tree .status-light.failed{background-color:var(--k-color-danger)}.dialog-config-fork .status-light.disabled:not(.ignore-disabled),.plugin-tree .status-light.disabled:not(.ignore-disabled){opacity:.5;background-color:var(--k-color-disabled)}@keyframes status-flash{0%,to{opacity:0}50%{opacity:1}}
2
2
  /*$vite$:1*/
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: 插件管理
3
7
 
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  registry:
2
6
  $description: 插件源设置
3
7
  endpoint: 插件的下载源。默认跟随当前项目的 npm config。
package/lib/index.d.ts CHANGED
@@ -26,7 +26,6 @@ declare class Installer extends Service {
26
26
  fullCache: Dict<Dict<Pick<RemotePackage, DependencyMetaKey>>>;
27
27
  tempCache: Dict<Dict<Pick<RemotePackage, DependencyMetaKey>>>;
28
28
  private pkgTasks;
29
- private agent;
30
29
  private manifest;
31
30
  private depTask;
32
31
  private flushData;
package/lib/index.mjs CHANGED
@@ -1,15 +1,13 @@
1
- import { createRequire } from "node:module";
2
1
  import { join, resolve } from "node:path";
3
2
  import { Logger, Schema, Service, Time, defineProperty, pick, sleep, valueMap } from "@koishi-ce/koishi";
4
3
  import { compare, gt, satisfies, valid } from "semver";
5
4
  import { DataService } from "@koishi-ce/console";
6
5
  import { readFileSync } from "node:fs";
7
6
  import { homedir } from "node:os";
8
- import Scanner, { isResidentInCache, resolvePackageJson } from "@koishi-ce/registry";
9
- import spawn from "execa";
10
- import pMap from "p-map";
11
- import messageZhCN from "./assets/message.zh-CN-B_nH77kB.yml";
12
- import schemaZhCN from "./assets/schema.zh-CN-CLU01Lrj.yml";
7
+ import Scanner, { isResidentInCache, mapLimit, resolvePackageJson } from "@koishi-ce/registry";
8
+ import { spawn } from "node:child_process";
9
+ import messageZhCN from "./assets/message.zh-CN-D1DbsO3I.yml";
10
+ import schemaZhCN from "./assets/schema.zh-CN-Bj0_jaVr.yml";
13
11
  //#region src/node/deps.ts
14
12
  var DependencyProvider = class extends DataService {
15
13
  constructor(ctx) {
@@ -28,6 +26,27 @@ var RegistryProvider = class extends DataService {
28
26
  }
29
27
  };
30
28
  //#endregion
29
+ //#region src/node/proc.ts
30
+ /**
31
+ * 安装子进程的创建封装(原依赖 execa)。
32
+ *
33
+ * execa 本质是 node:child_process 的事件流封装,本仓只用到其
34
+ * spawn + exit/error 事件 + stdout/stderr 流读取的子集,直接用
35
+ * node:child_process 等价实现即可,Bun 运行时完全兼容。刻意不用
36
+ * Bun.spawn 的捕获管道:win32 下其读端存在 EOF 竞态(见
37
+ * tooling/release/proc.ts 注释),而单进程安装场景 child_process
38
+ * 无此问题。子进程以 process.execPath 启动——宿主必为 Bun 运行时,
39
+ * 直接复用当前可执行文件,不依赖 PATH 中的 bun。
40
+ *
41
+ * 独立成模块是为了让测试能以 mock.module 按相对路径精确拦截,
42
+ * 不真正拉起安装进程(此前 mock execa 包名,全局替换同样可行,
43
+ * 但本地模块拦截范围更小、不受其它包使用 child_process 的干扰)。
44
+ */
45
+ /** 在指定工作目录启动 bun 子进程(args 已含子命令与参数),stdio 三路 pipe。 */
46
+ function spawnBun(args, cwd) {
47
+ return spawn(process.execPath, args, { cwd });
48
+ }
49
+ //#endregion
31
50
  //#region src/node/installer.ts
32
51
  const logger$2 = new Logger("market");
33
52
  /**
@@ -70,12 +89,6 @@ function getLocalRegistry(cwd, userHome = homedir()) {
70
89
  for (const candidate of candidates) if (candidate?.startsWith("https://") || candidate?.startsWith("http://")) return candidate;
71
90
  return "https://registry.npmjs.org/";
72
91
  }
73
- const whichPMRuns = createRequire(import.meta.url)("which-pm-runs");
74
- const levelMap = {
75
- info: "info",
76
- warning: "debug",
77
- error: "warn"
78
- };
79
92
  function loadManifest(name) {
80
93
  const filename = resolvePackageJson(name);
81
94
  const meta = JSON.parse(readFileSync(filename, "utf8"));
@@ -94,7 +107,6 @@ var Installer = class extends Service {
94
107
  fullCache = {};
95
108
  tempCache = {};
96
109
  pkgTasks = {};
97
- agent = whichPMRuns();
98
110
  manifest;
99
111
  flushData;
100
112
  config;
@@ -164,7 +176,7 @@ var Installer = class extends Service {
164
176
  const result = valueMap(this.manifest.dependencies, (request) => {
165
177
  return { request: request.replace(/^[~^]/, "") };
166
178
  });
167
- await pMap(Object.keys(result), async (name) => {
179
+ await mapLimit(Object.keys(result), 10, async (name) => {
168
180
  const dep = result[name];
169
181
  if (!dep) return;
170
182
  try {
@@ -176,7 +188,7 @@ var Installer = class extends Service {
176
188
  if (!valid(dep.request)) dep.invalid = true;
177
189
  const versions = await this.getPackage(name);
178
190
  if (versions) dep.latest = Object.keys(versions)[0];
179
- }, { concurrency: 10 });
191
+ });
180
192
  return result;
181
193
  }
182
194
  getDeps() {
@@ -195,40 +207,24 @@ var Installer = class extends Service {
195
207
  this.refreshData();
196
208
  }
197
209
  async exec(args) {
198
- const name = this.agent?.name ?? "npm";
199
- const useJson = name === "yarn" && (this.agent?.version ?? "1") >= "2";
200
- if (name !== "yarn") args.unshift("install");
210
+ args.unshift("install");
201
211
  return new Promise((resolve) => {
202
- if (useJson) args.push("--json");
203
- const child = spawn(name, args, { cwd: this.cwd });
212
+ const child = spawnBun(args, this.cwd);
204
213
  child.on("exit", (code) => resolve(code ?? -1));
205
214
  child.on("error", () => resolve(-1));
206
215
  let stderr = "";
207
216
  child.stderr?.on("data", (data) => {
208
- data = stderr + data.toString();
209
- const lines = data.split("\n");
217
+ stderr += data.toString();
218
+ const lines = stderr.split("\n");
210
219
  stderr = lines.pop() ?? "";
211
220
  for (const line of lines) logger$2.warn(line);
212
221
  });
213
222
  let stdout = "";
214
223
  child.stdout?.on("data", (data) => {
215
- data = stdout + data.toString();
216
- const lines = data.split("\n");
224
+ stdout += data.toString();
225
+ const lines = stdout.split("\n");
217
226
  stdout = lines.pop() ?? "";
218
- for (const line of lines) {
219
- if (!useJson || line[0] !== "{") {
220
- logger$2.info(line);
221
- continue;
222
- }
223
- try {
224
- const { type, data } = JSON.parse(line);
225
- const level = type in levelMap ? levelMap[type] : null;
226
- (level ? logger$2[level] : logger$2.info)(data);
227
- } catch (error) {
228
- logger$2.warn(line);
229
- logger$2.warn(error);
230
- }
231
- }
227
+ for (const line of lines) logger$2.info(line);
232
228
  });
233
229
  });
234
230
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@koishi-ce/plugin-market",
3
3
  "description": "Manage your bots and plugins with console",
4
- "version": "1.0.7",
4
+ "version": "1.0.9",
5
5
  "type": "module",
6
6
  "main": "lib/index.mjs",
7
7
  "typings": "lib/index.d.ts",
@@ -51,29 +51,28 @@
51
51
  }
52
52
  },
53
53
  "peerDependencies": {
54
- "@koishijs/plugin-console": "^5.30.11",
55
- "koishi": "^4.18.11"
54
+ "@koishi-ce/plugin-console": "^1.0.0",
55
+ "@koishi-ce/koishi": "^1.0.0"
56
56
  },
57
57
  "peerDependenciesMeta": {
58
- "@koishijs/plugin-console": {
58
+ "@koishi-ce/plugin-console": {
59
59
  "optional": true
60
60
  }
61
61
  },
62
62
  "devDependencies": {
63
- "@koishi-ce/client": "^1.0.2",
64
- "@koishi-ce/loader": "^1.0.3",
65
- "@koishi-ce/plugin-config": "^1.0.6",
63
+ "@koishi-ce/client": "^1.0.3",
64
+ "@koishi-ce/loader": "^1.0.4",
65
+ "@koishi-ce/plugin-config": "^1.0.8",
66
66
  "@koishijs/market": "^4.2.10",
67
67
  "@types/semver": "^7.5.8",
68
- "vue": "^3.5.12"
68
+ "@vueuse/core": "^14.4.0",
69
+ "vue": "^3.5.12",
70
+ "vue-router": "^5.2.0"
69
71
  },
70
72
  "dependencies": {
71
73
  "@koishi-ce/console": "^1.0.0",
72
- "@koishi-ce/registry": "^1.0.4",
73
- "execa": "^5.1.1",
74
- "p-map": "^4.0.0",
75
- "semver": "^7.6.3",
76
- "which-pm-runs": "^1.1.0"
74
+ "@koishi-ce/registry": "^1.0.5",
75
+ "semver": "^7.6.3"
77
76
  },
78
77
  "exports": {
79
78
  ".": {
@@ -1,3 +1,7 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import { afterAll, beforeAll, describe, expect, it, mock } from "bun:test";
2
6
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
7
  import { tmpdir } from "node:os";
@@ -6,20 +10,20 @@ import memory from "@koishijs/plugin-database-memory";
6
10
 
7
11
  /**
8
12
  * market 插件测试:
9
- * - 子进程(npm/yarn 安装)经 mock.module 拦截 execa,不落盘不联网安装;
13
+ * - 子进程(bun 安装)经 mock.module 拦截本地 proc.ts(spawnBun 封装),不落盘不联网安装;
10
14
  * - registry 网络请求由进程内 Bun.serve 提供(registry 协议的最小 JSON);
11
15
  * - 宿主环境(loader / cwd)使用 FakeLoader 与临时目录 + chdir,
12
16
  * Installer 的 override 写盘只会作用于临时 package.json。
13
17
  */
14
18
 
15
- /** 已发生的子进程调用(命令与参数)。 */
19
+ /** 已发生的子进程调用(参数列表)。 */
16
20
  const spawnCalls: string[][] = [];
17
21
  /** 控制下一次子进程的退出码与触发事件。 */
18
22
  let nextExitCode = 0;
19
23
  let nextSpawnError = false;
20
24
 
21
- const execaMock = (name: string, args: string[]) => {
22
- spawnCalls.push([name, ...args]);
25
+ const spawnBunMock = (_args: string[], _cwd: string) => {
26
+ spawnCalls.push(_args);
23
27
  return {
24
28
  on(event: string, cb: (code?: number) => void) {
25
29
  if (nextSpawnError) {
@@ -48,7 +52,7 @@ const execaMock = (name: string, args: string[]) => {
48
52
  };
49
53
  };
50
54
 
51
- mock.module("execa", () => ({ default: execaMock }));
55
+ mock.module("../node/proc.ts", () => ({ spawnBun: spawnBunMock }));
52
56
 
53
57
  import type { Entry } from "@koishi-ce/console";
54
58
  // 均为 type-only 导入:编译期擦除,不干扰 mock.module 先于插件加载的时序
@@ -280,10 +284,9 @@ describe("Installer 安装链路", () => {
280
284
  "koishi-plugin-demo": "^1.0.0",
281
285
  });
282
286
  expect(code).toBe(0);
283
- // 触发了包管理器安装(npm install --registry …)
287
+ // 触发了包管理器安装(bun install --registry …)
284
288
  expect(spawnCalls.length).toBe(1);
285
- expect(spawnCalls[0]?.[0]).toBe("npm");
286
- expect(spawnCalls[0]?.[1]).toBe("install");
289
+ expect(spawnCalls[0]?.[0]).toBe("install");
287
290
  // 重新读取临时 package.json:护栏项保持原样,新依赖加入
288
291
  const manifest = JSON.parse(
289
292
  await Bun.file(join(tmp, "package.json")).text(),
@@ -1,3 +1,7 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import { type Context, Schema } from "@koishi-ce/koishi";
2
6
  import MarketProvider from "./market.ts";
3
7
 
@@ -1,3 +1,7 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import type {} from "@koishi-ce/plugin-config";
2
6
  import { MarketProvider as BaseMarketProvider } from "../shared/index.ts";
3
7
 
package/src/index.ts CHANGED
@@ -1,2 +1,6 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  // placeholder file, do not modify
2
6
  export * from "./node/index.ts";
package/src/node/deps.ts CHANGED
@@ -1,3 +1,7 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import { DataService } from "@koishi-ce/console";
2
6
  import type { Context, Dict } from "@koishi-ce/koishi";
3
7
  import type { DependencyMetaKey, RemotePackage } from "@koishi-ce/registry";
package/src/node/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import { resolve } from "node:path";
2
6
  import { type Context, type Dict, pick, Schema } from "@koishi-ce/koishi";
3
7
  import type { DependencyMetaKey, RemotePackage } from "@koishi-ce/registry";
@@ -1,5 +1,8 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ // Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  import { readFileSync } from "node:fs";
2
- import { createRequire } from "node:module";
3
6
  import { homedir } from "node:os";
4
7
  import { join, resolve } from "node:path";
5
8
  import type {} from "@koishi-ce/console";
@@ -20,14 +23,14 @@ import type {} from "@koishi-ce/plugin-market";
20
23
  import Scanner, {
21
24
  type DependencyMetaKey,
22
25
  isResidentInCache,
26
+ mapLimit,
23
27
  type PackageJson,
24
28
  type Registry,
25
29
  type RemotePackage,
26
30
  resolvePackageJson,
27
31
  } from "@koishi-ce/registry";
28
- import spawn from "execa";
29
- import pMap from "p-map";
30
32
  import { compare, satisfies, valid } from "semver";
33
+ import { spawnBun } from "./proc.ts";
31
34
 
32
35
  const logger = new Logger("market");
33
36
 
@@ -83,12 +86,6 @@ function getLocalRegistry(cwd: string, userHome: string = homedir()): string {
83
86
  return "https://registry.npmjs.org/";
84
87
  }
85
88
 
86
- // 经 createRequire 加载 CJS 包并就地断言签名:不走 ESM 导入互操作,
87
- // 规避多包合并类型检查(大一统 tsconfig)下 export = 交织失效问题
88
- const whichPMRuns = createRequire(import.meta.url)("which-pm-runs") as () =>
89
- | undefined
90
- | { name: string; version: string };
91
-
92
89
  export interface Dependency {
93
90
  /**
94
91
  * requested semver range
@@ -108,28 +105,14 @@ export interface Dependency {
108
105
  latest?: string | undefined;
109
106
  }
110
107
 
111
- export interface YarnLog {
112
- type: "warning" | "info" | "error" | string;
113
- name: number | null;
114
- displayName: string;
115
- indent?: string;
116
- data: string;
117
- }
118
-
119
- const levelMap = {
120
- info: "info",
121
- warning: "debug",
122
- error: "warn",
123
- } as const;
124
-
125
- export interface LocalPackage extends PackageJson {
108
+ interface LocalPackage extends PackageJson {
126
109
  private?: boolean;
127
110
  $workspace?: boolean;
128
111
  /** loadManifest 归一化保证 dependencies 必有 */
129
112
  dependencies: Record<string, string>;
130
113
  }
131
114
 
132
- export function loadManifest(name: string) {
115
+ function loadManifest(name: string) {
133
116
  // resolvePackageJson 以纯 fs 探测为主路径:市场安装流程在包落盘前的
134
117
  // 探测不能触碰解析 API,否则触发 Bun 的父目录快照缓存(装完即失败)
135
118
  const filename = resolvePackageJson(name);
@@ -166,7 +149,6 @@ class Installer extends Service {
166
149
  private pkgTasks: Dict<
167
150
  Promise<Dict<Pick<RemotePackage, DependencyMetaKey>>>
168
151
  > = {};
169
- private agent = whichPMRuns();
170
152
  private manifest: LocalPackage;
171
153
  private declare depTask: Promise<Dict<Dependency>>;
172
154
  private flushData: () => void;
@@ -255,28 +237,24 @@ class Installer extends Service {
255
237
  const result = valueMap(this.manifest.dependencies, (request) => {
256
238
  return { request: request.replace(/^[~^]/, "") } as Dependency;
257
239
  });
258
- await pMap(
259
- Object.keys(result),
260
- async (name) => {
261
- const dep = result[name];
262
- if (!dep) return;
263
- try {
264
- // some dependencies may be left with no local installation
265
- const meta = loadManifest(name);
266
- dep.resolved = meta.version;
267
- dep.workspace = meta.$workspace;
268
- if (meta.$workspace) return;
269
- } catch {}
270
-
271
- if (!valid(dep.request)) {
272
- dep.invalid = true;
273
- }
240
+ await mapLimit(Object.keys(result), 10, async (name) => {
241
+ const dep = result[name];
242
+ if (!dep) return;
243
+ try {
244
+ // some dependencies may be left with no local installation
245
+ const meta = loadManifest(name);
246
+ dep.resolved = meta.version;
247
+ dep.workspace = meta.$workspace;
248
+ if (meta.$workspace) return;
249
+ } catch {}
274
250
 
275
- const versions = await this.getPackage(name);
276
- if (versions) dep.latest = Object.keys(versions)[0];
277
- },
278
- { concurrency: 10 },
279
- );
251
+ if (!valid(dep.request)) {
252
+ dep.invalid = true;
253
+ }
254
+
255
+ const versions = await this.getPackage(name);
256
+ if (versions) dep.latest = Object.keys(versions)[0];
257
+ });
280
258
  return result;
281
259
  }
282
260
 
@@ -299,19 +277,18 @@ class Installer extends Service {
299
277
  }
300
278
 
301
279
  async exec(args: string[]) {
302
- const name = this.agent?.name ?? "npm";
303
- const useJson = name === "yarn" && (this.agent?.version ?? "1") >= "2";
304
- if (name !== "yarn") args.unshift("install");
280
+ // Bun-first:CE 生态只存在 bun 这一种包管理器,直接驱动 bun 执行
281
+ // 安装(上游经 which-pm-runs 探测 npm/yarn/bun,此处固定为 bun)
282
+ args.unshift("install");
305
283
  return new Promise<number>((resolve) => {
306
- if (useJson) args.push("--json");
307
- const child = spawn(name, args, { cwd: this.cwd });
284
+ const child = spawnBun(args, this.cwd);
308
285
  child.on("exit", (code) => resolve(code ?? -1));
309
286
  child.on("error", () => resolve(-1));
310
287
 
311
288
  let stderr = "";
312
289
  child.stderr?.on("data", (data) => {
313
- data = stderr + data.toString();
314
- const lines = data.split("\n");
290
+ stderr += data.toString();
291
+ const lines = stderr.split("\n");
315
292
  stderr = lines.pop() ?? "";
316
293
  for (const line of lines) {
317
294
  logger.warn(line);
@@ -320,23 +297,11 @@ class Installer extends Service {
320
297
 
321
298
  let stdout = "";
322
299
  child.stdout?.on("data", (data) => {
323
- data = stdout + data.toString();
324
- const lines = data.split("\n");
300
+ stdout += data.toString();
301
+ const lines = stdout.split("\n");
325
302
  stdout = lines.pop() ?? "";
326
303
  for (const line of lines) {
327
- if (!useJson || line[0] !== "{") {
328
- logger.info(line);
329
- continue;
330
- }
331
- try {
332
- const { type, data } = JSON.parse(line) as YarnLog;
333
- const level =
334
- type in levelMap ? levelMap[type as keyof typeof levelMap] : null;
335
- (level ? logger[level] : logger.info)(data);
336
- } catch (error) {
337
- logger.warn(line);
338
- logger.warn(error);
339
- }
304
+ logger.info(line);
340
305
  }
341
306
  });
342
307
  });
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: 插件管理
3
7
  commands.plugin.install:
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: Plugin management
3
7
  commands.plugin.install:
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: 插件管理
3
7
  commands.plugin.install:
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: 插件管理
3
7
  commands.plugin.install:
@@ -1,3 +1,7 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-only
2
+ # Copyright (c) 2019-present Shigma and Koishijs contributors.
3
+ # Copyright (c) 2026-present Koishi-CE contributors.
4
+
1
5
  commands.plugin:
2
6
  description: 插件管理
3
7
  commands.plugin.install: