demian-cli 1.0.3
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 +374 -0
- package/architecture-tui.md +468 -0
- package/architecture.md +2773 -0
- package/bin/demian +12 -0
- package/bin/demian-cli.js +12 -0
- package/bin/demian-plain.js +12 -0
- package/bin/demian.js +12 -0
- package/dist/cli.mjs +30346 -0
- package/dist/index.mjs +28826 -0
- package/dist/tui.mjs +33873 -0
- package/dist/vscode-worker.mjs +32479 -0
- package/docs/ko/README.md +158 -0
- package/media/demian.svg +9 -0
- package/package.json +67 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Demian TUI
|
|
2
|
+
|
|
3
|
+
**Demian**은 로컬 터미널에서 사용하는 코딩 에이전트입니다. 프로젝트를
|
|
4
|
+
읽고, 질문에 답하고, 파일을 수정하고, 명령 실행 전 권한을 묻고, 긴 작업을
|
|
5
|
+
`/goal`로 관리하며, 필요하면 `/cowork`로 여러 하위 에이전트를 조율합니다.
|
|
6
|
+
|
|
7
|
+
[English documentation](../../README.md)
|
|
8
|
+
|
|
9
|
+
## 빠른 시작
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install -g demian-cli
|
|
13
|
+
cd ~/work/my-project
|
|
14
|
+
demian
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
TUI에서:
|
|
18
|
+
|
|
19
|
+
- `p`: provider 선택
|
|
20
|
+
- `m`: model 입력
|
|
21
|
+
- `a`: agent 선택
|
|
22
|
+
- `Enter`: 메시지 전송
|
|
23
|
+
- `y`: 권한 1회 허용
|
|
24
|
+
- `a`: 같은 범위 항상 허용
|
|
25
|
+
- `n` 또는 `Enter`: 거부
|
|
26
|
+
|
|
27
|
+
첫 질문 예시:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
이 저장소 구조를 요약하고 주요 진입점을 알려줘.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Provider 설정
|
|
34
|
+
|
|
35
|
+
Demian은 다음 순서로 설정을 읽습니다.
|
|
36
|
+
|
|
37
|
+
1. 기본값
|
|
38
|
+
2. `~/.demian/config.json`
|
|
39
|
+
3. `~/.demian/config.jsond`
|
|
40
|
+
4. 작업 디렉터리의 `.demian/config.json`
|
|
41
|
+
5. 작업 디렉터리의 `.demian/config.jsond`
|
|
42
|
+
6. `--config <path>`
|
|
43
|
+
7. `.demian/preferences.json`
|
|
44
|
+
8. CLI 플래그
|
|
45
|
+
|
|
46
|
+
예시:
|
|
47
|
+
|
|
48
|
+
```jsonc
|
|
49
|
+
{
|
|
50
|
+
"defaultProvider": "openai",
|
|
51
|
+
"providers": {
|
|
52
|
+
"openai": {
|
|
53
|
+
"type": "openai-compatible",
|
|
54
|
+
"baseURL": "https://api.openai.com/v1",
|
|
55
|
+
"apiKeyEnv": "OPENAI_API_KEY",
|
|
56
|
+
"model": "gpt-5.5"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
API key는 공유 설정 파일에 직접 쓰기보다 `apiKeyEnv`를 권장합니다.
|
|
63
|
+
|
|
64
|
+
## Claude 관련 provider
|
|
65
|
+
|
|
66
|
+
- `anthropic`: Anthropic API key를 사용하는 직접 API provider입니다.
|
|
67
|
+
- `claudecode`: 로컬 Claude Code 설치와 로그인/구독 경로를 사용하는 외부
|
|
68
|
+
agent runtime입니다.
|
|
69
|
+
|
|
70
|
+
예시:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
demian --provider claudecode --model claude-sonnet-4-6
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
기본 Claude Code 모델 alias:
|
|
77
|
+
|
|
78
|
+
- `claude-sonnet-4-6`
|
|
79
|
+
- `claude-opus-4-7`
|
|
80
|
+
|
|
81
|
+
## Goal Mode
|
|
82
|
+
|
|
83
|
+
긴 작업은 `/goal`로 시작합니다.
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
/goal README를 갱신하고 관련 검증을 통과한 뒤에만 완료해 줘.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
유용한 명령:
|
|
90
|
+
|
|
91
|
+
- `/goal status`
|
|
92
|
+
- `/goal pause`
|
|
93
|
+
- `/goal resume`
|
|
94
|
+
- `/goal clear`
|
|
95
|
+
|
|
96
|
+
목표 상태는 `.demian/goals/` 아래에 저장됩니다.
|
|
97
|
+
|
|
98
|
+
## Cowork Mode
|
|
99
|
+
|
|
100
|
+
여러 관점이 필요한 작업은 `/cowork`를 사용합니다.
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
/cowork 한 에이전트는 API 계층을 보고, 다른 에이전트는 UI 흐름을 검토해서 원인을 비교해 줘.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Demian이 main coordinator이고, cowork member들은 제한된 역할의 하위
|
|
107
|
+
에이전트로 실행됩니다.
|
|
108
|
+
|
|
109
|
+
## Plain CLI
|
|
110
|
+
|
|
111
|
+
스크립트나 raw Markdown 출력이 필요하면 `demian-plain`을 사용합니다.
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
demian-plain "릴리스 체크리스트를 만들어 줘"
|
|
115
|
+
demian-plain --image screenshot.png "이 UI 문제를 설명해 줘"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 자주 쓰는 명령
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
demian
|
|
122
|
+
demian --provider openai --model gpt-5.5
|
|
123
|
+
demian --provider claudecode --model claude-sonnet-4-6
|
|
124
|
+
demian --single-agent
|
|
125
|
+
demian --multi-agent
|
|
126
|
+
demian --sandbox read-only
|
|
127
|
+
demian-plain "프로젝트 구조를 요약해 줘"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
TUI 내부 명령:
|
|
131
|
+
|
|
132
|
+
- `/compact`: 오래된 대화 압축
|
|
133
|
+
- `/stop`: 현재 작업 중단
|
|
134
|
+
- `/exit` 또는 `/quit`: 종료
|
|
135
|
+
- `/goal ...`: 검증이 필요한 목표 시작
|
|
136
|
+
- `/cowork ...`: cowork 에이전트 조율
|
|
137
|
+
|
|
138
|
+
## 저장 위치
|
|
139
|
+
|
|
140
|
+
- `~/.demian/config.json(d)`: 사용자 설정
|
|
141
|
+
- `.demian/config.json(d)`: 프로젝트 설정
|
|
142
|
+
- `.demian/preferences.json`: workspace별 provider/model 선택
|
|
143
|
+
- `.demian/grants.json`: persistent permission grant
|
|
144
|
+
- `.demian/goals/`: goal 상태
|
|
145
|
+
|
|
146
|
+
## 문제 해결
|
|
147
|
+
|
|
148
|
+
TUI가 실행되지 않으면 `demian-plain`을 사용하거나 Node 버전을 확인하세요.
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
node --version
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Claude Code가 동작하지 않으면 설치 경로를 확인하세요.
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
~/.local/bin/claude --version
|
|
158
|
+
```
|
package/media/demian.svg
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Demian sidebar concept 03 - egg silhouette with bird</title>
|
|
3
|
+
<path d="M25 72c0-35 17-62 39-62s39 27 39 62c0 31-15 50-39 50S25 103 25 72Z" fill="#FFF7D6"/>
|
|
4
|
+
<path d="M38 62c0-22 12-38 30-38 16 0 26 12 28 30l16 7-16 7c-3 15-14 22-32 22H49c-7 0-11-8-11-28Z" fill="#FACC15" stroke="#111827" stroke-width="4" stroke-linejoin="round"/>
|
|
5
|
+
<circle cx="74" cy="43" r="6" fill="#111827"/>
|
|
6
|
+
<path d="M25 79l7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7c0 27-17 43-48 43S25 106 25 79Z" fill="#FFF7D6"/>
|
|
7
|
+
<path d="M25 79l7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7 7-7 7 7" fill="none" stroke="#111827" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<path d="M109 79c0 27-17 43-48 43S25 106 25 79" fill="none" stroke="#111827" stroke-width="4" stroke-linecap="round"/>
|
|
9
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "demian-cli",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "Local terminal coding agent with TUI, goals, cowork agents, permissions, and provider switching.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"icon": "media/demian.svg",
|
|
7
|
+
"bin": {
|
|
8
|
+
"demian": "bin/demian",
|
|
9
|
+
"demian-cli": "bin/demian-cli.js",
|
|
10
|
+
"demian-plain": "bin/demian-plain.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": "./dist/index.mjs",
|
|
14
|
+
"./cli": "./dist/cli.mjs",
|
|
15
|
+
"./vscode-worker": "./dist/vscode-worker.mjs"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"architecture.md",
|
|
19
|
+
"architecture-tui.md",
|
|
20
|
+
"bin",
|
|
21
|
+
"dist",
|
|
22
|
+
"docs",
|
|
23
|
+
"media",
|
|
24
|
+
"README.md",
|
|
25
|
+
"tsconfig.json"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "esbuild src/index.ts src/tui.ts src/cli.ts src/vscode-worker.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --out-extension:.js=.mjs --loader:.ts=ts --define:process.env.DEV=\\\"false\\\" --external:@anthropic-ai/claude-agent-sdk-* --external:ink --external:react --external:react-devtools-core --banner:js=\"import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);\"",
|
|
29
|
+
"prepack": "npm run build",
|
|
30
|
+
"test": "node --experimental-strip-types --test test/*.test.ts",
|
|
31
|
+
"smoke": "npm run smoke:tui && npm run smoke:plain",
|
|
32
|
+
"smoke:tui": "bin/demian --help",
|
|
33
|
+
"smoke:plain": "bin/demian-plain.js --help"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=22.18"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.143",
|
|
40
|
+
"@anthropic-ai/sdk": "0.96.0",
|
|
41
|
+
"chalk": "^5.4.1",
|
|
42
|
+
"cli-highlight": "^2.1.11",
|
|
43
|
+
"highlight.js": "^11.11.1",
|
|
44
|
+
"ink": "^5.0.1",
|
|
45
|
+
"marked": "^15.0.7",
|
|
46
|
+
"react": "^18.3.1",
|
|
47
|
+
"slice-ansi": "^7.1.0",
|
|
48
|
+
"string-width": "^7.2.0",
|
|
49
|
+
"wrap-ansi": "^9.0.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"esbuild": "^0.24.0"
|
|
53
|
+
},
|
|
54
|
+
"keywords": [
|
|
55
|
+
"agent",
|
|
56
|
+
"coding-agent",
|
|
57
|
+
"openai-compatible",
|
|
58
|
+
"cli"
|
|
59
|
+
],
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "git+https://github.com/pydemia/demian.git",
|
|
63
|
+
"directory": "nodejs"
|
|
64
|
+
},
|
|
65
|
+
"author": "pydemia",
|
|
66
|
+
"license": "Apache-2.0"
|
|
67
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"allowImportingTsExtensions": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"types": [
|
|
10
|
+
"node"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"include": [
|
|
14
|
+
"src/**/*.ts",
|
|
15
|
+
"test/**/*.ts"
|
|
16
|
+
]
|
|
17
|
+
}
|