stackbite 0.5.22 → 0.5.27
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 +106 -282
- package/package.json +1 -1
- package/packaging/npm/lib/bootstrap.js +3 -1
- package/packaging/npm/release.json +16 -16
package/README.md
CHANGED
|
@@ -1,322 +1,146 @@
|
|
|
1
|
-
# Stackbite
|
|
1
|
+
# Stackbite through npm and npx
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
>
|
|
5
|
-
> Work Stack으로 정리하고, Stackbite로 실행한다.
|
|
3
|
+
Work Stack organizes the work. Stackbite gets it moving.
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
Node.js 20 or newer is required. The portable runtime is available for Windows x64
|
|
6
|
+
and Linux x64 with glibc 2.39 or newer; macOS, ARM and musl/Alpine builds are not supplied yet.
|
|
7
|
+
Python installation and compilation are unnecessary. Archive extraction requires
|
|
8
|
+
`tar` (included in current Windows and common Linux distributions).
|
|
11
9
|
|
|
12
|
-
##
|
|
10
|
+
## Install without an account
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
검증된 **0.5.20** 실행 파일과 TGZ는 GitHub 로그인 없이 받을 수 있습니다.
|
|
16
|
-
핵심 소스 저장소 `Shinick-Han/helm`은 비공개로 유지합니다.
|
|
17
|
-
|
|
18
|
-
0.5.20에는 간결한 Rust 화면이 포함됩니다. `stackbite --frontend rust`로 실행하고,
|
|
19
|
-
Alt+Shift+Z로 집중 화면, F6로 Seats 이동을 사용할 수 있습니다. 기존 키맵과 실행
|
|
20
|
-
기본값은 유지됩니다. [Rust 화면과 실행 소유권 안내](docs/release-0.5.20.md)를 참고하세요.
|
|
21
|
-
|
|
22
|
-
### npm / npx 설치
|
|
23
|
-
|
|
24
|
-
Node.js 20 이상과 `tar`가 있는 Windows x64 또는 glibc Linux x64에서 실행합니다.
|
|
25
|
-
Python 설치는 필요하지 않으며 첫 실행은 검증된 런타임을 내려받고 다음부터 캐시를 사용합니다.
|
|
26
|
-
아래 두 방식 중 하나를 선택하면 됩니다. 전역 설치는 작은 런처를 설치하고,
|
|
27
|
-
이어 `stackbite`를 처음 실행할 때 네이티브 런타임을 내려받습니다.
|
|
12
|
+
Choose one method. For a single run, use the public npm package:
|
|
28
13
|
|
|
29
14
|
```sh
|
|
30
15
|
npx --yes stackbite
|
|
31
16
|
```
|
|
32
17
|
|
|
33
|
-
|
|
18
|
+
For a persistent command, install it globally, prepare the runtime, then launch:
|
|
34
19
|
|
|
35
20
|
```sh
|
|
36
21
|
npm install --global stackbite
|
|
22
|
+
stackbite setup
|
|
37
23
|
stackbite
|
|
38
24
|
```
|
|
39
25
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
macOS·ARM·Alpine은 현재 지원 대상이 아닙니다.
|
|
48
|
-
[런처 설치·업데이트 안내](packaging/npm/README.md)를 참고하세요.
|
|
26
|
+
Global installation installs the small launcher without a postinstall download.
|
|
27
|
+
`stackbite setup` downloads and fully validates its pinned runtime without starting
|
|
28
|
+
the app or backend. It prints short stages to stderr. If setup is omitted, the
|
|
29
|
+
first launch prepares the runtime with the same stages. Cached launches remain
|
|
30
|
+
quiet and fully validate the runtime every time. Running both installation methods
|
|
31
|
+
is unnecessary.
|
|
49
32
|
|
|
50
|
-
|
|
33
|
+
The same preparation command works through npx:
|
|
51
34
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
`runtime/`을 실행 파일 옆에 유지하면 Python이나 소스 checkout 없이 동작합니다.
|
|
55
|
-
Linux의 최소 glibc 요구 사항은 `portable.json`의 `minimum_glibc`에 기록됩니다.
|
|
56
|
-
|
|
57
|
-
선택적으로 Windows의 `install.cmd` 또는 Linux의 `./install.sh`로 사용자 계정에 설치합니다.
|
|
58
|
-
Codex·Claude 등 provider CLI의 설치와 로그인은 별도입니다.
|
|
59
|
-
설치·롤백은 [Windows](packaging/README.md) / [Linux](packaging/linux/README.md) 안내를 따릅니다.
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
stackbite
|
|
63
|
-
stackbite --help
|
|
64
|
-
stackbite --version
|
|
65
|
-
stackbite --status
|
|
66
|
-
stackbite agent --help
|
|
67
|
-
stackbite update --check
|
|
35
|
+
```sh
|
|
36
|
+
npx --yes stackbite setup
|
|
68
37
|
```
|
|
69
38
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
39
|
+
Check a prepared runtime offline with `stackbite setup --check`. The launcher
|
|
40
|
+
checks all pinned file hashes, identity, inventory and link boundaries, without
|
|
41
|
+
downloading, extracting, writing cache files, or starting the app/backend. It exits
|
|
42
|
+
with status 0 when valid and status 1 when absent or invalid; an absent cache needs
|
|
43
|
+
`stackbite setup`. Only `setup` and `setup --check` are accepted setup forms.
|
|
44
|
+
The launcher check is read-only; npx itself may install its npm package before
|
|
45
|
+
invoking it, so use the installed command for an entirely offline check.
|
|
75
46
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
47
|
+
Binary caches use `%LOCALAPPDATA%\Stackbite\cache` on Windows and
|
|
48
|
+
`${XDG_CACHE_HOME:-~/.cache}/stackbite` on Linux. `LOCALAPPDATA`, `XDG_CACHE_HOME`
|
|
49
|
+
and `HOME` overrides retain their normal behavior. These caches are separate from
|
|
50
|
+
application state. Interrupted preparation removes only its own temporary staging
|
|
51
|
+
directory and can be retried. An invalid existing runtime is reported and left in
|
|
52
|
+
place; setup does not delete or overwrite it.
|
|
81
53
|
|
|
82
|
-
|
|
83
|
-
화면 행을 재사용합니다. 한 좌석이 바쁜 동안 다른 좌석의 화면 발행을 계속하며,
|
|
84
|
-
렌더 시간 자체를 갱신 간격에 포함합니다. 입력 ACK·실패 시 재전송 금지·좌석과
|
|
85
|
-
화면 소유권 검증은 유지합니다. 이번 직렬 PTY 측정과 한계는
|
|
86
|
-
`docs/next-latency-release-1008.md`에 기록합니다.
|
|
54
|
+
Update a registry installation with `npm install --global stackbite@latest`.
|
|
87
55
|
|
|
88
|
-
|
|
89
|
-
실제 버전과 지원 기능은 각각 확인하세요.
|
|
56
|
+
## Direct GitHub package
|
|
90
57
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
MATE Terminal의 VTE 0.52 환경에서 상태 원과 의자 glyph가 한 칸으로 표시되면,
|
|
94
|
-
새 frontend를 다음처럼 실행합니다. csh/tcsh에서도 같은 명령을 사용합니다.
|
|
58
|
+
Run the package attached to the verified GitHub release:
|
|
95
59
|
|
|
96
60
|
```sh
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
이 설정은 제품 UI의 두 glyph만 폭이 안정적인 표현으로 바꿉니다. 일반 터미널은
|
|
101
|
-
기본 UI를 유지하며, Seat 출력·사용자 이름·폰트·터미널 설정은 바뀌지 않습니다.
|
|
102
|
-
0.5.18는 지원되는 POSIX VT 터미널의 화면 행을 절대 위치로 출력하므로 raw tty의 LF 처리에 의존하지
|
|
103
|
-
않습니다. frontend만 다시 열어도 표시 수정이 적용되며 기존 backend와 Seat를
|
|
104
|
-
종료할 필요가 없습니다. [호환 설정과 검증 범위](docs/citrix-chrome-1008.md)를
|
|
105
|
-
참고하세요.
|
|
106
|
-
|
|
107
|
-
## Room과 Seat
|
|
108
|
-
|
|
109
|
-
현재 소스는 연결된 백엔드에 방이 없으면 작업 폴더를 채운 Room 생성 화면을 엽니다.
|
|
110
|
-
Enter로 Room과 기본 shell을 열며, 같은 폴더에서 다시 실행하면 기억한 유효 Room으로 돌아갑니다.
|
|
111
|
-
재접속만으로 중단된 Seat를 실행하지 않습니다. 다른 폴더·삭제된 Room이면 목록을 엽니다.
|
|
112
|
-
작업실 백엔드가 꺼져 있으면 로컬 8090에서 시작합니다.
|
|
113
|
-
방을 선택하고 Enter로 진입합니다. `F7` / `Alt+R`로 목록으로 돌아가며, 목록에서 `Esc`는
|
|
114
|
-
이전에 열었던 작업실로 돌아갑니다. Room 생성 화면에서 Esc를 누르면 목록으로 돌아갑니다.
|
|
115
|
-
목록 입력은 관리 동작이며 좌석의 CLI에 전달되지 않습니다.
|
|
116
|
-
|
|
117
|
-
설정은 Room 생성 화면의 `Ctrl+D` 또는 Help의 `s`로 저장합니다. CLI에서는
|
|
118
|
-
`stackbite config set chrome_profile vte-0.52`, `stackbite config set terminal_core python`처럼
|
|
119
|
-
한 번 저장하고 이후 `stackbite`만 실행하면 됩니다. 명시한 환경변수·실행 옵션은 저장값보다
|
|
120
|
-
우선합니다. [첫 사용](docs/first-use.md), [설정](docs/launch-preferences.md),
|
|
121
|
-
[clone 후 단일 명령 빌드](docs/build-local.md), [Node 없는 설치](docs/install-from-release.md)를 참고하세요.
|
|
122
|
-
|
|
123
|
-
화면 아래 `[+ Room]`, `[+ Terminal]`, `[Find seats]`로 방·터미널을 관리합니다.
|
|
124
|
-
방에는 이름·작업 폴더·공통 목표를 지정합니다. Seat는 역할·개별 작업·범위·완료 조건·
|
|
125
|
-
결과물·보고 대상을 가집니다. 이름을 바꿔도 내부 seat key와 실행 기록의 연결은 유지됩니다.
|
|
126
|
-
검색은 여러 방의 이름·역할·명령·작업 경로를 찾고 `Tab`으로 상태를 필터링합니다.
|
|
127
|
-
|
|
128
|
-
방 안에서 `Ctrl+T` / `Alt+T` 또는 `[+ New terminal]`을 선택하고 Enter를 누르면 기본 셸을
|
|
129
|
-
엽니다. `codex`, `claude`, `python -i` 같은 설치된 명령과 인자도 입력할 수 있습니다.
|
|
130
|
-
명령 선택창은 셸 연산자나 환경 변수를 자동 평가하지 않으므로 필요한 경우 셸 안에서 실행합니다.
|
|
131
|
-
기존 터미널은 sidebar에서 클릭해 전환합니다.
|
|
132
|
-
|
|
133
|
-
`[Split →]` / `[Split ↓]`로 같은 방의 두 터미널을 표시합니다. pane 클릭은 입력 대상을
|
|
134
|
-
바꾸고, 경계선 드래그는 크기를 조절합니다. `Alt+Z`는 현재 pane을 확대합니다.
|
|
135
|
-
좌석·터미널 우클릭 또는 `Alt+M` / `Shift+F10`은 Rename, Close, Restart CLI 메뉴를 엽니다.
|
|
136
|
-
좌석 패널의 `Delete`는 선택한 좌석을 닫고, 터미널 포커스의 `Delete`는 CLI에 전달됩니다.
|
|
137
|
-
종료 동작은 선택한 generation만 대상으로 하며 기록은 보존합니다.
|
|
138
|
-
|
|
139
|
-
꺼진 CLI 좌석을 선택하면 같은 좌석에 복구용 기본 셸을 엽니다. 원래 CLI 명령·모델·역할은
|
|
140
|
-
유지하며 `Restart CLI`로 원래 명령을 다시 실행합니다. 이전 복구 요청의 전달 결과가
|
|
141
|
-
불명확하면 먼저 그 요청을 조회합니다. 새 실행은 `Start new terminal (new request)` 또는
|
|
142
|
-
`Retry CLI (new request)`로 명시적으로 요청하며 이전 요청을 자동 재전송하지 않습니다.
|
|
143
|
-
|
|
144
|
-
방 우클릭의 Archive / Restore / Delete room 또는 `/room-delete`로 방을 관리합니다.
|
|
145
|
-
실행 중인 좌석이 있으면 먼저 명시적으로 종료해야 합니다. 삭제 확인창은 Cancel을 기본으로
|
|
146
|
-
선택합니다. 정지된 활성 방은 확인 후 보관·삭제하며 작업 폴더·Git worktree·실행 기록은 보존합니다.
|
|
147
|
-
Restore는 좌석을 자동 실행하지 않습니다. `Ctrl+Q`는 TUI 연결만 해제합니다.
|
|
148
|
-
|
|
149
|
-
| 관리 명령 | 동작 |
|
|
150
|
-
| --- | --- |
|
|
151
|
-
| `/room-new 작업 이름` | 현재 작업 경로에 빈 작업실 생성; 자동 진입·실행 없음 |
|
|
152
|
-
| `/room <번호 또는 room_id>` | 작업실 선택 |
|
|
153
|
-
| `/seat-new qa powershell` | 선택 방에 좌석을 만들고 명시적으로 실행 |
|
|
154
|
-
| `/seat-add qa codex` | 정지된 좌석 정의만 추가 |
|
|
155
|
-
| `/room-run qa 검토해줘` | 정지된 provider 좌석에서 headless 단발 실행 |
|
|
156
|
-
| `/room-history`, `/room-context qa` | 실행 기록·초기 컨텍스트 확인 |
|
|
157
|
-
| `/room-find 검색어`, `/room-filter active` | 작업실 검색·상태 필터 |
|
|
158
|
-
| `/room-worktree 작업 이름` | Git 커밋 HEAD에서 별도 worktree 작업실 생성 |
|
|
159
|
-
| `/spawn qa codex`, `/kill qa` | 선택 방의 좌석 실행·종료 |
|
|
160
|
-
| `/broadcast 점검해줘` | 선택 방의 살아 있는 좌석에 지시 |
|
|
161
|
-
| `/archive`, `/restore` | 정지된 작업실 보관·복원 |
|
|
162
|
-
|
|
163
|
-
## 터미널 입력과 출력
|
|
164
|
-
|
|
165
|
-
`Alt+H`로 검색 가능한 도움말을 엽니다. 도움말의 `Ctrl+P`로 관리 prefix를 활성화하고
|
|
166
|
-
`Ctrl+K`로 `Ctrl+B` / `Ctrl+A` / `Ctrl+Space` 중 선택합니다. prefix 뒤 `%` / `"`는
|
|
167
|
-
좌우·상하 분할, `o`는 pane 전환, `n`은 좌석 검색, `[`는 복사 모드입니다.
|
|
168
|
-
같은 prefix를 두 번 누르면 문자 하나를 CLI에 전달합니다. 도움말의 `Ctrl+L`로 관리
|
|
169
|
-
단축키를 해제하면 해당 키를 CLI에 전달할 수 있습니다.
|
|
170
|
-
|
|
171
|
-
출력 드래그는 선택 후 버튼을 놓으면 복사합니다. CLI가 마우스 입력을 요청하면 휠·왼쪽
|
|
172
|
-
클릭은 포인터 아래 CLI에 전달하며, `Shift`를 누른 드래그는 Stackbite 출력 선택입니다.
|
|
173
|
-
`Shift`+휠은 Stackbite 이력을 탐색합니다. 메뉴나 출력 선택 중에는 CLI에 마우스를 보내지 않습니다.
|
|
174
|
-
CLI 포인터 입력에는 백엔드의 `terminal_mouse`와 `terminal_geometry`가 모두 필요합니다.
|
|
175
|
-
실제 PTY 크기·화면 원점·좌석 generation이 확인된 라이브 화면에서만 좌표를 전달합니다.
|
|
176
|
-
오래된 백엔드에서는 안내에 따라 업데이트·재시작합니다.
|
|
177
|
-
[터미널 입력·크기 계약](docs/terminal-interaction-contract.md)에 자세한 규약이 있습니다.
|
|
178
|
-
|
|
179
|
-
`Shift+PageUp` / `Shift+PageDown`은 이력을 탐색하고 `End`는 라이브 화면으로 돌아갑니다.
|
|
180
|
-
분할 pane은 각자 이력 위치를 유지합니다. 보관량은 좌석마다 기본 2,000줄이며
|
|
181
|
-
백엔드 시작 전에 `STACKBITE_SCROLLBACK_LINES`로 1~20,000줄을 지정합니다.
|
|
182
|
-
잘못된 값은 기본값으로 돌아갑니다. 오래된 줄부터 제거하며 보관량을 늘리면 메모리도 늘어납니다.
|
|
183
|
-
이력은 메모리이므로 백엔드 재시작 시 초기화됩니다.
|
|
184
|
-
|
|
185
|
-
`Alt+C` 또는 prefix + `[`로 복사 모드를 열어 `/` 검색, `n` / `N` 다음·이전 결과,
|
|
186
|
-
`v` 선택, 방향키 이동, `y` 복사를 사용합니다. `Esc`로 돌아갑니다.
|
|
187
|
-
Windows는 시스템 클립보드를, Linux는 `Ctrl+O` 또는 `STACKBITE_CLIPBOARD_OSC52=1`로
|
|
188
|
-
명시적으로 허용한 OSC52를 사용합니다. 호스트 터미널의 OSC52 지원이 필요합니다.
|
|
189
|
-
|
|
190
|
-
터미널은 전경색·배경색·문자 속성과 결합 문자·이모지의 셀 폭을 보존합니다.
|
|
191
|
-
대체 화면의 짧은 출력 묶음과 DEC2026 동기화 구간은 표시 프레임을 합치지만 모든 바이트는
|
|
192
|
-
즉시 파싱합니다. 실행 완료는 표시 지연과 별개이며 모든 CLI 재도색을 완전히 재현하는 것은 아닙니다.
|
|
193
|
-
실제 PTY 기본 환경은 `TERM=xterm-256color`, `COLORTERM=truecolor`입니다.
|
|
194
|
-
호출자가 좌석 환경에 명시한 `NO_COLOR`, `TERM`, `COLORTERM`은 보존합니다.
|
|
195
|
-
|
|
196
|
-
## 에이전트 협업과 API
|
|
197
|
-
|
|
198
|
-
좌석 안에서는 `stackbite-room`으로 같은 방의 동료를 관리합니다.
|
|
199
|
-
|
|
200
|
-
```text
|
|
201
|
-
stackbite-room context
|
|
202
|
-
stackbite-room ready
|
|
203
|
-
stackbite-room summon reviewer --provider codex --task-file review-task.txt --scope src --acceptance "tests pass" --output-path review.md --report-to coordinator
|
|
204
|
-
stackbite-room send reviewer --prompt-file followup.txt
|
|
205
|
-
stackbite-room wait reviewer --generation RECEIPT_GENERATION --turn 4 --timeout 30
|
|
206
|
-
stackbite-room read reviewer
|
|
207
|
-
stackbite-room report --state progress --message "검토 중" --artifact review.md
|
|
208
|
-
stackbite-room inbox
|
|
61
|
+
npx --yes https://github.com/Shinick-Han/stackbite/releases/download/v0.5.27/stackbite-0.5.27.tgz
|
|
209
62
|
```
|
|
210
63
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
거절하며 자동 재전송하지 않습니다. `report --state completed`는 에이전트 보고로 보존하며
|
|
214
|
-
provider 완료 증거와 구별합니다. Codex·Claude의 hooks는 시작·작업·승인 대기·응답 완료를
|
|
215
|
-
기록합니다. CLI 로그인, workspace 신뢰, hooks 신뢰와 도구 실행 승인은 provider 안에서 처리합니다.
|
|
216
|
-
Stackbite는 승인·sandbox를 우회하지 않습니다.
|
|
64
|
+
Arguments go after the package URL, for example `--version` or `--status`. For a
|
|
65
|
+
persistent command, install that same package globally:
|
|
217
66
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
기존 방의 좌석을 조회하는 예:
|
|
224
|
-
|
|
225
|
-
```python
|
|
226
|
-
from private_pty import AgentStackbite, TaskRoomClient
|
|
227
|
-
|
|
228
|
-
sdk = AgentStackbite(room_id="review-room", client=TaskRoomClient())
|
|
229
|
-
seats = sdk.list_agents() # 이 방의 정의된 좌석; 정지된 좌석도 포함
|
|
67
|
+
```sh
|
|
68
|
+
npm install --global https://github.com/Shinick-Han/stackbite/releases/download/v0.5.27/stackbite-0.5.27.tgz
|
|
69
|
+
stackbite setup
|
|
70
|
+
stackbite
|
|
230
71
|
```
|
|
231
72
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
73
|
+
The core source repository remains private at `shinick-dev/stackbite`. The separate
|
|
74
|
+
public `Shinick-Han/stackbite` repository distributes only this thin launcher and
|
|
75
|
+
verified compiled runtime releases; installers need no GitHub or npm login.
|
|
76
|
+
Registry-free distribution does not require publishing rights on npm.
|
|
77
|
+
The small JavaScript package downloads the
|
|
78
|
+
exact pinned native release on first execution, verifies its archive and file
|
|
79
|
+
checksums and product identity, then reuses a persistent binary cache. There is no
|
|
80
|
+
postinstall download or provider installation. An offline cached launch is possible;
|
|
81
|
+
the first launch needs access to GitHub release downloads.
|
|
82
|
+
|
|
83
|
+
For a GitHub URL installation, install the package URL from the newer release.
|
|
84
|
+
Each npm package pins one native release; the portable app's own `stackbite update`
|
|
85
|
+
does not change the npm package version.
|
|
86
|
+
|
|
87
|
+
## Existing data and processes
|
|
88
|
+
|
|
89
|
+
`STACKBITE_STATE_DIR` is the explicit state override. The bundled native runtime
|
|
90
|
+
owns state discovery and migration for both npm and direct launches. It reuses
|
|
91
|
+
existing configured state and keeps live databases, authentication and records
|
|
92
|
+
in place. New state uses `%LOCALAPPDATA%\Stackbite\state` or
|
|
93
|
+
`${XDG_STATE_HOME:-~/.local/state}/stackbite`.
|
|
94
|
+
Rooms, Seats, authentication, provider configuration, journals and Work Stack
|
|
95
|
+
contracts are not renamed or migrated. Binary cache data is separate from this
|
|
96
|
+
state. Installing or launching the npm package does not stop an existing backend.
|
|
97
|
+
Check the connected server's capabilities before using newly added runtime features.
|
|
98
|
+
|
|
99
|
+
For app commands, the launcher inherits terminal input/output and passes CLI
|
|
100
|
+
arguments directly to the native app. Its `setup` command only prepares/checks the
|
|
101
|
+
runtime. It does not insert a second screen renderer or an agent provider.
|
|
102
|
+
Global npm installation creates only the `stackbite` command; it does not claim an
|
|
103
|
+
external `helm` command or replace independent Kubernetes tooling.
|
|
104
|
+
|
|
105
|
+
## Maintainer release steps
|
|
106
|
+
|
|
107
|
+
Measure bounded fake runtime preparation and warm verification without network or
|
|
108
|
+
app processes:
|
|
253
109
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
generation을 확인한 뒤 입력합니다. 지시별 request ID·generation·turn receipt로
|
|
257
|
-
전달과 완료를 구별합니다. 같은 ID·지시는 저장된 receipt를 반환하고 다른 지시는 충돌합니다.
|
|
258
|
-
불명확한 전달은 `unknown_delivery`로 보고하며 자동 재실행하지 않습니다.
|
|
259
|
-
|
|
260
|
-
완료는 owned process와 provider의 명시적 lifecycle 증거로 판정합니다. 잠깐의 출력 정지나
|
|
261
|
-
CLI 종료 코드 0만으로 AI 작업 성공을 판정하지 않습니다. blocked는 개입이 필요한 상태입니다.
|
|
262
|
-
결과물 등록·accepted/rejected 검토·외부 Task 완료는 각각 별도 동작입니다.
|
|
263
|
-
|
|
264
|
-
실행 저널은 지시·generation·turn·상태·완료 근거·최대 64 Ki 문자의 출력 스냅샷을 저장합니다.
|
|
265
|
-
모든 키 입력을 기록하는 transcript는 아닙니다. 백엔드 재시작은 셸 메모리를 복구하지 않으며
|
|
266
|
-
살아 있는 generation이 없는 미완료 실행은 interrupted로 표시합니다.
|
|
267
|
-
Windows 네이티브 실행은 전용 Job Object가 provider와 그 자식 프로세스를 소유합니다.
|
|
268
|
-
|
|
269
|
-
## 데이터와 Work Stack
|
|
270
|
-
|
|
271
|
-
새 설치는 Stackbite 이름의 경로를 사용합니다. 이전 설치의 실제 DB·토큰·설정은 상태
|
|
272
|
-
locator(`.stackbite-state.json`)와 파일 매핑으로 **현재 위치에서 재사용**합니다. 열려 있는 SQLite DB를 복사하거나
|
|
273
|
-
이름을 바꾸지 않습니다. 이전 제품명 경로가 실제 데이터 위치로 남아 있어도 추가 상태
|
|
274
|
-
트리를 만들 필요가 없습니다. 0.5.18의 `stackbite --status`는 실제 `state`와 인증 파일의
|
|
275
|
-
`auth_file` 경로를 반환합니다. 인증 파일은 그 경로를 사용하며, 상태 폴더 아래 고정된
|
|
276
|
-
새 파일명으로 추측하거나 별도 토큰을 만들지 않습니다. 토큰 내용은 출력하지 않습니다.
|
|
277
|
-
[호환성 안내](docs/stackbite-compatibility.md)에 durable data와 인증 경계가 있습니다.
|
|
278
|
-
|
|
279
|
-
Work Stack은 작업 정리와 Task 권한을, Stackbite는 로컬 Room/Seat 실행을 담당합니다.
|
|
280
|
-
연결 개발은 `integration/work-stack`에서 분리하고 병렬 실행·우선순위·의존성 기반 선택을
|
|
281
|
-
유지합니다. 선택한 Task의 workspace·revision을 확인한 뒤 방을 만들며 이 과정은 Task
|
|
282
|
-
상태를 수정하지 않습니다.
|
|
283
|
-
|
|
284
|
-
```powershell
|
|
285
|
-
python -m private_pty.workstack_link room --task T-0041 --cwd C:\my-project --isolated --source-repo C:\my-project
|
|
110
|
+
```sh
|
|
111
|
+
node packaging/npm/test/measure-setup.js
|
|
286
112
|
```
|
|
287
113
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
재전송하지 않습니다. 로그·프롬프트 자동 복사나 Task 자동 완료는 하지 않습니다.
|
|
114
|
+
The measurement reports fixture sizes and each preparation stage plus warm check
|
|
115
|
+
and launch validation costs. It uses disposable cache data and an inert child
|
|
116
|
+
stub; its timings are not measurements of released native bundles or providers.
|
|
292
117
|
|
|
293
|
-
|
|
294
|
-
|
|
118
|
+
Build and verify both native platform archives first. Prepare the pinned manifest
|
|
119
|
+
from their exact extracted bundles and archive bytes:
|
|
295
120
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
```powershell
|
|
301
|
-
python -m pip install -r requirements-build.txt
|
|
302
|
-
python stackbite.py
|
|
121
|
+
```sh
|
|
122
|
+
python scripts/prepare_npm_release.py --version 0.5.27
|
|
123
|
+
npm test
|
|
124
|
+
npm pack
|
|
303
125
|
```
|
|
304
126
|
|
|
305
|
-
|
|
306
|
-
`
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
원격 웹 접속의 origin·신뢰 프록시는 `STACKBITE_ALLOWED_ORIGINS`·`STACKBITE_TRUSTED_PROXY_IPS`로
|
|
310
|
-
명시합니다. `X-Office-Token` 인증은 로컬 요청에도 필요합니다.
|
|
127
|
+
Keep `package.json` and `packaging/npm/release.json` versions equal. Inspect `npm
|
|
128
|
+
pack --dry-run` before publishing; the package must include the launcher and pinned
|
|
129
|
+
manifest, and exclude native runtimes, installed state, credentials, tests and
|
|
130
|
+
development worktrees. Test the packed package with `npx` on both platforms.
|
|
311
131
|
|
|
312
|
-
|
|
313
|
-
|
|
132
|
+
Attach `stackbite-<version>.tgz` and its SHA-256 sidecar to the corresponding GitHub
|
|
133
|
+
release in the public distribution repository. Copy only the npm file allowlist to
|
|
134
|
+
that repository; never push the private core history, state, personal notes or
|
|
135
|
+
credentials. Native archives must retain dependency license notices. Publishing
|
|
136
|
+
the short name requires an authenticated owner account:
|
|
314
137
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
## License
|
|
138
|
+
```sh
|
|
139
|
+
npm login --registry=https://registry.npmjs.org
|
|
140
|
+
npm publish --access public --registry=https://registry.npmjs.org
|
|
141
|
+
```
|
|
321
142
|
|
|
322
|
-
|
|
143
|
+
Complete any registry-required authentication interactively; do not put credentials
|
|
144
|
+
in this repository, prompts or package files. The repository currently specifies
|
|
145
|
+
`UNLICENSED` for the JavaScript wrapper instead of inventing a license for the app;
|
|
146
|
+
native runtime dependency notices remain in each platform archive.
|
package/package.json
CHANGED
|
@@ -102,7 +102,9 @@ async function ensureBinary(spec, { cache = cacheDirectory(), downloadImpl = dow
|
|
|
102
102
|
if (checkOnly) {
|
|
103
103
|
if (!await existingCacheDirectory(cache)) fail('Pinned runtime is not cached; run stackbite setup.');
|
|
104
104
|
} else await safeDirectory(cache);
|
|
105
|
-
|
|
105
|
+
// Full identity remains SHA-256 addressed while avoiding Windows MAX_PATH.
|
|
106
|
+
const cacheKey = createHash('sha256').update(JSON.stringify([spec.version, spec.commit, spec.key, spec.sha256])).digest('hex');
|
|
107
|
+
const target = path.join(cache, `v1-${cacheKey}`);
|
|
106
108
|
if (await exists(target)) {
|
|
107
109
|
if (checkOnly || reportCached) progress('validate');
|
|
108
110
|
const installed = { home: target, executable: await validatePayload(target, spec) };
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"commit": "
|
|
3
|
+
"version": "0.5.27",
|
|
4
|
+
"commit": "dfaa65f36a25da971458083d8a7ed49fe50b9fe2",
|
|
5
5
|
"repository": "Shinick-Han/stackbite",
|
|
6
6
|
"platforms": {
|
|
7
7
|
"win32-x64": {
|
|
8
|
-
"asset": "stackbite-0.5.
|
|
9
|
-
"url": "https://github.com/Shinick-Han/stackbite/releases/download/v0.5.
|
|
10
|
-
"sha256": "
|
|
11
|
-
"size":
|
|
12
|
-
"root": "stackbite-0.5.
|
|
13
|
-
"manifestSha256": "
|
|
14
|
-
"metadataSha256": "
|
|
8
|
+
"asset": "stackbite-0.5.27-windows-x64-dfaa65f36a25.zip",
|
|
9
|
+
"url": "https://github.com/Shinick-Han/stackbite/releases/download/v0.5.27/stackbite-0.5.27-windows-x64-dfaa65f36a25.zip",
|
|
10
|
+
"sha256": "c5b1c22afe21303a3b4a9736694b45488b7387fb1f91aedd48f972396f5175e7",
|
|
11
|
+
"size": 43942506,
|
|
12
|
+
"root": "stackbite-0.5.27-windows-x64-dfaa65f36a25",
|
|
13
|
+
"manifestSha256": "27389aaa5c8f45938e3b309d6859b2ccbb36f4032932a42ccc6372b436442e56",
|
|
14
|
+
"metadataSha256": "fae14dfcb279451c543a2447f9ec53958df72d3141ffedf01f7752237db11ecc"
|
|
15
15
|
},
|
|
16
16
|
"linux-x64": {
|
|
17
|
-
"asset": "stackbite-0.5.
|
|
18
|
-
"url": "https://github.com/Shinick-Han/stackbite/releases/download/v0.5.
|
|
19
|
-
"sha256": "
|
|
20
|
-
"size":
|
|
21
|
-
"root": "stackbite-0.5.
|
|
22
|
-
"manifestSha256": "
|
|
23
|
-
"metadataSha256": "
|
|
17
|
+
"asset": "stackbite-0.5.27-linux-x86_64-dfaa65f36a25.tar.gz",
|
|
18
|
+
"url": "https://github.com/Shinick-Han/stackbite/releases/download/v0.5.27/stackbite-0.5.27-linux-x86_64-dfaa65f36a25.tar.gz",
|
|
19
|
+
"sha256": "d244fe614d88c47137a8c126d1a4089cdc5ae656f34981f4c3c5603789918478",
|
|
20
|
+
"size": 30900428,
|
|
21
|
+
"root": "stackbite-0.5.27-linux-x86_64-dfaa65f36a25",
|
|
22
|
+
"manifestSha256": "460eac22d703b2aee95666936767c405b7175b7e7d6cbe10ce107c232096a741",
|
|
23
|
+
"metadataSha256": "88d2f12b6991a1083c46c9e53d6e6d45ca6b7ad534717ccf41553d233a2c71fc"
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
}
|