vibe-pomo 0.2.2 → 0.2.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 +3 -3
- package/README.zh.md +3 -3
- package/bin/pomodoro.mjs +21 -1
- package/install.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ Every session is logged — what the agent did, what you did — giving you a cl
|
|
|
27
27
|
|
|
28
28
|
**Prerequisites:** Node.js 20+, Claude Code CLI
|
|
29
29
|
|
|
30
|
-
**Recommended:** run Claude Code inside `tmux`. That is the primary supported interactive timer experience: vibe-pomo uses a `tmux` popup to cover the current pane during a Pomodoro.
|
|
30
|
+
**Recommended:** run Claude Code inside `tmux`. That is the primary supported interactive timer experience: vibe-pomo uses a `tmux` popup to cover the current pane during a Pomodoro. kitty can also support an overlay-style timer; terminals that cannot provide a comparable cover effect fall back to headless mode.
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
npm i -g vibe-pomo
|
|
@@ -84,7 +84,7 @@ pomodoro start 25m Refactor the auth module
|
|
|
84
84
|
pomodoro start Refactor the auth module # uses default duration
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
If Claude Code is running inside `tmux`, vibe-pomo opens a popup over the current pane so the ongoing task stays covered until you end or break the session.
|
|
87
|
+
If Claude Code is running inside `tmux`, vibe-pomo opens a popup over the current pane so the ongoing task stays covered until you end or break the session. In kitty, it will try to use an overlay window for the same purpose. Terminals that cannot provide a comparable cover effect stay headless: the session still runs, but visualization remains in the daemon dashboard and stats view instead of opening another terminal window.
|
|
88
88
|
|
|
89
89
|
```
|
|
90
90
|
🍅 Pomodoro
|
|
@@ -167,7 +167,7 @@ Recent Sessions
|
|
|
167
167
|
|--------|--------|-------------|
|
|
168
168
|
| `defaultDurationMs` | ms | Default session duration (25 min = `1500000`) |
|
|
169
169
|
| `decisionStrategy` | `"wait"` / `"break"` | When the agent is blocked: wait silently until you end the session (default), or end immediately |
|
|
170
|
-
| `terminalEmulator` | `"auto"` / `"tmux"` / `"none"` | Timer surface. `"tmux"` opens a popup overlay, `"none"` forces headless mode, and `"auto"`
|
|
170
|
+
| `terminalEmulator` | `"auto"` / `"tmux"` / `"kitty"` / `"none"` | Timer surface. `"tmux"` opens a popup overlay, `"kitty"` tries a kitty overlay window, `"none"` forces headless mode, and `"auto"` prefers supported cover-style overlays before falling back to headless mode. |
|
|
171
171
|
| `soundOnOvertime` | bool | Play a sound when the timer hits zero |
|
|
172
172
|
|
|
173
173
|
---
|
package/README.zh.md
CHANGED
|
@@ -84,7 +84,7 @@ What did you do during this session?
|
|
|
84
84
|
|
|
85
85
|
**前置条件:** Node.js 20+、Claude Code CLI
|
|
86
86
|
|
|
87
|
-
**推荐条件:** 请在 `tmux` 里运行 Claude Code。这是 vibe-pomo 当前主推的交互方式:番茄钟会通过 `tmux popup` 覆盖当前 pane
|
|
87
|
+
**推荐条件:** 请在 `tmux` 里运行 Claude Code。这是 vibe-pomo 当前主推的交互方式:番茄钟会通过 `tmux popup` 覆盖当前 pane。kitty 也可能支持类似的覆盖式计时器;其他无法提供同等级遮罩效果的终端会自动退化为无界面模式。
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
90
|
npm install -g vibe-pomo
|
|
@@ -124,7 +124,7 @@ pomodoro start 25m Refactor the auth module
|
|
|
124
124
|
pomodoro start Refactor the auth module # 使用默认时长
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
如果 Claude Code 跑在 `tmux` 里,vibe-pomo 会在当前 pane 上弹出一个覆盖式 popup
|
|
127
|
+
如果 Claude Code 跑在 `tmux` 里,vibe-pomo 会在当前 pane 上弹出一个覆盖式 popup,把正在进行的任务界面盖住,直到你结束或中断番茄钟。在 kitty 里,它会尝试使用 overlay 窗口实现同样的遮罩效果。其他无法提供类似覆盖体验的终端则保持无界面模式:会话照常运行,但只通过 daemon 仪表板和统计视图展示,不再额外弹出终端窗口。
|
|
128
128
|
|
|
129
129
|
### 3. 会话进行中
|
|
130
130
|
|
|
@@ -181,7 +181,7 @@ Recent Sessions
|
|
|
181
181
|
|------|------|------|
|
|
182
182
|
| `defaultDurationMs` | 毫秒数 | 默认会话时长(25 分钟 = `1500000`) |
|
|
183
183
|
| `decisionStrategy` | `"wait"` / `"break"` | 代理被阻塞时的策略:静默等待直到你结束会话(默认),或立即结束 |
|
|
184
|
-
| `terminalEmulator` | `"auto"` / `"tmux"` / `"none"` | 计时器展示方式。`"tmux"` 打开覆盖式 popup,`"none"` 强制无界面模式,`"auto"`
|
|
184
|
+
| `terminalEmulator` | `"auto"` / `"tmux"` / `"kitty"` / `"none"` | 计时器展示方式。`"tmux"` 打开覆盖式 popup,`"kitty"` 尝试使用 kitty overlay,`"none"` 强制无界面模式,`"auto"` 会优先尝试支持遮罩效果的终端,否则退化为无界面模式 |
|
|
185
185
|
| `soundOnOvertime` | 布尔值 | 计时归零时播放提示音 |
|
|
186
186
|
|
|
187
187
|
---
|
package/bin/pomodoro.mjs
CHANGED
|
@@ -184,7 +184,7 @@ async function cmdStopDaemon() {
|
|
|
184
184
|
|
|
185
185
|
async function launchTerminal({ tsx, entryFile, sessionId, termPref }) {
|
|
186
186
|
const mode = resolveTimerMode(termPref)
|
|
187
|
-
if (mode
|
|
187
|
+
if (mode === 'none') return false
|
|
188
188
|
return trySpawn(mode, tsx, entryFile, sessionId)
|
|
189
189
|
}
|
|
190
190
|
|
|
@@ -194,12 +194,16 @@ function resolveTimerMode(termPref) {
|
|
|
194
194
|
if ((pref === 'auto' || pref === 'tmux' || pref === 'tmux-popup') && process.env.TMUX) {
|
|
195
195
|
return 'tmux-popup'
|
|
196
196
|
}
|
|
197
|
+
if ((pref === 'auto' || pref === 'kitty' || pref === 'kitty-overlay') && process.env.KITTY_WINDOW_ID) {
|
|
198
|
+
return 'kitty-overlay'
|
|
199
|
+
}
|
|
197
200
|
return 'none'
|
|
198
201
|
}
|
|
199
202
|
|
|
200
203
|
function buildCmd(term, tsx, entryFile, sessionId) {
|
|
201
204
|
switch (term) {
|
|
202
205
|
case 'tmux-popup': return buildTmuxPopupCmd(tsx, entryFile, sessionId)
|
|
206
|
+
case 'kitty-overlay': return buildKittyOverlayCmd(tsx, entryFile, sessionId)
|
|
203
207
|
default: return null
|
|
204
208
|
}
|
|
205
209
|
}
|
|
@@ -256,6 +260,22 @@ function buildTmuxPopupCmd(tsx, entryFile, sessionId) {
|
|
|
256
260
|
]
|
|
257
261
|
}
|
|
258
262
|
|
|
263
|
+
function buildKittyOverlayCmd(tsx, entryFile, sessionId) {
|
|
264
|
+
return [
|
|
265
|
+
'kitty',
|
|
266
|
+
'@',
|
|
267
|
+
'launch',
|
|
268
|
+
'--type=overlay-main',
|
|
269
|
+
'--cwd=current',
|
|
270
|
+
'--title=Pomodoro',
|
|
271
|
+
'--env=POMODORO_MODAL=1',
|
|
272
|
+
process.execPath,
|
|
273
|
+
tsx,
|
|
274
|
+
entryFile,
|
|
275
|
+
sessionId,
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
|
|
259
279
|
function shellQuote(value) {
|
|
260
280
|
return `'${String(value).replace(/'/g, `'\\''`)}'`
|
|
261
281
|
}
|
package/install.mjs
CHANGED
|
@@ -120,7 +120,7 @@ The user has started a Pomodoro focus session and **will not be checking the scr
|
|
|
120
120
|
- Focus only on what is **unambiguously clear** from the task description
|
|
121
121
|
- If you encounter something that requires a user decision, **stop and record it** in \`.claude/pomodoro-pending.md\` — do NOT make assumptions or proceed on the user's behalf
|
|
122
122
|
- Do not send notifications or ask questions — the user is in focus mode
|
|
123
|
-
- If a timer UI is available, it may appear as a tmux popup. If not, continue headlessly — do not mention missing timer UI to the user unless they ask
|
|
123
|
+
- If a timer UI is available, it may appear as a tmux popup or a kitty overlay. If not, continue headlessly — do not mention missing timer UI to the user unless they ask
|
|
124
124
|
- When you have done all you can, write a summary to \`.claude/pomodoro-summary.md\`
|
|
125
125
|
- Then wait quietly — the Pomodoro hook will manage the session lifecycle
|
|
126
126
|
`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe-pomo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "You and your agent, both in flow. A Pomodoro timer for Claude Code that keeps agents working autonomously while you stay deep in focus — uninterrupted.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|