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.
- package/MCP.md +5 -5
- package/README.ja.md +8 -8
- package/README.ko.md +8 -8
- package/README.md +113 -12
- package/README.zh.md +113 -12
- package/dist/assets/{index-CPxVZ06Y.js → index-CV6e3HAP.js} +55 -55
- package/dist/assets/index-slFOragU.css +1 -0
- package/dist/index.html +2 -2
- package/docs/cli.ja.md +1 -1
- package/docs/cli.ko.md +1 -1
- package/docs/cli.md +30 -19
- package/docs/cli.zh.md +30 -19
- package/docs/mcp.ja.md +1 -1
- package/docs/mcp.ko.md +1 -1
- package/docs/mcp.md +3 -1
- package/docs/mcp.zh.md +3 -1
- package/docs/web.ja.md +1 -1
- package/docs/web.ko.md +1 -1
- package/docs/web.md +1 -1
- package/docs/web.zh.md +1 -1
- package/package.json +4 -3
- package/scripts/apiskill-cli.mjs +3 -3
- package/scripts/lib/apiskill-core.mjs +5 -4
- package/scripts/lib/openapi-store.mjs +142 -51
- package/scripts/mcp-server.mjs +2 -2
- package/scripts/test-cli-concurrency.mjs +110 -0
- package/src/App.tsx +12 -0
- package/src/styles.css +12 -3
- package/tsconfig.json +3 -3
- package/dist/assets/index-BeAJ1G-n.css +0 -1
|
@@ -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-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
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
|
-
|
|
41
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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.
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
+
apiskill check
|
|
43
|
+
apiskill check --json
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
如果没有可用缓存,`check` 会输出导入文档的示例。
|
|
45
47
|
|
|
46
48
|
```bash
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
66
|
+
创建后的文档会保存为最新缓存版本。从 JSON 结果读取 `meta.versionId`,后续写操作都显式传入这个值。`api create` 省略 `--version` 时会默认写入最新版本,但显式版本 ID 能让 Agent 的操作目标保持确定。
|
|
65
67
|
|
|
66
68
|
## 查询版本和接口
|
|
67
69
|
|
|
68
70
|
```bash
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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.
|
|
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
|
}
|
package/scripts/apiskill-cli.mjs
CHANGED
|
@@ -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
|
|
243
|
-
.option('-v, --version <versionId>', 'Version id 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
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
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' } },
|