@ranger-testing/ranger-cli 1.1.3 → 1.1.5
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/build/cli.js +34 -8
- package/build/cli.js.map +1 -1
- package/build/commands/addEnv.js +1 -1
- package/build/commands/addEnv.js.map +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/clean.js.map +1 -1
- package/build/commands/dataMcpServer.js +1 -1
- package/build/commands/feature.js +115 -28
- package/build/commands/feature.js.map +1 -1
- package/build/commands/hooks/sessionStart.js +2 -0
- package/build/commands/hooks/sessionStart.js.map +1 -1
- package/build/commands/index.js +1 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/login.js +29 -0
- package/build/commands/login.js.map +1 -0
- package/build/commands/skillup.js +6 -3
- package/build/commands/skillup.js.map +1 -1
- package/build/commands/start.js +1 -1
- package/build/commands/start.js.map +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/cliSecret.js +1 -1
- package/build/commands/utils/deviceAuth.js +184 -0
- package/build/commands/utils/deviceAuth.js.map +1 -0
- package/build/commands/utils/environment.js +3 -0
- package/build/commands/utils/environment.js.map +1 -1
- package/build/commands/utils/featureApi.js +44 -0
- package/build/commands/utils/featureApi.js.map +1 -1
- package/build/commands/utils/featureReportGenerator.js +8 -8
- package/build/commands/utils/featureReportGenerator.js.map +1 -1
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/keychain.js.map +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/rangerRoot.js +26 -1
- package/build/commands/utils/rangerRoot.js.map +1 -1
- package/build/commands/utils/settings.js +20 -0
- package/build/commands/utils/settings.js.map +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/verifyFeature.js +64 -23
- package/build/commands/verifyFeature.js.map +1 -1
- package/build/commands/verifyInBrowser.js +1 -1
- package/build/skills/ranger/SKILL.md +43 -2
- package/build/skills/ranger/feedback.md +64 -0
- package/build/skills/ranger/start.md +17 -1
- package/build/skills/ranger/verify.md +15 -5
- package/package.json +1 -2
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { getCurrentEnvironment, ENVIRONMENT_CONFIGS, getApiBaseUrl, } from './environment.js';
|
|
3
|
+
import { storeToken, storeRefreshToken } from './keychain.js';
|
|
4
|
+
const WORKOS_DEVICE_AUTH_URL = 'https://api.workos.com/user_management/authorize/device';
|
|
5
|
+
const WORKOS_TOKEN_URL = 'https://api.workos.com/user_management/authenticate';
|
|
6
|
+
/**
|
|
7
|
+
* Request a device code from WorkOS for the device authorization flow.
|
|
8
|
+
*/
|
|
9
|
+
export async function requestDeviceCode(clientId) {
|
|
10
|
+
const response = await fetch(WORKOS_DEVICE_AUTH_URL, {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
13
|
+
body: new URLSearchParams({
|
|
14
|
+
client_id: clientId,
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const text = await response.text();
|
|
19
|
+
throw new Error(`Failed to request device code: ${response.status} ${text}`);
|
|
20
|
+
}
|
|
21
|
+
return response.json();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Poll WorkOS for token exchange after user authorizes the device.
|
|
25
|
+
* Resolves when the user completes auth, or rejects on expiry/error.
|
|
26
|
+
*/
|
|
27
|
+
export async function pollForTokens(clientId, deviceCode, interval, expiresIn) {
|
|
28
|
+
const deadline = Date.now() + expiresIn * 1000;
|
|
29
|
+
let pollInterval = interval * 1000;
|
|
30
|
+
while (Date.now() < deadline) {
|
|
31
|
+
await sleep(pollInterval);
|
|
32
|
+
const response = await fetch(WORKOS_TOKEN_URL, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
35
|
+
body: new URLSearchParams({
|
|
36
|
+
client_id: clientId,
|
|
37
|
+
device_code: deviceCode,
|
|
38
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
if (response.ok) {
|
|
42
|
+
return response.json();
|
|
43
|
+
}
|
|
44
|
+
const body = await response.json();
|
|
45
|
+
if (body.error === 'authorization_pending') {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (body.error === 'slow_down') {
|
|
49
|
+
pollInterval += 1000;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// expired_token, access_denied, or other terminal error
|
|
53
|
+
throw new Error(body.error_description || body.error || 'Authentication failed');
|
|
54
|
+
}
|
|
55
|
+
throw new Error('Device authorization timed out');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Fetch the authenticated user's profile from the backend.
|
|
59
|
+
*/
|
|
60
|
+
async function fetchUserProfile(workosAccessToken) {
|
|
61
|
+
const apiBaseUrl = getApiBaseUrl();
|
|
62
|
+
try {
|
|
63
|
+
const res = await fetch(`${apiBaseUrl}/organization/me`, {
|
|
64
|
+
method: 'GET',
|
|
65
|
+
headers: { 'workos-token': workosAccessToken },
|
|
66
|
+
});
|
|
67
|
+
if (res.ok)
|
|
68
|
+
return res.json();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// ignore
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build a unique CLI API key name by checking existing keys and incrementing.
|
|
77
|
+
* First key: "Alice's CLI Key"
|
|
78
|
+
* Second key: "Alice's CLI Key (2)"
|
|
79
|
+
* Third key: "Alice's CLI Key (3)"
|
|
80
|
+
*/
|
|
81
|
+
function buildKeyName(baseName, existingKeys) {
|
|
82
|
+
const matching = existingKeys.filter((k) => k.name === baseName || k.name.startsWith(`${baseName} (`));
|
|
83
|
+
if (matching.length === 0)
|
|
84
|
+
return baseName;
|
|
85
|
+
return `${baseName} (${matching.length + 1})`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Call the backend POST /api-keys endpoint to auto-provision an MCP API key,
|
|
89
|
+
* authenticated via the WorkOS access token.
|
|
90
|
+
*
|
|
91
|
+
* Names keys like "Alice's CLI Key", incrementing a number suffix if the user
|
|
92
|
+
* provisions multiple keys.
|
|
93
|
+
*/
|
|
94
|
+
export async function provisionApiKey(workosAccessToken) {
|
|
95
|
+
const apiBaseUrl = getApiBaseUrl();
|
|
96
|
+
const headers = {
|
|
97
|
+
'Content-Type': 'application/json',
|
|
98
|
+
'workos-token': workosAccessToken,
|
|
99
|
+
};
|
|
100
|
+
const profile = await fetchUserProfile(workosAccessToken);
|
|
101
|
+
const firstName = profile?.firstName || profile?.email?.split('@')[0];
|
|
102
|
+
const baseName = firstName ? `${firstName}'s CLI Key` : 'CLI Key';
|
|
103
|
+
// List existing keys to determine the right suffix
|
|
104
|
+
let existingKeys = [];
|
|
105
|
+
try {
|
|
106
|
+
const listRes = await fetch(`${apiBaseUrl}/api-keys`, {
|
|
107
|
+
method: 'GET',
|
|
108
|
+
headers,
|
|
109
|
+
});
|
|
110
|
+
if (listRes.ok) {
|
|
111
|
+
const data = await listRes.json();
|
|
112
|
+
existingKeys = data.apiKeys;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// If listing fails, just use the base name
|
|
117
|
+
}
|
|
118
|
+
const keyName = buildKeyName(baseName, existingKeys);
|
|
119
|
+
const response = await fetch(`${apiBaseUrl}/api-keys`, {
|
|
120
|
+
method: 'POST',
|
|
121
|
+
headers,
|
|
122
|
+
body: JSON.stringify({
|
|
123
|
+
name: keyName,
|
|
124
|
+
scope: 'mcp:write',
|
|
125
|
+
}),
|
|
126
|
+
});
|
|
127
|
+
if (!response.ok) {
|
|
128
|
+
const text = await response.text();
|
|
129
|
+
throw new Error(`Failed to provision API key: ${response.status} ${text}`);
|
|
130
|
+
}
|
|
131
|
+
const data = await response.json();
|
|
132
|
+
return data.apiKey.token;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Open a URL in the user's default browser.
|
|
136
|
+
*/
|
|
137
|
+
export function openBrowser(url) {
|
|
138
|
+
const platform = process.platform;
|
|
139
|
+
const cmd = platform === 'darwin'
|
|
140
|
+
? 'open'
|
|
141
|
+
: platform === 'win32'
|
|
142
|
+
? 'start'
|
|
143
|
+
: 'xdg-open';
|
|
144
|
+
exec(`${cmd} ${JSON.stringify(url)}`);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Run the full device authorization flow:
|
|
148
|
+
* 1. Request device code from WorkOS
|
|
149
|
+
* 2. Open browser for user to authenticate
|
|
150
|
+
* 3. Poll for tokens
|
|
151
|
+
* 4. Provision an MCP API key via the backend
|
|
152
|
+
* 5. Store the API key and refresh token
|
|
153
|
+
*
|
|
154
|
+
* Returns the provisioned API token.
|
|
155
|
+
*/
|
|
156
|
+
export async function runDeviceAuthFlow() {
|
|
157
|
+
const env = getCurrentEnvironment();
|
|
158
|
+
const clientId = ENVIRONMENT_CONFIGS[env].workosClientId;
|
|
159
|
+
// Step 1: Request device code
|
|
160
|
+
const deviceCode = await requestDeviceCode(clientId);
|
|
161
|
+
// Step 2: Open browser and show code
|
|
162
|
+
console.log('\n🔐 Opening browser to log in...\n');
|
|
163
|
+
openBrowser(deviceCode.verification_uri_complete);
|
|
164
|
+
console.log(`If the browser doesn't open, visit: ${deviceCode.verification_uri_complete}`);
|
|
165
|
+
console.log(`Code: ${deviceCode.user_code}\n`);
|
|
166
|
+
// Step 3: Poll for tokens
|
|
167
|
+
process.stdout.write('Waiting for authentication...');
|
|
168
|
+
const tokens = await pollForTokens(clientId, deviceCode.device_code, deviceCode.interval, deviceCode.expires_in);
|
|
169
|
+
console.log(' ✓');
|
|
170
|
+
// Step 4: Provision API key
|
|
171
|
+
process.stdout.write('Provisioning API key...');
|
|
172
|
+
const apiToken = await provisionApiKey(tokens.access_token);
|
|
173
|
+
console.log(' ✓');
|
|
174
|
+
// Step 5: Store credentials
|
|
175
|
+
await storeToken(apiToken);
|
|
176
|
+
if (tokens.refresh_token) {
|
|
177
|
+
await storeRefreshToken(tokens.refresh_token);
|
|
178
|
+
}
|
|
179
|
+
return apiToken;
|
|
180
|
+
}
|
|
181
|
+
function sleep(ms) {
|
|
182
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=deviceAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceAuth.js","sourceRoot":"","sources":["../../../src/commands/utils/deviceAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EACH,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,sBAAsB,GACxB,yDAAyD,CAAC;AAC9D,MAAM,gBAAgB,GAAG,qDAAqD,CAAC;AAsC/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,QAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,eAAe,CAAC;YACtB,SAAS,EAAE,QAAQ;SACtB,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACX,kCAAkC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAC9D,CAAC;IACN,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,QAAgB,EAChB,UAAkB,EAClB,QAAgB,EAChB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/C,IAAI,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC;IAEnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACtB,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,UAAU;gBACvB,UAAU,EAAE,8CAA8C;aAC7D,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,GAAuB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEvD,IAAI,IAAI,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;YACzC,SAAS;QACb,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC7B,YAAY,IAAI,IAAI,CAAC;YACrB,SAAS;QACb,CAAC;QAED,wDAAwD;QACxD,MAAM,IAAI,KAAK,CACX,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,uBAAuB,CAClE,CAAC;IACN,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACtD,CAAC;AAUD;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC3B,iBAAyB;IAEzB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,kBAAkB,EAAE;YACrD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,iBAAiB,EAAE;SACjD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACL,SAAS;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,QAAgB,EAAE,YAA0B;IAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,IAAI,CAAC,CACnE,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3C,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,iBAAyB;IAEzB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG;QACZ,cAAc,EAAE,kBAAkB;QAClC,cAAc,EAAE,iBAAiB;KACpC,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,mDAAmD;IACnD,IAAI,YAAY,GAAiB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,WAAW,EAAE;YAClD,MAAM,EAAE,KAAK;YACb,OAAO;SACV,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,GAAwB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvD,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,2CAA2C;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,WAAW,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,WAAW;SACrB,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACX,gCAAgC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAC5D,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GAAyB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,GAAG,GACL,QAAQ,KAAK,QAAQ;QACjB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,QAAQ,KAAK,OAAO;YACpB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC;IAEvB,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAEzD,8BAA8B;IAC9B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAErD,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,WAAW,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CACP,uCAAuC,UAAU,CAAC,yBAAyB,EAAE,CAChF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,aAAa,CAC9B,QAAQ,EACR,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,UAAU,CACxB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,4BAA4B;IAC5B,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -14,14 +14,17 @@ export const ENVIRONMENT_CONFIGS = {
|
|
|
14
14
|
prod: {
|
|
15
15
|
mcpServerUrl: 'https://mcp-server-716115358910.us-central1.run.app',
|
|
16
16
|
apiBaseUrl: 'https://api.ranger.net',
|
|
17
|
+
workosClientId: 'client_01J9CBYM7M5ZETCF7G6614DXR2',
|
|
17
18
|
},
|
|
18
19
|
staging: {
|
|
19
20
|
mcpServerUrl: 'https://mcp-server-301751771437.us-central1.run.app',
|
|
20
21
|
apiBaseUrl: 'https://api.staging.ranger.net',
|
|
22
|
+
workosClientId: 'client_01J9CBYM2DKWV9HM17D95Z540K',
|
|
21
23
|
},
|
|
22
24
|
local: {
|
|
23
25
|
mcpServerUrl: 'http://localhost:3100',
|
|
24
26
|
apiBaseUrl: 'http://localhost:8080',
|
|
27
|
+
workosClientId: 'client_01J9CBYM2DKWV9HM17D95Z540K',
|
|
25
28
|
},
|
|
26
29
|
};
|
|
27
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/commands/utils/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/commands/utils/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC5B;IACI,IAAI,EAAE;QACF,YAAY,EAAE,qDAAqD;QACnE,UAAU,EAAE,wBAAwB;QACpC,cAAc,EAAE,mCAAmC;KACtD;IACD,OAAO,EAAE;QACL,YAAY,EAAE,qDAAqD;QACnE,UAAU,EAAE,gCAAgC;QAC5C,cAAc,EAAE,mCAAmC;KACtD;IACD,KAAK,EAAE;QACH,YAAY,EAAE,uBAAuB;QACrC,UAAU,EAAE,uBAAuB;QACnC,cAAc,EAAE,mCAAmC;KACtD;CACJ,CAAC;AAEN;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC1C,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACvC,IAAI,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC3B,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,YAAY,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC"}
|
|
@@ -254,4 +254,48 @@ export async function concludeSession(featureId, sessionId) {
|
|
|
254
254
|
}
|
|
255
255
|
return response.json();
|
|
256
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Get action items for a feature - leaf items that can be verified.
|
|
259
|
+
* Returns non-closed items with no non-closed children, plus unaddressed comment counts.
|
|
260
|
+
*/
|
|
261
|
+
export async function getActionItems(featureId) {
|
|
262
|
+
const token = await getToken();
|
|
263
|
+
if (!token) {
|
|
264
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
265
|
+
}
|
|
266
|
+
const baseUrl = getApiBaseUrl();
|
|
267
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/action-items`, {
|
|
268
|
+
method: 'GET',
|
|
269
|
+
headers: {
|
|
270
|
+
Authorization: `Bearer ${token}`,
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
if (!response.ok) {
|
|
274
|
+
const error = await response.text();
|
|
275
|
+
throw new Error(`Failed to get action items: ${error}`);
|
|
276
|
+
}
|
|
277
|
+
return response.json();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get feedback and verification instructions for a checklist item.
|
|
281
|
+
* Returns unaddressed comments, parent description, and canonical flow.
|
|
282
|
+
*/
|
|
283
|
+
export async function getItemFeedback(featureId, itemId) {
|
|
284
|
+
const token = await getToken();
|
|
285
|
+
if (!token) {
|
|
286
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
287
|
+
}
|
|
288
|
+
const baseUrl = getApiBaseUrl();
|
|
289
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist-items/${itemId}/feedback`, {
|
|
290
|
+
method: 'GET',
|
|
291
|
+
headers: {
|
|
292
|
+
Authorization: `Bearer ${token}`,
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
if (!response.ok) {
|
|
296
|
+
const error = await response.text();
|
|
297
|
+
throw new Error(`Failed to get item feedback: ${error}`);
|
|
298
|
+
}
|
|
299
|
+
return response.json();
|
|
300
|
+
}
|
|
257
301
|
//# sourceMappingURL=featureApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureApi.js","sourceRoot":"","sources":["../../../src/commands/utils/featureApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"featureApi.js","sourceRoot":"","sources":["../../../src/commands/utils/featureApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ function getStatusEmoji(status) {
|
|
|
20
20
|
return '\ud83d\udfe0'; // orange circle 🟠
|
|
21
21
|
case 'blocked':
|
|
22
22
|
return '\ud83d\uded1'; // stop sign
|
|
23
|
-
case '
|
|
23
|
+
case 'closed':
|
|
24
24
|
return '\u26d4'; // no entry
|
|
25
25
|
default:
|
|
26
26
|
return '\u2753'; // question mark
|
|
@@ -113,17 +113,17 @@ export function generateFeatureReport(data) {
|
|
|
113
113
|
lines.push('');
|
|
114
114
|
}
|
|
115
115
|
// Checklist Progress
|
|
116
|
-
const
|
|
116
|
+
const nonClosedItems = checklistItems.filter((i) => i.status !== 'closed');
|
|
117
117
|
const verifiedCount = checklistItems.filter((i) => i.status === 'verified').length;
|
|
118
|
-
lines.push(`## Checklist Progress (${verifiedCount}/${
|
|
118
|
+
lines.push(`## Checklist Progress (${verifiedCount}/${nonClosedItems.length} verified)`);
|
|
119
119
|
lines.push('');
|
|
120
120
|
// Sort items by position
|
|
121
121
|
const sortedItems = [...checklistItems].sort((a, b) => a.position - b.position);
|
|
122
122
|
for (const item of sortedItems) {
|
|
123
123
|
const emoji = getStatusEmoji(item.status);
|
|
124
|
-
const
|
|
125
|
-
const prefix =
|
|
126
|
-
const suffix =
|
|
124
|
+
const isClosed = item.status === 'closed';
|
|
125
|
+
const prefix = isClosed ? '~~' : '';
|
|
126
|
+
const suffix = isClosed ? '~~' : '';
|
|
127
127
|
lines.push(`### ${emoji} ${prefix}${item.description}${suffix}`);
|
|
128
128
|
lines.push('');
|
|
129
129
|
if (item.status === 'verified' && item.verifiedAt) {
|
|
@@ -135,8 +135,8 @@ export function generateFeatureReport(data) {
|
|
|
135
135
|
lines.push(`- **Reason:** ${item.blockedReason}`);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
if (item.status === '
|
|
139
|
-
lines.push(`- **
|
|
138
|
+
if (item.status === 'closed' && item.closedAt) {
|
|
139
|
+
lines.push(`- **Closed:** ${formatDate(item.closedAt)}`);
|
|
140
140
|
if (item.canceledReason) {
|
|
141
141
|
lines.push(`- **Reason:** ${item.canceledReason}`);
|
|
142
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureReportGenerator.js","sourceRoot":"","sources":["../../../src/commands/utils/featureReportGenerator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,uCAAuC,UAAU,EAAE,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc;IAClC,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACZ,OAAO,QAAQ,CAAC,CAAC,cAAc;QACnC,KAAK,SAAS,CAAC;QACf,KAAK,aAAa;YACd,OAAO,cAAc,CAAC,CAAC,kBAAkB;QAC7C,KAAK,YAAY;YACb,OAAO,cAAc,CAAC,CAAC,mBAAmB;QAC9C,KAAK,SAAS;YACV,OAAO,cAAc,CAAC,CAAC,YAAY;QACvC,KAAK,
|
|
1
|
+
{"version":3,"file":"featureReportGenerator.js","sourceRoot":"","sources":["../../../src/commands/utils/featureReportGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x24a1c0=_0x20d4;(function(_0x50357f,_0x1a67a2){const _0x114aa9=_0x20d4,_0x42c35c=_0x50357f();while(!![]){try{const _0x25b37a=-parseInt(_0x114aa9(0x1a1))/0x1+-parseInt(_0x114aa9(0x1bd))/0x2+-parseInt(_0x114aa9(0x194))/0x3+-parseInt(_0x114aa9(0x1a9))/0x4+-parseInt(_0x114aa9(0x1aa))/0x5*(-parseInt(_0x114aa9(0x1be))/0x6)+parseInt(_0x114aa9(0x1bc))/0x7+parseInt(_0x114aa9(0x197))/0x8*(parseInt(_0x114aa9(0x1a4))/0x9);if(_0x25b37a===_0x1a67a2)break;else _0x42c35c['push'](_0x42c35c['shift']());}catch(_0x42a658){_0x42c35c['push'](_0x42c35c['shift']());}}}(_0x5c52,0x4b973));const _0x483bc=(function(){const _0x1dea24=_0x20d4,_0x25780f={'JiGYF':_0x1dea24(0x193),'QgsHs':_0x1dea24(0x1a0),'krpKa':_0x1dea24(0x1b5),'MrkaN':function(_0x5561b2,_0x48a03d){return _0x5561b2===_0x48a03d;},'PNzKy':_0x1dea24(0x1a6),'jWmog':_0x1dea24(0x18f)};let _0x4a94d1=!![];return function(_0x59ee0d,_0x3c5de){const _0x391e65=_0x1dea24,_0x582380={'ZGUfN':_0x25780f[_0x391e65(0x195)],'dsNKU':function(_0x3031c8,_0x428102){return _0x3031c8===_0x428102;},'SWnrM':_0x25780f[_0x391e65(0x1a2)],'jvpBG':_0x25780f[_0x391e65(0x1ac)]};if(_0x25780f[_0x391e65(0x1b2)](_0x25780f[_0x391e65(0x1b9)],_0x25780f['jWmog']))return!!_0x51151d[_0x391e65(0x1c1)][_0x391e65(0x1ad)];else{const _0x1dc788=_0x4a94d1?function(){const _0x273ff6=_0x391e65;if(_0x582380['dsNKU'](_0x582380[_0x273ff6(0x19d)],_0x582380[_0x273ff6(0x19d)])){if(_0x3c5de){if(_0x582380['jvpBG']!==_0x582380[_0x273ff6(0x191)])return _0x120166[_0x273ff6(0x198)]()['search'](_0x582380[_0x273ff6(0x1a7)])[_0x273ff6(0x198)]()[_0x273ff6(0x199)](_0x3738e0)[_0x273ff6(0x1a5)](_0x582380['ZGUfN']);else{const _0x579b3a=_0x3c5de[_0x273ff6(0x19c)](_0x59ee0d,arguments);return _0x3c5de=null,_0x579b3a;}}}else{const _0xda96d3=_0x1aa84e[_0x273ff6(0x19c)](_0xa17bae,arguments);return _0x5f5d74=null,_0xda96d3;}}:function(){};return _0x4a94d1=![],_0x1dc788;}};}()),_0x27f892=_0x483bc(this,function(){const _0x8d8ff5=_0x20d4,_0x7aaa51={'fGKPl':_0x8d8ff5(0x193)};return _0x27f892[_0x8d8ff5(0x198)]()[_0x8d8ff5(0x1a5)](_0x7aaa51['fGKPl'])['toString']()[_0x8d8ff5(0x199)](_0x27f892)[_0x8d8ff5(0x1a5)](_0x7aaa51['fGKPl']);});_0x27f892();import{appendFile,readFile,writeFile,mkdir,unlink}from'fs/promises';import{join}from'path';import{getRangerHomeDir}from'./rangerRoot.js';const ENV_TOKEN=_0x24a1c0(0x19f),TOKEN_DIR=getRangerHomeDir(),TOKEN_PATH=join(TOKEN_DIR,_0x24a1c0(0x1b4)),REFRESH_TOKEN_PATH=join(TOKEN_DIR,_0x24a1c0(0x1b3));function isGitHubCI(){const _0x414134=_0x24a1c0;return!!process[_0x414134(0x1c1)][_0x414134(0x1ad)];}async function writeToGitHubEnv(_0x48b0a6,_0x5133a1){const _0x12c5d1=_0x24a1c0,_0x18583d={'kouBz':function(_0x3fa25e,_0x53be16,_0x2ff31d){return _0x3fa25e(_0x53be16,_0x2ff31d);}},_0x4d16a5=process[_0x12c5d1(0x1c1)][_0x12c5d1(0x1ad)];_0x4d16a5&&await _0x18583d[_0x12c5d1(0x1c0)](appendFile,_0x4d16a5,_0x48b0a6+'='+_0x5133a1+'\x0a');}export async function storeToken(_0xfd7967){const _0x2c7ad8=_0x24a1c0,_0x23a275={'HCduj':function(_0x3cf475){return _0x3cf475();},'StanP':function(_0x2e273e,_0x17b19b){return _0x2e273e===_0x17b19b;},'AoKRP':_0x2c7ad8(0x1ae),'bYQjJ':_0x2c7ad8(0x196),'dzQcN':function(_0x33dfc5,_0x3a8bb4,_0x1843f1){return _0x33dfc5(_0x3a8bb4,_0x1843f1);},'nYfcg':function(_0x7cd35f,_0x1ba946,_0x278e40){return _0x7cd35f(_0x1ba946,_0x278e40);},'nDHHu':function(_0x261524,_0x369298,_0x3952af,_0x1ccd2e){return _0x261524(_0x369298,_0x3952af,_0x1ccd2e);}};if(_0x23a275['HCduj'](isGitHubCI)){if(_0x23a275[_0x2c7ad8(0x1ab)](_0x23a275[_0x2c7ad8(0x19b)],_0x23a275[_0x2c7ad8(0x1b6)]))return null;else await _0x23a275[_0x2c7ad8(0x19e)](writeToGitHubEnv,ENV_TOKEN,_0xfd7967);}else await _0x23a275[_0x2c7ad8(0x1b7)](mkdir,TOKEN_DIR,{'recursive':!![]}),await _0x23a275[_0x2c7ad8(0x1b0)](writeFile,TOKEN_PATH,_0xfd7967,{'mode':0x180});}function _0x20d4(_0x3429ed,_0x2b259d){_0x3429ed=_0x3429ed-0x18f;const _0x47cafd=_0x5c52();let _0x27f892=_0x47cafd[_0x3429ed];if(_0x20d4['YGdYwE']===undefined){var _0x483bc=function(_0xff49a9){const _0x4750e7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x144e0c='',_0x244716='',_0xcd3c96=_0x144e0c+_0x483bc;for(let _0x2d29f4=0x0,_0x9f169,_0x13494d,_0xaf6f2e=0x0;_0x13494d=_0xff49a9['charAt'](_0xaf6f2e++);~_0x13494d&&(_0x9f169=_0x2d29f4%0x4?_0x9f169*0x40+_0x13494d:_0x13494d,_0x2d29f4++%0x4)?_0x144e0c+=_0xcd3c96['charCodeAt'](_0xaf6f2e+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x9f169>>(-0x2*_0x2d29f4&0x6)):_0x2d29f4:0x0){_0x13494d=_0x4750e7['indexOf'](_0x13494d);}for(let _0x2faa04=0x0,_0x1ff1be=_0x144e0c['length'];_0x2faa04<_0x1ff1be;_0x2faa04++){_0x244716+='%'+('00'+_0x144e0c['charCodeAt'](_0x2faa04)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x244716);};_0x20d4['xlEQGr']=_0x483bc,_0x20d4['USjzun']={},_0x20d4['YGdYwE']=!![];}const _0x5c5213=_0x47cafd[0x0],_0x20d469=_0x3429ed+_0x5c5213,_0x19bab7=_0x20d4['USjzun'][_0x20d469];if(!_0x19bab7){const _0x58d788=function(_0x151303){this['pPflZm']=_0x151303,this['xypIOa']=[0x1,0x0,0x0],this['gQzjCS']=function(){return'newState';},this['afRISz']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['WmfsQl']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x58d788['prototype']['iRrbKf']=function(){const _0x8edda5=new RegExp(this['afRISz']+this['WmfsQl']),_0x1628b0=_0x8edda5['test'](this['gQzjCS']['toString']())?--this['xypIOa'][0x1]:--this['xypIOa'][0x0];return this['jlETWx'](_0x1628b0);},_0x58d788['prototype']['jlETWx']=function(_0x2f3a76){if(!Boolean(~_0x2f3a76))return _0x2f3a76;return this['rVLVCX'](this['pPflZm']);},_0x58d788['prototype']['rVLVCX']=function(_0x495107){for(let _0x15f1ed=0x0,_0x5d3e3c=this['xypIOa']['length'];_0x15f1ed<_0x5d3e3c;_0x15f1ed++){this['xypIOa']['push'](Math['round'](Math['random']())),_0x5d3e3c=this['xypIOa']['length'];}return _0x495107(this['xypIOa'][0x0]);},new _0x58d788(_0x20d4)['iRrbKf'](),_0x27f892=_0x20d4['xlEQGr'](_0x27f892),_0x20d4['USjzun'][_0x20d469]=_0x27f892;}else _0x27f892=_0x19bab7;return _0x27f892;}export async function getToken(){const _0x362ded=_0x24a1c0,_0x301d59={'yBWjt':'yoBwg','SkDXC':_0x362ded(0x190)};if(process[_0x362ded(0x1c1)][ENV_TOKEN])return process[_0x362ded(0x1c1)][ENV_TOKEN];try{if(_0x301d59[_0x362ded(0x19a)]!==_0x301d59[_0x362ded(0x19a)]){const _0x436846=_0x58d788?function(){if(_0x15f1ed){const _0x270c3e=_0x5d381e['apply'](_0x49bad5,arguments);return _0x186a63=null,_0x270c3e;}}:function(){};return _0x495107=![],_0x436846;}else{const _0x42b665=await readFile(TOKEN_PATH,_0x301d59[_0x362ded(0x1bf)]);return _0x42b665[_0x362ded(0x1a8)]()||null;}}catch{return null;}}export async function deleteToken(){const _0x1c38e2=_0x24a1c0,_0x353b8a={'wXHzl':function(_0x549ef6,_0x467ec5){return _0x549ef6(_0x467ec5);}};try{return await _0x353b8a[_0x1c38e2(0x1b1)](unlink,TOKEN_PATH),!![];}catch{return![];}}export async function storeRefreshToken(_0x107134){const _0xc0db26=_0x24a1c0,_0x12f526={'JVSCx':function(_0x2cd8e6,_0x39e6bd,_0x41cff4){return _0x2cd8e6(_0x39e6bd,_0x41cff4);}};await _0x12f526[_0xc0db26(0x1bb)](mkdir,TOKEN_DIR,{'recursive':!![]}),await writeFile(REFRESH_TOKEN_PATH,_0x107134,{'mode':0x180});}export async function getRefreshToken(){const _0x2791e3=_0x24a1c0,_0x45320d={'UttEW':function(_0x37ebfd,_0x44e261,_0x4e4fdf){return _0x37ebfd(_0x44e261,_0x4e4fdf);},'mADrg':function(_0x775840,_0x9df3ad){return _0x775840!==_0x9df3ad;},'ZnjDS':'vhXGE','fBWbU':'unBSh'};try{const _0x59ac1c=await _0x45320d['UttEW'](readFile,REFRESH_TOKEN_PATH,_0x2791e3(0x190));return _0x59ac1c[_0x2791e3(0x1a8)]()||null;}catch{return _0x45320d[_0x2791e3(0x1af)](_0x45320d[_0x2791e3(0x192)],_0x45320d[_0x2791e3(0x1ba)])?null:![];}}export async function deleteRefreshToken(){const _0x5699af=_0x24a1c0,_0x2ab306={'dPequ':function(_0x997698,_0x5d7f67){return _0x997698===_0x5d7f67;},'RGKIJ':'jggUj','qOWSq':'coJmD','Iivtd':function(_0x257571,_0x40ed85){return _0x257571(_0x40ed85);}};try{return _0x2ab306['dPequ'](_0x2ab306[_0x5699af(0x1b8)],_0x2ab306['qOWSq'])?![]:(await _0x2ab306['Iivtd'](unlink,REFRESH_TOKEN_PATH),!![]);}catch{return![];}}function _0x5c52(){const _0x29b805=['v0PhwLO','oda4mteYreLcDKvP','Dg9tDhjPBMC','y29UC3rYDwn0B3i','EujxANq','qw9luLa','yxbWBhK','u1DUCK0','zhPry04','uKfor0vsx01duf9ut0TftG','s2DLAuC','mtCZmJyYwNvzEwzR','uwDZshm','s1rxy2S','nZjkAuXOBxy','C2vHCMnO','thDSC3m','wKDvzK4','DhjPBq','nta4mdK2rffJte56','mJbsC1LYsvq','u3rHBLa','A3jWs2e','r0Lusfvcx0vovG','DejyDLG','BufeCMC','BKrishu','D1HiEMW','txjRyu4','CMvMCMvZAc50Ehq','y2XPlNr4Da','A0vLv1C','yLLrAKO','BLLMy2C','uKDlsuO','ue56s3K','zKjxyLu','sLztq3G','nZeZnJvMseLJu2y','nZu0mtqWvK55yxbR','nti2nJuWy1rKA1Hs','u2Tewem','A291qNO','zw52','vvfsAxm','DxrMltG','ANzWqKC','wM5Qrfm','kcGOlISPkYKRksSK','ntq3mJK2vKfPzezK','sMLhwuy'];_0x5c52=function(){return _0x29b805;};return _0x5c52();}export async function deleteAllCredentials(){const _0x1a42e5=_0x24a1c0,_0x3b54ff={'KTWck':function(_0x5a7c7a){return _0x5a7c7a();}};await _0x3b54ff[_0x1a42e5(0x1a3)](deleteToken),await _0x3b54ff[_0x1a42e5(0x1a3)](deleteRefreshToken);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/commands/utils/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/commands/utils/keychain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x5d0b(_0x58d633,_0x4df941){_0x58d633=_0x58d633-0x1d4;const _0x8fe9ee=_0x4307();let _0x3bbe48=_0x8fe9ee[_0x58d633];if(_0x5d0b['eOnUay']===undefined){var _0x247709=function(_0x9f13dd){const _0x4e61e8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d6f0c='',_0x2bd017='',_0xd1dc46=_0x1d6f0c+_0x247709;for(let _0x291792=0x0,_0x3cb6bf,_0x96d2e3,_0xc8143e=0x0;_0x96d2e3=_0x9f13dd['charAt'](_0xc8143e++);~_0x96d2e3&&(_0x3cb6bf=_0x291792%0x4?_0x3cb6bf*0x40+_0x96d2e3:_0x96d2e3,_0x291792++%0x4)?_0x1d6f0c+=_0xd1dc46['charCodeAt'](_0xc8143e+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x3cb6bf>>(-0x2*_0x291792&0x6)):_0x291792:0x0){_0x96d2e3=_0x4e61e8['indexOf'](_0x96d2e3);}for(let _0x1085d9=0x0,_0x5795bf=_0x1d6f0c['length'];_0x1085d9<_0x5795bf;_0x1085d9++){_0x2bd017+='%'+('00'+_0x1d6f0c['charCodeAt'](_0x1085d9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2bd017);};_0x5d0b['tlvXQd']=_0x247709,_0x5d0b['ILDBZw']={},_0x5d0b['eOnUay']=!![];}const _0x430744=_0x8fe9ee[0x0],_0x5d0b53=_0x58d633+_0x430744,_0x4d5cf9=_0x5d0b['ILDBZw'][_0x5d0b53];if(!_0x4d5cf9){const _0x591d35=function(_0x3b1305){this['BOuisL']=_0x3b1305,this['fbrDvo']=[0x1,0x0,0x0],this['uSJTAE']=function(){return'newState';},this['wwNZcr']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['LIbDDQ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x591d35['prototype']['EwCQsC']=function(){const _0x336bb3=new RegExp(this['wwNZcr']+this['LIbDDQ']),_0x88657e=_0x336bb3['test'](this['uSJTAE']['toString']())?--this['fbrDvo'][0x1]:--this['fbrDvo'][0x0];return this['usFqfd'](_0x88657e);},_0x591d35['prototype']['usFqfd']=function(_0x499ecd){if(!Boolean(~_0x499ecd))return _0x499ecd;return this['ldDQwq'](this['BOuisL']);},_0x591d35['prototype']['ldDQwq']=function(_0x438887){for(let _0x2a3b8b=0x0,_0x1a166b=this['fbrDvo']['length'];_0x2a3b8b<_0x1a166b;_0x2a3b8b++){this['fbrDvo']['push'](Math['round'](Math['random']())),_0x1a166b=this['fbrDvo']['length'];}return _0x438887(this['fbrDvo'][0x0]);},new _0x591d35(_0x5d0b)['EwCQsC'](),_0x3bbe48=_0x5d0b['tlvXQd'](_0x3bbe48),_0x5d0b['ILDBZw'][_0x5d0b53]=_0x3bbe48;}else _0x3bbe48=_0x4d5cf9;return _0x3bbe48;}(function(_0x15e413,_0xbdcf20){const _0x3629f7=_0x5d0b,_0x3ee276=_0x15e413();while(!![]){try{const _0x2baa0e=-parseInt(_0x3629f7(0x1de))/0x1+-parseInt(_0x3629f7(0x1d9))/0x2*(-parseInt(_0x3629f7(0x1f3))/0x3)+parseInt(_0x3629f7(0x1db))/0x4+-parseInt(_0x3629f7(0x1f5))/0x5*(-parseInt(_0x3629f7(0x1e5))/0x6)+parseInt(_0x3629f7(0x1ea))/0x7+parseInt(_0x3629f7(0x1e3))/0x8*(-parseInt(_0x3629f7(0x1eb))/0x9)+-parseInt(_0x3629f7(0x1ef))/0xa*(-parseInt(_0x3629f7(0x1f6))/0xb);if(_0x2baa0e===_0xbdcf20)break;else _0x3ee276['push'](_0x3ee276['shift']());}catch(_0x30a7b9){_0x3ee276['push'](_0x3ee276['shift']());}}}(_0x4307,0x7773d));const _0x247709=(function(){const _0x417950=_0x5d0b,_0x44efde={'sKkLw':_0x417950(0x1ec),'bcPeW':function(_0x246b1f,_0x51674b){return _0x246b1f===_0x51674b;},'GdpVU':_0x417950(0x1e9),'HdqKG':'wPAUu'};let _0x4f8543=!![];return function(_0x2bce5b,_0x1a0f62){const _0x35689f=_0x417950,_0x2ed03c={'nggnW':_0x44efde[_0x35689f(0x1e2)],'PnwRI':function(_0x452d29,_0x21649f){const _0x3d0ce2=_0x35689f;return _0x44efde[_0x3d0ce2(0x1f2)](_0x452d29,_0x21649f);},'fVfUS':_0x44efde[_0x35689f(0x1dc)]};if(_0x44efde[_0x35689f(0x1f2)](_0x44efde[_0x35689f(0x1e1)],_0x35689f(0x1e4)))return _0x2d74fe[_0x35689f(0x1df)]()['search'](_0x2ed03c[_0x35689f(0x1d7)])[_0x35689f(0x1df)]()[_0x35689f(0x1e7)](_0x353cd9)[_0x35689f(0x1d6)]('(((.+)+)+)+$');else{const _0x3510f6=_0x4f8543?function(){const _0x3e79ab=_0x35689f;if(_0x2ed03c['PnwRI'](_0x2ed03c[_0x3e79ab(0x1e6)],_0x2ed03c['fVfUS'])){if(_0x1a0f62){const _0x5f44dd=_0x1a0f62[_0x3e79ab(0x1d5)](_0x2bce5b,arguments);return _0x1a0f62=null,_0x5f44dd;}}else{const _0x2d9ef1=_0x4599cc['apply'](_0x2992f6,arguments);return _0x121e0b=null,_0x2d9ef1;}}:function(){};return _0x4f8543=![],_0x3510f6;}};}()),_0x3bbe48=_0x247709(this,function(){const _0x4062d1=_0x5d0b,_0x17494f={'BemSY':'(((.+)+)+)+$'};return _0x3bbe48[_0x4062d1(0x1df)]()[_0x4062d1(0x1d6)](_0x17494f[_0x4062d1(0x1e0)])[_0x4062d1(0x1df)]()[_0x4062d1(0x1e7)](_0x3bbe48)['search'](_0x17494f[_0x4062d1(0x1e0)]);});_0x3bbe48();import{getToken}from'./keychain.js';import{getApiBaseUrl}from'./environment.js';function _0x4307(){const _0x12ff34=['D2zMEM4','nZe4ndH3t2TYvu4','ovr3wfDnuq','kcGOlISPkYKRksSK','rMfPBgvKihrVigXVzYbZA2LSBcbPBNn0ywXSyxrPB246ia','vvjsDeW','mJbTt1jPvxG','t2Dlwwe','ue9tva','yMnqzvC','m3HQr0TXra','ALvjq0S','mta3ntGZmfL0yufPua','ntyXmduZowD2tfL3zG','Agjwvxe','yxbWBhK','C2vHCMnO','BMDNBLC','yxrTyvu','mZy3odi2uNnQywvO','wNrOB2S','nJu4mtyWELbswvLT','r2rWvLu','Dgv4Da','otqXnZm4Cu5gDvPw','Dg9tDhjPBMC','qMvTu1K','sgrXs0C','C0TRthC','mZaYnta1nMr2u1L6zW','D0vcseO','mtj5zM9gENe','zLzMvvm','y29UC3rYDwn0B3i','l2fWAs92ms9Ty3aVBg9JywWTywDLBNqTAw5ZDgfSBgf0Aw9UCW'];_0x4307=function(){return _0x12ff34;};return _0x4307();}export async function logLocalAgentInstallation(_0x2ef224,_0x25f25f,_0x56eee8){const _0x3e43a3=_0x5d0b,_0xf8c3ae={'atmaU':function(_0x2f2ce9){return _0x2f2ce9();},'UYpWR':function(_0xf21d9c,_0x3fea36,_0x4f5699){return _0xf21d9c(_0x3fea36,_0x4f5699);},'URRtL':_0x3e43a3(0x1f1),'Dtdir':'application/json','OgKYa':function(_0x4e62f1,_0x10f7c6){return _0x4e62f1!==_0x10f7c6;},'Zthok':_0x3e43a3(0x1d4)},_0x21514f=await _0xf8c3ae[_0x3e43a3(0x1d8)](getToken);if(!_0x21514f)return;const _0x1915b0=getApiBaseUrl(),_0x553901=await _0xf8c3ae['UYpWR'](fetch,_0x1915b0+_0x3e43a3(0x1e8),{'method':_0xf8c3ae[_0x3e43a3(0x1ee)],'headers':{'Authorization':'Bearer\x20'+_0x21514f,'Content-Type':_0xf8c3ae['Dtdir']},'body':JSON['stringify']({'skillName':_0x2ef224,'cliVersion':_0x56eee8,'metadata':_0x25f25f})});if(!_0x553901['ok']){if(_0xf8c3ae[_0x3e43a3(0x1f0)](_0xf8c3ae[_0x3e43a3(0x1da)],_0x3e43a3(0x1f4))){const _0x5504da=await _0x553901[_0x3e43a3(0x1dd)]();console['error'](_0x3e43a3(0x1ed)+_0x5504da);}else{const _0x39e3fe=_0x591d35?function(){const _0x3b3f52=_0x3e43a3;if(_0x2a3b8b){const _0x53f08a=_0x7a9a80[_0x3b3f52(0x1d5)](_0x9f9d26,arguments);return _0x6f965c=null,_0x53f08a;}}:function(){};return _0x438887=![],_0x39e3fe;}}}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { dirname, join, parse } from 'path';
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
|
+
import { homedir } from 'os';
|
|
3
4
|
/**
|
|
4
5
|
* Find the ranger root by walking up from cwd until we find a .ranger directory.
|
|
5
6
|
* The closest .ranger directory wins (allows subdirectory overrides).
|
|
@@ -22,9 +23,33 @@ export function getRangerRoot() {
|
|
|
22
23
|
return process.cwd();
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
* Get the .ranger directory path
|
|
26
|
+
* Get the project-level .ranger directory path
|
|
26
27
|
*/
|
|
27
28
|
export function getRangerDir() {
|
|
28
29
|
return join(getRangerRoot(), '.ranger');
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Walk up from cwd to find the nearest .git directory.
|
|
33
|
+
* Returns the directory containing .git, or null if not found.
|
|
34
|
+
*/
|
|
35
|
+
export function findGitRoot() {
|
|
36
|
+
let current = process.cwd();
|
|
37
|
+
const root = parse(current).root;
|
|
38
|
+
while (current !== root) {
|
|
39
|
+
if (existsSync(join(current, '.git'))) {
|
|
40
|
+
return current;
|
|
41
|
+
}
|
|
42
|
+
current = dirname(current);
|
|
43
|
+
}
|
|
44
|
+
if (existsSync(join(root, '.git'))) {
|
|
45
|
+
return root;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the user-level ~/.ranger directory path
|
|
51
|
+
*/
|
|
52
|
+
export function getRangerHomeDir() {
|
|
53
|
+
return join(homedir(), '.ranger');
|
|
54
|
+
}
|
|
30
55
|
//# sourceMappingURL=rangerRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rangerRoot.js","sourceRoot":"","sources":["../../../src/commands/utils/rangerRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"rangerRoot.js","sourceRoot":"","sources":["../../../src/commands/utils/rangerRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,aAAa;IACzB,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEjC,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,gCAAgC;IAChC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oEAAoE;IACpE,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IACxB,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACvB,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEjC,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -24,6 +24,26 @@ export function getEnvDir(env) {
|
|
|
24
24
|
return legacyDir; // Backward compatibility
|
|
25
25
|
return localDir; // Default for new envs
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if an environment name already exists in any location (ci, local, or legacy root).
|
|
29
|
+
* Optionally filter by specific locations.
|
|
30
|
+
* Returns the path where it exists and its location, or null if not found.
|
|
31
|
+
*/
|
|
32
|
+
export function findExistingEnv(envName, options) {
|
|
33
|
+
const rangerDir = getRangerDir();
|
|
34
|
+
const locations = options?.locations ?? ['ci', 'local', 'legacy'];
|
|
35
|
+
const dirs = [
|
|
36
|
+
{ location: 'ci', path: join(rangerDir, 'ci', envName) },
|
|
37
|
+
{ location: 'local', path: join(rangerDir, 'local', envName) },
|
|
38
|
+
{ location: 'legacy', path: join(rangerDir, envName) },
|
|
39
|
+
];
|
|
40
|
+
for (const dir of dirs) {
|
|
41
|
+
if (locations.includes(dir.location) && existsSync(dir.path)) {
|
|
42
|
+
return { path: dir.path, location: dir.location };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
27
47
|
/**
|
|
28
48
|
* Check if an environment is a CI environment (stored in ci/ directory)
|
|
29
49
|
*/
|