xgen-dex-cli 1.2.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.
- package/README.md +175 -0
- package/dist/chunks/chunk-QXSCKZEG.js +4560 -0
- package/dist/chunks/chunk-QXSCKZEG.js.map +7 -0
- package/dist/chunks/tui-DMHUMWPG.js +1048 -0
- package/dist/chunks/tui-DMHUMWPG.js.map +7 -0
- package/dist/cli.js +1094 -0
- package/dist/cli.js.map +7 -0
- package/docs/CONNECTOR_FEATURE_MAP.md +300 -0
- package/docs/PROTOCOL.md +187 -0
- package/docs/TUI.md +46 -0
- package/docs/VSCODE.md +41 -0
- package/package.json +65 -0
package/README.md
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Dex CLI
|
|
2
|
+
|
|
3
|
+
XGEN Dex의 headless CLI이자 VS Code 확장이 사용할 로컬 엔진입니다. 인증·Agent·채팅·대화 기록에
|
|
4
|
+
필요한 transport를 자체 포함하며 Electron이나 React 앱 없이 독립적으로 개발·빌드·실행됩니다.
|
|
5
|
+
|
|
6
|
+
현재 구현된 범위:
|
|
7
|
+
|
|
8
|
+
- `dex` 또는 `dex ui`로 실행하는 대화형 터미널 UI
|
|
9
|
+
- 최초 서버 설정, 로그인, profile 전환을 포함한 온보딩
|
|
10
|
+
- Agent 사이드바, History, 스트리밍 채팅과 도구 활동 표시
|
|
11
|
+
- 명령 팔레트와 채팅 취소
|
|
12
|
+
- 여러 XGEN 서버 profile 관리
|
|
13
|
+
- OS keychain을 사용한 access/refresh token 저장
|
|
14
|
+
- 비밀번호 로그인, 세션 복원, 토큰 회전, 로그아웃
|
|
15
|
+
- Agent 목록과 검색
|
|
16
|
+
- SSE 채팅 스트리밍과 취소
|
|
17
|
+
- 대화 목록과 turn 조회
|
|
18
|
+
- 로컬 Shell·파일·검색·열기 도구와 XGEN MCP WebSocket bridge
|
|
19
|
+
- VS Code 같은 클라이언트를 위한 NDJSON JSON-RPC stdio server
|
|
20
|
+
|
|
21
|
+
## 개발
|
|
22
|
+
|
|
23
|
+
Node.js 20 이상이 필요합니다.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install
|
|
27
|
+
npm run verify
|
|
28
|
+
npm link
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`npm link` 이후 `dex`와 `xgen-dex` 명령을 사용할 수 있습니다. link 없이 실행하려면
|
|
32
|
+
`node dist/cli.js`를 사용합니다.
|
|
33
|
+
|
|
34
|
+
## 시작하기
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
dex profile set corp --server https://xgen.example.com
|
|
38
|
+
dex login --email me@corp.com
|
|
39
|
+
dex status
|
|
40
|
+
dex agents list
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
대화형 터미널에서는 인자 없이 실행하면 TUI가 열립니다.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
dex
|
|
47
|
+
# 또는
|
|
48
|
+
dex ui
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
주요 키:
|
|
52
|
+
|
|
53
|
+
- `Tab`: Agent 목록과 메시지 입력 사이 이동
|
|
54
|
+
- `Enter`: Agent 선택 또는 메시지 전송
|
|
55
|
+
- `Esc`: 실행 중인 채팅 취소
|
|
56
|
+
- `Ctrl+K`: 명령 팔레트
|
|
57
|
+
- `Ctrl+H`: 대화 기록
|
|
58
|
+
- `Ctrl+N`: 새 대화
|
|
59
|
+
- `Ctrl+P`: profile 전환
|
|
60
|
+
- `Ctrl+Q`: 종료
|
|
61
|
+
|
|
62
|
+
stdin/stdout이 TTY가 아니거나 `TERM=dumb`, CI 환경이면 자동으로 TUI를 열지 않습니다. 이때
|
|
63
|
+
기존 명령, `--json`, `--jsonl`, stdio RPC 출력에는 ANSI 제어 문자가 섞이지 않습니다. 자세한
|
|
64
|
+
화면 흐름은 [docs/TUI.md](docs/TUI.md)를 참고하세요.
|
|
65
|
+
|
|
66
|
+
비밀번호는 명령행 인자로 받지 않습니다. TTY에서는 숨김 prompt를 표시하고 자동화에서는
|
|
67
|
+
stdin으로 받습니다.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
printf '%s' "$XGEN_PASSWORD" | dex login --email me@corp.com --password-stdin
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
채팅 메시지도 프로세스 목록이나 shell history에 노출되지 않도록 stdin으로 보낼 수 있습니다.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
echo '이 프로젝트를 설명해줘' | dex chat --agent wf_abc
|
|
77
|
+
echo '이 프로젝트를 설명해줘' | dex chat --agent wf_abc --jsonl
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 로컬 도구
|
|
81
|
+
|
|
82
|
+
로컬 도구는 기본적으로 꺼져 있습니다. 작업 폴더와 허용 경로를 명시해 켜면 `dex chat`, TUI,
|
|
83
|
+
`dex serve --stdio`가 로그인 사용자의 XGEN 도구 bridge에 카탈로그를 광고합니다.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
dex tools enable --cwd . --allow . --block sudo
|
|
87
|
+
dex tools list
|
|
88
|
+
dex tools status
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
지원 도구는 `Shell`, `ReadFile`, `WriteFile`, `ListDir`, `Search`, `Open`입니다. 로컬 실행만 먼저
|
|
92
|
+
검증하려면 다음과 같이 호출할 수 있습니다.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
dex tools run ListDir --args '{"path":"."}'
|
|
96
|
+
dex tools run Shell --args '{"command":"npm test","timeoutMs":120000}'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
CLI 채팅이나 VS Code 엔진이 실행 중이면 bridge도 함께 유지됩니다. 다른 XGEN 클라이언트에서
|
|
100
|
+
Agent를 사용하면서 로컬 도구 host만 계속 실행하려면 아래 명령을 사용합니다.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
dex tools serve --profile corp
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
구조화된 파일 도구와 `Open`의 파일 경로는 `--allow` 범위로 제한됩니다. `Shell`은 로그인한 OS
|
|
107
|
+
사용자 권한으로 실행되므로 opt-in 기능이며, `--block`의 명령과 파괴적 명령 패턴은 거부됩니다.
|
|
108
|
+
파괴적 명령이 꼭 필요할 때만 `dex tools configure --allow-dangerous`를 명시적으로 실행하세요.
|
|
109
|
+
|
|
110
|
+
대화를 이어가려면 같은 interaction ID를 전달합니다.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
echo '계속 설명해줘' | dex chat \
|
|
114
|
+
--agent wf_abc \
|
|
115
|
+
--interaction 18a4be66-18bd-4e3b-b1d8-6b402bc79242
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## VS Code engine mode
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
dex serve --stdio
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
이 모드에서 stdout은 protocol frame 전용입니다. 로그는 stderr로만 출력됩니다. 각 frame은
|
|
125
|
+
한 줄의 JSON-RPC 2.0 객체입니다.
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}
|
|
129
|
+
{"jsonrpc":"2.0","id":2,"method":"agents/list","params":{}}
|
|
130
|
+
{"jsonrpc":"2.0","id":3,"method":"chat/start","params":{"workflowId":"wf_abc","input":"hello"}}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
채팅은 `chat/start` 결과로 `streamId`를 돌려준 뒤 `chat/event`, `chat/complete`,
|
|
134
|
+
`chat/error` notification으로 진행됩니다. 자세한 계약은 [docs/PROTOCOL.md](docs/PROTOCOL.md)를
|
|
135
|
+
참고하세요.
|
|
136
|
+
|
|
137
|
+
## VS Code 확장
|
|
138
|
+
|
|
139
|
+
`vscode-extension/`에 `dex serve --stdio`만을 엔진으로 사용하는 VS Code 확장이 포함되어
|
|
140
|
+
있습니다. 단일 Workspace Webview에서 Agent 선택·변경, 스트리밍 채팅, 취소, 대화 기록,
|
|
141
|
+
회사/환경 profile 및 로그인 설정 UI를 제공합니다.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npm run verify
|
|
145
|
+
npm run vscode:install
|
|
146
|
+
npm run vscode:verify
|
|
147
|
+
code vscode-extension
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
열린 VS Code 창에서 `F5`를 눌러 Extension Development Host를 실행할 수 있습니다. 자세한 구조와
|
|
151
|
+
보안 경계는 [docs/VSCODE.md](docs/VSCODE.md)를 참고하세요.
|
|
152
|
+
|
|
153
|
+
추가 기능을 개발할 때 필요한 Connector 참고 파일과 이관 순서는
|
|
154
|
+
[docs/CONNECTOR_FEATURE_MAP.md](docs/CONNECTOR_FEATURE_MAP.md)에 정리되어 있습니다.
|
|
155
|
+
|
|
156
|
+
## 데이터와 보안
|
|
157
|
+
|
|
158
|
+
- 일반 설정: 플랫폼별 사용자 config 디렉터리의 `xgen-dex-cli/config.json`
|
|
159
|
+
- 테스트/격리 override: `DEX_CLI_HOME`
|
|
160
|
+
- 토큰: `keytar`를 통한 Keychain, Credential Manager 또는 Secret Service
|
|
161
|
+
- 설정 파일 권한: `0600`
|
|
162
|
+
- profile의 서버 origin이 바뀌면 이전 origin의 저장 토큰은 삭제
|
|
163
|
+
- 비밀번호와 토큰은 stdout이나 config 파일에 기록하지 않음
|
|
164
|
+
- 로컬 도구는 기본 OFF이며 허용 경로·명령 차단·timeout을 config에 저장
|
|
165
|
+
|
|
166
|
+
Linux에서는 Secret Service와 실행 중인 keyring이 필요합니다. 사용할 수 없으면 CLI는 평문
|
|
167
|
+
파일로 조용히 fallback하지 않고 `credential_store_unavailable` 오류를 반환합니다.
|
|
168
|
+
|
|
169
|
+
## 소스 경계
|
|
170
|
+
|
|
171
|
+
`src/xgen/`은 CLI가 사용하는 최소 XGEN transport만 포함합니다. 로그인과 토큰 회전, Agent 목록,
|
|
172
|
+
SSE 채팅, 대화 기록 API가 여기에 있으며 Electron 앱이나 인접 저장소를 참조하지 않습니다.
|
|
173
|
+
따라서 `dex-cli` 디렉터리만 복제해 `npm install`, `npm run verify`를 실행할 수 있습니다. VS Code
|
|
174
|
+
확장까지 빌드할 때는 이어서 `npm run vscode:install`, `npm run vscode:verify`를 실행합니다.
|
|
175
|
+
# dex-cli
|