@ranger-testing/ranger-cli 1.1.6 → 2.0.0
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 +47 -45
- package/build/cli.js +671 -291
- 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/authEncrypt.js +5 -10
- package/build/commands/authEncrypt.js.map +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/clean.js.map +1 -1
- package/build/commands/config.js +9 -15
- package/build/commands/config.js.map +1 -1
- package/build/commands/env.js +10 -13
- package/build/commands/env.js.map +1 -1
- package/build/commands/feature.js +138 -67
- package/build/commands/feature.js.map +1 -1
- package/build/commands/hook.js +9 -4
- package/build/commands/hook.js.map +1 -1
- package/build/commands/hooks/autoPrompt.js +32 -0
- package/build/commands/hooks/autoPrompt.js.map +1 -0
- package/build/commands/hooks/disable.js +8 -5
- package/build/commands/hooks/disable.js.map +1 -1
- package/build/commands/hooks/enable.js +16 -9
- package/build/commands/hooks/enable.js.map +1 -1
- package/build/commands/hooks/exitPlanMode.js +10 -10
- package/build/commands/hooks/exitPlanMode.js.map +1 -1
- package/build/commands/hooks/index.js +1 -0
- package/build/commands/hooks/index.js.map +1 -1
- package/build/commands/hooks/output.js +20 -2
- package/build/commands/hooks/output.js.map +1 -1
- package/build/commands/hooks/planReminder.js +9 -9
- package/build/commands/hooks/planReminder.js.map +1 -1
- package/build/commands/hooks/planStart.js +6 -6
- package/build/commands/hooks/planStart.js.map +1 -1
- package/build/commands/hooks/postEdit.js +6 -6
- package/build/commands/hooks/postEdit.js.map +1 -1
- package/build/commands/hooks/preCompact.js +5 -5
- package/build/commands/hooks/preCompact.js.map +1 -1
- package/build/commands/hooks/sessionEnd.js +8 -4
- package/build/commands/hooks/sessionEnd.js.map +1 -1
- package/build/commands/hooks/sessionStart.js +41 -25
- package/build/commands/hooks/sessionStart.js.map +1 -1
- package/build/commands/hooks/stopHook.js +30 -6
- package/build/commands/hooks/stopHook.js.map +1 -1
- package/build/commands/index.js +1 -2
- package/build/commands/index.js.map +1 -1
- package/build/commands/login.js +2 -5
- package/build/commands/login.js.map +1 -1
- package/build/commands/setupCi.js +189 -0
- package/build/commands/setupCi.js.map +1 -0
- package/build/commands/skillup.js +16 -68
- 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/status.js +14 -13
- package/build/commands/status.js.map +1 -1
- package/build/commands/update.js +34 -5
- package/build/commands/update.js.map +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/updateEnv.js.map +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/useEnv.js.map +1 -1
- package/build/commands/utils/activeProfile.js +76 -0
- package/build/commands/utils/activeProfile.js.map +1 -0
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/browserSessionsApi.js.map +1 -1
- package/build/commands/utils/desirePathLog.js +39 -34
- package/build/commands/utils/desirePathLog.js.map +1 -1
- package/build/commands/utils/deviceAuth.js +53 -5
- package/build/commands/utils/deviceAuth.js.map +1 -1
- package/build/commands/utils/environment.js +11 -12
- package/build/commands/utils/environment.js.map +1 -1
- package/build/commands/utils/featureApi.js +49 -46
- package/build/commands/utils/featureApi.js.map +1 -1
- package/build/commands/utils/featureReportGenerator.js +6 -6
- package/build/commands/utils/featureReportGenerator.js.map +1 -1
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/profileMessages.js +8 -0
- package/build/commands/utils/profileMessages.js.map +1 -0
- package/build/commands/utils/profileSetupBanner.js +167 -0
- package/build/commands/utils/profileSetupBanner.js.map +1 -0
- package/build/commands/utils/retry.js +25 -0
- package/build/commands/utils/retry.js.map +1 -0
- package/build/commands/utils/sessionCache.js +17 -0
- package/build/commands/utils/sessionCache.js.map +1 -1
- package/build/commands/utils/settings.js +23 -2
- package/build/commands/utils/settings.js.map +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/telemetry.js +254 -0
- package/build/commands/utils/telemetry.js.map +1 -0
- package/build/commands/utils/userApi.js +4 -4
- package/build/commands/utils/userApi.js.map +1 -1
- package/build/commands/verifyFeature.js +678 -407
- package/build/commands/verifyFeature.js.map +1 -1
- package/build/commands/verifyInBrowser.js +1 -1
- package/build/commands/verifyInBrowser.js.map +1 -1
- package/build/skills/ranger/SKILL.md +65 -64
- package/build/skills/ranger/create.md +31 -31
- package/build/skills/ranger/feedback.md +25 -17
- package/build/skills/ranger/start.md +37 -37
- package/build/skills/ranger/verify.md +59 -55
- package/package.json +1 -1
- package/scripts/postinstall.js +1 -1
- package/build/commands/dataMcpServer.js +0 -1
- package/build/commands/dataMcpServer.js.map +0 -1
- package/build/commands/utils/cliSecret.js +0 -1
- package/build/commands/utils/cliSecret.js.map +0 -1
- package/build/skills/bug-bash.md +0 -329
- package/build/skills/e2e-test-recommender.md +0 -168
|
@@ -67,42 +67,47 @@ export function sanitizeArgs(argv) {
|
|
|
67
67
|
* Fire-and-forget logging for CLI command errors.
|
|
68
68
|
* Never blocks CLI execution or throws errors.
|
|
69
69
|
*/
|
|
70
|
-
export function logDesirePath(data) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}),
|
|
100
|
-
}).catch(() => { });
|
|
70
|
+
export async function logDesirePath(data) {
|
|
71
|
+
try {
|
|
72
|
+
const token = await getToken().catch(() => null);
|
|
73
|
+
const baseUrl = getApiBaseUrl();
|
|
74
|
+
const cliVersion = getCurrentVersion();
|
|
75
|
+
const authStatus = token ? 'has_token' : 'no_token';
|
|
76
|
+
const enrichedMetadata = {
|
|
77
|
+
...data.metadata,
|
|
78
|
+
authStatus,
|
|
79
|
+
isTty: process.stdout.isTTY ?? false,
|
|
80
|
+
};
|
|
81
|
+
const headers = {
|
|
82
|
+
'Content-Type': 'application/json',
|
|
83
|
+
};
|
|
84
|
+
if (token) {
|
|
85
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
86
|
+
}
|
|
87
|
+
const payload = {
|
|
88
|
+
rawCommand: data.rawCommand,
|
|
89
|
+
errorMessage: data.errorMessage,
|
|
90
|
+
errorType: data.errorType,
|
|
91
|
+
featureId: data.featureId,
|
|
92
|
+
sessionId: data.sessionId,
|
|
93
|
+
metadata: enrichedMetadata,
|
|
94
|
+
cliVersion,
|
|
95
|
+
};
|
|
96
|
+
if (process.env.DEBUG) {
|
|
97
|
+
console.error(`[desire-path] Sending log to ${baseUrl}/api/v1/mcp/desire-path-logs`);
|
|
98
|
+
console.error(`[desire-path] Payload: ${JSON.stringify(payload, null, 2)}`);
|
|
101
99
|
}
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
await fetch(`${baseUrl}/api/v1/mcp/desire-path-logs`, {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers,
|
|
103
|
+
body: JSON.stringify(payload),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (process.env.DEBUG) {
|
|
108
|
+
console.error(`[desire-path] Failed to send: ${err}`);
|
|
104
109
|
}
|
|
105
|
-
}
|
|
110
|
+
}
|
|
106
111
|
}
|
|
107
112
|
/**
|
|
108
113
|
* Categorize the error type based on yargs error message patterns.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desirePathLog.js","sourceRoot":"","sources":["../../../src/commands/utils/desirePathLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC5B,SAAS;IACT,IAAI;IACJ,UAAU;IACV,WAAW;IACX,UAAU;IACV,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,iBAAiB;IACjB,UAAU;IACV,UAAU;IACV,eAAe;CAClB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG;IACnB,oCAAoC;IACpC,sBAAsB;IACtB,oCAAoC;CACvC,CAAC;AAEF,SAAS,cAAc,CAAC,KAAa;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS;QACb,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBACnD,SAAS;gBACb,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC/B,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,QAAQ,GAAG,IAAI,CAAC;gBACpB,CAAC;YACL,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;
|
|
1
|
+
{"version":3,"file":"desirePathLog.js","sourceRoot":"","sources":["../../../src/commands/utils/desirePathLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,13 +143,53 @@ export function openBrowser(url) {
|
|
|
143
143
|
: 'xdg-open';
|
|
144
144
|
exec(`${cmd} ${JSON.stringify(url)}`);
|
|
145
145
|
}
|
|
146
|
+
function decodeJwtPayload(token) {
|
|
147
|
+
const parts = token.split('.');
|
|
148
|
+
if (parts.length !== 3)
|
|
149
|
+
throw new Error('Invalid JWT format');
|
|
150
|
+
const payload = Buffer.from(parts[1], 'base64url').toString('utf-8');
|
|
151
|
+
return JSON.parse(payload);
|
|
152
|
+
}
|
|
153
|
+
async function selfServeSignup(accessToken) {
|
|
154
|
+
const apiBaseUrl = getApiBaseUrl();
|
|
155
|
+
const response = await fetch(`${apiBaseUrl}/organization/self-serve-signup`, {
|
|
156
|
+
method: 'POST',
|
|
157
|
+
headers: {
|
|
158
|
+
'Content-Type': 'application/json',
|
|
159
|
+
'workos-token': accessToken,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const text = await response.text();
|
|
164
|
+
throw new Error(`Failed to create organization: ${response.status} ${text}`);
|
|
165
|
+
}
|
|
166
|
+
return response.json();
|
|
167
|
+
}
|
|
168
|
+
async function refreshTokenWithOrg(clientId, refreshToken, organizationId) {
|
|
169
|
+
const response = await fetch(WORKOS_TOKEN_URL, {
|
|
170
|
+
method: 'POST',
|
|
171
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
172
|
+
body: new URLSearchParams({
|
|
173
|
+
client_id: clientId,
|
|
174
|
+
grant_type: 'refresh_token',
|
|
175
|
+
refresh_token: refreshToken,
|
|
176
|
+
organization_id: organizationId,
|
|
177
|
+
}),
|
|
178
|
+
});
|
|
179
|
+
if (!response.ok) {
|
|
180
|
+
const text = await response.text();
|
|
181
|
+
throw new Error(`Failed to refresh token with org: ${response.status} ${text}`);
|
|
182
|
+
}
|
|
183
|
+
return response.json();
|
|
184
|
+
}
|
|
146
185
|
/**
|
|
147
186
|
* Run the full device authorization flow:
|
|
148
187
|
* 1. Request device code from WorkOS
|
|
149
188
|
* 2. Open browser for user to authenticate
|
|
150
189
|
* 3. Poll for tokens
|
|
151
|
-
* 4.
|
|
152
|
-
* 5.
|
|
190
|
+
* 4. If no org_id in token, run self-serve signup + refresh
|
|
191
|
+
* 5. Provision an MCP API key via the backend
|
|
192
|
+
* 6. Store the API key and refresh token
|
|
153
193
|
*
|
|
154
194
|
* Returns the provisioned API token.
|
|
155
195
|
*/
|
|
@@ -165,13 +205,21 @@ export async function runDeviceAuthFlow() {
|
|
|
165
205
|
console.log(`Code: ${deviceCode.user_code}\n`);
|
|
166
206
|
// Step 3: Poll for tokens
|
|
167
207
|
process.stdout.write('Waiting for authentication...');
|
|
168
|
-
|
|
208
|
+
let tokens = await pollForTokens(clientId, deviceCode.device_code, deviceCode.interval, deviceCode.expires_in);
|
|
169
209
|
console.log(' ✓');
|
|
170
|
-
// Step 4:
|
|
210
|
+
// Step 4: Check if token has an org_id; if not, self-serve signup
|
|
211
|
+
const claims = decodeJwtPayload(tokens.access_token);
|
|
212
|
+
if (!claims.org_id) {
|
|
213
|
+
process.stdout.write('Setting up your organization...');
|
|
214
|
+
const { organizationId } = await selfServeSignup(tokens.access_token);
|
|
215
|
+
tokens = await refreshTokenWithOrg(clientId, tokens.refresh_token, organizationId);
|
|
216
|
+
console.log(' ✓');
|
|
217
|
+
}
|
|
218
|
+
// Step 5: Provision API key
|
|
171
219
|
process.stdout.write('Provisioning API key...');
|
|
172
220
|
const apiToken = await provisionApiKey(tokens.access_token);
|
|
173
221
|
console.log(' ✓');
|
|
174
|
-
// Step
|
|
222
|
+
// Step 6: Store credentials
|
|
175
223
|
await storeToken(apiToken);
|
|
176
224
|
if (tokens.refresh_token) {
|
|
177
225
|
await storeRefreshToken(tokens.refresh_token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceAuth.js","sourceRoot":"","sources":["../../../src/commands/utils/deviceAuth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deviceAuth.js","sourceRoot":"","sources":["../../../src/commands/utils/deviceAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,29 +2,29 @@
|
|
|
2
2
|
* Centralized environment configuration for the CLI.
|
|
3
3
|
*
|
|
4
4
|
* Supports three environments: prod, staging, and local.
|
|
5
|
-
* Each environment has its own
|
|
5
|
+
* Each environment has its own API base URL.
|
|
6
6
|
*
|
|
7
7
|
* End users always use prod (default).
|
|
8
8
|
* Developers can override by setting RANGER_CLI_ENV=staging or RANGER_CLI_ENV=local.
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
|
-
* Environment configurations for
|
|
11
|
+
* Environment configurations for API URLs.
|
|
12
12
|
*/
|
|
13
13
|
export const ENVIRONMENT_CONFIGS = {
|
|
14
14
|
prod: {
|
|
15
|
-
mcpServerUrl: 'https://mcp-server-716115358910.us-central1.run.app',
|
|
16
15
|
apiBaseUrl: 'https://api.ranger.net',
|
|
17
16
|
workosClientId: 'client_01J9CBYM7M5ZETCF7G6614DXR2',
|
|
17
|
+
aiProxyUrl: 'https://ai-proxy-716115358910.us-central1.run.app',
|
|
18
18
|
},
|
|
19
19
|
staging: {
|
|
20
|
-
mcpServerUrl: 'https://mcp-server-301751771437.us-central1.run.app',
|
|
21
20
|
apiBaseUrl: 'https://api.staging.ranger.net',
|
|
22
21
|
workosClientId: 'client_01J9CBYM2DKWV9HM17D95Z540K',
|
|
22
|
+
aiProxyUrl: 'https://ai-proxy-301751771437.us-central1.run.app',
|
|
23
23
|
},
|
|
24
24
|
local: {
|
|
25
|
-
mcpServerUrl: 'http://localhost:3100',
|
|
26
25
|
apiBaseUrl: 'http://localhost:8080',
|
|
27
26
|
workosClientId: 'client_01J9CBYM2DKWV9HM17D95Z540K',
|
|
27
|
+
aiProxyUrl: 'http://localhost:8090',
|
|
28
28
|
},
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
@@ -49,13 +49,6 @@ export function getCurrentEnvironment() {
|
|
|
49
49
|
}
|
|
50
50
|
return DEFAULT_ENVIRONMENT;
|
|
51
51
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Get the MCP server URL for the current environment.
|
|
54
|
-
* Priority: MCP_SERVER_URL env var > RANGER_CLI_ENV-based config > prod default
|
|
55
|
-
*/
|
|
56
|
-
export function getMcpServerUrl() {
|
|
57
|
-
return ENVIRONMENT_CONFIGS[getCurrentEnvironment()].mcpServerUrl;
|
|
58
|
-
}
|
|
59
52
|
/**
|
|
60
53
|
* Get the API base URL for the current environment.
|
|
61
54
|
* Priority: RANGER_API_URL env var > RANGER_CLI_ENV-based config > prod default
|
|
@@ -63,4 +56,10 @@ export function getMcpServerUrl() {
|
|
|
63
56
|
export function getApiBaseUrl() {
|
|
64
57
|
return ENVIRONMENT_CONFIGS[getCurrentEnvironment()].apiBaseUrl;
|
|
65
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the AI Proxy URL for the current environment.
|
|
61
|
+
*/
|
|
62
|
+
export function getAiProxyUrl() {
|
|
63
|
+
return ENVIRONMENT_CONFIGS[getCurrentEnvironment()].aiProxyUrl;
|
|
64
|
+
}
|
|
66
65
|
//# sourceMappingURL=environment.js.map
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,UAAU,EAAE,wBAAwB;QACpC,cAAc,EAAE,mCAAmC;QACnD,UAAU,EAAE,mDAAmD;KAClE;IACD,OAAO,EAAE;QACL,UAAU,EAAE,gCAAgC;QAC5C,cAAc,EAAE,mCAAmC;QACnD,UAAU,EAAE,mDAAmD;KAClE;IACD,KAAK,EAAE;QACH,UAAU,EAAE,uBAAuB;QACnC,cAAc,EAAE,mCAAmC;QACnD,UAAU,EAAE,uBAAuB;KACtC;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,aAAa;IACzB,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { getToken } from './keychain.js';
|
|
2
2
|
import { getApiBaseUrl } from './environment.js';
|
|
3
|
+
import { withRetry } from './retry.js';
|
|
3
4
|
/**
|
|
4
|
-
* Create a new feature with optional
|
|
5
|
+
* Create a new feature with optional scenarios
|
|
5
6
|
*/
|
|
6
7
|
export async function createFeature(data) {
|
|
7
8
|
const token = await getToken();
|
|
8
9
|
if (!token) {
|
|
9
|
-
throw new Error('No API token configured. Run: ranger
|
|
10
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
10
11
|
}
|
|
11
12
|
const baseUrl = getApiBaseUrl();
|
|
12
13
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features`, {
|
|
@@ -19,7 +20,7 @@ export async function createFeature(data) {
|
|
|
19
20
|
});
|
|
20
21
|
if (!response.ok) {
|
|
21
22
|
const error = await response.text();
|
|
22
|
-
throw new Error(`Failed to create feature: ${error}`);
|
|
23
|
+
throw new Error(`Failed to create feature review: ${error}`);
|
|
23
24
|
}
|
|
24
25
|
return response.json();
|
|
25
26
|
}
|
|
@@ -29,7 +30,7 @@ export async function createFeature(data) {
|
|
|
29
30
|
export async function listFeatures(options) {
|
|
30
31
|
const token = await getToken();
|
|
31
32
|
if (!token) {
|
|
32
|
-
throw new Error('No API token configured. Run: ranger
|
|
33
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
33
34
|
}
|
|
34
35
|
const baseUrl = getApiBaseUrl();
|
|
35
36
|
const params = new URLSearchParams();
|
|
@@ -52,17 +53,17 @@ export async function listFeatures(options) {
|
|
|
52
53
|
});
|
|
53
54
|
if (!response.ok) {
|
|
54
55
|
const error = await response.text();
|
|
55
|
-
throw new Error(`Failed to list
|
|
56
|
+
throw new Error(`Failed to list feature reviews: ${error}`);
|
|
56
57
|
}
|
|
57
58
|
return response.json();
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
|
-
* Get a feature by ID with
|
|
61
|
+
* Get a feature by ID with scenarios and sessions
|
|
61
62
|
*/
|
|
62
63
|
export async function getFeature(id) {
|
|
63
64
|
const token = await getToken();
|
|
64
65
|
if (!token) {
|
|
65
|
-
throw new Error('No API token configured. Run: ranger
|
|
66
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
66
67
|
}
|
|
67
68
|
const baseUrl = getApiBaseUrl();
|
|
68
69
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}`, {
|
|
@@ -73,7 +74,7 @@ export async function getFeature(id) {
|
|
|
73
74
|
});
|
|
74
75
|
if (!response.ok) {
|
|
75
76
|
const error = await response.text();
|
|
76
|
-
throw new Error(`Failed to get feature: ${error}`);
|
|
77
|
+
throw new Error(`Failed to get feature review: ${error}`);
|
|
77
78
|
}
|
|
78
79
|
return response.json();
|
|
79
80
|
}
|
|
@@ -83,7 +84,7 @@ export async function getFeature(id) {
|
|
|
83
84
|
export async function updateFeature(id, updates) {
|
|
84
85
|
const token = await getToken();
|
|
85
86
|
if (!token) {
|
|
86
|
-
throw new Error('No API token configured. Run: ranger
|
|
87
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
87
88
|
}
|
|
88
89
|
const baseUrl = getApiBaseUrl();
|
|
89
90
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}`, {
|
|
@@ -96,17 +97,17 @@ export async function updateFeature(id, updates) {
|
|
|
96
97
|
});
|
|
97
98
|
if (!response.ok) {
|
|
98
99
|
const error = await response.text();
|
|
99
|
-
throw new Error(`Failed to update feature: ${error}`);
|
|
100
|
+
throw new Error(`Failed to update feature review: ${error}`);
|
|
100
101
|
}
|
|
101
102
|
return response.json();
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
104
|
-
* Create a new
|
|
105
|
+
* Create a new scenario
|
|
105
106
|
*/
|
|
106
107
|
export async function createChecklistItem(featureId, description, position) {
|
|
107
108
|
const token = await getToken();
|
|
108
109
|
if (!token) {
|
|
109
|
-
throw new Error('No API token configured. Run: ranger
|
|
110
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
110
111
|
}
|
|
111
112
|
const baseUrl = getApiBaseUrl();
|
|
112
113
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist`, {
|
|
@@ -119,32 +120,34 @@ export async function createChecklistItem(featureId, description, position) {
|
|
|
119
120
|
});
|
|
120
121
|
if (!response.ok) {
|
|
121
122
|
const error = await response.text();
|
|
122
|
-
throw new Error(`Failed to create
|
|
123
|
+
throw new Error(`Failed to create scenario: ${error}`);
|
|
123
124
|
}
|
|
124
125
|
return response.json();
|
|
125
126
|
}
|
|
126
127
|
/**
|
|
127
|
-
* Update a
|
|
128
|
+
* Update a scenario
|
|
128
129
|
*/
|
|
129
130
|
export async function updateChecklistItem(featureId, itemId, updates) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
131
|
+
return withRetry(async () => {
|
|
132
|
+
const token = await getToken();
|
|
133
|
+
if (!token) {
|
|
134
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
135
|
+
}
|
|
136
|
+
const baseUrl = getApiBaseUrl();
|
|
137
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist/${itemId}`, {
|
|
138
|
+
method: 'PATCH',
|
|
139
|
+
headers: {
|
|
140
|
+
Authorization: `Bearer ${token}`,
|
|
141
|
+
'Content-Type': 'application/json',
|
|
142
|
+
},
|
|
143
|
+
body: JSON.stringify(updates),
|
|
144
|
+
});
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
const error = await response.text();
|
|
147
|
+
throw new Error(`Failed to update scenario: ${error}`);
|
|
148
|
+
}
|
|
149
|
+
return response.json();
|
|
150
|
+
}, { label: 'updateChecklistItem' });
|
|
148
151
|
}
|
|
149
152
|
/**
|
|
150
153
|
* Get feature report data
|
|
@@ -152,7 +155,7 @@ export async function updateChecklistItem(featureId, itemId, updates) {
|
|
|
152
155
|
export async function getFeatureReport(id) {
|
|
153
156
|
const token = await getToken();
|
|
154
157
|
if (!token) {
|
|
155
|
-
throw new Error('No API token configured. Run: ranger
|
|
158
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
156
159
|
}
|
|
157
160
|
const baseUrl = getApiBaseUrl();
|
|
158
161
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}/report`, {
|
|
@@ -163,7 +166,7 @@ export async function getFeatureReport(id) {
|
|
|
163
166
|
});
|
|
164
167
|
if (!response.ok) {
|
|
165
168
|
const error = await response.text();
|
|
166
|
-
throw new Error(`Failed to get feature report: ${error}`);
|
|
169
|
+
throw new Error(`Failed to get feature review report: ${error}`);
|
|
167
170
|
}
|
|
168
171
|
return response.json();
|
|
169
172
|
}
|
|
@@ -173,7 +176,7 @@ export async function getFeatureReport(id) {
|
|
|
173
176
|
export async function getFeatureReportMarkdown(id, options) {
|
|
174
177
|
const token = await getToken();
|
|
175
178
|
if (!token) {
|
|
176
|
-
throw new Error('No API token configured. Run: ranger
|
|
179
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
177
180
|
}
|
|
178
181
|
const baseUrl = getApiBaseUrl();
|
|
179
182
|
const params = new URLSearchParams();
|
|
@@ -189,7 +192,7 @@ export async function getFeatureReportMarkdown(id, options) {
|
|
|
189
192
|
});
|
|
190
193
|
if (!response.ok) {
|
|
191
194
|
const error = await response.text();
|
|
192
|
-
throw new Error(`Failed to get feature report markdown: ${error}`);
|
|
195
|
+
throw new Error(`Failed to get feature review report markdown: ${error}`);
|
|
193
196
|
}
|
|
194
197
|
return response.text();
|
|
195
198
|
}
|
|
@@ -199,7 +202,7 @@ export async function getFeatureReportMarkdown(id, options) {
|
|
|
199
202
|
export async function listFeatureSessions(featureId) {
|
|
200
203
|
const token = await getToken();
|
|
201
204
|
if (!token) {
|
|
202
|
-
throw new Error('No API token configured. Run: ranger
|
|
205
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
203
206
|
}
|
|
204
207
|
const baseUrl = getApiBaseUrl();
|
|
205
208
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/sessions`, {
|
|
@@ -220,7 +223,7 @@ export async function listFeatureSessions(featureId) {
|
|
|
220
223
|
export async function startSession(featureId, sessionId) {
|
|
221
224
|
const token = await getToken();
|
|
222
225
|
if (!token) {
|
|
223
|
-
throw new Error('No API token configured. Run: ranger
|
|
226
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
224
227
|
}
|
|
225
228
|
const baseUrl = getApiBaseUrl();
|
|
226
229
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/sessions/${sessionId}/start`, {
|
|
@@ -241,7 +244,7 @@ export async function startSession(featureId, sessionId) {
|
|
|
241
244
|
export async function concludeSession(featureId, sessionId) {
|
|
242
245
|
const token = await getToken();
|
|
243
246
|
if (!token) {
|
|
244
|
-
throw new Error('No API token configured. Run: ranger
|
|
247
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
245
248
|
}
|
|
246
249
|
const baseUrl = getApiBaseUrl();
|
|
247
250
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/sessions/${sessionId}/conclude`, {
|
|
@@ -263,7 +266,7 @@ export async function concludeSession(featureId, sessionId) {
|
|
|
263
266
|
export async function getActionItems(featureId) {
|
|
264
267
|
const token = await getToken();
|
|
265
268
|
if (!token) {
|
|
266
|
-
throw new Error('No API token configured. Run: ranger
|
|
269
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
267
270
|
}
|
|
268
271
|
const baseUrl = getApiBaseUrl();
|
|
269
272
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/action-items`, {
|
|
@@ -279,13 +282,13 @@ export async function getActionItems(featureId) {
|
|
|
279
282
|
return response.json();
|
|
280
283
|
}
|
|
281
284
|
/**
|
|
282
|
-
* Get feedback and verification instructions for a
|
|
285
|
+
* Get feedback and verification instructions for a scenario.
|
|
283
286
|
* Returns unaddressed comments, parent description, and canonical flow.
|
|
284
287
|
*/
|
|
285
288
|
export async function getItemFeedback(featureId, itemId) {
|
|
286
289
|
const token = await getToken();
|
|
287
290
|
if (!token) {
|
|
288
|
-
throw new Error('No API token configured. Run: ranger
|
|
291
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
289
292
|
}
|
|
290
293
|
const baseUrl = getApiBaseUrl();
|
|
291
294
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist-items/${itemId}/feedback`, {
|
|
@@ -306,7 +309,7 @@ export async function getItemFeedback(featureId, itemId) {
|
|
|
306
309
|
export async function softDeleteFeature(id) {
|
|
307
310
|
const token = await getToken();
|
|
308
311
|
if (!token) {
|
|
309
|
-
throw new Error('No API token configured. Run: ranger
|
|
312
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
310
313
|
}
|
|
311
314
|
const baseUrl = getApiBaseUrl();
|
|
312
315
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}`, {
|
|
@@ -317,7 +320,7 @@ export async function softDeleteFeature(id) {
|
|
|
317
320
|
});
|
|
318
321
|
if (!response.ok) {
|
|
319
322
|
const error = await response.text();
|
|
320
|
-
throw new Error(`Failed to delete feature: ${error}`);
|
|
323
|
+
throw new Error(`Failed to delete feature review: ${error}`);
|
|
321
324
|
}
|
|
322
325
|
}
|
|
323
326
|
/**
|
|
@@ -326,7 +329,7 @@ export async function softDeleteFeature(id) {
|
|
|
326
329
|
export async function restoreFeature(id) {
|
|
327
330
|
const token = await getToken();
|
|
328
331
|
if (!token) {
|
|
329
|
-
throw new Error('No API token configured. Run: ranger
|
|
332
|
+
throw new Error('No API token configured. Run: ranger setup [token]');
|
|
330
333
|
}
|
|
331
334
|
const baseUrl = getApiBaseUrl();
|
|
332
335
|
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}/restore`, {
|
|
@@ -337,7 +340,7 @@ export async function restoreFeature(id) {
|
|
|
337
340
|
});
|
|
338
341
|
if (!response.ok) {
|
|
339
342
|
const error = await response.text();
|
|
340
|
-
throw new Error(`Failed to restore feature: ${error}`);
|
|
343
|
+
throw new Error(`Failed to restore feature review: ${error}`);
|
|
341
344
|
}
|
|
342
345
|
}
|
|
343
346
|
//# sourceMappingURL=featureApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureApi.js","sourceRoot":"","sources":["../../../src/commands/utils/featureApi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"featureApi.js","sourceRoot":"","sources":["../../../src/commands/utils/featureApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,13 +54,13 @@ function formatDate(dateStr) {
|
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Generate a markdown report for a feature
|
|
57
|
+
* Generate a markdown report for a feature review
|
|
58
58
|
*/
|
|
59
59
|
export function generateFeatureReport(data) {
|
|
60
60
|
const { feature, stats, checklistItems, sessions } = data;
|
|
61
61
|
const lines = [];
|
|
62
62
|
// Header
|
|
63
|
-
lines.push(`# Feature Report: ${feature.name}`);
|
|
63
|
+
lines.push(`# Feature Review Report: ${feature.name}`);
|
|
64
64
|
lines.push('');
|
|
65
65
|
// Status - derive from completedAt and currentSession
|
|
66
66
|
let statusLabel;
|
|
@@ -112,10 +112,10 @@ export function generateFeatureReport(data) {
|
|
|
112
112
|
lines.push(feature.description);
|
|
113
113
|
lines.push('');
|
|
114
114
|
}
|
|
115
|
-
//
|
|
115
|
+
// Scenario Progress
|
|
116
116
|
const nonClosedItems = checklistItems.filter((i) => i.status !== 'closed');
|
|
117
117
|
const verifiedCount = checklistItems.filter((i) => i.status === 'verified').length;
|
|
118
|
-
lines.push(`##
|
|
118
|
+
lines.push(`## Scenario 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);
|
|
@@ -180,8 +180,8 @@ export function generateFeatureReport(data) {
|
|
|
180
180
|
if (sessions.length > 0) {
|
|
181
181
|
lines.push('## All Verification Sessions');
|
|
182
182
|
lines.push('');
|
|
183
|
-
lines.push('| Session |
|
|
184
|
-
lines.push('
|
|
183
|
+
lines.push('| Session | Scenario | Status | Duration | Date |');
|
|
184
|
+
lines.push('|---------|----------|--------|----------|------|');
|
|
185
185
|
for (const session of sessions) {
|
|
186
186
|
const linkedItem = session.checklistItemId
|
|
187
187
|
? checklistItems.find((i) => i.id === session.checklistItemId)
|