shellbase 0.1.0 → 0.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 CHANGED
@@ -33,7 +33,10 @@ shellbase start --dir ~/projects/my-app --name "내 노트북"
33
33
  | `shellbase login` | 구글 계정으로 로그인 |
34
34
  | `shellbase logout` | 로그아웃 |
35
35
  | `shellbase whoami` | 현재 로그인된 계정 확인 |
36
- | `shellbase start [--dir <path>] [--name <name>]` | 터미널 세션 시작 |
36
+ | `shellbase start [--dir <path>] [--name <name>] [--auto-approve]` | 터미널 세션 시작 |
37
+
38
+ `--auto-approve` 를 쓰면 폰에서 접속할 때마다 물어보지 않고 바로 승인해요. 편하지만, 내 계정에
39
+ 로그인할 수 있는 사람은 누구나 바로 입력할 수 있게 되니 신뢰할 수 있는 환경에서만 쓰세요.
37
40
 
38
41
  ## 참고
39
42
 
package/dist/cli.js CHANGED
@@ -27,6 +27,7 @@ program
27
27
  .description('이 컴퓨터의 터미널을 열어서 폰 접속을 받을 수 있게 시작')
28
28
  .option('--dir <path>', '이 폴더에서 터미널을 시작해요 (기본: 현재 폴더)')
29
29
  .option('--name <name>', '폰에서 보여줄 이 기기의 이름 (기본: 컴퓨터 이름)')
30
+ .option('--auto-approve', '폰에서 접속할 때마다 묻지 않고 자동으로 승인해요 (편하지만, 내 계정에 접속하는 누구나 곧바로 입력할 수 있게 되니 주의)')
30
31
  .action(async (opts) => {
31
32
  await startSession(opts);
32
33
  });
@@ -13,10 +13,11 @@ function load() {
13
13
  }
14
14
  }
15
15
  // 지금 시작한 폴더를 맨 앞으로 올리고, 홈 디렉터리는 항상 후보에 포함시킴 (모바일 폴더 선택용)
16
+ // cwd가 홈 폴더 그 자체인 경우도 있어서(Set으로) 중복은 항상 걸러냄
16
17
  export function touchRecentDir(cwd) {
17
18
  const home = os.homedir();
18
- const existing = load().filter((dir) => dir !== cwd && dir !== home);
19
- const updated = [cwd, home, ...existing].slice(0, MAX_ENTRIES);
19
+ const existing = load();
20
+ const updated = [...new Set([cwd, home, ...existing])].slice(0, MAX_ENTRIES);
20
21
  fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
21
22
  fs.writeFileSync(RECENT_DIRS_PATH, JSON.stringify(updated, null, 2), { mode: 0o600 });
22
23
  return updated;
package/dist/session.js CHANGED
@@ -21,6 +21,9 @@ export async function startSession(options) {
21
21
  const deviceName = options.name ?? device.deviceName;
22
22
  const cwd = options.dir ? path.resolve(options.dir) : process.cwd();
23
23
  console.log(`"${deviceName}" 세션을 시작해요 (작업 폴더: ${cwd})`);
24
+ if (options.autoApprove) {
25
+ console.log('⚠️ --auto-approve 켜짐 — 접속 요청을 묻지 않고 자동 승인해요. 내 계정에 들어올 수 있는 사람은 누구나 곧바로 입력할 수 있어요.');
26
+ }
24
27
  const deviceRowId = await registerDevice(cb, {
25
28
  ownerId: memberId,
26
29
  deviceId: device.deviceId,
@@ -89,7 +92,10 @@ export async function startSession(options) {
89
92
  if (approvalInFlight)
90
93
  return;
91
94
  approvalInFlight = true;
92
- promptApproval('\n📱 모바일에서 접속을 요청했어요. 입력을 허용할까요? (y/N, 30초 내 미응답 시 자동 거부): ', APPROVAL_TIMEOUT_MS)
95
+ const approval = options.autoApprove
96
+ ? Promise.resolve(true)
97
+ : promptApproval('\n📱 모바일에서 접속을 요청했어요. 입력을 허용할까요? (y/N, 30초 내 미응답 시 자동 거부): ', APPROVAL_TIMEOUT_MS);
98
+ approval
93
99
  .then((approved) => {
94
100
  inputApproved = approved;
95
101
  approvalInFlight = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shellbase",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "내 컴퓨터 터미널(특히 Claude Code 세션)을 폰 브라우저로 실시간 접속하게 해주는 데스크톱 에이전트",
5
5
  "type": "module",
6
6
  "bin": {