You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2026/10/26 17:06:10 UTC
(juneau) branch docs updated: Play the agent build-board article's recording as an MP4 video (2:58, with a poster frame) instead of an asciinema cast; remove the CastPlayer component, the asciinema-player dependency and static/casts; and correct the caption to say the side pane runs push.py and that parts of the test runs are cut.
This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/docs by this push:
new cac80cd3a3 Play the agent build-board article's recording as an MP4 video (2:58, with a poster frame) instead of an asciinema cast; remove the CastPlayer component, the asciinema-player dependency and static/casts; and correct the caption to say the side pane runs push.py and that parts of the test runs are cut.
cac80cd3a3 is described below
commit cac80cd3a3346cd77b2b4c778b7e5087769f7fc2
Author: James Bognar <ja...@apache.org>
AuthorDate: Mon Oct 26 13:05:59 2026 -0400
Play the agent build-board article's recording as an MP4 video (2:58, with a poster frame) instead of an asciinema cast; remove the CastPlayer component, the asciinema-player dependency and static/casts; and correct the caption to say the side pane runs push.py and that parts of the test runs are cut.
---
package-lock.json | 91 --------------------------
package.json | 1 -
pages/developer-info/05.01.AgentBuildBoard.md | 6 +-
src/components/CastPlayer/index.tsx | 52 ---------------
static/casts/juneau-build-board.cast | 6 --
static/videos/juneau-build-board.jpg | Bin 0 -> 118911 bytes
static/videos/juneau-build-board.mp4 | Bin 0 -> 10523424 bytes
7 files changed, 2 insertions(+), 154 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 8f0a42d643..7ba179100b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,6 @@
"@docusaurus/preset-classic": "3.8.1",
"@docusaurus/theme-mermaid": "3.8.1",
"@mdx-js/react": "^3.0.0",
- "asciinema-player": "^3.17.0",
"clsx": "^2.0.0",
"jsdom": "^27.0.0",
"markdown-it": "^14.1.0",
@@ -5353,36 +5352,6 @@
"micromark-util-symbol": "^1.0.1"
}
},
- "node_modules/@solid-primitives/refs": {
- "version": "1.1.4",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/@solid-primitives/refs/-/refs-1.1.4.tgz",
- "integrity": "sha512-bLjwIs6ZPu8NQnuw04sU3Zc8qKSpbc0umUU/O4SHf6oWOdO4+dHY8vb1T7C4b/Tg103+9WGr6sEE0+NFlbaB/A==",
- "license": "MIT",
- "dependencies": {
- "@solid-primitives/utils": "^6.4.1"
- },
- "peerDependencies": {
- "solid-js": "^1.6.12"
- }
- },
- "node_modules/@solid-primitives/transition-group": {
- "version": "1.1.2",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/@solid-primitives/transition-group/-/transition-group-1.1.2.tgz",
- "integrity": "sha512-gnHS0OmcdjeoHN9n7Khu8KNrOlRc8a2weETDt2YT6o1zeW/XtUC6Db3Q9pkMU/9cCKdEmN4b0a/41MKAHRhzWA==",
- "license": "MIT",
- "peerDependencies": {
- "solid-js": "^1.6.12"
- }
- },
- "node_modules/@solid-primitives/utils": {
- "version": "6.4.1",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/@solid-primitives/utils/-/utils-6.4.1.tgz",
- "integrity": "sha512-ISSB5QX1qP2ynrheIpYwc4oKR5Ny4siNuUyf1qZniy+Il+p/PtDB0QK1Dnle8noiHpwRD3gpPdubOC3qI/Zamg==",
- "license": "MIT",
- "peerDependencies": {
- "solid-js": "^1.6.12"
- }
- },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
@@ -6852,17 +6821,6 @@
"node": ">=8"
}
},
- "node_modules/asciinema-player": {
- "version": "3.17.0",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/asciinema-player/-/asciinema-player-3.17.0.tgz",
- "integrity": "sha512-JbjNJmA2TLIeYNaOEja+kVSzXadKoqpIzVVmfBGNj2DmdtE/vExBCnkE8NYEcpaQcDvUYg8Ltt0urT80frACmw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime": "^7.21.0",
- "solid-js": "^1.3.0",
- "solid-transition-group": "^0.2.3"
- }
- },
"node_modules/astring": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
@@ -18418,27 +18376,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/seroval": {
- "version": "1.6.12",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/seroval/-/seroval-1.6.12.tgz",
- "integrity": "sha512-CqbIVfk/7GL3ITwZI55lcPbpQbjHZ2DD5cUj4iH7E9YsCfHNJV1mx7yNp86Z84w5IpmkZZS/2s5vPOWmVWSdQg==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/seroval-plugins": {
- "version": "1.6.12",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/seroval-plugins/-/seroval-plugins-1.6.12.tgz",
- "integrity": "sha512-+reiwp/lYxiyctSrdvX7OQ1YLrcbWYgBiZrhSFL+V43b0/DGRLNVSDyZINbQe+tWplPOI2fw2dPrdv6hcc09kQ==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "seroval": "^1.0"
- }
- },
"node_modules/serve-handler": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
@@ -18792,34 +18729,6 @@
"websocket-driver": "^0.7.4"
}
},
- "node_modules/solid-js": {
- "version": "1.9.17",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/solid-js/-/solid-js-1.9.17.tgz",
- "integrity": "sha512-4GAmLOWPfNV8H9Jfn2LSFTpNEG6jiOKPiwd5lnLGQtehHaX6l3TOLzJqQ7mqwB/3k1Yy3zyumFVopmc/tm34ow==",
- "license": "MIT",
- "dependencies": {
- "csstype": "^3.1.0",
- "seroval": "~1.6.8",
- "seroval-plugins": "~1.6.8"
- }
- },
- "node_modules/solid-transition-group": {
- "version": "0.2.3",
- "resolved": "https://nexus-proxy.repo.local.sfdc.net/nexus/content/groups/npm-all/solid-transition-group/-/solid-transition-group-0.2.3.tgz",
- "integrity": "sha512-iB72c9N5Kz9ykRqIXl0lQohOau4t0dhel9kjwFvx81UZJbVwaChMuBuyhiZmK24b8aKEK0w3uFM96ZxzcyZGdg==",
- "license": "MIT",
- "dependencies": {
- "@solid-primitives/refs": "^1.0.5",
- "@solid-primitives/transition-group": "^1.0.2"
- },
- "engines": {
- "node": ">=18.0.0",
- "pnpm": ">=8.6.0"
- },
- "peerDependencies": {
- "solid-js": "^1.6.12"
- }
- },
"node_modules/sort-css-media-queries": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz",
diff --git a/package.json b/package.json
index e251a55910..01467f0112 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,6 @@
"@docusaurus/preset-classic": "3.8.1",
"@docusaurus/theme-mermaid": "3.8.1",
"@mdx-js/react": "^3.0.0",
- "asciinema-player": "^3.17.0",
"clsx": "^2.0.0",
"jsdom": "^27.0.0",
"markdown-it": "^14.1.0",
diff --git a/pages/developer-info/05.01.AgentBuildBoard.md b/pages/developer-info/05.01.AgentBuildBoard.md
index 8c53812e91..1702708b0d 100644
--- a/pages/developer-info/05.01.AgentBuildBoard.md
+++ b/pages/developer-info/05.01.AgentBuildBoard.md
@@ -3,13 +3,11 @@ title: "Watching builds from an AI agent: the juneau-terminal board"
slug: AgentBuildBoard
---
-import CastPlayer from '@site/src/components/CastPlayer';
-
AI coding agents such as [Claude Code](https://www.anthropic.com/claude-code) run builds and test suites for you. A full Maven build prints thousands of lines that neither the agent nor you will read, and while it runs the agent just waits. The `juneau-terminal` board gives both of you a compact live view instead: one row per step, a progress bar, test counts and a time estimate.
-Below, Claude Code sits on the left of a tmux window. On the right, a side pane runs `python3 scripts/test.py --console board` on the Juneau reactor. Idle time in the recording is shortened.
+Below, Claude Code sits on the left of a tmux window. On the right, a side pane runs `python3 scripts/push.py`, which builds and tests the Juneau reactor and then commits and pushes. The board is on top and the full log below it. Idle time in the recording is shortened, and parts of the Java and Python test runs are cut.
-<CastPlayer src="/casts/juneau-build-board.cast" idleTimeLimit={2} />
+<video controls muted playsInline preload="none" poster="/videos/juneau-build-board.jpg" src="/videos/juneau-build-board.mp4" style={{width: '100%'}}></video>
## How it works
diff --git a/src/components/CastPlayer/index.tsx b/src/components/CastPlayer/index.tsx
deleted file mode 100644
index 493cf842ac..0000000000
--- a/src/components/CastPlayer/index.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-
-import {useEffect, useRef, type ReactNode} from 'react';
-import BrowserOnly from '@docusaurus/BrowserOnly';
-import useBaseUrl from '@docusaurus/useBaseUrl';
-
-type Props = {
- /** Site-relative path of the `.cast` file, e.g. `/casts/demo.cast`. */
- src: string;
- /** Time to show before playback starts, e.g. `npt:0:12`. */
- poster?: string;
- /** Playback speed multiplier. */
- speed?: number;
- /** Longest pause, in seconds, that plays back as is. */
- idleTimeLimit?: number;
-};
-
-function Player({src, poster, speed, idleTimeLimit}: Props): ReactNode {
- const host = useRef<HTMLDivElement>(null);
- const url = useBaseUrl(src);
- useEffect(() => {
- let player: {dispose: () => void} | undefined;
- let cancelled = false;
- // The player touches `window`, so it is loaded only once the page is in a browser.
- void Promise.all([import('asciinema-player'), import('asciinema-player/dist/bundle/asciinema-player.css')]).then(
- ([lib]) => {
- if (cancelled || !host.current) return;
- player = lib.create(url, host.current, {poster, speed, idleTimeLimit, fit: 'width'});
- },
- );
- return () => {
- cancelled = true;
- player?.dispose();
- };
- }, [url, poster, speed, idleTimeLimit]);
- return <div ref={host} />;
-}
-
-export default function CastPlayer(props: Props): ReactNode {
- return <BrowserOnly fallback={<p>Loading the recording...</p>}>{() => <Player {...props} />}</BrowserOnly>;
-}
diff --git a/static/casts/juneau-build-board.cast b/static/casts/juneau-build-board.cast
deleted file mode 100644
index 21c300bfac..0000000000
--- a/static/casts/juneau-build-board.cast
+++ /dev/null
@@ -1,6 +0,0 @@
-{"version": 3, "term": {"cols": 80, "rows": 12, "type": "xterm-256color"}, "timestamp": 1793000000, "idle_time_limit": 2, "title": "PLACEHOLDER recording of the juneau-terminal board"}
-[0.3, "o", "\u001b[1mPLACEHOLDER\u001b[0m: the real recording of the juneau-terminal board replaces this file.\r\n\r\n"]
-[0.8, "o", "$ python3 scripts/test.py --console board\r\n"]
-[0.6, "o", " Compile #####----- (placeholder)\r\n"]
-[0.6, "o", " Java tests ########## (placeholder)\r\n"]
-[0.8, "o", "\r\n\u001b[32mplaceholder done\u001b[0m\r\n"]
diff --git a/static/videos/juneau-build-board.jpg b/static/videos/juneau-build-board.jpg
new file mode 100644
index 0000000000..1f41ea3017
Binary files /dev/null and b/static/videos/juneau-build-board.jpg differ
diff --git a/static/videos/juneau-build-board.mp4 b/static/videos/juneau-build-board.mp4
new file mode 100644
index 0000000000..4a4d2116f6
Binary files /dev/null and b/static/videos/juneau-build-board.mp4 differ