@kabmo-labs/kabmo 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kabmo-labs/kabmo",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Web console and diagnostic workbench for AI coding agents — Elysia + Preact on Bun.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Wijanarko Putra Rajeb <wijanarko.rajeb@gmail.com>",
@@ -181,13 +181,10 @@ export function SessionItem({
181
181
  ) : status === 'stream' ? (
182
182
  // The run spinner is the ONE thing on this row that says a run
183
183
  // is in flight, and it was an unlabelled icon: a screen reader
184
- // got a bare `svg`, and a test had no accessible way to ask
185
- // "is this session running". `waiting-for.e2e.ts` needs exactly
186
- // that as its gate — the wait picker only appears once this
187
- // session's `stream` row has reached the client, so asserting
188
- // the picker without asserting the row was a race measured on
189
- // the Windows runner (the dependency's 20s run expired while the
190
- // picker's own 20s timeout was still counting).
184
+ // got a bare `svg`, and nothing could ask "is this session
185
+ // running" by name. The rename and waiting cues beside it were
186
+ // already labelled, so this was the one status a reader — or an
187
+ // assertion — had to identify by shape.
191
188
  <span role="status" aria-label="Running">
192
189
  <Loader2 size={12} className="animate-spin" />
193
190
  </span>
@@ -159,7 +159,7 @@ export function MobileSessionRow({
159
159
  ) : status === 'stream' ? (
160
160
  // Same label the desktop row carries, for the same reason: the
161
161
  // phone draws the identical cue, and an unlabelled spinner is
162
- // both unreachable to a screen reader and unassertable.
162
+ // unreachable to a screen reader.
163
163
  <span role="status" aria-label="Running">
164
164
  <Loader2 size={13} className="text-ink/50 animate-spin" />
165
165
  </span>
@@ -22,13 +22,30 @@
22
22
  * `MERGE_HEAD` file are the whole subject.
23
23
  */
24
24
 
25
- import { afterAll, describe, expect, test } from 'bun:test';
25
+ import { afterAll, describe, expect, setDefaultTimeout, test } from 'bun:test';
26
26
  import fs from 'node:fs';
27
27
  import os from 'node:os';
28
28
  import path from 'node:path';
29
29
  import { GIT_BRANCH_ACTIONS } from '@/server/lib/fs/git-actions-branch';
30
30
  import { removeDir } from '@/test-support/remove-dir';
31
31
 
32
+ /**
33
+ * The suite drives REAL git processes — `init`, `clone`, `commit`, `push`,
34
+ * `fetch`, `pull`, `merge` — and one test of it pays for most of them. Bun's
35
+ * default per-test budget is 5s, which a Linux runner clears and a Windows
36
+ * runner does not: measured on `windows-latest`, "reconciles a diverged branch"
37
+ * timed out at 5001ms while the same suite is green locally in 1.4s. Process
38
+ * spawn on that runner costs several times what it does on POSIX, and the
39
+ * log line above the failure (`killed 1 dangling process`) is the timeout
40
+ * firing mid-`git`.
41
+ *
42
+ * A budget, not a skip: the behaviour — a diverged branch reconciled by a merge
43
+ * and then pushed — is identical on both platforms, and skipping it there would
44
+ * report the Sync button as unverified on a platform the CLI ships to. The same
45
+ * budget is stated for the same reason in `git-update.server.test.ts`.
46
+ */
47
+ setDefaultTimeout(30_000);
48
+
32
49
  const tempDirs: string[] = [];
33
50
 
34
51
  function tempDir(): string {