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: 3 additions & 10 deletions docs/cli/IMPLEMENTATION_STATUS.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# ALTAI CLI Implementation Status

**Date:** 2026-07-29
**Date:** 2026-07-30
**Desktop base:** v0.6.4
**IsanAgent dependency:** temporary path pin `tools/isanagent-oneshot`
(based on `8c9eef2` + oneshot host API; see `docs/cli/isanagent-oneshot-api.md`)
**IsanAgent dependency:** git `altaidevorg/isanagent` `main`
(oneshot host API merged in [`isanagent#101`](https://github.com/altaidevorg/isanagent/pull/101); see `docs/cli/isanagent-oneshot-api.md`)

## Existing

Expand Down Expand Up @@ -44,15 +44,8 @@
|---|---|---|
| Full bus-message parity in the CLI journal sink (tool calls, thinking, usage) | Only `run_started` / `run_terminated` are journaled; desktop's richer per-turn events are not yet mirrored by the CLI | **M6 follow-up** |
| Release packaging / installed-binary CI matrix | Partial | `altai-cli smoke` CI job builds release binary + version/doctor/completion/dry-run; full archives/installers still open |
| Upstream merge of oneshot + theme + approval + attachment host API | Local path pin; upstream PR open | Switch back to git rev after [isanagent#99](https://github.com/altaidevorg/isanagent/pull/99) merges |
| Full PTY visual golden frames | Width-fit string snapshots only | Expand in CI matrix follow-up |

## Blocked

| Blocker | Impact | Resolution path |
|---|---|---|
| IsanAgent upstream PR not yet merged | ALTAI still path-pins `tools/isanagent-oneshot` | Merge [isanagent#99](https://github.com/altaidevorg/isanagent/pull/99), then retarget Cargo deps to the git rev |

## Next milestone

### M6 — Packaging, CI matrix, richer journal parity
Expand Down
24 changes: 18 additions & 6 deletions docs/cli/TEST.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@

- Added a narrow IsanAgent oneshot host API (`run_oneshot`, `oneshot_prompt`,
`observe_tx`, `scripted_responses`, headless `altai-cli` channel). Temporarily
path-pinned at `tools/isanagent-oneshot` pending upstream merge; see
`docs/cli/isanagent-oneshot-api.md`.
later merged upstream via
[`altaidevorg/isanagent#101`](https://github.com/altaidevorg/isanagent/pull/101);
see `docs/cli/isanagent-oneshot-api.md`.
- `altai run` now performs a real one-shot host session (pretty / json / jsonl,
Ctrl-C → exit 7, timeout → exit 8, non-TTY approval/clarification → exit 4).
- Non-interactive runs default to `--permission plan` when no permission flag is
Expand All @@ -100,8 +101,8 @@
- `--no-tui` line mode prints a status banner and labeled outbound lines.
- Width-fit snapshot coverage at 80/100/160 columns (string snapshots; full PTY
golden frames deferred).
- `cargo test -p altai-core -p altai-cli` → 35 tests; IsanAgent `width_fit` +
`theme` + oneshot host tests pass against the path pin.
- `cargo test -p altai-core -p altai-cli` → 35 tests; IsanAgent `width_fit` +
`theme` + oneshot host tests pass against the (then) path pin.

## M3 results — 2026-07-29

Expand Down Expand Up @@ -192,6 +193,17 @@
- Oneshot channel resumes approvals/clarifications on the controlling TTY when
available (`prompt_on_tty`); hotkeys `y/n/a/x` normalize to
approve/deny/always/abort. Non-TTY / failed tty still exits with code `4`.
- Synced into IsanAgent upstream PR
[`altaidevorg/isanagent#99`](https://github.com/altaidevorg/isanagent/pull/99).
- Synced into IsanAgent upstream via
[`altaidevorg/isanagent#101`](https://github.com/altaidevorg/isanagent/pull/101)
(superseding the [#99](https://github.com/altaidevorg/isanagent/pull/99) / revert cycle).
- Packaging / installed-binary CI matrix and full PTY golden frames remain open.

## Retarget — drop path pin — 2026-07-30

- After IsanAgent `main` landed the oneshot host surface (`ea90fa0`), ALTAI
`Cargo.toml` deps switched back to
`git = "https://github.com/altaidevorg/isanagent.git", branch = "main"`.
- Removed `tools/isanagent-oneshot`.
- `cargo test -p altai-core -p altai-cli` and `cargo check -p altai --lib`
passed against the git tip; `pnpm isanagent:sync` (`cargo update -p isanagent`)
works again.
17 changes: 9 additions & 8 deletions docs/cli/isanagent-oneshot-api.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# IsanAgent oneshot host API (M1)

**Status:** Temporary path pin pending upstream merge
**Base revision:** `8c9eef2cf63f0b888f5b73778f056ba7d21467cf`
**Local pin:** `tools/isanagent-oneshot`
**Diff artifacts:** `docs/cli/isanagent-oneshot-api.*.diff`
**Status:** Merged upstream — ALTAI tracks `altaidevorg/isanagent` `main`
**Merged via:** [`altaidevorg/isanagent#101`](https://github.com/altaidevorg/isanagent/pull/101) (`ea90fa0`)
**Historical base (path pin era):** `8c9eef2cf63f0b888f5b73778f056ba7d21467cf`
**Diff artifacts (historical):** `docs/cli/isanagent-oneshot-api.*.diff`

## Public additions

Expand Down Expand Up @@ -48,10 +48,11 @@ pub use HostThemeMode;

## Upstream status

Proposed as [`altaidevorg/isanagent#99`](https://github.com/altaidevorg/isanagent/pull/99).
ALTAI still path-depends on `tools/isanagent-oneshot` until that PR merges;
then switch `src-tauri/Cargo.toml` and `src-tauri/crates/altai-cli/Cargo.toml`
back to the git revision and delete the local pin.
Host oneshot / theme / approval / attachment APIs landed on IsanAgent `main` via
[#101](https://github.com/altaidevorg/isanagent/pull/101) (superseding the earlier
[#99](https://github.com/altaidevorg/isanagent/pull/99) / revert cycle). ALTAI
depends on git `main` again; the temporary `tools/isanagent-oneshot` path pin is
removed. `pnpm isanagent:sync` / CI continue to refresh the lockfile tip.

## M5 / M6 notes

Expand Down
1 change: 1 addition & 0 deletions src-tauri/Cargo.lock

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

9 changes: 6 additions & 3 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,12 @@ tar = "0.4"
base64 = "0.22"
pdf-extract = "0.12"

# Temporary path pin for the M1 oneshot host API. Switch back to the upstream
# git revision after the oneshot host PR merges into altaidevorg/isanagent.
isanagent = { path = "../tools/isanagent-oneshot" }
# İsanAgent — embedded as Rust crate (direct API, no sidecar).
# Track upstream `main`. Dev (`beforeDevCommand`), CI, and release all run
# `cargo update -p isanagent` before compile so builds pick up the tip.
# Cargo.lock still records the last resolved commit for reproducibility;
# `.github/workflows/isanagent-bump.yml` opens a sync PR when that tip moves.
isanagent = { git = "https://github.com/altaidevorg/isanagent.git", branch = "main" }
tauri-plugin-single-instance = "2"
tauri-plugin-cli = "2"
tauri-plugin-deep-link = "2"
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/crates/altai-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ altai-core = { path = "../altai-core" }
altai-protocol = { path = "../altai-protocol" }
clap = { version = "4.6.1", features = ["derive"] }
clap_complete = "4.6.0"
isanagent = { path = "../../../tools/isanagent-oneshot" }
isanagent = { git = "https://github.com/altaidevorg/isanagent.git", branch = "main" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["rt-multi-thread", "signal", "sync", "time", "macros", "io-util", "io-std"] }
Expand Down
Empty file removed tools/isanagent-oneshot/.cargo-ok
Empty file.
60 changes: 0 additions & 60 deletions tools/isanagent-oneshot/.github/workflows/ci.yml

This file was deleted.

119 changes: 0 additions & 119 deletions tools/isanagent-oneshot/.github/workflows/release-artifacts.yml

This file was deleted.

18 changes: 0 additions & 18 deletions tools/isanagent-oneshot/.gitignore

This file was deleted.

Loading