@ranger-testing/ranger-cli 1.0.14 → 1.1.1
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 +87 -324
- package/build/cli.js +76 -64
- 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 +94 -34
- package/build/commands/feature.js.map +1 -1
- package/build/commands/hook.js +28 -0
- package/build/commands/hook.js.map +1 -0
- package/build/commands/hooks/disable.js +30 -0
- package/build/commands/hooks/disable.js.map +1 -0
- package/build/commands/hooks/enable.js +48 -0
- package/build/commands/hooks/enable.js.map +1 -0
- package/build/commands/hooks/exitPlanMode.js +35 -0
- package/build/commands/hooks/exitPlanMode.js.map +1 -0
- package/build/commands/hooks/index.js +11 -0
- package/build/commands/hooks/index.js.map +1 -0
- package/build/commands/hooks/output.js +53 -0
- package/build/commands/hooks/output.js.map +1 -0
- package/build/commands/hooks/planReminder.js +46 -0
- package/build/commands/hooks/planReminder.js.map +1 -0
- package/build/commands/hooks/planStart.js +30 -0
- package/build/commands/hooks/planStart.js.map +1 -0
- package/build/commands/hooks/postEdit.js +43 -0
- package/build/commands/hooks/postEdit.js.map +1 -0
- package/build/commands/hooks/preCompact.js +30 -0
- package/build/commands/hooks/preCompact.js.map +1 -0
- package/build/commands/hooks/sessionEnd.js +21 -0
- package/build/commands/hooks/sessionEnd.js.map +1 -0
- package/build/commands/hooks/sessionStart.js +75 -0
- package/build/commands/hooks/sessionStart.js.map +1 -0
- package/build/commands/hooks/stopHook.js +54 -0
- package/build/commands/hooks/stopHook.js.map +1 -0
- package/build/commands/index.js +1 -3
- package/build/commands/index.js.map +1 -1
- package/build/commands/skillup.js +36 -70
- 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 +17 -21
- package/build/commands/status.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/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/claudePlugin.js +85 -0
- package/build/commands/utils/claudePlugin.js.map +1 -0
- package/build/commands/utils/cliSecret.js +1 -1
- package/build/commands/utils/desirePathLog.js +133 -0
- package/build/commands/utils/desirePathLog.js.map +1 -0
- package/build/commands/utils/featureApi.js +23 -0
- package/build/commands/utils/featureApi.js.map +1 -1
- package/build/commands/utils/git.js +44 -0
- package/build/commands/utils/git.js.map +1 -0
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/sessionCache.js +282 -0
- package/build/commands/utils/sessionCache.js.map +1 -0
- package/build/commands/utils/skillContent.js +3 -3
- package/build/commands/utils/skillContent.js.map +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/skills.js.map +1 -1
- package/build/commands/verifyFeature.js +32 -3
- package/build/commands/verifyFeature.js.map +1 -1
- package/build/commands/verifyInBrowser.js +1 -1
- package/build/skills/ranger/SKILL.md +170 -0
- package/build/skills/ranger/create.md +151 -0
- package/build/skills/ranger/start.md +122 -0
- package/build/skills/{feature-tracker → ranger}/verify.md +48 -3
- package/package.json +2 -3
- package/build/commands/postEditHook.js +0 -25
- package/build/commands/postEditHook.js.map +0 -1
- package/build/commands/preCompactHook.js +0 -85
- package/build/commands/preCompactHook.js.map +0 -1
- package/build/commands/sessionStartHook.js +0 -64
- package/build/commands/sessionStartHook.js.map +0 -1
- package/build/commands/utils/mcpConfig.js +0 -1
- package/build/commands/utils/mcpConfig.js.map +0 -1
- package/build/skills/feature-tracker/SKILL.md +0 -163
- package/build/skills/feature-tracker/create.md +0 -114
- package/build/skills/feature-tracker/report.md +0 -159
- package/build/skills/feature-tracker/start.md +0 -93
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { getSessionEntry, updateBranchTracking, } from '../utils/sessionCache.js';
|
|
2
|
+
import { getToken } from '../utils/keychain.js';
|
|
3
|
+
import { getEnabledSessionId } from './output.js';
|
|
4
|
+
/**
|
|
5
|
+
* PostToolUse (Write/Edit) hook handler for Claude Code plugin
|
|
6
|
+
*
|
|
7
|
+
* This command is invoked automatically after Write or Edit tools are used.
|
|
8
|
+
* If the session isn't registered with a Ranger feature, prompts to use /ranger.
|
|
9
|
+
*/
|
|
10
|
+
export async function postEdit() {
|
|
11
|
+
const sessionId = await getEnabledSessionId();
|
|
12
|
+
if (!sessionId) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// Update branch tracking - auto-enable new branches if session switched while enabled
|
|
16
|
+
updateBranchTracking(sessionId);
|
|
17
|
+
const token = await getToken();
|
|
18
|
+
if (!token) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// Check if this session is already registered
|
|
22
|
+
const existingEntry = getSessionEntry(sessionId);
|
|
23
|
+
if (existingEntry) {
|
|
24
|
+
// Already registered - remind about adding checklist items if scope expanded
|
|
25
|
+
const response = {
|
|
26
|
+
hookSpecificOutput: {
|
|
27
|
+
hookEventName: 'PostToolUse',
|
|
28
|
+
additionalContext: `RANGER: If this change expands the scope of the active feature, you may need to add a checklist item. See Workflow 1 in /ranger. If you decide to add a checklist item, you MUST read Workflow 1 IN DETAIL first.`,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
console.log(JSON.stringify(response));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Not registered - prompt to use /ranger for UI work
|
|
35
|
+
const response = {
|
|
36
|
+
hookSpecificOutput: {
|
|
37
|
+
hookEventName: 'PostToolUse',
|
|
38
|
+
additionalContext: `RANGER: If this is for a UI feature, you MUST use /ranger to either create a new feature or resume an existing one.`,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
console.log(JSON.stringify(response));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=postEdit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postEdit.js","sourceRoot":"","sources":["../../../src/commands/hooks/postEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,oBAAoB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,sFAAsF;IACtF,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO;IACX,CAAC;IAED,8CAA8C;IAC9C,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,aAAa,EAAE,CAAC;QAChB,6EAA6E;QAC7E,MAAM,QAAQ,GAAG;YACb,kBAAkB,EAAE;gBAChB,aAAa,EAAE,aAAa;gBAC5B,iBAAiB,EAAE,mNAAmN;aACzO;SACJ,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,OAAO;IACX,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG;QACb,kBAAkB,EAAE;YAChB,aAAa,EAAE,aAAa;YAC5B,iBAAiB,EAAE,qHAAqH;SAC3I;KACJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { getToken } from '../utils/keychain.js';
|
|
2
|
+
import { printBlock, getEnabledSessionId } from './output.js';
|
|
3
|
+
/**
|
|
4
|
+
* PreCompact hook handler for Claude Code plugin
|
|
5
|
+
*
|
|
6
|
+
* This command is invoked automatically before Claude Code compacts the conversation.
|
|
7
|
+
* It reminds Claude to preserve Ranger Feature Specification in the compaction summary.
|
|
8
|
+
*/
|
|
9
|
+
export async function preCompact() {
|
|
10
|
+
const sessionId = await getEnabledSessionId();
|
|
11
|
+
if (!sessionId) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
// Check if Ranger is configured
|
|
16
|
+
const token = await getToken();
|
|
17
|
+
if (!token) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
printBlock(`=== RANGER: PRESERVE IN COMPACTION ===
|
|
21
|
+
|
|
22
|
+
If you created a plan with a **Ranger Feature Specification**, you MUST preserve it in the compaction summary.
|
|
23
|
+
|
|
24
|
+
The specification contains checklist items that will be used with \`ranger feature create\`.`);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Silently fail - don't interrupt compaction
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=preCompact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preCompact.js","sourceRoot":"","sources":["../../../src/commands/hooks/preCompact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,gCAAgC;QAChC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QAED,UAAU,CAAC;;;;6FAI0E,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACL,6CAA6C;IACjD,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { recordEnabledSessionCleared } from '../utils/sessionCache.js';
|
|
2
|
+
import { readHookInput } from './output.js';
|
|
3
|
+
/**
|
|
4
|
+
* SessionEnd hook handler for Claude Code plugin
|
|
5
|
+
*
|
|
6
|
+
* This command is invoked when a Claude Code session ends.
|
|
7
|
+
* If reason is 'clear' and session was enabled, records timestamp for auto-enable.
|
|
8
|
+
*/
|
|
9
|
+
export async function sessionEnd() {
|
|
10
|
+
const input = await readHookInput();
|
|
11
|
+
const sessionId = input?.session_id;
|
|
12
|
+
const reason = input?.reason;
|
|
13
|
+
if (!sessionId) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// If session was cleared, record it for auto-enable on next session
|
|
17
|
+
if (reason === 'clear') {
|
|
18
|
+
recordEnabledSessionCleared(sessionId);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=sessionEnd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionEnd.js","sourceRoot":"","sources":["../../../src/commands/hooks/sessionEnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,EAAE,UAAU,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,EAAE,MAA4B,CAAC;IAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,oEAAoE;IACpE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACrB,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { appendFile } from 'fs/promises';
|
|
2
|
+
import { initBranchTracking, shouldAutoEnableAfterClear, autoEnableAfterClear, isSessionEnabled, getCurrentBranch, } from '../utils/sessionCache.js';
|
|
3
|
+
const RANGER_AUTO_ENABLED_PROMPT = `=================================================================
|
|
4
|
+
🚨 RANGER IS ACTIVE 🚨
|
|
5
|
+
=================================================================
|
|
6
|
+
|
|
7
|
+
This session has Ranger ENABLED. Before doing ANYTHING else:
|
|
8
|
+
|
|
9
|
+
1. **READ the /ranger skill FIRST** - Run the skill to understand the required workflow for UI features
|
|
10
|
+
|
|
11
|
+
2. **Check for existing features** - Run \`ranger feature list\` to see if there's an in-progress feature to resume
|
|
12
|
+
|
|
13
|
+
3. **For ANY UI work**: You MUST either:
|
|
14
|
+
- Resume an existing feature: \`ranger feature resume <id>\`
|
|
15
|
+
- Create a new feature: \`ranger feature create "<name>" -d "<desc>" -c "<checklist item>"\`
|
|
16
|
+
|
|
17
|
+
=================================================================`;
|
|
18
|
+
/**
|
|
19
|
+
* SessionStart hook handler for Claude Code plugin
|
|
20
|
+
*
|
|
21
|
+
* This command is invoked automatically when a new Claude Code session starts.
|
|
22
|
+
* Exports CLAUDE_SESSION_ID to the environment for use by other hooks.
|
|
23
|
+
*
|
|
24
|
+
* Note: The skill prompt is now shown by the enable hook when user runs /enable.
|
|
25
|
+
*/
|
|
26
|
+
export async function sessionStart() {
|
|
27
|
+
// Read JSON input from stdin to get session_id and source
|
|
28
|
+
let input = '';
|
|
29
|
+
for await (const chunk of process.stdin) {
|
|
30
|
+
input += chunk;
|
|
31
|
+
}
|
|
32
|
+
let sessionId = '';
|
|
33
|
+
let source;
|
|
34
|
+
try {
|
|
35
|
+
const data = JSON.parse(input);
|
|
36
|
+
sessionId = data['session_id'] || '';
|
|
37
|
+
source = data['source'];
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Ignore parse errors
|
|
41
|
+
}
|
|
42
|
+
// Export CLAUDE_SESSION_ID to env file if available
|
|
43
|
+
const envFile = process.env.CLAUDE_ENV_FILE;
|
|
44
|
+
if (envFile && sessionId) {
|
|
45
|
+
try {
|
|
46
|
+
await appendFile(envFile, `export CLAUDE_SESSION_ID="${sessionId}"\n`);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Ignore errors writing to env file
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (sessionId) {
|
|
53
|
+
// Auto-enable if this session started from /clear and previous session was enabled
|
|
54
|
+
if (shouldAutoEnableAfterClear(source)) {
|
|
55
|
+
autoEnableAfterClear(sessionId);
|
|
56
|
+
}
|
|
57
|
+
// Initialize branch tracking - auto-enable session if branch is already enabled
|
|
58
|
+
initBranchTracking(sessionId);
|
|
59
|
+
// If session is now enabled (via branch or clear), output strong prompting
|
|
60
|
+
if (isSessionEnabled(sessionId)) {
|
|
61
|
+
const branch = getCurrentBranch();
|
|
62
|
+
const branchInfo = branch && branch !== 'main' && branch !== 'master'
|
|
63
|
+
? ` (Branch: ${branch})`
|
|
64
|
+
: '';
|
|
65
|
+
const response = {
|
|
66
|
+
hookSpecificOutput: {
|
|
67
|
+
hookEventName: 'SessionStart',
|
|
68
|
+
additionalContext: RANGER_AUTO_ENABLED_PROMPT + branchInfo,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
console.log(JSON.stringify(response));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=sessionStart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStart.js","sourceRoot":"","sources":["../../../src/commands/hooks/sessionStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACH,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,0BAA0B,CAAC;AAElC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;kEAc+B,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,0DAA0D;IAC1D,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,KAAK,IAAI,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,sBAAsB;IAC1B,CAAC;IAED,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,MAAM,UAAU,CACZ,OAAO,EACP,6BAA6B,SAAS,KAAK,CAC9C,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,oCAAoC;QACxC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACZ,mFAAmF;QACnF,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,gFAAgF;QAChF,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE9B,2EAA2E;QAC3E,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAClC,MAAM,UAAU,GACZ,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ;gBAC9C,CAAC,CAAC,aAAa,MAAM,GAAG;gBACxB,CAAC,CAAC,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAG;gBACb,kBAAkB,EAAE;oBAChB,aAAa,EAAE,cAAc;oBAC7B,iBAAiB,EAAE,0BAA0B,GAAG,UAAU;iBAC7D;aACJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getToken } from '../utils/keychain.js';
|
|
2
|
+
import { getFeature, concludeSession } from '../utils/featureApi.js';
|
|
3
|
+
import { getSessionEntry } from '../utils/sessionCache.js';
|
|
4
|
+
import { getEnabledSessionId } from './output.js';
|
|
5
|
+
/**
|
|
6
|
+
* Stop hook handler
|
|
7
|
+
*
|
|
8
|
+
* Only blocks stop for Claude sessions that have registered with a Ranger feature.
|
|
9
|
+
* Attempts to conclude the feature session before allowing stop.
|
|
10
|
+
*/
|
|
11
|
+
export async function stopHook() {
|
|
12
|
+
const sessionId = await getEnabledSessionId();
|
|
13
|
+
if (!sessionId) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
// Check if this Claude session is registered with a Ranger feature
|
|
18
|
+
const sessionEntry = getSessionEntry(sessionId);
|
|
19
|
+
if (!sessionEntry) {
|
|
20
|
+
// Not a Ranger session - allow stop
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const token = await getToken();
|
|
24
|
+
if (!token) {
|
|
25
|
+
// No token configured - allow stop
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Get the feature
|
|
29
|
+
const feature = await getFeature(sessionEntry.featureId);
|
|
30
|
+
// If there's no current session, allow stop
|
|
31
|
+
if (!feature.currentSessionId) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Try to conclude the session
|
|
35
|
+
try {
|
|
36
|
+
await concludeSession(feature.id, feature.currentSessionId);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
// Failed to conclude - block with error message
|
|
41
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
42
|
+
const output = {
|
|
43
|
+
decision: 'block',
|
|
44
|
+
reason: `Failed to conclude Ranger feature session for "${feature.name}":\n\n${errorMessage}\n\n. This is most likely due to pending checklist items that need to be attempted to be verified. Please resolve the issue or manually conclude with:\n ranger feature conclude-session`,
|
|
45
|
+
};
|
|
46
|
+
console.log(JSON.stringify(output));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// On any error fetching feature, allow stop (fail open)
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=stopHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stopHook.js","sourceRoot":"","sources":["../../../src/commands/hooks/stopHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,mEAAmE;QACnE,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,oCAAoC;YACpC,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,mCAAmC;YACnC,OAAO;QACX,CAAC;QAED,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEzD,4CAA4C;QAC5C,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC;YACD,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC5D,OAAO;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,gDAAgD;YAChD,MAAM,YAAY,GACd,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG;gBACX,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,kDAAkD,OAAO,CAAC,IAAI,SAAS,YAAY,2LAA2L;aACzR,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,wDAAwD;QACxD,OAAO;IACX,CAAC;AACL,CAAC"}
|
package/build/commands/index.js
CHANGED
|
@@ -8,7 +8,5 @@ export { verifyInBrowser } from './verifyInBrowser.js';
|
|
|
8
8
|
export { update } from './update.js';
|
|
9
9
|
export { skillup } from './skillup.js';
|
|
10
10
|
export { envList } from './env.js';
|
|
11
|
-
export {
|
|
12
|
-
export { preCompactHook } from './preCompactHook.js';
|
|
13
|
-
export { postEditHook } from './postEditHook.js';
|
|
11
|
+
export { hook } from './hook.js';
|
|
14
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -4,9 +4,8 @@ import { existsSync } from 'fs';
|
|
|
4
4
|
import inquirer from 'inquirer';
|
|
5
5
|
import { getToken } from './utils/keychain.js';
|
|
6
6
|
import { installSkill } from './utils/skills.js';
|
|
7
|
-
import { loadMcpConfig, saveMcpConfig, hasRangerServer, setRangerServer, } from './utils/mcpConfig.js';
|
|
8
7
|
import { getCurrentVersion } from './utils/version.js';
|
|
9
|
-
import { getClaudeConfigDir, getProjectRoot,
|
|
8
|
+
import { getClaudeConfigDir, getProjectRoot, } from './utils/claudeConfig.js';
|
|
10
9
|
import { getRangerDir } from './utils/rangerRoot.js';
|
|
11
10
|
/**
|
|
12
11
|
* Get list of available environment names from .ranger directory
|
|
@@ -50,55 +49,41 @@ export async function skillup() {
|
|
|
50
49
|
}
|
|
51
50
|
const projectRoot = getProjectRoot();
|
|
52
51
|
const projectName = basename(projectRoot);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
// Determine install level - use 'user' as default for non-TTY mode
|
|
53
|
+
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
54
|
+
let installLevel;
|
|
55
|
+
if (isInteractive) {
|
|
56
|
+
const response = await inquirer.prompt([
|
|
57
|
+
{
|
|
58
|
+
type: 'list',
|
|
59
|
+
name: 'installLevel',
|
|
60
|
+
message: 'Where should skills be installed?',
|
|
61
|
+
choices: [
|
|
62
|
+
{
|
|
63
|
+
name: `All projects (${getClaudeConfigDir()}/skills/)`,
|
|
64
|
+
value: 'user',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: `This project only (${projectName}/.claude/skills/)`,
|
|
68
|
+
value: 'project',
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
]);
|
|
73
|
+
installLevel = response.installLevel;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Non-interactive mode: default to project-level installation
|
|
77
|
+
installLevel = 'project';
|
|
78
|
+
console.log(`Non-interactive mode: Installing skills at project level (${projectName}/.claude/skills/)`);
|
|
79
|
+
}
|
|
70
80
|
let installedCount = 0;
|
|
71
81
|
const cliVersion = getCurrentVersion();
|
|
72
82
|
console.log('\n📦 Installing skills...\n');
|
|
73
|
-
|
|
74
|
-
const installed = await installSkill('e2e-test-recommender', {
|
|
75
|
-
level: installLevel,
|
|
76
|
-
cliVersion,
|
|
77
|
-
});
|
|
78
|
-
if (installed) {
|
|
79
|
-
installedCount++;
|
|
80
|
-
await configureMcpServer(installLevel);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
console.warn(' Failed to install e2e-test-recommender skill:', error instanceof Error ? error.message : error);
|
|
85
|
-
}
|
|
86
|
-
// Install bug-bash and feature-tracker (requires API token AND active environment)
|
|
83
|
+
// Install ranger (requires API token AND active environment)
|
|
87
84
|
if (activeEnv) {
|
|
88
85
|
try {
|
|
89
|
-
const
|
|
90
|
-
level: installLevel,
|
|
91
|
-
cliVersion,
|
|
92
|
-
});
|
|
93
|
-
if (installed) {
|
|
94
|
-
installedCount++;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
console.warn(' Failed to install bug-bash skill:', error instanceof Error ? error.message : error);
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
const featureTrackerInstalled = await installSkill('feature-tracker', {
|
|
86
|
+
const featureTrackerInstalled = await installSkill('ranger', {
|
|
102
87
|
cliVersion,
|
|
103
88
|
level: installLevel,
|
|
104
89
|
});
|
|
@@ -107,12 +92,12 @@ export async function skillup() {
|
|
|
107
92
|
}
|
|
108
93
|
}
|
|
109
94
|
catch (error) {
|
|
110
|
-
console.warn(' Failed to install
|
|
95
|
+
console.warn(' Failed to install ranger skill:', error instanceof Error ? error.message : error);
|
|
111
96
|
}
|
|
112
97
|
}
|
|
113
98
|
else {
|
|
114
|
-
console.log('\n⚠️
|
|
115
|
-
console.log('To install
|
|
99
|
+
console.log('\n⚠️ Ranger skill not installed (requires active environment)\n');
|
|
100
|
+
console.log('To install Ranger skill:');
|
|
116
101
|
// Provide context-aware guidance based on whether .ranger directory exists
|
|
117
102
|
const hasRangerDir = existsSync(rangerDir);
|
|
118
103
|
if (!hasRangerDir) {
|
|
@@ -134,30 +119,11 @@ export async function skillup() {
|
|
|
134
119
|
if (installedCount > 0) {
|
|
135
120
|
const levelDesc = installLevel === 'user' ? 'user-level' : 'project-level';
|
|
136
121
|
console.log(`\n✅ Installed ${installedCount} ${levelDesc} skill${installedCount > 1 ? 's' : ''} successfully!\n`);
|
|
137
|
-
console.log('To use
|
|
138
|
-
console.log(` -
|
|
139
|
-
console.log(' - Or ask your agent to use Ranger to look for bugs on the feature you just built\n');
|
|
122
|
+
console.log('To use:');
|
|
123
|
+
console.log(` - Open Claude Code in plan mode and run /ranger:enable. Plan out a UI feature with Ranger and watch Ranger test it for you!`);
|
|
140
124
|
}
|
|
141
125
|
else {
|
|
142
126
|
console.log('\n⚠️ No skills were installed.\n');
|
|
143
127
|
}
|
|
144
128
|
}
|
|
145
|
-
async function configureMcpServer(level) {
|
|
146
|
-
if (level === 'user') {
|
|
147
|
-
const settings = await loadClaudeSettings();
|
|
148
|
-
if (!hasRangerServerInSettings(settings)) {
|
|
149
|
-
setRangerServerInSettings(settings);
|
|
150
|
-
await saveClaudeSettings(settings);
|
|
151
|
-
console.log(` ✓ Added ranger data-mcp-server to ${getClaudeConfigDir()}/settings.json`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
const mcpConfig = await loadMcpConfig();
|
|
156
|
-
if (!hasRangerServer(mcpConfig)) {
|
|
157
|
-
setRangerServer(mcpConfig);
|
|
158
|
-
await saveMcpConfig(mcpConfig);
|
|
159
|
-
console.log(' ✓ Added ranger data-mcp-server to .mcp.json');
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
129
|
//# sourceMappingURL=skillup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillup.js","sourceRoot":"","sources":["../../src/commands/skillup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"skillup.js","sourceRoot":"","sources":["../../src/commands/skillup.ts"],"names":[],"mappings":"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"}
|
package/build/commands/start.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0x10e967,_0xd8acc5){const _0x3d5560=_0x2393,_0x1800ad=_0x10e967();while(!![]){try{const _0x2d514c=parseInt(_0x3d5560(0x171))/0x1*(-parseInt(_0x3d5560(0x1ac))/0x2)+parseInt(_0x3d5560(0x1b0))/0x3*(-parseInt(_0x3d5560(0x1aa))/0x4)+-parseInt(_0x3d5560(0x18a))/0x5+-parseInt(_0x3d5560(0x170))/0x6*(parseInt(_0x3d5560(0x1b3))/0x7)+-parseInt(_0x3d5560(0x1a8))/0x8+parseInt(_0x3d5560(0x1a4))/0x9*(parseInt(_0x3d5560(0x180))/0xa)+parseInt(_0x3d5560(0x1b5))/0xb;if(_0x2d514c===_0xd8acc5)break;else _0x1800ad['push'](_0x1800ad['shift']());}catch(_0x9a07d3){_0x1800ad['push'](_0x1800ad['shift']());}}}(_0x5755,0xd7169));import{mkdir,writeFile}from'fs/promises';function _0x2393(_0x105e5c,_0x4da9e5){_0x105e5c=_0x105e5c-0x16f;const _0x575556=_0x5755();let _0x2393a1=_0x575556[_0x105e5c];return _0x2393a1;}import{join}from'path';import{existsSync}from'fs';import{createRequire}from'module';import{spawn}from'child_process';import _0x5f3289 from'inquirer';import{loadMcpConfig,saveMcpConfig,setRangerServer}from'./utils/mcpConfig.js';import{storeToken}from'./utils/keychain.js';import{getMcpServerUrl}from'./utils/environment.js';import{getCurrentUser}from'./utils/userApi.js';import{chromium}from'playwright';import{addEnv}from'./addEnv.js';import{skillup}from'./skillup.js';import{getRangerDir}from'./utils/rangerRoot.js';const require=createRequire(import.meta.url);function getPlaywrightVersion(){const _0x24c240=_0x2393;try{const _0x3a962a=require[_0x24c240(0x17e)]('playwright/package.json'),_0x2a7eea=require(_0x3a962a);return _0x2a7eea[_0x24c240(0x17f)];}catch{return null;}}function installChromium(_0x502ece){const _0x460d4e=_0x2393,_0x3d92af={'HUITf':function(_0x2f330c){return _0x2f330c();},'gbwIG':function(_0x55e320,_0x17e7d7){return _0x55e320(_0x17e7d7);},'mXVDl':'chromium','CQvpu':_0x460d4e(0x18b),'ntOCK':_0x460d4e(0x1b6),'HYIRl':_0x460d4e(0x1ae),'RETTK':_0x460d4e(0x1a2)};return new Promise((_0x183d83,_0x5dd25f)=>{const _0x2ffe7e=_0x460d4e,_0x560f2d=_0x502ece?[_0x2ffe7e(0x19e)+_0x502ece,_0x2ffe7e(0x18b),_0x3d92af[_0x2ffe7e(0x185)]]:[_0x2ffe7e(0x172),_0x3d92af['CQvpu'],_0x3d92af['mXVDl']],_0x5f296f=spawn(_0x3d92af['ntOCK'],_0x560f2d,{'stdio':'inherit','shell':!![]});_0x5f296f['on'](_0x3d92af['HYIRl'],_0x351bc7=>{const _0x2ae269=_0x2ffe7e;_0x351bc7===0x0?_0x3d92af[_0x2ae269(0x19c)](_0x183d83):_0x5dd25f(new Error('Installation\x20failed\x20with\x20exit\x20code\x20'+_0x351bc7));}),_0x5f296f['on'](_0x3d92af[_0x2ffe7e(0x19f)],_0x3d44dd=>{_0x3d92af['gbwIG'](_0x5dd25f,_0x3d44dd);});});}export async function start(_0x541ede){const _0x3a3547=_0x2393,_0x819320={'jCUoB':_0x3a3547(0x1a7),'mNsjz':function(_0x58bfe3,_0xd72a4f){return _0x58bfe3(_0xd72a4f);},'CitZQ':_0x3a3547(0x1b1),'Uwtrt':'✓\x20Exported\x20credentials\x20for\x20CI','kLHlp':function(_0x4d1b7f){return _0x4d1b7f();},'AdDUk':'✓\x20Created/updated\x20.mcp.json\x20with\x20Ranger\x20MCP\x20proxy','iqkqT':function(_0x1c90e8){return _0x1c90e8();},'Vplgd':function(_0x5df09d,_0x45ac7e){return _0x5df09d(_0x45ac7e);},'iclEu':function(_0x40d37b,_0x51025e,_0x152726){return _0x40d37b(_0x51025e,_0x152726);},'ADQTL':'✓\x20.ranger/\x20directory\x20already\x20exists','XzrJD':'confirm','oznWF':'Required\x20Playwright\x20Chromium\x20browser\x20is\x20missing.\x20Install\x20it\x20now?','wyoZD':_0x3a3547(0x19a),'RmbqV':_0x3a3547(0x1ab),'mYTRI':function(_0x4a226a,_0x5c514d){return _0x4a226a instanceof _0x5c514d;},'JwQVl':'\x20\x20npx\x20playwright\x20install\x20chromium','fFTBO':_0x3a3547(0x191),'BnraJ':_0x3a3547(0x16f),'TxBja':'\x0a✅\x20Ranger\x20setup\x20complete!\x0a','SwbgX':_0x3a3547(0x187),'XSMOy':_0x3a3547(0x175),'kXuXQ':_0x3a3547(0x192),'FJFXR':'\x0aNext\x20steps:','tfLGD':_0x3a3547(0x190),'mQyPY':_0x3a3547(0x1ad),'coHtD':_0x3a3547(0x197),'wWsDl':_0x3a3547(0x182),'BeUJZ':_0x3a3547(0x196)};console[_0x3a3547(0x174)](_0x819320['jCUoB']);const _0x6fbb38=getMcpServerUrl();console['log'](_0x3a3547(0x181));const _0x5a261c=await _0x819320['mNsjz'](getCurrentUser,_0x541ede);!_0x5a261c[_0x3a3547(0x173)]&&(_0x5a261c['status']?(console['error'](_0x3a3547(0x194)+_0x5a261c['error']),console['error'](_0x819320[_0x3a3547(0x1a3)])):(console['error']('\x0a❌\x20Failed\x20to\x20connect\x20to\x20MCP\x20server:\x20'+_0x5a261c['error']),console[_0x3a3547(0x1a2)](_0x3a3547(0x179))),process[_0x3a3547(0x189)](0x1));console['log'](_0x3a3547(0x176)+_0x5a261c[_0x3a3547(0x17c)][_0x3a3547(0x1b2)]),await _0x819320[_0x3a3547(0x17b)](storeToken,_0x541ede),console['log'](process[_0x3a3547(0x18d)]['GITHUB_ENV']?_0x819320['Uwtrt']:'✓\x20Stored\x20credentials\x20in\x20OS\x20Keychain');const _0x504192=await _0x819320['kLHlp'](loadMcpConfig);setRangerServer(_0x504192),await saveMcpConfig(_0x504192),console['log'](_0x819320['AdDUk']);const _0x58e201=_0x819320['iqkqT'](getRangerDir);!_0x819320['Vplgd'](existsSync,_0x58e201)?(await _0x819320[_0x3a3547(0x177)](mkdir,_0x58e201,{'recursive':!![]}),console[_0x3a3547(0x174)](_0x3a3547(0x17a))):console[_0x3a3547(0x174)](_0x819320['ADQTL']);let _0x3318cb=![];try{const _0x38da58=chromium['executablePath']();_0x3318cb=existsSync(_0x38da58);}catch{_0x3318cb=![];}if(_0x3318cb)console['log'](_0x3a3547(0x184));else{const _0x1c6c19=getPlaywrightVersion(),{install:_0x486a61}=await _0x5f3289['prompt']([{'type':_0x819320['XzrJD'],'name':_0x3a3547(0x18b),'message':_0x819320['oznWF'],'default':!![]}]);if(_0x486a61){console['log']('\x0aInstalling\x20Chromium\x20browser...\x0a');try{await _0x819320[_0x3a3547(0x17b)](installChromium,_0x1c6c19),console['log'](_0x819320['wyoZD']);}catch(_0x5804bc){console['error'](_0x819320[_0x3a3547(0x198)],_0x819320[_0x3a3547(0x1a9)](_0x5804bc,Error)?_0x5804bc[_0x3a3547(0x188)]:_0x5804bc),console[_0x3a3547(0x174)]('You\x20can\x20install\x20it\x20manually\x20by\x20running:'),_0x1c6c19?console['log'](_0x3a3547(0x1b4)+_0x1c6c19+_0x3a3547(0x18f)):console['log'](_0x3a3547(0x1b7));}}else console['log']('\x0a⚠\x20Skipping\x20Chromium\x20installation.'),console[_0x3a3547(0x174)](_0x3a3547(0x19b)),_0x1c6c19?console[_0x3a3547(0x174)](_0x3a3547(0x1b4)+_0x1c6c19+_0x3a3547(0x18f)):console['log'](_0x819320[_0x3a3547(0x18e)]);}const _0x4037a3=join(_0x58e201,_0x819320[_0x3a3547(0x178)]),_0x2612fa='\x0a\x0a#\x20Ignore\x20local-only\x20directories\x0alocal/\x0asessions/\x0abug-bashes/\x0areports/\x0a\x0aactive-env.txt\x0aactive-feature.txt\x0a.gitignore\x0a\x0a#\x20Ignore\x20plaintext\x20auth\x20files\x20(encrypted\x20.enc\x20files\x20are\x20safe\x20to\x20commit)\x0a**/auth.json\x0a';await writeFile(_0x4037a3,_0x2612fa),console[_0x3a3547(0x174)](_0x819320[_0x3a3547(0x1a6)]),console['log'](_0x819320['TxBja']),console[_0x3a3547(0x174)](_0x3a3547(0x199)),console['log'](_0x3a3547(0x19d)),console['log']('\x20\x20/plugin\x20marketplace\x20add\x20ranger-testing/trailhead'),console[_0x3a3547(0x174)](_0x819320['SwbgX']),console[_0x3a3547(0x174)](_0x819320['XSMOy']);const _0x3f7264=process['stdin']['isTTY']&&process[_0x3a3547(0x1a1)][_0x3a3547(0x1a5)];if(!_0x3f7264){const _0x2dc93f=_0x3a3547(0x1af)['split']('|');let _0x1935a9=0x0;while(!![]){switch(_0x2dc93f[_0x1935a9++]){case'0':return;case'1':console['log'](_0x819320['kXuXQ']);continue;case'2':console['log'](_0x819320['FJFXR']);continue;case'3':console['log'](_0x819320[_0x3a3547(0x18c)]);continue;case'4':console[_0x3a3547(0x174)]('\x20\x201.\x20Navigate\x20to\x20your\x20project\x20directory');continue;case'5':console[_0x3a3547(0x174)](_0x3a3547(0x17d));continue;}break;}}console[_0x3a3547(0x174)](_0x819320['mQyPY']),console['log']('\x20\x20\x20If\x20you\x27re\x20not\x20in\x20your\x20project\x20directory,\x20exit\x20now\x20and\x20run\x20`ranger\x20add\x20env\x20<env-name>`\x20from\x20there.\x0a');const {wantsEnv:_0x5b9b4c}=await _0x5f3289[_0x3a3547(0x193)]([{'type':_0x819320['XzrJD'],'name':_0x3a3547(0x1a0),'message':'Do\x20you\x20want\x20to\x20add\x20an\x20environment\x20now?','default':!![]}]);if(_0x5b9b4c){const {envName:_0x5d7a80}=await _0x5f3289['prompt']([{'type':'input','name':_0x819320['coHtD'],'message':_0x819320[_0x3a3547(0x186)],'default':'local'}]);await _0x819320['mNsjz'](addEnv,_0x5d7a80);}const {wantsSkillup:_0x11740b}=await _0x5f3289[_0x3a3547(0x193)]([{'type':_0x819320[_0x3a3547(0x195)],'name':_0x819320[_0x3a3547(0x183)],'message':'Would\x20you\x20like\x20to\x20install\x20skills?','default':!![]}]);_0x11740b&&await skillup();}function _0x5755(){const _0x3463e4=['5283ZCnkFi','playwright','success','log','This\x20enables\x20auto-firing\x20hooks,\x20MCP\x20tools,\x20and\x20browser\x20verification.\x0a','✓\x20Authenticated\x20to\x20','iclEu','fFTBO','Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.','✓\x20Created\x20.ranger/\x20directory','mNsjz','user','\x20\x202.\x20Run:\x20ranger\x20add\x20env\x20local','resolve','version','780FkRTIV','Validating\x20API\x20token...','What\x20should\x20the\x20environment\x20be\x20named?','BeUJZ','✓\x20Playwright\x20Chromium\x20browser\x20found','mXVDl','wWsDl','\x20\x20/plugin\x20install\x20ranger@trailhead\x0a','message','exit','5111190UUuGWP','install','tfLGD','env','JwQVl','\x20install\x20chromium','\x20\x203.\x20Run:\x20ranger\x20skillup\x0a','.gitignore','Non-interactive\x20mode\x20detected.\x20Skipping\x20optional\x20setup\x20prompts.','prompt','\x0a❌\x20Authentication\x20failed:\x20','XzrJD','wantsSkillup','envName','RmbqV','📦\x20Claude\x20Code\x20Plugin\x0a','\x0a✓\x20Playwright\x20Chromium\x20installed\x20successfully','You\x20will\x20need\x20to\x20install\x20it\x20before\x20using\x20Ranger:','HUITf','To\x20enable\x20Ranger\x20in\x20Claude\x20Code,\x20run\x20these\x20commands\x20in\x20Claude\x20Code:','playwright@','RETTK','wantsEnv','stdout','error','CitZQ','87345FzgZsu','isTTY','BnraJ','\x0a🚀\x20Ranger\x20Setup\x0a','13026192AAAlyj','mYTRI','352BrWTcd','\x0a❌\x20Failed\x20to\x20install\x20Chromium:','390GkdiSK','ℹ️\x20\x20To\x20add\x20an\x20environment,\x20you\x20should\x20be\x20in\x20your\x20project\x20repository.','close','1|2|4|5|3|0','56703ruBFbs','Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.','organizationName','10843SWgqAI','\x20\x20npx\x20playwright@','73250947MMBdyR','npx','\x20\x20npx\x20playwright\x20install\x20chromium','✓\x20Created\x20.ranger/.gitignore','4614tJZtBz'];_0x5755=function(){return _0x3463e4;};return _0x5755();}
|
|
1
|
+
(function(_0x14b3d3,_0x3ed4c1){const _0xf4539f=_0x23f2,_0xb931f0=_0x14b3d3();while(!![]){try{const _0xc78297=-parseInt(_0xf4539f(0x1b8))/0x1+parseInt(_0xf4539f(0x1f3))/0x2+-parseInt(_0xf4539f(0x1f2))/0x3*(-parseInt(_0xf4539f(0x1c1))/0x4)+-parseInt(_0xf4539f(0x1a4))/0x5+parseInt(_0xf4539f(0x1c5))/0x6*(-parseInt(_0xf4539f(0x1cb))/0x7)+parseInt(_0xf4539f(0x1bc))/0x8+-parseInt(_0xf4539f(0x1bf))/0x9*(-parseInt(_0xf4539f(0x1b9))/0xa);if(_0xc78297===_0x3ed4c1)break;else _0xb931f0['push'](_0xb931f0['shift']());}catch(_0x187375){_0xb931f0['push'](_0xb931f0['shift']());}}}(_0x31c6,0x2e6b1));import{mkdir,writeFile}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{createRequire}from'module';function _0x31c6(){const _0xcc88ea=['prompt','200620PHjpdN','141910EuIBcw','\x0a\x0a#\x20Ignore\x20local-only\x20directories\x0alocal/\x0asessions/\x0abug-bashes/\x0areports/\x0a\x0aactive-env.txt\x0aactive-feature.txt\x0a.gitignore\x0a\x0a#\x20Ignore\x20plaintext\x20auth\x20files\x20(encrypted\x20.enc\x20files\x20are\x20safe\x20to\x20commit)\x0a**/auth.json\x0a','DjFiG','2577872hPeoqY','UirfR','Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.','63eqpGgb','KfBEJ','422692friKYm','\x0aInstalling\x20Claude\x20Code\x20plugin...\x0a','user','✓\x20Authenticated\x20to\x20','254976bbWwIX','onSfy','ONaaw','GITHUB_ENV','ULxJg','\x20\x20npx\x20playwright\x20install\x20chromium','7yWkzJq','marketplace','Mkdqm','env','You\x20can\x20install\x20it\x20manually\x20by\x20running:','ranger@trailhead','hPEXK','success','LQLpY','vjJGK','HUDRJ','YgjqK','fjGgF','isTTY','✓\x20Created\x20.ranger/.gitignore','uCjxP','\x20\x20\x20\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x0a','flnuH','✓\x20Playwright\x20Chromium\x20browser\x20found','playwright/package.json','HaYYh','User\x20(available\x20in\x20all\x20your\x20projects)','--scope','\x0aTo\x20install\x20the\x20plugin\x20later,\x20run:','tJyNi','Installation\x20failed\x20with\x20exit\x20code\x20','ℹ️\x20\x20To\x20add\x20an\x20environment,\x20you\x20should\x20be\x20in\x20your\x20project\x20repository.','\x20\x20\x20\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead','\x20install\x20chromium','BKNFe','\x0a❌\x20Authentication\x20failed:\x20','install','✓\x20Claude\x20Code\x20plugin\x20already\x20installed\x0a','✓\x20Created\x20.ranger/\x20directory','version','\x20\x203.\x20Run:\x20ranger\x20skillup','\x20\x201.\x20Navigate\x20to\x20your\x20project\x20directory','KZrew','confirm','3CZmuTf','268246gtbavi','What\x20should\x20the\x20environment\x20be\x20named?','plugin','pluginScope','✅\x20Complete!\x20Make\x20sure\x20you\x20have\x20your\x20environment,\x20skill,\x20and\x20plugin\x20installed\x20and\x20you\x20can\x20boot\x20up\x20Claude\x20Code\x20in\x20plan\x20mode\x20and\x20test\x20a\x20UI\x20feature\x20with\x20Ranger','Do\x20you\x20want\x20to\x20install\x20the\x20Ranger\x20plugin\x20for\x20Claude\x20Code?\x20(recommended)','RgCZR','\x0a✓\x20Playwright\x20Chromium\x20installed\x20successfully','log','1140610AiLlBr','cbedy','❌\x20Failed\x20to\x20install\x20plugin:','EOrXv','Where\x20should\x20the\x20plugin\x20be\x20installed?','📦\x20Claude\x20Code\x20Plugin\x0a','\x0aYou\x20can\x20install\x20manually\x20with:','YloMh','CbfdZ','trailhead','TdpnB','FjoXO','PPVwi','add','❌\x20Failed\x20to\x20add\x20marketplace:','Validating\x20API\x20token...','exit','npx','error'];_0x31c6=function(){return _0xcc88ea;};return _0x31c6();}import{spawn}from'child_process';import _0x19033d from'inquirer';import{storeToken}from'./utils/keychain.js';import{getCurrentUser}from'./utils/userApi.js';import{chromium}from'playwright';import{addEnv}from'./addEnv.js';function _0x23f2(_0x4f99d5,_0x244052){_0x4f99d5=_0x4f99d5-0x1a2;const _0x31c68f=_0x31c6();let _0x23f2bb=_0x31c68f[_0x4f99d5];return _0x23f2bb;}import{skillup}from'./skillup.js';import{getRangerDir}from'./utils/rangerRoot.js';import{runClaudeCommand,isMarketplaceAdded,isPluginInstalled}from'./utils/claudePlugin.js';const require=createRequire(import.meta.url);function getPlaywrightVersion(){const _0x5e49bd=_0x23f2,_0x177ff2={'EoEyh':_0x5e49bd(0x1de),'ULxJg':function(_0x581ca0,_0x4030f3){return _0x581ca0(_0x4030f3);}};try{const _0x547532=require['resolve'](_0x177ff2['EoEyh']),_0x4b4f69=_0x177ff2[_0x5e49bd(0x1c9)](require,_0x547532);return _0x4b4f69[_0x5e49bd(0x1ed)];}catch{return null;}}function installChromium(_0xd6bb62){const _0x580f91=_0x23f2,_0x506617={'tJyNi':function(_0x583aed,_0x4192b0){return _0x583aed(_0x4192b0);},'Mkdqm':function(_0x14b4c5,_0x5d9cd4){return _0x14b4c5===_0x5d9cd4;},'uCjxP':_0x580f91(0x1ea),'zExte':'chromium','zoruS':'playwright','YgjqK':_0x580f91(0x1b5),'WJjcf':'inherit'};return new Promise((_0x30cfaf,_0x54595a)=>{const _0x2bc365=_0x580f91,_0xd898fb={'flnuH':function(_0x385348,_0x39cf5d){const _0x33bda0=_0x23f2;return _0x506617[_0x33bda0(0x1cd)](_0x385348,_0x39cf5d);},'onSfy':function(_0x2c5c9e){return _0x2c5c9e();}},_0xfd499f=_0xd6bb62?['playwright@'+_0xd6bb62,_0x506617[_0x2bc365(0x1da)],_0x506617['zExte']]:[_0x506617['zoruS'],_0x506617['uCjxP'],_0x506617['zExte']],_0x48562b=spawn(_0x506617[_0x2bc365(0x1d6)],_0xfd499f,{'stdio':_0x506617['WJjcf'],'shell':!![]});_0x48562b['on']('close',_0x20262c=>{const _0x42a3ec=_0x2bc365;_0xd898fb[_0x42a3ec(0x1dc)](_0x20262c,0x0)?_0xd898fb[_0x42a3ec(0x1c6)](_0x30cfaf):_0x54595a(new Error(_0x42a3ec(0x1e4)+_0x20262c));}),_0x48562b['on'](_0x2bc365(0x1b6),_0x44a41b=>{const _0x36a0f0=_0x2bc365;_0x506617[_0x36a0f0(0x1e3)](_0x54595a,_0x44a41b);});});}export async function start(_0x190996){const _0xe2c188=_0x23f2,_0x422334={'PPVwi':'✓\x20Stored\x20credentials\x20in\x20OS\x20Keychain','CbfdZ':function(_0x4365f0){return _0x4365f0();},'DjFiG':function(_0x6fa502,_0x544689){return _0x6fa502(_0x544689);},'EOrXv':_0xe2c188(0x1ec),'fjGgF':'✓\x20.ranger/\x20directory\x20already\x20exists','BKNFe':function(_0xe0dc42,_0x49ef04){return _0xe0dc42(_0x49ef04);},'cbedy':_0xe2c188(0x1dd),'vjJGK':'\x0aNon-interactive\x20mode:\x20Auto-installing\x20Playwright\x20Chromium...','LQLpY':'\x0aInstalling\x20Chromium\x20browser...\x0a','KZrew':function(_0x47d480,_0x3a9838){return _0x47d480 instanceof _0x3a9838;},'XNLwM':_0xe2c188(0x1cf),'hPEXK':_0xe2c188(0x1ca),'HaYYh':function(_0x2798b4,_0x45dc91,_0x19c521){return _0x2798b4(_0x45dc91,_0x19c521);},'KfBEJ':'.gitignore','kaUWf':function(_0x5b0de9,_0xb41dd8,_0x37e091){return _0x5b0de9(_0xb41dd8,_0x37e091);},'inNfB':_0xe2c188(0x1d9),'TdpnB':'Non-interactive\x20mode\x20detected.\x20Skipping\x20optional\x20setup\x20prompts.','KLoSN':_0xe2c188(0x1ef),'HUDRJ':_0xe2c188(0x1ee),'FjoXO':'\x20\x204.\x20Install\x20Claude\x20Code\x20plugin:','vULxv':_0xe2c188(0x1db),'ONaaw':_0xe2c188(0x1f8),'RgCZR':_0xe2c188(0x1eb),'UirfR':'list','fdqMG':'Project\x20(shared\x20with\x20team\x20via\x20git)','woXQH':'project','YCKiu':_0xe2c188(0x1c3),'jvkqn':'ranger-testing/trailhead','fyyul':_0xe2c188(0x1b2),'YloMh':'ranger@trailhead','mqrHY':_0xe2c188(0x1e1),'MgVBE':'✓\x20Claude\x20Code\x20plugin\x20installed\x20successfully\x0a','DIXXZ':'\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead','vxaad':'\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x0a','uDRvI':'\x20\x20\x20If\x20you\x27re\x20not\x20in\x20your\x20project\x20directory,\x20exit\x20now\x20and\x20run\x20`ranger\x20add\x20env\x20<env-name>`\x20from\x20there.\x0a','sLbfw':_0xe2c188(0x1f1),'VPQcT':'Do\x20you\x20want\x20to\x20add\x20an\x20environment\x20now?','VsZso':'wantsSkillup'};console[_0xe2c188(0x1a3)]('\x0a🚀\x20Ranger\x20Setup\x0a'),console[_0xe2c188(0x1a3)](_0xe2c188(0x1b3));const _0x16984f=await getCurrentUser(_0x190996);!_0x16984f[_0xe2c188(0x1d2)]&&(_0x16984f['status']?(console[_0xe2c188(0x1b6)](_0xe2c188(0x1e9)+_0x16984f['error']),console['error'](_0xe2c188(0x1be))):(console[_0xe2c188(0x1b6)]('\x0a❌\x20Failed\x20to\x20connect\x20to\x20MCP\x20server:\x20'+_0x16984f[_0xe2c188(0x1b6)]),console[_0xe2c188(0x1b6)]('Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.')),process[_0xe2c188(0x1b4)](0x1));console['log'](_0xe2c188(0x1c4)+_0x16984f[_0xe2c188(0x1c3)]['organizationName']),await storeToken(_0x190996),console[_0xe2c188(0x1a3)](process[_0xe2c188(0x1ce)][_0xe2c188(0x1c8)]?'✓\x20Exported\x20credentials\x20for\x20CI':_0x422334[_0xe2c188(0x1b0)]);const _0x3793a6=_0x422334[_0xe2c188(0x1ac)](getRangerDir);!_0x422334[_0xe2c188(0x1bb)](existsSync,_0x3793a6)?(await mkdir(_0x3793a6,{'recursive':!![]}),console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1a7)])):console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1d7)]);let _0x1b775f=![];try{const _0x2c17a8=chromium['executablePath']();_0x1b775f=_0x422334[_0xe2c188(0x1e8)](existsSync,_0x2c17a8);}catch{_0x1b775f=![];}if(_0x1b775f)console['log'](_0x422334[_0xe2c188(0x1a5)]);else{const _0xcabfe4=getPlaywrightVersion(),_0x150560=process['stdin'][_0xe2c188(0x1d8)]&&process['stdout']['isTTY'];let _0x269cee=!![];if(_0x150560){const {install:_0x26363d}=await _0x19033d['prompt']([{'type':'confirm','name':_0xe2c188(0x1ea),'message':'Required\x20Playwright\x20Chromium\x20browser\x20is\x20missing.\x20Install\x20it\x20now?','default':!![]}]);_0x269cee=_0x26363d;}else console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1d4)]);if(_0x269cee){console['log'](_0x422334[_0xe2c188(0x1d3)]);try{await _0x422334[_0xe2c188(0x1e8)](installChromium,_0xcabfe4),console['log'](_0xe2c188(0x1a2));}catch(_0x2eb0c7){console[_0xe2c188(0x1b6)]('\x0a❌\x20Failed\x20to\x20install\x20Chromium:',_0x422334[_0xe2c188(0x1f0)](_0x2eb0c7,Error)?_0x2eb0c7['message']:_0x2eb0c7),console[_0xe2c188(0x1a3)](_0x422334['XNLwM']),_0xcabfe4?console['log']('\x20\x20npx\x20playwright@'+_0xcabfe4+_0xe2c188(0x1e7)):console['log'](_0xe2c188(0x1ca));}}else console['log']('\x0a⚠\x20Skipping\x20Chromium\x20installation.'),console['log']('You\x20will\x20need\x20to\x20install\x20it\x20before\x20using\x20Ranger:'),_0xcabfe4?console[_0xe2c188(0x1a3)]('\x20\x20npx\x20playwright@'+_0xcabfe4+'\x20install\x20chromium'):console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1d1)]);}const _0x11c5ab=_0x422334[_0xe2c188(0x1df)](join,_0x3793a6,_0x422334[_0xe2c188(0x1c0)]),_0x165ca1=_0xe2c188(0x1ba);await _0x422334['kaUWf'](writeFile,_0x11c5ab,_0x165ca1),console['log'](_0x422334['inNfB']),console['log']('\x0a✅\x20Ranger\x20setup\x20complete!\x0a');const _0x2f0294=process['stdin'][_0xe2c188(0x1d8)]&&process['stdout']['isTTY'];if(!_0x2f0294){console['log'](_0x422334[_0xe2c188(0x1ae)]),console[_0xe2c188(0x1a3)]('\x0aNext\x20steps:'),console['log'](_0x422334['KLoSN']),console[_0xe2c188(0x1a3)]('\x20\x202.\x20Run:\x20ranger\x20add\x20env\x20local'),console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1d5)]),console['log'](_0x422334[_0xe2c188(0x1af)]),console[_0xe2c188(0x1a3)](_0xe2c188(0x1e6)),console['log'](_0x422334['vULxv']);return;}console['log'](_0xe2c188(0x1a9));const {wantsPlugin:_0x4220c7}=await _0x19033d['prompt']([{'type':_0xe2c188(0x1f1),'name':'wantsPlugin','message':_0x422334[_0xe2c188(0x1c7)],'default':!![]}]);if(_0x4220c7){const _0x5a4e76=await isPluginInstalled(_0xe2c188(0x1d0));if(_0x5a4e76)console[_0xe2c188(0x1a3)](_0x422334[_0xe2c188(0x1f9)]);else{const {pluginScope:_0x3bbf90}=await _0x19033d[_0xe2c188(0x1b7)]([{'type':_0x422334[_0xe2c188(0x1bd)],'name':_0xe2c188(0x1f6),'message':_0xe2c188(0x1a8),'choices':[{'name':_0xe2c188(0x1e0),'value':'user'},{'name':_0x422334['fdqMG'],'value':_0x422334['woXQH']}],'default':_0x422334['YCKiu']}]);console['log'](_0xe2c188(0x1c2));const _0x269406=await isMarketplaceAdded(_0xe2c188(0x1ad));let _0x4cf8f4=_0x269406;if(_0x269406)console['log']('✓\x20Marketplace\x20already\x20added');else{const _0x2c8b90=await runClaudeCommand([_0xe2c188(0x1f5),_0xe2c188(0x1cc),_0xe2c188(0x1b1),_0x422334['jvkqn']]);!_0x2c8b90[_0xe2c188(0x1d2)]?(console[_0xe2c188(0x1b6)](_0x422334['fyyul'],_0x2c8b90['error']),console['log'](_0xe2c188(0x1aa)),console['log']('\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead'),console[_0xe2c188(0x1a3)]('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0x3bbf90)):_0x4cf8f4=!![];}if(_0x4cf8f4){const _0x3c6090=await runClaudeCommand([_0xe2c188(0x1f5),'install',_0x422334[_0xe2c188(0x1ab)],_0x422334['mqrHY'],_0x3bbf90]);!_0x3c6090['success']?(console[_0xe2c188(0x1b6)](_0xe2c188(0x1a6),_0x3c6090[_0xe2c188(0x1b6)]),console['log']('\x0aYou\x20can\x20install\x20manually\x20with:'),console[_0xe2c188(0x1a3)]('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0x3bbf90)):console[_0xe2c188(0x1a3)](_0x422334['MgVBE']);}}}else console[_0xe2c188(0x1a3)](_0xe2c188(0x1e2)),console['log'](_0x422334['DIXXZ']),console['log'](_0x422334['vxaad']);console[_0xe2c188(0x1a3)](_0xe2c188(0x1e5)),console[_0xe2c188(0x1a3)](_0x422334['uDRvI']);const {wantsEnv:_0x3c3d2f}=await _0x19033d[_0xe2c188(0x1b7)]([{'type':_0x422334['sLbfw'],'name':'wantsEnv','message':_0x422334['VPQcT'],'default':!![]}]);if(_0x3c3d2f){const {envName:_0x46e705}=await _0x19033d[_0xe2c188(0x1b7)]([{'type':'input','name':'envName','message':_0xe2c188(0x1f4),'default':'local'}]);await addEnv(_0x46e705);}const {wantsSkillup:_0x96a36e}=await _0x19033d['prompt']([{'type':'confirm','name':_0x422334['VsZso'],'message':'Would\x20you\x20like\x20to\x20install\x20skills?','default':!![]}]);_0x96a36e&&await skillup(),console['log'](_0xe2c188(0x1f7));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/build/commands/status.js
CHANGED
|
@@ -2,13 +2,14 @@ import { readFile, readdir } from 'fs/promises';
|
|
|
2
2
|
import { join, basename } from 'path';
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { getToken } from './utils/keychain.js';
|
|
5
|
-
import { loadMcpConfig, hasRangerServer } from './utils/mcpConfig.js';
|
|
6
5
|
import { getCurrentVersion, getLatestVersion } from './utils/version.js';
|
|
7
|
-
import { getApiBaseUrl,
|
|
8
|
-
import { getProjectSkillsDir, getUserSkillsDir
|
|
6
|
+
import { getApiBaseUrl, getCurrentEnvironment } from './utils/environment.js';
|
|
7
|
+
import { getProjectSkillsDir, getUserSkillsDir } from './utils/claudeConfig.js';
|
|
9
8
|
import { getEnvNames } from './env.js';
|
|
10
9
|
import { getCurrentUser } from './utils/userApi.js';
|
|
11
10
|
import { getRangerDir } from './utils/rangerRoot.js';
|
|
11
|
+
import { getPluginInfo } from './utils/claudePlugin.js';
|
|
12
|
+
import { RANGER_MANAGED_SKILLS } from './utils/skills.js';
|
|
12
13
|
// ANSI formatting helpers
|
|
13
14
|
const bold = (text) => `\x1b[1m${text}\x1b[0m`;
|
|
14
15
|
const link = (path, text) => `\x1b]8;;file://${path}\x07${text || path}\x1b]8;;\x07`;
|
|
@@ -128,29 +129,24 @@ export async function status() {
|
|
|
128
129
|
if (process.env.DEBUG) {
|
|
129
130
|
console.log(`Environment: ${getCurrentEnvironment()}`);
|
|
130
131
|
console.log(`API URL: ${getApiBaseUrl()}`);
|
|
131
|
-
console.log(`MCP Server URL: ${getMcpServerUrl()}`);
|
|
132
132
|
}
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
console.log(`
|
|
140
|
-
}
|
|
141
|
-
else if (hasProjectMcp) {
|
|
142
|
-
console.log(`MCP Server: ✓ Configured in .mcp.json`);
|
|
143
|
-
}
|
|
144
|
-
else if (hasUserMcp) {
|
|
145
|
-
console.log(`MCP Server: ✓ Configured in ${getSettingsPath()}`);
|
|
133
|
+
// Claude Code Plugin
|
|
134
|
+
console.log('\n--- Claude Code Plugin ---');
|
|
135
|
+
const pluginInfo = await getPluginInfo('ranger@trailhead');
|
|
136
|
+
if (pluginInfo) {
|
|
137
|
+
const scopeLabel = pluginInfo.scope || 'unknown';
|
|
138
|
+
const statusLabel = pluginInfo.enabled ? 'enabled' : 'disabled';
|
|
139
|
+
console.log(` ${bold('ranger@trailhead')}: installed (${scopeLabel}, ${statusLabel})`);
|
|
146
140
|
}
|
|
147
141
|
else {
|
|
148
|
-
console.log(
|
|
149
|
-
console.log(
|
|
142
|
+
console.log(' Not installed');
|
|
143
|
+
console.log(' Run: ranger start <token> (includes plugin installation)');
|
|
150
144
|
}
|
|
151
|
-
// Skills
|
|
145
|
+
// Skills (only show Ranger-managed skills)
|
|
152
146
|
console.log('\n--- Skills ---');
|
|
153
|
-
const { project:
|
|
147
|
+
const { project: allProjectSkills, user: allUserSkills } = await getInstalledSkills();
|
|
148
|
+
const projectSkills = allProjectSkills.filter((s) => RANGER_MANAGED_SKILLS.includes(s.name));
|
|
149
|
+
const userSkills = allUserSkills.filter((s) => RANGER_MANAGED_SKILLS.includes(s.name));
|
|
154
150
|
const totalSkills = projectSkills.length + userSkills.length;
|
|
155
151
|
if (totalSkills === 0) {
|
|
156
152
|
console.log('No skills installed');
|