@ritualai/cli 0.7.9 → 0.7.11
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/dist/commands/doctor.js +113 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +198 -45
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +20 -18
- package/dist/commands/login.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/identity-banner.js +2 -1
- package/dist/lib/identity-banner.js.map +1 -1
- package/dist/lib/node-managers.js +114 -0
- package/dist/lib/node-managers.js.map +1 -0
- package/dist/lib/npm-registry.js +107 -0
- package/dist/lib/npm-registry.js.map +1 -0
- package/dist/lib/oidc.js +19 -10
- package/dist/lib/oidc.js.map +1 -1
- package/dist/lib/skill-bundles.js +62 -0
- package/dist/lib/skill-bundles.js.map +1 -0
- package/dist/lib/skill-manifest.js +53 -0
- package/dist/lib/skill-manifest.js.map +1 -0
- package/dist/lib/welcome-banner.js +9 -12
- package/dist/lib/welcome-banner.js.map +1 -1
- package/dist/lib/workspace-flow.js +11 -5
- package/dist/lib/workspace-flow.js.map +1 -1
- package/package.json +1 -1
- package/skills/claude-code/ritual/.ritual-bundle.json +4 -0
- package/skills/claude-code/ritual/references/async-polling.md +43 -9
- package/skills/claude-code/ritual/references/build-flow.md +764 -150
- package/skills/claude-code/ritual/references/cli-output-contract.md +181 -8
- package/skills/claude-code/ritual/references/context-pulse-flow.md +3 -3
- package/skills/claude-code/ritual/references/discovery-classification.md +3 -3
- package/skills/claude-code/ritual/references/resume-flow.md +2 -0
- package/skills/codex/ritual/.ritual-bundle.json +4 -0
- package/skills/codex/ritual/references/async-polling.md +43 -9
- package/skills/codex/ritual/references/build-flow.md +764 -150
- package/skills/codex/ritual/references/cli-output-contract.md +181 -8
- package/skills/codex/ritual/references/context-pulse-flow.md +3 -3
- package/skills/codex/ritual/references/discovery-classification.md +3 -3
- package/skills/codex/ritual/references/resume-flow.md +2 -0
- package/skills/cursor/ritual/.ritual-bundle.json +4 -0
- package/skills/cursor/ritual/references/async-polling.md +43 -9
- package/skills/cursor/ritual/references/build-flow.md +764 -150
- package/skills/cursor/ritual/references/cli-output-contract.md +181 -8
- package/skills/cursor/ritual/references/context-pulse-flow.md +3 -3
- package/skills/cursor/ritual/references/discovery-classification.md +3 -3
- package/skills/cursor/ritual/references/resume-flow.md +2 -0
- package/skills/gemini/ritual/.ritual-bundle.json +4 -0
- package/skills/gemini/ritual/references/async-polling.md +43 -9
- package/skills/gemini/ritual/references/build-flow.md +764 -150
- package/skills/gemini/ritual/references/cli-output-contract.md +181 -8
- package/skills/gemini/ritual/references/context-pulse-flow.md +3 -3
- package/skills/gemini/ritual/references/discovery-classification.md +3 -3
- package/skills/gemini/ritual/references/resume-flow.md +2 -0
- package/skills/kiro/ritual/.ritual-bundle.json +4 -0
- package/skills/kiro/ritual/references/async-polling.md +43 -9
- package/skills/kiro/ritual/references/build-flow.md +764 -150
- package/skills/kiro/ritual/references/cli-output-contract.md +181 -8
- package/skills/kiro/ritual/references/context-pulse-flow.md +3 -3
- package/skills/kiro/ritual/references/discovery-classification.md +3 -3
- package/skills/kiro/ritual/references/resume-flow.md +2 -0
- package/skills/vscode/ritual/.ritual-bundle.json +4 -0
- package/skills/vscode/ritual/references/async-polling.md +43 -9
- package/skills/vscode/ritual/references/build-flow.md +764 -150
- package/skills/vscode/ritual/references/cli-output-contract.md +181 -8
- package/skills/vscode/ritual/references/context-pulse-flow.md +3 -3
- package/skills/vscode/ritual/references/discovery-classification.md +3 -3
- package/skills/vscode/ritual/references/resume-flow.md +2 -0
package/dist/commands/login.js
CHANGED
|
@@ -48,27 +48,33 @@ async function loginCommand(options) {
|
|
|
48
48
|
workspaceName: ws.name,
|
|
49
49
|
projectDir,
|
|
50
50
|
cliVersion: (0, package_info_1.readPackageVersionSafe)(),
|
|
51
|
-
// `ritual login`'s
|
|
52
|
-
//
|
|
51
|
+
// `ritual login`'s tips are different from init's: focus on
|
|
52
|
+
// auth, not workspace or agent setup. Hide quick commands until
|
|
53
|
+
// the user is actually signed in.
|
|
53
54
|
tips: tokenStatus.kind === 'signed-in'
|
|
54
55
|
? undefined
|
|
55
56
|
: [
|
|
56
|
-
'1. Open your browser to
|
|
57
|
-
'2.
|
|
58
|
-
'3.
|
|
57
|
+
'1. Open your browser to sign in',
|
|
58
|
+
'2. Finish signup if brand-new',
|
|
59
|
+
'3. Return here; session cached locally',
|
|
59
60
|
],
|
|
60
|
-
quickCommands:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
quickCommands: tokenStatus.kind === 'signed-in'
|
|
62
|
+
? [
|
|
63
|
+
'ritual whoami',
|
|
64
|
+
'ritual login --switch-account',
|
|
65
|
+
'ritual logout --all',
|
|
66
|
+
'ritual doctor',
|
|
67
|
+
]
|
|
68
|
+
: [],
|
|
66
69
|
});
|
|
67
70
|
// If a valid session exists and no --switch-account, also keep
|
|
68
71
|
// the existing compact identity banner for the textual "already
|
|
69
72
|
// signed in" message + exit.
|
|
70
73
|
if (tokenStatus.kind === 'signed-in' && !options.switchAccount) {
|
|
71
|
-
(0, identity_banner_1.printIdentityBanner)((0, identity_banner_1.identityFromCreds)(tokenStatus.creds), {
|
|
74
|
+
(0, identity_banner_1.printIdentityBanner)((0, identity_banner_1.identityFromCreds)(tokenStatus.creds), {
|
|
75
|
+
indent: ' ',
|
|
76
|
+
switchCommand: 'ritual login --switch-account',
|
|
77
|
+
});
|
|
72
78
|
console.log('');
|
|
73
79
|
console.log(' Already signed in. Nothing to do.');
|
|
74
80
|
console.log('');
|
|
@@ -80,11 +86,8 @@ async function loginCommand(options) {
|
|
|
80
86
|
: undefined;
|
|
81
87
|
if (isSwitching) {
|
|
82
88
|
console.log(` Currently signed in as ${currentEmail}.`);
|
|
83
|
-
console.log(` Continuing will
|
|
84
|
-
console.log(`
|
|
85
|
-
console.log(` • Open your browser with OIDC \`prompt=login\` (Keycloak will show its`);
|
|
86
|
-
console.log(` sign-in form even if its SSO cookie says otherwise — no incognito needed)`);
|
|
87
|
-
console.log(` If anything goes wrong, your existing session is restored.`);
|
|
89
|
+
console.log(` Continuing will open your browser for a fresh sign-in.`);
|
|
90
|
+
console.log(` Your current session is backed up and restored if anything fails.`);
|
|
88
91
|
console.log('');
|
|
89
92
|
if (!process.stdin.isTTY) {
|
|
90
93
|
if (!options.yes) {
|
|
@@ -145,7 +148,6 @@ async function loginCommand(options) {
|
|
|
145
148
|
console.log('');
|
|
146
149
|
console.log(` ✓ Signed in as ${display}`);
|
|
147
150
|
console.log('');
|
|
148
|
-
console.log(' Your AI coding agent can now connect to Ritual via MCP.');
|
|
149
151
|
console.log(' Run `ritual whoami` to confirm session details.');
|
|
150
152
|
console.log('');
|
|
151
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;AAgDA,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ program
|
|
|
29
29
|
.option('--no-workspace', 'Skip the "create a workspace for this repo?" prompt. Useful for CI or when you want to bind a workspace by hand later.')
|
|
30
30
|
.option('--switch-account', 'Force a fresh sign-in even if you already have valid local credentials. Uses OIDC prompt=login so Keycloak ignores its SSO cookie. Atomic — your previous session is restored if anything fails.')
|
|
31
31
|
.option('--yes', 'Skip interactive confirmation prompts (required for --switch-account in non-TTY mode).')
|
|
32
|
+
.option('--skills-only', 'Refresh ONLY the bundled skill files in this project; skip auth, PAT minting, workspace binding, and MCP registration. Use after `npm i -g @ritualai/cli@latest` to pull the newest SKILL bundle into an already-initialized repo.')
|
|
32
33
|
.action(init_1.initCommand);
|
|
33
34
|
program
|
|
34
35
|
.command('login')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,8CAAkD;AAClD,4CAAsD;AACtD,qDAA4D;AAE5D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACL,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACX,yDAAyD;IACxD,yDAAyD,CAC1D;KACA,OAAO,CAAC,IAAA,qCAAsB,GAAE,CAAC,CAAC;AAEpC,oEAAoE;AACpE,+DAA+D;AAC/D,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kFAAkF,CAAC;KAC/F,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CACN,gBAAgB,EAChB,kFAAkF,CAClF;KACA,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,gBAAgB,EAChB,wHAAwH,CACxH;KACA,MAAM,CACN,kBAAkB,EAClB,kMAAkM,CAClM;KACA,MAAM,CACN,OAAO,EACP,wFAAwF,CACxF;KACA,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEtB,OAAO;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CACN,gBAAgB,EAChB,iGAAiG,CACjG;KACA,MAAM,CACN,kBAAkB,EAClB,4EAA4E,CAC5E;KACA,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,kBAAkB,EAClB,oIAAoI,CACpI;KACA,MAAM,CACN,OAAO,EACP,wFAAwF,CACxF;KACA,MAAM,CAAC,oBAAY,CAAC,CAAC;AAEvB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CACN,OAAO,EACP,6IAA6I,CAC7I;KACA,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,wBAAc,CAAC,CAAC;AAEzB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,iEAAiE;AACjE,+DAA+D;AAC/D,kDAAkD;AAClD,MAAM,KAAK,GAAG,OAAO;KACnB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC,CAAC;AAEpF,KAAK;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CACN,kBAAkB,EAClB,0FAA0F,CAC1F;KACA,MAAM,CAAC,aAAa,EAAE,8DAA8D,CAAC;KACrF,MAAM,CAAC,0BAAkB,CAAC,CAAC;AAE7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,8CAAkD;AAClD,4CAAsD;AACtD,qDAA4D;AAE5D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACL,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACX,yDAAyD;IACxD,yDAAyD,CAC1D;KACA,OAAO,CAAC,IAAA,qCAAsB,GAAE,CAAC,CAAC;AAEpC,oEAAoE;AACpE,+DAA+D;AAC/D,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kFAAkF,CAAC;KAC/F,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CACN,gBAAgB,EAChB,kFAAkF,CAClF;KACA,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,gBAAgB,EAChB,wHAAwH,CACxH;KACA,MAAM,CACN,kBAAkB,EAClB,kMAAkM,CAClM;KACA,MAAM,CACN,OAAO,EACP,wFAAwF,CACxF;KACA,MAAM,CACN,eAAe,EACf,oOAAoO,CACpO;KACA,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEtB,OAAO;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CACN,gBAAgB,EAChB,iGAAiG,CACjG;KACA,MAAM,CACN,kBAAkB,EAClB,4EAA4E,CAC5E;KACA,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,kBAAkB,EAClB,oIAAoI,CACpI;KACA,MAAM,CACN,OAAO,EACP,wFAAwF,CACxF;KACA,MAAM,CAAC,oBAAY,CAAC,CAAC;AAEvB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CACN,OAAO,EACP,6IAA6I,CAC7I;KACA,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,wBAAc,CAAC,CAAC;AAEzB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,iEAAiE;AACjE,+DAA+D;AAC/D,kDAAkD;AAClD,MAAM,KAAK,GAAG,OAAO;KACnB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC,CAAC;AAEpF,KAAK;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CACN,kBAAkB,EAClB,0FAA0F,CAC1F;KACA,MAAM,CAAC,aAAa,EAAE,8DAA8D,CAAC;KACrF,MAAM,CAAC,0BAAkB,CAAC,CAAC;AAE7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
|
|
@@ -81,7 +81,8 @@ function printIdentityBanner(identity, opts = {}) {
|
|
|
81
81
|
lines.push(`${indent} No refresh token stored — sign in again when access expires`);
|
|
82
82
|
}
|
|
83
83
|
if (opts.includeSwitchHint !== false) {
|
|
84
|
-
|
|
84
|
+
const switchCommand = opts.switchCommand ?? 'ritual init --switch-account';
|
|
85
|
+
lines.push(`${indent} To switch accounts: ${switchCommand}`);
|
|
85
86
|
}
|
|
86
87
|
process.stderr.write(lines.join('\n') + '\n');
|
|
87
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-banner.js","sourceRoot":"","sources":["../../src/lib/identity-banner.ts"],"names":[],"mappings":";;AAqDA,8CAaC;
|
|
1
|
+
{"version":3,"file":"identity-banner.js","sourceRoot":"","sources":["../../src/lib/identity-banner.ts"],"names":[],"mappings":";;AAqDA,8CAaC;AAmCD,kDA4CC;AAhJD,iCAAgD;AA2ChD;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,KAAqB;IACtD,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa;QACpD,CAAC,CAAC,IAAA,6BAAsB,EAAmB,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG;QAC7E,CAAC,CAAC,SAAS,CAAC;IACb,OAAO;QACN,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK;QACxB,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;QAC1C,gBAAgB;QAChB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa;KAC1C,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,cAAc,CAAC,aAAqB,EAAE,UAAkB;IAChE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC;IACnD,IAAI,EAAE,GAAG,EAAE;QAAE,OAAO,GAAG,EAAE,GAAG,CAAC;IAC7B,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IACnD,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,CAAC;AAgBD;;;GAGG;AACH,SAAgB,mBAAmB,CAClC,QAAsB,EACtB,OAAmC,EAAE;IAErC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,OAAO,GAAG;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,IAAI;YACnD,UAAU,EAAE,QAAQ,CAAC,UAAU;SAC/B,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrD,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB;QAC1C,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC;IAER,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,gBAAgB,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,6BAA6B,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,IAAI,SAAS,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CACT,GAAG,MAAM,6BAA6B,SAAS,kCAAkC,CACjF,CAAC;QACH,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,2DAA2D,CAAC,CAAC;QAClF,CAAC;IACF,CAAC;SAAM,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,+DAA+D,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,8BAA8B,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,yBAAyB,aAAa,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reportNodeManagers = reportNodeManagers;
|
|
4
|
+
exports.findDeadHyphenatedInstalls = findDeadHyphenatedInstalls;
|
|
5
|
+
exports.findShadowedInstalls = findShadowedInstalls;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
/**
|
|
10
|
+
* Read a single `package.json` and extract `{ name, version }`.
|
|
11
|
+
* Returns null on any read/parse failure — caller treats absence as
|
|
12
|
+
* "no install at this path", not as an error.
|
|
13
|
+
*/
|
|
14
|
+
function readPackageInfo(path) {
|
|
15
|
+
try {
|
|
16
|
+
const raw = (0, node_fs_1.readFileSync)(path, 'utf-8');
|
|
17
|
+
const parsed = JSON.parse(raw);
|
|
18
|
+
if (typeof parsed.name !== 'string' || typeof parsed.version !== 'string')
|
|
19
|
+
return null;
|
|
20
|
+
return { name: parsed.name, version: parsed.version };
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Given a directory we believe contains one or more Node version
|
|
28
|
+
* installations as immediate subdirectories, probe each for the two
|
|
29
|
+
* ritual packages. `nodeVersionDirPattern` describes how to derive the
|
|
30
|
+
* `lib/node_modules` location from each version dir.
|
|
31
|
+
*
|
|
32
|
+
* fnm layout: ~/.local/share/fnm/node-versions/v20.19.2/installation/lib/node_modules
|
|
33
|
+
* nvm layout: ~/.nvm/versions/node/v20.19.2/lib/node_modules
|
|
34
|
+
* asdf layout: ~/.asdf/installs/nodejs/20.19.2/.npm/lib/node_modules
|
|
35
|
+
*/
|
|
36
|
+
function scanVersionRoot(manager, versionsRoot, libPathFromVersion) {
|
|
37
|
+
if (!(0, node_fs_1.existsSync)(versionsRoot))
|
|
38
|
+
return [];
|
|
39
|
+
let versionDirs;
|
|
40
|
+
try {
|
|
41
|
+
versionDirs = (0, node_fs_1.readdirSync)(versionsRoot, { withFileTypes: true })
|
|
42
|
+
.filter((d) => d.isDirectory())
|
|
43
|
+
.map((d) => d.name);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const out = [];
|
|
49
|
+
const packageNames = ['@ritualai/cli', '@ritual-ai/cli'];
|
|
50
|
+
for (const versionDir of versionDirs) {
|
|
51
|
+
const nodeModules = libPathFromVersion((0, node_path_1.join)(versionsRoot, versionDir));
|
|
52
|
+
for (const pkg of packageNames) {
|
|
53
|
+
const pkgJson = (0, node_path_1.join)(nodeModules, ...pkg.split('/'), 'package.json');
|
|
54
|
+
const info = readPackageInfo(pkgJson);
|
|
55
|
+
if (!info)
|
|
56
|
+
continue;
|
|
57
|
+
if (info.name !== pkg)
|
|
58
|
+
continue;
|
|
59
|
+
out.push({
|
|
60
|
+
manager,
|
|
61
|
+
nodeVersion: versionDir,
|
|
62
|
+
packageName: pkg,
|
|
63
|
+
version: info.version,
|
|
64
|
+
packageJsonPath: pkgJson,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build the full report. Each manager is probed at its canonical
|
|
72
|
+
* install root; absence of a root is treated as "manager not used,"
|
|
73
|
+
* not an error. The aggregate `anyManagerPresent` is true if at least
|
|
74
|
+
* one root existed (whether or not it had ritual installs).
|
|
75
|
+
*
|
|
76
|
+
* NB: this does NOT probe the currently-active Node's global path —
|
|
77
|
+
* that's already reflected in `process.version` and the doctor reports
|
|
78
|
+
* it separately. The point of this report is shadowing detection: what
|
|
79
|
+
* other Node versions exist that you might silently fall through to.
|
|
80
|
+
*/
|
|
81
|
+
function reportNodeManagers(home = (0, node_os_1.homedir)()) {
|
|
82
|
+
const fnmRoot = (0, node_path_1.join)(home, '.local', 'share', 'fnm', 'node-versions');
|
|
83
|
+
const nvmRoot = (0, node_path_1.join)(home, '.nvm', 'versions', 'node');
|
|
84
|
+
const asdfRoot = (0, node_path_1.join)(home, '.asdf', 'installs', 'nodejs');
|
|
85
|
+
const anyManagerPresent = (0, node_fs_1.existsSync)(fnmRoot) || (0, node_fs_1.existsSync)(nvmRoot) || (0, node_fs_1.existsSync)(asdfRoot);
|
|
86
|
+
const installs = [
|
|
87
|
+
...scanVersionRoot('fnm', fnmRoot, (v) => (0, node_path_1.join)(v, 'installation', 'lib', 'node_modules')),
|
|
88
|
+
...scanVersionRoot('nvm', nvmRoot, (v) => (0, node_path_1.join)(v, 'lib', 'node_modules')),
|
|
89
|
+
// asdf's node plugin uses npm's per-version prefix under `.npm`.
|
|
90
|
+
// This is the path npm itself writes to when you `npm i -g`
|
|
91
|
+
// under an asdf-managed Node.
|
|
92
|
+
...scanVersionRoot('asdf', asdfRoot, (v) => (0, node_path_1.join)(v, '.npm', 'lib', 'node_modules')),
|
|
93
|
+
];
|
|
94
|
+
return { anyManagerPresent, installs };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Pull just the dead-package installs out of a report. Used by doctor
|
|
98
|
+
* to render a louder warning — having `@ritual-ai/cli` installed
|
|
99
|
+
* anywhere is always a problem (it's the dead 0.1.x legacy), regardless
|
|
100
|
+
* of whether the *current* shell picks it up.
|
|
101
|
+
*/
|
|
102
|
+
function findDeadHyphenatedInstalls(report) {
|
|
103
|
+
return report.installs.filter((i) => i.packageName === '@ritual-ai/cli');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Pull installs that are NOT the version of `currentVersion` (and not
|
|
107
|
+
* the dead hyphenated package — that's a separate, louder warning).
|
|
108
|
+
* These are "you've got a stale install on another Node version that
|
|
109
|
+
* will surface when fnm switches under you" candidates.
|
|
110
|
+
*/
|
|
111
|
+
function findShadowedInstalls(report, currentVersion) {
|
|
112
|
+
return report.installs.filter((i) => i.packageName === '@ritualai/cli' && i.version !== currentVersion);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=node-managers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-managers.js","sourceRoot":"","sources":["../../src/lib/node-managers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLatestNpmVersion = getLatestNpmVersion;
|
|
4
|
+
exports.isNewerVersion = isNewerVersion;
|
|
5
|
+
const node_https_1 = require("node:https");
|
|
6
|
+
/**
|
|
7
|
+
* Fetch the latest published version of an npm package from the public
|
|
8
|
+
* registry. Used by `ritual doctor` to surface "you're on 0.7.10 but
|
|
9
|
+
* 0.7.11 is available."
|
|
10
|
+
*
|
|
11
|
+
* Pure HTTPS — no dependency on a registry client library. We hit the
|
|
12
|
+
* package metadata endpoint and read `dist-tags.latest`, which is what
|
|
13
|
+
* `npm view <pkg> version` returns.
|
|
14
|
+
*
|
|
15
|
+
* Hard timeout because `ritual doctor` runs synchronously in the user's
|
|
16
|
+
* terminal and a hung network call would hang the diagnostic. Caller
|
|
17
|
+
* should treat null as "couldn't determine" (e.g. offline, registry
|
|
18
|
+
* down, corporate proxy) rather than "package doesn't exist."
|
|
19
|
+
*
|
|
20
|
+
* Why we don't use `child_process.execSync('npm view ...')`:
|
|
21
|
+
* - Shells out to `npm`, which loads ~600ms of Node startup just for
|
|
22
|
+
* the registry round-trip.
|
|
23
|
+
* - Adds an implicit dependency on `npm` being on PATH (we don't
|
|
24
|
+
* enforce that — a user could be on pnpm or yarn).
|
|
25
|
+
* - Surfaces npm's stderr noise (deprecation warnings, etc.) to the
|
|
26
|
+
* diagnostic output.
|
|
27
|
+
*/
|
|
28
|
+
async function getLatestNpmVersion(packageName, timeoutMs = 2000) {
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
// Encode scoped package names (`@scope/name`) for the URL path.
|
|
31
|
+
// `encodeURIComponent` turns `@` into `%40` and `/` into `%2F`,
|
|
32
|
+
// which is the registry's expected form for scoped packages.
|
|
33
|
+
const encoded = encodeURIComponent(packageName);
|
|
34
|
+
const url = `https://registry.npmjs.org/${encoded}`;
|
|
35
|
+
const req = (0, node_https_1.request)(url, {
|
|
36
|
+
method: 'GET',
|
|
37
|
+
headers: {
|
|
38
|
+
// Slim metadata response — full doc is megabytes for
|
|
39
|
+
// packages with long publish histories. `abbreviated`
|
|
40
|
+
// returns only the fields we need (~5KB).
|
|
41
|
+
Accept: 'application/vnd.npm.install-v1+json',
|
|
42
|
+
'User-Agent': '@ritualai/cli (doctor)',
|
|
43
|
+
},
|
|
44
|
+
}, (res) => {
|
|
45
|
+
if (res.statusCode !== 200) {
|
|
46
|
+
res.resume(); // drain and discard
|
|
47
|
+
resolve(null);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const chunks = [];
|
|
51
|
+
res.on('data', (c) => chunks.push(c));
|
|
52
|
+
res.on('end', () => {
|
|
53
|
+
try {
|
|
54
|
+
const body = Buffer.concat(chunks).toString('utf-8');
|
|
55
|
+
const parsed = JSON.parse(body);
|
|
56
|
+
const latest = parsed['dist-tags']?.latest;
|
|
57
|
+
resolve(typeof latest === 'string' ? latest : null);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
resolve(null);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
res.on('error', () => resolve(null));
|
|
64
|
+
});
|
|
65
|
+
req.setTimeout(timeoutMs, () => {
|
|
66
|
+
req.destroy();
|
|
67
|
+
resolve(null);
|
|
68
|
+
});
|
|
69
|
+
req.on('error', () => resolve(null));
|
|
70
|
+
req.end();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Loose semver compare: return true iff `latest` is strictly newer than
|
|
75
|
+
* `installed`. Tolerates `0.0.0-unknown` (used when we can't read our
|
|
76
|
+
* own version) by treating it as "always outdated" — which surfaces a
|
|
77
|
+
* loud error in doctor rather than silently passing.
|
|
78
|
+
*
|
|
79
|
+
* We deliberately don't pull in `semver` as a dep here — the cost
|
|
80
|
+
* (parse error handling, prerelease semantics, range syntax) isn't
|
|
81
|
+
* justified for a one-call compare. Splitting on '.' and comparing as
|
|
82
|
+
* numeric tuples is sufficient for our 0.X.Y release line.
|
|
83
|
+
*/
|
|
84
|
+
function isNewerVersion(installed, latest) {
|
|
85
|
+
if (installed === latest)
|
|
86
|
+
return false;
|
|
87
|
+
if (installed === '0.0.0-unknown')
|
|
88
|
+
return true;
|
|
89
|
+
const parse = (v) => v
|
|
90
|
+
.split('-')[0] // strip prerelease (e.g. -beta.1)
|
|
91
|
+
.split('.')
|
|
92
|
+
.map((s) => Number.parseInt(s, 10))
|
|
93
|
+
.map((n) => (Number.isFinite(n) ? n : 0));
|
|
94
|
+
const a = parse(installed);
|
|
95
|
+
const b = parse(latest);
|
|
96
|
+
const len = Math.max(a.length, b.length);
|
|
97
|
+
for (let i = 0; i < len; i++) {
|
|
98
|
+
const ai = a[i] ?? 0;
|
|
99
|
+
const bi = b[i] ?? 0;
|
|
100
|
+
if (bi > ai)
|
|
101
|
+
return true;
|
|
102
|
+
if (bi < ai)
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=npm-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../src/lib/npm-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/oidc.js
CHANGED
|
@@ -18,28 +18,29 @@ function generatePkce() {
|
|
|
18
18
|
/**
|
|
19
19
|
* Spin up a one-shot loopback server on a random port. Resolves with
|
|
20
20
|
* the captured `?code=...&state=...` query params from the OAuth
|
|
21
|
-
* redirect. Rejects on timeout (default
|
|
21
|
+
* redirect. Rejects on timeout (default 15 min) or error response.
|
|
22
22
|
*
|
|
23
23
|
* The timeout path is the common failure mode for new users who have
|
|
24
24
|
* to click an email-verification link: by the time the verification
|
|
25
|
-
* email arrives + the user notices + clicks, the 5-minute
|
|
26
|
-
* elapsed and Keycloak's redirect lands on a port we no
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
25
|
+
* email arrives + the user notices + clicks, the original 5-minute
|
|
26
|
+
* window had elapsed and Keycloak's redirect lands on a port we no
|
|
27
|
+
* longer hold. Bumped to 15 minutes 2026-05-14 — holding a local
|
|
28
|
+
* loopback port a bit longer is much cheaper than first-run users
|
|
29
|
+
* dropping out mid-signup. The /auth/cli-success page (Phase 1 of
|
|
30
|
+
* the back-to-terminal UX, R1 2026-05-12) catches the remainder.
|
|
30
31
|
*
|
|
31
32
|
* Phase 2 (Device Authorization Grant, RFC 8628) replaces this whole
|
|
32
33
|
* flow with one that doesn't depend on the original browser/CLI
|
|
33
34
|
* staying linked, eliminating the timeout class entirely.
|
|
34
35
|
*/
|
|
35
|
-
function awaitAuthorizationRedirect(issuer, timeoutMs =
|
|
36
|
+
function awaitAuthorizationRedirect(issuer, timeoutMs = 15 * 60 * 1000) {
|
|
36
37
|
let port = 0;
|
|
37
38
|
let serverRef;
|
|
38
39
|
const promise = new Promise((resolve, reject) => {
|
|
39
40
|
const timer = setTimeout(() => {
|
|
40
41
|
serverRef.close();
|
|
41
42
|
const fallback = cliSuccessFallbackUrl(issuer);
|
|
42
|
-
reject(new Error(`Login timed out — no callback received within
|
|
43
|
+
reject(new Error(`Login timed out — no callback received within 15 minutes.\n` +
|
|
43
44
|
` If you were asked to verify your email, the verification link's redirect\n` +
|
|
44
45
|
` came back after this CLI gave up listening. Recover with one of:\n` +
|
|
45
46
|
` 1. Re-run \`ritual login\` and click the verification link sooner, OR\n` +
|
|
@@ -154,9 +155,17 @@ async function performLoginFlow(cfg, openBrowser, log) {
|
|
|
154
155
|
authorizeUrl.searchParams.set('prompt', 'login');
|
|
155
156
|
}
|
|
156
157
|
log(`Opening browser to ${cfg.issuer.replace(/^https?:\/\//, '')}…`);
|
|
157
|
-
|
|
158
|
+
// The giant `?response_type=code&client_id=…` authorize URL used to
|
|
159
|
+
// print here unconditionally as a copy-paste fallback. In practice
|
|
160
|
+
// it was visual noise on 99% of runs (the `open` package spawns
|
|
161
|
+
// fine on macOS / Linux / Windows with a desktop). We now only
|
|
162
|
+
// surface it when `openBrowser` actually rejects — typical causes:
|
|
163
|
+
// SSH session with no $DISPLAY, container with no GUI, $BROWSER
|
|
164
|
+
// pointing at a missing binary. The catch's caller still proceeds
|
|
165
|
+
// to wait on the loopback callback, so a copy-paste sign-in works.
|
|
158
166
|
await openBrowser(authorizeUrl.toString()).catch(() => {
|
|
159
|
-
|
|
167
|
+
log(`Browser didn't open automatically. Visit this URL to sign in:`);
|
|
168
|
+
log(` ${authorizeUrl.toString()}`);
|
|
160
169
|
});
|
|
161
170
|
// Wait for the redirect back to localhost.
|
|
162
171
|
const result = await promise;
|
package/dist/lib/oidc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/lib/oidc.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/lib/oidc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findLocalSkillBundles = findLocalSkillBundles;
|
|
4
|
+
exports.findStaleBundles = findStaleBundles;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const providers_1 = require("./agents/providers");
|
|
8
|
+
const skill_manifest_1 = require("./skill-manifest");
|
|
9
|
+
/**
|
|
10
|
+
* Walk every known provider's `projectSkillDir` under `projectDir` and
|
|
11
|
+
* collect each child directory as a candidate skill bundle. Reads each
|
|
12
|
+
* manifest and compares to `cliVersion`.
|
|
13
|
+
*
|
|
14
|
+
* Hidden directories (those starting with `.`) are skipped — they're
|
|
15
|
+
* either dotfiles or our own manifest companions, never skill dirs.
|
|
16
|
+
*
|
|
17
|
+
* `cliVersion` is passed in (rather than read from package-info here)
|
|
18
|
+
* so tests can inject a fixed value.
|
|
19
|
+
*/
|
|
20
|
+
function findLocalSkillBundles(projectDir, cliVersion) {
|
|
21
|
+
const found = [];
|
|
22
|
+
for (const provider of providers_1.PROVIDERS) {
|
|
23
|
+
const skillRoot = (0, node_path_1.join)(projectDir, provider.projectSkillDir);
|
|
24
|
+
if (!(0, node_fs_1.existsSync)(skillRoot))
|
|
25
|
+
continue;
|
|
26
|
+
let entries;
|
|
27
|
+
try {
|
|
28
|
+
entries = (0, node_fs_1.readdirSync)(skillRoot, { withFileTypes: true })
|
|
29
|
+
.filter((d) => d.isDirectory() && !d.name.startsWith('.'))
|
|
30
|
+
.map((d) => d.name);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
for (const skillName of entries) {
|
|
36
|
+
const path = (0, node_path_1.join)(skillRoot, skillName);
|
|
37
|
+
// Defensive: a non-directory slipping through (race, symlink
|
|
38
|
+
// loop) just gets skipped.
|
|
39
|
+
try {
|
|
40
|
+
if (!(0, node_fs_1.statSync)(path).isDirectory())
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const manifest = (0, skill_manifest_1.readSkillManifest)(path);
|
|
47
|
+
const drift = (0, skill_manifest_1.compareToCliVersion)(manifest, cliVersion);
|
|
48
|
+
found.push({ provider, skillName, path, drift });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return found;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Subset of bundles whose drift status indicates a refresh would help.
|
|
55
|
+
* Both `drift` (manifest present, version mismatch) AND `unknown`
|
|
56
|
+
* (manifest missing — pre-0.7.11 bundle) are considered actionable:
|
|
57
|
+
* running `ritual init --skills-only` is the same fix for either case.
|
|
58
|
+
*/
|
|
59
|
+
function findStaleBundles(bundles) {
|
|
60
|
+
return bundles.filter((b) => b.drift.kind === 'drift' || b.drift.kind === 'unknown');
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=skill-bundles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bundles.js","sourceRoot":"","sources":["../../src/lib/skill-bundles.ts"],"names":[],"mappings":";;AAqCA,sDAgCC;AAQD,4CAEC;AA/ED,qCAA4D;AAC5D,yCAAiC;AACjC,kDAAmE;AACnE,qDAA4F;AAuB5F;;;;;;;;;;GAUG;AACH,SAAgB,qBAAqB,CAAC,UAAkB,EAAE,UAAkB;IAC3E,MAAM,KAAK,GAAuB,EAAE,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,qBAAS,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAA,oBAAU,EAAC,SAAS,CAAC;YAAE,SAAS;QAErC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACJ,OAAO,GAAG,IAAA,qBAAW,EAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;iBACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACxC,6DAA6D;YAC7D,2BAA2B;YAC3B,IAAI,CAAC;gBACJ,IAAI,CAAC,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE;oBAAE,SAAS;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACR,SAAS;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,IAAA,kCAAiB,EAAC,IAAI,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAA,oCAAmB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,OAA2B;IAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MANIFEST_FILENAME = void 0;
|
|
4
|
+
exports.writeSkillManifest = writeSkillManifest;
|
|
5
|
+
exports.readSkillManifest = readSkillManifest;
|
|
6
|
+
exports.compareToCliVersion = compareToCliVersion;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
exports.MANIFEST_FILENAME = '.ritual-bundle.json';
|
|
10
|
+
/**
|
|
11
|
+
* Write a manifest into `dir`. Used by the build-skills script.
|
|
12
|
+
*
|
|
13
|
+
* Always overwrites. `dir` must exist — caller is responsible for
|
|
14
|
+
* mkdir.
|
|
15
|
+
*/
|
|
16
|
+
function writeSkillManifest(dir, manifest) {
|
|
17
|
+
const path = (0, node_path_1.join)(dir, exports.MANIFEST_FILENAME);
|
|
18
|
+
(0, node_fs_1.writeFileSync)(path, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read a manifest from `dir`. Returns `null` if absent or unparseable.
|
|
22
|
+
*
|
|
23
|
+
* Never throws — drift checks are best-effort and an unreadable
|
|
24
|
+
* manifest just means "we can't tell," not "crash the doctor."
|
|
25
|
+
*/
|
|
26
|
+
function readSkillManifest(dir) {
|
|
27
|
+
const path = (0, node_path_1.join)(dir, exports.MANIFEST_FILENAME);
|
|
28
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
const raw = (0, node_fs_1.readFileSync)(path, 'utf-8');
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
if (typeof parsed.cliVersion !== 'string' || parsed.cliVersion.length === 0) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (typeof parsed.builtAt !== 'string' || parsed.builtAt.length === 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return { cliVersion: parsed.cliVersion, builtAt: parsed.builtAt };
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function compareToCliVersion(manifest, cliVersion) {
|
|
46
|
+
if (!manifest)
|
|
47
|
+
return { kind: 'unknown' };
|
|
48
|
+
if (manifest.cliVersion === cliVersion) {
|
|
49
|
+
return { kind: 'in-sync', bundleVersion: manifest.cliVersion };
|
|
50
|
+
}
|
|
51
|
+
return { kind: 'drift', bundleVersion: manifest.cliVersion, cliVersion };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=skill-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-manifest.js","sourceRoot":"","sources":["../../src/lib/skill-manifest.ts"],"names":[],"mappings":";;;AA0CA,gDAGC;AAQD,8CAgBC;AAkBD,kDASC;AAhGD,qCAAkE;AAClE,yCAAiC;AAiCpB,QAAA,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,GAAW,EAAE,QAA6B;IAC5E,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,yBAAiB,CAAC,CAAC;IAC1C,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAW;IAC5C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,yBAAiB,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiC,CAAC;QAC/D,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAkBD,SAAgB,mBAAmB,CAClC,QAAoC,EACpC,UAAkB;IAElB,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;AAC1E,CAAC"}
|