Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .repository-projection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"schemaVersion": 1,
"projection": "deixic-code",
"projectionSchemaVersion": 1,
"sourceRepository": "dx-corp/mono",
"sourceSha": "6878323651fdb771b8cbf76b08597b930938ce36",
"destinationRepository": "dx-corp/code",
"priorProjectedBase": "4c484fec884560fda66a55a5a61722edf1a2d71e",
"definitionDigest": "07c1b987e17ae0398b4af8817192627b95c45168c305069446594fdaa3414682",
"toolDigest": "16fcaea2f0e7e35de09bcd8e515d915f65cdf1eb13033eaf2845f60eaa9e0a4f",
"contentDigest": "325d36d4b27c054e6edd55e71460299cdf56f8dc3ed887ae92ac326b531e60bc",
"publicationEligible": true
}
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,20 @@ versioning when releases are cut.
and keep scheduled public runs inert so public publishing stays downstream of
the internal source-of-truth release.

## [0.10.91] - 2026-09-18

### Added

- Administrators can require a signed machine policy that permits only approved
customer model endpoints, retains local history, and skips first-party update,
sign-in, session-sync and telemetry workers during disconnected operation.
- Enrolled machines can use a customer-hosted tool authority while retaining
hardware approval, tenant scope and revocation checks.

The private distribution remains experimental. These changes do not establish
an installed customer control plane, a qualified hosted coding workflow, an
independent model-quality benchmark or air-gap certification.

## [0.10.90] - 2026-09-16

### Added
Expand Down
34 changes: 17 additions & 17 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM docker.io/lukemathwalker/cargo-chef:0.1.77-rust-bookworm@sha256:1689f62cfaa6603480356923cb5966544b2dd6ea523e30486bee4f149965d5bc AS chef
FROM docker.io/lukemathwalker/cargo-chef:0.1.78-rust-bookworm@sha256:14ac293f096e29d01296479bb2f81ec1fb0d6ff166dc2be399cf79cc79ec4906 AS chef
WORKDIR /app

FROM chef AS planner
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,14 @@ deixic-code serve --port 3000 # HTTP runtime gateway
deixic-code hosted-runner
```

Sign in with `deixic-code evalops login` before starting a model turn.
Sign in with `deixic-code evalops login` to use managed inference.
The default model is GLM-5.3 through Deixic's LLM gateway. Your organization
must have model access enabled; signing in alone does not grant paid inference.
Provider credentials stay in the gateway. Explicit model settings and
`--model` continue to select another model, and using your own provider key
still requires Deixic login.
`--model` continue to select another model. Direct provider credentials and
explicit local model routes can run without Deixic login. Administrators can
install a signed [disconnected profile](docs/disconnected-profile.md) to restrict
models to customer endpoints and disable vendor connections.

## Build a local product reference

Expand Down
47 changes: 42 additions & 5 deletions docs/SESSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
Audience: users/operators managing session persistence.
Nav: [Docs index](README.md) · [Quickstart](QUICKSTART.md) · [Safety](SAFETY.md) · [Features](FEATURES.md)

Maestro persists conversation history in JSONL files under
`~/.maestro/agent/sessions/--<cwd>--`. Understanding the format helps when you
Deixic Code persists conversation history in JSONL files under
`~/.composer/agent/sessions/--<cwd>--`. Understanding the format helps when you
want to inspect, back up, or clean up sessions.

## Directory Layout

```
~/.maestro/agent/
~/.composer/agent/
└─ sessions/
└─ --Users-me-project--/
├─ 2025-01-15T18-05-23.982Z_<uuid>.jsonl
Expand Down Expand Up @@ -45,10 +45,47 @@ Important types:
| Flag | Effect |
| --------------- | --------------------------------------------- |
| `--continue` | Load the most recent session for the cwd |
| `--resume` | Interactive picker of existing sessions |
| `--resume-session <id>` | Resume a saved session by ID |
| `--session path`| Use a specific JSONL file (absolute or relative) |
| `--no-session` | Disable persistence entirely for this run |

## Find and resume saved conversations

Open `/sessions`, or press Ctrl+Alt+R, and type a phrase from a saved
conversation. Search includes names, IDs, working directories, user messages,
assistant replies, and tool results. Matching conversations show an excerpt.
Search runs locally in the background; opening the picker does not send a
model request. Enter resumes the selected conversation. Escape closes the
picker and keeps your draft.
For very large messages, search covers the first 50,000 characters.

## Forks and session changes

Run `/fork` to save a branch of the current conversation. The parent stays
selected, and an active response keeps running. The result includes a command
you can copy to resume the fork:

```sh
deixic-code --resume-session <fork-id>
```

Run `/tree` to browse the current conversation's saved branches. In `/sessions`,
Ctrl+F switches between all conversations and the selected conversation's
branches. Each fork shows its parent's ID. Enter resumes the selection; Escape
returns to your draft. Branches remain available after restarting Deixic Code.

During an active response, `/new` and `/rewind <turns>` ask before stopping it.
Escape on the confirmation keeps the response running. Enter stops the response, waits for tool
cleanup, saves its final events, and then opens the new conversation or saved
rewind branch. Queued prompts return to the composer. If cleanup cannot be
confirmed, the current conversation stays selected and an error is shown.
Keeping the current conversation during cleanup does not undo cancellation.
Session changes remain blocked until cleanup is acknowledged, including on a retry.

`/rewind <turns>` keeps the original conversation and leaves files unchanged.
`/rewind <turns> --files` also restores the affected file checkpoints. Use
`--dry-run` to preview a rewind without changing the conversation or files.

## Secure Transfer

For moving a session family between trusted installations, use the explicit
Expand Down Expand Up @@ -137,4 +174,4 @@ these without touching the JSONL by using:
- Use `--no-session` in CI or ephemeral workspaces to avoid clutter.

Future enhancements (continuous context, shared KBs) will reuse this directory,
so keep it tidy but don’t remove unrelated files under `~/.maestro/agent/`.
so keep it tidy but don’t remove unrelated files under `~/.composer/agent/`.
12 changes: 6 additions & 6 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@evalops/deixic-code",
"description": "Deixic Code — native Rust coding agent, CLI, TUI, and runtime gateway",
"version": "0.10.90",
"version": "0.10.91",
"private": false,
"type": "module",
"bin": {
Expand Down Expand Up @@ -98,6 +98,6 @@
},
"packageManager": "npm@11.18.0",
"devDependencies": {
"yaml": "^2.9.0"
"yaml": "^2.9.1"
}
}
8 changes: 5 additions & 3 deletions packages/ai-rs/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2500,6 +2500,7 @@ mod stream_idle_policy_tests {
// unrelated connection-refused failure.
let mut drain_deadline = None;
let mut quiet_since = None;
let mut stalled_connections = Vec::new();
loop {
if server_stop.load(Ordering::SeqCst) {
let now = std::time::Instant::now();
Expand All @@ -2525,9 +2526,10 @@ mod stream_idle_policy_tests {
let _ = stream.read(&mut request).expect("read gateway request");
server_requests.fetch_add(1, Ordering::SeqCst);
quiet_since = Some(std::time::Instant::now());
// Accept the request but never open an HTTP response.
// Keep the socket alive past the client-side boundary.
std::thread::sleep(Duration::from_millis(50));
// Never open a response or close the socket before the
// client emits its terminal event. A fixed sleep can
// expire before a timeout task runs on a loaded host.
stalled_connections.push(stream);
}
Err(error) if error.kind() == std::io::ErrorKind::WouldBlock => {
std::thread::sleep(Duration::from_millis(2));
Expand Down
Loading
Loading