@masslessai/push-todo 3.6.4 → 3.6.5
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/SKILL.md +85 -2
- package/package.json +1 -1
package/SKILL.md
CHANGED
|
@@ -36,13 +36,23 @@ When this command is invoked:
|
|
|
36
36
|
|
|
37
37
|
5. Ask which task the user wants to work on
|
|
38
38
|
|
|
39
|
-
6. **Check
|
|
39
|
+
6. **Check if the daemon is currently working on this task:**
|
|
40
|
+
- If the task output shows `**Status:** 🔄 Running`:
|
|
41
|
+
- The daemon is actively working on this task RIGHT NOW
|
|
42
|
+
- Follow the [Live Session Status](#live-session-status) procedure to show progress
|
|
43
|
+
- Do NOT start working on this task — the daemon is already on it
|
|
44
|
+
- If the task output shows `**Status:** ⚡ Queued for Mac execution`:
|
|
45
|
+
- The task is queued and waiting for the daemon to pick it up
|
|
46
|
+
- Tell the user: "This task is queued and will be picked up by the daemon shortly."
|
|
47
|
+
- Do NOT start working on this task
|
|
48
|
+
|
|
49
|
+
7. **Check for resumable daemon sessions:**
|
|
40
50
|
- If the task output contains `**Session:** Resumable`, the daemon already ran Claude Code on this task
|
|
41
51
|
- Do NOT start working from scratch — automatically load the daemon's session context
|
|
42
52
|
- Follow the [Auto-Resume from Session Transcript](#auto-resume-from-session-transcript) procedure below
|
|
43
53
|
- Only if the session transcript cannot be found should you begin working from scratch
|
|
44
54
|
|
|
45
|
-
|
|
55
|
+
8. If no resumable session exists, begin working on the task normally
|
|
46
56
|
|
|
47
57
|
## Review Mode
|
|
48
58
|
|
|
@@ -272,6 +282,79 @@ push-todo resume <number>
|
|
|
272
282
|
```
|
|
273
283
|
This launches a full interactive Claude Code session with the daemon's complete conversation history.
|
|
274
284
|
|
|
285
|
+
## Live Session Status
|
|
286
|
+
|
|
287
|
+
When a task is currently running (daemon is actively working on it), read the live session transcript to show the user what's happening.
|
|
288
|
+
|
|
289
|
+
### Step 1: Locate the Live Session File
|
|
290
|
+
|
|
291
|
+
The daemon runs Claude in a git worktree. Find the active session:
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# Get machine ID suffix for worktree name
|
|
295
|
+
MACHINE_ID=$(cat ~/.config/push/machine_id 2>/dev/null)
|
|
296
|
+
SUFFIX=$(echo "$MACHINE_ID" | rev | cut -d'-' -f1 | rev | cut -c1-8)
|
|
297
|
+
TASK_NUM=<display_number>
|
|
298
|
+
|
|
299
|
+
# Session files are stored under ~/.claude/projects/ with path-encoded directory names
|
|
300
|
+
SESSION_DIR="$HOME/.claude/projects/-Users-$(whoami)-projects-push-${TASK_NUM}-${SUFFIX}"
|
|
301
|
+
|
|
302
|
+
# Find the most recent .jsonl file (the active session)
|
|
303
|
+
ls -t "${SESSION_DIR}"/*.jsonl 2>/dev/null | head -1
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Step 2: Extract Recent Activity
|
|
307
|
+
|
|
308
|
+
Read the last portion of the JSONL transcript to see what Claude is currently doing:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
tail -100 "<session_file>" | node -e "
|
|
312
|
+
const lines = [];
|
|
313
|
+
process.stdin.on('data', d => lines.push(d));
|
|
314
|
+
process.stdin.on('end', () => {
|
|
315
|
+
const entries = Buffer.concat(lines).toString().split('\n')
|
|
316
|
+
.filter(Boolean).map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean);
|
|
317
|
+
|
|
318
|
+
const assistantMsgs = entries.filter(e => e.type === 'assistant');
|
|
319
|
+
const edits = [];
|
|
320
|
+
const reads = [];
|
|
321
|
+
const texts = [];
|
|
322
|
+
|
|
323
|
+
assistantMsgs.forEach(a => {
|
|
324
|
+
(a.message?.content || []).forEach(b => {
|
|
325
|
+
if (b.type === 'text' && b.text.trim()) texts.push(b.text.trim());
|
|
326
|
+
if (b.type === 'tool_use') {
|
|
327
|
+
if (b.name === 'Edit' || b.name === 'Write') edits.push(b.input?.file_path);
|
|
328
|
+
if (b.name === 'Read') reads.push(b.input?.file_path);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
console.log('FILES_READ:', JSON.stringify([...new Set(reads)].slice(-10)));
|
|
334
|
+
console.log('FILES_EDITED:', JSON.stringify([...new Set(edits)]));
|
|
335
|
+
console.log('---RECENT_ACTIVITY---');
|
|
336
|
+
texts.slice(-5).forEach(t => console.log(t.slice(0, 200)));
|
|
337
|
+
console.log('---END---');
|
|
338
|
+
});
|
|
339
|
+
"
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Step 3: Present Status to User
|
|
343
|
+
|
|
344
|
+
Show a concise summary:
|
|
345
|
+
1. "The daemon is currently working on this task"
|
|
346
|
+
2. Files it has read so far
|
|
347
|
+
3. Files it has edited so far
|
|
348
|
+
4. Its most recent reasoning/activity (last few text messages)
|
|
349
|
+
5. "Check back in a few minutes, or run `/push-todo <number>` again for an update"
|
|
350
|
+
|
|
351
|
+
Do NOT offer to start working on the task — the daemon is already handling it.
|
|
352
|
+
|
|
353
|
+
### Fallback
|
|
354
|
+
|
|
355
|
+
If the session file cannot be found (daemon just started, no output yet):
|
|
356
|
+
- Tell the user: "The daemon just started working on this task. Run `/push-todo <number>` again in a minute for a progress update."
|
|
357
|
+
|
|
275
358
|
## CLI Reference
|
|
276
359
|
|
|
277
360
|
The `push-todo` CLI supports these commands:
|