Repository navigation
Basilisk
Bug fixes:
- Fix incomplete recursive directory listings in :fd and file search.
Replace the fixed 1024-entry directory queue with a dynamically growing
path stack and open only one directory at a time, avoiding descriptor
exhaustion. Unreadable subdirectories no longer stop scanning siblings. - Fix an ex range off-by-one after a numeric line address: ;$, ;>re>
and ,# now apply to the addressed line rather than the next one
(:5;$c inserts at the end of line 5, :2,#+2 selects lines 2-4).
Regressed in 6.0. - Fix shell commands under a terminal resize with ish off: SIGWINCH no
longer stops vi waiting for the command, which truncated captured
output (filters, :r !) and returned from :! while the command was still
running. - With ish on, a terminal resize during a filter is no longer missed;
the interactive shell owns the terminal and receives SIGWINCH, so vi
rechecks the window size afterwards. - ^C during a filter now interrupts the terminal's foreground process
group instead of only the shell. It was ignored by shells that fork for
-c, such as ksh, and by pipelines such as :%!sleep 5 | cat. With ish on,
any keypress during a filter stopped vi with SIGTTIN (tty input); vi now
takes the terminal back briefly to read the key. - A shell that cannot be executed exits with status 71 (EX_OSERR)
instead of 1, distinguishing it from the command's own failures. - :e! path naming an already open buffer now switches to it and rereads
it from disk, discarding unsaved changes, instead of only switching. - :e of a file that does not exist ([n], a new buffer) no longer fails,
so a chain after it goes on. A failed read now fails even without a
path: :e! errors when the current file cannot be opened ([f]).
Patch changes:
- agent.sh:
added :acl to rebuild agent context from the editable session log before
every request; session and compaction transcripts now have numbered
entries.
The :acl mode was inspired by
arXiv:2609.37725v1.
Added the agr option for the tool-output guardrail (4096 bytes by
default; 0 disables it) and :aout to retrieve saved tool output, with
optional byte ranges and no output guardrail.
Extended :aretry to replay either the last executed command
or one deferred by aspec, still under the guardrail.
Compaction retries when the agent returns without updating the session
log, rather than accepting an unchanged log as a completed summary.
acl above 1 runs a checkpoint every N tokens of growth, where the agent
rates turns (:arate, 0-3) and condenses or removes log entries
(:anote); rating 0 trims at once. acl below 0 runs a budget check
instead: the agent checkpoints (:acheck) or defers N tokens
(:acheck N). Ratings live in /notes/, trimmed entries in /discarded/;
:aget prints entries, trimmed ones included.
:ali lists the session log entries with sizes and ratings and :auli
only the unrated turns, at any time; :acp prints the checkpoint
instructions and :adone ends it once all turns with commands are
rated.
Added [N,M]ath[effort] to set a reasoning token cap of N and the
reasoning effort, one word such as low or high; M is the ceiling the
agent may reach for one reply. A reply counts as cut when the server
ends its thinking with think_cut of conf.c after at least half the
cap; think_cut is stripped from all thinking so models cannot copy
it. A reply cut at the cap is withheld: it is not logged and its
commands do not run. The agent then answers a budget question kept
in /asides/, outside the session log, and nothing else runs
meanwhile; the question interrupts a checkpoint, a budget check or a
compaction and those resume afterwards. :acap alone keeps the cut
reply, :acap N with N above the cap discards it and replies again
under N, and text after N is a note only the new reply sees. Retries
within budget question are consecutive, up to 5; after that the
answer is taken as :acap.
Whatever reply leaves of N is banked onto the caps of later replies,
up to M, until their thinking spends it, so one raise smoothens out
across many turns.
Added :=p to print lines with line numbers.
Added :ata to cap thinking by a percentage of its recent average in
place of N (0 disables, a bare :ata toggles between 0 and 100). Each
accepted reply that thought moves the average a quarter of the way to
its tokens, and one cut at its cap counts as twice the cap, so cuts
raise it; replies are counted with :ata off too, and :ath restarts the
average. ast reports the cap, the bank and the average.
Added :agoal to set a goal (a bare :agoal clears it). While it is set,
a reply without commands does not end the run: the agent is asked
whether the goal is finished and keeps working until it clears it;
^C and the tool round limit still end the run. ast reports the goal.
Switching to an already open buffer with :e tells the agent the buffer
was not reread from disk and that :e! rereads it.
The :ar option now has three states, default 1: drop reasoning, log
it without printing it, or log and print it.
Added :ato to detach a running agent shell command after N seconds,
disabled by default (0); a bare :ato toggles between 0 and 30. The
command keeps running in the background (status 124, its own process
group, output to a file; a later result reports its exit status).
Session logs now live in a directory named with the session start time,
$HOME/.nextvi/logs/YYYYmmdd-HHMMSS, or under log_dir; a colliding name
takes a -N suffix, so concurrent sessions do not overwrite each other.
A new /asides/ temporary buffer, saved with the session logs, holds
side exchanges: compactions, checkpoints, budget checks and :acap
questions, instead of reusing the /sc/ scratch buffer.
max_tool_rounds defaults to 0 (unlimited) instead of 300.
Source commits:
master ba3c1c1
manual 7b95ccd
patches 4415766
patch2vi bbfddfb
test 8eab22a