LUCIRUNSDOCSPUBLIC CI
Run summary

Run passed.

2 passed.

will / push

··
Result output · browser
Trying to pull mcr.microsoft.com/playwright:v1.58.0-noble...
Getting image source signatures
Copying blob sha256:1651e4e62e78d4c145ec05bf0ebfd0428d62a4d759ead61d18d99f148397d0e6
Copying blob sha256:e93fce65fb9fdbf95d95433f0a49637000c985ffab1470a3bd7dc626ac7f1c06
Copying blob sha256:46fb0f4e68cbe5dd87e8227cefd6a51b338c1e2766b5efb3795f591d4095ab76
Copying blob sha256:4a8818a2ef7fedd187a57767c43564732a21bf225e16467fdb7b2f8dea879d9c
Copying config sha256:a4a0adcf261627d5813162fa7213edd50ecec09141b9daa2de194e22d2452857
Writing manifest to image destination
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: 'will@0.1.0',
npm warn EBADENGINE   required: { node: '>=26' },
npm warn EBADENGINE   current: { node: 'v24.13.0', npm: '11.6.2' }
npm warn EBADENGINE }
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 230 packages, and audited 231 packages in 13s

47 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 11.6.2 -> 11.19.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.19.1
npm notice To update run: npm install -g npm@11.19.1
npm notice

> will@0.1.0 build
> rolldown -c rolldown.config.ts && node scripts/copy-web.mjs && node scripts/render-docs.mjs

src/service/main.ts (1:85) [UNRESOLVED_IMPORT] Could not resolve 'node:http' in src/service/main.ts
   ╭─[ src/service/main.ts:1:86 ]
   │
 1 │ import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'
   │                                                                                      ─────┬─────  
   │                                                                                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/main.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/main.ts
   ╭─[ src/service/main.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/main.ts (3:30) [UNRESOLVED_IMPORT] Could not resolve 'node:url' in src/service/main.ts
   ╭─[ src/service/main.ts:3:31 ]
   │
 3 │ import { pathToFileURL } from 'node:url'
   │                               ─────┬────  
   │                                    ╰────── Module not found, treating it as an external dependency
───╯

src/service/config.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/config.ts
   ╭─[ src/service/config.ts:1:28 ]
   │
 1 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/service/config.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/config.ts
   ╭─[ src/service/config.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (1:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/static.ts
   ╭─[ src/service/static.ts:1:34 ]
   │
 1 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (2:31) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/static.ts
   ╭─[ src/service/static.ts:2:32 ]
   │
 2 │ import { readFile, stat } from 'node:fs/promises'
   │                                ─────────┬────────  
   │                                         ╰────────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (4:33) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/static.ts
   ╭─[ src/service/static.ts:4:34 ]
   │
 4 │ import { extname, resolve } from 'node:path'
   │                                  ─────┬─────  
   │                                       ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:1:28 ]
   │
 1 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (3:23) [UNRESOLVED_IMPORT] Could not resolve 'node:worker_threads' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:3:24 ]
   │
 3 │ import { Worker } from 'node:worker_threads'
   │                        ──────────┬──────────  
   │                                  ╰──────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (3:65) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:3:66 ]
   │
 3 │ import { open as fsOpen, mkdir, readdir, rename, rm, stat } from 'node:fs/promises'
   │                                                                  ─────────┬────────  
   │                                                                           ╰────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (4:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:4:22 ]
   │
 4 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/worker.ts
   ╭─[ src/service/worker.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/worker.ts
   ╭─[ src/service/worker.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (3:39) [UNRESOLVED_IMPORT] Could not resolve 'node:worker_threads' in src/service/worker.ts
   ╭─[ src/service/worker.ts:3:40 ]
   │
 3 │ import { parentPort, workerData } from 'node:worker_threads'
   │                                        ──────────┬──────────  
   │                                                  ╰──────────── Module not found, treating it as an external dependency
───╯

src/shared/db.ts (1:29) [UNRESOLVED_IMPORT] Could not resolve 'node:sqlite' in src/shared/db.ts
   ╭─[ src/shared/db.ts:1:30 ]
   │
 1 │ import { DatabaseSync } from 'node:sqlite'
   │                              ──────┬──────  
   │                                    ╰──────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (1:28) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/service/ops.ts
   ╭─[ src/service/ops.ts:1:29 ]
   │
 1 │ import { randomBytes } from 'node:crypto'
   │                             ──────┬──────  
   │                                   ╰──────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (2:29) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/ops.ts
   ╭─[ src/service/ops.ts:2:30 ]
   │
 2 │ import { stat, statfs } from 'node:fs/promises'
   │                              ─────────┬────────  
   │                                       ╰────────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (3:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/ops.ts
   ╭─[ src/service/ops.ts:3:22 ]
   │
 3 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (3:65) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:3:66 ]
   │
 3 │ import { open as fsOpen, mkdir, readdir, rename, rm, stat } from 'node:fs/promises'
   │                                                                  ─────────┬────────  
   │                                                                           ╰────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (4:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:4:22 ]
   │
 4 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/archive.ts
   ╭─[ src/shared/archive.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/archive.ts
   ╭─[ src/shared/archive.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (12:7) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:12:8 ]
    │
 12 │ } from 'node:fs/promises'
    │        ─────────┬────────  
    │                 ╰────────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (13:23) [UNRESOLVED_IMPORT] Could not resolve 'node:os' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:13:24 ]
    │
 13 │ import { tmpdir } from 'node:os'
    │                        ────┬────  
    │                            ╰────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (14:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:14:31 ]
    │
 14 │ import { dirname, join } from 'node:path'
    │                               ─────┬─────  
    │                                    ╰─────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (15:25) [UNRESOLVED_IMPORT] Could not resolve 'node:stream' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:15:26 ]
    │
 15 │ import { Writable } from 'node:stream'
    │                          ──────┬──────  
    │                                ╰──────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (16:25) [UNRESOLVED_IMPORT] Could not resolve 'node:stream/promises' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:16:26 ]
    │
 16 │ import { pipeline } from 'node:stream/promises'
    │                          ───────────┬──────────  
    │                                     ╰──────────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (17:57) [UNRESOLVED_IMPORT] Could not resolve 'node:zlib' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:17:58 ]
    │
 17 │ import { createZstdCompress, createZstdDecompress } from 'node:zlib'
    │                                                          ─────┬─────  
    │                                                               ╰─────── Module not found, treating it as an external dependency
────╯

src/agent/main.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/main.ts
   ╭─[ src/agent/main.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/main.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/main.ts
   ╭─[ src/agent/main.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/main.ts (3:30) [UNRESOLVED_IMPORT] Could not resolve 'node:url' in src/agent/main.ts
   ╭─[ src/agent/main.ts:3:31 ]
   │
 3 │ import { pathToFileURL } from 'node:url'
   │                               ─────┬────  
   │                                    ╰────── Module not found, treating it as an external dependency
───╯

src/agent/outbox.ts (1:51) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/outbox.ts
   ╭─[ src/agent/outbox.ts:1:52 ]
   │
 1 │ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'
   │                                                    ─────────┬────────  
   │                                                             ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/outbox.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/outbox.ts
   ╭─[ src/agent/outbox.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/readiness.ts (1:42) [UNRESOLVED_IMPORT] Could not resolve 'node:http' in src/agent/readiness.ts
   ╭─[ src/agent/readiness.ts:1:43 ]
   │
 1 │ import { createServer, type Server } from 'node:http'
   │                                           ─────┬─────  
   │                                                ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/config.ts (1:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/config.ts
   ╭─[ src/agent/config.ts:1:22 ]
   │
 1 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/spool.ts (1:69) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/spool.ts
   ╭─[ src/agent/spool.ts:1:70 ]
   │
 1 │ import { open as fsOpen, mkdir, readdir, readFile, rename, rm } from 'node:fs/promises'
   │                                                                      ─────────┬────────  
   │                                                                               ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/spool.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/spool.ts
   ╭─[ src/agent/spool.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/state.ts (1:44) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/state.ts
   ╭─[ src/agent/state.ts:1:45 ]
   │
 1 │ import { readFile, rename, writeFile } from 'node:fs/promises'
   │                                             ─────────┬────────  
   │                                                      ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/state.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/state.ts
   ╭─[ src/agent/state.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/prompt.ts (1:34) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/prompt.ts
   ╭─[ src/agent/prompt.ts:1:35 ]
   │
 1 │ import { readdir, readFile } from 'node:fs/promises'
   │                                   ─────────┬────────  
   │                                            ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/prompt.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/prompt.ts
   ╭─[ src/agent/prompt.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/pi-session.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/pi-session.ts
   ╭─[ src/agent/pi-session.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/pi-session.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/pi-session.ts
   ╭─[ src/agent/pi-session.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/queue-store.ts (1:51) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/queue-store.ts
   ╭─[ src/agent/queue-store.ts:1:52 ]
   │
 1 │ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'
   │                                                    ─────────┬────────  
   │                                                             ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/queue-store.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/queue-store.ts
   ╭─[ src/agent/queue-store.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (1:25) [UNRESOLVED_IMPORT] Could not resolve 'node:child_process' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:1:26 ]
   │
 1 │ import { execFile } from 'node:child_process'
   │                          ──────────┬─────────  
   │                                    ╰─────────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (2:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:2:28 ]
   │
 2 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (3:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:3:22 ]
   │
 3 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (4:26) [UNRESOLVED_IMPORT] Could not resolve 'node:util' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:4:27 ]
   │
 4 │ import { promisify } from 'node:util'
   │                           ─────┬─────  
   │                                ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/zai/tools.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/agent/zai/tools.ts
   ╭─[ src/agent/zai/tools.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/ids.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/ids.ts
   ╭─[ src/shared/ids.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/agent/tools.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/agent/tools.ts
   ╭─[ src/agent/tools.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

<DIR>/service.js.map  asset │ size: 52.10 kB
<DIR>/service.js      chunk │ size: 23.06 kB
<DIR>/service-worker.js.map  asset │ size: 77.93 kB
<DIR>/service-worker.js      chunk │ size: 35.60 kB
<DIR>/agent.js.map  asset │ size: 174.29 kB
<DIR>/agent.js      chunk │ size:  77.44 kB
<DIR>/main.js.map  asset │ size: 17.57 kB
<DIR>/main.js      chunk │ size:  7.65 kB

✔ rolldown v1.2.8 Finished in 336.40 ms
web: copied index.html + main.css -> web/dist
docs: rendered 6 pages -> docs/dist

> will@0.1.0 test:browser
> playwright test


Running 3 tests using 1 worker

  ✓  1 web/tests/phenotype.spec.ts:64:1 › timeline renders live events via SSE (1.8s)
  ✓  2 web/tests/phenotype.spec.ts:80:1 › chat panel lists messages; tabs are keyboard operable (376ms)
  ✓  3 web/tests/phenotype.spec.ts:112:1 › skip link exists and docs view loads rendered markdown (164ms)

  3 passed (9.8s)

Complete raw log

Passed · 2 executions
PASSEDbrowser2m

Execution configuration

Imagemcr.microsoft.com/playwright:v1.58.0-noble

Matrixnone

Triggerpush

Commands

npm ci
npm run build
npm run test:browser
Job source · .ci/browser.kdl
job "browser" {
image "mcr.microsoft.com/playwright:v1.58.0-noble"trigger {
push {
branch "trunk"include "web/**"include "src/service/**"		}	}run "npm ci"run "npm run build"run "npm run test:browser"}

Complete raw log

Log tail
Trying to pull mcr.microsoft.com/playwright:v1.58.0-noble...
Getting image source signatures
Copying blob sha256:1651e4e62e78d4c145ec05bf0ebfd0428d62a4d759ead61d18d99f148397d0e6
Copying blob sha256:e93fce65fb9fdbf95d95433f0a49637000c985ffab1470a3bd7dc626ac7f1c06
Copying blob sha256:46fb0f4e68cbe5dd87e8227cefd6a51b338c1e2766b5efb3795f591d4095ab76
Copying blob sha256:4a8818a2ef7fedd187a57767c43564732a21bf225e16467fdb7b2f8dea879d9c
Copying config sha256:a4a0adcf261627d5813162fa7213edd50ecec09141b9daa2de194e22d2452857
Writing manifest to image destination
npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: 'will@0.1.0',
npm warn EBADENGINE   required: { node: '>=26' },
npm warn EBADENGINE   current: { node: 'v24.13.0', npm: '11.6.2' }
npm warn EBADENGINE }
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 230 packages, and audited 231 packages in 13s

47 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 11.6.2 -> 11.19.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.19.1
npm notice To update run: npm install -g npm@11.19.1
npm notice

> will@0.1.0 build
> rolldown -c rolldown.config.ts && node scripts/copy-web.mjs && node scripts/render-docs.mjs

src/service/main.ts (1:85) [UNRESOLVED_IMPORT] Could not resolve 'node:http' in src/service/main.ts
   ╭─[ src/service/main.ts:1:86 ]
   │
 1 │ import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'
   │                                                                                      ─────┬─────  
   │                                                                                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/main.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/main.ts
   ╭─[ src/service/main.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/main.ts (3:30) [UNRESOLVED_IMPORT] Could not resolve 'node:url' in src/service/main.ts
   ╭─[ src/service/main.ts:3:31 ]
   │
 3 │ import { pathToFileURL } from 'node:url'
   │                               ─────┬────  
   │                                    ╰────── Module not found, treating it as an external dependency
───╯

src/service/config.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/config.ts
   ╭─[ src/service/config.ts:1:28 ]
   │
 1 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/service/config.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/config.ts
   ╭─[ src/service/config.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (1:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/static.ts
   ╭─[ src/service/static.ts:1:34 ]
   │
 1 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (2:31) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/static.ts
   ╭─[ src/service/static.ts:2:32 ]
   │
 2 │ import { readFile, stat } from 'node:fs/promises'
   │                                ─────────┬────────  
   │                                         ╰────────── Module not found, treating it as an external dependency
───╯

src/service/static.ts (4:33) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/static.ts
   ╭─[ src/service/static.ts:4:34 ]
   │
 4 │ import { extname, resolve } from 'node:path'
   │                                  ─────┬─────  
   │                                       ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:1:28 ]
   │
 1 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker-client.ts (3:23) [UNRESOLVED_IMPORT] Could not resolve 'node:worker_threads' in src/service/worker-client.ts
   ╭─[ src/service/worker-client.ts:3:24 ]
   │
 3 │ import { Worker } from 'node:worker_threads'
   │                        ──────────┬──────────  
   │                                  ╰──────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (3:65) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:3:66 ]
   │
 3 │ import { open as fsOpen, mkdir, readdir, rename, rm, stat } from 'node:fs/promises'
   │                                                                  ─────────┬────────  
   │                                                                           ╰────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (4:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:4:22 ]
   │
 4 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/worker.ts
   ╭─[ src/service/worker.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/worker.ts
   ╭─[ src/service/worker.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/service/worker.ts (3:39) [UNRESOLVED_IMPORT] Could not resolve 'node:worker_threads' in src/service/worker.ts
   ╭─[ src/service/worker.ts:3:40 ]
   │
 3 │ import { parentPort, workerData } from 'node:worker_threads'
   │                                        ──────────┬──────────  
   │                                                  ╰──────────── Module not found, treating it as an external dependency
───╯

src/shared/db.ts (1:29) [UNRESOLVED_IMPORT] Could not resolve 'node:sqlite' in src/shared/db.ts
   ╭─[ src/shared/db.ts:1:30 ]
   │
 1 │ import { DatabaseSync } from 'node:sqlite'
   │                              ──────┬──────  
   │                                    ╰──────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (1:28) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/service/ops.ts
   ╭─[ src/service/ops.ts:1:29 ]
   │
 1 │ import { randomBytes } from 'node:crypto'
   │                             ──────┬──────  
   │                                   ╰──────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (2:29) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/service/ops.ts
   ╭─[ src/service/ops.ts:2:30 ]
   │
 2 │ import { stat, statfs } from 'node:fs/promises'
   │                              ─────────┬────────  
   │                                       ╰────────── Module not found, treating it as an external dependency
───╯

src/service/ops.ts (3:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/service/ops.ts
   ╭─[ src/service/ops.ts:3:22 ]
   │
 3 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (3:65) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:3:66 ]
   │
 3 │ import { open as fsOpen, mkdir, readdir, rename, rm, stat } from 'node:fs/promises'
   │                                                                  ─────────┬────────  
   │                                                                           ╰────────── Module not found, treating it as an external dependency
───╯

src/shared/cas.ts (4:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/cas.ts
   ╭─[ src/shared/cas.ts:4:22 ]
   │
 4 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/archive.ts
   ╭─[ src/shared/archive.ts:1:28 ]
   │
 1 │ import { createHash } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (2:33) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/shared/archive.ts
   ╭─[ src/shared/archive.ts:2:34 ]
   │
 2 │ import { createReadStream } from 'node:fs'
   │                                  ────┬────  
   │                                      ╰────── Module not found, treating it as an external dependency
───╯

src/shared/archive.ts (12:7) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:12:8 ]
    │
 12 │ } from 'node:fs/promises'
    │        ─────────┬────────  
    │                 ╰────────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (13:23) [UNRESOLVED_IMPORT] Could not resolve 'node:os' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:13:24 ]
    │
 13 │ import { tmpdir } from 'node:os'
    │                        ────┬────  
    │                            ╰────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (14:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:14:31 ]
    │
 14 │ import { dirname, join } from 'node:path'
    │                               ─────┬─────  
    │                                    ╰─────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (15:25) [UNRESOLVED_IMPORT] Could not resolve 'node:stream' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:15:26 ]
    │
 15 │ import { Writable } from 'node:stream'
    │                          ──────┬──────  
    │                                ╰──────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (16:25) [UNRESOLVED_IMPORT] Could not resolve 'node:stream/promises' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:16:26 ]
    │
 16 │ import { pipeline } from 'node:stream/promises'
    │                          ───────────┬──────────  
    │                                     ╰──────────── Module not found, treating it as an external dependency
────╯

src/shared/archive.ts (17:57) [UNRESOLVED_IMPORT] Could not resolve 'node:zlib' in src/shared/archive.ts
    ╭─[ src/shared/archive.ts:17:58 ]
    │
 17 │ import { createZstdCompress, createZstdDecompress } from 'node:zlib'
    │                                                          ─────┬─────  
    │                                                               ╰─────── Module not found, treating it as an external dependency
────╯

src/agent/main.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/main.ts
   ╭─[ src/agent/main.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/main.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/main.ts
   ╭─[ src/agent/main.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/main.ts (3:30) [UNRESOLVED_IMPORT] Could not resolve 'node:url' in src/agent/main.ts
   ╭─[ src/agent/main.ts:3:31 ]
   │
 3 │ import { pathToFileURL } from 'node:url'
   │                               ─────┬────  
   │                                    ╰────── Module not found, treating it as an external dependency
───╯

src/agent/outbox.ts (1:51) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/outbox.ts
   ╭─[ src/agent/outbox.ts:1:52 ]
   │
 1 │ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'
   │                                                    ─────────┬────────  
   │                                                             ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/outbox.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/outbox.ts
   ╭─[ src/agent/outbox.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/readiness.ts (1:42) [UNRESOLVED_IMPORT] Could not resolve 'node:http' in src/agent/readiness.ts
   ╭─[ src/agent/readiness.ts:1:43 ]
   │
 1 │ import { createServer, type Server } from 'node:http'
   │                                           ─────┬─────  
   │                                                ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/config.ts (1:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/config.ts
   ╭─[ src/agent/config.ts:1:22 ]
   │
 1 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/spool.ts (1:69) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/spool.ts
   ╭─[ src/agent/spool.ts:1:70 ]
   │
 1 │ import { open as fsOpen, mkdir, readdir, readFile, rename, rm } from 'node:fs/promises'
   │                                                                      ─────────┬────────  
   │                                                                               ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/spool.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/spool.ts
   ╭─[ src/agent/spool.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/state.ts (1:44) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/state.ts
   ╭─[ src/agent/state.ts:1:45 ]
   │
 1 │ import { readFile, rename, writeFile } from 'node:fs/promises'
   │                                             ─────────┬────────  
   │                                                      ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/state.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/state.ts
   ╭─[ src/agent/state.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/prompt.ts (1:34) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/prompt.ts
   ╭─[ src/agent/prompt.ts:1:35 ]
   │
 1 │ import { readdir, readFile } from 'node:fs/promises'
   │                                   ─────────┬────────  
   │                                            ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/prompt.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/prompt.ts
   ╭─[ src/agent/prompt.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/pi-session.ts (1:22) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/pi-session.ts
   ╭─[ src/agent/pi-session.ts:1:23 ]
   │
 1 │ import { mkdir } from 'node:fs/promises'
   │                       ─────────┬────────  
   │                                ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/pi-session.ts (2:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/pi-session.ts
   ╭─[ src/agent/pi-session.ts:2:22 ]
   │
 2 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/queue-store.ts (1:51) [UNRESOLVED_IMPORT] Could not resolve 'node:fs/promises' in src/agent/queue-store.ts
   ╭─[ src/agent/queue-store.ts:1:52 ]
   │
 1 │ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'
   │                                                    ─────────┬────────  
   │                                                             ╰────────── Module not found, treating it as an external dependency
───╯

src/agent/queue-store.ts (2:30) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/queue-store.ts
   ╭─[ src/agent/queue-store.ts:2:31 ]
   │
 2 │ import { dirname, join } from 'node:path'
   │                               ─────┬─────  
   │                                    ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (1:25) [UNRESOLVED_IMPORT] Could not resolve 'node:child_process' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:1:26 ]
   │
 1 │ import { execFile } from 'node:child_process'
   │                          ──────────┬─────────  
   │                                    ╰─────────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (2:27) [UNRESOLVED_IMPORT] Could not resolve 'node:fs' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:2:28 ]
   │
 2 │ import { existsSync } from 'node:fs'
   │                            ────┬────  
   │                                ╰────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (3:21) [UNRESOLVED_IMPORT] Could not resolve 'node:path' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:3:22 ]
   │
 3 │ import { join } from 'node:path'
   │                      ─────┬─────  
   │                           ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/worktree.ts (4:26) [UNRESOLVED_IMPORT] Could not resolve 'node:util' in src/agent/worktree.ts
   ╭─[ src/agent/worktree.ts:4:27 ]
   │
 4 │ import { promisify } from 'node:util'
   │                           ─────┬─────  
   │                                ╰─────── Module not found, treating it as an external dependency
───╯

src/agent/zai/tools.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/agent/zai/tools.ts
   ╭─[ src/agent/zai/tools.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/shared/ids.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/shared/ids.ts
   ╭─[ src/shared/ids.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

src/agent/tools.ts (1:27) [UNRESOLVED_IMPORT] Could not resolve 'node:crypto' in src/agent/tools.ts
   ╭─[ src/agent/tools.ts:1:28 ]
   │
 1 │ import { randomUUID } from 'node:crypto'
   │                            ──────┬──────  
   │                                  ╰──────── Module not found, treating it as an external dependency
───╯

<DIR>/service.js.map  asset │ size: 52.10 kB
<DIR>/service.js      chunk │ size: 23.06 kB
<DIR>/service-worker.js.map  asset │ size: 77.93 kB
<DIR>/service-worker.js      chunk │ size: 35.60 kB
<DIR>/agent.js.map  asset │ size: 174.29 kB
<DIR>/agent.js      chunk │ size:  77.44 kB
<DIR>/main.js.map  asset │ size: 17.57 kB
<DIR>/main.js      chunk │ size:  7.65 kB

✔ rolldown v1.2.8 Finished in 336.40 ms
web: copied index.html + main.css -> web/dist
docs: rendered 6 pages -> docs/dist

> will@0.1.0 test:browser
> playwright test


Running 3 tests using 1 worker

  ✓  1 web/tests/phenotype.spec.ts:64:1 › timeline renders live events via SSE (1.8s)
  ✓  2 web/tests/phenotype.spec.ts:80:1 › chat panel lists messages; tabs are keyboard operable (376ms)
  ✓  3 web/tests/phenotype.spec.ts:112:1 › skip link exists and docs view loads rendered markdown (164ms)

  3 passed (9.8s)
Continue in CLI

Nushell command · read-only.

luci log dogil-linut-kiluk-jovah 001

Local Luci data access required · no execution.

PASSEDvalidate4m

Execution configuration

Imagedocker.io/library/node:26

Matrixnone

Triggerpush

Commands

npm ci
npm run check
npm test
npm run coverage
Job source · .ci/validate.kdl
job "validate" {
image "docker.io/library/node:26"trigger {
push {
branch "trunk"branch "feature/**"		}	}run "npm ci"run "npm run check"run "npm test"run "npm run coverage"}

Complete raw log

Log tail
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 230 packages, and audited 231 packages in 12s

47 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New major version of npm available! 11.19.1 -> 12.0.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2
npm notice To update run: npm install -g npm@12.0.2
npm notice

> will@0.1.0 check
> biome check src scripts web deploy rolldown.config.ts playwright.config.ts package.json tsconfig.json && tsc --noEmit

Checked 79 files in 267ms. No fixes applied.

> will@0.1.0 test
> node --test src

✔ explicit fake wins even with a key (2.20935ms)
✔ no env at all falls back to fake (0.320313ms)
✔ key alone gives the real session (0.278702ms)
✔ explicit real without a key fails loudly (0.833628ms)
✔ explicit real with a key is real (0.331839ms)
✔ thinking level defaults to medium (2.517179ms)
✔ ZAI_THINKING_LEVEL overrides the default (0.460026ms)
✔ unknown ZAI_THINKING_LEVEL fails loudly (0.385968ms)
✔ wake queue persists across reopen; heartbeat coalesces; done compacts (12.835169ms)
✔ wake queue defer reorders wake with backoff (4.908541ms)
{"ts":"2026-09-21T22:30:37.770Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ spool drains idempotently into the running service (5254.29576ms)
✔ agent state persists mutations atomically (3.920037ms)
{"ts":"2026-09-21T22:30:46.023Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:30:46.034Z","level":"warn","component":"agent","message":"running with a FAKE session (no model calls; set ZAI_API_KEY for real)"}
{"ts":"2026-09-21T22:30:46.035Z","level":"warn","component":"agent","message":"worktree not ready","error":"worktree missing and no git url configured"}
{"ts":"2026-09-21T22:30:46.112Z","level":"info","component":"telegram","message":"bot identified","username":"will_bot"}
{"ts":"2026-09-21T22:30:47.165Z","level":"debug","component":"agent","message":"spool drained","events":2}
{"ts":"2026-09-21T22:30:47.181Z","level":"info","component":"agent","message":"agent stopped cleanly"}
✔ end to end: mention reaches the resident session and readiness is healthy (6323.318501ms)
✔ chat turn completes, budget spent, wake removed (15.818587ms)
✔ boot context appears only on the first turn (5.33978ms)
✔ model failure retries with backoff, then defers after three attempts (3.973286ms)
✔ turn timeout enqueues exactly one recovery wake and completes the original (56.272943ms)
✔ budget cap blocks ordinary wakes but reserve admits recovery wakes (7.045614ms)
✔ storage stop pauses ordinary wakes, recovery continues (5.722106ms)
✔ system prompt is exactly the lexically ordered personality (7.40652ms)
✔ wake prompts render per-kind templates with facts (1.286925ms)
✔ facts block omits missing values instead of rendering undefined (0.536922ms)
✔ all coding tools are bound to the editable worktree (13.252544ms)
✔ worktree: clone, ff-only when clean, preserved when dirty or ahead (344.046225ms)
✔ readWorktreeState: fresh head and dirty flag without fetch or merge (135.182478ms)
{"ts":"2026-09-21T22:31:01.342Z","level":"debug","component":"ciwatch","message":"ci poll","runs":1,"wakes":0}
{"ts":"2026-09-21T22:31:01.350Z","level":"debug","component":"ciwatch","message":"ci poll","runs":2,"wakes":1}
{"ts":"2026-09-21T22:31:01.353Z","level":"debug","component":"ciwatch","message":"ci poll","runs":2,"wakes":0}
{"ts":"2026-09-21T22:31:01.356Z","level":"debug","component":"ciwatch","message":"ci poll","runs":3,"wakes":0}
✔ ci watch enqueues one failure wake per failed run of a tracked sha (67.776432ms)
{"ts":"2026-09-21T22:31:01.512Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:31:01.532Z","level":"info","component":"deploy","message":"deploy events imported","count":2}
✔ deploy events poll mirrors into service and wakes on failures only (5191.697901ms)
{"ts":"2026-09-21T22:31:06.664Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ chat_send queues outbound; recall queries service; maintenance ops gated (5144.807416ms)
{"ts":"2026-09-21T22:31:11.808Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:31:11.826Z","level":"warn","component":"loop","message":"storage threshold transition","from":"ok","to":"warn"}
✔ storage watch: transitions emit deterministic outbox notice (5135.310382ms)
✔ readiness server reports 503 until local init completes (7.017536ms)
✔ fake telegram sanity (61.612635ms)
{"ts":"2026-09-21T22:31:17.313Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:31:17.328Z","level":"info","component":"telegram","message":"bot identified","username":"will_bot"}
✔ mention wakes, chatter archives without wake, other chats ignored (5199.3237ms)
{"ts":"2026-09-21T22:31:22.500Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:31:22.514Z","level":"info","component":"telegram","message":"bot identified","username":"will_bot"}
✔ media message downloads into service store and references digest (5184.636622ms)
{"ts":"2026-09-21T22:31:27.684Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
{"ts":"2026-09-21T22:31:27.696Z","level":"info","component":"telegram","message":"bot identified","username":"will_bot"}
✔ /hide via reply tombstones deterministically without a model wake (5181.492804ms)
{"ts":"2026-09-21T22:31:32.869Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ outbox delivers at-least-once and mirrors outbound to service (5156.675283ms)
✔ sums usage across assistant messages of one wake (2.788499ms)
✔ splits by provider/model and tolerates junk (0.451722ms)
✔ non-array input yields no rows (0.27214ms)
{"ts":"2026-09-21T22:31:40.022Z","level":"warn","component":"zai","message":"zai retry","path":"/paas/v4/chat/completions","status":500,"attempt":1,"delay":500}
✔ rest client retries retryable failures (563.858132ms)
✔ rest client surfaces 4xx without retry (17.592047ms)
{"ts":"2026-09-21T22:31:40.675Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ zai_analyze_media answers, caches by digest, second call is a hit (5238.21369ms)
{"ts":"2026-09-21T22:31:45.903Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ zai_transcribe and zai_parse_document return explicit results (5182.998863ms)
{"ts":"2026-09-21T22:31:51.087Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ generation tools store bytes and return digests; limits fail explicitly (5618.000683ms)
{"ts":"2026-09-21T22:31:56.700Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ curated tool set carries stable names and one-line descriptions (5117.513874ms)
{"ts":"2026-09-21T22:32:02.341Z","level":"info","component":"zai-mcp","message":"vision mcp connected"}
✔ mcp bridge lists and calls tools over stdio (678.111951ms)
{"ts":"2026-09-21T22:32:02.798Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ healthz ok, index served, docs manifest served (8216.779936ms)
{"ts":"2026-09-21T22:32:10.991Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ path traversal is rejected (5132.680756ms)
{"ts":"2026-09-21T22:32:16.124Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ audit ingest -> timeline -> SSE replay with Last-Event-ID (5184.5371ms)
{"ts":"2026-09-21T22:32:21.310Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ media upload, meta, public download round-trip (5150.456718ms)
{"ts":"2026-09-21T22:32:26.458Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ chat ingest, hide via internal API, tombstone filters public chat (5143.714601ms)
{"ts":"2026-09-21T22:32:31.603Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ status reports schema, counts and storage; recall works over HTTP (5139.095705ms)
{"ts":"2026-09-21T22:32:36.739Z","level":"info","component":"service","message":"service listening","public":"127.0.0.1:0","internal":"127.0.0.1:0"}
✔ usage view aggregates turn_usage rows into daily cost (5125.288961ms)
✔ audit ingest is idempotent by event id and assigns seqs (13.610171ms)
✔ recall searches beyond the newest page in hot data and archives (42.829041ms)
✔ recall orders overlapping archives and late hot rows globally (36.580381ms)
✔ recall has identical Unicode case matching before and after archival (22.677407ms)
✔ recall tie ordering is limit-prefix consistent before and after archival (16.882151ms)
✔ chat ingest is idempotent and hide tombstones (4.164089ms)
✔ deployment events mirror idempotently (3.717146ms)
✔ media store is content-addressed and idempotent (6.204612ms)
✔ analysis cache upserts by (digest, capability, model, schemaVersion) (3.58076ms)
✔ archive cycle moves old audit rows exactly once and cold reads serve them (14.297141ms)
✔ crash between publish and delete does not duplicate rows (exactly once) (9.769962ms)
✔ archive cycle moves chat after one year and tombstones keep filtering (14.827839ms)
✔ quick check reports ok and jobs are recorded (6.003224ms)
✔ vacuum runs without error (3.370244ms)
✔ cost uses the price table per MTok (2.965034ms)
✔ unknown model keeps tokens but marks cost unavailable (0.406234ms)
✔ days are grouped by UTC date and sorted ascending (1.617351ms)
✔ projection extrapolates today across the remaining month (0.355642ms)
✔ projection is null without a priced day today (0.371848ms)
✔ ordinary calls stop at cap minus reserve (2.302657ms)
✔ recovery calls draw from the reserve only (0.348377ms)
✔ zero cap disables limiting (0.293501ms)
✔ state rolls over on a new day (1.940021ms)
✔ property: total allowed recovery calls per day equals reserve (18.398469ms)
✔ default budget exists and is sane (0.380343ms)
✔ cutoff subtracts hot days (2.091709ms)
✔ only rows strictly older than the cutoff archive (1.428964ms)
✔ rows group by month (0.476477ms)
✔ sidecar overlap selection skips non-overlapping segments (0.446868ms)
✔ property: every row lands in exactly one month group (15.913164ms)
✔ mention of the bot wakes (3.160243ms)
✔ reply to the bot wakes (0.341469ms)
✔ ordinary chatter never wakes (0.298596ms)
✔ mention inside a reply of someone else does not wake (0.294672ms)
✔ /hide via reply is deterministic, never wakes the model (0.410637ms)
✔ /hide with explicit id targets that id (0.324012ms)
✔ other commands wake (0.299806ms)
✔ caption mention on media wakes (0.295778ms)
✔ sender of the target or oliver may hide (2.351786ms)
✔ toTgMessage extracts largest photo and documents (0.763702ms)
✔ failure wakes outrank chat which outranks heartbeat (3.122985ms)
✔ FIFO inside a class (0.345075ms)
✔ deferred wakes are skipped until their time (0.348725ms)
✔ heartbeat coalescing predicate (0.443022ms)
✔ heartbeat hour is claimed at most once and never replayed (0.380363ms)
✔ property: ordering is stable sort by (priority, seq) (15.832319ms)
ℹ tests 98
ℹ suites 0
ℹ pass 98
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 126164.942008

> will@0.1.0 coverage
> node --test --experimental-test-coverage --test-coverage-include='src/**/*.ts' "src/**/*.test.ts" "src/**/*.int.test.ts" 2>&1 | node scripts/coverage-ratchet.mjs

coverage-ratchet: 91.3% >= floor 91.2% (ratchet raised, commit it)
Continue in CLI

Nushell command · read-only.

luci log dogil-linut-kiluk-jovah 002

Local Luci data access required · no execution.

All configuration at this revision
browser.kdl @ 0618
// Browser e2e tier: runs only when web/ or service routes change (path-filtered).
// Requires playwright browsers in the job image; enable after the browser
// runner image exists (Luci extension item, see deploy/contract.md).
job "browser" {
  image "mcr.microsoft.com/playwright:v1.58.0-noble"
  trigger {
    push {
      branch "trunk"
      include "web/**"
      include "src/service/**"
    }
  }
  run "npm ci"
  run "npm run build"
  run "npm run test:browser"
}
canary.kdl @ 0618
// Scheduled ZAI canary (non-deploying). Manual-only until ZAI_API_KEY is
// configured as a Luci secret; flip to a schedule "..." trigger then.
job "canary" {
  image "docker.io/library/node:26-slim"
  secret "ZAI_API_KEY" env="ZAI_API_KEY"
  run "npm ci"
  run "npm run canary"
}
validate.kdl @ 0618
job "validate" {
  image "docker.io/library/node:26"
  trigger {
    push {
      branch "trunk"
      branch "feature/**"
    }
  }
  run "npm ci"
  run "npm run check"
  run "npm test"
  run "npm run coverage"
}