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)