Skip to content

add /clear alias for /new - #153

Merged
kevinjosethomas merged 1 commit into
mainfrom
eng-4021
Jun 12, 2026
Merged

add /clear alias for /new#153
kevinjosethomas merged 1 commit into
mainfrom
eng-4021

Conversation

@kevinjosethomas

@kevinjosethomas kevinjosethomas commented Jun 12, 2026

Copy link
Copy Markdown
Member
  • users coming from other agent clis expect /clear, but only /new existed for starting a fresh session.
  • registered /clear as a built-in alongside /new so autocomplete, extension conflict warnings, and the agents view all pick it up automatically.
  • both commands route to the same session reset handler, and the readme command table now lists the alias.

Note

Low Risk
Small UX alias with no new behavior beyond existing session reset; limited to slash-command registration and routing.

Overview
Adds /clear as a built-in slash command alias for /new, so users can start a fresh session with either name.

The alias is registered in BUILTIN_SLASH_COMMANDS (autocomplete, extension conflict checks, and agents-view classification treat it like other built-ins). Interactive mode dispatches /clear to the same handleClearCommand path as /new. The README command table documents /new, /clear together, and agents-view tests expect clear to be session-only like new.

Reviewed by Cursor Bugbot for commit d0c5466. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add /clear as an alias for /new in interactive mode

Typing /clear in the interactive editor now starts a new session, identical to /new. The command is registered in BUILTIN_SLASH_COMMANDS and documented in the README.

Macroscope summarized d0c5466.

@linear

linear Bot commented Jun 12, 2026

Copy link
Copy Markdown
ENG-4021 Add /clear alias for /new

Seems like we have /new actually, just need to add an alias or something

Review in Linear

@kevinjosethomas
kevinjosethomas merged commit 999eb85 into main Jun 12, 2026
3 checks passed
@kevinjosethomas
kevinjosethomas deleted the eng-4021 branch June 16, 2026 01:27
zhengr pushed a commit to zhengr/prime-agent that referenced this pull request Aug 8, 2026
zhengr pushed a commit to zhengr/prime-agent that referenced this pull request Aug 8, 2026
sethkarten pushed a commit that referenced this pull request Sep 3, 2026
* feat(coding-agent): ACP lineage-v1 provenance producer

One opaque request ID on the wire (X-ACP-Lineage-Request-ID +
Idempotency-Key, minted before the call and stable across retries of the
same call), a durable append-only lineage.jsonl ledger per agent session
beside its artifacts, context epochs driven by compaction outcomes,
cross-process ancestry for spawned subagents, and deriveLineageManifest
folding a session tree's ledgers into the verifiers lineage-v1 manifest.
Derivation only; nothing publishes or reads the ledger yet.

* fix(coding-agent): harden lineage retry identity, spawn ancestry, and ledger repair

Review round 2 on the lineage-v1 producer: retry Idempotency-Key reuse now
requires a byte-identical body (sha256 of model + system prompt + messages)
instead of a shape proxy; spawn ancestry is snapshotted synchronously at the
spawn entry point and survives resume via ledger replay; child terminal
status is recorded once at actual release (reusable children stay running
across follow-up runs, startup failures record failed); ledger construction
never mutates the file (torn-tail repair deferred to first append) and only
a malformed unterminated final line counts as torn; the completed-compaction
ledger event now precedes the transcript commit. Adds host pass-through,
real-summary-call wire, negative validator calibration, replayed-status,
double-wrap, and failed/cancelled mapping coverage.

* fix(coding-agent): eager lineage body hash and mutation-hardened tests

Round 3 on the lineage-v1 producer. The retry body hash is now computed
eagerly at request creation, before the wire call, so mutating the live
message objects between the failed call and the retry park can no longer
alias two different bodies under one Idempotency-Key (TOCTOU regression
test included; the lazy-thunk indirection is gone). Test hardening from
the mutation campaign: hash keyed on provider/model/systemPrompt each
proven independently; undefined-vs-undefined parked hashes never match;
readLineageLedger proven read-only; torn-tail repair proven single-shot;
spawn-ancestry snapshot proven to precede preflight awaits; the completed
compaction ledger event proven durable before (and exactly once despite
a failing) transcript commit. The invariant port checks compactions
before requests and the negative calibration table asserts the named
error per row, adding duplicate-context, session-owner, and per-predicate
isolation rows.

* test(coding-agent): kill the last two lineage mutants

readLineageLedger is proven to never open the ledger for writing (a
missing path must throw ENOENT and stay missing; a zero-byte append-open
would create it), and the calibration table gains a row where a fully
valid child compaction is named by a root request, so only the
request-side compaction owner check can reject it.

* feat(coding-agent)!: convert the provenance producer to ACP semantic-edges-v1

The ecosystem replaced lineage-v1 (nano-rlm #153, verifiers #2449): one
renamed correlation header (X-ACP-Model-Request-ID + Idempotency-Key) and
sparse commit-gated semantic edges instead of a full session manifest.
The durable per-session JSONL ledger keeps its hardened mechanics
(ledger-before-wire, torn-vs-corrupt tails, repair-on-first-append,
read-path purity, replay idempotence, eager body-hash retry identity,
synchronous spawn snapshots) and now records request outcomes: the
streamFn wrapper commits or fails each request when its stream resolves,
compaction summaries commit around the real wire call only, and a parent
claims a child_returned with the child's last committed request at the
success point. deriveSemanticEdges is a pure order-independent fold to
continuation/subagent_call/subagent_return/compaction edges: edges
materialize only when their target commits, failed requests return their
inbound edges to the session's pending set (prime-agent has no prompt
rollback, so they attach to the next commit), spawn edges defer to the
child's first committed request, and a completed compaction suppresses
the summary's own continuation. Deleted: context epochs, session status
recording, depth in ledger events, the manifest deriver, and the
lineage-v1 validator port with its calibration table.

* test(coding-agent): kill the five surviving semantic-edge mutants

Two isolated compaction fold gates (a committed summary followed by a
later commit, and a failed compaction after a committed summary, each
producing no compaction edge), distinct wrapper outcome cases including a
rejected stream promise and an aborted final message (both must fail the
request), and the wire header asserted as the literal string
X-ACP-Model-Request-ID so a renamed production constant cannot pass.

* feat(coding-agent): failed subagent runs also return their last commit

Aligns with nano-rlm a1d7856: a failed child still returns an error
outcome the parent consumes, so the failure settle point now records
child_returned with the child's last committed request. Cancelled runs
and zero-commit children stay silent; the returned-once guard is
unchanged. Tests cover the failed-with-commits return edge, failed
zero-commit silence, and cancelled-with-commits silence.

* fix(coding-agent): harden semantic-edge retry identity and ledger fault paths

Review-bot round: the retry body hash now covers tools and the
request-shaping stream options (reasoning, thinking budgets, temperature,
max tokens, service tier); parking is forfeited entirely when a
before_provider_request hook is registered, since payload hooks rewrite
the wire body after the hash point; ledger write failures in the stream
outcome observer and in compaction error paths are contained with a
one-line warning instead of crashing or masking the original error (the
completed-compaction ID is marked consumed before its write so a failed
write propagates untouched); and side questions now use the unwrapped
inner stream function, keeping their calls out of the session ledger and
the continuation chain.

* fix(coding-agent): distinct request identity per split-turn summary call

Split-turn compactions send two summary calls with different bodies; one
shared Idempotency-Key gets rejected (or replayed) by key-honoring
interceptors. compact() now runs every summary call through a host
runner that mints its own request ID, headers, and finish/fail outcome,
and the edge fold tracks all summary slices of a compaction, keying the
compaction edge off whichever slice is the session's last commit. Earlier
slices contribute ordinary continuation edges.

* fix(coding-agent): degrade the semantic-edge recorder instead of throwing

Review-bot round 2, one mechanism for four findings: the first failed
ledger operation (read at construction or any append) permanently
disables the recorder with a single warning; every write becomes a no-op
and the streamFn wrapper and compaction runner stop emitting request IDs
on the wire, preserving ledger-before-wire instead of weakening it. This
removes the scattered try/catch layers (recordOutcomeSafely and both
compaction-path guards are deleted) and means an unwritable ledger can no
longer break compaction, rewrite a successful child run to error, or fail
a compaction whose summary succeeded. Appends are now durable before
in-memory commit state advances, so a failed write never leaves a
claimable commit. Aborted compaction summaries record request_failed
rather than committing partial text into the chain. Compaction summary
slices claim no pending edges and return none on failure (documented
divergence from nano-rlm): pending defers to the post-compaction turn,
the request that actually consumes subagent results.

* fix(coding-agent): flush pending edges to the last-committed summary slice

A completed compaction as the session's final activity permanently lost
deferred pending edges (subagent_return, reclaimed continuations): the
slices claimed nothing and no post-compaction turn ever arrived. The fold
now flushes still-pending edges to the compaction's last-committed slice
at completion — the same request that sources the compaction edge — so
pending always lands on a committed request whether or not the session
continues, restoring nano-equivalent single-call semantics while staying
deterministic for split turns. Failed or cancelled compactions still
leave pending for the next turn.

* fix(coding-agent): dedupe the terminal flush against generated continuations

The terminal flush appended pending edges after the last summary slice
had already emitted its regenerated continuation, so a reclaimed
continuation from the same source derived twice — duplicate edges the
consumer rejects. The flush now applies nano's source-only suppression:
a pending edge from X removes the slice's generated continuation from X
regardless of the pending edge's type, then pending flushes once.

* fix(coding-agent): commit summary slices only when the compaction commits and gate spawn attribution on an active run

A split-turn summary slice that succeeded on the wire no longer publishes request_finished at stream resolution: slices settle at the compaction outcome, so a failed or cancelled compaction leaves no committed summary request and the next turn's continuation edge stays on the pre-compaction request. Spawn attribution now requires an active agent run; an out-of-band spawn records no spawned_by_request_id instead of a stale one.
sethkarten pushed a commit that referenced this pull request Sep 3, 2026
…t-traces outbox (#1984)

* feat(coding-agent): ACP lineage-v1 provenance producer

One opaque request ID on the wire (X-ACP-Lineage-Request-ID +
Idempotency-Key, minted before the call and stable across retries of the
same call), a durable append-only lineage.jsonl ledger per agent session
beside its artifacts, context epochs driven by compaction outcomes,
cross-process ancestry for spawned subagents, and deriveLineageManifest
folding a session tree's ledgers into the verifiers lineage-v1 manifest.
Derivation only; nothing publishes or reads the ledger yet.

* fix(coding-agent): harden lineage retry identity, spawn ancestry, and ledger repair

Review round 2 on the lineage-v1 producer: retry Idempotency-Key reuse now
requires a byte-identical body (sha256 of model + system prompt + messages)
instead of a shape proxy; spawn ancestry is snapshotted synchronously at the
spawn entry point and survives resume via ledger replay; child terminal
status is recorded once at actual release (reusable children stay running
across follow-up runs, startup failures record failed); ledger construction
never mutates the file (torn-tail repair deferred to first append) and only
a malformed unterminated final line counts as torn; the completed-compaction
ledger event now precedes the transcript commit. Adds host pass-through,
real-summary-call wire, negative validator calibration, replayed-status,
double-wrap, and failed/cancelled mapping coverage.

* fix(coding-agent): eager lineage body hash and mutation-hardened tests

Round 3 on the lineage-v1 producer. The retry body hash is now computed
eagerly at request creation, before the wire call, so mutating the live
message objects between the failed call and the retry park can no longer
alias two different bodies under one Idempotency-Key (TOCTOU regression
test included; the lazy-thunk indirection is gone). Test hardening from
the mutation campaign: hash keyed on provider/model/systemPrompt each
proven independently; undefined-vs-undefined parked hashes never match;
readLineageLedger proven read-only; torn-tail repair proven single-shot;
spawn-ancestry snapshot proven to precede preflight awaits; the completed
compaction ledger event proven durable before (and exactly once despite
a failing) transcript commit. The invariant port checks compactions
before requests and the negative calibration table asserts the named
error per row, adding duplicate-context, session-owner, and per-predicate
isolation rows.

* test(coding-agent): kill the last two lineage mutants

readLineageLedger is proven to never open the ledger for writing (a
missing path must throw ENOENT and stay missing; a zero-byte append-open
would create it), and the calibration table gains a row where a fully
valid child compaction is named by a root request, so only the
request-side compaction owner check can reject it.

* feat(coding-agent)!: convert the provenance producer to ACP semantic-edges-v1

The ecosystem replaced lineage-v1 (nano-rlm #153, verifiers #2449): one
renamed correlation header (X-ACP-Model-Request-ID + Idempotency-Key) and
sparse commit-gated semantic edges instead of a full session manifest.
The durable per-session JSONL ledger keeps its hardened mechanics
(ledger-before-wire, torn-vs-corrupt tails, repair-on-first-append,
read-path purity, replay idempotence, eager body-hash retry identity,
synchronous spawn snapshots) and now records request outcomes: the
streamFn wrapper commits or fails each request when its stream resolves,
compaction summaries commit around the real wire call only, and a parent
claims a child_returned with the child's last committed request at the
success point. deriveSemanticEdges is a pure order-independent fold to
continuation/subagent_call/subagent_return/compaction edges: edges
materialize only when their target commits, failed requests return their
inbound edges to the session's pending set (prime-agent has no prompt
rollback, so they attach to the next commit), spawn edges defer to the
child's first committed request, and a completed compaction suppresses
the summary's own continuation. Deleted: context epochs, session status
recording, depth in ledger events, the manifest deriver, and the
lineage-v1 validator port with its calibration table.

* test(coding-agent): kill the five surviving semantic-edge mutants

Two isolated compaction fold gates (a committed summary followed by a
later commit, and a failed compaction after a committed summary, each
producing no compaction edge), distinct wrapper outcome cases including a
rejected stream promise and an aborted final message (both must fail the
request), and the wire header asserted as the literal string
X-ACP-Model-Request-ID so a renamed production constant cannot pass.

* feat(coding-agent): failed subagent runs also return their last commit

Aligns with nano-rlm a1d7856: a failed child still returns an error
outcome the parent consumes, so the failure settle point now records
child_returned with the child's last committed request. Cancelled runs
and zero-commit children stay silent; the returned-once guard is
unchanged. Tests cover the failed-with-commits return edge, failed
zero-commit silence, and cancelled-with-commits silence.

* fix(coding-agent): harden semantic-edge retry identity and ledger fault paths

Review-bot round: the retry body hash now covers tools and the
request-shaping stream options (reasoning, thinking budgets, temperature,
max tokens, service tier); parking is forfeited entirely when a
before_provider_request hook is registered, since payload hooks rewrite
the wire body after the hash point; ledger write failures in the stream
outcome observer and in compaction error paths are contained with a
one-line warning instead of crashing or masking the original error (the
completed-compaction ID is marked consumed before its write so a failed
write propagates untouched); and side questions now use the unwrapped
inner stream function, keeping their calls out of the session ledger and
the continuation chain.

* fix(coding-agent): distinct request identity per split-turn summary call

Split-turn compactions send two summary calls with different bodies; one
shared Idempotency-Key gets rejected (or replayed) by key-honoring
interceptors. compact() now runs every summary call through a host
runner that mints its own request ID, headers, and finish/fail outcome,
and the edge fold tracks all summary slices of a compaction, keying the
compaction edge off whichever slice is the session's last commit. Earlier
slices contribute ordinary continuation edges.

* fix(coding-agent): degrade the semantic-edge recorder instead of throwing

Review-bot round 2, one mechanism for four findings: the first failed
ledger operation (read at construction or any append) permanently
disables the recorder with a single warning; every write becomes a no-op
and the streamFn wrapper and compaction runner stop emitting request IDs
on the wire, preserving ledger-before-wire instead of weakening it. This
removes the scattered try/catch layers (recordOutcomeSafely and both
compaction-path guards are deleted) and means an unwritable ledger can no
longer break compaction, rewrite a successful child run to error, or fail
a compaction whose summary succeeded. Appends are now durable before
in-memory commit state advances, so a failed write never leaves a
claimable commit. Aborted compaction summaries record request_failed
rather than committing partial text into the chain. Compaction summary
slices claim no pending edges and return none on failure (documented
divergence from nano-rlm): pending defers to the post-compaction turn,
the request that actually consumes subagent results.

* fix(coding-agent): flush pending edges to the last-committed summary slice

A completed compaction as the session's final activity permanently lost
deferred pending edges (subagent_return, reclaimed continuations): the
slices claimed nothing and no post-compaction turn ever arrived. The fold
now flushes still-pending edges to the compaction's last-committed slice
at completion — the same request that sources the compaction edge — so
pending always lands on a committed request whether or not the session
continues, restoring nano-equivalent single-call semantics while staying
deterministic for split turns. Failed or cancelled compactions still
leave pending for the next turn.

* fix(coding-agent): dedupe the terminal flush against generated continuations

The terminal flush appended pending edges after the last summary slice
had already emitted its regenerated continuation, so a reclaimed
continuation from the same source derived twice — duplicate edges the
consumer rejects. The flush now applies nano's source-only suppression:
a pending edge from X removes the slice's generated continuation from X
regardless of the pending edge's type, then pending flushes once.

* refactor(coding-agent): reschedule agent-trace uploads through a disk-cursor outbox

Upload intent and uploaded-content cursors persist per session file in
agent-traces-outbox.json; a once-per-process startup catch-up uploads
whatever a previous process never finished and prunes cursors of deleted
files. Unchanged sessions are never re-uploaded. 429s return immediately
and reschedule via the controller instead of sleeping in-request, and
session disposal no longer knows trace uploads exist.

Linear: ENG-5838

* fix(coding-agent): make the trace outbox per-entry, durable at persist, and process-exit safe

One entry file per session (path-hashed) replaces the single-map file: concurrent writers cannot lose cursors and a bad read costs only its own entry. The pending marker is written synchronously at first persist. A failed cursor write after a successful PUT returns a retryable failure. 429 Retry-After is honored on the next scheduled cycle. All upload timers are unref-ed so telemetry never holds the process open.

* fix(coding-agent): retry failed intent markers and cap Retry-After at the timer maximum

A failed pending-marker write no longer marks the session as locally managed, so the next persist retries it. A Retry-After beyond Node's ~24.8-day setTimeout maximum is capped there instead of overflowing to an immediate retry loop.

* fix(coding-agent): commit summary slices only when the compaction commits and gate spawn attribution on an active run

A split-turn summary slice that succeeded on the wire no longer publishes request_finished at stream resolution: slices settle at the compaction outcome, so a failed or cancelled compaction leaves no committed summary request and the next turn's continuation edge stays on the pre-compaction request. Spawn attribution now requires an active agent run; an out-of-band spawn records no spawned_by_request_id instead of a stale one.

* feat(coding-agent): register the semantic-edge ledger with the agent-traces outbox

The per-session semantic-edges.jsonl becomes a second outbox kind: durable kind-tagged intent at the first transcript persist, an append-only byte cursor (uploadedBytes) whose unchanged files are never re-counted, catch-up inclusion after a kill, and pruning when the ledger is deleted with its session. No delivery endpoint exists yet (verifiers#2449 consumes edges in-band over ACP metadata; the trace server has no semantic-edges route), so pending ledgers are counted, never sent, and the cursor stays untouched for the first real sender. Unknown outbox kinds from newer builds are left alone. The ledger path derivation is shared between the recorder and the outbox registration.

* fix(coding-agent): re-register the ledger intent when the outbox ledger path changes

A controller update that changes semanticEdgesLedgerPath resets the intent memo, so a reused SessionManager registers the new ledger at its next persist instead of silently dropping it from catch-up. Also bullet-prefix the changelog fragment.

* fix(coding-agent): consent-gate outbox intent at persist time and drop the ledger intent latch

Outbox entries (transcript and semantic-edges alike) are only created while trace sharing is enabled: an entry recorded during an opted-out era would turn a later enable into retroactive collection. The ledger intent memo is deleted rather than patched — marking re-runs every persist behind an existsSync short-circuit, so an entry pruned by a racing catch-up is re-registered at the next persist, and the path-change reset it needed disappears with it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant