shellbase 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,6 +5,9 @@
5
5
 
6
6
  ## 설치
7
7
 
8
+ **Node.js 22 이상이 필요해요** (실시간 접속 기능이 Node 의 최신 WebSocket 기능을 써요 — 20 이하면
9
+ `shellbase start` 가 바로 에러 메시지를 보여주고 멈춰요). `node --version` 으로 확인해보세요.
10
+
8
11
  ```bash
9
12
  npm install -g shellbase
10
13
  ```
package/dist/auth.js CHANGED
@@ -54,6 +54,8 @@ export async function whoami() {
54
54
  const { cb, memberId } = await requireClient();
55
55
  const me = await cb.auth.getMe();
56
56
  console.log(`${me.nickname}${me.email ? ` <${me.email}>` : ''} (member_id: ${memberId})`);
57
+ const autoApprove = me.custom_data?.auto_approve === true;
58
+ console.log(`계정 자동 승인 설정: ${autoApprove ? '켜짐 (웹에서 껐다켤 수 있어요)' : '꺼짐'}`);
57
59
  }
58
60
  export async function requireClient() {
59
61
  const creds = loadCredentials();
package/dist/cli.js CHANGED
@@ -2,6 +2,15 @@
2
2
  import { Command } from 'commander';
3
3
  import { login, logout, whoami } from './auth.js';
4
4
  import { startSession } from './session.js';
5
+ // 실시간 기능(realtime.subscribe)이 Node 의 네이티브 WebSocket(Node 22+)에 의존해서,
6
+ // Node 20 에서는 조용히 SSE 모드로 떨어져 "네트워크가 막혔다"는 헷갈리는 에러만 남기고 죽는다.
7
+ // 미리 버전을 확인해서 원인을 바로 알려준다.
8
+ const [major] = process.versions.node.split('.').map(Number);
9
+ if (major < 22) {
10
+ console.error(`Node.js ${process.versions.node} 는 지원하지 않아요 — 실시간 접속 기능은 Node 22 이상이 필요해요.\n` +
11
+ 'https://nodejs.org 에서 최신 버전을 설치하거나, nvm 을 쓰신다면 `nvm install 22 && nvm use 22` 후 다시 시도해주세요.');
12
+ process.exit(1);
13
+ }
5
14
  const program = new Command();
6
15
  program.name('shellbase').description('내 컴퓨터 터미널을 폰에서 접속할 수 있게 해주는 에이전트');
7
16
  program
package/dist/session.js CHANGED
@@ -32,9 +32,14 @@ export async function startSession(options) {
32
32
  deviceName,
33
33
  frameKey: generateFrameKey(),
34
34
  };
35
+ // 계정 설정(웹의 "새 세션 자동 승인" 토글, custom_data.auto_approve)이 켜져 있으면
36
+ // --auto-approve 를 안 줘도 자동 승인. 계정 단위라 이 계정으로 로그인한 모든 컴퓨터에 적용됨.
37
+ const me = await cb.auth.getMe();
38
+ const accountAutoApprove = me.custom_data?.auto_approve === true;
39
+ const autoApprove = options.autoApprove === true || accountAutoApprove;
35
40
  console.log(`"${deviceName}" 세션을 시작해요 (작업 폴더: ${cwd})`);
36
- if (options.autoApprove) {
37
- console.log('⚠️ --auto-approve 켜짐 — 접속 요청을 묻지 않고 자동 승인해요. 내 계정에 들어올 수 있는 사람은 누구나 곧바로 입력할 수 있어요.');
41
+ if (autoApprove) {
42
+ console.log(`⚠️ 자동 승인이 켜져 있어요${accountAutoApprove ? ' (계정 설정)' : ' (--auto-approve)'} — 접속 요청을 묻지 않고 자동 승인해요. 내 계정에 들어올 수 있는 사람은 누구나 곧바로 입력할 수 있어요.`);
38
43
  }
39
44
  const deviceRowId = await registerDevice(cb, {
40
45
  ownerId: memberId,
@@ -104,7 +109,7 @@ export async function startSession(options) {
104
109
  if (approvalInFlight)
105
110
  return;
106
111
  approvalInFlight = true;
107
- const approval = options.autoApprove
112
+ const approval = autoApprove
108
113
  ? Promise.resolve(true)
109
114
  : promptApproval('\n📱 모바일에서 접속을 요청했어요. 입력을 허용할까요? (y/N, 30초 내 미응답 시 자동 거부): ', APPROVAL_TIMEOUT_MS);
110
115
  approval
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shellbase",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "내 컴퓨터 터미널(특히 Claude Code 세션)을 폰 브라우저로 실시간 접속하게 해주는 데스크톱 에이전트",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "dist"
11
11
  ],
12
12
  "engines": {
13
- "node": ">=20"
13
+ "node": ">=22"
14
14
  },
15
15
  "license": "MIT",
16
16
  "keywords": [