Refactor subagent extension into focused modules - #4
Merged
Informant fa2915a4 / Informant / test
succeeded
Aug 15, 2026 in 25s
test passed
Ran on blackbird.local.
Details
Preparing container image informant-prepared-container:399999954d8ba6b8#1 [resolver] fetching image...docker.io/oven/bun:1.3.10
#1 DONE 0.0s
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 431B 0.0s done
#2 DONE 0.0s
#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s
#4 [internal] load build context
#4 DONE 0.0s
#5 oci-layout://docker.io/oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e
#5 resolve docker.io/oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e 0.0s done
#5 DONE 0.0s
#4 [internal] load build context
#4 transferring context: 116.74kB 0.0s done
#4 DONE 0.0s
#5 oci-layout://docker.io/oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e
#5 sha256:f69bb445097646a32e017dacebe502cd844ad72698e9ff051aad675239e0bbaa 139B / 139B 0.0s done
#5 sha256:1ba5c011290f77fe95770bdd23e4e35e0a48178250f572c5a8d804c91b9d722f 3.40kB / 3.40kB 0.0s done
#5 sha256:04320dec943a7f38f1d0aa5b94f6afe324acba10ee877aaa82907b17c6f3d488 185B / 185B 0.0s done
#5 sha256:4c2f73d039a5ec9bdd708fd83051c2e2aebe2d016706e5e1654aa2e3ab911532 296B / 296B 0.0s done
#5 sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e 8.39MB / 40.51MB 0.2s
#5 sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e 18.87MB / 40.51MB 0.3s
#5 sha256:ac9148dc57ca750b09f3f3da6f16324e1a3b62432b2726734535ec610e1a9232 8.39MB / 49.65MB 0.2s
#5 sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e 32.51MB / 40.51MB 0.5s
#5 sha256:ac9148dc57ca750b09f3f3da6f16324e1a3b62432b2726734535ec610e1a9232 18.87MB / 49.65MB 0.3s
#5 sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e 40.51MB / 40.51MB 0.5s done
#5 sha256:ac9148dc57ca750b09f3f3da6f16324e1a3b62432b2726734535ec610e1a9232 49.65MB / 49.65MB 0.6s done
#5 extracting sha256:ac9148dc57ca750b09f3f3da6f16324e1a3b62432b2726734535ec610e1a9232
#5 extracting sha256:ac9148dc57ca750b09f3f3da6f16324e1a3b62432b2726734535ec610e1a9232 0.5s done
#5 DONE 1.2s
#5 oci-layout://docker.io/oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e
#5 extracting sha256:4c2f73d039a5ec9bdd708fd83051c2e2aebe2d016706e5e1654aa2e3ab911532 done
#5 extracting sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e
#5 extracting sha256:557f3e7ffdc8b7c80b94ffea3450e8ce40b0716949627e7cce495a34a1fa274e 0.3s done
#5 DONE 1.5s
#5 oci-layout://docker.io/oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e
#5 extracting sha256:04320dec943a7f38f1d0aa5b94f6afe324acba10ee877aaa82907b17c6f3d488 done
#5 extracting sha256:1ba5c011290f77fe95770bdd23e4e35e0a48178250f572c5a8d804c91b9d722f done
#5 extracting sha256:f69bb445097646a32e017dacebe502cd844ad72698e9ff051aad675239e0bbaa done
#5 DONE 1.5s
#6 [linux/arm64/v8 1/5] COPY informant-prepare.sh /tmp/informant-prepare.sh
#6 DONE 0.2s
#7 [linux/arm64/v8 2/5] COPY [informant-prepare-inputs/bun.lock,/workspace/bun.lock]
#7 DONE 0.0s
#8 [linux/arm64/v8 3/5] COPY [informant-prepare-inputs/package.json,/workspace/package.json]
#8 DONE 0.0s
#9 [linux/arm64 4/5] RUN INFORMANT_PREPARE_ROOT=/workspace /bin/sh -lc 'cd "$INFORMANT_PREPARE_ROOT" && . /tmp/informant-prepare.sh' && rm -f /tmp/informant-prepare.sh
#9 0.090 Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
#9 0.130 Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
#9 0.140 Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
#9 0.154 Get:4 http://deb.debian.org/debian trixie/main arm64 Packages [9607 kB]
#9 0.268 Get:5 http://deb.debian.org/debian trixie-updates/main arm64 Packages [4424 B]
#9 0.274 Get:6 http://deb.debian.org/debian-security trixie-security/main arm64 Packages [244 kB]
#9 0.801 Fetched 10.1 MB in 1s (13.3 MB/s)
#9 0.801 Reading package lists...
#9 1.049 Reading package lists...
#9 1.293 Building dependency tree...
#9 1.359 Reading state information...
#9 1.454 The following additional packages will be installed:
#9 1.454 git-man libbrotli1 libcom-err2 libcurl3t64-gnutls liberror-perl libexpat1
#9 1.454 libffi8 libgdbm-compat4t64 libgdbm6t64 libgnutls30t64 libgssapi-krb5-2
#9 1.454 libidn2-0 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap2
#9 1.454 liblsof0 libnghttp2-14 libnghttp3-9 libngtcp2-16 libngtcp2-crypto-gnutls8
#9 1.455 libp11-kit0 libperl5.40 libpsl5t64 librtmp1 libsasl2-2 libsasl2-modules-db
#9 1.455 libssh2-1t64 libtasn1-6 libtirpc-common libtirpc3t64 libunistring5 perl
#9 1.455 perl-modules-5.40
#9 1.455 Suggested packages:
#9 1.455 gettext-base git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki
#9 1.455 git-svn gdbm-l10n gnutls-bin krb5-doc krb5-user sensible-utils perl-doc
#9 1.455 libterm-readline-gnu-perl | libterm-readline-perl-perl make
#9 1.455 libtap-harness-archive-perl
#9 1.455 Recommended packages:
#9 1.455 ca-certificates patch less ssh-client krb5-locales libldap-common
#9 1.455 publicsuffix libsasl2-modules netbase
#9 1.566 The following NEW packages will be installed:
#9 1.566 git git-man libbrotli1 libcom-err2 libcurl3t64-gnutls liberror-perl
#9 1.567 libexpat1 libffi8 libgdbm-compat4t64 libgdbm6t64 libgnutls30t64
#9 1.567 libgssapi-krb5-2 libidn2-0 libk5crypto3 libkeyutils1 libkrb5-3
#9 1.567 libkrb5support0 libldap2 liblsof0 libnghttp2-14 libnghttp3-9 libngtcp2-16
#9 1.567 libngtcp2-crypto-gnutls8 libp11-kit0 libperl5.40 libpsl5t64 librtmp1
#9 1.567 libsasl2-2 libsasl2-modules-db libssh2-1t64 libtasn1-6 libtirpc-common
#9 1.567 libtirpc3t64 libunistring5 lsof perl perl-modules-5.40
#9 1.603 0 upgraded, 37 newly installed, 0 to remove and 23 not upgraded.
#9 1.603 Need to get 23.6 MB of archives.
#9 1.603 After this operation, 124 MB of additional disk space will be used.
#9 1.603 Get:1 http://deb.debian.org/debian-security trixie-security/main arm64 libexpat1 arm64 2.8.2-1~deb13u1 [108 kB]
#9 1.648 Get:2 http://deb.debian.org/debian trixie/main arm64 liblsof0 arm64 4.99.4+dfsg-2 [128 kB]
#9 1.661 Get:3 http://deb.debian.org/debian trixie/main arm64 libkrb5support0 arm64 1.21.3-5+deb13u1 [32.5 kB]
#9 1.663 Get:4 http://deb.debian.org/debian trixie/main arm64 libcom-err2 arm64 1.47.2-3+b11 [24.9 kB]
#9 1.663 Get:5 http://deb.debian.org/debian trixie/main arm64 libk5crypto3 arm64 1.21.3-5+deb13u1 [81.4 kB]
#9 1.667 Get:6 http://deb.debian.org/debian trixie/main arm64 libkeyutils1 arm64 1.6.3-6 [9716 B]
#9 1.667 Get:7 http://deb.debian.org/debian trixie/main arm64 libkrb5-3 arm64 1.21.3-5+deb13u1 [308 kB]
#9 1.680 Get:8 http://deb.debian.org/debian trixie/main arm64 libgssapi-krb5-2 arm64 1.21.3-5+deb13u1 [128 kB]
#9 1.685 Get:9 http://deb.debian.org/debian trixie/main arm64 libtirpc-common all 1.3.6+ds-1 [11.0 kB]
#9 1.685 Get:10 http://deb.debian.org/debian trixie/main arm64 libtirpc3t64 arm64 1.3.6+ds-1 [79.1 kB]
#9 1.685 Get:11 http://deb.debian.org/debian trixie/main arm64 lsof arm64 4.99.4+dfsg-2 [306 kB]
#9 1.691 Get:12 http://deb.debian.org/debian trixie/main arm64 perl-modules-5.40 all 5.40.1-6 [3019 kB]
#9 1.725 Get:13 http://deb.debian.org/debian trixie/main arm64 libgdbm6t64 arm64 1.24-2 [74.0 kB]
#9 1.725 Get:14 http://deb.debian.org/debian trixie/main arm64 libgdbm-compat4t64 arm64 1.24-2 [50.3 kB]
#9 1.726 Get:15 http://deb.debian.org/debian trixie/main arm64 libperl5.40 arm64 5.40.1-6 [4142 kB]
#9 1.766 Get:16 http://deb.debian.org/debian trixie/main arm64 perl arm64 5.40.1-6 [267 kB]
#9 1.766 Get:17 http://deb.debian.org/debian trixie/main arm64 libbrotli1 arm64 1.1.0-2+b7 [308 kB]
#9 1.769 Get:18 http://deb.debian.org/debian trixie/main arm64 libunistring5 arm64 1.3-2 [453 kB]
#9 1.773 Get:19 http://deb.debian.org/debian trixie/main arm64 libidn2-0 arm64 2.3.8-2 [107 kB]
#9 1.774 Get:20 http://deb.debian.org/debian trixie/main arm64 libffi8 arm64 3.4.8-2 [21.3 kB]
#9 1.774 Get:21 http://deb.debian.org/debian trixie/main arm64 libp11-kit0 arm64 0.25.5-3 [409 kB]
#9 1.777 Get:22 http://deb.debian.org/debian trixie/main arm64 libtasn1-6 arm64 4.20.0-2+deb13u1 [47.3 kB]
#9 1.778 Get:23 http://deb.debian.org/debian trixie/main arm64 libgnutls30t64 arm64 3.8.9-3+deb13u4 [1379 kB]
#9 1.788 Get:24 http://deb.debian.org/debian trixie/main arm64 libsasl2-modules-db arm64 2.1.28+dfsg1-9 [20.1 kB]
#9 1.793 Get:25 http://deb.debian.org/debian trixie/main arm64 libsasl2-2 arm64 2.1.28+dfsg1-9 [55.6 kB]
#9 1.795 Get:26 http://deb.debian.org/debian trixie/main arm64 libldap2 arm64 2.6.10+dfsg-1 [179 kB]
#9 1.797 Get:27 http://deb.debian.org/debian trixie/main arm64 libnghttp2-14 arm64 1.64.0-1.1+deb13u1 [71.6 kB]
#9 1.797 Get:28 http://deb.debian.org/debian trixie/main arm64 libnghttp3-9 arm64 1.8.0-1 [63.2 kB]
#9 1.798 Get:29 http://deb.debian.org/debian trixie/main arm64 libngtcp2-16 arm64 1.11.0-1+deb13u1 [121 kB]
#9 1.802 Get:30 http://deb.debian.org/debian trixie/main arm64 libngtcp2-crypto-gnutls8 arm64 1.11.0-1+deb13u1 [28.4 kB]
#9 1.804 Get:31 http://deb.debian.org/debian trixie/main arm64 libpsl5t64 arm64 0.21.2-1.1+b1 [57.1 kB]
#9 1.805 Get:32 http://deb.debian.org/debian trixie/main arm64 librtmp1 arm64 2.4+20151223.gitfa8646d.1-2+b5 [56.8 kB]
#9 1.806 Get:33 http://deb.debian.org/debian trixie/main arm64 libssh2-1t64 arm64 1.11.1-1+deb13u1 [236 kB]
#9 1.808 Get:34 http://deb.debian.org/debian trixie/main arm64 libcurl3t64-gnutls arm64 8.14.1-2+deb13u4 [354 kB]
#9 1.817 Get:35 http://deb.debian.org/debian trixie/main arm64 liberror-perl all 0.17030-1 [26.9 kB]
#9 1.817 Get:36 http://deb.debian.org/debian trixie/main arm64 git-man all 1:2.47.3-0+deb13u1 [2205 kB]
#9 1.837 Get:37 http://deb.debian.org/debian trixie/main arm64 git arm64 1:2.47.3-0+deb13u1 [8666 kB]
#9 2.452 Fetched 23.6 MB in 0s (71.6 MB/s)
#9 2.457 Selecting previously unselected package libexpat1:arm64.
#9 2.457 (Reading database ...
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 4934 files and directories currently installed.)
#9 2.459 Preparing to unpack .../00-libexpat1_2.8.2-1~deb13u1_arm64.deb ...
#9 2.459 Unpacking libexpat1:arm64 (2.8.2-1~deb13u1) ...
#9 2.468 Selecting previously unselected package liblsof0.
#9 2.469 Preparing to unpack .../01-liblsof0_4.99.4+dfsg-2_arm64.deb ...
#9 2.469 Unpacking liblsof0 (4.99.4+dfsg-2) ...
#9 2.476 Selecting previously unselected package libkrb5support0:arm64.
#9 2.476 Preparing to unpack .../02-libkrb5support0_1.21.3-5+deb13u1_arm64.deb ...
#9 2.476 Unpacking libkrb5support0:arm64 (1.21.3-5+deb13u1) ...
#9 2.482 Selecting previously unselected package libcom-err2:arm64.
#9 2.482 Preparing to unpack .../03-libcom-err2_1.47.2-3+b11_arm64.deb ...
#9 2.483 Unpacking libcom-err2:arm64 (1.47.2-3+b11) ...
#9 2.487 Selecting previously unselected package libk5crypto3:arm64.
#9 2.488 Preparing to unpack .../04-libk5crypto3_1.21.3-5+deb13u1_arm64.deb ...
#9 2.488 Unpacking libk5crypto3:arm64 (1.21.3-5+deb13u1) ...
#9 2.495 Selecting previously unselected package libkeyutils1:arm64.
#9 2.496 Preparing to unpack .../05-libkeyutils1_1.6.3-6_arm64.deb ...
#9 2.496 Unpacking libkeyutils1:arm64 (1.6.3-6) ...
#9 2.501 Selecting previously unselected package libkrb5-3:arm64.
#9 2.501 Preparing to unpack .../06-libkrb5-3_1.21.3-5+deb13u1_arm64.deb ...
#9 2.501 Unpacking libkrb5-3:arm64 (1.21.3-5+deb13u1) ...
#9 2.518 Selecting previously unselected package libgssapi-krb5-2:arm64.
#9 2.518 Preparing to unpack .../07-libgssapi-krb5-2_1.21.3-5+deb13u1_arm64.deb ...
#9 2.518 Unpacking libgssapi-krb5-2:arm64 (1.21.3-5+deb13u1) ...
#9 2.527 Selecting previously unselected package libtirpc-common.
#9 2.527 Preparing to unpack .../08-libtirpc-common_1.3.6+ds-1_all.deb ...
#9 2.528 Unpacking libtirpc-common (1.3.6+ds-1) ...
#9 2.533 Selecting previously unselected package libtirpc3t64:arm64.
#9 2.533 Preparing to unpack .../09-libtirpc3t64_1.3.6+ds-1_arm64.deb ...
#9 2.534 Adding 'diversion of /lib/aarch64-linux-gnu/libtirpc.so.3 to /lib/aarch64-linux-gnu/libtirpc.so.3.usr-is-merged by libtirpc3t64'
#9 2.536 Adding 'diversion of /lib/aarch64-linux-gnu/libtirpc.so.3.0.0 to /lib/aarch64-linux-gnu/libtirpc.so.3.0.0.usr-is-merged by libtirpc3t64'
#9 2.536 Unpacking libtirpc3t64:arm64 (1.3.6+ds-1) ...
#9 2.543 Selecting previously unselected package lsof.
#9 2.543 Preparing to unpack .../10-lsof_4.99.4+dfsg-2_arm64.deb ...
#9 2.544 Unpacking lsof (4.99.4+dfsg-2) ...
#9 2.558 Selecting previously unselected package perl-modules-5.40.
#9 2.558 Preparing to unpack .../11-perl-modules-5.40_5.40.1-6_all.deb ...
#9 2.558 Unpacking perl-modules-5.40 (5.40.1-6) ...
#9 2.694 Selecting previously unselected package libgdbm6t64:arm64.
#9 2.694 Preparing to unpack .../12-libgdbm6t64_1.24-2_arm64.deb ...
#9 2.694 Unpacking libgdbm6t64:arm64 (1.24-2) ...
#9 2.701 Selecting previously unselected package libgdbm-compat4t64:arm64.
#9 2.702 Preparing to unpack .../13-libgdbm-compat4t64_1.24-2_arm64.deb ...
#9 2.702 Unpacking libgdbm-compat4t64:arm64 (1.24-2) ...
#9 2.709 Selecting previously unselected package libperl5.40:arm64.
#9 2.709 Preparing to unpack .../14-libperl5.40_5.40.1-6_arm64.deb ...
#9 2.710 Unpacking libperl5.40:arm64 (5.40.1-6) ...
#9 2.872 Selecting previously unselected package perl.
#9 2.872 Preparing to unpack .../15-perl_5.40.1-6_arm64.deb ...
#9 2.872 Unpacking perl (5.40.1-6) ...
#9 2.886 Selecting previously unselected package libbrotli1:arm64.
#9 2.887 Preparing to unpack .../16-libbrotli1_1.1.0-2+b7_arm64.deb ...
#9 2.887 Unpacking libbrotli1:arm64 (1.1.0-2+b7) ...
#9 2.904 Selecting previously unselected package libunistring5:arm64.
#9 2.904 Preparing to unpack .../17-libunistring5_1.3-2_arm64.deb ...
#9 2.904 Unpacking libunistring5:arm64 (1.3-2) ...
#9 2.928 Selecting previously unselected package libidn2-0:arm64.
#9 2.928 Preparing to unpack .../18-libidn2-0_2.3.8-2_arm64.deb ...
#9 2.929 Unpacking libidn2-0:arm64 (2.3.8-2) ...
#9 2.948 Selecting previously unselected package libffi8:arm64.
#9 2.948 Preparing to unpack .../19-libffi8_3.4.8-2_arm64.deb ...
#9 2.949 Unpacking libffi8:arm64 (3.4.8-2) ...
#9 2.954 Selecting previously unselected package libp11-kit0:arm64.
#9 2.954 Preparing to unpack .../20-libp11-kit0_0.25.5-3_arm64.deb ...
#9 2.954 Unpacking libp11-kit0:arm64 (0.25.5-3) ...
#9 2.971 Selecting previously unselected package libtasn1-6:arm64.
#9 2.972 Preparing to unpack .../21-libtasn1-6_4.20.0-2+deb13u1_arm64.deb ...
#9 2.972 Unpacking libtasn1-6:arm64 (4.20.0-2+deb13u1) ...
#9 2.979 Selecting previously unselected package libgnutls30t64:arm64.
#9 2.979 Preparing to unpack .../22-libgnutls30t64_3.8.9-3+deb13u4_arm64.deb ...
#9 2.980 Unpacking libgnutls30t64:arm64 (3.8.9-3+deb13u4) ...
#9 3.020 Selecting previously unselected package libsasl2-modules-db:arm64.
#9 3.020 Preparing to unpack .../23-libsasl2-modules-db_2.1.28+dfsg1-9_arm64.deb ...
#9 3.021 Unpacking libsasl2-modules-db:arm64 (2.1.28+dfsg1-9) ...
#9 3.025 Selecting previously unselected package libsasl2-2:arm64.
#9 3.026 Preparing to unpack .../24-libsasl2-2_2.1.28+dfsg1-9_arm64.deb ...
#9 3.026 Unpacking libsasl2-2:arm64 (2.1.28+dfsg1-9) ...
#9 3.032 Selecting previously unselected package libldap2:arm64.
#9 3.032 Preparing to unpack .../25-libldap2_2.6.10+dfsg-1_arm64.deb ...
#9 3.033 Unpacking libldap2:arm64 (2.6.10+dfsg-1) ...
#9 3.043 Selecting previously unselected package libnghttp2-14:arm64.
#9 3.044 Preparing to unpack .../26-libnghttp2-14_1.64.0-1.1+deb13u1_arm64.deb ...
#9 3.044 Unpacking libnghttp2-14:arm64 (1.64.0-1.1+deb13u1) ...
#9 3.051 Selecting previously unselected package libnghttp3-9:arm64.
#9 3.051 Preparing to unpack .../27-libnghttp3-9_1.8.0-1_arm64.deb ...
#9 3.052 Unpacking libnghttp3-9:arm64 (1.8.0-1) ...
#9 3.058 Selecting previously unselected package libngtcp2-16:arm64.
#9 3.059 Preparing to unpack .../28-libngtcp2-16_1.11.0-1+deb13u1_arm64.deb ...
#9 3.059 Unpacking libngtcp2-16:arm64 (1.11.0-1+deb13u1) ...
#9 3.068 Selecting previously unselected package libngtcp2-crypto-gnutls8:arm64.
#9 3.068 Preparing to unpack .../29-libngtcp2-crypto-gnutls8_1.11.0-1+deb13u1_arm64.deb ...
#9 3.068 Unpacking libngtcp2-crypto-gnutls8:arm64 (1.11.0-1+deb13u1) ...
#9 3.074 Selecting previously unselected package libpsl5t64:arm64.
#9 3.074 Preparing to unpack .../30-libpsl5t64_0.21.2-1.1+b1_arm64.deb ...
#9 3.074 Unpacking libpsl5t64:arm64 (0.21.2-1.1+b1) ...
#9 3.082 Selecting previously unselected package librtmp1:arm64.
#9 3.082 Preparing to unpack .../31-librtmp1_2.4+20151223.gitfa8646d.1-2+b5_arm64.deb ...
#9 3.082 Unpacking librtmp1:arm64 (2.4+20151223.gitfa8646d.1-2+b5) ...
#9 3.089 Selecting previously unselected package libssh2-1t64:arm64.
#9 3.089 Preparing to unpack .../32-libssh2-1t64_1.11.1-1+deb13u1_arm64.deb ...
#9 3.089 Unpacking libssh2-1t64:arm64 (1.11.1-1+deb13u1) ...
#9 3.100 Selecting previously unselected package libcurl3t64-gnutls:arm64.
#9 3.100 Preparing to unpack .../33-libcurl3t64-gnutls_8.14.1-2+deb13u4_arm64.deb ...
#9 3.100 Unpacking libcurl3t64-gnutls:arm64 (8.14.1-2+deb13u4) ...
#9 3.117 Selecting previously unselected package liberror-perl.
#9 3.117 Preparing to unpack .../34-liberror-perl_0.17030-1_all.deb ...
#9 3.118 Unpacking liberror-perl (0.17030-1) ...
#9 3.123 Selecting previously unselected package git-man.
#9 3.123 Preparing to unpack .../35-git-man_1%3a2.47.3-0+deb13u1_all.deb ...
#9 3.124 Unpacking git-man (1:2.47.3-0+deb13u1) ...
#9 3.174 Selecting previously unselected package git.
#9 3.174 Preparing to unpack .../36-git_1%3a2.47.3-0+deb13u1_arm64.deb ...
#9 3.176 Unpacking git (1:2.47.3-0+deb13u1) ...
#9 3.421 Setting up libexpat1:arm64 (2.8.2-1~deb13u1) ...
#9 3.422 Setting up libkeyutils1:arm64 (1.6.3-6) ...
#9 3.423 Setting up libgdbm6t64:arm64 (1.24-2) ...
#9 3.424 Setting up libgdbm-compat4t64:arm64 (1.24-2) ...
#9 3.425 Setting up liblsof0 (4.99.4+dfsg-2) ...
#9 3.426 Setting up libtirpc-common (1.3.6+ds-1) ...
#9 3.427 Setting up libbrotli1:arm64 (1.1.0-2+b7) ...
#9 3.428 Setting up libnghttp2-14:arm64 (1.64.0-1.1+deb13u1) ...
#9 3.429 Setting up libcom-err2:arm64 (1.47.2-3+b11) ...
#9 3.430 Setting up libkrb5support0:arm64 (1.21.3-5+deb13u1) ...
#9 3.430 Setting up libsasl2-modules-db:arm64 (2.1.28+dfsg1-9) ...
#9 3.431 Setting up libunistring5:arm64 (1.3-2) ...
#9 3.432 Setting up libk5crypto3:arm64 (1.21.3-5+deb13u1) ...
#9 3.433 Setting up libsasl2-2:arm64 (2.1.28+dfsg1-9) ...
#9 3.434 Setting up libnghttp3-9:arm64 (1.8.0-1) ...
#9 3.435 Setting up libffi8:arm64 (3.4.8-2) ...
#9 3.435 Setting up perl-modules-5.40 (5.40.1-6) ...
#9 3.436 Setting up libtasn1-6:arm64 (4.20.0-2+deb13u1) ...
#9 3.437 Setting up git-man (1:2.47.3-0+deb13u1) ...
#9 3.438 Setting up libngtcp2-16:arm64 (1.11.0-1+deb13u1) ...
#9 3.439 Setting up libkrb5-3:arm64 (1.21.3-5+deb13u1) ...
#9 3.439 Setting up libssh2-1t64:arm64 (1.11.1-1+deb13u1) ...
#9 3.440 Setting up libldap2:arm64 (2.6.10+dfsg-1) ...
#9 3.441 Setting up libidn2-0:arm64 (2.3.8-2) ...
#9 3.442 Setting up libperl5.40:arm64 (5.40.1-6) ...
#9 3.442 Setting up perl (5.40.1-6) ...
#9 3.444 Setting up libp11-kit0:arm64 (0.25.5-3) ...
#9 3.445 Setting up libgssapi-krb5-2:arm64 (1.21.3-5+deb13u1) ...
#9 3.446 Setting up libgnutls30t64:arm64 (3.8.9-3+deb13u4) ...
#9 3.447 Setting up libtirpc3t64:arm64 (1.3.6+ds-1) ...
#9 3.448 Setting up libpsl5t64:arm64 (0.21.2-1.1+b1) ...
#9 3.448 Setting up liberror-perl (0.17030-1) ...
#9 3.449 Setting up librtmp1:arm64 (2.4+20151223.gitfa8646d.1-2+b5) ...
#9 3.450 Setting up lsof (4.99.4+dfsg-2) ...
#9 3.451 Setting up libngtcp2-crypto-gnutls8:arm64 (1.11.0-1+deb13u1) ...
#9 3.451 Setting up libcurl3t64-gnutls:arm64 (8.14.1-2+deb13u4) ...
#9 3.452 Setting up git (1:2.47.3-0+deb13u1) ...
#9 3.455 Processing triggers for libc-bin (2.41-12+deb13u1) ...
#9 3.464 bun install v1.3.10 (30e609e0)
#9 4.305
#9 4.305 + @earendil-works/pi-coding-agent@0.84.1
#9 4.305 + @earendil-works/pi-tui@0.84.1
#9 4.305 + @tailwindcss/vite@4.1.18
#9 4.305 + @types/bun@1.3.10
#9 4.305 + @types/node@24.12.0
#9 4.305 + @types/react@19.2.14
#9 4.305 + @types/react-dom@19.2.3
#9 4.305 + @vitejs/plugin-react@5.1.4
#9 4.305 + class-variance-authority@0.7.1
#9 4.305 + clsx@2.1.1
#9 4.305 + lucide-react@0.563.0
#9 4.305 + react@19.2.4
#9 4.305 + react-dom@19.2.4
#9 4.305 + react-markdown@10.1.0
#9 4.305 + remark-gfm@4.0.1
#9 4.305 + tailwind-merge@3.4.0
#9 4.305 + tailwindcss@4.1.18
#9 4.305 + typebox@1.3.7
#9 4.305 + typescript@5.9.3
#9 4.305 + vite@7.3.6
#9 4.305 + @dnd-kit/core@6.3.1
#9 4.305 + @dnd-kit/sortable@10.0.0
#9 4.305 + @dnd-kit/utilities@3.2.2
#9 4.305 + @radix-ui/react-tooltip@1.2.8
#9 4.305 + diff@8.0.3
#9 4.305 + highlight.js@11.11.1
#9 4.305 + proper-lockfile@4.1.2
#9 4.305
#9 4.305 344 packages installed [841.00ms]
#9 DONE 4.7s
#10 exporting to oci image format
#10 exporting layers
#10 exporting layers 6.6s done
#10 exporting manifest sha256:f3dde1921413b49d0e6ad72b322d692600a3121a5240f90625379d7b3db48be5 done
#10 exporting config sha256:861f2a829a1434087539ec15c6ad674b802b03a460974b2089fb5f8023fc5f2b done
#10 exporting manifest list sha256:08ee52f9b52ecac8cdb4c193f8ffbaca81a3ff6c0be7c7f49ad8ae40738d37aa done
#10 sending tarball
#10 sending tarball 0.7s done
#10 DONE 7.3s
informant-prepared-container:399999954d8ba6b8
[2026-08-15T18:44:38.974Z] [test] started
[test] $ set -eu
bun run test
[0/6] [0s]
[1/6] Fetching image [0s]
[2/6] Unpacking image [0s]
[3/6] Fetching kernel [0s]
[4/6] Fetching init image [0s]
[5/6] Unpacking init image [0s]
[6/6] Starting container [0s]
[6/6] Starting container [0s]
$ bun test
bun test v1.3.10 (30e609e0)
tests/delete-session-extension.test.ts:
✓ delete-session rechecks managed worktree ownership after confirmation [2.77ms]
tests/subagents.test.ts:
✓ subagent entrypoint preserves its tool, command, and lifecycle registrations [3.62ms]
✓ compact formatting handles non-JSON values and preserves Unicode code points [0.14ms]
✓ subagent tool output truncates at a valid UTF-8 byte boundary [0.63ms]
✓ subagent footer editor preserves key-release preferences [0.06ms]
✓ subagent detail rendering caches wrapped transcript lines [35.28ms]
✓ creating agents reserve capacity before their session exists [0.05ms]
✓ aborting the main run aborts every running subagent and leaves completed agents alone [0.21ms]
✓ terminal provider errors are classified as failures [0.02ms]
✓ terminal cleanup classification preserves live subagents and archives unread output [0.04ms]
✓ available subagent models honor a configured scope [0.08ms]
✓ inherited subagents reuse headers-only temporary host authentication [5.36ms]
✓ subagent model guidance exposes exact choices and inheritance [0.12ms]
✓ streaming subagent output remains bounded to its newest text [0.06ms]
✓ persisted usage checkpoints reject malformed data [0.08ms]
tests/tailscale.test.ts:
✓ Tailscale web publishing > is opt-in and defaults to HTTPS 8443 [0.13ms]
✓ Tailscale web publishing > publishes the localhost server with background Tailscale Serve [0.27ms]
✓ Tailscale web publishing > removes the configured Pi route immediately when disabled [0.11ms]
✓ Tailscale web publishing > publishes a named service at its service MagicDNS name [0.07ms]
✓ Tailscale web publishing > replaces a previous Serve identity only after the new route is reachable [0.16ms]
✓ Tailscale web publishing > removes an unreachable replacement without removing the previous route [0.14ms]
✓ Tailscale web publishing > does not claim publication until the HTTPS route is reachable [0.06ms]
✓ Tailscale web publishing > reports disconnected Tailscale without preventing localhost startup [0.04ms]
tests/terminal-output.test.ts:
✓ terminal redraws retain only the final visible progress frame [1.75ms]
✓ terminal output handles carriage returns, erasure, and ordinary ANSI colors [0.06ms]
✓ oversized vertical cursor parameters are bounded [64.51ms]
✓ oversized horizontal cursor parameters and aggregate materialization are bounded [387.00ms]
✓ ordinary command output is unchanged [0.09ms]
tests/web-anchored-position.test.ts:
✓ send menu opens above a bottom mobile anchor inside the visual viewport [0.09ms]
✓ portaled menus clamp to shifted mobile visual viewports [0.02ms]
tests/web-assistant-message.test.ts:
✓ aborted assistant turns produce a visible stopped notice [0.04ms]
✓ failed agent ends are distinguishable from successful idle settlement [0.05ms]
tests/web-client-api.test.ts:
✓ one-shot commands fall back across an older daemon protocol [0.05ms]
✓ clone and fork outlive the server's 30-second operation bound [0.06ms]
✓ worktree capability is refreshed for each create request [0.40ms]
✓ command capability is refreshed and a close during connect rejects immediately [0.67ms]
tests/web-file-presence.test.ts:
✓ missing-path reconciliation requires an explicit ENOENT [0.03ms]
✓ path probing distinguishes present and absent files [0.38ms]
tests/web-history.test.ts:
✓ web history drops entries before the latest compaction boundary [0.25ms]
✓ web history reserves space for the compaction summary [0.06ms]
✓ web history remains byte bounded and truncates oversized content [0.58ms]
✓ oversized history images become explicit omission markers [0.51ms]
✓ aggregate image size cannot drop an otherwise valid prompt [0.05ms]
✓ managed context messages become bounded semantic history [0.09ms]
tests/web-http-utils.test.ts:
✓ JSON responses preserve every HeadersInit representation [0.13ms]
✓ static assets reject malformed paths and never serve directories [0.69ms]
tests/web-image-payload.test.ts:
✓ complete prompt frames keep text and multiple images below the websocket limit [135.27ms]
✓ prompt frame accounting uses exact encoded JSON bytes without serializing the frame [55.03ms]
tests/web-local-command.test.ts:
✓ local compact commands survive authoritative history replacement in timestamp order [0.19ms]
✓ local command reconciliation does not duplicate an incoming command [0.02ms]
tests/web-managed-session-store.test.ts:
✓ managed web session ownership survives restart and follows replacement files [0.89ms]
✓ malformed managed session ownership fails closed [0.24ms]
tests/web-paths.test.ts:
✓ web cwd resolution expands shell-style home shortcuts [0.05ms]
✓ web cwd resolution keeps absolute paths and resolves relative paths from the server root [0.01ms]
✓ web cwd resolution rejects unsupported named-user shortcuts [0.02ms]
tests/web-prompts.test.ts:
✓ native web prompts expand Pi prompt templates with quoted arguments and defaults [4.54ms]
✓ prompt arguments preserve empty and escaped quoted values [0.52ms]
✓ web reload routing only accepts the exact built-in command [0.04ms]
✓ web compact routing accepts optional instructions without matching prose [0.06ms]
✓ the web slash menu exposes control commands across stale native metadata [0.08ms]
✓ web skill commands stay intact with their arguments [0.30ms]
tests/web-queue-delivery.test.ts:
✓ queued delivery failures back off and reach a bounded discard disposition [0.05ms]
✓ pre-delivery persistence publishes bounded retries and gates exactly-once delivery [0.18ms]
✓ pre-delivery persistence retry is bounded [0.10ms]
✓ dirty snapshot worker keeps one retry loop during permanent failure [0.24ms]
✓ dirty snapshot worker coalesces multiple accepted removals without losing later state [0.08ms]
✓ dirty snapshot worker restarts when markDirty interleaves with finalization [0.05ms]
✓ dirty snapshot worker performs one bounded final shutdown snapshot [1.27ms]
✓ dirty snapshot worker cancellation drains an in-flight old-identity write [0.11ms]
✓ dirty snapshot worker cancellation interrupts a custom delay [0.07ms]
tests/web-queue-mutation.test.ts:
✓ session queue mutations are deterministic and serialized [0.15ms]
✓ queue mutation quiescing drains admitted work and rejects late intake [0.35ms]
✓ armed queue retry is cancelled during migration and resumed only after intake reopens [0.05ms]
✓ unarmed queue retry is not spuriously scheduled after migration [0.02ms]
✓ exhausted discard persistence failure restores the uncertain snapshot [0.13ms]
✓ failed persistence rolls back only its serialized mutation [0.12ms]
✓ background accepted-removal retry does not retain the mutation tail [0.05ms]
tests/web-queue-store.test.ts:
✓ web follow-up queues survive daemon restarts with attachments [0.86ms]
✓ daemon restart preserves an in-flight item as blocked instead of redelivering or erasing it [0.30ms]
✓ a missing queue store starts empty, but malformed JSON fails closed [0.30ms]
✓ queue store corruption is propagated instead of dropping malformed entries [0.20ms]
✓ shared queue-map mutations roll back globally before a later session snapshots [3.73ms]
✓ failed atomic queue-store renames clean up temporary files [2.64ms]
✓ coalesced queue writes durably preserve the newest snapshot [3.98ms]
tests/web-recent-repositories.test.ts:
✓ recent repositories deduplicate worktrees and use the primary checkout path [0.15ms]
tests/web-refresh-policy.test.ts:
✓ foreground managed refresh propagates migration failures [0.16ms]
✓ complete managed refreshes serialize per record across foreground and background callers [0.11ms]
✓ failed foreground refresh does not poison serialized background refresh [0.06ms]
✓ background managed refresh suppresses failures only when explicitly requested [0.06ms]
tests/web-scroll-follow.test.ts:
✓ layout growth while following stays pinned without showing the down arrow [0.03ms]
✓ an explicit user scroll away from the bottom remains unfollowed
✓ an unpinned reader near the bottom remains frozen during layout changes
✓ passive layout changes cannot resume while the down arrow is visible
✓ explicit downward input at the actual bottom resumes following
✓ anchor correction offsets only visual movement caused above the viewport [0.01ms]
tests/web-semantic-history.test.ts:
✓ reconnect history ignores regenerated wrapper metadata [0.14ms]
tests/web-serialized-writer.test.ts:
✓ prompts and compaction remain uncertain after transport acknowledgement loss [0.05ms]
✓ serialized writes acknowledge completion and preserve order [0.17ms]
✓ serialized writes skip queued work that expires before delivery [0.07ms]
✓ serialized writes report a delivery failure and recover for later writes [0.06ms]
tests/web-server.test.ts:
✓ session ordering defaults to creation time and accepts persistent manual moves [0.21ms]
✓ queued follow-ups can move into any insertion slot without losing attachments [0.09ms]
✓ linked Git worktrees resolve to the same sidebar project [14.92ms]
✓ Git projects expose checkout roots for submodules and bare repositories [26.04ms]
✓ Bun web server keeps tokenless clients inside localhost and same-origin trust boundaries [305.69ms]
✓ TUI metadata changes update every connected web catalog [276.24ms]
✓ managed sessions are published only after their runtime identity is final [559.63ms]
✓ Stop acknowledges delivery without waiting for agent teardown [272.83ms]
✓ an idle native session flushes its restored web follow-up queue on hello [274.99ms]
✓ a visible client can resynchronize a durable queue after a missed reconnect update [272.46ms]
✓ restored uncertain delivery is never automatic and requires explicit reconciliation [386.28ms]
✓ resuming a selected saved session keeps its existing client subscription [330.11ms]
✓ managed RPC requests fail within the configured bound when Pi wedges [331.10ms]
✓ sessions deleted from the TUI are removed from the live web catalog [1272.59ms]
✓ transient session-file access errors do not reconcile as deletion [0.48ms]
✓ saved-session metadata refresh clears hydrated ownership and skips malformed markers [267.62ms]
✓ failed durable queue deletion leaves the session file and record retryable [280.76ms]
✓ deleting a saved managed-worktree session removes its checkout and branch [302.70ms]
✓ worktree cleanup failure does not turn a completed session deletion into an error [271.30ms]
✓ daemon restart completes a staged managed worktree source deletion [265.83ms]
✓ managed startup failure retains an initialized worktree and setup output [315.02ms]
✓ native sessions route the web /compact command with optional instructions [283.79ms]
✓ web reload survives a native bridge reconnect [322.25ms]
✓ queued web reload waits for active subagents and executes as a control command [328.80ms]
✓ native replacement recovery redirects a queue-free source session [325.41ms]
✓ native worktree switches survive the replacement bridge reconnect [1435.63ms]
✓ native sessions expose queued-delivery ordering and context compaction lifecycle [1073.34ms]
✓ browser sessions stay managed and idle across daemon restarts [1489.75ms]
✓ native Pi sessions expose semantic history without replacing their physical TUI [1510.90ms]
tests/web-session-file-catalog.test.ts:
✓ metadata cache results have fresh arrays and current ownership [1.53ms]
✓ deletion reads worktree ownership from a bounded session prefix [0.73ms]
tests/web-session-lifecycle.test.ts:
✓ stale working updates preserve terminal failures until real activity starts [0.64ms]
tests/web-session-queue-coordinator.test.ts:
✓ settle fallback advances queues when agent activity is initially unknown [155.36ms]
✓ uncertain deliveries block steering and all are reported on subscribe [1.17ms]
✓ reordering an uncertain delivery behind an ordinary item still blocks flushing [2.48ms]
✓ queued control commands cannot be converted into steering prompts [0.40ms]
✓ settled failures advance queues without erasing the visible error [1.86ms]
✓ resubmit retry is cancellable and cannot flush a stale record [27.62ms]
tests/web-session-status.test.ts:
✓ offline sessions are labeled inactive regardless of their origin [1.18ms]
✓ active subagents keep an idle main session working and stoppable [0.23ms]
tests/web-session-telemetry.test.ts:
✓ session telemetry survives partial and transient zero-valued snapshots [1.79ms]
✓ an explicit empty subagent snapshot clears stale managed-runtime telemetry [0.14ms]
✓ new authoritative telemetry replaces the preserved snapshot per session [0.09ms]
✓ subagent transcript and streaming deltas merge without retransmitting prior content [0.40ms]
tests/web-sessions-extension.test.ts:
✓ web Stop aborts the main session and waits for subagent propagation [1.78ms]
✓ web Stop reports a synchronous main-session abort failure before acknowledgement [0.08ms]
✓ web Stop still aborts when an optional subagent listener fails [0.14ms]
✓ the bridge retains an authoritative subagent snapshot for reconnect hello [1.57ms]
✓ web worktree forwarding preserves spaces in quoted arguments [0.17ms]
✓ web model selection honors the session model scope [0.20ms]
✓ Tailscale setting persistence failure rolls the live route back [0.63ms]
✓ Tailscale setting transaction reports a failed route rollback [0.29ms]
tests/web-settings.test.ts:
✓ web settings writes preserve unrelated Pi and extension keys [3.41ms]
✓ concurrent web settings updates remain valid and retain unrelated keys [26.36ms]
✓ malformed settings reject without leaking the cross-process lock [3.57ms]
✓ write and rename failures clean temporary files and always release the lock [1.80ms]
tests/web-shutdown-policy.test.ts:
✓ graceful shutdown waits without a deadline until managed work settles [2.65ms]
✓ shutdown draining keeps Stop available while rejecting new work [0.16ms]
✓ graceful daemon shutdown waits for managed main-agent work [0.08ms]
✓ graceful daemon shutdown waits for active managed subagents [0.07ms]
✓ idle, stopped, and external sessions do not delay daemon shutdown [0.03ms]
tests/web-slash-command-service.test.ts:
✓ slash command discovery deduplicates concurrent runtime starts [3.10ms]
✓ invalidation isolates overlapping slash command discoveries [0.38ms]
✓ slash command discovery is bounded and shutdown cannot mask the timeout [11.87ms]
✓ slash command projection reuses the compact fallback [0.21ms]
tests/web-tool-expansion.test.ts:
✓ Write and Edit cards auto-expand from their rendered arguments without tool output [1.91ms]
tests/web-usage.test.ts:
✓ subagent header usage equals the cumulative usage displayed by its rows [1.50ms]
tests/web-worktrees.test.ts:
✓ checkout-producing Git commands use the long-running operation bound [0.12ms]
✓ web worktrees are created under the primary repository .pi directory [53.01ms]
Deleted branch tembo/cancel-builds (was 4b4e588).
✓ managed directory, local branch, remote start point, and upstream are independent [32.62ms]
✓ an unused existing local branch is reused and preserved by rollback [17.55ms]
✓ managed creation rejects branches checked out in another worktree [10.80ms]
✓ invalid branches and missing start points fail before creating resources [9.09ms]
✓ existing registered worktrees are resolved without modifying their branch [8.67ms]
✓ existing detached worktrees retain their exact HEAD [8.62ms]
✓ existing targets reject missing paths, unregistered checkouts, and other repositories [9.35ms]
✓ executable worktree setup scripts run through their shebang [10.10ms]
✓ failed setup retains the new checkout and branch for inspection [9.50ms]
✓ worktree setup is terminated after its bounded timeout [51.82ms]
✓ worktree setup force-kills descendants after a timed-out leader exits [2115.56ms]
✓ async managed cleanup yields before spawning Git verification [2043.60ms]
✓ managed worktree metadata is parsed and cleanup removes its checkout and branch [29.32ms]
✓ reused sessions inherit branch ownership when the original owner is deleted first [22.55ms]
✓ worktree cleanup waits until the final saved session is deleted [3.61ms]
✓ worktree rollback removes the checkout and its branch [15.18ms]
✓ rollback removes operation-owned resources after the checkout branch changes [14.04ms]
✓ rollback preserves commits made after a managed branch was created [14.75ms]
✓ rollback preserves a changed checkout with uncommitted files [11.72ms]
✓ worktree handling requires Git 2.36 or newer [0.09ms]
✓ web worktree names reject traversal and nested paths [1.11ms]
tests/worktree-extension.test.ts:
✓ the queued internal worktree message dispatches an extension command on Pi 0.84 [13.59ms]
✓ worktree tool queues a correlated create command and terminates the old run [0.72ms]
✓ worktree tool queues the existing-worktree form without shell interpolation [0.07ms]
✓ worktree tool correlation is session-bound, concurrent, and cleaned on failure [0.14ms]
✓ worktree replacement is single-flight per source session [0.14ms]
✓ worktree command parses safe quoted repository arguments [0.17ms]
✓ quoted relative and root-relative Windows paths preserve separators [0.11ms]
✓ double-quoted JSON control escapes decode after spaces [0.03ms]
✓ formatted branch and start-point values round-trip without command interpolation [0.06ms]
✓ tool-quoted worktree paths preserve JSON control escapes [0.06ms]
✓ worktree command parses existing checkout paths exclusively [0.72ms]
✓ branched replacements are self-contained before the source is deleted [2.86ms]
✓ existing worktree migration activates the replacement and rollback restores the source [2.94ms]
✓ verified replacement deletes its source session and records a durable tombstone [19.80ms]
✓ an independently open source session rolls back and preserves the original [4.00ms]
✓ failed replacement-file cleanup retains the managed worktree CWD [0.71ms]
✓ existing selection preserves ownership only for the current managed worktree [0.46ms]
✓ worktree invocation only matches the extension command [0.11ms]
208 pass
0 fail
608 expect() calls
Ran 208 tests across 37 files. [18.83s]
[2026-08-15T18:45:03.288Z] [test] finished (success, exit 0)
Loading