fix(tui): speed up model picker and dedupe aliases #11
Annotations
6 errors and 14 warnings
|
lint
Process completed with exit code 1.
|
|
test
Process completed with exit code 1.
|
|
[pythinker-core] test/tools/rg-locator.test.ts > ensureRgPath download branch > fetches ripgrep over HTTPS:
packages/agent-core/test/tools/rg-locator.test.ts#L316
Error: Snapshot `ensureRgPath download branch > fetches ripgrep over HTTPS 1` mismatched
Expected: "[Error: Ripgrep archive checksum mismatch for ripgrep-15.0.0-aarch64-apple-darwin.tar.gz: expected 98bb2e61e7277ba0ea72d2ae2592497fd8d2940934a16b122448d302a6637e3b, got d09ddfae9f45fa5423557d7d5887afb665ef2174a9e3a1417c8c0b97a87c6269. CDN content may have changed.]"
Received: "[Error: Ripgrep archive checksum mismatch for ripgrep-15.0.0-x86_64-unknown-linux-musl.tar.gz: expected 253ad0fd5fef0d64cba56c70dccdacc1916d4ed70ad057cc525fcdb0c3bbd2a7, got d09ddfae9f45fa5423557d7d5887afb665ef2174a9e3a1417c8c0b97a87c6269. CDN content may have changed.]"
❯ test/tools/rg-locator.test.ts:316:56
|
|
[pythinker-core] test/session/subagent-host.test.ts > SessionSubagentHost > inherits active parent user tools when spawning a subagent:
packages/agent-core/test/session/subagent-host.test.ts#L498
AssertionError: expected [ { name: 'Read', …(4) }, …(21) ] to deep equally contain { name: 'Lookup', …(3) }
- Expected:
{
"active": true,
"description": "Look up a short test value.",
"name": "Lookup",
"source": "user",
}
+ Received:
[
{
"active": true,
"description": "Read a text file from the local filesystem.
If the user provides a concrete file path to a text file, call Read directly. Do not `Glob`, `ls`, or otherwise pre-check known text file paths; missing or invalid file paths return errors you can handle. Do not use Read for directories; use `ls` via Bash for a known directory, or Glob when you need files/directories matching a pattern. Use `Grep` only when the task is to search for unknown content or locations.
When you need several files, prefer to read them in parallel: emit multiple `Read` calls in a single response instead of reading one file per turn.
- Relative paths resolve against the working directory; a path outside the working directory must be absolute.
- Returns up to 1000 lines or 100 KB per call, whichever comes first; lines longer than 2000 chars are truncated mid-line.
- Page larger files with `line_offset` (1-based start line) and `n_lines`. Omit `n_lines` to read up to the 1000-line cap.
- Sensitive files (`.env` files, credential stores, SSH keys, and similar secrets) are refused to protect secrets; do not attempt to read them.
- Only UTF-8 text files can be read. Non-UTF-8 encodings, binary files, and files containing NUL bytes are refused; use `ReadMediaFile` for images or video, and Bash or an MCP tool for other binary formats.
- Negative line_offset reads from the end of the file (for example, -100 reads the last 100 lines); the absolute value cannot exceed 1000.
- Output format: `<line-number>\\t<content>` per line.
- A `<system>...</system>` status block is appended after the file content; it summarizes how much was read (line and byte counts, truncation, line-ending notes) and is not part of the file itself.
- Pure CRLF files are displayed with LF line endings; `Edit` matches this output and preserves CRLF when writing back.
- Mixed or lone carriage-return line endings are shown as `\\r` and require exact `Edit.old_string` escapes.
- After a successful `Edit`/`Write`, do not re-read solely to prove the write landed. When the task depends on an exact file, API, or output shape, inspect the final external contract before finishing.
",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"line_offset": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer",
},
{
"maximum": -1,
"minimum": -1000,
"type": "integer",
},
],
"description": "The line number to start reading from. Omit to start at line 1. Negative values read from the end of the file; the absolute value cannot exceed 1000.",
},
"n_lines": {
"description": "The number of lines to read; the tool also applies its internal cap. Omit to read up to the internal cap of 1000 lines.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer",
},
"path": {
"description": "Path to a text file. Relative paths resolve against the working directory; a path outside the working directory must be absolute. Directories are not supported; use `ls` via Bash for a known directory, or Glob for pattern search.",
"type": "string",
},
},
"required": [
"path",
],
"type": "object",
},
"name": "Read",
"source": "builtin",
},
{
"active": true,
"description": "Create, append to, or replace a file entirely.
- Missing parent directories are created.
- Mode defaults to overwrite; append adds content at EOF without adding a newline.
- Write is NOT ALLOWED for incremental changes to existing files
|
|
[pythinker-core] test/session/lifecycle-hooks.test.ts > Session lifecycle hooks > watches absolute paths returned by SessionStart hooks:
packages/agent-core/test/session/lifecycle-hooks.test.ts#L214
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
❯ test/session/lifecycle-hooks.test.ts:214:3
|
|
[pythinker-core] test/session/lifecycle-hooks.test.ts > Session lifecycle hooks > reroots configured FileChanged paths when the hook cwd changes:
packages/agent-core/test/session/lifecycle-hooks.test.ts#L607
Error: ENOENT: no such file or directory, open '/tmp/pythinker-session-hooks-tYdi4X/hooks.jsonl'
❯ waitForFile test/session/lifecycle-hooks.test.ts:607:7
❯ test/session/lifecycle-hooks.test.ts:200:5
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/tmp/pythinker-session-hooks-tYdi4X/hooks.jsonl' }
|
|
lint
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
eslint(no-underscore-dangle):
apps/pythinker-code/src/tui/theme/theme.ts#L40
Unexpected dangling '_' in '`_palette`'.
|
|
eslint(no-underscore-dangle):
apps/pythinker-code/src/tui/theme/theme.ts#L34
Unexpected dangling '_' in '`_palette`'.
|
|
eslint(no-underscore-dangle):
apps/pythinker-code/src/tui/theme/theme.ts#L30
Unexpected dangling '_' in '`_palette`'.
|
|
eslint(no-underscore-dangle):
apps/pythinker-code/src/tui/theme/theme.ts#L26
Unexpected dangling '_' in '`_palette`'.
|
|
eslint(no-underscore-dangle):
apps/pythinker-code/src/tui/theme/theme.ts#L22
Unexpected dangling '_' in '`_palette`'.
|
|
|
|
|
|
vitest(no-conditional-in-test):
apps/pythinker-code/test/tui/controllers/session-event-handler-goal-queue.test.ts#L234
Avoid having conditionals in tests.
|
|
vitest(no-conditional-in-test):
apps/pythinker-code/test/tui/controllers/session-event-handler-goal-queue.test.ts#L224
Avoid having conditionals in tests.
|
|
|
|
typecheck
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|