vskill 1.0.16 → 1.0.18
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/README.md +84 -9
- package/agents.json +3 -1
- package/dist/agents/agents-registry.d.ts +61 -0
- package/dist/agents/agents-registry.js +203 -0
- package/dist/agents/agents-registry.js.map +1 -1
- package/dist/api/client.d.ts +85 -0
- package/dist/api/client.js +193 -24
- package/dist/api/client.js.map +1 -1
- package/dist/commands/add-lockfile.d.ts +6 -0
- package/dist/commands/add-lockfile.js +10 -0
- package/dist/commands/add-lockfile.js.map +1 -1
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +110 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/auth.d.ts +23 -0
- package/dist/commands/auth.js +105 -11
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/eval/serve.d.ts +2 -0
- package/dist/commands/eval/serve.js +126 -4
- package/dist/commands/eval/serve.js.map +1 -1
- package/dist/commands/orgs.d.ts +21 -0
- package/dist/commands/orgs.js +164 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/skill.js +14 -1
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/whoami.d.ts +29 -0
- package/dist/commands/whoami.js +119 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/discovery/github-tree.d.ts +23 -3
- package/dist/discovery/github-tree.js +172 -24
- package/dist/discovery/github-tree.js.map +1 -1
- package/dist/eval/anthropic-catalog.js +32 -2
- package/dist/eval/anthropic-catalog.js.map +1 -1
- package/dist/eval/batch-judge.js +1 -0
- package/dist/eval/batch-judge.js.map +1 -1
- package/dist/eval/llm.d.ts +1 -1
- package/dist/eval/llm.js +104 -2
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.d.ts +2 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js +20 -0
- package/dist/eval-server/__tests__/helpers/studio-token-test-helpers.js.map +1 -0
- package/dist/eval-server/active-tenant-routes.d.ts +15 -0
- package/dist/eval-server/active-tenant-routes.js +101 -0
- package/dist/eval-server/active-tenant-routes.js.map +1 -0
- package/dist/eval-server/api-routes.js +17 -2
- package/dist/eval-server/api-routes.js.map +1 -1
- package/dist/eval-server/desktop-open-routes.d.ts +8 -0
- package/dist/eval-server/desktop-open-routes.js +64 -0
- package/dist/eval-server/desktop-open-routes.js.map +1 -0
- package/dist/eval-server/eval-server.js +82 -5
- package/dist/eval-server/eval-server.js.map +1 -1
- package/dist/eval-server/export-skill-routes.d.ts +9 -0
- package/dist/eval-server/export-skill-routes.js +81 -0
- package/dist/eval-server/export-skill-routes.js.map +1 -0
- package/dist/eval-server/git-routes.d.ts +1 -0
- package/dist/eval-server/git-routes.js +101 -4
- package/dist/eval-server/git-routes.js.map +1 -1
- package/dist/eval-server/install-engine-routes.d.ts +3 -16
- package/dist/eval-server/install-engine-routes.js +9 -124
- package/dist/eval-server/install-engine-routes.js.map +1 -1
- package/dist/eval-server/install-jobs.d.ts +41 -0
- package/dist/eval-server/install-jobs.js +161 -0
- package/dist/eval-server/install-jobs.js.map +1 -0
- package/dist/eval-server/install-skill-routes.d.ts +74 -11
- package/dist/eval-server/install-skill-routes.js +506 -79
- package/dist/eval-server/install-skill-routes.js.map +1 -1
- package/dist/eval-server/install-state-routes.d.ts +4 -0
- package/dist/eval-server/install-state-routes.js +15 -1
- package/dist/eval-server/install-state-routes.js.map +1 -1
- package/dist/eval-server/oauth-github-routes.d.ts +2 -0
- package/dist/eval-server/oauth-github-routes.js +505 -0
- package/dist/eval-server/oauth-github-routes.js.map +1 -0
- package/dist/eval-server/platform-proxy.d.ts +17 -1
- package/dist/eval-server/platform-proxy.js +125 -13
- package/dist/eval-server/platform-proxy.js.map +1 -1
- package/dist/eval-server/plugin-cli-routes.js +9 -9
- package/dist/eval-server/plugin-cli-routes.js.map +1 -1
- package/dist/eval-server/remove-skill-routes.d.ts +18 -0
- package/dist/eval-server/remove-skill-routes.js +145 -0
- package/dist/eval-server/remove-skill-routes.js.map +1 -0
- package/dist/eval-server/router.d.ts +17 -3
- package/dist/eval-server/router.js +166 -9
- package/dist/eval-server/router.js.map +1 -1
- package/dist/eval-server/settings-store.js +1 -1
- package/dist/eval-server/settings-store.js.map +1 -1
- package/dist/eval-server/supported-agents-routes.d.ts +6 -0
- package/dist/eval-server/supported-agents-routes.js +41 -0
- package/dist/eval-server/supported-agents-routes.js.map +1 -0
- package/dist/eval-server/utils/spawn-env.d.ts +1 -0
- package/dist/eval-server/utils/spawn-env.js +47 -0
- package/dist/eval-server/utils/spawn-env.js.map +1 -0
- package/dist/eval-ui/assets/AdvancedTab-D8zbE5fH.js +1 -0
- package/dist/eval-ui/assets/{CreateSkillPage-CvdYq8Rr.js → CreateSkillPage-DOBhKdgr.js} +5 -5
- package/dist/eval-ui/assets/FindSkillsPalette-CyMmNPr-.js +2 -0
- package/dist/eval-ui/assets/GeneralTab-DYR9NWC4.js +1 -0
- package/dist/eval-ui/assets/PrivacyTab-CXIqQokl.js +1 -0
- package/dist/eval-ui/assets/{SearchPaletteCore-Bf3PBC64.js → SearchPaletteCore-Dn5gQJS_.js} +2 -2
- package/dist/eval-ui/assets/SkillDetailPanel-DTrRnyyJ.js +1 -0
- package/dist/eval-ui/assets/UpdateDropdown-Cvr2fe0z.js +1 -0
- package/dist/eval-ui/assets/UpdatesTab-DwJIUDPX.js +1 -0
- package/dist/eval-ui/assets/core-DZAvsxlC.js +1 -0
- package/dist/eval-ui/assets/event-CDYWU2X3.js +1 -0
- package/dist/eval-ui/assets/globals-BRZwPAPF.js +49 -0
- package/dist/eval-ui/assets/globals-C3oEdsJh.css +1 -0
- package/dist/eval-ui/assets/index-D7M0Jdss.js +1 -0
- package/dist/eval-ui/assets/lifecycle-DSleOV-l.js +1 -0
- package/dist/eval-ui/assets/lifecycle-d1Sm9Hts.css +1 -0
- package/dist/eval-ui/assets/main-D2shn1dH.js +87 -0
- package/dist/eval-ui/assets/preferences-BHZXB5dL.css +1 -0
- package/dist/eval-ui/assets/preferences-BKv6X7fK.js +2 -0
- package/dist/eval-ui/assets/useDesktopBridge-DxVWbYqK.js +2 -0
- package/dist/eval-ui/index.html +4 -2
- package/dist/eval-ui/lifecycle.html +33 -0
- package/dist/eval-ui/preferences.html +34 -0
- package/dist/index.js +47 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/bundle-files.d.ts +4 -0
- package/dist/installer/bundle-files.js +97 -0
- package/dist/installer/bundle-files.js.map +1 -0
- package/dist/installer/canonical.d.ts +31 -6
- package/dist/installer/canonical.js +48 -12
- package/dist/installer/canonical.js.map +1 -1
- package/dist/installer/clipboard-export.d.ts +19 -0
- package/dist/installer/clipboard-export.js +88 -0
- package/dist/installer/clipboard-export.js.map +1 -0
- package/dist/installer/multi-install.d.ts +43 -0
- package/dist/installer/multi-install.js +237 -0
- package/dist/installer/multi-install.js.map +1 -0
- package/dist/installer/transformers/aider.d.ts +2 -0
- package/dist/installer/transformers/aider.js +32 -0
- package/dist/installer/transformers/aider.js.map +1 -0
- package/dist/installer/transformers/continue-dev.d.ts +2 -0
- package/dist/installer/transformers/continue-dev.js +6 -0
- package/dist/installer/transformers/continue-dev.js.map +1 -0
- package/dist/installer/transformers/cursor.d.ts +2 -0
- package/dist/installer/transformers/cursor.js +24 -0
- package/dist/installer/transformers/cursor.js.map +1 -0
- package/dist/installer/transformers/github-copilot.d.ts +2 -0
- package/dist/installer/transformers/github-copilot.js +17 -0
- package/dist/installer/transformers/github-copilot.js.map +1 -0
- package/dist/installer/transformers/index.d.ts +78 -0
- package/dist/installer/transformers/index.js +13 -0
- package/dist/installer/transformers/index.js.map +1 -0
- package/dist/installer/transformers/junie.d.ts +2 -0
- package/dist/installer/transformers/junie.js +6 -0
- package/dist/installer/transformers/junie.js.map +1 -0
- package/dist/installer/transformers/kiro.d.ts +2 -0
- package/dist/installer/transformers/kiro.js +6 -0
- package/dist/installer/transformers/kiro.js.map +1 -0
- package/dist/installer/transformers/trae.d.ts +2 -0
- package/dist/installer/transformers/trae.js +6 -0
- package/dist/installer/transformers/trae.js.map +1 -0
- package/dist/installer/transformers/windsurf.d.ts +2 -0
- package/dist/installer/transformers/windsurf.js +12 -0
- package/dist/installer/transformers/windsurf.js.map +1 -0
- package/dist/installer/yaml-safe-mutate.d.ts +19 -0
- package/dist/installer/yaml-safe-mutate.js +184 -0
- package/dist/installer/yaml-safe-mutate.js.map +1 -0
- package/dist/lib/active-tenant.d.ts +36 -0
- package/dist/lib/active-tenant.js +120 -0
- package/dist/lib/active-tenant.js.map +1 -0
- package/dist/lib/github-fetch.d.ts +1 -0
- package/dist/lib/github-fetch.js +11 -1
- package/dist/lib/github-fetch.js.map +1 -1
- package/dist/lib/keychain.d.ts +15 -2
- package/dist/lib/keychain.js +156 -8
- package/dist/lib/keychain.js.map +1 -1
- package/dist/lib/migration/keychain-migration.d.ts +35 -0
- package/dist/lib/migration/keychain-migration.js +189 -0
- package/dist/lib/migration/keychain-migration.js.map +1 -0
- package/dist/lib/tenant-resolver.d.ts +38 -0
- package/dist/lib/tenant-resolver.js +79 -0
- package/dist/lib/tenant-resolver.js.map +1 -0
- package/dist/lockfile/types.d.ts +8 -0
- package/dist/sidecar/eval-ui-manifest.json +1 -0
- package/dist/sidecar/sea-config.json +57 -0
- package/dist/sidecar/sea-prep.blob +0 -0
- package/dist/sidecar/server.cjs +141627 -0
- package/dist/sidecar/vskill-version.txt +1 -0
- package/dist/studio/lib/ops-log.js +140 -57
- package/dist/studio/lib/ops-log.js.map +1 -1
- package/dist/studio/lib/scope-transfer.d.ts +11 -1
- package/dist/studio/lib/scope-transfer.js +48 -24
- package/dist/studio/lib/scope-transfer.js.map +1 -1
- package/dist/studio/routes/index.js +10 -1
- package/dist/studio/routes/index.js.map +1 -1
- package/dist/studio/routes/ops.js +31 -7
- package/dist/studio/routes/ops.js.map +1 -1
- package/dist/studio/routes/promote.js +15 -8
- package/dist/studio/routes/promote.js.map +1 -1
- package/dist/studio/routes/revert.js +12 -1
- package/dist/studio/routes/revert.js.map +1 -1
- package/dist/studio/routes/test-install.js +13 -8
- package/dist/studio/routes/test-install.js.map +1 -1
- package/dist/studio-runtime/lockfile.d.ts +51 -0
- package/dist/studio-runtime/lockfile.js +216 -0
- package/dist/studio-runtime/lockfile.js.map +1 -0
- package/dist/updater/source-fetcher.js +2 -2
- package/dist/updater/source-fetcher.js.map +1 -1
- package/package.json +17 -1
- package/dist/eval-ui/assets/FindSkillsPalette-DsSgotS9.js +0 -2
- package/dist/eval-ui/assets/SkillDetailPanel-DAD2yJO-.js +0 -1
- package/dist/eval-ui/assets/UpdateDropdown-h5Hg3h7Z.js +0 -1
- package/dist/eval-ui/assets/index-CKLqBL52.css +0 -1
- package/dist/eval-ui/assets/index-JaDg6FlU.js +0 -124
- package/dist/eval-ui/assets/skill-studio-logo-CRyKgIrg.png +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill-routes.js","sourceRoot":"","sources":["../../src/eval-server/install-skill-routes.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,EAAE;AACF,kBAAkB;AAClB,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,aAAa;AACb,6EAA6E;AAC7E,8EAA8E;AAG9E,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIjE,MAAM,SAAS,GAAG,sBAAsB,CAAC;AACzC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjF,MAAM,kBAAkB,GAAG,OAAO,CAAC,CAAC,+CAA+C;AACnF,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAetC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE3C,SAAS,WAAW,CAAC,GAAyB;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IAC5C,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,SAAS,CAAC,GAAe,EAAE,KAA0B,EAAE,IAAa;IAC3E,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,KAAmB;IACnD,qEAAqE;IACrE,sEAAsE;IACtE,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAmB;IACtD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAe;QACtB,EAAE,EAAE,UAAU,EAAE;QAChB,KAAK;QACL,KAAK;QACL,IAAI;QACJ,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9B,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9B,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACpE,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAEvB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE;YACrB,OAAO,EAAE,CAAC,QAAQ,IAAI,IAAI,KAAK,CAAC;YAChC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC9B,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE;YACrB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC;YACZ,MAAM,EAAG,GAAa,CAAC,OAAO,IAAI,cAAc;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,kEAAkE;IAClE,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,EAAE;QAC5D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAuC,CAAC;QACzE,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,6CAA6C,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAqB,CAAC,CAAC;QACvD,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;IAEF,oDAAoD;IACpD,MAAM,CAAC,GAAG,CACR,yCAAyC,EACzC,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,MAA8B,EAAE,EAAE;QAC5F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC;gBAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,KAA0B,EAAE,IAAa,EAAE,EAAE;YAC/D,IAAI,CAAC;gBACH,IAAI,KAAK,KAAK,MAAM;oBAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;oBACxC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"install-skill-routes.js","sourceRoot":"","sources":["../../src/eval-server/install-skill-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Router } from "./router.js";
|
|
2
|
+
import { type SupportedAgent } from "../agents/agents-registry.js";
|
|
2
3
|
export interface DetectedAgentTool {
|
|
3
4
|
id: string;
|
|
4
5
|
displayName: string;
|
|
@@ -18,4 +19,7 @@ export interface InstallStateResponse {
|
|
|
18
19
|
user: InstallStateForScope;
|
|
19
20
|
};
|
|
20
21
|
}
|
|
22
|
+
export interface SupportedAgentsResponse {
|
|
23
|
+
agents: SupportedAgent[];
|
|
24
|
+
}
|
|
21
25
|
export declare function registerInstallStateRoutes(router: Router, root: string): void;
|
|
@@ -20,7 +20,7 @@ import { homedir } from "node:os";
|
|
|
20
20
|
import { join } from "node:path";
|
|
21
21
|
import { sendJson } from "./router.js";
|
|
22
22
|
import { readLockfile } from "../lockfile/lockfile.js";
|
|
23
|
-
import { detectInstalledAgents } from "../agents/agents-registry.js";
|
|
23
|
+
import { detectInstalledAgents, getSupportedAgents, } from "../agents/agents-registry.js";
|
|
24
24
|
const SAFE_NAME = /^[a-zA-Z0-9._@/\-]+$/;
|
|
25
25
|
const PLACEHOLDER_VERSION = "0.0.0";
|
|
26
26
|
function isLocalhost(req) {
|
|
@@ -74,6 +74,20 @@ function buildScopeState(lock, fullName) {
|
|
|
74
74
|
return { installed: true, installedAgentTools, version };
|
|
75
75
|
}
|
|
76
76
|
export function registerInstallStateRoutes(router, root) {
|
|
77
|
+
// 0845 T-005 (AC-US1-01, AC-US1-02, AC-US6-02): GET /api/studio/supported-agents
|
|
78
|
+
// returns every registry entry whose installMode is filesystem|clipboard,
|
|
79
|
+
// enriched with the detection flag + resolved install paths. Distinct from
|
|
80
|
+
// /api/studio/install-state (per-skill state) and from the older
|
|
81
|
+
// detected-only callers (preserved by detectInstalledAgents() — AC-US6-03).
|
|
82
|
+
router.get("/api/studio/supported-agents", async (req, res) => {
|
|
83
|
+
if (!isLocalhost(req)) {
|
|
84
|
+
sendJson(res, { error: "localhost-only endpoint" }, 403, req);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const agents = await getSupportedAgents();
|
|
88
|
+
const body = { agents };
|
|
89
|
+
sendJson(res, body, 200, req);
|
|
90
|
+
});
|
|
77
91
|
router.get("/api/studio/install-state", async (req, res) => {
|
|
78
92
|
if (!isLocalhost(req)) {
|
|
79
93
|
sendJson(res, { error: "localhost-only endpoint" }, 403, req);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-state-routes.js","sourceRoot":"","sources":["../../src/eval-server/install-state-routes.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,0EAA0E;AAC1E,kDAAkD;AAClD,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,kEAAkE;AAClE,2EAA2E;AAC3E,2EAA2E;AAC3E,aAAa;AACb,uEAAuE;AACvE,kCAAkC;AAClC,0EAA0E;AAC1E,qEAAqE;AACrE,8CAA8C;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"install-state-routes.js","sourceRoot":"","sources":["../../src/eval-server/install-state-routes.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,0EAA0E;AAC1E,kDAAkD;AAClD,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,kEAAkE;AAClE,2EAA2E;AAC3E,2EAA2E;AAC3E,aAAa;AACb,uEAAuE;AACvE,kCAAkC;AAClC,0EAA0E;AAC1E,qEAAqE;AACrE,8CAA8C;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,SAAS,GAAG,sBAAsB,CAAC;AACzC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAwBpC,SAAS,WAAW,CAAC,GAAyB;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IAC5C,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC;AAC/E,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,IAA+E,EAC/E,QAAgB;IAEhB,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,sFAAsF;IACtF,gFAAgF;IAChF,+EAA+E;IAC/E,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACpF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,sEAAsE;YACtE,MAAM,cAAc,GAAG,GAAG,SAAS,GAAG,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACtB,IAAkG,EAClG,QAAgB;IAEhB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAK,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,UAAU,IAAI,UAAU,KAAK,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC;AAMD,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,iFAAiF;IACjF,0EAA0E;IAC1E,2EAA2E;IAC3E,iEAAiE;IACjE,4EAA4E;IAC5E,MAAM,CAAC,GAAG,CACR,8BAA8B,EAC9B,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,EAAE;QAC5D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,CAAC;QACjD,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,GAAG,CACR,2BAA2B,EAC3B,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,EAAE;QAC5D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1D,yEAAyE;QACzE,sEAAsE;QACtE,yCAAyC;QACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,qBAAqB,EAAE,CAAC;QACrD,MAAM,kBAAkB,GAAwB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzE,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,cAAc;YAC1B,SAAS,EAAE,CAAC,CAAC,eAAe;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAyB;YACjC,KAAK;YACL,kBAAkB;YAClB,MAAM,EAAE;gBACN,OAAO,EAAE,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC;gBAC5C,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;aACvC;SACF,CAAC;QAEF,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// oauth-github-routes.ts — GitHub OAuth 2.0 Authorization Code flow.
|
|
3
|
+
//
|
|
4
|
+
// Why this replaces the Tauri IPC device-flow path (2026-05-11):
|
|
5
|
+
//
|
|
6
|
+
// 1. The vskill OAuth App at github.com/settings/developers has Device Flow
|
|
7
|
+
// DISABLED. Every device-code request returns
|
|
8
|
+
// `{"error":"device_flow_disabled"}` so the Tauri device-flow IPC was
|
|
9
|
+
// always going to silently fail at the GitHub layer.
|
|
10
|
+
//
|
|
11
|
+
// 2. The Tauri 2.x ACL was rejecting every custom #[tauri::command] at
|
|
12
|
+
// runtime because src-tauri/build.rs doesn't pass the command list to
|
|
13
|
+
// `Attributes::app_manifest(AppManifest::new().commands(&[...]))`. Even
|
|
14
|
+
// with a permission TOML correctly compiled into the binary, the runtime
|
|
15
|
+
// `allowed_commands` HashMap stayed empty for app-level commands. See
|
|
16
|
+
// `~/.claude/skills/tauri-desktop-release/SKILL.md` for the deep dive.
|
|
17
|
+
//
|
|
18
|
+
// 3. Doing OAuth through the sidecar HTTP layer sidesteps both issues:
|
|
19
|
+
// - JS in the WebView already authenticates to the sidecar via
|
|
20
|
+
// X-Studio-Token (the v1.0.30 fix). All it needs to do is POST/GET.
|
|
21
|
+
// - The browser callback first hits the registered verified-skill.com
|
|
22
|
+
// callback, which owns the GitHub client secret and exchanges the code.
|
|
23
|
+
// It then posts the resulting GitHub token back to the local sidecar.
|
|
24
|
+
//
|
|
25
|
+
// This mirrors how `claude-code` does it (Claude AI / Anthropic console
|
|
26
|
+
// login): localhost HTTP server starts the flow, validates the returning
|
|
27
|
+
// state, then stores the token in the OS keychain (with file fallback).
|
|
28
|
+
// See `anymodel-umb/repositories/antonoly/claude-code/services/oauth/`.
|
|
29
|
+
//
|
|
30
|
+
// Flow:
|
|
31
|
+
// 1. JS: POST /api/oauth/github/start
|
|
32
|
+
// → server generates random state (CSRF protection)
|
|
33
|
+
// → server stores {state → {expiresAt}} in in-memory map
|
|
34
|
+
// → server returns {state, authUrl}
|
|
35
|
+
// 2. JS: window.__TAURI__.shell.open(authUrl) (no IPC ACL needed —
|
|
36
|
+
// shell:allow-open is in default capabilities)
|
|
37
|
+
// 3. User authorizes in their browser → GitHub redirects to the registered
|
|
38
|
+
// verified-skill.com callback, which detects desktop state, exchanges
|
|
39
|
+
// the code using the platform client secret, and form-POSTs the token to
|
|
40
|
+
// http://localhost:<sidecar-port>/api/oauth/github/desktop-complete
|
|
41
|
+
// 4. Sidecar desktop-complete handler:
|
|
42
|
+
// → looks up state in map (404 if not found / expired)
|
|
43
|
+
// → stores access_token via keychain.setGithubToken()
|
|
44
|
+
// → marks the state as "ready" with the user info
|
|
45
|
+
// → returns a small HTML "close this tab" success page
|
|
46
|
+
// 5. JS polls GET /api/oauth/github/status?state=...
|
|
47
|
+
// → on "ready" → frontend shows signed-in chip
|
|
48
|
+
// → on "error" → frontend shows error toast
|
|
49
|
+
//
|
|
50
|
+
// Token storage is the SAME slot used by the old Tauri device-flow path
|
|
51
|
+
// (`~/.vskill/keys.env` or OS keychain), so existing token-consuming code
|
|
52
|
+
// in the studio (per-skill streams, account API) continues working.
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
import { randomBytes } from "node:crypto";
|
|
55
|
+
import { sendJson } from "./router.js";
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Config
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Public OAuth App client_id. Matches the value baked into the desktop
|
|
60
|
+
// binary at build time (src-tauri/build.rs reads GITHUB_OAUTH_CLIENT_ID env).
|
|
61
|
+
// PUBLIC value — no secret protection needed, intentionally hardcoded.
|
|
62
|
+
const GITHUB_OAUTH_CLIENT_ID = "Ov23li6H8OpvPfuhyDEt";
|
|
63
|
+
const GITHUB_AUTHORIZE_URL = "https://github.com/login/oauth/authorize";
|
|
64
|
+
const GITHUB_USER_API = "https://api.github.com/user";
|
|
65
|
+
const REQUESTED_SCOPE = "repo read:user user:email";
|
|
66
|
+
const STATE_TTL_MS = 10 * 60 * 1000; // 10 minutes — GitHub auth pages
|
|
67
|
+
// allow ~15 min before user code expires
|
|
68
|
+
const STATE_GC_INTERVAL_MS = 60 * 1000;
|
|
69
|
+
// 2026-05-20: GitHub requires redirect_uri to exactly match the OAuth App's
|
|
70
|
+
// registered callback. The platform callback detects desktop state values,
|
|
71
|
+
// exchanges the code with its confidential client secret, then posts the
|
|
72
|
+
// GitHub access token back to the local sidecar.
|
|
73
|
+
const DESKTOP_BOUNCE_REDIRECT = "https://verified-skill.com/api/v1/auth/github/callback";
|
|
74
|
+
// Allow overriding the bounce URL via env (useful for local platform
|
|
75
|
+
// development against http://localhost:3000 etc.).
|
|
76
|
+
function getRedirectUri() {
|
|
77
|
+
return process.env.VSKILL_OAUTH_BOUNCE_URL || DESKTOP_BOUNCE_REDIRECT;
|
|
78
|
+
}
|
|
79
|
+
const flows = new Map();
|
|
80
|
+
function gcExpiredFlows() {
|
|
81
|
+
const now = Date.now();
|
|
82
|
+
for (const [state, flow] of flows) {
|
|
83
|
+
if (flow.expiresAt < now)
|
|
84
|
+
flows.delete(state);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
setInterval(gcExpiredFlows, STATE_GC_INTERVAL_MS).unref();
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// OAuth helpers
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
function base64UrlEncode(buf) {
|
|
92
|
+
return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
93
|
+
}
|
|
94
|
+
function generateState() {
|
|
95
|
+
return base64UrlEncode(randomBytes(32)); // 43 chars
|
|
96
|
+
}
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Helpers
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
/**
|
|
101
|
+
* The redirect_uri we send to GitHub. This must be the registered platform
|
|
102
|
+
* callback; the platform callback handles the localhost bounce for desktop
|
|
103
|
+
* states after GitHub redirects back to it.
|
|
104
|
+
*/
|
|
105
|
+
function buildGitHubRedirectUri(_req) {
|
|
106
|
+
return getRedirectUri();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Extract the local sidecar port from the request host header so we can
|
|
110
|
+
* embed it in `state`. The platform bounce-redirect reads the port back
|
|
111
|
+
* out of state and forwards the user's browser to localhost:<port>.
|
|
112
|
+
*/
|
|
113
|
+
function getLocalPort(req) {
|
|
114
|
+
const host = req.headers.host || "";
|
|
115
|
+
const m = host.match(/:(\d+)$/);
|
|
116
|
+
if (m) {
|
|
117
|
+
const n = Number.parseInt(m[1], 10);
|
|
118
|
+
if (Number.isFinite(n) && n > 0 && n <= 65535)
|
|
119
|
+
return n;
|
|
120
|
+
}
|
|
121
|
+
// No port in host → default 80. Should never happen for sidecar binds.
|
|
122
|
+
return 80;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Fetch the user's GitHub profile using the access token. Used to populate
|
|
126
|
+
* the signed-in chip in the studio UI.
|
|
127
|
+
*/
|
|
128
|
+
async function fetchUserProfile(accessToken) {
|
|
129
|
+
const res = await fetch(GITHUB_USER_API, {
|
|
130
|
+
headers: {
|
|
131
|
+
"Authorization": `token ${accessToken}`,
|
|
132
|
+
"Accept": "application/vnd.github+json",
|
|
133
|
+
"User-Agent": "vskill-studio",
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
if (!res.ok) {
|
|
137
|
+
const text = await res.text().catch(() => "");
|
|
138
|
+
throw new Error(`GitHub user API failed: HTTP ${res.status}: ${text.slice(0, 200)}`);
|
|
139
|
+
}
|
|
140
|
+
const data = (await res.json());
|
|
141
|
+
return {
|
|
142
|
+
login: data.login,
|
|
143
|
+
id: data.id,
|
|
144
|
+
name: data.name,
|
|
145
|
+
email: data.email,
|
|
146
|
+
avatarUrl: data.avatar_url,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Persist the GitHub token to the same storage slot the existing keychain
|
|
151
|
+
* code uses (~/.vskill/keys.env or OS keychain). Lazy-imports keychain.ts
|
|
152
|
+
* so this file stays usable in environments where keychain isn't available
|
|
153
|
+
* (e.g., the test runner — keychain has hard ESM deps on native modules).
|
|
154
|
+
*/
|
|
155
|
+
async function persistGithubToken(token) {
|
|
156
|
+
try {
|
|
157
|
+
const mod = await import("../lib/keychain.js");
|
|
158
|
+
const kc = mod.createKeychain();
|
|
159
|
+
kc.setGitHubToken(token);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
// Fall back to manually writing keys.env so the next vskill launch can
|
|
164
|
+
// still read the token (the studio looks in both keychain and keys.env).
|
|
165
|
+
const fs = await import("node:fs");
|
|
166
|
+
const path = await import("node:path");
|
|
167
|
+
const os = await import("node:os");
|
|
168
|
+
const dir = path.join(os.homedir(), ".vskill");
|
|
169
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
170
|
+
const file = path.join(dir, "keys.env");
|
|
171
|
+
let contents = "";
|
|
172
|
+
try {
|
|
173
|
+
contents = fs.readFileSync(file, "utf-8");
|
|
174
|
+
}
|
|
175
|
+
catch { /* fresh */ }
|
|
176
|
+
// Overwrite both canonical + legacy keys.
|
|
177
|
+
const lines = contents
|
|
178
|
+
.split("\n")
|
|
179
|
+
.filter((l) => !l.startsWith("github-oauth-token=") && !l.startsWith("github_token="));
|
|
180
|
+
lines.push(`github-oauth-token=${token}`);
|
|
181
|
+
lines.push(`github_token=${token}`);
|
|
182
|
+
fs.writeFileSync(file, lines.filter(Boolean).join("\n") + "\n", { mode: 0o600 });
|
|
183
|
+
// Surface the fallback so debugging is easy.
|
|
184
|
+
// eslint-disable-next-line no-console
|
|
185
|
+
console.warn(`[oauth-github] keychain.setGithubToken failed (${err.message}); wrote ${file} instead`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function readUrlEncodedBody(req) {
|
|
189
|
+
const MAX_BODY_SIZE = 64 * 1024;
|
|
190
|
+
const TIMEOUT_MS = 10_000;
|
|
191
|
+
return new Promise((resolve, reject) => {
|
|
192
|
+
const chunks = [];
|
|
193
|
+
let size = 0;
|
|
194
|
+
const timer = setTimeout(() => {
|
|
195
|
+
req.destroy();
|
|
196
|
+
reject(new Error("Request body timeout"));
|
|
197
|
+
}, TIMEOUT_MS);
|
|
198
|
+
req.on("data", (chunk) => {
|
|
199
|
+
size += chunk.length;
|
|
200
|
+
if (size > MAX_BODY_SIZE) {
|
|
201
|
+
clearTimeout(timer);
|
|
202
|
+
req.destroy();
|
|
203
|
+
reject(new Error("Request body too large"));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
207
|
+
});
|
|
208
|
+
req.on("end", () => {
|
|
209
|
+
clearTimeout(timer);
|
|
210
|
+
resolve(new URLSearchParams(Buffer.concat(chunks).toString()));
|
|
211
|
+
});
|
|
212
|
+
req.on("error", (err) => {
|
|
213
|
+
clearTimeout(timer);
|
|
214
|
+
reject(err);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Route registration
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
export function registerOauthGithubRoutes(router) {
|
|
222
|
+
// -------------------------------------------------------------------------
|
|
223
|
+
// POST /api/oauth/github/start
|
|
224
|
+
//
|
|
225
|
+
// Initiates an OAuth flow. Returns the auth URL for the JS to open in the
|
|
226
|
+
// user's browser via Tauri's shell.open (or window.open for the CLI/web
|
|
227
|
+
// path — both are same-origin loopback so the redirect lands back here).
|
|
228
|
+
// -------------------------------------------------------------------------
|
|
229
|
+
router.post("/api/oauth/github/start", async (req, res) => {
|
|
230
|
+
// 2026-05-11 Option B: encode the sidecar's local port into state so
|
|
231
|
+
// the verified-skill.com bounce-redirect knows where to forward the
|
|
232
|
+
// user's browser. Format: <random base64url>.<port>. The same state
|
|
233
|
+
// round-trips through GitHub → platform → localhost callback.
|
|
234
|
+
const port = getLocalPort(req);
|
|
235
|
+
const state = `${generateState()}.${port}`;
|
|
236
|
+
const redirectUri = buildGitHubRedirectUri(req);
|
|
237
|
+
flows.set(state, {
|
|
238
|
+
expiresAt: Date.now() + STATE_TTL_MS,
|
|
239
|
+
status: "pending",
|
|
240
|
+
});
|
|
241
|
+
const authUrl = new URL(GITHUB_AUTHORIZE_URL);
|
|
242
|
+
authUrl.searchParams.set("client_id", GITHUB_OAUTH_CLIENT_ID);
|
|
243
|
+
authUrl.searchParams.set("redirect_uri", redirectUri);
|
|
244
|
+
authUrl.searchParams.set("scope", REQUESTED_SCOPE);
|
|
245
|
+
authUrl.searchParams.set("state", state);
|
|
246
|
+
// Force GitHub to always show the authorize page (even if previously
|
|
247
|
+
// authorized) — clearer UX when the user is debugging or rotating.
|
|
248
|
+
authUrl.searchParams.set("allow_signup", "true");
|
|
249
|
+
sendJson(res, {
|
|
250
|
+
state,
|
|
251
|
+
authUrl: authUrl.toString(),
|
|
252
|
+
expiresAt: flows.get(state).expiresAt,
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
// -------------------------------------------------------------------------
|
|
256
|
+
// GET /api/oauth/github/callback?error=...&state=...
|
|
257
|
+
//
|
|
258
|
+
// Browser-driven error callback. Success callbacks are now exchanged on the
|
|
259
|
+
// platform and delivered to /desktop-complete so the local sidecar never
|
|
260
|
+
// needs the confidential GitHub client secret.
|
|
261
|
+
// -------------------------------------------------------------------------
|
|
262
|
+
router.get("/api/oauth/github/callback", async (req, res) => {
|
|
263
|
+
const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
|
|
264
|
+
const state = url.searchParams.get("state");
|
|
265
|
+
const errorParam = url.searchParams.get("error");
|
|
266
|
+
const errorDesc = url.searchParams.get("error_description");
|
|
267
|
+
if (errorParam) {
|
|
268
|
+
const flow = state ? flows.get(state) : null;
|
|
269
|
+
if (flow) {
|
|
270
|
+
flow.status = "error";
|
|
271
|
+
flow.errorMessage = `${errorParam}${errorDesc ? `: ${errorDesc}` : ""}`;
|
|
272
|
+
}
|
|
273
|
+
respondHtml(res, 400, errorPage(errorParam, errorDesc));
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (!state) {
|
|
277
|
+
respondHtml(res, 400, errorPage("missing_params", "state not present in callback URL"));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const flow = flows.get(state);
|
|
281
|
+
if (flow) {
|
|
282
|
+
flow.status = "error";
|
|
283
|
+
flow.errorMessage = "Outdated platform callback returned a code to the sidecar instead of posting a token.";
|
|
284
|
+
}
|
|
285
|
+
respondHtml(res, 400, errorPage("outdated_callback", "Skill Studio received an old callback shape. Click Sign in again so the platform can exchange the code securely."));
|
|
286
|
+
});
|
|
287
|
+
// -------------------------------------------------------------------------
|
|
288
|
+
// POST /api/oauth/github/desktop-complete
|
|
289
|
+
//
|
|
290
|
+
// Browser-driven completion from verified-skill.com. UNAUTHENTICATED
|
|
291
|
+
// (no X-Studio-Token header) and CSRF-protected by the random in-memory
|
|
292
|
+
// state. The GitHub access token arrives in an application/x-www-form-urlencoded
|
|
293
|
+
// body, not in the URL, so it does not land in browser history.
|
|
294
|
+
// -------------------------------------------------------------------------
|
|
295
|
+
router.post("/api/oauth/github/desktop-complete", async (req, res) => {
|
|
296
|
+
const body = await readUrlEncodedBody(req);
|
|
297
|
+
const state = body.get("state");
|
|
298
|
+
const accessToken = body.get("github_token");
|
|
299
|
+
if (!state || !accessToken) {
|
|
300
|
+
respondHtml(res, 400, errorPage("missing_params", "state or github_token not present in callback body"));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const flow = flows.get(state);
|
|
304
|
+
if (!flow) {
|
|
305
|
+
respondHtml(res, 400, errorPage("expired_or_unknown_state", "This sign-in attempt expired or was never started. Close this tab and click Sign in again from Skill Studio."));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (flow.expiresAt < Date.now()) {
|
|
309
|
+
flows.delete(state);
|
|
310
|
+
respondHtml(res, 400, errorPage("expired", "This sign-in attempt expired. Try again."));
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (flow.status !== "pending") {
|
|
314
|
+
// Already consumed — defensive.
|
|
315
|
+
respondHtml(res, 200, alreadyDonePage());
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
try {
|
|
319
|
+
await persistGithubToken(accessToken);
|
|
320
|
+
const user = await fetchUserProfile(accessToken);
|
|
321
|
+
flow.status = "ready";
|
|
322
|
+
flow.user = user;
|
|
323
|
+
respondHtml(res, 200, successPage(user.login));
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
327
|
+
flow.status = "error";
|
|
328
|
+
flow.errorMessage = msg;
|
|
329
|
+
// Log so a CI failure or upstream outage is visible in the sidecar log.
|
|
330
|
+
// eslint-disable-next-line no-console
|
|
331
|
+
console.error("[oauth-github] desktop completion failed:", msg);
|
|
332
|
+
respondHtml(res, 502, errorPage("completion_failed", msg));
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
// -------------------------------------------------------------------------
|
|
336
|
+
// GET /api/oauth/github/status?state=...
|
|
337
|
+
//
|
|
338
|
+
// Poll endpoint for the studio UI. Returns the flow's current status so
|
|
339
|
+
// the React UserDropdown can transition from "Signing in…" to either
|
|
340
|
+
// signed-in or error.
|
|
341
|
+
// -------------------------------------------------------------------------
|
|
342
|
+
router.get("/api/oauth/github/status", async (req, res) => {
|
|
343
|
+
const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
|
|
344
|
+
const state = url.searchParams.get("state");
|
|
345
|
+
if (!state) {
|
|
346
|
+
sendJson(res, { status: "error", error: "missing state" }, 400);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
const flow = flows.get(state);
|
|
350
|
+
if (!flow) {
|
|
351
|
+
sendJson(res, { status: "expired" }, 200);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
if (flow.expiresAt < Date.now()) {
|
|
355
|
+
flows.delete(state);
|
|
356
|
+
sendJson(res, { status: "expired" }, 200);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (flow.status === "ready") {
|
|
360
|
+
// Keep the flow around for a few more polls so a slow UI doesn't miss
|
|
361
|
+
// it, but mark it consumed so re-polls keep returning ready.
|
|
362
|
+
sendJson(res, { status: "ready", user: flow.user }, 200);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (flow.status === "error") {
|
|
366
|
+
sendJson(res, { status: "error", error: flow.errorMessage ?? "unknown error" }, 200);
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
sendJson(res, { status: "pending" }, 200);
|
|
370
|
+
});
|
|
371
|
+
// -------------------------------------------------------------------------
|
|
372
|
+
// GET /api/auth/me
|
|
373
|
+
//
|
|
374
|
+
// Returns the current signed-in user, looked up via the cached GitHub
|
|
375
|
+
// token in keychain/keys.env. Used by the studio UI on cold start to
|
|
376
|
+
// restore the signed-in chip without re-running the OAuth flow.
|
|
377
|
+
// -------------------------------------------------------------------------
|
|
378
|
+
router.get("/api/auth/me", async (_req, res) => {
|
|
379
|
+
try {
|
|
380
|
+
const mod = await import("../lib/keychain.js");
|
|
381
|
+
const kc = mod.createKeychain();
|
|
382
|
+
const token = kc.getGitHubToken();
|
|
383
|
+
if (!token) {
|
|
384
|
+
sendJson(res, { signedIn: false }, 200);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
try {
|
|
388
|
+
const user = await fetchUserProfile(token);
|
|
389
|
+
sendJson(res, { signedIn: true, user }, 200);
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
// Token present but invalid/expired — treat as signed-out so the UI
|
|
393
|
+
// doesn't get stuck. The next Sign in click will replace it.
|
|
394
|
+
sendJson(res, { signedIn: false, reason: "token_invalid" }, 200);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
catch (err) {
|
|
398
|
+
sendJson(res, {
|
|
399
|
+
signedIn: false,
|
|
400
|
+
reason: "keychain_unavailable",
|
|
401
|
+
detail: err.message,
|
|
402
|
+
}, 200);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
// -------------------------------------------------------------------------
|
|
406
|
+
// POST /api/auth/sign-out
|
|
407
|
+
//
|
|
408
|
+
// Deletes the cached GitHub token. The next /api/auth/me will return
|
|
409
|
+
// signedIn=false. Idempotent.
|
|
410
|
+
// -------------------------------------------------------------------------
|
|
411
|
+
router.post("/api/auth/sign-out", async (_req, res) => {
|
|
412
|
+
try {
|
|
413
|
+
const mod = await import("../lib/keychain.js");
|
|
414
|
+
const kc = mod.createKeychain();
|
|
415
|
+
kc.clearGitHubToken();
|
|
416
|
+
sendJson(res, { ok: true }, 200);
|
|
417
|
+
}
|
|
418
|
+
catch (err) {
|
|
419
|
+
sendJson(res, { ok: false, error: err.message }, 500);
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
// ---------------------------------------------------------------------------
|
|
424
|
+
// HTML responses for the browser-driven callback page
|
|
425
|
+
// ---------------------------------------------------------------------------
|
|
426
|
+
function respondHtml(res, status, html) {
|
|
427
|
+
res.writeHead(status, { "Content-Type": "text/html; charset=utf-8" });
|
|
428
|
+
res.end(html);
|
|
429
|
+
}
|
|
430
|
+
function successPage(login) {
|
|
431
|
+
const safeLogin = String(login).replace(/[<>&"]/g, (c) => ({
|
|
432
|
+
"<": "<",
|
|
433
|
+
">": ">",
|
|
434
|
+
"&": "&",
|
|
435
|
+
'"': """,
|
|
436
|
+
}[c]));
|
|
437
|
+
return `<!doctype html>
|
|
438
|
+
<meta charset="utf-8">
|
|
439
|
+
<title>Signed in — Skill Studio</title>
|
|
440
|
+
<style>
|
|
441
|
+
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
442
|
+
margin: 0; padding: 2rem; display: grid; place-items: center;
|
|
443
|
+
min-height: 100vh; background: #fafafa; color: #1f2328; }
|
|
444
|
+
.card { max-width: 480px; padding: 2rem 2.5rem; background: white;
|
|
445
|
+
border-radius: 12px; border: 1px solid #d0d7de;
|
|
446
|
+
box-shadow: 0 8px 24px rgba(140,149,159,0.12); text-align: center; }
|
|
447
|
+
h1 { margin: 0 0 0.5rem; font-size: 1.5rem; font-weight: 600; }
|
|
448
|
+
p { margin: 0.5rem 0; line-height: 1.5; color: #57606a; }
|
|
449
|
+
code { background: #f6f8fa; padding: 0.125rem 0.375rem; border-radius: 4px;
|
|
450
|
+
font-family: ui-monospace, SFMono-Regular, monospace; }
|
|
451
|
+
.check { font-size: 3rem; margin-bottom: 1rem; }
|
|
452
|
+
</style>
|
|
453
|
+
<div class="card">
|
|
454
|
+
<div class="check">✓</div>
|
|
455
|
+
<h1>Signed in as <code>${safeLogin}</code></h1>
|
|
456
|
+
<p>You can close this tab and return to Skill Studio.</p>
|
|
457
|
+
</div>
|
|
458
|
+
<script>
|
|
459
|
+
// Try to auto-close. macOS Safari may block this; that's OK — the user can close manually.
|
|
460
|
+
setTimeout(() => { window.close(); }, 1500);
|
|
461
|
+
</script>`;
|
|
462
|
+
}
|
|
463
|
+
function alreadyDonePage() {
|
|
464
|
+
return `<!doctype html>
|
|
465
|
+
<meta charset="utf-8">
|
|
466
|
+
<title>Sign-in already completed</title>
|
|
467
|
+
<style>
|
|
468
|
+
body { font-family: -apple-system, sans-serif; margin: 0; padding: 2rem;
|
|
469
|
+
display: grid; place-items: center; min-height: 100vh;
|
|
470
|
+
background: #fafafa; color: #1f2328; }
|
|
471
|
+
.card { max-width: 480px; padding: 2rem 2.5rem; background: white;
|
|
472
|
+
border-radius: 12px; border: 1px solid #d0d7de; text-align: center; }
|
|
473
|
+
</style>
|
|
474
|
+
<div class="card">
|
|
475
|
+
<h1>Sign-in already completed</h1>
|
|
476
|
+
<p>You can close this tab.</p>
|
|
477
|
+
</div>`;
|
|
478
|
+
}
|
|
479
|
+
function errorPage(error, description) {
|
|
480
|
+
const safe = (s) => String(s ?? "")
|
|
481
|
+
.replace(/[<>&"]/g, (c) => ({ "<": "<", ">": ">", "&": "&", '"': """ }[c]));
|
|
482
|
+
return `<!doctype html>
|
|
483
|
+
<meta charset="utf-8">
|
|
484
|
+
<title>Sign-in failed — Skill Studio</title>
|
|
485
|
+
<style>
|
|
486
|
+
body { font-family: -apple-system, sans-serif; margin: 0; padding: 2rem;
|
|
487
|
+
display: grid; place-items: center; min-height: 100vh;
|
|
488
|
+
background: #fafafa; color: #1f2328; }
|
|
489
|
+
.card { max-width: 520px; padding: 2rem 2.5rem; background: white;
|
|
490
|
+
border-radius: 12px; border: 1px solid #d0d7de;
|
|
491
|
+
box-shadow: 0 8px 24px rgba(140,149,159,0.12); text-align: center; }
|
|
492
|
+
h1 { margin: 0 0 0.5rem; font-size: 1.25rem; font-weight: 600; color: #cf222e; }
|
|
493
|
+
p { margin: 0.5rem 0; line-height: 1.5; color: #57606a; }
|
|
494
|
+
pre { background: #f6f8fa; padding: 0.75rem; border-radius: 6px;
|
|
495
|
+
font-family: ui-monospace, monospace; font-size: 0.8125rem;
|
|
496
|
+
text-align: left; overflow: auto; max-height: 200px; }
|
|
497
|
+
</style>
|
|
498
|
+
<div class="card">
|
|
499
|
+
<h1>Sign-in failed</h1>
|
|
500
|
+
<p><strong>${safe(error)}</strong></p>
|
|
501
|
+
${description ? `<pre>${safe(description)}</pre>` : ""}
|
|
502
|
+
<p>Close this tab and try Sign in again from Skill Studio.</p>
|
|
503
|
+
</div>`;
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=oauth-github-routes.js.map
|