Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
41708c0
feat: add ai-transport demo command skeleton and dependencies
mattheworiordan Apr 15, 2026
7869d87
feat: add fake LLM, demo codec, and mutable messages detection
mattheworiordan Apr 15, 2026
9abc008
feat: add HTTP server and presence-based server discovery
mattheworiordan Apr 15, 2026
970e301
feat: add Ink TUI layout and move lib to services directory
mattheworiordan Apr 15, 2026
9a5861d
fix: redesign TUI layout and fix Ink CI rendering issue
mattheworiordan Apr 15, 2026
0f6c313
feat: wire streaming demo end-to-end with error handling
mattheworiordan Apr 15, 2026
cd02e4e
feat: add --value-only flag to auth keys current
mattheworiordan Apr 15, 2026
e680b0b
fix: suppress AIT SDK NACK spam on mutable messages error
mattheworiordan Apr 15, 2026
6fe49b1
fix: update server test for AIT request body format
mattheworiordan Apr 15, 2026
dadaec7
feat: add role modes, clean mutable messages error handling
mattheworiordan Apr 16, 2026
f19da26
fix: validate channel namespace and make error dialog dynamic
mattheworiordan Apr 16, 2026
ab9d84d
fix(ai-transport): forward codec encoder options to correlate stream …
mattheworiordan Apr 21, 2026
39300e7
feat(ai-transport): probe presence entries for liveness during discovery
mattheworiordan Apr 21, 2026
d5d6012
feat(ai-transport): streaming demo polish — ordering, scrollback, UX
mattheworiordan Apr 21, 2026
deb5514
feat(ai-transport): barge-in demo — interrupt a streaming response
mattheworiordan Apr 21, 2026
24ba7e9
fix(ai-transport): stop fake-LLM at the source on barge-in cancel
mattheworiordan Apr 21, 2026
4227b19
fix(ai-transport): align demo clientId with Ably connection for cance…
mattheworiordan Apr 21, 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
131 changes: 123 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ $ npm install -g @ably/cli
$ ably COMMAND
running command...
$ ably (--version)
@ably/cli/0.17.0 darwin-arm64 node-v24.4.1
@ably/cli/0.17.0 darwin-arm64 node-v22.14.0
$ ably --help [COMMAND]
USAGE
$ ably COMMAND
Expand Down Expand Up @@ -76,6 +76,10 @@ $ ably-interactive
* [`ably accounts login [TOKEN]`](#ably-accounts-login-token)
* [`ably accounts logout [ALIAS]`](#ably-accounts-logout-alias)
* [`ably accounts switch [ALIAS]`](#ably-accounts-switch-alias)
* [`ably ai-transport`](#ably-ai-transport)
* [`ably ai-transport demo`](#ably-ai-transport-demo)
* [`ably ai-transport demo barge-in`](#ably-ai-transport-demo-barge-in)
* [`ably ai-transport demo streaming`](#ably-ai-transport-demo-streaming)
* [`ably apps`](#ably-apps)
* [`ably apps create`](#ably-apps-create)
* [`ably apps current`](#ably-apps-current)
Expand Down Expand Up @@ -382,6 +386,117 @@ EXAMPLES

_See code: [src/commands/accounts/switch.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/accounts/switch.ts)_

## `ably ai-transport`

Interact with Ably AI Transport

```
USAGE
$ ably ai-transport

DESCRIPTION
Interact with Ably AI Transport

EXAMPLES
$ ably ai-transport demo streaming

$ ably ai-transport demo barge-in

COMMANDS
ably ai-transport demo Interactive demos of AI Transport features
```

_See code: [src/commands/ai-transport/index.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/ai-transport/index.ts)_

## `ably ai-transport demo`

Interactive demos of AI Transport features

```
USAGE
$ ably ai-transport demo

DESCRIPTION
Interactive demos of AI Transport features

EXAMPLES
$ ably ai-transport demo streaming

$ ably ai-transport demo barge-in

$ ably ai-transport demo cancel
```

_See code: [src/commands/ai-transport/demo/index.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/ai-transport/demo/index.ts)_

## `ably ai-transport demo barge-in`

Demo AI Transport barge-in: interrupt a streaming response mid-flight

```
USAGE
$ ably ai-transport demo barge-in [-v] [--json | --pretty-json] [--client-id <value>] [--role both|client|server] [--channel
<value>] [--endpoint <value>] [--auth-endpoint <value>]

FLAGS
-v, --verbose Output verbose logs
--auth-endpoint=<value> Auth endpoint returning JWT tokens (client-only, for external servers)
--channel=<value> Channel name to use (auto-generated if not provided)
--client-id=<value> Overrides any default client ID when using API authentication. Use "none" to explicitly
set no client ID. Not applicable when using token authentication.
--endpoint=<value> Server HTTP endpoint for sending messages (client-only, skips presence discovery)
--json Output in JSON format
--pretty-json Output in colorized JSON format
--role=<option> [default: both] Run as both client and server, or just one side
<options: both|client|server>

DESCRIPTION
Demo AI Transport barge-in: interrupt a streaming response mid-flight

EXAMPLES
$ ably ai-transport demo barge-in

$ ably ai-transport demo barge-in --role client --channel my-session

$ ably ai-transport demo barge-in --role server
```

_See code: [src/commands/ai-transport/demo/barge-in.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/ai-transport/demo/barge-in.ts)_

## `ably ai-transport demo streaming`

Demo AI Transport token streaming in a split-pane TUI

```
USAGE
$ ably ai-transport demo streaming [-v] [--json | --pretty-json] [--client-id <value>] [--role both|client|server] [--channel
<value>] [--endpoint <value>] [--auth-endpoint <value>]

FLAGS
-v, --verbose Output verbose logs
--auth-endpoint=<value> Auth endpoint returning JWT tokens (client-only, for external servers)
--channel=<value> Channel name to use (auto-generated if not provided)
--client-id=<value> Overrides any default client ID when using API authentication. Use "none" to explicitly
set no client ID. Not applicable when using token authentication.
--endpoint=<value> Server HTTP endpoint for sending messages (client-only, skips presence discovery)
--json Output in JSON format
--pretty-json Output in colorized JSON format
--role=<option> [default: both] Run as both client and server, or just one side
<options: both|client|server>

DESCRIPTION
Demo AI Transport token streaming in a split-pane TUI

EXAMPLES
$ ably ai-transport demo streaming

$ ably ai-transport demo streaming --role client --channel my-session

$ ably ai-transport demo streaming --role server
```

_See code: [src/commands/ai-transport/demo/streaming.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/ai-transport/demo/streaming.ts)_

## `ably apps`

Manage Ably apps
Expand Down Expand Up @@ -1016,13 +1131,14 @@ Show the current API key for the selected app

```
USAGE
$ ably auth keys current [-v] [--json | --pretty-json] [--app <value>]
$ ably auth keys current [-v] [--json | --pretty-json] [--app <value>] [--value-only]

FLAGS
-v, --verbose Output verbose logs
--app=<value> The app ID (defaults to current app)
--json Output in JSON format
--pretty-json Output in colorized JSON format
--value-only Output only the raw API key value, useful for scripting and environment variables

DESCRIPTION
Show the current API key for the selected app
Expand All @@ -1034,7 +1150,7 @@ EXAMPLES

$ ably auth keys current --json

$ ably auth keys current --pretty-json
$ ABLY_API_KEY=$(ably auth keys current --value-only) node my-script.js
```

_See code: [src/commands/auth/keys/current.ts](https://github.com/ably/ably-cli/blob/v0.17.0/src/commands/auth/keys/current.ts)_
Expand Down Expand Up @@ -1421,8 +1537,8 @@ Delete an annotation from a channel message

```
USAGE
$ ably channels annotations delete CHANNEL SERIAL TYPE [-v] [--json | --pretty-json] [--client-id <value>] [--count <value>]
[-n <value>]
$ ably channels annotations delete CHANNEL SERIAL TYPE [-v] [--json | --pretty-json] [--client-id <value>] [-n
<value>]

ARGUMENTS
CHANNEL The channel name
Expand All @@ -1434,7 +1550,6 @@ FLAGS
-v, --verbose Output verbose logs
--client-id=<value> Overrides any default client ID when using API authentication. Use "none" to explicitly set
no client ID. Not applicable when using token authentication.
--count=<value> The annotation count (for multiple.v1 types)
--json Output in JSON format
--pretty-json Output in colorized JSON format

Expand All @@ -1444,7 +1559,7 @@ DESCRIPTION
EXAMPLES
$ ably channels annotations delete my-channel "01234567890:0" "reactions:flag.v1" --name thumbsup

$ ably channels annotations delete my-channel "01234567890:0" "reactions:multiple.v1" --name thumbsup --count 2
$ ably channels annotations delete my-channel "01234567890:0" "reactions:multiple.v1" --name thumbsup

$ ably channels annotations delete my-channel "01234567890:0" "reactions:flag.v1" --json

Expand All @@ -1468,7 +1583,7 @@ ARGUMENTS
FLAGS
-v, --verbose Output verbose logs
--json Output in JSON format
--limit=<value> [default: 50] Maximum number of results to return (default: 50)
--limit=<value> [default: 100] Maximum number of results to return (default: 100)
--pretty-json Output in colorized JSON format

DESCRIPTION
Expand Down
32 changes: 32 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,38 @@ export default [
"unicorn/numeric-separators-style": "off",
},
},
{
// Configuration for AI Transport demo TUI - TSX files
files: ["src/services/ai-transport-demo/ui/**/*.{ts,tsx}"],
plugins: {
react: eslintPluginReact,
"@typescript-eslint": tsPlugin,
},
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaFeatures: {
jsx: true,
},
project: "./tsconfig.json",
},
},
settings: {
react: {
version: "detect",
},
},
rules: {
...eslintPluginReact.configs.recommended.rules,
...eslintPluginReact.configs["jsx-runtime"].rules,
...tsPlugin.configs.recommended.rules,
"unicorn/filename-case": "off",
"unicorn/prevent-abbreviations": "off",
"n/no-missing-import": "off",
"react/prop-types": "off",
"react/react-in-jsx-scope": "off",
},
},
{
// Configuration for React Web CLI package - TSX files
files: ["packages/react-web-cli/**/*.{ts,tsx}"],
Expand Down
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@
}
},
"dependencies": {
"@ably/ai-transport": "0.0.1",
"@ably/chat": "^1.0.0",
"@ably/spaces": "^0.4.0",
"@inquirer/prompts": "^5.1.3",
Expand All @@ -119,11 +120,14 @@
"@xterm/addon-fit": "^0.10.0",
"@xterm/addon-web-links": "^0.11.0",
"@xterm/xterm": "^5.5.0",
"ably": "^2.19.0",
"ably": "^2.21.0",
"chalk": "5",
"cli-table3": "^0.6.5",
"color-json": "^3.0.5",
"fast-levenshtein": "^3.0.0",
"get-port": "^7.2.0",
"ink": "^5.2.1",
"ink-text-input": "^6.0.0",
"inquirer": "^9.2.16",
"jsonwebtoken": "^9.0.2",
"node-fetch": "^3.3.2",
Expand Down Expand Up @@ -162,7 +166,6 @@
"eslint-plugin-unicorn": "^58.0.0",
"execa": "^9.5.2",
"fs-extra": "^11.3.0",
"get-port": "^7.1.0",
"globals": "^15.15.0",
"http-server": "^14.1.1",
"nock": "^14.0.3",
Expand Down
Loading