Skip to content

FlashCoder v0.1.0-rc.3

Pre-release
Pre-release

Choose a tag to compare

@Owen718 Owen718 released this 11 Aug 16:20
· 15 commits to main since this release

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.