gsd-init 1.0.5 → 1.0.6
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/bin/gsd-init.js
CHANGED
|
@@ -22,6 +22,7 @@ const TEMPLATE_FILES = [
|
|
|
22
22
|
{ src: 'scripts/wake-observer.sh', dst: 'scripts/wake-observer.sh' },
|
|
23
23
|
{ src: 'scripts/notify-worker.sh', dst: 'scripts/notify-worker.sh' },
|
|
24
24
|
{ src: 'scripts/teardown.sh', dst: 'scripts/teardown.sh' },
|
|
25
|
+
{ src: 'scripts/listen.sh', dst: 'scripts/listen.sh' },
|
|
25
26
|
{ src: 'scripts/start.sh', dst: 'scripts/start.sh' },
|
|
26
27
|
{ src: 'scripts/verify.sh', dst: 'scripts/verify.sh' },
|
|
27
28
|
{ src: 'schema/event.json', dst: 'schema/event.json' },
|
|
@@ -35,6 +36,7 @@ const SH_FILES = [
|
|
|
35
36
|
'scripts/wake-observer.sh',
|
|
36
37
|
'scripts/notify-worker.sh',
|
|
37
38
|
'scripts/teardown.sh',
|
|
39
|
+
'scripts/listen.sh',
|
|
38
40
|
'scripts/start.sh',
|
|
39
41
|
'scripts/verify.sh',
|
|
40
42
|
];
|
package/package.json
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# GSD Listener — runs in observer session, polls for new events and wakes Observer Claude.
|
|
3
|
+
OBSERVER_SESSION="${GSD_OBSERVER_SESSION:-gsd-observer}"
|
|
4
|
+
OBSERVER_PANE="${GSD_OBSERVER_PANE:-0.0}"
|
|
5
|
+
SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
POLL_INTERVAL=2
|
|
7
|
+
|
|
8
|
+
log() { echo "[gsd-listener] $*"; }
|
|
9
|
+
|
|
10
|
+
log "Listening for GSD events... (session: ${OBSERVER_SESSION}, pane: ${OBSERVER_PANE})"
|
|
11
|
+
|
|
12
|
+
declare -A seen
|
|
13
|
+
|
|
14
|
+
while true; do
|
|
15
|
+
for event_file in /tmp/gsd-event-*.json; do
|
|
16
|
+
[ -f "$event_file" ] || continue
|
|
17
|
+
event_id="${event_file#/tmp/gsd-event-}"
|
|
18
|
+
event_id="${event_id%.json}"
|
|
19
|
+
|
|
20
|
+
# Skip already seen or already responded
|
|
21
|
+
[ -n "${seen[$event_id]+_}" ] && continue
|
|
22
|
+
if [ -f "/tmp/gsd-response-${event_id}.json" ]; then
|
|
23
|
+
seen[$event_id]=1
|
|
24
|
+
continue
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
log "New event: $event_id — waking Observer Claude"
|
|
28
|
+
seen[$event_id]=1
|
|
29
|
+
"$SCRIPTS_DIR/wake-observer.sh" "$event_id" "$OBSERVER_SESSION" "$OBSERVER_PANE" || \
|
|
30
|
+
log "WARNING: wake-observer.sh failed for $event_id"
|
|
31
|
+
done
|
|
32
|
+
|
|
33
|
+
sleep "$POLL_INTERVAL"
|
|
34
|
+
done
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
SESSION="${GSD_OBSERVER_SESSION:-gsd-observer}"
|
|
4
|
+
SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
|
|
4
6
|
tmux kill-session -t "$SESSION" 2>/dev/null || true
|
|
5
7
|
tmux new-session -d -s "$SESSION"
|
|
8
|
+
|
|
9
|
+
# Pane 0.0 — Observer Claude
|
|
6
10
|
tmux send-keys -t "${SESSION}:0.0" "claude --allowedTools 'Bash,Read,Write,Glob,Grep'" Enter
|
|
11
|
+
|
|
12
|
+
# Pane 0.1 — Listener daemon (split horizontally, small strip at bottom)
|
|
13
|
+
tmux split-window -t "${SESSION}:0" -v -l 6
|
|
14
|
+
tmux send-keys -t "${SESSION}:0.1" "GSD_OBSERVER_SESSION=${SESSION} ${SCRIPTS_DIR}/listen.sh" Enter
|
|
15
|
+
|
|
16
|
+
# Focus Claude pane
|
|
17
|
+
tmux select-pane -t "${SESSION}:0.0"
|
|
18
|
+
|
|
7
19
|
echo "[gsd-observer] Waiting for Observer Claude to start..."
|
|
8
20
|
for i in $(seq 1 30); do
|
|
9
21
|
pane=$(tmux capture-pane -pt "${SESSION}:0.0" 2>/dev/null || echo "")
|
|
@@ -22,7 +22,7 @@ fi
|
|
|
22
22
|
echo "[wake-observer] Waiting for Observer pane to be ready..." >&2
|
|
23
23
|
ready=0
|
|
24
24
|
for i in $(seq 1 15); do
|
|
25
|
-
pane_content=$(tmux capture-pane -pt "$full_target"
|
|
25
|
+
pane_content=$(tmux capture-pane -pt "$full_target" 2>/dev/null || echo "")
|
|
26
26
|
if echo "$pane_content" | grep -qE '❯|>|\$|✓|claude'; then
|
|
27
27
|
ready=1
|
|
28
28
|
break
|