Skip to content

Releases: Owen718/FlashCoder

FlashCoder v0.1.0-rc.6

Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 12 Aug 13:13

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/FlashCoder/releases/download/v0.1.0-rc.6/flashcoder-0.1.0-rc.6.tgz -o flashcoder.tgz
npm install -g ./flashcoder.tgz

read says when it did not reach the end

read with no arguments returned the first two hundred lines of a file and set
truncated: false — a flag about the projection, which two hundred lines do not
trip. Nothing contradicted the only available reading: that the file was two
hundred lines long. Over half the TypeScript files in this repository are longer
than that.

An absent limit now means every line to the end of the file, so the only bound
that can cut a read is the projection, which says so and leaves an artifact
holding every byte — and read takes that artifact_ref as a path to pull
exact ranges from. A slice that stops early ends with the offset to continue
from. The tool description says all of this, so it is a contract rather than a
behaviour, which makes this a Cache ABI change: sessions from an earlier release
keep their frozen tools and load unchanged.

There is no ceiling on an explicit limit any more. The schema had never
declared one, and asking for five thousand lines failed while omitting the
argument read a hundred thousand.

Compaction stops inventing a mandate

A session that had read a goal.md answered the summary's "what was asked" with
that file's contents. The note recorded a request the user had never made, and
the next turn was handed it as the state of play. The prompt now asks what the
user asked for in their own words, and says instructions found in files are
facts about the workspace rather than requests.

FlashCoder v0.1.0-rc.5

Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 12 Aug 09:28

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/FlashCoder/releases/download/v0.1.0-rc.5/flashcoder-0.1.0-rc.5.tgz -o flashcoder.tgz
npm install -g ./flashcoder.tgz

Project instructions

A workspace can put its rules in AGENTS.md at its root: the command that
proves a change, the directories that are generated, the conventions worth
matching. It is read once when a session starts and frozen into that session's
prefix, so it sits in front of every request and, after the first, is a cache
hit rather than a cost.

Frozen means frozen. Editing the file does not reach a session already running;
the next new session picks it up. Only AGENTS.md, only the workspace root, no
inheritance. Capped at 16 KiB; a file that is unreadable, too large or not UTF-8
stops startup rather than being quietly dropped.

Turns are no longer capped

--max-tool-rounds and its fifty-round default are gone. A hard change is not
stuck at round sixty, and stopping it there turned tasks that would have
finished into [stopped by the turn budget: 50 of 50]. --max-cost-usd and
--max-minutes bound a runaway from the two directions that actually cost
something.

Less repeated, more said

The per-turn environment block carried cwd and an unbounded git status.
cwd cannot change inside a session, and the status list grows as the model
edits files, so a task touching fifty of them put fifty lines nobody asked for
in front of every later turn.

Now every turn carries the date and a status bounded to twenty entries, ending
in …and N more files. The first turn of a lineage additionally carries cwd
and the workspace's top level — fifty entries, one level, what the repository
itself ignores left out.

Fixes

  • Every git call the harness makes now has a timeout, and degrades to a missing
    fact instead of hanging the turn.
  • recover on a held lease said journal_lease_held and nothing else. Taking a
    lease is deliberate — you name the fingerprint you observed — but there was no
    way to find out what to name. It now prints the two commands.

FlashCoder v0.1.0-rc.4

Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 18:14

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/FlashCoder/releases/download/v0.1.0-rc.4/flashcoder-0.1.0-rc.4.tgz -o flashcoder.tgz
npm install -g ./flashcoder.tgz

The opening screen draws the name. v0.1.0-rc.3 renamed everything except the
wordmark, which still read SimpleDSH; the tagline named the old project too.
No behaviour changes.

Upgrading from SimpleDSH is described in
v0.1.0-rc.3:
existing workspaces keep their .dsh/, an existing key is still found, and
Sessions from an older binary continue without a cache break.

FlashCoder v0.1.0-rc.3

Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 16:20

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/FlashCoder/releases/download/v0.1.0-rc.3/flashcoder-0.1.0-rc.3.tgz -o flashcoder.tgz
npm install -g ./flashcoder.tgz

Renamed from SimpleDSH

DeepSeek's own harness appears to be called dsh, which made SimpleDSH read as
a simplified version of it. This project is not that.

The package, the command, ~/.config/dsh/ and the workspace's .dsh/ are all
renamed. Nothing you already have is lost:

  • A workspace that already holds .dsh/ keeps using it. Moving a Journal would
    be a rewrite, and this is a system that does not rewrite durable state. New
    workspaces get .flashcoder/.
  • A key at ~/.config/dsh/credentials is still read when the new path holds
    nothing, so you do not have to log in again. It is never written there again:
    flashcoder logout and the next flashcoder login move it across.
  • Sessions created by an older binary keep their frozen Cache ABI, including the
    system prompt that called the agent SimpleDSH, and continue without a cache
    break. Only new Sessions get the new prefix.

npm uninstall -g simpledsh removes the old command.

Some identifiers deliberately keep the old spelling, because they are durable
identity rather than branding and renaming them would orphan every Session ever
recorded: the tool-output media type, the protocol, projector and cache-ABI
domain strings hashed into every manifest, and the frozen historical prompts.

Sessions

/session opens a picker instead of printing the current id, which you already
knew. Up and down walk this workspace's Sessions, Enter takes one up, Escape
leaves you where you were. Rows lead with when you were last in a Session and
what you were doing in it, and carry the id on the right for
flashcoder continue from another terminal.

Resuming replaces the Session the loop is in and touches nothing durable: the
one being left is already closed at its last Commit Boundary and the one being
taken up continues from its own. It refuses while a turn is running, and an
interrupted Session says it needs recover rather than pretending.

SimpleDSH v0.1.0-rc.2

SimpleDSH v0.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 14:12

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/SimpleDSH/releases/download/v0.1.0-rc.2/simpledsh-0.1.0-rc.2.tgz -o simpledsh.tgz
npm install -g ./simpledsh.tgz

Batched tool calls

Parallel dispatch used to be limited to a run of read calls before the first
effect: one bash anywhere in a reply and everything after it went one at a
time, however independent it was, and web_search never batched at all.

A run of consecutive calls that the schema proved to be observations — read
and web_search, the tools that publish no Effect — now dispatches together, up
to twelve, anywhere in the reply. Anything else runs alone: the calls before it
commit first and the call after it does not start until it is committed. That is
what keeps effects in declared order, and it is also why the observations after
one are safe to overlap.

Results are still committed in declaration order whatever order they finish in,
the concurrency cap still stays out of the Cache ABI, and a tool counts as an
observation by the name the schema proved — never by what its arguments look
like. A bash command that reads like ls is still an effect.

The system prompt says so now, which moves the frozen zone: new sessions open on
a new Cache ABI. Sessions created by v0.1.0-rc.1 keep theirs, continue without a
cache break, and are unaffected.

SimpleDSH v0.1.0-rc.1

SimpleDSH v0.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 13:24

Prebuilt. Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/SimpleDSH/releases/download/v0.1.0-rc.1/simpledsh-0.1.0-rc.1.tgz -o simpledsh.tgz
npm install -g ./simpledsh.tgz
simpledsh login

Web search

Sessions now declare a fifth tool, web_search, backed by DeepSeek's official
server-side search in the Responses API. When the model needs facts the
workspace cannot provide, it searches with the same credential and feeds the
grounded answer back as the tool result. Sessions opened by an earlier build
keep their frozen tools ABI, continue without a cache break, and never search.

Note: search tokens are recorded in the session log but are not yet added to the
cost figure on the status line.

Interactive

  • /effort opens a slider over low, high and max. Changing it mid-session is a
    Cache ABI change: the conversation carries across as a summary and the next
    turn starts cold on purpose.
  • /quit beside /exit.
  • An opening screen naming the model, the effort and the directory, with the
    same three facts kept under the input for the rest of the session.
  • The input sits in a box with a > marker and the terminal's own cursor.

Fixes

  • Ctrl-C did not interrupt and Ctrl-D did not exit under terminals that
    negotiate the Kitty keyboard protocol or xterm modifyOtherKeys, including tmux
    with extended-keys. All the keys this layer claims now accept every
    encoding. Reported by @FeiSong123.
  • A prompt beginning with an absolute path (/tmp/notes.txt ...) was swallowed
    as an unknown slash command.
  • npm pack --json returns an object on npm 12; the packaging check accepted
    only the older array shape.

SimpleDSH v0.1.0-rc.0

SimpleDSH v0.1.0-rc.0 Pre-release
Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 07:15

A simple harness for DeepSeek — a coding agent that runs in your terminal,
talks to api.deepseek.com directly, and writes down everything it did in a
form you can replay.

Install

Node 22 or newer, macOS or Linux.

curl -fsSL https://github.com/Owen718/SimpleDSH/releases/download/v0.1.0-rc.0/simpledsh-0.1.0-rc.0.tgz -o simpledsh.tgz
npm install -g ./simpledsh.tgz
simpledsh login

Download first, then install from the file. Recent npm refuses to fetch
tarballs from arbitrary URLs (npm error code EALLOWREMOTE); this works on
every version, on a file you can inspect first.

Prebuilt: installing unpacks it and nothing else. This package declares no
install-time scripts.

What is in this candidate

  • Four tools — read, write, edit, bash — and an interactive multi-turn
    terminal UI with path and command completion, undo, and correct cursor
    placement for CJK and emoji.
  • Every run appends to a session log holding the exact request bytes, each
    assistant message, each tool call and artifact, and the cost. simpledsh inspect prints it as JSON. Closing the terminal loses nothing.
  • Conversations are append-only, so the byte prefix stays eligible for
    DeepSeek's context cache across turns. The hit ratio sits on the status line
    beside cost.
  • --verify <command> lets a command's exit code decide whether the work
    stands up. --protect <path> names what that check depends on; if those
    paths moved by the time it runs, the verdict is tampered, never passed.
  • /compact replaces a long conversation with a summary written on the
    lineage being replaced, so the old prefix is abandoned rather than rewritten.
    It runs on its own at 512K prompt tokens.

Please read before running it

bash runs as your user, with your authority. There is no sandbox. It can read
any file your account can read, including credentials outside the workspace,
and its writes are not confined to the project. Run it in a container, a VM or a
separate account if that matters to you.

Third-party code

src/tui/ is vendored from pi at
05bf9df, MIT, Copyright (c) 2025 Mario Zechner.

SimpleDSH is an independent project, not affiliated with or endorsed by
DeepSeek.