diff --git a/scripts/seed_navigator_demo.sh b/scripts/seed_navigator_demo.sh index 9275e40a..52ee3853 100755 --- a/scripts/seed_navigator_demo.sh +++ b/scripts/seed_navigator_demo.sh @@ -5,12 +5,13 @@ usage() { cat <<'USAGE' usage: scripts/seed_navigator_demo.sh [--allow-main] -Seeds a running herdr dev server with navigator demo workspaces, tabs, panes, -and fake agent states. Most panes are intentionally unnamed. +Seeds a running herdr server with navigator demo workspaces, tabs, panes, +and fake agent states for recording the session navigator. Environment: HERDR_NAV_SOCKET_PATH API socket to target. Defaults to $HOME/.config/herdr-dev/herdr.sock. HERDR_NAV_CWD Workspace cwd for created panes. Defaults to the repo root. + HERDR_NAV_BIN Herdr binary to call. Defaults to cargo run from the repo. USAGE } @@ -55,7 +56,11 @@ fi cd "$repo_dir" -run() { cargo run --quiet -- "$@"; } +if [[ -n "${HERDR_NAV_BIN:-}" ]]; then + run() { "$HERDR_NAV_BIN" "$@"; } +else + run() { cargo run --quiet -- "$@"; } +fi mkws() { local label="$1" @@ -90,74 +95,62 @@ report() { --seq "$seq" >/dev/null } -stamp="$(date +%H%M%S)" done_panes=() -read WS1 P1 T1 < <(mkws "nav-${stamp}-claude-review") -P2="$(split "$P1" down)" -P3="$(split "$P1" right)" -rename_sparse "$P2" "approval needed" -report "$P1" claude blocked blocked 1 -report "$P2" claude working working 1 -# P3 stays shell/unknown. +read API_WS API_CODEX API_TAB < <(mkws api) +run tab rename "$API_TAB" agents >/dev/null +API_SHELL="$(split "$API_CODEX" down)" +API_CLAUDE="$(split "$API_CODEX" right)" +read API_LOGS_TAB API_LOGS < <(mktab "$API_WS" logs) +rename_sparse "$API_CODEX" "codex env review" +rename_sparse "$API_CLAUDE" "claude api refactor" +rename_sparse "$API_SHELL" "api shell" +rename_sparse "$API_LOGS" "deploy logs" +report "$API_CODEX" codex blocked "env approval" 1 +report "$API_CLAUDE" claude working "refactor api" 1 +report "$API_SHELL" shell idle ready 1 +report "$API_LOGS" deploy working "tail logs" 1 -read WS2 P4 T2 < <(mkws "nav-${stamp}-codex-build") -P5="$(split "$P4" right)" -read T2B P6 < <(mktab "$WS2" tests) -P7="$(split "$P6" down)" -report "$P4" codex working working 1 -report "$P5" codex working working 1 -report "$P6" codex idle idle 1 -report "$P7" codex working working 1 -done_panes+=("$P7:codex") +read WEB_WS WEB_PI WEB_TAB < <(mkws web) +run tab rename "$WEB_TAB" agents >/dev/null +WEB_CLAUDE="$(split "$WEB_PI" down)" +WEB_CODEX="$(split "$WEB_PI" right)" +read WEB_PREVIEW_TAB WEB_PREVIEW < <(mktab "$WEB_WS" preview) +rename_sparse "$WEB_PI" "pi ui build" +rename_sparse "$WEB_CODEX" "codex css review" +rename_sparse "$WEB_CLAUDE" "claude approval" +rename_sparse "$WEB_PREVIEW" "preview server" +report "$WEB_PI" pi working "build ui" 1 +report "$WEB_CLAUDE" claude blocked "tool approval" 1 +report "$WEB_PREVIEW" server idle "preview ready" 1 +report "$WEB_CODEX" codex working "css pass" 1 +done_panes+=("$WEB_CODEX:codex:review ready") -read WS3 P8 T3 < <(mkws "nav-${stamp}-finished") -P9="$(split "$P8" down)" -P10="$(split "$P8" right)" -rename_sparse "$P10" "release notes" -report "$P8" claude working working 1 -report "$P9" claude working working 1 -report "$P10" codex idle idle 1 -done_panes+=("$P8:claude" "$P9:claude") +read DOCS_WS DOCS_NOTES DOCS_TAB < <(mkws docs) +run tab rename "$DOCS_TAB" release >/dev/null +DOCS_COPY="$(split "$DOCS_NOTES" right)" +rename_sparse "$DOCS_NOTES" "codex notes done" +rename_sparse "$DOCS_COPY" "codex release copy" +report "$DOCS_COPY" codex working "release copy" 1 +report "$DOCS_NOTES" codex working "checking notes" 1 +done_panes+=("$DOCS_NOTES:codex:notes done") -read WS4 P11 T4 < <(mkws "nav-${stamp}-quiet") -read T4B P12 < <(mktab "$WS4" notes) -P13="$(split "$P12" right)" -report "$P12" pi idle idle 1 -# P11 and P13 stay shell/unknown. +read INFRA_WS INFRA_HERMES INFRA_TAB < <(mkws infra) +run tab rename "$INFRA_TAB" ops >/dev/null +INFRA_SSH="$(split "$INFRA_HERMES" right)" +rename_sparse "$INFRA_HERMES" "hermes ssh prompt" +rename_sparse "$INFRA_SSH" "ssh monitor" +report "$INFRA_HERMES" hermes blocked "ssh prompt" 1 +report "$INFRA_SSH" ssh idle connected 1 -read WS5 P14 T5 < <(mkws "nav-${stamp}-mixed") -P15="$(split "$P14" down)" -P16="$(split "$P14" right)" -read T5B P17 < <(mktab "$WS5" agents) -P18="$(split "$P17" down)" -rename_sparse "$P14" "prod decision" -report "$P14" claude blocked blocked 1 -report "$P15" codex blocked blocked 1 -report "$P16" claude working working 1 -report "$P17" codex working working 1 -report "$P18" claude idle idle 1 - -read WS6 P19 T6 < <(mkws "nav-${stamp}-dense") -P20="$(split "$P19" down)" -P21="$(split "$P19" right)" -read T6B P22 < <(mktab "$WS6" long-run) -P23="$(split "$P22" down)" -P24="$(split "$P22" right)" -report "$P19" codex working working 1 -report "$P20" claude idle idle 1 -report "$P21" codex blocked blocked 1 -report "$P22" claude working working 1 -report "$P23" codex working working 1 -report "$P24" claude working working 1 -done_panes+=("$P24:claude") - -run workspace focus "$WS1" >/dev/null +run workspace focus "$API_WS" >/dev/null seq=2 for item in "${done_panes[@]}"; do pane="${item%%:*}" - agent="${item##*:}" - report "$pane" "$agent" idle done "$seq" + rest="${item#*:}" + agent="${rest%%:*}" + status="${rest#*:}" + report "$pane" "$agent" idle "$status" "$seq" seq=$((seq + 1)) done @@ -165,13 +158,10 @@ cat < * + *::before { + content: "/"; + margin-right: 0.55rem; + color: var(--line-strong); +} + +.article-layout { + position: relative; + display: grid; + grid-template-columns: minmax(8rem, 12rem) minmax(0, 860px); + gap: clamp(2rem, 6vw, 4rem); + align-items: start; + padding-top: 4rem; +} + +.article-shell { + min-width: 0; +} + +.article-toc { + position: sticky; + top: 6rem; + padding-top: 0.35rem; + color: color-mix(in srgb, var(--ink) 58%, var(--muted)); + font-family: var(--mono); + font-size: 0.78rem; +} + +.article-toc p { + margin: 0 0 0.7rem; + color: color-mix(in srgb, var(--ink) 42%, var(--muted)); + font-weight: 800; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.article-toc nav { + display: grid; + gap: 0.55rem; +} + +.article-toc a { + color: color-mix(in srgb, var(--ink) 58%, var(--muted)); + line-height: 1.35; + text-decoration: none; +} + +.article-toc a:hover, +.article-toc a[aria-current="true"] { + color: var(--accent); +} + +.article-header { + margin-bottom: 2.35rem; + padding-bottom: 2rem; + border-bottom: 1px solid var(--line); +} + +.article-header p:last-child { + max-width: 680px; + margin: 1.2rem 0 0; + color: color-mix(in srgb, var(--ink) 68%, var(--muted)); + font-size: 1.18rem; + line-height: 1.7; +} + +.article-prose { + color: var(--ink); + font-size: 1.04rem; + line-height: 1.82; +} + +.article-prose > *:first-child { + margin-top: 0; +} + +.article-prose h1, +.article-prose h2, +.article-prose h3 { + color: var(--ink); + line-height: 1.05; + letter-spacing: -0.04em; +} + +.article-prose h1 { + margin: 2.3rem 0 1rem; + font-size: clamp(2rem, 5vw, 3.5rem); +} + +.article-prose h2 { + margin: 2.2rem 0 0.75rem; + font-size: clamp(1.55rem, 3vw, 2.2rem); +} + +.article-prose h3 { + margin: 1.7rem 0 0.65rem; + font-size: 1.25rem; +} + +.article-prose p, +.article-prose ul, +.article-prose ol { + margin: 1rem 0; +} + +.article-prose ul, +.article-prose ol { + padding-left: 1.35rem; +} + +.article-prose li + li { + margin-top: 0.42rem; +} + +.article-prose a { + color: var(--accent); + font-weight: 700; + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 0.18em; +} + +.article-prose code { + border: 1px solid var(--line); + border-radius: var(--radius-sm); + background: var(--bg-elevated); + color: var(--ink); + padding: 0.08rem 0.28rem; + font-size: 0.9em; +} + +.article-prose pre { + overflow-x: auto; + border: 1px solid var(--line); + border-radius: var(--radius-md); + background: var(--bg-elevated); + color: var(--ink); + padding: 1rem; +} + +.article-prose pre code { + border: 0; + background: transparent; + color: inherit; + padding: 0; +} + +.article-prose .expressive-code .frame { + border-color: var(--line) !important; + background: var(--bg-elevated) !important; + border-radius: var(--radius-md) !important; + overflow: hidden; +} + +.article-prose .expressive-code .frame figcaption.header { + display: none !important; +} + +.article-prose .expressive-code pre { + margin: 0 !important; + border: 0 !important; + border-radius: 0 !important; + background: var(--bg-elevated) !important; + color: var(--ink) !important; +} + +.article-prose .expressive-code .code, +.article-prose .expressive-code .code span { + color: var(--ink) !important; +} + +.release-shell { + max-width: 900px; +} + +.release-header h1 { + max-width: 820px; + font-size: clamp(1.9rem, 3.5vw, 3.1rem); + line-height: 1.04; +} + +.release-prose h2 { + margin-top: 3rem; +} + +.release-prose h3 { + margin-top: 1.9rem; + padding-top: 1.4rem; + border-top: 1px solid var(--line); +} + +.release-media { + margin: 1.6rem 0 2.4rem; +} + +.release-media video { + display: block; + width: 100%; + border: 1px solid var(--line); + border-radius: var(--radius-md); + background: var(--bg-elevated); +} + +.release-media figcaption { + margin-top: 0.75rem; + color: color-mix(in srgb, var(--ink) 52%, var(--muted)); + font-family: var(--mono); + font-size: 0.78rem; + line-height: 1.5; +} + +.release-video-placeholder { + display: grid; + min-height: 19rem; + place-items: center; + border: 1px solid var(--line); + border-radius: var(--radius-md); + background: + linear-gradient(135deg, color-mix(in srgb, var(--accent) 10%, transparent), transparent 42%), + var(--bg-elevated); + color: var(--ink); + padding: 2rem; + text-align: center; +} + +.release-video-placeholder span { + color: var(--accent); + font-family: var(--mono); + font-size: 0.74rem; + font-weight: 800; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.release-video-placeholder strong { + display: block; + margin-top: 0.6rem; + font-size: clamp(1.5rem, 4vw, 2.6rem); + line-height: 1; + letter-spacing: -0.055em; +} + +.release-video-placeholder code { + margin-top: 1rem; + overflow-wrap: anywhere; +} + +@media (max-width: 1040px) { + .article-layout { + display: block; + max-width: 860px; + } + + .article-toc { + display: none; + } +} + @media (prefers-reduced-motion: reduce) { *, *::before, diff --git a/website/index.html b/website/index.html index 8c12956b..a844442d 100644 --- a/website/index.html +++ b/website/index.html @@ -67,9 +67,12 @@ herdr