@ranger-testing/ranger-cli 1.0.14 → 1.1.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.
Files changed (81) hide show
  1. package/README.md +57 -131
  2. package/build/cli.js +60 -62
  3. package/build/cli.js.map +1 -1
  4. package/build/commands/addEnv.js +1 -1
  5. package/build/commands/addEnv.js.map +1 -1
  6. package/build/commands/clean.js +1 -1
  7. package/build/commands/clean.js.map +1 -1
  8. package/build/commands/dataMcpServer.js +1 -1
  9. package/build/commands/feature.js +91 -34
  10. package/build/commands/feature.js.map +1 -1
  11. package/build/commands/hook.js +27 -0
  12. package/build/commands/hook.js.map +1 -0
  13. package/build/commands/hooks/disable.js +25 -0
  14. package/build/commands/hooks/disable.js.map +1 -0
  15. package/build/commands/hooks/enable.js +44 -0
  16. package/build/commands/hooks/enable.js.map +1 -0
  17. package/build/commands/hooks/exitPlanMode.js +35 -0
  18. package/build/commands/hooks/exitPlanMode.js.map +1 -0
  19. package/build/commands/hooks/index.js +10 -0
  20. package/build/commands/hooks/index.js.map +1 -0
  21. package/build/commands/hooks/output.js +53 -0
  22. package/build/commands/hooks/output.js.map +1 -0
  23. package/build/commands/hooks/planReminder.js +46 -0
  24. package/build/commands/hooks/planReminder.js.map +1 -0
  25. package/build/commands/hooks/planStart.js +30 -0
  26. package/build/commands/hooks/planStart.js.map +1 -0
  27. package/build/commands/hooks/postEdit.js +41 -0
  28. package/build/commands/hooks/postEdit.js.map +1 -0
  29. package/build/commands/hooks/preCompact.js +30 -0
  30. package/build/commands/hooks/preCompact.js.map +1 -0
  31. package/build/commands/hooks/sessionStart.js +35 -0
  32. package/build/commands/hooks/sessionStart.js.map +1 -0
  33. package/build/commands/hooks/stopHook.js +54 -0
  34. package/build/commands/hooks/stopHook.js.map +1 -0
  35. package/build/commands/index.js +1 -3
  36. package/build/commands/index.js.map +1 -1
  37. package/build/commands/skillup.js +36 -69
  38. package/build/commands/skillup.js.map +1 -1
  39. package/build/commands/start.js +1 -1
  40. package/build/commands/start.js.map +1 -1
  41. package/build/commands/status.js +17 -21
  42. package/build/commands/status.js.map +1 -1
  43. package/build/commands/updateEnv.js +1 -1
  44. package/build/commands/updateEnv.js.map +1 -1
  45. package/build/commands/useEnv.js +1 -1
  46. package/build/commands/utils/browserSessionsApi.js +1 -1
  47. package/build/commands/utils/claudePlugin.js +85 -0
  48. package/build/commands/utils/claudePlugin.js.map +1 -0
  49. package/build/commands/utils/cliSecret.js +1 -1
  50. package/build/commands/utils/featureApi.js +23 -0
  51. package/build/commands/utils/featureApi.js.map +1 -1
  52. package/build/commands/utils/git.js +44 -0
  53. package/build/commands/utils/git.js.map +1 -0
  54. package/build/commands/utils/keychain.js +1 -1
  55. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  56. package/build/commands/utils/sessionCache.js +133 -0
  57. package/build/commands/utils/sessionCache.js.map +1 -0
  58. package/build/commands/utils/skillContent.js +3 -3
  59. package/build/commands/utils/skillContent.js.map +1 -1
  60. package/build/commands/utils/skills.js +1 -1
  61. package/build/commands/utils/skills.js.map +1 -1
  62. package/build/commands/verifyFeature.js +22 -2
  63. package/build/commands/verifyFeature.js.map +1 -1
  64. package/build/commands/verifyInBrowser.js +1 -1
  65. package/build/skills/ranger/SKILL.md +164 -0
  66. package/build/skills/ranger/create.md +151 -0
  67. package/build/skills/ranger/start.md +122 -0
  68. package/build/skills/{feature-tracker → ranger}/verify.md +33 -3
  69. package/package.json +1 -1
  70. package/build/commands/postEditHook.js +0 -25
  71. package/build/commands/postEditHook.js.map +0 -1
  72. package/build/commands/preCompactHook.js +0 -85
  73. package/build/commands/preCompactHook.js.map +0 -1
  74. package/build/commands/sessionStartHook.js +0 -64
  75. package/build/commands/sessionStartHook.js.map +0 -1
  76. package/build/commands/utils/mcpConfig.js +0 -1
  77. package/build/commands/utils/mcpConfig.js.map +0 -1
  78. package/build/skills/feature-tracker/SKILL.md +0 -163
  79. package/build/skills/feature-tracker/create.md +0 -114
  80. package/build/skills/feature-tracker/report.md +0 -159
  81. package/build/skills/feature-tracker/start.md +0 -93
@@ -0,0 +1,53 @@
1
+ import { isSessionEnabled } from '../utils/sessionCache.js';
2
+ /**
3
+ * Helper utilities for hooks
4
+ */
5
+ /**
6
+ * Print a block of text with consistent formatting.
7
+ * Handles multi-line strings cleanly without repeated console.log calls.
8
+ */
9
+ export function printBlock(text) {
10
+ console.log(text);
11
+ }
12
+ /**
13
+ * Read and parse hook input from stdin.
14
+ * Returns null if parsing fails.
15
+ */
16
+ export async function readHookInput() {
17
+ let input = '';
18
+ for await (const chunk of process.stdin) {
19
+ input += chunk;
20
+ }
21
+ try {
22
+ return JSON.parse(input);
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Read hook input and check if session is enabled.
30
+ * Returns session_id if enabled, null otherwise.
31
+ * Use this as the standard guard at the start of most hooks.
32
+ */
33
+ export async function getEnabledSessionId() {
34
+ const input = await readHookInput();
35
+ const sessionId = input?.session_id;
36
+ if (!sessionId || !isSessionEnabled(sessionId)) {
37
+ return null;
38
+ }
39
+ return sessionId;
40
+ }
41
+ /**
42
+ * Read hook input and return full context for hooks that need more data.
43
+ * Returns null if session not enabled.
44
+ */
45
+ export async function getEnabledHookContext() {
46
+ const input = await readHookInput();
47
+ const sessionId = input?.session_id;
48
+ if (!sessionId || !isSessionEnabled(sessionId)) {
49
+ return null;
50
+ }
51
+ return { sessionId, input };
52
+ }
53
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/commands/hooks/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAWD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,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,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAc,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACrC,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,EAAE,UAAU,CAAC;IAEpC,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAIvC,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,EAAE,UAAU,CAAC;IAEpC,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { printBlock, getEnabledHookContext } from './output.js';
2
+ import { shouldShowPlanReminder } from '../utils/sessionCache.js';
3
+ /**
4
+ * Plan reminder hook handler
5
+ *
6
+ * This command is invoked on UserPromptSubmit, SubagentStop, and PostToolUse.
7
+ * It checks if in plan mode and shows the Ranger reminder (max once per 5 mins per session).
8
+ */
9
+ export async function planReminder() {
10
+ const ctx = await getEnabledHookContext();
11
+ if (!ctx) {
12
+ return;
13
+ }
14
+ // Only show in plan mode
15
+ if (ctx.input.permission_mode !== 'plan') {
16
+ return;
17
+ }
18
+ // Check if we should show the reminder (rate limited per session)
19
+ if (!shouldShowPlanReminder(ctx.sessionId)) {
20
+ return;
21
+ }
22
+ printBlock(`=== RANGER: ACTION REQUIRED ===
23
+
24
+ If this plan involves ANY UI changes, you MUST:
25
+
26
+ 1. **READ /ranger skill NOW** - specifically the create.md instructions
27
+ 2. **Add a Ranger Feature Specification** to the end of your plan
28
+
29
+ DO NOT write checklist items without reading create.md first.
30
+ Checklist items are E2E test scenarios, NOT implementation tasks.
31
+
32
+ Your plan must end with:
33
+ \`\`\`
34
+ ### Ranger Feature Specification (create this first with \`ranger feature create\`)
35
+ Feature Name: <name>
36
+ Description: <description>
37
+ Checklist:
38
+ 1. <E2E user flow that can be verified in browser>
39
+ 2. <another E2E user flow if needed>
40
+ \`\`\`
41
+
42
+ Then run: \`ranger feature create "<name>" -d "<desc>" -c "<item1>" -c "<item2>"\`
43
+
44
+ === END ===`);
45
+ }
46
+ //# sourceMappingURL=planReminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planReminder.js","sourceRoot":"","sources":["../../../src/commands/hooks/planReminder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,MAAM,GAAG,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO;IACX,CAAC;IAED,yBAAyB;IACzB,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO;IACX,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO;IACX,CAAC;IAED,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;YAsBH,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { printBlock, getEnabledSessionId } from './output.js';
2
+ /**
3
+ * SubagentStart hook handler for Plan mode
4
+ *
5
+ * This command is invoked when Claude enters plan mode (Plan subagent starts).
6
+ * It reminds Claude to include Ranger checklist items as part of the planning process.
7
+ */
8
+ export async function planStart() {
9
+ const sessionId = await getEnabledSessionId();
10
+ if (!sessionId) {
11
+ return;
12
+ }
13
+ printBlock(`=== RANGER: ACTION REQUIRED ===
14
+
15
+ If this plan involves UI changes, you MUST:
16
+
17
+ 1. **READ /ranger skill** - specifically create.md
18
+ 2. **Add a Ranger Feature Specification** at the end of your plan
19
+
20
+ Checklist items are E2E test scenarios, NOT implementation tasks.
21
+
22
+ **Good:** "User can log in with valid credentials and see dashboard"
23
+ **Bad:** "Add form validation" or "Button is visible"
24
+
25
+ After planning, run:
26
+ \`ranger feature create "<name>" -d "<desc>" -c "<E2E flow 1>" -c "<E2E flow 2>"\`
27
+
28
+ === END ===`);
29
+ }
30
+ //# sourceMappingURL=planStart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planStart.js","sourceRoot":"","sources":["../../../src/commands/hooks/planStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;IACX,CAAC;IAED,UAAU,CAAC;;;;;;;;;;;;;;;YAeH,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { getSessionEntry } 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
+ const token = await getToken();
16
+ if (!token) {
17
+ return;
18
+ }
19
+ // Check if this session is already registered
20
+ const existingEntry = getSessionEntry(sessionId);
21
+ if (existingEntry) {
22
+ // Already registered - remind about adding checklist items if scope expanded
23
+ const response = {
24
+ hookSpecificOutput: {
25
+ hookEventName: 'PostToolUse',
26
+ 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.`,
27
+ },
28
+ };
29
+ console.log(JSON.stringify(response));
30
+ return;
31
+ }
32
+ // Not registered - prompt to use /ranger for UI work
33
+ const response = {
34
+ hookSpecificOutput: {
35
+ hookEventName: 'PostToolUse',
36
+ additionalContext: `RANGER: If this is for a UI feature, you MUST use /ranger to either create a new feature or resume an existing one.`,
37
+ },
38
+ };
39
+ console.log(JSON.stringify(response));
40
+ }
41
+ //# sourceMappingURL=postEdit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postEdit.js","sourceRoot":"","sources":["../../../src/commands/hooks/postEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,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,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,35 @@
1
+ import { appendFile } from 'fs/promises';
2
+ /**
3
+ * SessionStart hook handler for Claude Code plugin
4
+ *
5
+ * This command is invoked automatically when a new Claude Code session starts.
6
+ * Exports CLAUDE_SESSION_ID to the environment for use by other hooks.
7
+ *
8
+ * Note: The skill prompt is now shown by the enable hook when user runs /enable.
9
+ */
10
+ export async function sessionStart() {
11
+ // Read JSON input from stdin to get session_id
12
+ let input = '';
13
+ for await (const chunk of process.stdin) {
14
+ input += chunk;
15
+ }
16
+ let sessionId = '';
17
+ try {
18
+ const data = JSON.parse(input);
19
+ sessionId = data['session_id'] || '';
20
+ }
21
+ catch {
22
+ // Ignore parse errors
23
+ }
24
+ // Export CLAUDE_SESSION_ID to env file if available
25
+ const envFile = process.env.CLAUDE_ENV_FILE;
26
+ if (envFile && sessionId) {
27
+ try {
28
+ await appendFile(envFile, `export CLAUDE_SESSION_ID="${sessionId}"\n`);
29
+ }
30
+ catch {
31
+ // Ignore errors writing to env file
32
+ }
33
+ }
34
+ }
35
+ //# 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;AAEzC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,+CAA+C;IAC/C,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,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACzC,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;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"}
@@ -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 { sessionStartHook } from './sessionStartHook.js';
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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
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, loadClaudeSettings, saveClaudeSettings, hasRangerServerInSettings, setRangerServerInSettings, } from './utils/claudeConfig.js';
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
- const { installLevel } = await inquirer.prompt([
54
- {
55
- type: 'list',
56
- name: 'installLevel',
57
- message: 'Where should skills be installed?',
58
- choices: [
59
- {
60
- name: `All projects (${getClaudeConfigDir()}/skills/)`,
61
- value: 'user',
62
- },
63
- {
64
- name: `This project only (${projectName}/.claude/skills/)`,
65
- value: 'project',
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
- try {
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 installed = await installSkill('bug-bash', {
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 feature-tracker skill:', error instanceof Error ? error.message : error);
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⚠️ Bug Bash and Feature Tracker skills not installed (requires active environment)\n');
115
- console.log('To install Bug Bash and Feature Tracker skills:');
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) {
@@ -135,29 +120,11 @@ export async function skillup() {
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
122
  console.log('To use skills:');
138
- console.log(` - Try something like '/bug-bash test the new feature on this branch'`);
139
- console.log(' - Or ask your agent to use Ranger to look for bugs on the feature you just built\n');
123
+ console.log(` - Use '/ranger' to track and verify feature implementations`);
124
+ console.log(' - Or ask your agent to use Ranger to verify features in the browser\n');
140
125
  }
141
126
  else {
142
127
  console.log('\n⚠️ No skills were installed.\n');
143
128
  }
144
129
  }
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
130
  //# sourceMappingURL=skillup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skillup.js","sourceRoot":"","sources":["../../src/commands/skillup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillup.js","sourceRoot":"","sources":["../../src/commands/skillup.ts"],"names":[],"mappings":"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"}
@@ -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(_0x5e7639,_0x343e5c){const _0x336192=_0x3807,_0x21d7d2=_0x5e7639();while(!![]){try{const _0x3ccf67=parseInt(_0x336192(0x13f))/0x1+parseInt(_0x336192(0x13c))/0x2*(parseInt(_0x336192(0x136))/0x3)+parseInt(_0x336192(0x121))/0x4+parseInt(_0x336192(0xf3))/0x5*(parseInt(_0x336192(0xf0))/0x6)+-parseInt(_0x336192(0x12c))/0x7+parseInt(_0x336192(0xfd))/0x8+-parseInt(_0x336192(0x11b))/0x9;if(_0x3ccf67===_0x343e5c)break;else _0x21d7d2['push'](_0x21d7d2['shift']());}catch(_0x276c30){_0x21d7d2['push'](_0x21d7d2['shift']());}}}(_0x8cf4,0xefebf));import{mkdir,writeFile}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{createRequire}from'module';import{spawn}from'child_process';import _0x22cc75 from'inquirer';import{storeToken}from'./utils/keychain.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';import{runClaudeCommand,isMarketplaceAdded,isPluginInstalled}from'./utils/claudePlugin.js';function _0x3807(_0x16aeb0,_0x1b6a2a){_0x16aeb0=_0x16aeb0-0xf0;const _0x8cf49a=_0x8cf4();let _0x3807e4=_0x8cf49a[_0x16aeb0];return _0x3807e4;}const require=createRequire(import.meta.url);function _0x8cf4(){const _0x43f117=['Do\x20you\x20want\x20to\x20add\x20an\x20environment\x20now?','wantsSkillup','1093905tPfyuD','cWAsW','✓\x20.ranger/\x20directory\x20already\x20exists','OcPZD','success','✓\x20Created\x20.ranger/\x20directory','KUNrI','\x0aInstalling\x20Chromium\x20browser...\x0a','6QlEHuX','sOrhf','ASxCi','2966325OKFQms','JgkGo','confirm','log','ranger-testing/trailhead','prompt','Installation\x20failed\x20with\x20exit\x20code\x20','\x0a❌\x20Failed\x20to\x20connect\x20to\x20MCP\x20server:\x20','✓\x20Stored\x20credentials\x20in\x20OS\x20Keychain','\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead','14355640ZBlOkF','wantsPlugin','EgLFe','\x0a⚠\x20Skipping\x20Chromium\x20installation.','xdoiu','\x20\x20npx\x20playwright\x20install\x20chromium','Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.','input','error','ranger@trailhead','uxNuG','SCnrw','inherit','user','TfpCC','iNyIF','playwright','Validating\x20API\x20token...','xtbgO','\x0a✅\x20Ranger\x20setup\x20complete!\x0a','project','Required\x20Playwright\x20Chromium\x20browser\x20is\x20missing.\x20Install\x20it\x20now?','.gitignore','\x0aInstalling\x20Claude\x20Code\x20plugin...\x0a','env','IqJPx','add','\x0a❌\x20Authentication\x20failed:\x20','lIrdg','You\x20will\x20need\x20to\x20install\x20it\x20before\x20using\x20Ranger:','19084023HgpFmE','ZeIAh','local','trailhead','\x0aNext\x20steps:','install','1696264SjTbQR','User\x20(available\x20in\x20all\x20your\x20projects)','stdin','Non-interactive\x20mode\x20detected.\x20Skipping\x20optional\x20setup\x20prompts.','sCiDF','\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20','status','executablePath','RaaUQ','kvOBN','\x20\x20\x20\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x0a','13127947tTEDzM','ZaROf','\x0a🚀\x20Ranger\x20Setup\x0a','ufqcv','\x0aNon-interactive\x20mode:\x20Auto-installing\x20Playwright\x20Chromium...','Where\x20should\x20the\x20plugin\x20be\x20installed?','jHFhg','IMfIf','✓\x20Exported\x20credentials\x20for\x20CI','✓\x20Playwright\x20Chromium\x20browser\x20found','396JadsnW','What\x20should\x20the\x20environment\x20be\x20named?','\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x0a','playwright@','message','cIipn','16256AcEyJy'];_0x8cf4=function(){return _0x43f117;};return _0x8cf4();}function getPlaywrightVersion(){const _0x3a5c61=_0x3807,_0x5dfa83={'xdoiu':'playwright/package.json'};try{const _0x4aa5d1=require['resolve'](_0x5dfa83[_0x3a5c61(0x101)]),_0xbeeaf=require(_0x4aa5d1);return _0xbeeaf['version'];}catch{return null;}}function installChromium(_0xa5ece8){const _0x22c999=_0x3807,_0x16b947={'RaaUQ':function(_0xa72388){return _0xa72388();},'kvOBN':function(_0x22cf9f,_0x5738db){return _0x22cf9f(_0x5738db);},'JgkGo':_0x22c999(0x120),'IqJPx':'chromium','iHbdd':function(_0x518134,_0x3c781b,_0x6ae159,_0x41a6f6){return _0x518134(_0x3c781b,_0x6ae159,_0x41a6f6);},'oOryB':'close'};return new Promise((_0x248e5c,_0x101c13)=>{const _0x1b1df4=_0x22c999,_0x4e83fb=_0xa5ece8?[_0x1b1df4(0x139)+_0xa5ece8,'install','chromium']:[_0x1b1df4(0x10d),_0x16b947[_0x1b1df4(0xf4)],_0x16b947[_0x1b1df4(0x116)]],_0x4d5ef3=_0x16b947['iHbdd'](spawn,'npx',_0x4e83fb,{'stdio':_0x1b1df4(0x109),'shell':!![]});_0x4d5ef3['on'](_0x16b947['oOryB'],_0x527344=>{const _0x396cf2=_0x1b1df4;_0x527344===0x0?_0x16b947[_0x396cf2(0x129)](_0x248e5c):_0x101c13(new Error(_0x396cf2(0xf9)+_0x527344));}),_0x4d5ef3['on']('error',_0x5c4595=>{const _0x75a70=_0x1b1df4;_0x16b947[_0x75a70(0x12a)](_0x101c13,_0x5c4595);});});}export async function start(_0x3fb7f5){const _0xb68ce8=_0x3807,_0x2f7e12={'IsmBI':_0xb68ce8(0x12e),'SCnrw':function(_0x2998f5,_0x23abee){return _0x2998f5(_0x23abee);},'TfpCC':_0xb68ce8(0xfb),'aGvij':function(_0x1acc0a,_0x471fd2,_0xa2a0e1){return _0x1acc0a(_0x471fd2,_0xa2a0e1);},'pFGUq':_0xb68ce8(0x144),'wqROp':_0xb68ce8(0x141),'VpUsx':function(_0x40c221,_0x44a11d){return _0x40c221(_0x44a11d);},'sOrhf':function(_0x291747){return _0x291747();},'uHsAk':'confirm','ldhaN':'install','PwNYi':_0xb68ce8(0x130),'ASxCi':_0xb68ce8(0x146),'doZWp':'\x0a✓\x20Playwright\x20Chromium\x20installed\x20successfully','ZGiRE':'\x0a❌\x20Failed\x20to\x20install\x20Chromium:','nWTTM':function(_0x5dec8a,_0x26b816){return _0x5dec8a instanceof _0x26b816;},'cWAsW':'\x20\x20npx\x20playwright\x20install\x20chromium','RaaEU':_0xb68ce8(0x11a),'gKaHL':function(_0x67bee0,_0x1f4378,_0x66266a){return _0x67bee0(_0x1f4378,_0x66266a);},'sCiDF':function(_0x3ed6b3,_0x40ff30,_0x4708e3){return _0x3ed6b3(_0x40ff30,_0x4708e3);},'wvNvm':_0xb68ce8(0x110),'cxivA':_0xb68ce8(0x11f),'ZnNFU':'\x20\x203.\x20Run:\x20ranger\x20skillup','ynITh':'\x20\x204.\x20Install\x20Claude\x20Code\x20plugin:','ZaROf':'\x20\x20\x20\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead','ZeIAh':'📦\x20Claude\x20Code\x20Plugin\x0a','OcPZD':_0xb68ce8(0xfe),'ufqcv':'Do\x20you\x20want\x20to\x20install\x20the\x20Ranger\x20plugin\x20for\x20Claude\x20Code?\x20(recommended)','lIrdg':'list','LbHKs':_0xb68ce8(0x131),'IMfIf':'user','EgLFe':_0xb68ce8(0x111),'PtRfj':_0xb68ce8(0x11e),'cIipn':'marketplace','xtbgO':_0xb68ce8(0x117),'BJaYJ':'\x0aYou\x20can\x20install\x20manually\x20with:','DTjOK':_0xb68ce8(0xfc),'pbtIM':_0xb68ce8(0x106),'wxbvU':'--scope','jHFhg':'❌\x20Failed\x20to\x20install\x20plugin:','iNyIF':'\x0aTo\x20install\x20the\x20plugin\x20later,\x20run:','uxNuG':'\x20\x20\x20If\x20you\x27re\x20not\x20in\x20your\x20project\x20directory,\x20exit\x20now\x20and\x20run\x20`ranger\x20add\x20env\x20<env-name>`\x20from\x20there.\x0a','qBvQu':'wantsEnv','KUNrI':_0xb68ce8(0x104),'tZoZh':'Would\x20you\x20like\x20to\x20install\x20skills?'};console['log'](_0x2f7e12['IsmBI']),console[_0xb68ce8(0xf6)](_0xb68ce8(0x10e));const _0xd35cfc=await _0x2f7e12['SCnrw'](getCurrentUser,_0x3fb7f5);!_0xd35cfc[_0xb68ce8(0x143)]&&(_0xd35cfc[_0xb68ce8(0x127)]?(console[_0xb68ce8(0x105)](_0xb68ce8(0x118)+_0xd35cfc['error']),console['error'](_0xb68ce8(0x103))):(console['error'](_0xb68ce8(0xfa)+_0xd35cfc[_0xb68ce8(0x105)]),console['error']('Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.')),process['exit'](0x1));console[_0xb68ce8(0xf6)]('✓\x20Authenticated\x20to\x20'+_0xd35cfc[_0xb68ce8(0x10a)]['organizationName']),await storeToken(_0x3fb7f5),console[_0xb68ce8(0xf6)](process[_0xb68ce8(0x115)]['GITHUB_ENV']?_0xb68ce8(0x134):_0x2f7e12[_0xb68ce8(0x10b)]);const _0x5728d2=getRangerDir();!existsSync(_0x5728d2)?(await _0x2f7e12['aGvij'](mkdir,_0x5728d2,{'recursive':!![]}),console[_0xb68ce8(0xf6)](_0x2f7e12['pFGUq'])):console[_0xb68ce8(0xf6)](_0x2f7e12['wqROp']);let _0x1326b2=![];try{const _0x246658=chromium[_0xb68ce8(0x128)]();_0x1326b2=_0x2f7e12['VpUsx'](existsSync,_0x246658);}catch{_0x1326b2=![];}if(_0x1326b2)console[_0xb68ce8(0xf6)](_0xb68ce8(0x135));else{const _0x3a67ca=_0x2f7e12['sOrhf'](getPlaywrightVersion),_0x50ebef=process['stdin']['isTTY']&&process['stdout']['isTTY'];let _0x1b7552=!![];if(_0x50ebef){const {install:_0x184b70}=await _0x22cc75[_0xb68ce8(0xf8)]([{'type':_0x2f7e12['uHsAk'],'name':_0x2f7e12['ldhaN'],'message':_0xb68ce8(0x112),'default':!![]}]);_0x1b7552=_0x184b70;}else console[_0xb68ce8(0xf6)](_0x2f7e12['PwNYi']);if(_0x1b7552){console['log'](_0x2f7e12[_0xb68ce8(0xf2)]);try{await installChromium(_0x3a67ca),console[_0xb68ce8(0xf6)](_0x2f7e12['doZWp']);}catch(_0x392b2b){console[_0xb68ce8(0x105)](_0x2f7e12['ZGiRE'],_0x2f7e12['nWTTM'](_0x392b2b,Error)?_0x392b2b[_0xb68ce8(0x13a)]:_0x392b2b),console['log']('You\x20can\x20install\x20it\x20manually\x20by\x20running:'),_0x3a67ca?console[_0xb68ce8(0xf6)]('\x20\x20npx\x20playwright@'+_0x3a67ca+'\x20install\x20chromium'):console['log'](_0x2f7e12[_0xb68ce8(0x140)]);}}else console[_0xb68ce8(0xf6)](_0xb68ce8(0x100)),console[_0xb68ce8(0xf6)](_0x2f7e12['RaaEU']),_0x3a67ca?console[_0xb68ce8(0xf6)]('\x20\x20npx\x20playwright@'+_0x3a67ca+'\x20install\x20chromium'):console['log'](_0xb68ce8(0x102));}const _0x3fba6f=_0x2f7e12['gKaHL'](join,_0x5728d2,_0xb68ce8(0x113)),_0x306814='\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 _0x2f7e12[_0xb68ce8(0x125)](writeFile,_0x3fba6f,_0x306814),console[_0xb68ce8(0xf6)]('✓\x20Created\x20.ranger/.gitignore'),console[_0xb68ce8(0xf6)](_0x2f7e12['wvNvm']);const _0x474b23=process[_0xb68ce8(0x123)]['isTTY']&&process['stdout']['isTTY'];if(!_0x474b23){console[_0xb68ce8(0xf6)](_0xb68ce8(0x124)),console['log'](_0x2f7e12['cxivA']),console[_0xb68ce8(0xf6)]('\x20\x201.\x20Navigate\x20to\x20your\x20project\x20directory'),console[_0xb68ce8(0xf6)]('\x20\x202.\x20Run:\x20ranger\x20add\x20env\x20local'),console['log'](_0x2f7e12['ZnNFU']),console['log'](_0x2f7e12['ynITh']),console['log'](_0x2f7e12[_0xb68ce8(0x12d)]),console[_0xb68ce8(0xf6)](_0xb68ce8(0x12b));return;}console['log'](_0x2f7e12[_0xb68ce8(0x11c)]);const {wantsPlugin:_0xe4a7a5}=await _0x22cc75['prompt']([{'type':_0xb68ce8(0xf5),'name':_0x2f7e12[_0xb68ce8(0x142)],'message':_0x2f7e12[_0xb68ce8(0x12f)],'default':!![]}]);if(_0xe4a7a5){const _0xa9713a=await isPluginInstalled('ranger@trailhead');if(_0xa9713a)console['log']('✓\x20Claude\x20Code\x20plugin\x20already\x20installed\x0a');else{const {pluginScope:_0x543009}=await _0x22cc75[_0xb68ce8(0xf8)]([{'type':_0x2f7e12[_0xb68ce8(0x119)],'name':'pluginScope','message':_0x2f7e12['LbHKs'],'choices':[{'name':_0xb68ce8(0x122),'value':_0x2f7e12[_0xb68ce8(0x133)]},{'name':'Project\x20(shared\x20with\x20team\x20via\x20git)','value':_0x2f7e12[_0xb68ce8(0xff)]}],'default':_0x2f7e12['IMfIf']}]);console[_0xb68ce8(0xf6)](_0xb68ce8(0x114));const _0x38f3c3=await isMarketplaceAdded(_0x2f7e12['PtRfj']);let _0x508e96=_0x38f3c3;if(_0x38f3c3)console['log']('✓\x20Marketplace\x20already\x20added');else{const _0x5d6676=await runClaudeCommand(['plugin',_0x2f7e12[_0xb68ce8(0x13b)],_0x2f7e12[_0xb68ce8(0x10f)],_0xb68ce8(0xf7)]);!_0x5d6676[_0xb68ce8(0x143)]?(console[_0xb68ce8(0x105)]('❌\x20Failed\x20to\x20add\x20marketplace:',_0x5d6676[_0xb68ce8(0x105)]),console['log'](_0x2f7e12['BJaYJ']),console['log'](_0x2f7e12['DTjOK']),console[_0xb68ce8(0xf6)]('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0x543009)):_0x508e96=!![];}if(_0x508e96){const _0xaab117=await _0x2f7e12[_0xb68ce8(0x108)](runClaudeCommand,['plugin',_0x2f7e12['ldhaN'],_0x2f7e12['pbtIM'],_0x2f7e12['wxbvU'],_0x543009]);!_0xaab117[_0xb68ce8(0x143)]?(console['error'](_0x2f7e12[_0xb68ce8(0x132)],_0xaab117[_0xb68ce8(0x105)]),console[_0xb68ce8(0xf6)](_0x2f7e12['BJaYJ']),console['log'](_0xb68ce8(0x126)+_0x543009)):console[_0xb68ce8(0xf6)]('✓\x20Claude\x20Code\x20plugin\x20installed\x20successfully\x0a');}}}else console[_0xb68ce8(0xf6)](_0x2f7e12[_0xb68ce8(0x10c)]),console[_0xb68ce8(0xf6)]('\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead'),console[_0xb68ce8(0xf6)](_0xb68ce8(0x138));console[_0xb68ce8(0xf6)]('ℹ️\x20\x20To\x20add\x20an\x20environment,\x20you\x20should\x20be\x20in\x20your\x20project\x20repository.'),console['log'](_0x2f7e12[_0xb68ce8(0x107)]);const {wantsEnv:_0x1d8b10}=await _0x22cc75['prompt']([{'type':_0xb68ce8(0xf5),'name':_0x2f7e12['qBvQu'],'message':_0xb68ce8(0x13d),'default':!![]}]);if(_0x1d8b10){const {envName:_0x40d843}=await _0x22cc75['prompt']([{'type':_0x2f7e12[_0xb68ce8(0x145)],'name':'envName','message':_0xb68ce8(0x137),'default':_0xb68ce8(0x11d)}]);await addEnv(_0x40d843);}const {wantsSkillup:_0x5c1b2e}=await _0x22cc75['prompt']([{'type':_0x2f7e12['uHsAk'],'name':_0xb68ce8(0x13e),'message':_0x2f7e12['tZoZh'],'default':!![]}]);_0x5c1b2e&&await _0x2f7e12[_0xb68ce8(0xf1)](skillup);}
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}