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":"github-fetch.js","sourceRoot":"","sources":["../../src/lib/github-fetch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"github-fetch.js","sourceRoot":"","sources":["../../src/lib/github-fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/keychain.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export declare const SERVICE_NAME = "
|
|
2
|
-
export declare const GITHUB_TOKEN_KEY = "
|
|
1
|
+
export declare const SERVICE_NAME = "com.verifiedskill.desktop";
|
|
2
|
+
export declare const GITHUB_TOKEN_KEY = "github-oauth-token";
|
|
3
|
+
export declare const VSKILL_TOKEN_SERVICE = "vskill-token";
|
|
4
|
+
export declare const VSKILL_TOKEN_KEY = "vskill-api-token";
|
|
3
5
|
export interface KeyringBackend {
|
|
4
6
|
setPassword(service: string, account: string, password: string): void;
|
|
5
7
|
getPassword(service: string, account: string): string | null;
|
|
@@ -27,9 +29,17 @@ export interface Keychain {
|
|
|
27
29
|
setGitHubToken(token: string): void;
|
|
28
30
|
getGitHubToken(): string | null;
|
|
29
31
|
clearGitHubToken(): boolean;
|
|
32
|
+
/** 0839 US-005: store the verified-skill `vsk_*` API token. Coexists with the GitHub token. */
|
|
33
|
+
setVskillToken(token: string): void;
|
|
34
|
+
/** 0839 US-005: read the verified-skill `vsk_*` API token. Returns null when absent. */
|
|
35
|
+
getVskillToken(): string | null;
|
|
36
|
+
/** 0839 US-005: remove the verified-skill `vsk_*` token. Returns true when something was removed. */
|
|
37
|
+
clearVskillToken(): boolean;
|
|
30
38
|
/** True iff fallback storage is in use (introspection for `vskill auth status`). */
|
|
31
39
|
usingFallback(): boolean;
|
|
32
40
|
}
|
|
41
|
+
/** Test-only — reset the migration-once flag so test factories can re-run it. */
|
|
42
|
+
export declare function _resetMigrationFlagForTests(): void;
|
|
33
43
|
export declare function createKeychain(opts?: KeychainOptions): Keychain;
|
|
34
44
|
export declare function getDefaultKeychain(): Keychain;
|
|
35
45
|
/** Test-only reset hook — never call from production code. */
|
|
@@ -37,5 +47,8 @@ export declare function _resetDefaultKeychainForTests(): void;
|
|
|
37
47
|
export declare function getGitHubToken(): string | null;
|
|
38
48
|
export declare function setGitHubToken(token: string): void;
|
|
39
49
|
export declare function clearGitHubToken(): boolean;
|
|
50
|
+
export declare function getVskillToken(): string | null;
|
|
51
|
+
export declare function setVskillToken(token: string): void;
|
|
52
|
+
export declare function clearVskillToken(): boolean;
|
|
40
53
|
/** Last-4 redaction for log-safe output. */
|
|
41
54
|
export declare function redactToken(token: string | null | undefined): string;
|
package/dist/lib/keychain.js
CHANGED
|
@@ -14,15 +14,38 @@
|
|
|
14
14
|
// Tokens are NEVER logged. Callers should redact via `redactToken()` before
|
|
15
15
|
// any user-facing output.
|
|
16
16
|
//
|
|
17
|
-
// Service identity:
|
|
18
|
-
// - service: "vskill-github"
|
|
19
|
-
// - account: "github_token"
|
|
17
|
+
// Service identity (0836 US-006 — canonical, shared with the Rust desktop):
|
|
18
|
+
// - service: "com.verifiedskill.desktop" (was "vskill-github")
|
|
19
|
+
// - account: "github-oauth-token" (was "github_token")
|
|
20
|
+
//
|
|
21
|
+
// On first construction we run a one-time migration that moves any token
|
|
22
|
+
// from the legacy slot into the canonical slot. The legacy fallback in
|
|
23
|
+
// `getGitHubToken` covers users who haven't yet booted a process that ran
|
|
24
|
+
// the migration (e.g., the Rust desktop wrote the canonical slot, but a
|
|
25
|
+
// vintage CLI install reads from the old one). Both paths are scheduled
|
|
26
|
+
// for removal AFTER vskill 1.1.x — see keychain-migration.ts for the
|
|
27
|
+
// removal target.
|
|
20
28
|
// ---------------------------------------------------------------------------
|
|
21
29
|
import * as nodeFs from "node:fs";
|
|
22
30
|
import * as nodePath from "node:path";
|
|
23
31
|
import * as nodeOs from "node:os";
|
|
24
|
-
|
|
25
|
-
export const
|
|
32
|
+
import { runKeychainMigration } from "./migration/keychain-migration.js";
|
|
33
|
+
export const SERVICE_NAME = "com.verifiedskill.desktop";
|
|
34
|
+
export const GITHUB_TOKEN_KEY = "github-oauth-token";
|
|
35
|
+
// 0839 US-005: verified-skill API token (`vsk_*`) lives in a parallel
|
|
36
|
+
// keychain slot so `gho_*` (GitHub OAuth, used for direct GitHub API calls)
|
|
37
|
+
// and `vsk_*` (our minted API token, used for verified-skill.com calls)
|
|
38
|
+
// coexist. See ADR-001 in 0839/plan.md. Distinct slots keep keychain
|
|
39
|
+
// lookups O(1) and avoid prefix-sniffing every read.
|
|
40
|
+
export const VSKILL_TOKEN_SERVICE = "vskill-token";
|
|
41
|
+
export const VSKILL_TOKEN_KEY = "vskill-api-token";
|
|
42
|
+
// 0836 US-006: legacy slot — read-only fallback during the one-release
|
|
43
|
+
// compat window. Remove after vskill 1.1.x ships.
|
|
44
|
+
// TODO(0836-followup): drop LEGACY_SERVICE_NAME + LEGACY_TOKEN_KEY + the
|
|
45
|
+
// fallback branch in getGitHubToken once 1.1.x has had one full release
|
|
46
|
+
// cycle to migrate users.
|
|
47
|
+
const LEGACY_SERVICE_NAME = "vskill-github";
|
|
48
|
+
const LEGACY_TOKEN_KEY = "github_token";
|
|
26
49
|
const DEFAULT_FALLBACK = nodePath.join(nodeOs.homedir(), ".vskill", "keys.env");
|
|
27
50
|
const defaultFs = {
|
|
28
51
|
readFileSync: (p) => nodeFs.readFileSync(p, { encoding: "utf8" }),
|
|
@@ -32,6 +55,14 @@ const defaultFs = {
|
|
|
32
55
|
mkdirSync: (p) => nodeFs.mkdirSync(p, { recursive: true, mode: 0o700 }),
|
|
33
56
|
unlinkSync: (p) => nodeFs.unlinkSync(p),
|
|
34
57
|
};
|
|
58
|
+
// 0836 US-006: per-process flag so the one-time migration runs exactly
|
|
59
|
+
// once even if multiple keychains are constructed (the test suite does
|
|
60
|
+
// this; production has a single default keychain).
|
|
61
|
+
let _migrationRun = false;
|
|
62
|
+
/** Test-only — reset the migration-once flag so test factories can re-run it. */
|
|
63
|
+
export function _resetMigrationFlagForTests() {
|
|
64
|
+
_migrationRun = false;
|
|
65
|
+
}
|
|
35
66
|
function loadDefaultKeyring() {
|
|
36
67
|
// The native module is loaded lazily so the CLI still boots in environments
|
|
37
68
|
// where the binary isn't available (rare, since @napi-rs/keyring ships
|
|
@@ -102,6 +133,21 @@ export function createKeychain(opts = {}) {
|
|
|
102
133
|
keyring = opts.keyring;
|
|
103
134
|
else
|
|
104
135
|
keyring = loadDefaultKeyring();
|
|
136
|
+
// 0836 US-006: run the one-time legacy-slot → canonical-slot migration
|
|
137
|
+
// exactly once per process. The helper is idempotent (skip-flag +
|
|
138
|
+
// mutex), so calling it on every createKeychain construction is safe;
|
|
139
|
+
// the per-process flag is only an optimization to avoid the cheap
|
|
140
|
+
// file-stat check on every test factory.
|
|
141
|
+
if (!_migrationRun) {
|
|
142
|
+
_migrationRun = true;
|
|
143
|
+
try {
|
|
144
|
+
runKeychainMigration({ keyring });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Best-effort — migration failure leaves the legacy fallback path
|
|
148
|
+
// intact; no user-visible regression.
|
|
149
|
+
}
|
|
150
|
+
}
|
|
105
151
|
let warnedFallback = false;
|
|
106
152
|
let fallbackInUse = false;
|
|
107
153
|
function tryKeyring(fn) {
|
|
@@ -153,18 +199,51 @@ export function createKeychain(opts = {}) {
|
|
|
153
199
|
},
|
|
154
200
|
getGitHubToken() {
|
|
155
201
|
const r = tryKeyring((kr) => kr.getPassword(SERVICE_NAME, GITHUB_TOKEN_KEY));
|
|
156
|
-
if (r.ok && r.value)
|
|
202
|
+
if (r.ok && r.value) {
|
|
203
|
+
// 0836 hardening (F-008 follow-up): if BOTH the canonical and the
|
|
204
|
+
// legacy slots are populated, log a WARN. This catches the
|
|
205
|
+
// dual-writer drift case where a vintage `vskill@<old>` install
|
|
206
|
+
// wrote to legacy after migration's done-flag was set. Canonical
|
|
207
|
+
// wins (current return), but operators get a signal the user has
|
|
208
|
+
// two copies and should re-authenticate.
|
|
209
|
+
try {
|
|
210
|
+
const legacy = tryKeyring((kr) => kr.getPassword(LEGACY_SERVICE_NAME, LEGACY_TOKEN_KEY));
|
|
211
|
+
if (legacy.ok && legacy.value && legacy.value !== r.value) {
|
|
212
|
+
// Avoid logging the token values themselves — only the fact of drift.
|
|
213
|
+
// eslint-disable-next-line no-console
|
|
214
|
+
console.warn("[vskill keychain] both canonical and legacy slots are populated; canonical wins. Run `vskill auth login` to clear drift.");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Non-fatal: drift detection is best-effort.
|
|
219
|
+
}
|
|
157
220
|
return r.value;
|
|
221
|
+
}
|
|
158
222
|
if (r.ok && r.value === null) {
|
|
223
|
+
// 0836 US-006 legacy fallback: a vintage CLI install that hasn't
|
|
224
|
+
// booted post-migration may still hold the token in the old slot.
|
|
225
|
+
// Honor it for one release window. The migration helper will move
|
|
226
|
+
// this on the next process boot; until then we read from where it
|
|
227
|
+
// lives.
|
|
228
|
+
// TODO(0836-followup): remove after vskill 1.1.x ships.
|
|
229
|
+
const legacy = tryKeyring((kr) => kr.getPassword(LEGACY_SERVICE_NAME, LEGACY_TOKEN_KEY));
|
|
230
|
+
if (legacy.ok && legacy.value)
|
|
231
|
+
return legacy.value;
|
|
159
232
|
// keyring works but slot is empty — also peek at fallback in case the
|
|
160
233
|
// user set a token before keyring became available, but DO NOT warn
|
|
161
234
|
// because keyring is fine.
|
|
162
235
|
const map = readFallback();
|
|
163
|
-
|
|
236
|
+
if (map.has(GITHUB_TOKEN_KEY))
|
|
237
|
+
return map.get(GITHUB_TOKEN_KEY) ?? null;
|
|
238
|
+
// 0836 US-006: legacy file-fallback key, kept for the same
|
|
239
|
+
// one-release window as the legacy keyring service.
|
|
240
|
+
return map.get(LEGACY_TOKEN_KEY) ?? null;
|
|
164
241
|
}
|
|
165
242
|
ensureFallbackWarned();
|
|
166
243
|
const map = readFallback();
|
|
167
|
-
|
|
244
|
+
if (map.has(GITHUB_TOKEN_KEY))
|
|
245
|
+
return map.get(GITHUB_TOKEN_KEY) ?? null;
|
|
246
|
+
return map.get(LEGACY_TOKEN_KEY) ?? null;
|
|
168
247
|
},
|
|
169
248
|
clearGitHubToken() {
|
|
170
249
|
let removed = false;
|
|
@@ -192,6 +271,64 @@ export function createKeychain(opts = {}) {
|
|
|
192
271
|
}
|
|
193
272
|
return removed;
|
|
194
273
|
},
|
|
274
|
+
// -----------------------------------------------------------------
|
|
275
|
+
// 0839 US-005: verified-skill API token (`vsk_*`).
|
|
276
|
+
//
|
|
277
|
+
// Same storage contract as the GitHub token (keyring preferred,
|
|
278
|
+
// 0600 file fallback) but a distinct service/account so the two
|
|
279
|
+
// tokens never collide. Public surface mirrors the GitHub helpers.
|
|
280
|
+
// -----------------------------------------------------------------
|
|
281
|
+
setVskillToken(token) {
|
|
282
|
+
if (!token || typeof token !== "string") {
|
|
283
|
+
throw new Error("setVskillToken: token must be a non-empty string");
|
|
284
|
+
}
|
|
285
|
+
const r = tryKeyring((kr) => kr.setPassword(VSKILL_TOKEN_SERVICE, VSKILL_TOKEN_KEY, token));
|
|
286
|
+
if (r.ok)
|
|
287
|
+
return;
|
|
288
|
+
ensureFallbackWarned();
|
|
289
|
+
const map = readFallback();
|
|
290
|
+
map.set(VSKILL_TOKEN_KEY, token);
|
|
291
|
+
writeFallback(map);
|
|
292
|
+
},
|
|
293
|
+
getVskillToken() {
|
|
294
|
+
const r = tryKeyring((kr) => kr.getPassword(VSKILL_TOKEN_SERVICE, VSKILL_TOKEN_KEY));
|
|
295
|
+
if (r.ok && r.value)
|
|
296
|
+
return r.value;
|
|
297
|
+
if (r.ok && r.value === null) {
|
|
298
|
+
// Keyring works but slot is empty — peek at fallback in case the
|
|
299
|
+
// user wrote a token before keyring became available. Don't warn:
|
|
300
|
+
// the keyring path is healthy.
|
|
301
|
+
const map = readFallback();
|
|
302
|
+
return map.get(VSKILL_TOKEN_KEY) ?? null;
|
|
303
|
+
}
|
|
304
|
+
ensureFallbackWarned();
|
|
305
|
+
const map = readFallback();
|
|
306
|
+
return map.get(VSKILL_TOKEN_KEY) ?? null;
|
|
307
|
+
},
|
|
308
|
+
clearVskillToken() {
|
|
309
|
+
let removed = false;
|
|
310
|
+
const r = tryKeyring((kr) => kr.deletePassword(VSKILL_TOKEN_SERVICE, VSKILL_TOKEN_KEY));
|
|
311
|
+
if (r.ok && r.value)
|
|
312
|
+
removed = true;
|
|
313
|
+
if (fs.existsSync(fallbackPath)) {
|
|
314
|
+
const map = readFallback();
|
|
315
|
+
if (map.delete(VSKILL_TOKEN_KEY)) {
|
|
316
|
+
if (map.size === 0) {
|
|
317
|
+
try {
|
|
318
|
+
fs.unlinkSync(fallbackPath);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
writeFallback(map);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
writeFallback(map);
|
|
326
|
+
}
|
|
327
|
+
removed = true;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return removed;
|
|
331
|
+
},
|
|
195
332
|
usingFallback() {
|
|
196
333
|
return fallbackInUse || keyring === null;
|
|
197
334
|
},
|
|
@@ -221,6 +358,17 @@ export function setGitHubToken(token) {
|
|
|
221
358
|
export function clearGitHubToken() {
|
|
222
359
|
return getDefaultKeychain().clearGitHubToken();
|
|
223
360
|
}
|
|
361
|
+
// 0839 US-005: module-level convenience accessors for the verified-skill
|
|
362
|
+
// API token. Mirror the GitHub helpers above for parity.
|
|
363
|
+
export function getVskillToken() {
|
|
364
|
+
return getDefaultKeychain().getVskillToken();
|
|
365
|
+
}
|
|
366
|
+
export function setVskillToken(token) {
|
|
367
|
+
getDefaultKeychain().setVskillToken(token);
|
|
368
|
+
}
|
|
369
|
+
export function clearVskillToken() {
|
|
370
|
+
return getDefaultKeychain().clearVskillToken();
|
|
371
|
+
}
|
|
224
372
|
/** Last-4 redaction for log-safe output. */
|
|
225
373
|
export function redactToken(token) {
|
|
226
374
|
if (!token)
|
package/dist/lib/keychain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/lib/keychain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/lib/keychain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type MigrationResult = "migrated" | "noop" | "skipped";
|
|
2
|
+
export interface KeyringBackend {
|
|
3
|
+
setPassword(service: string, account: string, password: string): void;
|
|
4
|
+
getPassword(service: string, account: string): string | null;
|
|
5
|
+
deletePassword(service: string, account: string): boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface MigrationFsAdapter {
|
|
8
|
+
existsSync: (p: string) => boolean;
|
|
9
|
+
readFileSync: (p: string) => string;
|
|
10
|
+
writeFileSync: (p: string, content: string) => void;
|
|
11
|
+
mkdirSync: (p: string) => void;
|
|
12
|
+
unlinkSync: (p: string) => void;
|
|
13
|
+
statSync: (p: string) => {
|
|
14
|
+
mtimeMs: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface MigrationDeps {
|
|
18
|
+
keyring: KeyringBackend | null;
|
|
19
|
+
fs?: MigrationFsAdapter;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
homeDir?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Runs the legacy → canonical migration with mutex serialization.
|
|
25
|
+
*
|
|
26
|
+
* Returns:
|
|
27
|
+
* - 'migrated' — token moved (or both slots cleaned up)
|
|
28
|
+
* - 'noop' — nothing to migrate; done flag written
|
|
29
|
+
* - 'skipped' — environment opt-out, missing keyring, done flag, or
|
|
30
|
+
* another runner holds a fresh lock
|
|
31
|
+
*
|
|
32
|
+
* Idempotent — running twice is safe (the second call sees the done flag
|
|
33
|
+
* and returns 'skipped').
|
|
34
|
+
*/
|
|
35
|
+
export declare function runKeychainMigration(deps: MigrationDeps): MigrationResult;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// 0836 US-006 — keychain migration: legacy slot → canonical slot.
|
|
3
|
+
//
|
|
4
|
+
// Pre-0836: Node CLI used `vskill-github::github_token` (legacy)
|
|
5
|
+
// Post-0836: Node CLI uses `com.verifiedskill.desktop::github-oauth-token`
|
|
6
|
+
// (canonical — also the Rust desktop's slot per
|
|
7
|
+
// ADR-0836-03)
|
|
8
|
+
//
|
|
9
|
+
// This module runs ONCE on Node-side boot (via `keychain.ts::createKeychain`)
|
|
10
|
+
// and migrates any token from the legacy slot to the canonical slot. The
|
|
11
|
+
// move is idempotent + race-safe via a 5s-TTL file mutex at
|
|
12
|
+
// `~/.vskill/locks/keychain-migration.lock`. A done-flag at
|
|
13
|
+
// `~/.vskill/keychain-migration.done` short-circuits subsequent boots.
|
|
14
|
+
//
|
|
15
|
+
// Rust does NOT participate — `src-tauri/src/auth/token_store.rs` is already
|
|
16
|
+
// on the canonical slot (locked by a constant test there).
|
|
17
|
+
//
|
|
18
|
+
// Removal target: drop this whole module + the legacy fallback in
|
|
19
|
+
// keychain.ts AFTER vskill 1.1.x. Anton: remember to bump.
|
|
20
|
+
import * as nodeFs from "node:fs";
|
|
21
|
+
import * as nodePath from "node:path";
|
|
22
|
+
import * as nodeOs from "node:os";
|
|
23
|
+
const LEGACY_SERVICE = "vskill-github";
|
|
24
|
+
const LEGACY_ACCOUNT = "github_token";
|
|
25
|
+
const CANONICAL_SERVICE = "com.verifiedskill.desktop";
|
|
26
|
+
const CANONICAL_ACCOUNT = "github-oauth-token";
|
|
27
|
+
const LOCK_TTL_MS = 5_000;
|
|
28
|
+
const defaultFs = {
|
|
29
|
+
existsSync: (p) => nodeFs.existsSync(p),
|
|
30
|
+
readFileSync: (p) => nodeFs.readFileSync(p, { encoding: "utf8" }),
|
|
31
|
+
writeFileSync: (p, c) => nodeFs.writeFileSync(p, c, { encoding: "utf8", mode: 0o600 }),
|
|
32
|
+
mkdirSync: (p) => {
|
|
33
|
+
nodeFs.mkdirSync(p, { recursive: true, mode: 0o700 });
|
|
34
|
+
},
|
|
35
|
+
unlinkSync: (p) => nodeFs.unlinkSync(p),
|
|
36
|
+
statSync: (p) => {
|
|
37
|
+
const s = nodeFs.statSync(p);
|
|
38
|
+
return { mtimeMs: s.mtimeMs };
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
function paths(homeDir) {
|
|
42
|
+
const root = nodePath.join(homeDir, ".vskill");
|
|
43
|
+
return {
|
|
44
|
+
doneFlag: nodePath.join(root, "keychain-migration.done"),
|
|
45
|
+
lockFile: nodePath.join(root, "locks", "keychain-migration.lock"),
|
|
46
|
+
lockDir: nodePath.join(root, "locks"),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runs the legacy → canonical migration with mutex serialization.
|
|
51
|
+
*
|
|
52
|
+
* Returns:
|
|
53
|
+
* - 'migrated' — token moved (or both slots cleaned up)
|
|
54
|
+
* - 'noop' — nothing to migrate; done flag written
|
|
55
|
+
* - 'skipped' — environment opt-out, missing keyring, done flag, or
|
|
56
|
+
* another runner holds a fresh lock
|
|
57
|
+
*
|
|
58
|
+
* Idempotent — running twice is safe (the second call sees the done flag
|
|
59
|
+
* and returns 'skipped').
|
|
60
|
+
*/
|
|
61
|
+
export function runKeychainMigration(deps) {
|
|
62
|
+
// Env opt-out — power users / CI can set VSKILL_KEYCHAIN_MIGRATE=0.
|
|
63
|
+
if (process.env.VSKILL_KEYCHAIN_MIGRATE === "0") {
|
|
64
|
+
return "skipped";
|
|
65
|
+
}
|
|
66
|
+
if (!deps.keyring)
|
|
67
|
+
return "skipped";
|
|
68
|
+
const fs = deps.fs ?? defaultFs;
|
|
69
|
+
const now = deps.now ?? Date.now;
|
|
70
|
+
const home = deps.homeDir ?? nodeOs.homedir();
|
|
71
|
+
const p = paths(home);
|
|
72
|
+
// Done-flag short-circuit — prior boot already migrated.
|
|
73
|
+
if (fs.existsSync(p.doneFlag))
|
|
74
|
+
return "skipped";
|
|
75
|
+
// Acquire lock.
|
|
76
|
+
if (!acquireLock(fs, p, now)) {
|
|
77
|
+
return "skipped";
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
return migrateUnderLock(deps.keyring, fs, p, now);
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
releaseLock(fs, p);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function acquireLock(fs, p, now) {
|
|
87
|
+
// Ensure parent dir exists.
|
|
88
|
+
try {
|
|
89
|
+
fs.mkdirSync(p.lockDir);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// ignore — parent may already exist
|
|
93
|
+
}
|
|
94
|
+
if (fs.existsSync(p.lockFile)) {
|
|
95
|
+
// Check staleness.
|
|
96
|
+
let stale = false;
|
|
97
|
+
try {
|
|
98
|
+
const stat = fs.statSync(p.lockFile);
|
|
99
|
+
stale = now() - stat.mtimeMs > LOCK_TTL_MS;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
stale = true; // can't stat → treat as stale and steal
|
|
103
|
+
}
|
|
104
|
+
if (!stale) {
|
|
105
|
+
// Another runner holds a fresh lock — back off.
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Steal.
|
|
109
|
+
try {
|
|
110
|
+
fs.unlinkSync(p.lockFile);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// ignore — race with the other runner releasing it
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
fs.writeFileSync(p.lockFile, String(process.pid));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
function releaseLock(fs, p) {
|
|
125
|
+
try {
|
|
126
|
+
fs.unlinkSync(p.lockFile);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// ignore
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function migrateUnderLock(keyring, fs, p, _now) {
|
|
133
|
+
const old = safeGet(keyring, LEGACY_SERVICE, LEGACY_ACCOUNT);
|
|
134
|
+
const canonical = safeGet(keyring, CANONICAL_SERVICE, CANONICAL_ACCOUNT);
|
|
135
|
+
if (old == null && canonical == null) {
|
|
136
|
+
writeDoneFlag(fs, p);
|
|
137
|
+
return "noop";
|
|
138
|
+
}
|
|
139
|
+
if (old != null && canonical == null) {
|
|
140
|
+
// Promote old → canonical, then drop old.
|
|
141
|
+
safeSet(keyring, CANONICAL_SERVICE, CANONICAL_ACCOUNT, old);
|
|
142
|
+
safeDelete(keyring, LEGACY_SERVICE, LEGACY_ACCOUNT);
|
|
143
|
+
writeDoneFlag(fs, p);
|
|
144
|
+
return "migrated";
|
|
145
|
+
}
|
|
146
|
+
if (old != null && canonical != null) {
|
|
147
|
+
// Both populated — keep canonical (newer), delete old.
|
|
148
|
+
safeDelete(keyring, LEGACY_SERVICE, LEGACY_ACCOUNT);
|
|
149
|
+
writeDoneFlag(fs, p);
|
|
150
|
+
return "migrated";
|
|
151
|
+
}
|
|
152
|
+
// canonical-only: nothing to do; mark done so we don't re-check.
|
|
153
|
+
writeDoneFlag(fs, p);
|
|
154
|
+
return "noop";
|
|
155
|
+
}
|
|
156
|
+
function writeDoneFlag(fs, p) {
|
|
157
|
+
try {
|
|
158
|
+
fs.writeFileSync(p.doneFlag, "1");
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Best-effort — if the flag can't be written, the migration just
|
|
162
|
+
// re-runs next boot; harmless because each step is idempotent.
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function safeGet(kr, service, account) {
|
|
166
|
+
try {
|
|
167
|
+
return kr.getPassword(service, account);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function safeSet(kr, service, account, value) {
|
|
174
|
+
try {
|
|
175
|
+
kr.setPassword(service, account, value);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// ignore — failure is logged elsewhere; migration continues
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function safeDelete(kr, service, account) {
|
|
182
|
+
try {
|
|
183
|
+
kr.deletePassword(service, account);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// ignore
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=keychain-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain-migration.js","sourceRoot":"","sources":["../../../src/lib/migration/keychain-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ActiveTenantOptions } from "./active-tenant.js";
|
|
2
|
+
import { type TenantSummary } from "../api/client.js";
|
|
3
|
+
export interface ResolveTenantOptions {
|
|
4
|
+
/** Highest priority — usually the CLI `--tenant` flag. */
|
|
5
|
+
flag?: string | null;
|
|
6
|
+
/** Override env reader (tests). Defaults to `process.env.VSKILL_TENANT`. */
|
|
7
|
+
envValue?: string | null;
|
|
8
|
+
/** Override config-dir resolution (tests). */
|
|
9
|
+
activeTenantOptions?: ActiveTenantOptions;
|
|
10
|
+
/** Override tenants fetcher (tests / offline mode). */
|
|
11
|
+
listTenants?: () => Promise<TenantSummary[]>;
|
|
12
|
+
/**
|
|
13
|
+
* When true, the resolver may make a network call to /account/tenants for
|
|
14
|
+
* the N=1 auto-pick fallback. Defaults to true. Setting false skips
|
|
15
|
+
* step (4) — useful for offline-first commands where the caller would
|
|
16
|
+
* rather error than block on the network.
|
|
17
|
+
*/
|
|
18
|
+
enableAutoPick?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type ResolvedTenant = {
|
|
21
|
+
kind: "flag" | "env" | "config" | "auto-pick";
|
|
22
|
+
slug: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "none";
|
|
25
|
+
/** Why no tenant was resolved (for caller-side messaging). */
|
|
26
|
+
reason: "anonymous" | "no-tenants" | "multiple-tenants-no-default" | "fetch-failed";
|
|
27
|
+
/** Available tenants when reason === "multiple-tenants-no-default". */
|
|
28
|
+
tenants?: TenantSummary[];
|
|
29
|
+
/** Network error string when reason === "fetch-failed". */
|
|
30
|
+
error?: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function resolveTenant(opts?: ResolveTenantOptions): Promise<ResolvedTenant>;
|
|
33
|
+
/**
|
|
34
|
+
* Helper for callers that just want the slug (or null) without inspecting
|
|
35
|
+
* the resolution kind. The caller is responsible for handling the null
|
|
36
|
+
* case (typically by surfacing a clear error message).
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveTenantSlug(opts?: ResolveTenantOptions): Promise<string | null>;
|