apiskill 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ :root{color-scheme:light;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#eef1f4;color:#18202a;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{cursor:pointer}.app-shell{display:flex;flex-direction:column;height:100svh;min-height:100vh;padding:18px 18px 0;overflow:hidden}.topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 20px;border:1px solid #d7dde4;border-radius:8px;background:#fff}.eyebrow{margin:0 0 4px;color:#667282;font-size:12px;font-weight:700;letter-spacing:0;text-transform:uppercase}h1,h2,h3,h4,p{margin-top:0}.topbar h1{margin:0;font-size:24px;line-height:1.2}.topbar-actions{display:flex;align-items:center;gap:14px}.version-switcher{display:inline-flex;align-items:center;gap:8px;color:#647182;font-size:12px;font-weight:800}.version-switcher select{width:min(320px,32vw);min-height:36px;padding:0 10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#15202c;background:#fff}.version-manager{min-width:min(420px,38vw)}.version-manager-trigger{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:9px;width:100%;min-height:44px;padding:7px 10px;border:1px solid #cfd7e1;border-radius:7px;color:#23303e;background:#fff;text-align:left}.version-manager-trigger:disabled{cursor:not-allowed;opacity:.72}.version-manager-trigger span{display:grid;gap:2px;min-width:0}.version-manager-trigger strong,.version-manager-trigger small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.version-manager-trigger strong{font-size:13px}.version-manager-trigger small{color:#657181;font-size:11px;font-weight:800}.version-manager-dialog{width:min(900px,100%);max-height:calc(100vh - 40px);overflow:auto;border-radius:8px;border:1px solid #d7dde4;background:#fff;box-shadow:0 18px 60px #12192338}.version-manager-body{display:grid;gap:12px;padding:16px 20px 20px;background:#f7f9fb}.version-message{padding:9px 11px;border:1px solid #cbe5df;border-radius:7px;color:#176b4f;background:#eef9f5;font-size:13px;font-weight:800}.version-message.error{border-color:#f1c1bd;color:#9a2d27;background:#fff4f3}.version-item{display:grid;gap:12px;padding:13px;border:1px solid #dfe5eb;border-radius:8px;background:#fff}.version-item.active{border-color:#7ab6ad;box-shadow:inset 3px 0 #1b6b65}.version-item-main{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:start}.version-item-title{display:flex;align-items:center;gap:8px;min-width:0}.version-item-title strong{overflow:hidden;color:#202a36;text-overflow:ellipsis;white-space:nowrap}.version-item-title span{padding:3px 7px;border-radius:999px;color:#176b4f;background:#e5f6ef;font-size:11px;font-weight:900}.version-item-main p{margin:4px 0 0;overflow-wrap:anywhere;color:#657181;font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.version-item-stats{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.version-item-stats span,.version-env-summary span{padding:5px 7px;border-radius:6px;color:#4d5b6c;background:#eef2f6;font-size:12px;font-weight:800}.version-env-summary{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px}.version-env-summary code{overflow:hidden;padding:7px 9px;border:1px solid #dfe5eb;border-radius:6px;color:#2f3d4d;background:#fbfcfd;text-overflow:ellipsis;white-space:nowrap}.version-env-editor{display:grid;grid-template-columns:minmax(160px,.5fr) minmax(0,1fr);gap:10px}.version-env-editor label{display:grid;gap:5px;min-width:0;color:#647182;font-size:12px;font-weight:800}.version-env-editor input{width:100%;min-height:36px;padding:0 10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#15202c;background:#fff}.version-item-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.sync-meta{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;color:#5c6877;font-size:13px}.sync-meta span{padding:5px 8px;border:1px solid #dce2e9;border-radius:6px;background:#f7f9fb}.primary-button,.copy-inline-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;border:0;border-radius:6px;color:#fff;background:#1b6b65;font-weight:700;white-space:nowrap}.primary-button{padding:0 14px}.primary-button:disabled{cursor:wait;opacity:.72}.copy-inline-button{padding:0 12px;background:#202a36}.secondary-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:0 14px;border:1px solid #ccd5df;border-radius:6px;color:#22303d;background:#fff;font-weight:700;white-space:nowrap}.secondary-button:disabled{cursor:wait;opacity:.72}.danger-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:0 14px;border:1px solid #efcbc8;border-radius:6px;color:#b63831;background:#fff7f6;font-weight:700;white-space:nowrap}.icon-secondary-button{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:1px solid #ccd5df;border-radius:6px;color:#22303d;background:#fff}.source-panel{display:grid;gap:10px;margin-top:12px;padding:12px;border:1px solid #d7dde4;border-radius:8px;background:#fff}.source-panel-header{display:flex;align-items:center;justify-content:space-between;gap:10px}.source-panel-actions{display:inline-flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.document-toolbar{grid-template-columns:minmax(0,1fr) auto;align-items:center}.document-source-summary{display:grid;min-width:0;gap:3px}.document-source-summary>span{color:#6a7685;font-size:12px;font-weight:700}.document-source-summary strong,.document-source-summary small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.document-source-summary strong{color:#1d2936;font-size:13px}.document-source-summary small{color:#176b4f;font-size:12px}.document-toolbar>.version-message{grid-column:1 / -1}.source-tabs{display:inline-flex;width:fit-content;gap:4px;padding:3px;border:1px solid #d4dce5;border-radius:7px;background:#fff}.source-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 12px;border:0;border-radius:5px;color:#566373;background:transparent;font-size:13px;font-weight:800}.source-tabs button.active{color:#fff;background:#1b6b65}.source-form{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px}.document-dialog{width:min(760px,100%);max-height:calc(100vh - 40px);overflow:auto;border:1px solid #d7dde4;border-radius:8px;background:#fff;box-shadow:0 18px 60px #12192338;animation:dialog-enter .16s ease-out}.document-dialog-tabs{display:flex;gap:2px;overflow-x:auto;padding:10px 20px 0;border-bottom:1px solid #e5eaf0}.document-dialog-tabs button{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;gap:6px;min-height:38px;padding:0 12px;border:0;border-bottom:2px solid transparent;color:#5c6877;background:transparent;font-size:13px;font-weight:800}.document-dialog-tabs button.active{border-bottom-color:#1b6b65;color:#155a55}.document-dialog-body{min-height:174px;padding:20px;background:#f7f9fb}.blank-document-fields{display:grid;gap:12px}.document-source-input{min-height:46px;background:#fff}.document-file-picker{display:grid;grid-template-columns:auto minmax(0,1fr);align-content:center;min-height:134px;padding:22px;background:#fff}.document-file-picker>svg{grid-row:1 / span 2}.document-file-picker small{color:#748091}.document-dialog-actions{gap:8px;padding-top:18px}.document-dialog-actions .clear-document-source{margin-right:auto}.source-input,.source-file-picker{display:flex;align-items:center;gap:8px;min-width:0;min-height:38px;padding:0 12px;border:1px solid #cfd7e1;border-radius:7px;background:#f9fafb}.source-file-picker{cursor:pointer}.source-file-picker input{display:none}.source-file-picker span{overflow:hidden;min-width:0;color:#15202c;text-overflow:ellipsis;white-space:nowrap}.source-input input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:#15202c}.source-input textarea{width:100%;min-width:0;min-height:118px;resize:vertical;border:0;outline:0;background:transparent;color:#15202c;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5}.source-input-multiline{align-items:flex-start;padding-top:10px;padding-bottom:10px}.source-input-multiline svg{margin-top:2px}.source-auth{grid-column:1 / -1;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px}.source-auth-fields{display:grid;grid-template-columns:repeat(2,minmax(0,220px));gap:8px}.source-auth-fields label{display:flex;align-items:center;gap:8px;min-width:0;min-height:36px;padding:0 10px;border:1px solid #cfd7e1;border-radius:7px;background:#f9fafb}.source-auth-fields input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:#15202c}.source-meta{grid-column:1 / -1;overflow:hidden;color:#657181;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.source-meta span{color:#2f3d4d;font-family:SFMono-Regular,Consolas,monospace}.source-meta small{margin-left:8px;color:#728094;font-weight:800}.workspace{display:grid;flex:1 1 auto;grid-template-columns:minmax(320px,380px) minmax(0,1fr);gap:16px;min-height:0;margin-top:16px}.sidebar,.detail-pane{min-height:0;border:1px solid #d7dde4;border-radius:8px;background:#fff}.sidebar{display:flex;flex-direction:column;padding:14px}.search-box{display:flex;align-items:center;gap:8px;min-height:42px;padding:0 12px;border:1px solid #cfd7e1;border-radius:7px;background:#f9fafb}.search-box input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:#15202c}.search-clear-button{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:24px;height:24px;padding:0;border:0;border-radius:5px;color:#647182;background:transparent}.search-clear-button:hover{color:#b63831;background:#fff0ef}.filters{display:grid;grid-template-columns:1fr auto;gap:10px;margin-top:12px}.filters label:first-child{display:flex;align-items:center;gap:8px;min-width:0;padding:0 10px;border:1px solid #d5dce5;border-radius:7px;background:#fff}.filters select{width:100%;min-height:38px;border:0;outline:0;background:transparent}.checkbox-line{display:inline-flex;align-items:center;gap:6px;color:#566373;font-size:13px;white-space:nowrap}.method-tabs{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;margin-top:12px}.method-tabs button{min-height:32px;border:1px solid #d5dce5;border-radius:6px;color:#536171;background:#fff;font-size:12px;font-weight:800}.method-tabs button.active{color:#fff;border-color:#1b6b65;background:#1b6b65}.endpoint-count{margin:12px 2px 8px;color:#6b7582;font-size:13px}.endpoint-list{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:6px;padding-right:4px}.endpoint-item{display:grid;grid-template-columns:64px minmax(0,1fr);align-items:start;gap:10px;width:100%;min-height:66px;padding:10px;border:1px solid transparent;border-radius:7px;text-align:left;background:#fff}.endpoint-item:hover{background:#f6f8fa}.endpoint-item.selected{border-color:#1b6b65;background:#edf7f5}.endpoint-main{min-width:0}.endpoint-main strong,.endpoint-main small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-main strong{margin-bottom:4px;color:#1d2732;font-size:14px}.endpoint-main small{color:#647182;font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.method{display:inline-flex;align-items:center;justify-content:center;width:58px;height:24px;border-radius:5px;color:#fff;font-size:11px;font-weight:900}.method-get{background:#246bce}.method-post{background:#168456}.method-put{background:#9a6200}.method-delete{background:#c23131}.method-patch{background:#7953b8}.method-options,.method-head{background:#52606f}.detail-pane{overflow:auto}.opened-api-tabs{position:sticky;top:0;z-index:5;display:flex;align-items:flex-end;gap:4px;overflow-x:auto;overflow-y:hidden;min-height:47px;padding:10px 12px 0;border-bottom:1px solid #dfe5eb;background:#f7f9fb}.opened-api-tab{--tab-accent: #52606f;--tab-soft: #eef2f6;display:inline-grid;grid-template-columns:auto minmax(100px,210px) 20px;align-items:center;gap:7px;min-width:180px;max-width:280px;height:36px;padding:7px 8px 8px;border:1px solid color-mix(in srgb,var(--tab-accent) 45%,#d5dce5);border-bottom-color:#dfe5eb;border-radius:7px 7px 0 0;text-align:left;background:var(--tab-soft);cursor:pointer}.opened-api-tab-get{--tab-accent: #246bce;--tab-soft: #eef5ff}.opened-api-tab-post{--tab-accent: #168456;--tab-soft: #edf8f2}.opened-api-tab-put{--tab-accent: #9a6200;--tab-soft: #fff5e4}.opened-api-tab-delete{--tab-accent: #c23131;--tab-soft: #fff0f0}.opened-api-tab-patch{--tab-accent: #7953b8;--tab-soft: #f4efff}.opened-api-tab-options,.opened-api-tab-head{--tab-accent: #52606f;--tab-soft: #f0f3f6}.opened-api-tab.active{position:relative;margin-bottom:-1px;border-color:var(--tab-accent);border-bottom-color:#fff;background:#fff;box-shadow:inset 0 3px 0 var(--tab-accent)}.opened-api-tab-text{min-width:0}.opened-api-tab-text strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opened-api-tab-text strong{color:#1d2732;font-size:12px;font-weight:800}.opened-api-tab-method{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:18px;padding:0 5px;border-radius:4px;color:#fff;font-size:9px;font-weight:900;line-height:1}.opened-api-tab-close{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:5px;color:var(--tab-accent);background:transparent;cursor:pointer}.opened-api-tab-close:hover{color:#b63831;background:#fff0ef}.endpoint-detail{padding:22px}.detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-bottom:18px;border-bottom:1px solid #e1e6ec}.detail-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.endpoint-title-line{display:flex;align-items:center;gap:10px}.endpoint-title-line h2{margin:0;color:#121923;font-size:22px;line-height:1.25}.path-row{display:flex;align-items:center;gap:8px;min-width:0;margin-top:10px}.path-line{display:block;min-width:0;color:#354253;font-size:13px;white-space:normal;word-break:break-all}.path-copy-button{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;gap:4px;min-height:28px;padding:0 8px;border:1px solid #d4dce5;border-radius:6px;color:#415166;background:#fff;font-size:12px;font-weight:800}.path-copy-button:hover{border-color:#9fb0c1;background:#f7f9fb}.tag-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.tag-row span{padding:4px 8px;border-radius:5px;color:#475364;background:#edf1f5;font-size:12px;font-weight:700}.description{margin:16px 0 0;color:#4f5c6a;line-height:1.7}.copy-preview{margin-top:18px;border:1px solid #d9e0e7;border-radius:8px;background:#f8fafb}.copy-preview-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;border-bottom:1px solid #dfe5eb}.copy-tabs{display:inline-flex;gap:4px;padding:3px;border:1px solid #d4dce5;border-radius:7px;background:#fff}.copy-tabs button{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 10px;border:0;border-radius:5px;color:#566373;background:transparent;font-size:13px;font-weight:800}.copy-tabs button.active{color:#fff;background:#1b6b65}.copy-preview-content{overflow:auto;min-height:calc(3 * 1.6em + 28px);max-height:calc(25.6em + 28px);margin:0;padding:14px;color:#e5edf6;background:#111827;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}.request-tester{display:grid;gap:14px;padding:14px;background:#fff}.endpoint-links-config{display:grid;gap:12px;padding:14px;background:#fff}.links-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.links-actions,.link-editor-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.link-editor-panel{min-width:0}.link-button{text-decoration:none}.request-line{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:end;gap:10px}.request-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.request-line label,.tester-form-grid label,.param-editor label{display:grid;gap:5px;min-width:0;color:#647182;font-size:12px;font-weight:800}.request-line input,.tester-form-grid input,.tester-form-grid select,.param-editor input{width:100%;min-height:36px;padding:0 10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#15202c;background:#fff}.request-preview{display:block;overflow:hidden;padding:9px 10px;border:1px solid #dfe5eb;border-radius:6px;color:#334254;background:#f7f9fb;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.tester-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.tester-panel{min-width:0;padding:12px;border:1px solid #dfe5eb;border-radius:7px;background:#fbfcfd}.tester-panel-title{display:flex;align-items:center;gap:6px;margin-bottom:10px;color:#243242;font-size:13px;font-weight:900}.tester-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.param-editor+.param-editor{margin-top:12px}.param-editor h4{margin:0 0 8px;color:#516070;font-size:12px}.param-editor label+label{margin-top:8px}.param-editor span{display:inline-flex;align-items:center;gap:3px}.param-editor b{color:#c23131}.tester-panel textarea{width:100%;min-height:168px;resize:vertical;padding:10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#1f2b38;background:#fff;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5}.tester-panel textarea:disabled{color:#8792a1;background:#f2f5f8}.response-panel{background:#fff}.response-meta-line{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.response-meta-line span{padding:5px 8px;border-radius:5px;color:#536171;background:#eef2f6;font-size:12px;font-weight:800}.response-meta-line .status-ok{color:#176b4f;background:#e5f6ef}.response-meta-line .status-error{color:#a8322b;background:#fff0ef}.response-panel pre{overflow:auto;max-height:360px;margin:0;padding:12px;border-radius:6px;color:#202a36;background:#f7f9fb;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.55}.detail-section{padding:20px 0;border-bottom:1px solid #e8edf2}.section-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.section-title h3{margin:0;font-size:16px}.section-title span{min-width:28px;padding:3px 8px;border-radius:999px;color:#1b6b65;background:#e7f4f2;text-align:center;font-size:12px;font-weight:800}.media-block+.media-block,.response-block+.response-block{margin-top:18px}.media-block h4{margin:0 0 8px;color:#516070;font-family:SFMono-Regular,Consolas,monospace;font-size:13px}.response-heading{display:flex;align-items:center;gap:10px;margin-bottom:10px}.response-heading strong{padding:4px 8px;border-radius:5px;color:#fff;background:#202a36;font-size:12px}.response-heading span{color:#657181;font-size:13px}.table-wrap{overflow:auto;border:1px solid #dfe5eb;border-radius:7px}table{width:100%;min-width:920px;border-collapse:collapse;font-size:13px}th,td{padding:10px 12px;border-bottom:1px solid #edf1f4;text-align:left;vertical-align:top}th{position:sticky;top:0;z-index:1;color:#526171;background:#f7f9fb;font-size:12px;font-weight:800}tr:last-child td{border-bottom:0}td code{color:#17202b;font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.muted{margin:0;color:#798596}.inline-error{display:flex;align-items:center;gap:8px;margin-top:12px;padding:10px 12px;border:1px solid #f1c1bd;border-radius:7px;color:#9a2d27;background:#fff4f3}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:grid;place-items:center;padding:20px;background:#1219237a;animation:backdrop-enter .14s ease-out}.import-dialog{width:min(720px,100%);max-height:calc(100vh - 40px);overflow:auto;border-radius:8px;border:1px solid #d7dde4;background:#fff;box-shadow:0 18px 60px #12192338}.auth-dialog{width:min(560px,100%);max-height:calc(100vh - 40px);overflow:auto;border-radius:8px;border:1px solid #d7dde4;background:#fff;box-shadow:0 18px 60px #12192338}.api-config-dialog{width:80vw;min-width:1000px;max-width:80vw;max-height:calc(100vh - 40px);overflow:auto;border-radius:8px;border:1px solid #d7dde4;background:#fff;box-shadow:0 18px 60px #12192338}.import-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px 14px;border-bottom:1px solid #e5eaf0}.import-dialog-header h2{margin:0;font-size:20px}.import-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:800;white-space:nowrap}.import-badge.running{color:#8a5b00;background:#fff4d8}.import-badge.success{color:#176b4f;background:#e5f6ef}.import-badge.error{color:#a8322b;background:#fff0ef}.progress-track{height:8px;margin:16px 20px 0;overflow:hidden;border-radius:999px;background:#e9eef3}.progress-bar{height:100%;border-radius:inherit;background:#1b6b65;transition:width .24s ease}.progress-bar.running{background:linear-gradient(90deg,#1b6b65,#4f8fcb)}.progress-bar.success{background:#168456}.progress-bar.error{background:#c23131}.import-summary{display:grid;gap:12px;padding:18px 20px}.auth-dialog-body{display:grid;gap:14px;padding:18px 20px}.api-config-body{display:grid;gap:14px;padding:18px 20px;background:#f7f9fb}.api-config-tabs{display:inline-flex;width:fit-content;gap:4px;padding:3px;border:1px solid #d4dce5;border-radius:7px;background:#fff}.api-config-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 12px;border:0;border-radius:5px;color:#566373;background:transparent;font-size:13px;font-weight:800}.api-config-tabs button.active{color:#fff;background:#1b6b65}.api-config-errors{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid #efcbc8;border-radius:7px;color:#8f2f29;background:#fff7f6}.api-config-errors strong{display:block;margin-bottom:4px;font-size:13px}.api-config-errors p{margin:0;font-size:12px;line-height:1.45}.api-cli-editor{width:100%;min-height:calc(4.65em + 24px);max-height:calc(24.8em + 24px);overflow-y:auto;resize:vertical;padding:12px;border:1px solid #334155;border-radius:7px;outline:0;color:#e5edf6;background:#111827;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.55}.api-cli-editor::placeholder{color:#94a3b8}.api-cli-editor:focus{border-color:#5aa69d;box-shadow:0 0 0 3px #5aa69d38}.api-config-section{display:grid;gap:12px;padding:14px;border:1px solid #dfe5eb;border-radius:8px;background:#fff}.section-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.section-title-row h3{margin:0;color:#243242;font-size:15px}.section-title-row p{margin:4px 0 0;color:#657181;font-size:12px}.section-title-row code{max-width:420px;overflow:hidden;padding:5px 7px;border:1px solid #dce2e9;border-radius:6px;color:#415166;background:#f7f9fb;text-overflow:ellipsis;white-space:nowrap}.api-config-grid{display:grid;grid-template-columns:140px repeat(2,minmax(0,1fr));gap:10px}.api-config-grid.compact{grid-template-columns:repeat(3,minmax(0,1fr)) auto}.api-config-grid label,.field-config-row label{display:grid;gap:5px;min-width:0;color:#647182;font-size:12px;font-weight:800}.api-config-grid input,.api-config-grid select,.api-config-grid textarea,.field-config-row input,.field-config-row select{width:100%;min-height:36px;padding:0 10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#15202c;background:#fff}.api-config-grid textarea{min-height:82px;padding:10px;resize:vertical;line-height:1.45}.span-2{grid-column:span 2}.span-all{grid-column:1 / -1}.inline-check{display:inline-flex;align-items:center;gap:6px;min-height:32px;color:#415166;font-size:13px;font-weight:800}.field-config-table{display:grid;gap:8px;overflow-x:auto}.field-config-item{display:grid;gap:8px}.field-config-head,.field-config-row{display:grid;grid-template-columns:minmax(150px,1.1fr) 120px 58px minmax(180px,1.2fr) minmax(120px,.8fr) 38px;gap:8px;align-items:center;min-width:760px}.field-config-head.with-location,.field-config-row.with-location{grid-template-columns:98px minmax(150px,1.1fr) 120px 58px minmax(180px,1.2fr) minmax(120px,.8fr) 38px}.field-config-head{color:#657181;font-size:12px;font-weight:900}.field-check{place-items:center}.field-check input,.inline-check input{width:16px;min-height:16px}.icon-danger-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #efcbc8;border-radius:6px;color:#b63831;background:#fff7f6}.field-add-row{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;border:1px dashed #b8c4d0;border-radius:6px;color:#415166;background:#fbfcfd;font-weight:800}.child-field-config{display:grid;gap:8px;margin-left:18px;padding:10px;border-left:3px solid #b9d7d3;border-radius:0 7px 7px 0;background:#f7fbfa}.child-field-title{color:#415166;font-size:12px;font-weight:900}.response-config{display:grid;gap:10px;padding:12px;border:1px solid #e3e8ee;border-radius:7px;background:#fbfcfd}.auth-message{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border:1px solid #d9e0e7;border-radius:7px;color:#2f3d4d;background:#f7f9fb}.auth-target{display:grid;gap:4px}.auth-target span,.auth-fields label{color:#657181;font-size:12px;font-weight:800}.auth-target strong{overflow-wrap:anywhere;color:#1f2b38;font-family:SFMono-Regular,Consolas,monospace;font-size:13px;line-height:1.5}.auth-fields{display:grid;gap:10px}.auth-fields label{display:grid;gap:6px}.auth-fields input{width:100%;min-height:38px;padding:0 10px;border:1px solid #cfd7e1;border-radius:6px;outline:0;color:#15202c;background:#fff}.import-summary div:not(.import-counts):not(.import-error){display:grid;gap:4px}.import-summary span{color:#657181;font-size:12px;font-weight:700}.import-summary strong{overflow-wrap:anywhere;color:#1f2b38;font-family:SFMono-Regular,Consolas,monospace;font-size:13px;line-height:1.5}.import-counts{display:flex;flex-wrap:wrap;gap:8px}.import-counts span{padding:6px 9px;border-radius:6px;color:#1b6b65;background:#e7f4f2}.import-error{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border:1px solid #f1c1bd;border-radius:7px;color:#9a2d27;background:#fff4f3}.import-dialog-actions{display:flex;justify-content:flex-end;padding:0 20px 18px}.state-screen,.empty-state{display:grid;place-items:center;align-content:center;min-height:100vh;padding:24px;text-align:center}.empty-state{min-height:60vh}.state-icon{width:42px;height:42px;margin-bottom:14px;color:#1b6b65}.state-icon.error{color:#b8312d}.state-screen h1,.empty-state h2{margin-bottom:8px}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes backdrop-enter{0%{opacity:0}}@keyframes dialog-enter{0%{opacity:0;transform:translateY(8px)}}@media(max-width:980px){.app-shell{height:auto;padding:12px;overflow:visible}.topbar{align-items:flex-start;flex-direction:column}.topbar-actions{width:100%;justify-content:space-between}.version-switcher,.version-switcher select{width:100%}.version-manager{width:100%;min-width:0}.version-item-main,.version-env-editor,.version-env-summary{grid-template-columns:1fr}.version-item-stats,.version-item-actions{justify-content:flex-start}.source-panel{grid-template-columns:1fr}.source-panel-header{align-items:stretch;flex-direction:column}.source-panel-header>.secondary-button,.source-panel-actions,.source-tabs{width:100%}.source-panel-actions{justify-content:stretch}.source-panel-actions .secondary-button{flex:1 1 180px}.source-tabs{flex-wrap:wrap}.document-dialog-tabs{width:100%}.source-form,.source-auth,.source-auth-fields,.api-config-grid,.api-config-grid.compact{grid-template-columns:1fr}.span-2,.span-all{grid-column:auto}.workspace{grid-template-columns:1fr;flex:none;height:auto}.sidebar{max-height:46vh}.detail-pane{min-height:60vh}.detail-header{flex-direction:column}.copy-preview-toolbar{align-items:stretch;flex-direction:column}.copy-tabs,.copy-inline-button{width:100%}.copy-tabs button{flex:1;justify-content:center}.request-line,.tester-grid,.links-grid,.tester-form-grid{grid-template-columns:1fr}}@media(max-width:640px){.filters{grid-template-columns:1fr}.method-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}.topbar-actions,.sync-meta{align-items:stretch;flex-direction:column;width:100%}.primary-button,.secondary-button,.copy-inline-button,.source-tabs{width:100%}.source-tabs button{flex:1}.document-dialog{max-height:calc(100vh - 20px)}.document-dialog-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;padding-inline:12px}.document-dialog-tabs button{min-width:0;padding-inline:6px}.document-dialog-body{min-height:210px;padding:16px}.document-dialog-actions .clear-document-source{margin-right:0}.import-dialog-actions .secondary-button{width:100%}.import-dialog-actions{flex-direction:column-reverse;gap:8px}.endpoint-title-line{align-items:flex-start;flex-direction:column}}
package/dist/index.html CHANGED
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>API Skill Console</title>
7
- <script type="module" crossorigin src="/assets/index-CPxVZ06Y.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-BeAJ1G-n.css">
7
+ <script type="module" crossorigin src="/assets/index-CV6e3HAP.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-slFOragU.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/docs/cli.ja.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill CLI
2
2
 
3
- [English](cli.md) / [中文](cli.zh.md) / [한국어](cli.ko.md) / [日本語](cli.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/cli.md) / [中文](https://unpkg.com/apiskill@latest/docs/cli.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/cli.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/cli.ja.md)
4
4
 
5
5
  ## インストールと実行
6
6
 
package/docs/cli.ko.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill CLI
2
2
 
3
- [English](cli.md) / [中文](cli.zh.md) / [한국어](cli.ko.md) / [日本語](cli.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/cli.md) / [中文](https://unpkg.com/apiskill@latest/docs/cli.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/cli.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/cli.ja.md)
4
4
 
5
5
  ## 설치 및 실행
6
6
 
package/docs/cli.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # API Skill CLI
2
2
 
3
- [English](cli.md) / [中文](cli.zh.md) / [한국어](cli.ko.md) / [日本語](cli.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/cli.md) / [中文](https://unpkg.com/apiskill@latest/docs/cli.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/cli.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/cli.ja.md)
4
+
5
+ The CLI is primarily a predictable, scriptable interface for AI coding agents and automation. Human users can use the Web app for document browsing and maintenance.
4
6
 
5
7
  ## Install And Run
6
8
 
@@ -37,17 +39,17 @@ node scripts/apiskill-cli.mjs --help
37
39
  Check whether a usable cache is available:
38
40
 
39
41
  ```bash
40
- npm run cli -- check
41
- npm run cli -- check --json
42
+ apiskill check
43
+ apiskill check --json
42
44
  ```
43
45
 
44
46
  If no cache exists, `check` prints import examples.
45
47
 
46
48
  ```bash
47
- npm run cli -- import https://example.com/openapi.json
48
- npm run cli -- crawl https://example.com/swagger
49
- npm run cli -- import-file ./openapi.yaml
50
- npm run cli -- import-curl --file ./request.curl
49
+ apiskill import https://example.com/openapi.json
50
+ apiskill crawl https://example.com/swagger
51
+ apiskill import-file ./openapi.yaml
52
+ apiskill import-curl --file ./request.curl
51
53
  ```
52
54
 
53
55
  Use `--auth username:password` with `import` or `crawl` when the document endpoint requires basic auth.
@@ -57,25 +59,27 @@ Use `--auth username:password` with `import` or `crawl` when the document endpoi
57
59
  When there is no upstream OpenAPI document yet, create a blank local document version:
58
60
 
59
61
  ```bash
60
- npm run cli -- document create --title "My API" --doc-version 1.0.0
61
- npm run cli -- document create --title "My API" --doc-version 1.0.0 --description "Internal service contract" --json
62
+ apiskill document create --title "My API" --doc-version 1.0.0
63
+ apiskill document create --title "My API" --doc-version 1.0.0 --description "Internal service contract" --json
62
64
  ```
63
65
 
64
- The created document is saved as the latest cached version. Add endpoints to it with `api create --version <versionId>` or omit `--version` when the blank document is already latest.
66
+ The created document is saved as the latest cached version. Read `meta.versionId` from the JSON response and pass it explicitly to later writes. `api create` defaults to the latest version when `--version` is omitted, but explicit version IDs keep agent workflows deterministic.
65
67
 
66
68
  ## Query Versions And APIs
67
69
 
68
70
  ```bash
69
- npm run cli -- versions
70
- npm run cli -- versions --json
71
- npm run cli -- query /admin/api/v1/user/list --method GET
72
- npm run cli -- query user --method POST --limit 10
73
- npm run cli -- api list --query user --method post
74
- npm run cli -- api query GET /api/v1/user --format cli
71
+ apiskill versions
72
+ apiskill versions --json
73
+ apiskill query /admin/api/v1/user/list --method GET
74
+ apiskill query user --method POST --limit 10
75
+ apiskill api list --query user --method post
76
+ apiskill api query GET /api/v1/user --format cli
75
77
  ```
76
78
 
77
79
  `query` behaves like the MCP `apiskill_query_api` tool: exact single matches return one API config, while multiple matches return candidates.
78
80
 
81
+ `api query` defaults to JSON and does not accept `--json`. Use `--format cli` to get a normalized config that can be edited and sent back to `api edit`.
82
+
79
83
  ## Start A MOCK Server
80
84
 
81
85
  After an API document is cached, start a local MOCK API server:
@@ -91,11 +95,18 @@ The MOCK server generates local API routes from the current OpenAPI paths, HTTP
91
95
  ## Create, Edit, And Delete Manual APIs
92
96
 
93
97
  ```bash
94
- npm run cli -- api create --file ./api-config.yaml
95
- npm run cli -- api edit GET /api/v1/user --file ./api-config.json --version 20260429T000000Z-manual-user
96
- npm run cli -- api delete GET /api/v1/user --version 20260429T000000Z-manual-user
98
+ APISKILL_VERSION_ID="value-from-meta.versionId"
99
+ apiskill api create --version "$APISKILL_VERSION_ID" --file ./api-config.yaml --json
100
+ apiskill api edit GET /api/v1/user --version "$APISKILL_VERSION_ID" --file ./api-config.json --json
101
+ apiskill api delete GET /api/v1/user --version "$APISKILL_VERSION_ID" --json
97
102
  ```
98
103
 
104
+ The method and path passed to `api edit` identify the original operation. The replacement file may contain a different method or path. Quote paths that contain `{id}` or other shell-sensitive characters.
105
+
106
+ When adding several APIs, reuse the exact same version ID for every command. Agents should run writes sequentially for compatibility with older releases and finish with `apiskill api list --version "$APISKILL_VERSION_ID" --json` to verify every expected method/path. The current CLI also uses a cross-process cache write lock, so accidentally parallel commands are serialized instead of overwriting one another.
107
+
108
+ An OpenAPI operation is unique by method/path. Creating the same pair again replaces that operation. `meta.paths` is the number of distinct paths, so use `api list` when validating the total operation count.
109
+
99
110
  CLI config can be JSON or YAML with root key `api`, `config`, or `operation`.
100
111
 
101
112
  Minimal JSON example:
package/docs/cli.zh.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # API Skill CLI
2
2
 
3
- [English](cli.md) / [中文](cli.zh.md) / [한국어](cli.ko.md) / [日本語](cli.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/cli.md) / [中文](https://unpkg.com/apiskill@latest/docs/cli.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/cli.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/cli.ja.md)
4
+
5
+ CLI 主要为 AI 编码 Agent 和自动化任务提供稳定、可脚本化的接口。需要人工浏览和维护文档时,建议使用 Web 端。
4
6
 
5
7
  ## 安装和运行
6
8
 
@@ -37,17 +39,17 @@ node scripts/apiskill-cli.mjs --help
37
39
  先检查当前是否有可用缓存:
38
40
 
39
41
  ```bash
40
- npm run cli -- check
41
- npm run cli -- check --json
42
+ apiskill check
43
+ apiskill check --json
42
44
  ```
43
45
 
44
46
  如果没有可用缓存,`check` 会输出导入文档的示例。
45
47
 
46
48
  ```bash
47
- npm run cli -- import https://example.com/openapi.json
48
- npm run cli -- crawl https://example.com/swagger
49
- npm run cli -- import-file ./openapi.yaml
50
- npm run cli -- import-curl --file ./request.curl
49
+ apiskill import https://example.com/openapi.json
50
+ apiskill crawl https://example.com/swagger
51
+ apiskill import-file ./openapi.yaml
52
+ apiskill import-curl --file ./request.curl
51
53
  ```
52
54
 
53
55
  如果文档地址需要 basic auth,`import` 和 `crawl` 可以加 `--auth username:password`。
@@ -57,25 +59,27 @@ npm run cli -- import-curl --file ./request.curl
57
59
  如果还没有上游 OpenAPI 文档,可以先创建一份本地空白文档版本:
58
60
 
59
61
  ```bash
60
- npm run cli -- document create --title "My API" --doc-version 1.0.0
61
- npm run cli -- document create --title "My API" --doc-version 1.0.0 --description "Internal service contract" --json
62
+ apiskill document create --title "My API" --doc-version 1.0.0
63
+ apiskill document create --title "My API" --doc-version 1.0.0 --description "Internal service contract" --json
62
64
  ```
63
65
 
64
- 创建后的文档会保存为最新缓存版本。后续可以用 `api create --version <versionId>` 追加接口;如果空白文档已经是最新版本,也可以省略 `--version`。
66
+ 创建后的文档会保存为最新缓存版本。从 JSON 结果读取 `meta.versionId`,后续写操作都显式传入这个值。`api create` 省略 `--version` 时会默认写入最新版本,但显式版本 ID 能让 Agent 的操作目标保持确定。
65
67
 
66
68
  ## 查询版本和接口
67
69
 
68
70
  ```bash
69
- npm run cli -- versions
70
- npm run cli -- versions --json
71
- npm run cli -- query /admin/api/v1/user/list --method GET
72
- npm run cli -- query user --method POST --limit 10
73
- npm run cli -- api list --query user --method post
74
- npm run cli -- api query GET /api/v1/user --format cli
71
+ apiskill versions
72
+ apiskill versions --json
73
+ apiskill query /admin/api/v1/user/list --method GET
74
+ apiskill query user --method POST --limit 10
75
+ apiskill api list --query user --method post
76
+ apiskill api query GET /api/v1/user --format cli
75
77
  ```
76
78
 
77
79
  `query` 和 MCP 的 `apiskill_query_api` 行为一致:精确单条匹配时返回一个接口配置,多条匹配时返回候选列表。
78
80
 
81
+ `api query` 默认输出 JSON,不支持 `--json`。需要可修改并传给 `api edit` 的标准配置时使用 `--format cli`。
82
+
79
83
  ## 启动 MOCK 服务
80
84
 
81
85
  已有 API 文档缓存后,可以启动本地 MOCK API 服务:
@@ -91,11 +95,18 @@ MOCK 服务会根据当前 OpenAPI 文档里的接口路径、HTTP 方法和响
91
95
  ## 创建、编辑、删除手动接口
92
96
 
93
97
  ```bash
94
- npm run cli -- api create --file ./api-config.yaml
95
- npm run cli -- api edit GET /api/v1/user --file ./api-config.json --version 20260429T000000Z-manual-user
96
- npm run cli -- api delete GET /api/v1/user --version 20260429T000000Z-manual-user
98
+ APISKILL_VERSION_ID="value-from-meta.versionId"
99
+ apiskill api create --version "$APISKILL_VERSION_ID" --file ./api-config.yaml --json
100
+ apiskill api edit GET /api/v1/user --version "$APISKILL_VERSION_ID" --file ./api-config.json --json
101
+ apiskill api delete GET /api/v1/user --version "$APISKILL_VERSION_ID" --json
97
102
  ```
98
103
 
104
+ `api edit` 后面的 method 和 path 用于定位旧接口,替换文件可以包含不同的 method 或 path。路径中包含 `{id}` 等 shell 特殊字符时应加引号。
105
+
106
+ 批量新增多个接口时,每条命令必须复用同一个版本 ID。为了兼容旧版本,Agent 应串行执行写命令,并在结束后运行 `apiskill api list --version "$APISKILL_VERSION_ID" --json`,核对所有预期的 method/path。当前 CLI 也使用跨进程缓存写锁,意外并行的命令会被串行处理,不再互相覆盖。
107
+
108
+ OpenAPI 使用 method/path 组合唯一标识接口;再次创建相同组合会替换原接口。`meta.paths` 是不同路径的数量,校验接口操作总数时应以 `api list` 为准。
109
+
99
110
  CLI 配置可以是 JSON 或 YAML,根字段支持 `api`、`config` 或 `operation`。
100
111
 
101
112
  最小 JSON 示例:
package/docs/mcp.ja.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill MCP
2
2
 
3
- [English](mcp.md) / [中文](mcp.zh.md) / [한국어](mcp.ko.md) / [日本語](mcp.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/mcp.md) / [中文](https://unpkg.com/apiskill@latest/docs/mcp.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/mcp.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/mcp.ja.md)
4
4
 
5
5
  ## ローカル Codex 設定
6
6
 
package/docs/mcp.ko.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill MCP
2
2
 
3
- [English](mcp.md) / [中文](mcp.zh.md) / [한국어](mcp.ko.md) / [日本語](mcp.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/mcp.md) / [中文](https://unpkg.com/apiskill@latest/docs/mcp.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/mcp.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/mcp.ja.md)
4
4
 
5
5
  ## 로컬 Codex 설정
6
6
 
package/docs/mcp.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # API Skill MCP
2
2
 
3
- [English](mcp.md) / [中文](mcp.zh.md) / [한국어](mcp.ko.md) / [日本語](mcp.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/mcp.md) / [中文](https://unpkg.com/apiskill@latest/docs/mcp.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/mcp.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/mcp.ja.md)
4
+
5
+ The MCP server is the native AI Agent interface for querying and maintaining the same OpenAPI documents used by the Web app and CLI.
4
6
 
5
7
  ## Local Codex Configuration
6
8
 
package/docs/mcp.zh.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # API Skill MCP
2
2
 
3
- [English](mcp.md) / [中文](mcp.zh.md) / [한국어](mcp.ko.md) / [日本語](mcp.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/mcp.md) / [中文](https://unpkg.com/apiskill@latest/docs/mcp.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/mcp.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/mcp.ja.md)
4
+
5
+ MCP 服务是面向 AI Agent 的原生接口,用于查询和维护与 Web、CLI 共用的 OpenAPI 文档。
4
6
 
5
7
  ## 本地 Codex 配置
6
8
 
package/docs/web.ja.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill Web アプリ
2
2
 
3
- [English](web.md) / [中文](web.zh.md) / [한국어](web.ko.md) / [日本語](web.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/web.md) / [中文](https://unpkg.com/apiskill@latest/docs/web.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/web.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/web.ja.md)
4
4
 
5
5
  ## 起動
6
6
 
package/docs/web.ko.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill Web 앱
2
2
 
3
- [English](web.md) / [中文](web.zh.md) / [한국어](web.ko.md) / [日本語](web.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/web.md) / [中文](https://unpkg.com/apiskill@latest/docs/web.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/web.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/web.ja.md)
4
4
 
5
5
  ## 시작
6
6
 
package/docs/web.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill Web App
2
2
 
3
- [English](web.md) / [中文](web.zh.md) / [한국어](web.ko.md) / [日本語](web.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/web.md) / [中文](https://unpkg.com/apiskill@latest/docs/web.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/web.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/web.ja.md)
4
4
 
5
5
  ## Start
6
6
 
package/docs/web.zh.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Skill Web 端
2
2
 
3
- [English](web.md) / [中文](web.zh.md) / [한국어](web.ko.md) / [日本語](web.ja.md)
3
+ [English](https://unpkg.com/apiskill@latest/docs/web.md) / [中文](https://unpkg.com/apiskill@latest/docs/web.zh.md) / [한국어](https://unpkg.com/apiskill@latest/docs/web.ko.md) / [日本語](https://unpkg.com/apiskill@latest/docs/web.ja.md)
4
4
 
5
5
  ## 启动
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apiskill",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src",
@@ -21,6 +21,7 @@
21
21
  "scripts": {
22
22
  "dev": "vite --host 0.0.0.0 && node scripts/mcp-server.mjs",
23
23
  "build": "tsc -b && vite build",
24
+ "test:cli-concurrency": "node scripts/test-cli-concurrency.mjs",
24
25
  "prepack": "npm run build",
25
26
  "preview": "vite preview --host 0.0.0.0",
26
27
  "mcp": "node scripts/mcp-server.mjs",
@@ -32,13 +33,13 @@
32
33
  "lucide-react": "^0.468.0",
33
34
  "react": "^18.3.1",
34
35
  "react-dom": "^18.3.1",
35
- "typescript": "^5.8.3",
36
36
  "vite": "^6.0.7",
37
37
  "yaml": "^2.8.3"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.2",
41
41
  "@types/react": "^18.3.18",
42
- "@types/react-dom": "^18.3.5"
42
+ "@types/react-dom": "^18.3.5",
43
+ "typescript": "^7.0.2"
43
44
  }
44
45
  }
@@ -49,7 +49,7 @@ Examples:
49
49
  apiskill query /admin/api/v1/activity --method GET
50
50
  apiskill api list --query user --method post
51
51
  apiskill api query GET /api/v1/user --format cli
52
- apiskill api create --file ./api-config.yaml
52
+ apiskill api create --version <versionId> --file ./api-config.yaml
53
53
  apiskill api edit GET /api/v1/user --file ./api-config.json --version 20260429T000000Z-manual-user
54
54
  apiskill api delete GET /api/v1/user --version 20260429T000000Z-manual-user
55
55
 
@@ -239,8 +239,8 @@ api
239
239
 
240
240
  api
241
241
  .command('create')
242
- .description('Create an API operation. If --version is omitted, a new manual version is created.')
243
- .option('-v, --version <versionId>', 'Version id to append to')
242
+ .description('Create an API operation in a cached version.')
243
+ .option('-v, --version <versionId>', 'Version id. Defaults to latest; creates a manual version only if the cache is empty.')
244
244
  .option('-f, --file <file>', 'JSON/YAML/CLI config file')
245
245
  .option('-c, --config <text>', 'Inline JSON/YAML/CLI config')
246
246
  .option('-j, --json', 'Print JSON')
@@ -22,10 +22,11 @@ export const importExamples = {
22
22
  'Open the local URL, then import a direct OpenAPI JSON/YAML URL, crawl Swagger UI / Knife4j / Redoc, upload a file, or paste a curl command.',
23
23
  ],
24
24
  cli: [
25
- 'npm run cli -- import https://example.com/openapi.json',
26
- 'npm run cli -- crawl https://example.com/swagger',
27
- 'npm run cli -- import-file ./openapi.yaml',
28
- 'npm run cli -- import-curl --file ./request.curl',
25
+ 'apiskill import https://example.com/openapi.json',
26
+ 'apiskill crawl https://example.com/swagger',
27
+ 'apiskill import-file ./openapi.yaml',
28
+ 'apiskill import-curl --file ./request.curl',
29
+ 'apiskill document create --title "My API" --doc-version 1.0.0 --json',
29
30
  ],
30
31
  mcp: [
31
32
  { tool: 'apiskill_import_url', arguments: { url: 'https://example.com/openapi.json' } },