,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"8\\\" viewBox=\\\"3 7 10 8\\\"><path fill=\\\"%2341474E\\\" fill-rule=\\\"evenodd\\\" d=\\\"M6.333 15 3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z\\\"/></svg>\") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{background:url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\\\"/></svg>\") 50% no-repeat;background-size:100%;content:\"\";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{display:block}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;display:none;padding:.1em .5em;position:absolute;top:-1.8em;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui .model .property.primitive.extension{display:block}.swagger-ui .model .property.primitive.extension>td:first-child{padding-left:0;padding-right:0;width:auto}.swagger-ui .model .property.primitive.extension>td:first-child:after{content:\": \"}.swagger-ui .model .external-docs,.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui table.model tr.external-docs td:first-child{font-weight:700}.swagger-ui table.model tr .renderedMarkdown p:first-child{margin-top:0}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui section.models .model-box:has(.model-box){overflow-x:auto;width:100%}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px;width:100%}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0 0 0 1em;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table tbody tr td:has(.model-box){max-width:1px}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameters-col_description .markdown:first-child p:first-child,.swagger-ui .parameters-col_description .renderedMarkdown:first-child p:first-child{margin:0}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:rgba(255,0,0,.6);content:\"required\";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px;width:auto}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_description .markdown p:first-child,.swagger-ui .response-col_description .renderedMarkdown p:first-child{margin:0}.swagger-ui .response-col_description .markdown p:last-child,.swagger-ui .response-col_description .renderedMarkdown p:last-child{margin-bottom:0}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:grey;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper{align-items:center;display:flex;flex-wrap:wrap;gap:10px}@media(max-width:550px){.swagger-ui .topbar .topbar-wrapper{align-items:start;flex-direction:column}}.swagger-ui .topbar a{align-items:center;color:#fff;display:flex;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;-webkit-text-decoration:none;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end;margin-left:auto;max-width:600px}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;max-width:100%;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}@media(max-width:550px){.swagger-ui .topbar .download-url-wrapper{width:100%}}.swagger-ui .topbar .dark-mode-toggle{cursor:pointer;margin-left:10px;opacity:.8;transition:all .2s}.swagger-ui .topbar .dark-mode-toggle button{background:none;border:none;padding:0}.swagger-ui .topbar .dark-mode-toggle button svg{fill:#e4e6e6}.swagger-ui .topbar .dark-mode-toggle:hover{opacity:1}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info pre,.swagger-ui .info table{font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5,.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-left:10px;margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block}.swagger-ui .json-schema-2020-12-keyword--\\$vocabulary ul{border-left:1px dashed rgba(0,0,0,.1);margin:0 0 0 20px}.swagger-ui .json-schema-2020-12-\\$vocabulary-uri{margin-left:35px}.swagger-ui .json-schema-2020-12-\\$vocabulary-uri--disabled{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .json-schema-2020-12-keyword--const .json-schema-2020-12-json-viewer__name,.swagger-ui .json-schema-2020-12-keyword--const .json-schema-2020-12-json-viewer__value{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12__constraint{background-color:#805ad5;border-radius:4px;color:#3b4151;color:#fff;font-family:monospace;font-weight:600;line-height:1.5;margin-left:10px;padding:1px 3px}.swagger-ui .json-schema-2020-12__constraint--string{background-color:#d69e2e;color:#fff}.swagger-ui .json-schema-2020-12-keyword--default .json-schema-2020-12-json-viewer__name,.swagger-ui .json-schema-2020-12-keyword--default .json-schema-2020-12-json-viewer__value{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-keyword--dependentRequired>ul{display:inline-block;margin:0;padding:0}.swagger-ui .json-schema-2020-12-keyword--dependentRequired>ul li{display:inline;list-style-type:none}.swagger-ui .json-schema-2020-12-keyword--description{color:#6b6b6b;font-size:12px;margin-left:20px}.swagger-ui .json-schema-2020-12-keyword--description p{margin:0}.swagger-ui .json-schema-2020-12-keyword--enum .json-schema-2020-12-json-viewer__name,.swagger-ui .json-schema-2020-12-keyword--enum .json-schema-2020-12-json-viewer__value,.swagger-ui .json-schema-2020-12-keyword--examples .json-schema-2020-12-json-viewer__name,.swagger-ui .json-schema-2020-12-keyword--examples .json-schema-2020-12-json-viewer__value{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-json-viewer-extension-keyword .json-schema-2020-12-json-viewer__name,.swagger-ui .json-schema-2020-12-json-viewer-extension-keyword .json-schema-2020-12-json-viewer__value{color:#929292;font-style:italic}.swagger-ui .json-schema-2020-12-keyword--patternProperties ul{border:none;margin:0;padding:0}.swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:first-of-type:after,.swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:first-of-type:before{color:#55a;content:\"/\"}.swagger-ui .json-schema-2020-12-keyword--properties>ul{border:none;margin:0;padding:0}.swagger-ui .json-schema-2020-12-property{list-style-type:none}.swagger-ui .json-schema-2020-12-property--required>.json-schema-2020-12:first-of-type>.json-schema-2020-12-head .json-schema-2020-12__title:after{color:red;content:\"*\";font-weight:700}.swagger-ui .json-schema-2020-12__title{color:#505050;display:inline-block;font-family:sans-serif;font-size:12px;font-weight:700;line-height:normal}.swagger-ui .json-schema-2020-12__title .json-schema-2020-12-keyword__name{margin:0}.swagger-ui .json-schema-2020-12-property{margin:7px 0}.swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;vertical-align:middle}.swagger-ui .json-schema-2020-12-keyword{margin:5px 0}.swagger-ui .json-schema-2020-12-keyword__children{border-left:1px dashed rgba(0,0,0,.1);margin:0 0 0 20px;padding:0}.swagger-ui .json-schema-2020-12-keyword__children--collapsed{display:none}.swagger-ui .json-schema-2020-12-keyword__name{font-size:12px;font-weight:700;margin-left:20px}.swagger-ui .json-schema-2020-12-keyword__name--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-keyword__name--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__name--extension{color:#929292;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__value{color:#6b6b6b;font-size:12px;font-style:italic;font-weight:400}.swagger-ui .json-schema-2020-12-keyword__value--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-keyword__value--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__value--extension{color:#929292;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__value--warning{border:1px dashed red;border-radius:4px;color:#3b4151;color:red;display:inline-block;font-family:monospace;font-style:normal;font-weight:600;line-height:1.5;margin-left:10px;padding:1px 4px}.swagger-ui .json-schema-2020-12-keyword__name--secondary+.json-schema-2020-12-keyword__value--secondary:before{content:\"=\"}.swagger-ui .json-schema-2020-12__attribute{color:#3b4151;font-family:monospace;font-size:12px;padding-left:10px;text-transform:lowercase}.swagger-ui .json-schema-2020-12__attribute--primary{color:#55a}.swagger-ui .json-schema-2020-12__attribute--muted{color:gray}.swagger-ui .json-schema-2020-12__attribute--warning{color:red}.swagger-ui .json-schema-2020-12-json-viewer{margin:5px 0}.swagger-ui .json-schema-2020-12-json-viewer__children{border-left:1px dashed rgba(0,0,0,.1);margin:0 0 0 20px;padding:0}.swagger-ui .json-schema-2020-12-json-viewer__children--collapsed{display:none}.swagger-ui .json-schema-2020-12-json-viewer__name{font-size:12px;font-weight:700;margin-left:20px}.swagger-ui .json-schema-2020-12-json-viewer__name--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-json-viewer__name--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-json-viewer__name--extension{color:#929292;font-style:italic}.swagger-ui .json-schema-2020-12-json-viewer__value{color:#6b6b6b;font-size:12px;font-style:italic;font-weight:400}.swagger-ui .json-schema-2020-12-json-viewer__value--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-json-viewer__value--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-json-viewer__value--extension{color:#929292;font-style:italic}.swagger-ui .json-schema-2020-12-json-viewer__value--warning{border:1px dashed red;border-radius:4px;color:#3b4151;color:red;display:inline-block;font-family:monospace;font-style:normal;font-weight:600;line-height:1.5;margin-left:10px;padding:1px 4px}.swagger-ui .json-schema-2020-12-json-viewer__name--secondary+.json-schema-2020-12-json-viewer__value--secondary:before{content:\"=\"}.swagger-ui .json-schema-2020-12{background-color:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;padding:12px 0 12px 20px}.swagger-ui .json-schema-2020-12:first-of-type{margin:20px}.swagger-ui .json-schema-2020-12:last-of-type{margin:0 20px}.swagger-ui .json-schema-2020-12--embedded{background-color:inherit;padding-bottom:0;padding-left:inherit;padding-right:inherit;padding-top:0}.swagger-ui .json-schema-2020-12-body{border-left:1px dashed rgba(0,0,0,.1);margin:2px 0}.swagger-ui .json-schema-2020-12-body--collapsed{display:none}.swagger-ui .json-schema-2020-12-accordion{border:none;outline:none;padding-left:0}.swagger-ui .json-schema-2020-12-accordion__children{display:inline-block}.swagger-ui .json-schema-2020-12-accordion__icon{display:inline-block;height:18px;vertical-align:bottom;width:18px}.swagger-ui .json-schema-2020-12-accordion__icon--expanded{transform:rotate(-90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .json-schema-2020-12-accordion__icon--collapsed{transform:rotate(0deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .json-schema-2020-12-accordion__icon svg{height:20px;width:20px}.swagger-ui .json-schema-2020-12-expand-deep-button{border:none;color:#505050;color:#afaeae;font-family:sans-serif;font-size:12px;padding-right:0}.swagger-ui .model-box .json-schema-2020-12:not(.json-schema-2020-12--embedded)>.json-schema-2020-12-head .json-schema-2020-12__title:first-of-type{font-size:16px}.swagger-ui .model-box>.json-schema-2020-12{margin:0}.swagger-ui .model-box .json-schema-2020-12{background-color:transparent;padding:0}.swagger-ui .model-box .json-schema-2020-12-accordion,.swagger-ui .model-box .json-schema-2020-12-expand-deep-button{background-color:transparent}.swagger-ui .models .json-schema-2020-12:not(.json-schema-2020-12--embedded)>.json-schema-2020-12-head .json-schema-2020-12__title:first-of-type{font-size:16px}.swagger-ui .models .json-schema-2020-12:not(.json-schema-2020-12--embedded){overflow-x:auto;width:calc(100% - 40px)}html.dark-mode{background:#1c2022}html.dark-mode .swagger-ui{background:#1c2022;color:#e4e6e6}html.dark-mode .swagger-ui .authorization__btn svg,html.dark-mode .swagger-ui .expand-operation svg,html.dark-mode .swagger-ui .opblock-control-arrow svg{fill:#b7bcbf;opacity:1}html.dark-mode .swagger-ui .markdown p,html.dark-mode .swagger-ui .markdown pre,html.dark-mode .swagger-ui .renderedMarkdown p,html.dark-mode .swagger-ui .renderedMarkdown pre,html.dark-mode .swagger-ui section h3,html.dark-mode .swagger-ui table thead tr td,html.dark-mode .swagger-ui table thead tr th{color:#e4e6e6}html.dark-mode .swagger-ui .markdown code,html.dark-mode .swagger-ui .renderedMarkdown code{background:#080a0b;color:#b68ae1}html.dark-mode .swagger-ui input{background:#1c2022;border-color:#b7bcbf;color:#f0f1f1}html.dark-mode .swagger-ui input:focus:not(.download-url-input){border-color:#51a8ff!important;box-shadow:none;outline:none}html.dark-mode .swagger-ui textarea{background:#0d1014;border:1px solid #0d1014;color:#f0f1f1}html.dark-mode .swagger-ui textarea:focus{border-color:#51a8ff}html.dark-mode .swagger-ui textarea[disabled]{background-color:#202225;border-color:#202225;color:#8c969a}html.dark-mode .swagger-ui select{background:#1c2022 url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\"><path fill=\\\"%23B7BCBF\\\" d=\\\"M13.418 7.859a.695.695 0 0 1 .978 0 .68.68 0 0 1 0 .969l-3.908 3.83a.697.697 0 0 1-.979 0l-3.908-3.83a.68.68 0 0 1 0-.969.695.695 0 0 1 .978 0L10 11z\\\"/></svg>\") right 10px center no-repeat;border-color:#b7bcbf;box-shadow:none;color:#f0f1f1;outline:none}html.dark-mode .swagger-ui select[multiple]{background:#1c2022}html.dark-mode .swagger-ui select:focus{border-color:#51a8ff}html.dark-mode .swagger-ui input::-moz-placeholder, html.dark-mode .swagger-ui textarea::-moz-placeholder{color:#f0f1f1;opacity:.5}html.dark-mode .swagger-ui input::placeholder,html.dark-mode .swagger-ui textarea::placeholder{color:#f0f1f1;opacity:.5}html.dark-mode .swagger-ui input.invalid,html.dark-mode .swagger-ui select.invalid,html.dark-mode .swagger-ui textarea.invalid{background:#1c2022;border-color:#ff5f5f}html.dark-mode .swagger-ui .topbar{background:#2a2e30}html.dark-mode .swagger-ui .topbar .download-url-wrapper .download-url-button{background:#1d632e;color:#e4e6e6}html.dark-mode .swagger-ui .topbar .download-url-wrapper .download-url-input{border-color:#1d632e}html.dark-mode .swagger-ui .topbar .download-url-wrapper .download-url-input.failed{color:#ff5f5f}html.dark-mode .swagger-ui .dialog-ux .modal-ux{background-color:#2a2e30;border:none;color:#e4e6e6}html.dark-mode .swagger-ui .dialog-ux .modal-ux-header{border-color:#545d61}html.dark-mode .swagger-ui .dialog-ux .modal-ux-header .close-modal svg{fill:#e4e6e6}html.dark-mode .swagger-ui .dialog-ux .modal-ux h2,html.dark-mode .swagger-ui .dialog-ux .modal-ux h3,html.dark-mode .swagger-ui .dialog-ux .modal-ux h4,html.dark-mode .swagger-ui .dialog-ux .modal-ux h5,html.dark-mode .swagger-ui .dialog-ux .modal-ux label,html.dark-mode .swagger-ui .dialog-ux .modal-ux p{color:#e4e6e6}html.dark-mode .swagger-ui .dialog-ux .modal-ux .scopes a{color:#51a8ff}html.dark-mode .swagger-ui .dialog-ux .modal-ux .btn.modal-btn{border-color:#3ece90;color:#3ece90}html.dark-mode .swagger-ui .dialog-ux .modal-ux .btn.modal-btn.btn-done{border-color:#e4e6e6;color:#e4e6e6}html.dark-mode .swagger-ui .dialog-ux .modal-ux .auth-container{border-color:#545d61}html.dark-mode .swagger-ui .dialog-ux .modal-ux .checkbox input[type=checkbox]+label>.item{background:#545d61;box-shadow:none;color:#f0f1f1!important}html.dark-mode .swagger-ui .dialog-ux .modal-ux .checkbox input[type=checkbox]:checked+label>.item{background:#545d61 url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"8\\\" viewBox=\\\"3 7 10 8\\\"><path fill=\\\"%23E4E6E6\\\" fill-rule=\\\"evenodd\\\" d=\\\"M6.333 15 3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z\\\"/></svg>\") 50% no-repeat}html.dark-mode .swagger-ui .loading-container .loading:before{border-color:#e4e6e6 #545d61 #545d61}html.dark-mode .swagger-ui .loading-container .loading:after{color:#e4e6e6}html.dark-mode .swagger-ui .scheme-container{background:#1c2022;box-shadow:0 1px 2px 0 #545d61}html.dark-mode .swagger-ui .scheme-container .schemes>.schemes-server-container>label{color:#e4e6e6}html.dark-mode .swagger-ui .scheme-container .btn.authorize{border-color:#3ece90;color:#3ece90}html.dark-mode .swagger-ui .scheme-container .btn.authorize svg{fill:#3ece90}html.dark-mode .swagger-ui .info .title,html.dark-mode .swagger-ui .info h1,html.dark-mode .swagger-ui .info h2,html.dark-mode .swagger-ui .info h3,html.dark-mode .swagger-ui .info h4,html.dark-mode .swagger-ui .info h5{color:#d2d6d7}html.dark-mode .swagger-ui .info .base-url,html.dark-mode .swagger-ui .info li,html.dark-mode .swagger-ui .info p,html.dark-mode .swagger-ui .info table{color:#e4e6e6}html.dark-mode .swagger-ui .info a{color:#51a8ff}html.dark-mode .swagger-ui .info .title small{background:#434b4f}html.dark-mode .swagger-ui .info .title small.version-stamp{background:#1d632e}html.dark-mode .swagger-ui .info .errors-wrapper{background:#434b4f;border-color:#ff5f5f}html.dark-mode .swagger-ui .info .errors-wrapper h4,html.dark-mode .swagger-ui .info .errors-wrapper span{color:#e4e6e6}html.dark-mode .swagger-ui .info .errors-wrapper .btn.errors__clear-btn{border-color:#e4e6e6;color:#e4e6e6}html.dark-mode .swagger-ui .copy-to-clipboard,html.dark-mode .swagger-ui .download-contents{background:#545d61;color:#e4e6e6}html.dark-mode .swagger-ui .copy-to-clipboard button,html.dark-mode .swagger-ui .download-contents button{background:url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"15\\\" aria-hidden=\\\"true\\\"><path fill=\\\"%23E4E6E6\\\" fill-rule=\\\"evenodd\\\" d=\\\"M4 12h4v1H4zm5-6H4v1h5zm2 3V7l-3 3 3 3v-2h5V9zM6.5 8H4v1h2.5zM4 11h2.5v-1H4zm9 1h1v2c-.02.28-.11.52-.3.7s-.42.28-.7.3H3c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3c0-1.11.89-2 2-2s2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V5H3v9h10zM4 4h8c0-.55-.45-1-1-1h-1c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H5c-.55 0-1 .45-1 1\\\"/></svg>\") 50% no-repeat}html.dark-mode .swagger-ui .opblock-tag{border-bottom-color:#545d61;color:#e4e6e6}html.dark-mode .swagger-ui .opblock-tag small{color:#e4e6e6}html.dark-mode .swagger-ui .opblock-tag a.link{color:#51a8ff}html.dark-mode .swagger-ui .opblock.opblock-post{background:#112929;border-color:#104834}html.dark-mode .swagger-ui .opblock.opblock-post thead tr td,html.dark-mode .swagger-ui .opblock.opblock-post thead tr th{border-color:#104834;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-section-header{background:#14392c;border-bottom:1px solid #104834;border-top:1px solid #104834}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#00b572}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-summary{border-bottom:none;border-color:#104834}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-summary-method{background:#00b572;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-post .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-post .opblock-body>.opblock-title_normal{border-top:1px solid #104834}html.dark-mode .swagger-ui .opblock.opblock-deprecated{background:#272c34;border-color:#495361}html.dark-mode .swagger-ui .opblock.opblock-deprecated thead tr td,html.dark-mode .swagger-ui .opblock.opblock-deprecated thead tr th{border-color:#495361;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-section-header{background:#262e36;border-bottom:1px solid #495361;border-top:1px solid #495361}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#6a6a6a}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-summary{border-bottom:none;border-color:#495361}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#6a6a6a;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-deprecated .opblock-body>.opblock-title_normal{border-top:1px solid #495361}html.dark-mode .swagger-ui .opblock.opblock-put{background:#27201e;border-color:#523524}html.dark-mode .swagger-ui .opblock.opblock-put thead tr td,html.dark-mode .swagger-ui .opblock.opblock-put thead tr th{border-color:#523524;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-section-header{background:#9a5b3e;border-bottom:1px solid #523524;border-top:1px solid #523524}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#ff7d35}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-summary{border-bottom:none;border-color:#523524}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-summary-method{background:#ff7d35;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-put .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-put .opblock-body>.opblock-title_normal{border-top:1px solid #523524}html.dark-mode .swagger-ui .opblock.opblock-get{background:#182536;border-color:#294262}html.dark-mode .swagger-ui .opblock.opblock-get thead tr td,html.dark-mode .swagger-ui .opblock.opblock-get thead tr th{border-color:#294262;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-section-header{background:#1c3043;border-bottom:1px solid #294262;border-top:1px solid #294262}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#55a1ff}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-summary{border-bottom:none;border-color:#294262}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-summary-method{background:#55a1ff;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-get .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-get .opblock-body>.opblock-title_normal{border-top:1px solid #294262}html.dark-mode .swagger-ui .opblock.opblock-delete{background:#241a20;border-color:#4b2420}html.dark-mode .swagger-ui .opblock.opblock-delete thead tr td,html.dark-mode .swagger-ui .opblock.opblock-delete thead tr th{border-color:#4b2420;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-section-header{background:#2f2020;border-bottom:1px solid #4b2420;border-top:1px solid #4b2420}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#eb6156}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-summary{border-bottom:none;border-color:#4b2420}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#eb6156;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-delete .opblock-body>.opblock-title_normal{border-top:1px solid #4b2420}html.dark-mode .swagger-ui .opblock.opblock-patch{background:#11282f;border-color:#16494b}html.dark-mode .swagger-ui .opblock.opblock-patch thead tr td,html.dark-mode .swagger-ui .opblock.opblock-patch thead tr th{border-color:#16494b;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-section-header{background:#113239;border-bottom:1px solid #16494b;border-top:1px solid #16494b}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#03b7bf}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-summary{border-bottom:none;border-color:#16494b}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#03b7bf;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-patch .opblock-body>.opblock-title_normal{border-top:1px solid #16494b}html.dark-mode .swagger-ui .opblock.opblock-head{background:#282231;border-color:#44336a}html.dark-mode .swagger-ui .opblock.opblock-head thead tr td,html.dark-mode .swagger-ui .opblock.opblock-head thead tr th{border-color:#44336a;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-section-header{background:#352c45;border-bottom:1px solid #44336a;border-top:1px solid #44336a}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#b889ff}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-summary{border-bottom:none;border-color:#44336a}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-summary-method{background:#b889ff;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-head .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-head .opblock-body>.opblock-title_normal{border-top:1px solid #44336a}html.dark-mode .swagger-ui .opblock.opblock-options{background:#202c3c;border-color:#33465e}html.dark-mode .swagger-ui .opblock.opblock-options thead tr td,html.dark-mode .swagger-ui .opblock.opblock-options thead tr th{border-color:#33465e;opacity:1}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-section-header{background:#314558;border-bottom:1px solid #33465e;border-top:1px solid #33465e}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-section-header .tab-header .tab-item .opblock-title span:after{background:#6895c8}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-summary{border-bottom:none;border-color:#33465e}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-summary-control:focus{outline:none}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-summary-method{background:#6895c8;color:#080a0b;text-shadow:none}html.dark-mode .swagger-ui .opblock.opblock-options .opblock-body>.opblock-description-wrapper,html.dark-mode .swagger-ui .opblock.opblock-options .opblock-body>.opblock-title_normal{border-top:1px solid #33465e}html.dark-mode .swagger-ui .opblock .opblock-section-header{box-shadow:none}html.dark-mode .swagger-ui .opblock .opblock-section-header h4,html.dark-mode .swagger-ui .opblock .opblock-section-header label{color:#e4e6e6}html.dark-mode .swagger-ui .opblock .opblock-section-header .try-out__btn{border-color:#b7bcbf;box-shadow:none;color:#e4e6e6}html.dark-mode .swagger-ui .opblock .opblock-section-header .try-out__btn.cancel{border-color:#ff5f5f;color:#ff5f5f}html.dark-mode .swagger-ui .opblock .btn.json-schema-form-item-add,html.dark-mode .swagger-ui .opblock .btn.json-schema-form-item-remove{border-color:#e4e6e6;color:#e4e6e6}html.dark-mode .swagger-ui .opblock .validation-errors.errors-wrapper{background:#434b4f;border-color:#ff5f5f;color:#e4e6e6}html.dark-mode .swagger-ui .opblock .body-param-options label span,html.dark-mode .swagger-ui .opblock .opblock-description-wrapper i,html.dark-mode .swagger-ui .opblock .opblock-description-wrapper p,html.dark-mode .swagger-ui .opblock .opblock-external-docs-wrapper,html.dark-mode .swagger-ui .opblock .opblock-summary-description,html.dark-mode .swagger-ui .opblock .opblock-summary-operation-id,html.dark-mode .swagger-ui .opblock .opblock-summary-path,html.dark-mode .swagger-ui .opblock .opblock-summary-path__deprecated,html.dark-mode .swagger-ui .opblock .opblock-title_normal,html.dark-mode .swagger-ui .opblock .parameter__in,html.dark-mode .swagger-ui .opblock .parameter__name,html.dark-mode .swagger-ui .opblock .parameter__type,html.dark-mode .swagger-ui .opblock .parameter__type .prop-format,html.dark-mode .swagger-ui .opblock .response-col_links,html.dark-mode .swagger-ui .opblock .response-col_status,html.dark-mode .swagger-ui .opblock .response-col_undocumented{color:#e4e6e6}html.dark-mode .swagger-ui .opblock .opblock-external-docs a.link{color:#51a8ff}html.dark-mode .swagger-ui .opblock .parameter__name.required span,html.dark-mode .swagger-ui .opblock .parameter__name.required:after{color:#ff5f5f}html.dark-mode .swagger-ui .opblock .parameter__empty_value_toggle{color:#e4e6e6}html.dark-mode .swagger-ui .opblock .btn.execute{background:#51a8ff;border-color:#51a8ff;color:#080a0b}html.dark-mode .swagger-ui .opblock .btn.btn-clear{border-color:#e4e6e6;color:#e4e6e6}html.dark-mode .swagger-ui .opblock .highlight-code pre.microlight{background:#2a2e30!important;color:#f0f1f1}html.dark-mode .swagger-ui .opblock .curl-command .btn{background:#3b424d!important;border-color:#2a2e30!important;color:#ebebeb!important}html.dark-mode .swagger-ui .opblock .curl-command .btn.active{background:#2a2e30!important;color:#e4e6e6!important}html.dark-mode .swagger-ui .opblock pre.microlight{background:#2a2e30!important;color:#f0f1f1}html.dark-mode .swagger-ui .opblock .model-example .tab button{color:#e4e6e6}html.dark-mode .swagger-ui .opblock .model-example .tabitem:after{background:#6b757a}html.dark-mode .swagger-ui .opblock .responses-inner h4,html.dark-mode .swagger-ui .opblock .responses-inner h5{color:#e4e6e6}html.dark-mode .swagger-ui .opblock .response-control-media-type--accept-controller select.content-type{border-color:#4ac966}html.dark-mode .swagger-ui .opblock .response-control-media-type--accept-controller .response-control-media-type__accept-message{color:#4ac966}html.dark-mode .swagger-ui .model-toggle:after{background:url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"%23e4e6e6\\\" d=\\\"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\\\"/></svg>\") 50% no-repeat;background-size:100%}html.dark-mode .swagger-ui .model .prop-type{color:#b68ae1}html.dark-mode .swagger-ui .model .brace-close,html.dark-mode .swagger-ui .model .brace-open,html.dark-mode .swagger-ui .model .description,html.dark-mode .swagger-ui .model .prop-format,html.dark-mode .swagger-ui .model .property,html.dark-mode .swagger-ui .model .property-row{color:#e4e6e6}html.dark-mode .swagger-ui .model .property-row.required .star{color:#ff5f5f}html.dark-mode .swagger-ui .model-box{background:#2a2e30}html.dark-mode .swagger-ui .model-box .model,html.dark-mode .swagger-ui .model-box .model-title{color:#e4e6e6}html.dark-mode .swagger-ui .model-box-control:focus{outline:none}html.dark-mode .swagger-ui .model-box-control:not(.prop){color:#e4e6e6}html.dark-mode .swagger-ui .json-schema-2020-12,html.dark-mode .swagger-ui .json-schema-2020-12 button{background:#2a2e30}html.dark-mode .swagger-ui .json-schema-2020-12 button svg{fill:#e4e6e6}html.dark-mode .swagger-ui .json-schema-2020-12 a{color:#51a8ff}html.dark-mode .swagger-ui .json-schema-2020-12__title{color:#e4e6e6}html.dark-mode .swagger-ui .json-schema-2020-12-property--required>.json-schema-2020-12:first-of-type>.json-schema-2020-12-head .json-schema-2020-12__title:after{color:#ff5f5f}html.dark-mode .swagger-ui .json-schema-2020-12-expand-deep-button{color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12-body{border-color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12-keyword__name--primary{color:#e4e6e6}html.dark-mode .swagger-ui .json-schema-2020-12-keyword__name--secondary,html.dark-mode .swagger-ui .json-schema-2020-12-keyword__value--secondary{color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12-keyword__value--warning{border-color:#ff5f5f;color:#ff5f5f}html.dark-mode .swagger-ui .json-schema-2020-12-keyword--\\$vocabulary ul{border-color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:after,html.dark-mode .swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:before,html.dark-mode .swagger-ui .json-schema-2020-12__attribute--primary{color:#9898ff}html.dark-mode .swagger-ui .json-schema-2020-12__attribute--muted{color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12__attribute--warning{color:#ff5f5f}html.dark-mode .swagger-ui .json-schema-2020-12-json-viewer__name--secondary,html.dark-mode .swagger-ui .json-schema-2020-12-json-viewer__value--secondary{color:#b7bcbf}html.dark-mode .swagger-ui .json-schema-2020-12__constraint{background:#9898ff;color:#080a0b}html.dark-mode .swagger-ui .json-schema-2020-12__constraint--string{background:#d4aa53}html.dark-mode .swagger-ui section.models,html.dark-mode .swagger-ui section.models h4{border-color:#545d61}html.dark-mode .swagger-ui section.models h4 span{color:#e4e6e6}html.dark-mode .swagger-ui section.models .model-container{background:#2a2e30}html.dark-mode .swagger-ui section.models .models-control:focus{outline:none}html.dark-mode .swagger-ui section.models .models-control svg{fill:#b7bcbf}\n\n/*# sourceMappingURL=swagger-ui.css.map*/";


-rw-rw-r-- 1 sebas sebas    3640 Apr 19 19:24 ./AGENTS.md
-rw------- 1 sebas sebas    2182 Apr 16 19:01 ./auth.json
-rwxrwxr-x 1 sebas sebas      87 Apr 19 15:56 ./bin/browser-harness
-rwxr-xr-x 1 sebas sebas 3544856 Mar 10 04:40 ./bin/fd
-rwxrwxr-x 1 sebas sebas     560 Apr 18 10:38 ./bin/laptop-mount
-rwxrwxr-x 1 sebas sebas     213 Apr 18 10:38 ./bin/laptop-read
-rwxrwxr-x 1 sebas sebas     414 Apr 18 10:38 ./bin/laptop-rsync
-rwxrwxr-x 1 sebas sebas     207 Apr 18 10:38 ./bin/laptop-run
-rwxrwxr-x 1 sebas sebas     304 Apr 18 10:38 ./bin/laptop-umount
-rwxrwxr-x 1 sebas sebas     959 Apr 18 10:40 ./bin/laptop-write
-rw-rw-r-- 1 sebas sebas   12827 Apr 16 19:01 ./extensions/questionnaire.ts
-rw-rw-r-- 1 sebas sebas    8056 Apr 16 22:14 ./extensions/session-memory-prompt.ts
-rw-rw-r-- 1 sebas sebas    3334 Apr 16 19:01 ./extensions/subagent/agents.ts
-rw-rw-r-- 1 sebas sebas   35802 Apr 16 19:01 ./extensions/subagent/index.ts
-rw-rw-r-- 1 sebas sebas      41 Apr 19 14:32 ./.git/AUTO_MERGE
-rw-rw-r-- 1 sebas sebas      48 Apr 19 14:04 ./.git/COMMIT_EDITMSG
-rw-rw-r-- 1 sebas sebas     266 Apr 16 18:19 ./.git/config
-rw-rw-r-- 1 sebas sebas      73 Apr 16 17:41 ./.git/description
-rw-rw-r-- 1 sebas sebas      21 Apr 16 17:41 ./.git/HEAD
-rwxrwxr-x 1 sebas sebas     478 Apr 16 17:41 ./.git/hooks/applypatch-msg.sample
-rwxrwxr-x 1 sebas sebas     896 Apr 16 17:41 ./.git/hooks/commit-msg.sample
-rwxrwxr-x 1 sebas sebas    4726 Apr 16 17:41 ./.git/hooks/fsmonitor-watchman.sample
-rwxrwxr-x 1 sebas sebas     189 Apr 16 17:41 ./.git/hooks/post-update.sample
-rwxrwxr-x 1 sebas sebas     424 Apr 16 17:41 ./.git/hooks/pre-applypatch.sample
-rwxrwxr-x 1 sebas sebas    1649 Apr 16 17:41 ./.git/hooks/pre-commit.sample
-rwxrwxr-x 1 sebas sebas     416 Apr 16 17:41 ./.git/hooks/pre-merge-commit.sample
-rwxrwxr-x 1 sebas sebas    1492 Apr 16 17:41 ./.git/hooks/prepare-commit-msg.sample
-rwxrwxr-x 1 sebas sebas    1374 Apr 16 17:41 ./.git/hooks/pre-push.sample
-rwxrwxr-x 1 sebas sebas    4898 Apr 16 17:41 ./.git/hooks/pre-rebase.sample
-rwxrwxr-x 1 sebas sebas     544 Apr 16 17:41 ./.git/hooks/pre-receive.sample
-rwxrwxr-x 1 sebas sebas    2783 Apr 16 17:41 ./.git/hooks/push-to-checkout.sample
-rwxrwxr-x 1 sebas sebas    2308 Apr 16 17:41 ./.git/hooks/sendemail-validate.sample
-rwxrwxr-x 1 sebas sebas    3650 Apr 16 17:41 ./.git/hooks/update.sample
-rw-rw-r-- 1 sebas sebas     108 Apr 16 19:01 ./.gitignore
-rw-rw-r-- 1 sebas sebas     805 Apr 19 14:32 ./.git/index
-rw-rw-r-- 1 sebas sebas     240 Apr 16 17:41 ./.git/info/exclude
-rw-rw-r-- 1 sebas sebas    1230 Apr 19 14:32 ./.git/logs/HEAD
-r--r--r-- 1 sebas sebas     596 Apr 16 19:02 ./.git/objects/00/e0815309f3e750f6d1d44d5ef2584b8ffd3762
-r--r--r-- 1 sebas sebas     216 Apr 19 14:32 ./.git/objects/09/d25a81cfa459d342c446776b764ddf12f088fd
-r--r--r-- 1 sebas sebas     153 Apr 16 18:19 ./.git/objects/0e/7cf95e5c8973a19f190461033671aba6f72ecd
-r--r--r-- 1 sebas sebas     190 Apr 16 19:02 ./.git/objects/17/41f45219df0334a12ed40073ee8418b562a469
-r--r--r-- 1 sebas sebas     192 Apr 16 19:06 ./.git/objects/29/aeab9063e2a347dbfe36431e3d1af54c24f855
-r--r--r-- 1 sebas sebas    1316 Apr 16 19:02 ./.git/objects/2a/e3203426f21eac1c03d30d200a5537eaac8942
-r--r--r-- 1 sebas sebas    1115 Apr 16 19:06 ./.git/objects/30/6648600a37c0c8afc3c9768774ef14c68c1020
-r--r--r-- 1 sebas sebas     764 Apr 16 18:19 ./.git/objects/30/a5b14fa3293bd9dabcc4586a04b51e594743c1
-r--r--r-- 1 sebas sebas      83 Apr 16 19:02 ./.git/objects/5d/98116a19fd5cef7ebe8a3760d4f1ab69ed05b9
-r--r--r-- 1 sebas sebas     163 Apr 16 19:02 ./.git/objects/65/fcc0ace37def0f60204d432a815684919e4657
-r--r--r-- 1 sebas sebas    4365 Apr 16 19:02 ./.git/objects/74/6f5a894ac58e6fdcb2c3aee920a9950946f08f
-r--r--r-- 1 sebas sebas    2161 Apr 19 14:04 ./.git/objects/7d/1068f18d8ead89440d63e85a36e793fd592d6e
-r--r--r-- 1 sebas sebas     228 Apr 19 14:32 ./.git/objects/80/2f861b954a1fe2711fd71198d66d9a03265055
-r--r--r-- 1 sebas sebas     502 Apr 16 18:19 ./.git/objects/92/e92ec7013f7e4f39e2170e6d13c7f162e6b33b
-r--r--r-- 1 sebas sebas     190 Apr 19 14:04 ./.git/objects/99/492b6b2ecca0c2df86a1c3558ff07c14ce40fc
-r--r--r-- 1 sebas sebas      95 Apr 16 19:02 ./.git/objects/9e/15e4bdaca12c3bb3f69f698ef18fdef279ee84
-r--r--r-- 1 sebas sebas    1014 Apr 16 18:54 ./.git/objects/a1/95c6d7a9d43431c3ab2b4184f9d4ef4de5a078
-r--r--r-- 1 sebas sebas     193 Apr 16 18:56 ./.git/objects/a6/3c5f4667e0bc886323751a72a55b7a1f485d2a
-r--r--r-- 1 sebas sebas     109 Apr 16 19:02 ./.git/objects/a6/dd1dd34401b1a795da16389403f3462433e12d
-r--r--r-- 1 sebas sebas     228 Apr 19 14:04 ./.git/objects/ac/63323a6795348015cb0e62a9177f8f34b79034
-r--r--r-- 1 sebas sebas      46 Apr 16 18:19 ./.git/objects/b7/e557f64fcd9b7ba091b21ac6edb030004d2c83
-r--r--r-- 1 sebas sebas      95 Apr 16 18:19 ./.git/objects/d9/462dfacedecb199c8085edccea7774cdadb02f
-r--r--r-- 1 sebas sebas     160 Apr 16 18:19 ./.git/objects/dc/366a0d80b6b1732fc5fbb5e07546e1cafff843
-r--r--r-- 1 sebas sebas   10405 Apr 16 19:02 ./.git/objects/e1/891c0a6b76647e4547c4ad0fe1c522a587f5d4
-r--r--r-- 1 sebas sebas     295 Apr 16 18:19 ./.git/objects/e6/5248d9d666009899782af44dd52e030e5e0085
-r--r--r-- 1 sebas sebas     275 Apr 16 19:02 ./.git/objects/e6/d69627ba72264f0cf49c50d368d76d0bc1707b
-r--r--r-- 1 sebas sebas     229 Apr 16 19:02 ./.git/objects/e7/339e8c0b75df8f418f716a20057f8c7373817b
-r--r--r-- 1 sebas sebas      48 Apr 16 18:19 ./.git/objects/f0/2fce7388f59027beb2b5c35c5efbce1ca00c90
-r--r--r-- 1 sebas sebas     153 Apr 16 18:56 ./.git/objects/f1/e1032cae4146b106be3f2adea70c5f1d1bb8fd
-rw-rw-r-- 1 sebas sebas      41 Apr 19 14:32 ./.git/refs/heads/main
-rw-rw-r-- 1 sebas sebas    2494 Apr 19 14:51 ./README.md
-rwxrwxr-x 1 sebas sebas   16211 Apr 16 22:19 ./scripts/apply-pi-shutdown-hook-patch.py
-rw-rw-r-- 1 sebas sebas       0 Apr 16 19:01 ./sessions/.gitkeep
-rw-rw-r-- 1 sebas sebas   36223 Apr 16 19:06 ./sessions/--home-sebas--/2026-04-16T22-04-50-667Z_019d9853-526b-76a8-918f-b098ef98807b.jsonl
-rw-rw-r-- 1 sebas sebas   21540 Apr 16 19:07 ./sessions/--home-sebas--/2026-04-16T22-07-12-460Z_019d9855-7c4b-76d6-91c7-c0c3b19c0d0b.jsonl
-rw-rw-r-- 1 sebas sebas  121193 Apr 16 19:19 ./sessions/--home-sebas--/2026-04-16T22-09-29-335Z_019d9857-92f7-718d-aa32-90ee639a73e7.jsonl
-rw-rw-r-- 1 sebas sebas   54865 Apr 16 19:19 ./sessions/--home-sebas--/2026-04-16T22-16-38-186Z_019d985e-1e2a-724b-8aef-e89f988be7fd.jsonl
-rw-rw-r-- 1 sebas sebas    4913 Apr 16 19:21 ./sessions/--home-sebas--/2026-04-16T22-20-52-944Z_019d9862-0150-74df-b813-44fdadf89fa4.jsonl
-rw-rw-r-- 1 sebas sebas    2142 Apr 16 19:22 ./sessions/--home-sebas--/2026-04-16T22-21-48-004Z_019d9862-d864-74bf-a95e-91b95457abce.jsonl
-rw-rw-r-- 1 sebas sebas 1910199 Apr 16 22:21 ./sessions/--home-sebas--/2026-04-17T00-32-38-804Z_019d98da-a394-748c-8a23-f3d48bd0eb5a.jsonl
-rw-rw-r-- 1 sebas sebas    1427 Apr 16 21:50 ./sessions/--home-sebas--/2026-04-17T00-50-39-457Z_019d98eb-20e0-739c-8c9e-bd7e36b9c9b7.jsonl
-rw-rw-r-- 1 sebas sebas  120681 Apr 16 22:49 ./sessions/--home-sebas--/2026-04-17T01-18-47-592Z_019d9904-e328-725c-8ab7-62a512721f10.jsonl
-rw-rw-r-- 1 sebas sebas    2477 Apr 16 22:23 ./sessions/--home-sebas--/2026-04-17T01-23-22-279Z_019d9909-1427-714c-a14b-7bede4f8d145.jsonl
-rw-rw-r-- 1 sebas sebas  294123 Apr 16 22:44 ./sessions/--home-sebas--/2026-04-17T01-39-26-642Z_019d9917-cb32-74de-b72a-59239b19fe07.jsonl
-rw-rw-r-- 1 sebas sebas  381831 Apr 17 11:20 ./sessions/--home-sebas--/2026-04-17T12-07-28-088Z_019d9b56-c458-757d-9633-d0589c470173.jsonl
-rw-rw-r-- 1 sebas sebas   82476 Apr 18 09:37 ./sessions/--home-sebas--/2026-04-18T12-33-12-559Z_019da094-b16f-7594-b5a2-5d88a6009bc6.jsonl
-rw-rw-r-- 1 sebas sebas  118856 Apr 18 11:00 ./sessions/--home-sebas--/2026-04-18T13-57-21-691Z_019da0e1-bc9a-776c-9887-3bbb32864bfa.jsonl
-rw-rw-r-- 1 sebas sebas  720039 Apr 18 19:21 ./sessions/--home-sebas--/2026-04-18T19-05-39-052Z_019da1fb-fbec-7218-ba0c-b82551a2cbc0.jsonl
-rw-rw-r-- 1 sebas sebas   64554 Apr 19 14:32 ./sessions/--home-sebas--/2026-04-19T16-22-31-621Z_019da68c-ffc5-7181-b3fe-4cbd197bd000.jsonl
-rw-rw-r-- 1 sebas sebas   86434 Apr 19 14:58 ./sessions/--home-sebas--/2026-04-19T17-32-57-650Z_019da6cd-7bb2-70fa-9749-c34742fe5fee.jsonl
-rw-rw-r-- 1 sebas sebas   49228 Apr 19 17:58 ./sessions/--home-sebas--/2026-04-19T20-19-23-113Z_019da765-d968-740a-a8a2-65d009c866c8.jsonl
-rw-rw-r-- 1 sebas sebas  635935 Apr 19 19:28 ./sessions/--home-sebas--/2026-04-19T21-08-22-321Z_019da792-b2b1-701a-b70b-d0ab6d2ed023.jsonl
-rw-rw-r-- 1 sebas sebas  409181 Apr 19 19:24 ./sessions/--home-sebas--/2026-04-19T22-01-48-671Z_019da7c3-9f7e-75d7-9c3b-6422224a5c83.jsonl
-rw-rw-r-- 1 sebas sebas   53065 Apr 19 19:27 ./sessions/--home-sebas--/2026-04-19T22-22-41-959Z_019da7d6-bf27-75e9-9b8c-a50feccc2000.jsonl
-rw-rw-r-- 1 sebas sebas    2441 Apr 19 19:30 ./sessions/--home-sebas--/2026-04-19T22-29-44-970Z_019da7dd-338a-7644-b36b-8b19993e2e53.jsonl
-rw-rw-r-- 1 sebas sebas  114712 Apr 19 19:31 ./sessions/--home-sebas--/2026-04-19T22-30-53-827Z_019da7de-4082-75e5-bb94-2504bc09ade3.jsonl
-rw-rw-r-- 1 sebas sebas  190411 Apr 18 10:31 ./sessions/--home-sebas-downloads-mp3-share--/2026-04-18T13-11-42-880Z_019da0b7-f21f-72c6-ac20-9a3adf9418c1.jsonl
-rw-rw-r-- 1 sebas sebas  187789 Apr 18 10:47 ./sessions/--home-sebas-downloads-mp3-share--/2026-04-18T13-32-21-020Z_019da0ca-d69c-72ac-b3d4-4ec73c918e03.jsonl
-rw-rw-r-- 1 sebas sebas 1174356 Apr 18 20:07 ./sessions/--mnt-rpi-repos-ballbox--/2026-04-18T20-00-21-056Z_019da22e-103e-73ac-8844-2e69f8ba9eb3.jsonl
-rw-rw-r-- 1 sebas sebas 1639006 Apr 19 17:54 ./sessions/--mnt-rpi-repos-ballbox--/2026-04-19T18-04-00-040Z_019da6e9-e6a7-739b-a2e1-0b237f665f7e.jsonl
-rw-rw-r-- 1 sebas sebas   34454 Apr 19 18:07 ./sessions/--mnt-rpi-repos-ballbox--/2026-04-19T20-59-28-042Z_019da78a-8ba9-736d-93ab-3796d2a1b909.jsonl
-rw-rw-r-- 1 sebas sebas     279 Apr 18 19:37 ./settings.json
-rw-rw-r-- 1 sebas sebas    2990 Apr 19 14:51 ./SYSTEM.md


bash

set -e
printf '## .agents dirs\n'
find /home/sebas/.agents -maxdepth 3 -mindepth 1 | sort | sed -n '1,200p'
printf '\n## repo refs\n'
rg -n --glob '!**/venv/**' --glob '!**/site-packages/**' --glob '!**/.git/**' "(/home/sebas/\.agents/skills|~/.agents/skills|\.agents/skills|available_skills|backup|restore)" /mnt/rpi/pi-config /home/sebas/.agents /home/sebas/.bashrc /home/sebas/.profile /home/sebas/.local/bin 2>/dev/null | sed -n '1,240p'


## .agents dirs
/home/sebas/.agents/opencode-harness-install
/home/sebas/.agents/opencode-harness-install/managed-skills.txt
/home/sebas/.agents/.skill-lock.json
/home/sebas/.agents/skills
/home/sebas/.agents/skills.bck
/home/sebas/.agents/skills.bck/personal-memory-search
/home/sebas/.agents/skills.bck/personal-memory-search/SKILL.md
/home/sebas/.agents/skills.bck/personal-research
/home/sebas/.agents/skills.bck/personal-research/SKILL.md
/home/sebas/.agents/skills.bck/personal-status
/home/sebas/.agents/skills.bck/personal-status/SKILL.md
/home/sebas/.agents/skills.bck/personal-task-intake
/home/sebas/.agents/skills.bck/personal-task-intake/SKILL.md
/home/sebas/.agents/skills.bck/telegram-notify
/home/sebas/.agents/skills.bck/telegram-notify/.env
/home/sebas/.agents/skills.bck/telegram-notify/.env.example
/home/sebas/.agents/skills.bck/telegram-notify/SKILL.md
/home/sebas/.agents/skills.bck/telegram-notify/telegram-notify

## repo refs
/home/sebas/.agents/skills.bck/telegram-notify/SKILL.md:10:1. Ensure environment variables are set (or stored in `~/.agents/skills/telegram-notify/.env`):
/home/sebas/.agents/skills.bck/telegram-notify/SKILL.md:14:   - `~/.agents/skills/telegram-notify/telegram-notify "<message>"`
/mnt/rpi/pi-config/AGENTS.md:82:~/.agents/skills/telegram-notify/telegram-notify "Message"


set -e
ls -la /home/sebas/.agents/skills
find /home/sebas/.agents/skills -maxdepth 2 -mindepth 1 | sort | sed -n '1,200p'
[ -e /home/sebas/.agents/skills ] && stat -c '%F -> %N' /home/sebas/.agents/skills
[ -e /home/sebas/.agents/skills.bck ] && stat -c '%F -> %N' /home/sebas/.agents/skills.bck


lrwxrwxrwx 1 sebas sebas 46 Apr 11 16:22 /home/sebas/.agents/skills -> /mnt/rpi/repos/opencode-harness/.agents/skills
symbolic link -> '/home/sebas/.agents/skills' -> '/mnt/rpi/repos/opencode-harness/.agents/skills'
directory -> '/home/sebas/.agents/skills.bck'


set -e
find /mnt/rpi/repos/opencode-harness -maxdepth 4 -type f | sort | sed -n '1,240p'
printf '\n## refs inside harness repo\n'
rg -n "skills\.bck|\.agents/skills|backup|restore|managed-skills|skill-lock" -S /mnt/rpi/repos/opencode-harness 2>/dev/null | sed -n '1,240p'


#!/bin/sh
set -eu

REPO_DEFAULT="sebasfavaron/opencode-harness"
REF_DEFAULT="main"

REPO="${PERSONAL_AGENT_REPO:-$REPO_DEFAULT}"
REF="${PERSONAL_AGENT_REF:-$REF_DEFAULT}"
RAW_BASE="${PERSONAL_AGENT_RAW_BASE:-https://raw.githubusercontent.com/${REPO}/${REF}}"

LOCAL_PATH="${PERSONAL_AGENT_LOCAL_PATH:-}"

SKILLS="personal-research personal-status personal-memory-search personal-task-intake telegram-notify temporary-file-share karaoke-stem-separation ballbox-company"
SKILLS="$SKILLS ballbox-company"

OPENCODE_DIR="${HOME}/.config/opencode"
AGENTS_DIR="${HOME}/.agents/skills"
RULES_FILE="${HOME}/AGENTS.md"
RULES_LINK="${OPENCODE_DIR}/AGENTS.md"
MANAGED_STATE_DIR="${HOME}/.agents/opencode-harness-install"
MANAGED_SKILLS_FILE="${MANAGED_STATE_DIR}/managed-skills.txt"
MANAGED_STATE_DIR="${HOME}/.agents/opencode-harness-install"
MANAGED_SKILLS_FILE="${MANAGED_STATE_DIR}/managed-skills.txt"

say() {
  printf "%s
" "$*"
}

die() {
  printf "error: %s
" "$*" 1>&2
  exit 1
}

require_cmd() {
  command -v "$1" >/dev/null 2>&1 || die "missing required command: $1"
}

backup_path() {
  path="$1"
  if [ -e "$path" ] || [ -L "$path" ]; then
    rm -rf "${path}.bck"
    mv "$path" "${path}.bck"
  fi
}

backup_target_once() {
  path="$1"
  backup="${path}.bck"
  if [ -e "$backup" ] || [ -L "$backup" ]; then
    return 0
  fi
  if [ -e "$path" ] || [ -L "$path" ]; then
    mv "$path" "$backup"
  fi
}

restore_path() {
  path="$1"
  if [ -e "${path}.bck" ] || [ -L "${path}.bck" ]; then
    rm -rf "$path"
    mv "${path}.bck" "$path"
  fi
}

fetch_file() {
  url="$1"
  dest="$2"
  curl -fsSL "$url" -o "$dest"
}

ensure_symlink() {
  link="$1"
  target="$2"
  if command -v readlink >/dev/null 2>&1; then
    if [ -L "$link" ]; then
      current="$(readlink "$link" 2>/dev/null || true)"
      if [ "$current" = "$target" ]; then
        return 0
      fi
    fi
  fi
  rm -rf "$link"
  ln -s "$target" "$link"
}

install() {
  if [ -n "$LOCAL_PATH" ] && [ -d "$LOCAL_PATH" ]; then
    mkdir -p "$MANAGED_STATE_DIR"
    backup_path "$RULES_FILE"
    backup_path "$RULES_LINK"

    mkdir -p "$OPENCODE_DIR"
    mkdir -p "$AGENTS_DIR"

    : > "$MANAGED_SKILLS_FILE"
    for skill in $SKILLS; do
      backup_target_once "$AGENTS_DIR/$skill"
      rm -rf "$AGENTS_DIR/$skill"
      ln -s "$LOCAL_PATH/.agents/skills/$skill" "$AGENTS_DIR/$skill"
      printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
    done

    rm -rf "$RULES_FILE"
    ln -s "$LOCAL_PATH/config/opencode/AGENTS.md" "$RULES_FILE"
    ensure_symlink "$RULES_LINK" "$RULES_FILE"

    say "linked managed skills into $AGENTS_DIR"
    say "symlinked rules to $RULES_FILE"
    say "symlinked rules to $RULES_LINK"
    say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
    return 0
  fi

  require_cmd curl

  mkdir -p "$MANAGED_STATE_DIR"
  backup_path "$RULES_FILE"
  backup_path "$RULES_LINK"

  mkdir -p "$AGENTS_DIR"
  mkdir -p "$OPENCODE_DIR"
  : > "$MANAGED_SKILLS_FILE"

  for skill in $SKILLS; do
    skill_dir="$AGENTS_DIR/$skill"
    backup_target_once "$skill_dir"
    rm -rf "$skill_dir"
    mkdir -p "$skill_dir"
    fetch_file "$RAW_BASE/.agents/skills/$skill/SKILL.md" "$skill_dir/SKILL.md"
    printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
  done

  fetch_file "$RAW_BASE/.agents/skills/telegram-notify/telegram-notify" "$AGENTS_DIR/telegram-notify/telegram-notify"

  fetch_file "$RAW_BASE/.agents/skills/telegram-notify/.env.example" "$AGENTS_DIR/telegram-notify/.env.example"
  chmod +x "$AGENTS_DIR/telegram-notify/telegram-notify"

  fetch_file "$RAW_BASE/config/opencode/AGENTS.md" "$RULES_FILE"
  ensure_symlink "$RULES_LINK" "$RULES_FILE"

  say "installed managed skills to $AGENTS_DIR"
  say "installed rules to $RULES_FILE"
  say "symlinked rules to $RULES_LINK"
  say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
}

restore() {
  restore_path "$RULES_FILE"
  restore_path "$RULES_LINK"
  if [ -f "$MANAGED_SKILLS_FILE" ]; then
    while IFS= read -r skill; do
      [ -n "$skill" ] || continue
      restore_path "$AGENTS_DIR/$skill"
    done < "$MANAGED_SKILLS_FILE"
  fi
  say "restored backups if present"
}

case "${1:-install}" in
  install)
    install
    ;;
  restore)
    restore
    ;;
  *)
    die "usage: $0 [install|restore]"
    ;;
esac


#!/bin/sh
set -eu

SCRIPT_DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd -P)"
REPO_ROOT="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd -P)"
TARGET_DIR="${HOME}/.agents/skills"
SOURCE_DIR="$REPO_ROOT/.agents/skills"

mkdir -p "$TARGET_DIR"

if [ "$(CDPATH= cd -- "$TARGET_DIR" && pwd -P)" = "$SOURCE_DIR" ]; then
  printf 'skills already available at %s\n' "$TARGET_DIR"
  exit 0
fi

for skill in \
  personal-research \
  personal-status \
  personal-memory-search \
  personal-task-intake \
  temporary-file-share \
  karaoke-stem-separation
do
  ln -sfn "$SOURCE_DIR/$skill" "$TARGET_DIR/$skill"
  printf 'linked %s -> %s\n' "$TARGET_DIR/$skill" "$SOURCE_DIR/$skill"
done


# Install

This project is currently a local-first starter repo for building a personal assistant runtime.

What you get today:

- local SQLite storage
- research run tracking
- OpenCode skill wrappers
- approval queue foundation
- task intake persistence with subtasks
- request routing across personal, company, and code specialists

What you do not get yet:

- browser automation
- email sending
- background daemon
- external account integrations

## Prerequisites

- Python 3.11+ recommended
- Git
- OpenCode, only if you want to use the included skills

## Clone

```bash
git clone https://github.com/sebasfavaron/opencode-harness.git
cd personal-agent
```

## Verify Python

```bash
python3 --version
```

## Run Tests

```bash
python3 -m unittest discover -s tests
```

## Start A Sample Research Run

```bash
python3 scripts/personal.py research start --json   --goal "Investigate local-first personal assistant patterns"   --scope "starter implementation ideas"   --assumptions "foundation repo only"
```

Then add sources and claims:

```bash
python3 scripts/personal.py research search-web --json   --run-id "<run-id>"   --query "local-first personal assistant patterns"   --max-results 5

python3 scripts/personal.py research capture-url --json   --run-id "<run-id>"   --url "https://example.com"   --notes "why this source matters"

python3 scripts/personal.py research add-source --json   --run-id "<run-id>"   --url "https://example.com"   --title "Example source"

python3 scripts/personal.py research add-claim --json   --run-id "<run-id>"   --claim "Example finding"   --confidence 0.6   --status tentative   --source-url "https://example.com"
```

Render a report:

```bash
python3 scripts/personal.py report --run-id "<run-id>" --format md
```

## Data Location

Default database path:

```text
~/agents-database/data/shared-agent-memory.sqlite3
```

The database is created on first use by the shared-memory service.

To override it:

```bash
export PERSONAL_AGENT_SHARED_MEMORY_DB_PATH=/absolute/path/to/shared-agent-memory.sqlite3
```

## OpenCode Global Install (No Clone Required)

This installs the global OpenCode rules file and the personal-agent skills without cloning this repo.

```bash
curl -fsSL https://raw.githubusercontent.com/sebasfavaron/opencode-harness/main/scripts/install-opencode.sh | sh
```

Restore previous config if needed:

```bash
curl -fsSL https://raw.githubusercontent.com/sebasfavaron/opencode-harness/main/scripts/install-opencode.sh | sh -s -- restore
```

## Optional: Expose Skills Globally For Codex

This repo owns its own skills under:

```text
.agents/skills/
```

If you want OpenCode to discover them globally on your machine:

```bash
./scripts/install-skills.sh
```

This currently links the core personal skills plus:

- `temporary-file-share`
- `karaoke-stem-separation`

## Optional: Verify Routing

```bash
python3 scripts/personal.py route --json   --input "Ballbox necesita fix en repo de pagos"   --execute
```

## Gotchas

- the OpenCode installer overwrites `~/.agents/skills` and `~/AGENTS.md` (and symlinks `~/.config/opencode/AGENTS.md`)
- backups are saved to `~/.agents/skills.bck`, `~/AGENTS.md.bck`, and `~/.config/opencode/AGENTS.md.bck` (existing `.bck` is replaced)
- `opencode` and `curl` must be on your `PATH`

## Current Limitations

- no browser runtime
- no outbound integrations
- internal command surface may still evolve


  - `./scripts/daemon-8082.sh stop`
  - `./scripts/daemon-8082.sh restart`
  - `./scripts/daemon-8082.sh status`
  - `./scripts/daemon-8082.sh logs`

## Intended Usage Model

- personal capabilities stay in this repo
- this repo should be the normal conversational entry point
- Skills from this repo can be installed globally into `~/.agents/skills`
- current utility skills also include `temporary-file-share` and `karaoke-stem-separation`
- `ai-dev-workflow` remains separate and keeps owning its own workflow skills
- specialist repos can be delegated to when the request clearly matches them
- risky external actions should go through the approval queue first

## Clone-Friendly Extras

- `scripts/install-opencode.sh` installs skills + OpenCode rules without cloning (see INSTALL.md)
- `scripts/install-skills.sh` links skills into `~/.agents/skills`
- GitHub Actions runs the unit test suite on push and pull request

## Tests

```bash
./scripts/run-checks.sh
```

## Push Gate

Install the local pre-push gate once per clone:

```bash
./scripts/install-git-hooks.sh
```

After that, `git push` is blocked unless `scripts/run-checks.sh` passes.


set -e
cd /mnt/rpi/repos/opencode-harness
find .agents/skills -maxdepth 1 -type d | sort | sed -n '1,60p'
for d in .agents/skills/*.bck; do [ -d "$d" ] && echo BCK:$d; done


.agents/skills
.agents/skills/ballbox-company
.agents/skills/ballbox-company.bck
.agents/skills/karaoke-stem-separation
.agents/skills/karaoke-stem-separation.bck
.agents/skills/memory-write
.agents/skills/personal-memory-search
.agents/skills/personal-memory-search.bck
.agents/skills/personal-research
.agents/skills/personal-research.bck
.agents/skills/personal-status
.agents/skills/personal-status.bck
.agents/skills/personal-task-intake
.agents/skills/personal-task-intake.bck
.agents/skills/telegram-notify
.agents/skills/telegram-notify.bck
.agents/skills/temporary-file-share
.agents/skills/temporary-file-share.bck
BCK:.agents/skills/ballbox-company.bck
BCK:.agents/skills/karaoke-stem-separation.bck
BCK:.agents/skills/personal-memory-search.bck
BCK:.agents/skills/personal-research.bck
BCK:.agents/skills/personal-status.bck
BCK:.agents/skills/personal-task-intake.bck
BCK:.agents/skills/telegram-notify.bck
BCK:.agents/skills/temporary-file-share.bck


set -e
cd /mnt/rpi/repos/opencode-harness
cmp -s .agents/skills/personal-research/SKILL.md .agents/skills/personal-research.bck/SKILL.md && echo same_pr || echo diff_pr
cmp -s .agents/skills/telegram-notify/SKILL.md .agents/skills/telegram-notify.bck/SKILL.md && echo same_tg || echo diff_tg
cmp -s .agents/skills/telegram-notify/telegram-notify .agents/skills/telegram-notify.bck/telegram-notify && echo same_tg_bin || echo diff_tg_bin


same_pr
same_tg
same_tg_bin


edit

backup_target_once() {
  path="$1"
  backup="${path}.bck"
  if [ -e "$backup" ] || [ -L "$backup" ]; then
    return 0
  fi
  if [ -e "$path" ] || [ -L "$path" ]; then
    mv "$path" "$backup"
  fi
}

restore_path() {
  path="$1"
  if [ -e "${path}.bck" ] || [ -L "${path}.bck" ]; then
    rm -rf "$path"
    mv "${path}.bck" "$path"
  fi
}

backup_target_once() {
  path="$1"
  backup="$2"
  if [ -e "$backup" ] || [ -L "$backup" ]; then
    return 0
  fi
  if [ -e "$path" ] || [ -L "$path" ]; then
    mkdir -p "$(dirname "$backup")"
    mv "$path" "$backup"
  fi
}

restore_path() {
  path="$1"
  backup="$2"
  if [ -e "$backup" ] || [ -L "$backup" ]; then
    rm -rf "$path"
    mkdir -p "$(dirname "$path")"
    mv "$backup" "$path"
  fi
}

    mkdir -p "$MANAGED_STATE_DIR"
    backup_path "$RULES_FILE"
    backup_path "$RULES_LINK"

    mkdir -p "$OPENCODE_DIR"
    mkdir -p "$AGENTS_DIR"

    : > "$MANAGED_SKILLS_FILE"
    for skill in $SKILLS; do
      backup_target_once "$AGENTS_DIR/$skill"
      rm -rf "$AGENTS_DIR/$skill"
      ln -s "$LOCAL_PATH/.agents/skills/$skill" "$AGENTS_DIR/$skill"
      printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
    done

    mkdir -p "$MANAGED_STATE_DIR"
    backup_path "$RULES_FILE"
    backup_path "$RULES_LINK"

    mkdir -p "$OPENCODE_DIR"
    mkdir -p "$AGENTS_DIR"
    mkdir -p "$BACKUP_DIR"

    : > "$MANAGED_SKILLS_FILE"
    for skill in $SKILLS; do
      backup_target_once "$AGENTS_DIR/$skill" "$BACKUP_DIR/$skill"
      rm -rf "$AGENTS_DIR/$skill"
      ln -s "$LOCAL_PATH/.agents/skills/$skill" "$AGENTS_DIR/$skill"
      printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
    done

    say "linked managed skills into $AGENTS_DIR"
    say "symlinked rules to $RULES_FILE"
    say "symlinked rules to $RULES_LINK"
    say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"

    say "linked managed skills into $AGENTS_DIR"
    say "symlinked rules to $RULES_FILE"
    say "symlinked rules to $RULES_LINK"
    say "backup paths: ${BACKUP_DIR}/<skill>, ${RULES_FILE}.bck, ${RULES_LINK}.bck"

  mkdir -p "$MANAGED_STATE_DIR"
  backup_path "$RULES_FILE"
  backup_path "$RULES_LINK"

  mkdir -p "$AGENTS_DIR"
  mkdir -p "$OPENCODE_DIR"
  : > "$MANAGED_SKILLS_FILE"

  for skill in $SKILLS; do
    skill_dir="$AGENTS_DIR/$skill"
    backup_target_once "$skill_dir"
    rm -rf "$skill_dir"
    mkdir -p "$skill_dir"
    fetch_file "$RAW_BASE/.agents/skills/$skill/SKILL.md" "$skill_dir/SKILL.md"
    printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
  done

  mkdir -p "$MANAGED_STATE_DIR"
  backup_path "$RULES_FILE"
  backup_path "$RULES_LINK"

  mkdir -p "$AGENTS_DIR"
  mkdir -p "$OPENCODE_DIR"
  mkdir -p "$BACKUP_DIR"
  : > "$MANAGED_SKILLS_FILE"

  for skill in $SKILLS; do
    skill_dir="$AGENTS_DIR/$skill"
    backup_target_once "$skill_dir" "$BACKUP_DIR/$skill"
    rm -rf "$skill_dir"
    mkdir -p "$skill_dir"
    fetch_file "$RAW_BASE/.agents/skills/$skill/SKILL.md" "$skill_dir/SKILL.md"
    printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
  done

  say "installed managed skills to $AGENTS_DIR"
  say "installed rules to $RULES_FILE"
  say "symlinked rules to $RULES_LINK"
  say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"

  say "installed managed skills to $AGENTS_DIR"
  say "installed rules to $RULES_FILE"
  say "symlinked rules to $RULES_LINK"
  say "backup paths: ${BACKUP_DIR}/<skill>, ${RULES_FILE}.bck, ${RULES_LINK}.bck"

restore() {
  restore_path "$RULES_FILE"
  restore_path "$RULES_LINK"
  if [ -f "$MANAGED_SKILLS_FILE" ]; then
    while IFS= read -r skill; do
      [ -n "$skill" ] || continue
      restore_path "$AGENTS_DIR/$skill"
    done < "$MANAGED_SKILLS_FILE"
  fi
  say "restored backups if present"
}

restore() {
  restore_path "$RULES_FILE" "${RULES_FILE}.bck"
  restore_path "$RULES_LINK" "${RULES_LINK}.bck"
  if [ -f "$MANAGED_SKILLS_FILE" ]; then
    while IFS= read -r skill; do
      [ -n "$skill" ] || continue
      restore_path "$AGENTS_DIR/$skill" "$BACKUP_DIR/$skill"
    done < "$MANAGED_SKILLS_FILE"
  fi
  say "restored backups if present"
}


Successfully replaced 7 block(s) in /mnt/rpi/repos/opencode-harness/scripts/install-opencode.sh.

     ...
  14 SKILLS="$SKILLS ballbox-company"
  15
  16 OPENCODE_DIR="${HOME}/.config/opencode"
  17 AGENTS_DIR="${HOME}/.agents/skills"
+ 18 BACKUP_DIR="${HOME}/.agents/skills-backups"
  18 RULES_FILE="${HOME}/AGENTS.md"
  19 RULES_LINK="${OPENCODE_DIR}/AGENTS.md"
  20 MANAGED_STATE_DIR="${HOME}/.agents/opencode-harness-install"
  21 MANAGED_SKILLS_FILE="${MANAGED_STATE_DIR}/managed-skills.txt"
- 22 MANAGED_STATE_DIR="${HOME}/.agents/opencode-harness-install"
- 23 MANAGED_SKILLS_FILE="${MANAGED_STATE_DIR}/managed-skills.txt"
  24
  25 say() {
  26   printf "%s
  27 " "$*"
     ...
  46 }
  47
  48 backup_target_once() {
  49   path="$1"
- 50   backup="${path}.bck"
+ 49   backup="$2"
  51   if [ -e "$backup" ] || [ -L "$backup" ]; then
  52     return 0
  53   fi
  54   if [ -e "$path" ] || [ -L "$path" ]; then
+ 54     mkdir -p "$(dirname "$backup")"
  55     mv "$path" "$backup"
  56   fi
  57 }
  58
  59 restore_path() {
  60   path="$1"
- 61   if [ -e "${path}.bck" ] || [ -L "${path}.bck" ]; then
+ 61   backup="$2"
+ 62   if [ -e "$backup" ] || [ -L "$backup" ]; then
  62     rm -rf "$path"
- 63     mv "${path}.bck" "$path"
+ 64     mkdir -p "$(dirname "$path")"
+ 65     mv "$backup" "$path"
  64   fi
  65 }
  66
  67 fetch_file() {
     ...
  92     backup_path "$RULES_LINK"
  93
  94     mkdir -p "$OPENCODE_DIR"
  95     mkdir -p "$AGENTS_DIR"
+ 98     mkdir -p "$BACKUP_DIR"
  96
  97     : > "$MANAGED_SKILLS_FILE"
  98     for skill in $SKILLS; do
- 99       backup_target_once "$AGENTS_DIR/$skill"
+102       backup_target_once "$AGENTS_DIR/$skill" "$BACKUP_DIR/$skill"
 100       rm -rf "$AGENTS_DIR/$skill"
 101       ln -s "$LOCAL_PATH/.agents/skills/$skill" "$AGENTS_DIR/$skill"
 102       printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
 103     done
     ...
 108
 109     say "linked managed skills into $AGENTS_DIR"
 110     say "symlinked rules to $RULES_FILE"
 111     say "symlinked rules to $RULES_LINK"
-112     say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
+115     say "backup paths: ${BACKUP_DIR}/<skill>, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
 113     return 0
 114   fi
 115
 116   require_cmd curl
     ...
 120   backup_path "$RULES_LINK"
 121
 122   mkdir -p "$AGENTS_DIR"
 123   mkdir -p "$OPENCODE_DIR"
+127   mkdir -p "$BACKUP_DIR"
 124   : > "$MANAGED_SKILLS_FILE"
 125
 126   for skill in $SKILLS; do
 127     skill_dir="$AGENTS_DIR/$skill"
-128     backup_target_once "$skill_dir"
+132     backup_target_once "$skill_dir" "$BACKUP_DIR/$skill"
 129     rm -rf "$skill_dir"
 130     mkdir -p "$skill_dir"
 131     fetch_file "$RAW_BASE/.agents/skills/$skill/SKILL.md" "$skill_dir/SKILL.md"
 132     printf '%s\n' "$skill" >> "$MANAGED_SKILLS_FILE"
     ...
 142
 143   say "installed managed skills to $AGENTS_DIR"
 144   say "installed rules to $RULES_FILE"
 145   say "symlinked rules to $RULES_LINK"
-146   say "backup paths: <skill>.bck under ${AGENTS_DIR}, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
+150   say "backup paths: ${BACKUP_DIR}/<skill>, ${RULES_FILE}.bck, ${RULES_LINK}.bck"
 147 }
 148
 149 restore() {
-150   restore_path "$RULES_FILE"
-151   restore_path "$RULES_LINK"
+154   restore_path "$RULES_FILE" "${RULES_FILE}.bck"
+155   restore_path "$RULES_LINK" "${RULES_LINK}.bck"
 152   if [ -f "$MANAGED_SKILLS_FILE" ]; then
 153     while IFS= read -r skill; do
 154       [ -n "$skill" ] || continue
-155       restore_path "$AGENTS_DIR/$skill"
+159       restore_path "$AGENTS_DIR/$skill" "$BACKUP_DIR/$skill"
 156     done < "$MANAGED_SKILLS_FILE"
 157   fi
 158   say "restored backups if present"
 159 }
     ...


- the OpenCode installer overwrites `~/.agents/skills` and `~/AGENTS.md` (and symlinks `~/.config/opencode/AGENTS.md`)
- backups are saved to `~/.agents/skills.bck`, `~/AGENTS.md.bck`, and `~/.config/opencode/AGENTS.md.bck` (existing `.bck` is replaced)

- the OpenCode installer overwrites managed entries under `~/.agents/skills` and `~/AGENTS.md` (and symlinks `~/.config/opencode/AGENTS.md`)
- managed skill backups are saved to `~/.agents/skills-backups/<skill>`; rule backups are saved to `~/AGENTS.md.bck` and `~/.config/opencode/AGENTS.md.bck`


Successfully replaced 1 block(s) in /mnt/rpi/repos/opencode-harness/INSTALL.md.

     ...
 123 ```
 124
 125 ## Gotchas
 126
-127 - the OpenCode installer overwrites `~/.agents/skills` and `~/AGENTS.md` (and symlinks `~/.config/opencode/AGENTS.md`)
-128 - backups are saved to `~/.agents/skills.bck`, `~/AGENTS.md.bck`, and `~/.config/opencode/AGENTS.md.bck` (existing `.bck` is replaced)
+127 - the OpenCode installer overwrites managed entries under `~/.agents/skills` and `~/AGENTS.md` (and symlinks `~/.config/opencode/AGENTS.md`)
+128 - managed skill backups are saved to `~/.agents/skills-backups/<skill>`; rule backups are saved to `~/AGENTS.md.bck` and `~/.config/opencode/AGENTS.md.bck`
 129 - `opencode` and `curl` must be on your `PATH`
 130
 131 ## Current Limitations
 132
     ...


- Skills from this repo can be installed globally into `~/.agents/skills`
- current utility skills also include `temporary-file-share` and `karaoke-stem-separation`

- Skills from this repo can be installed globally into `~/.agents/skills`
- managed-skill backups are stored outside that directory in `~/.agents/skills-backups` to avoid skill discovery conflicts
- current utility skills also include `temporary-file-share` and `karaoke-stem-separation`


Successfully replaced 1 block(s) in /mnt/rpi/repos/opencode-harness/README.md.

     ...
 136
 137 - personal capabilities stay in this repo
 138 - this repo should be the normal conversational entry point
 139 - Skills from this repo can be installed globally into `~/.agents/skills`
+140 - managed-skill backups are stored outside that directory in `~/.agents/skills-backups` to avoid skill discovery conflicts
 140 - current utility skills also include `temporary-file-share` and `karaoke-stem-separation`
 141 - `ai-dev-workflow` remains separate and keeps owning its own workflow skills
 142 - specialist repos can be delegated to when the request clearly matches them
 143 - risky external actions should go through the approval queue first
     ...


bash

set -e
cd /mnt/rpi/repos/opencode-harness
sh -n scripts/install-opencode.sh
mkdir -p /tmp/opencode-test-home/.agents /tmp/opencode-test-home/.config
rm -rf /tmp/opencode-test-home/.agents/skills /tmp/opencode-test-home/.agents/skills-backups /tmp/opencode-test-home/.agents/opencode-harness-install /tmp/opencode-test-home/AGENTS.md /tmp/opencode-test-home/AGENTS.md.bck /tmp/opencode-test-home/.config/opencode
mkdir -p /tmp/opencode-test-home/.agents/skills/personal-research
printf 'old\n' > /tmp/opencode-test-home/.agents/skills/personal-research/SKILL.md
HOME=/tmp/opencode-test-home PERSONAL_AGENT_LOCAL_PATH=/mnt/rpi/repos/opencode-harness sh scripts/install-opencode.sh install >/tmp/opencode-test-install.log
[ -L /tmp/opencode-test-home/.agents/skills/personal-research ]
[ -d /tmp/opencode-test-home/.agents/skills-backups/personal-research ]
HOME=/tmp/opencode-test-home PERSONAL_AGENT_LOCAL_PATH=/mnt/rpi/repos/opencode-harness sh scripts/install-opencode.sh restore >/tmp/opencode-test-restore.log
[ -f /tmp/opencode-test-home/.agents/skills/personal-research/SKILL.md ]
grep -q '^old$' /tmp/opencode-test-home/.agents/skills/personal-research/SKILL.md
printf 'ok\n'


ok


set -e
cd /mnt/rpi/repos/opencode-harness/.agents/skills
mkdir -p ../skills-backups
for d in *.bck; do
  [ -d "$d" ] || continue
  base=${d%.bck}
  rm -rf "../skills-backups/$base"
  mv "$d" "../skills-backups/$base"
done
find . -maxdepth 1 -type d | sort | sed -n '1,80p'
printf '\nbackups:\n'
find ../skills-backups -maxdepth 1 -type d | sort | sed -n '1,80p'


.
./ballbox-company
./karaoke-stem-separation
./memory-write
./personal-memory-search
./personal-research
./personal-status
./personal-task-intake
./telegram-notify
./temporary-file-share

backups:
../skills-backups
../skills-backups/ballbox-company
../skills-backups/karaoke-stem-separation
../skills-backups/personal-memory-search
../skills-backups/personal-research
../skills-backups/personal-status
../skills-backups/personal-task-intake
../skills-backups/telegram-notify
../skills-backups/temporary-file-share


Done.

Changes:
- Moved repo-local backup skill dirs out of `.agents/skills` to:
  - `/mnt/rpi/repos/opencode-harness/.agents/skills-backups/*`
- Updated installer/restore logic:
  - `scripts/install-opencode.sh`
  - managed skill backups now go to `~/.agents/skills-backups/<skill>`
  - restore now reads from that folder
- Updated docs:
  - `INSTALL.md`
  - `README.md`

Validation:
- shell syntax check passed
- install/restore flow tested in temp HOME
- backup restore worked correctly

Why:
- `.agents/skills/*.bck` was inside the discovery path, so it could trigger conflict/warning noise
- moving backups outside discovery path fixes that without breaking restore

Notes:
- Current machine path `~/.agents/skills` is a symlink to repo skills, so the warnings were likely coming from:
  - `/mnt/rpi/repos/opencode-harness/.agents/skills/*.bck`
- I moved those existing backup dirs too

Touched files:
- `/mnt/rpi/repos/opencode-harness/scripts/install-opencode.sh`
- `/mnt/rpi/repos/opencode-harness/INSTALL.md`
- `/mnt/rpi/repos/opencode-harness/README.md`

If you want, I can also grep for any remaining `.bck`-style skill backups anywhere under `~/.agents` and clean those up.