shellbase 0.3.0 → 0.3.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/dist/agent.js +2 -5
- package/dist/devices.js +0 -3
- package/package.json +1 -1
- package/dist/host.js +0 -31
package/dist/agent.js
CHANGED
|
@@ -12,7 +12,6 @@ import { promptApproval } from './prompt.js';
|
|
|
12
12
|
import { touchRecentDir } from './recent-dirs.js';
|
|
13
13
|
import { listDirs } from './browse.js';
|
|
14
14
|
import { loadOpenSessions, saveOpenSessions } from './open-sessions.js';
|
|
15
|
-
import { loadOrCreateHostId } from './host.js';
|
|
16
15
|
const HEARTBEAT_MS = 20_000;
|
|
17
16
|
const APPROVAL_TIMEOUT_MS = 30_000;
|
|
18
17
|
const SCROLLBACK_MAX = 16_000;
|
|
@@ -71,9 +70,9 @@ export async function runAgent(options) {
|
|
|
71
70
|
const primaryCwd = options.dir ? path.resolve(options.dir) : process.cwd();
|
|
72
71
|
// 이름 앞부분(컴퓨터를 가리키는 부분) — 이 프로세스가 나중에 만드는 세션들이 물려받는다.
|
|
73
72
|
// 도커 안에서는 os.hostname() 이 컨테이너 ID라서, --name 을 준 경우 그걸 쓰는 게 알아보기 좋음.
|
|
73
|
+
// 폰 목록은 이 이름의 앞부분("컴퓨터 · 폴더" 의 앞쪽)을 기준으로 세션들을 한 컴퓨터로 묶는다.
|
|
74
|
+
// (devices 테이블에 host_id 같은 필드를 새로 넣으려면 테이블 스키마 변경이 필요해서, 지금은 이름 기준)
|
|
74
75
|
const hostLabel = options.name ?? os.hostname();
|
|
75
|
-
// 이 컴퓨터를 가리키는 고정 식별자 — 세션이 여러 개여도 폰에서 한 컴퓨터로 묶어서 보여주기 위함
|
|
76
|
-
const hostId = loadOrCreateHostId();
|
|
77
76
|
const shell = resolveShell();
|
|
78
77
|
const sessions = new Map();
|
|
79
78
|
function defaultName(cwd) {
|
|
@@ -199,8 +198,6 @@ export async function runAgent(options) {
|
|
|
199
198
|
ownerId: memberId,
|
|
200
199
|
deviceId: session.deviceId,
|
|
201
200
|
deviceName: session.name,
|
|
202
|
-
hostId,
|
|
203
|
-
hostName: hostLabel,
|
|
204
201
|
cwd,
|
|
205
202
|
frameKey: session.frameKey,
|
|
206
203
|
favoriteDirs: touchRecentDir(cwd),
|
package/dist/devices.js
CHANGED
|
@@ -7,9 +7,6 @@ export async function registerDevice(cb, params) {
|
|
|
7
7
|
owner_id: params.ownerId,
|
|
8
8
|
device_id: params.deviceId,
|
|
9
9
|
device_name: params.deviceName,
|
|
10
|
-
// 폰 목록에서 "컴퓨터 단위로 묶고 그 안에 세션"으로 보여주기 위한 정보 (host.ts 참고)
|
|
11
|
-
host_id: params.hostId,
|
|
12
|
-
host_name: params.hostName,
|
|
13
10
|
status: 'online',
|
|
14
11
|
cwd: params.cwd,
|
|
15
12
|
frame_key: params.frameKey,
|
package/package.json
CHANGED
package/dist/host.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import crypto from 'node:crypto';
|
|
5
|
-
import { CONFIG_DIR } from './config.js';
|
|
6
|
-
// 세션은 여러 개라도 "어느 컴퓨터의 세션인지" 폰에서 묶어 보여주려면 컴퓨터를 가리키는 고정 식별자가 필요하다.
|
|
7
|
-
// os.hostname() 은 도커 컨테이너 안에서 컨테이너 ID로 나오고 컨테이너를 다시 만들면 바뀌어서 쓸 수 없으므로,
|
|
8
|
-
// 홈 폴더(~/.shellbase)에 한 번 만들어 계속 재사용한다 — 홈을 마운트하는 도커 구성에서도 그대로 유지됨.
|
|
9
|
-
const HOST_PATH = path.join(CONFIG_DIR, 'host.json');
|
|
10
|
-
export function loadOrCreateHostId() {
|
|
11
|
-
try {
|
|
12
|
-
const parsed = JSON.parse(fs.readFileSync(HOST_PATH, 'utf8'));
|
|
13
|
-
if (parsed && typeof parsed.id === 'string' && parsed.id)
|
|
14
|
-
return parsed.id;
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// 없거나 깨졌으면 새로 만든다
|
|
18
|
-
}
|
|
19
|
-
const id = `host-${crypto.randomUUID()}`;
|
|
20
|
-
try {
|
|
21
|
-
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
22
|
-
fs.writeFileSync(HOST_PATH, JSON.stringify({ id, hostname: os.hostname() }, null, 2), {
|
|
23
|
-
mode: 0o600,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
// 저장에 실패해도 이번 실행에서는 이 값으로 동작 (다음 실행에 새로 발급될 뿐)
|
|
28
|
-
console.error('컴퓨터 식별자 저장 실패:', err.message);
|
|
29
|
-
}
|
|
30
|
-
return id;
|
|
31
|
-
}
|