Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
07f3629
chore(plan): update the io-cli roadmap
aakashpawar1999 Aug 16, 2026
60c8e1f
chore(plan): specify io-cli 0.1.0
aakashpawar1999 Aug 16, 2026
2b1d996
chore(iterate): record plan change for io-cli 0.1.0
aakashpawar1999 Aug 16, 2026
ca3a470
chore(develop): Create the repository skeleton and the one-crate manife…
aakashpawar1999 Aug 16, 2026
a92dcf3
chore(develop): Add `ci.yml`: build, test, clippy -D warnings and fmt -…
aakashpawar1999 Aug 16, 2026
41ea2a6
chore: track the UltraShip workspace configuration
aakashpawar1999 Aug 16, 2026
c46f3de
chore(develop): Build the inline renderer core and the byte-stream capt…
aakashpawar1999 Aug 16, 2026
53c33ff
chore(develop): Handle resize without duplicating committed scrollback,…
aakashpawar1999 Aug 16, 2026
f8d1885
chore(develop): Add the theme token set with two shipped themes, termin…
aakashpawar1999 Aug 16, 2026
7a610bd
chore(develop): Build the composer on `tui-textarea`: multiline on Shif…
aakashpawar1999 Aug 16, 2026
4fb7090
chore(develop): Build the `Picker` overlay component, once, as the widg…
aakashpawar1999 Aug 16, 2026
65f06e7
chore(develop): Render the status line with model, elapsed time and a w…
aakashpawar1999 Aug 16, 2026
bb14ace
chore(develop): Map io-harness run events to rendered cells with an exh…
aakashpawar1999 Aug 16, 2026
acf2fbe
chore(develop): Bridge io-harness to the screen: an `Observer` that han…
aakashpawar1999 Aug 16, 2026
e1ed9bc
chore(develop): Build the first-run wizard through its eight screens an…
aakashpawar1999 Aug 16, 2026
8159999
chore(develop): Verify the credential against the live endpoint inside …
aakashpawar1999 Aug 16, 2026
1ebef84
chore(develop): Add the five slash commands: `/help`, `/quit`, `/setup`…
aakashpawar1999 Aug 16, 2026
e50bf4b
chore(develop): restore a truncated evidence line for US-IO-CLI-0.1.0…
aakashpawar1999 Aug 16, 2026
ff21763
chore(develop): Assert the forbidden subsystems are absent: no HTTP cli…
aakashpawar1999 Aug 16, 2026
a30cf3c
chore(develop): Add `release.yml`: a cross-compile matrix producing the…
aakashpawar1999 Aug 16, 2026
3d0e4b0
chore(develop): Write `install.sh` and `install.ps1`: resolve the artif…
aakashpawar1999 Aug 16, 2026
ba38180
chore(develop): Write the README with the keybinding table, the slash-c…
aakashpawar1999 Aug 16, 2026
10ea768
chore(develop): Build the binary in release profile and run it, then re…
aakashpawar1999 Aug 16, 2026
57b3002
chore(develop): Run the live first run end to end against a real provid…
aakashpawar1999 Aug 16, 2026
6459687
chore(develop): checkpoint io-cli 0.1.0
aakashpawar1999 Aug 16, 2026
1ddb1b9
chore(develop): add the F1 fixture script
aakashpawar1999 Aug 16, 2026
653e50a
fix(render): land the fixed-viewport change that its task never staged
aakashpawar1999 Aug 16, 2026
97ec43b
chore(develop): correct T12's files list to the files it actually cha…
aakashpawar1999 Aug 16, 2026
c99f597
chore(develop): Run the live first run end to end against a real provid…
aakashpawar1999 Aug 16, 2026
093f9bd
chore(develop): Run the live first run end to end against a real provid…
aakashpawar1999 Aug 16, 2026
3e38b37
chore(develop): Run the live first run end to end against a real provid…
aakashpawar1999 Aug 16, 2026
ebd44c6
chore(release): io-cli 0.1.0
aakashpawar1999 Aug 16, 2026
9349aa0
fix(driver): never read the keyboard while a viewport is being placed
aakashpawar1999 Aug 16, 2026
d661945
chore(release): io-cli 0.1.0
aakashpawar1999 Aug 16, 2026
d387727
Merge pull request #1 from initorigin/feat/0.1.0
aakashpawar1999 Aug 16, 2026
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
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Default reviewer for everything.
* @aakashpawar1999
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
name: Bug report
about: Report a problem in IO CLI
title: "bug: "
labels: bug
---

## What happened

<!-- A clear description of the bug. -->

## Steps to reproduce

1.
2.
3.

## Expected behavior

<!-- What you expected to happen. -->

## Environment

- IO CLI version / commit:
- OS:
- Relevant provider / model (if any):

## Additional context

<!-- Logs, traces, screenshots. Do not include secrets or API keys. -->
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: Feature request
about: Suggest an idea for IO CLI
title: "feat: "
labels: enhancement
---

## Problem

<!-- What problem does this solve? Who has it? -->

## Proposed solution

<!-- What you would like to happen. -->

## Alternatives considered

<!-- Other approaches you thought about. -->

## Scope

<!-- Is this in scope for this product? See docs/CAPABILITIES.md. -->
30 changes: 30 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## Summary

<!-- What does this PR do and why? -->

## Type

<!-- Delete those that do not apply. -->

feat / fix / docs / refactor / perf / test / build / ci / chore

## Target branch

- [ ] This PR targets **`develop`** (feature work), or
- [ ] This is a **`develop` → `main`** release PR (`release: vX.Y.Z`)

## Changelog

- [ ] I updated `CHANGELOG.md` under `## [Unreleased]`, **or** this change is
not user-facing.

## Checklist

- [ ] Code is formatted and lints clean
- [ ] Tests pass where they exist
- [ ] The change is focused on one concern
- [ ] No signature / attribution trailers in commits

## Notes for the reviewer

<!-- Anything the reviewer should know. -->
29 changes: 29 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: 2

# Dependabot opens its pull requests against the DEFAULT branch unless told
# otherwise, and this repository's default branch is `main`. `main` takes nothing
# but a release merge from `develop`, so a bot PR into it would bypass the whole
# flow. Every ecosystem here targets `develop` explicitly.
#
# The cost of that line is real and worth stating: GitHub does not raise
# Dependabot *security* updates against a non-default target branch. Security
# advisories have to be acted on by hand here, through the same develop -> main
# path as any other change.
updates:
- package-ecosystem: cargo
directory: "/"
target-branch: develop
schedule:
interval: weekly
open-pull-requests-limit: 5
groups:
# One PR for routine patch bumps instead of a dozen. This crate is a binary,
# so a patch bump moves Cargo.lock and nothing anybody resolves against.
patch-updates:
update-types: ["patch"]

- package-ecosystem: github-actions
directory: "/"
target-branch: develop
schedule:
interval: monthly
102 changes: 102 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: CI

# O1: green on macOS, Linux and Windows, on the feature branch and again on the
# merge to `develop`. Windows is not optional here — it is where a terminal
# renderer's assumptions about key reporting, resize events and ANSI support
# break, and it is where this line of repositories has historically found what
# the other two hid.

# `feat/**` is deliberately not a push trigger: every feature branch reaches
# `develop` through a pull request, and the pull request already runs this
# workflow. Listing it here would run the whole matrix twice per commit, in two
# different concurrency groups, so neither run cancels the other.
on:
push:
branches: [main, develop]
pull_request:
branches: [develop, main]
workflow_dispatch:

# Every `uses:` is pinned to a full-length commit SHA with its human-readable
# version in a trailing comment. A tag is a pointer its owner can move; a SHA is
# not, so what ran yesterday is what runs today. Dependabot bumps these and
# rewrites the trailing comment.
#
# Least privilege: every job only reads the checkout. Nothing publishes, nothing
# comments, no job takes a secret.
permissions:
contents: read

# Deliberately NOT `cancel-in-progress: true`. A superseded run is often the one
# carrying the diagnostics for the failure that prompted the next push, and this
# project has thrown those away before. Runner minutes are cheaper than a
# reproduction.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# Full debuginfo is the most expensive part of a debug build and on Windows it
# dominates link time. `line-tables-only` keeps what a CI failure is actually
# read from — a panic carries its own file and line, and a backtrace keeps
# frame file/line. Set for both profiles because `test` inherits `dev` in the
# manifest but not through this variable.
CARGO_PROFILE_DEV_DEBUG: line-tables-only
CARGO_PROFILE_TEST_DEBUG: line-tables-only

jobs:
# No dot in a job id, here or anywhere: GitHub accepts it and then `needs:`
# cannot refer to it.
build-and-test:
name: build and test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
# Off on purpose. One platform failing must not hide the state of the other
# two, which is the whole reason for running three.
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
with:
toolchain: stable
# io-harness pulls a bundled rusqlite, which is the expensive part of a
# cold build here.
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo build --all-targets
- run: cargo test --all-targets
# `cargo test --all-targets` does not run doctests. This crate has few, and
# they are cheap, but a doctest that stops compiling is a broken public
# example and CI should say so.
- run: cargo test --doc

lint:
name: fmt and clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
with:
toolchain: stable
components: rustfmt, clippy
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets -- -D warnings

msrv:
name: msrv
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
# The floor is read from `rust-version` in Cargo.toml rather than written
# here, so the two can never drift apart.
- id: msrv
run: echo "version=$(cargo metadata --no-deps --format-version 1 | python3 -c 'import json,sys; print(json.load(sys.stdin)["packages"][0]["rust_version"])')" >> "$GITHUB_OUTPUT"
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1
with:
toolchain: ${{ steps.msrv.outputs.version }}
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo build --all-targets
Loading
Loading