diff --git a/content/features/te-cli/te-cli-auth.md b/content/features/te-cli/te-cli-auth.md index 86b556b1..ef1f5daa 100644 --- a/content/features/te-cli/te-cli-auth.md +++ b/content/features/te-cli/te-cli-auth.md @@ -2,7 +2,7 @@ uid: te-cli-auth title: Authentication and Connections author: Peer Grønnerup -updated: 2026-05-06 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -24,7 +24,8 @@ The CLI supports the full Azure Identity credential chain: | Method | When to use | `--auth` value | | -- | -- | -- | -| Interactive browser | Local development - opens the system browser | `interactive` (default) | +| Automatic | Tries environment credentials, then cached or interactive browser login | `auto` (default) | +| Interactive browser | Local development - opens the system browser | `interactive` | | Service principal (client secret) | Automation, CI/CD, headless / SSH / WSL | `spn` (with `-u / -p / -t`) or `env` | | Service principal (certificate) | Automation with certificate-based auth | `spn` (with `-u / -t / --certificate`) | | Environment variables | `AZURE_CLIENT_ID` / `AZURE_CLIENT_SECRET` / `AZURE_TENANT_ID` | `env` | @@ -53,7 +54,7 @@ echo "$AZURE_CLIENT_SECRET" | te auth login -u "$AZURE_CLIENT_ID" -p - -t "$AZUR te auth login -u "$AZURE_CLIENT_ID" -t "$AZURE_TENANT_ID" --certificate ./sp.pfx --certificate-password "$CERT_PASSWORD" # Managed identity (Azure-hosted) -te auth login --identity +te auth login --identity # Alias: -I ``` After a successful service-principal login the CLI **caches the credentials** so every subsequent `te` command can acquire tokens silently - no need to re-pass `-u / -p / -t` or set the `AZURE_CLIENT_*` environment variables. Pass `--save=false` for a one-shot login that doesn't update the cache, or run `te auth logout` to clear it. @@ -116,7 +117,7 @@ te connect te connect --clear ``` -Active-connection state is per-terminal-session: opening a new terminal starts fresh. +Active-connection state is per-terminal-session: opening a new terminal starts fresh. Inspect or clean up session state with [`te session`](xref:te-cli-commands#session). ### Workspace mode (`-w` / `--workspace`) diff --git a/content/features/te-cli/te-cli-automation.md b/content/features/te-cli/te-cli-automation.md index 7b445dba..0b6211f8 100644 --- a/content/features/te-cli/te-cli-automation.md +++ b/content/features/te-cli/te-cli-automation.md @@ -2,7 +2,7 @@ uid: te-cli-automation title: Automation and Scripting author: Peer Grønnerup -updated: 2026-05-06 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -54,8 +54,8 @@ Every `te` command exits with a predictable status code so callers can branch on | Exit | Meaning | | -- | -- | | `0` | Success. | -| `1` | Generic failure - invalid arguments, command failed, validation errors, auth failure, BPA gate failed at severity ≥ error. | -| `2` | Used by `te diff` to indicate models differ (distinct from `0` identical and non-zero errors). | +| `1` | Generic failure - invalid arguments, command failed, validation errors, auth failure, BPA gate failed at severity ≥ error. For `te diff`: differences found (like the `diff`/`cmp` convention). | +| `2` | `te diff` only: an error occurred while comparing, so the difference status is unknown. | Combine exit codes with `--ci ` annotations and `--trx ` to surface rich failure information in CI - see @te-cli-cicd. diff --git a/content/features/te-cli/te-cli-commands.md b/content/features/te-cli/te-cli-commands.md index e7b58d82..72799301 100644 --- a/content/features/te-cli/te-cli-commands.md +++ b/content/features/te-cli/te-cli-commands.md @@ -2,7 +2,7 @@ uid: te-cli-commands title: Command Reference author: Peer Grønnerup -updated: 2026-05-12 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -134,6 +134,8 @@ These flags are available on every command and can be used before or after the s | `--non-interactive` | Disable all interactive prompts. Fail with an actionable error if required input is missing. | | `--debug` | Enable debug logging to stderr (connection strings, auth flow, timing). | +`te --version` prints the CLI version and exits. + For commands that read a model, the resolution order is: positional `` argument → `--model` global flag → `--server`/`--database` (remote) → active connection from `te connect` → `--recent`. @@ -185,10 +187,22 @@ te open ./my-model ### init -Create a new empty semantic model at the given path. +Create a new empty semantic model at the given path. Defaults to a TMDL model in `PowerBI` compatibility mode at compatibility level 1702. + +`te init` accepts: + +- `` - positional argument: directory to create the model in (omit to use the global `--model` path). +- `--compatibility-mode ` - `PowerBI` (default) or `AnalysisServices`. +- `--compatibility-level ` (alias `--compat`) - compatibility level. Defaults to `1702` when the mode is `PowerBI`, `1500` otherwise. See @update-compatibility-level. +- `--name ` - model/database name (default: the directory name). +- `--serialization ` - `tmdl` (default), `bim`, `te-folder`, `pbip`. +- `--force` - replace any existing file or directory at the target path. ```bash -te init ./new-model +te init ./new-model # TMDL, PowerBI mode, compat 1702 +te init ./new-model --serialization bim # Single-file BIM model +te init ./as-model --compatibility-mode AnalysisServices # AS model, compat 1500 +te init ./existing-dir --force # Overwrite non-empty directory ``` ## Model editing @@ -324,7 +338,7 @@ Get properties of a model object. Takes a ``. `te get` accepts: - `-q, --query ` - fetch a single property (e.g. `expression`, `formatString`). -- `-t, --type ` - disambiguate when the path matches multiple table-children (e.g. a column and a hierarchy with the same name). Values: `Measure`, `Column`, `CalculatedColumn`, `Hierarchy`, `Calendar`, `Partition`, `CalculationItem`. +- `-t, --type ` - disambiguate when the path matches multiple table-children (e.g., a column and a hierarchy with the same name). Values: `Measure`, `Column`, `CalculatedColumn`, `Hierarchy`, `Calendar`, `Partition`, `CalculationItem`. - `--output-format tmsl` (alias `bim`) - emit the resolved object as TMSL/BIM JSON. - `--output-format tmdl` - emit the resolved object as TMDL (named objects only). @@ -374,12 +388,18 @@ Analyze an object's upstream and downstream dependencies, or surface unused obje `te deps` accepts: +- `--upstream` - show only upstream dependencies (what this object uses). +- `--downstream` - show only downstream dependents (what uses this object). +- `--deep` - show the recursive dependency tree instead of direct dependencies only. +- `--max-depth ` - maximum depth for `--deep` traversal (default: `10`). +- `-t, --type ` - disambiguate when the path matches multiple table-children (e.g., a column and a hierarchy with the same name). - `--unused` - list measures, calculated columns, and **all data columns** that no DAX references and that aren't used in any relationship, hierarchy level, sort-by, variation, AlternateOf base, or calendar time role. Each result shows `(hidden)` in text mode and an `isHidden` field in JSON. - `--hidden` - narrow `--unused` to hidden objects only. Hidden, unused objects are the safest prune candidates because nothing user-facing depends on them. ```bash te deps Sales/Revenue # Upstream + downstream for one object te deps "'Sales'[Revenue]" # DAX form is accepted everywhere a is +te deps Sales/Revenue --downstream --deep # Everything that depends on Revenue, recursively te deps --unused # All unused measures and columns te deps --unused --hidden # Only hidden, unused objects ``` @@ -394,10 +414,16 @@ Validate model expressions, schema integrity, and TOM errors. - `--ci ` - emit CI annotations to stderr: `vsts` or `github`. - `--trx ` - write results as a VSTEST `.trx` file. +- `--errors-only` - shorthand for `--no-warnings --no-antipatterns`: only show errors. +- `--no-warnings` - hide warnings from the semantic analyzer. +- `--no-antipatterns` - hide anti-pattern suggestions (DAX best-practice hints). +- `--server-only` - only show errors reported by the connected server; skip local semantic analysis. +- `--no-multiline` - collapse multi-line cell content (error messages, expressions) to a single line. Text output only. ```bash te validate ./model te validate --ci github --trx results.trx +te validate --errors-only # Hide warnings and anti-pattern hints ``` ### bpa run @@ -545,6 +571,8 @@ Analyze VertiPaq storage statistics. `te vertipaq` accepts: - `--columns`, `--relationships`, `--partitions`, `--all`. +- `--detail` - show expanded columns (data/dict/hierarchy size breakdown, encoding, segments). +- `--fields ` - comma-separated fields to display (e.g., `--fields name,card,size,%tbl,%db,bar`). Available fields vary by view. - `--export ` - export VertiPaq stats to a `.vpax` file for offline analysis. - `--import ` - load a previously exported `.vpax` file and analyze it offline. - `--obfuscate` - obfuscate names and expressions in exported VPAX. @@ -565,7 +593,11 @@ Format DAX or M/Power Query expressions. - `-e, --expression ` - format a single inline expression. - `-p, --path ` - format a specific measure/column. -- `--lang ` - default `dax`. +- `-t, --type ` - disambiguate when the path matches multiple table-children. +- `--lang ` - expression language: `dax` (default) or `m`/`pq` for Power Query. +- `--semicolons` - use semicolons as list separators (European locale). +- `--long` - use long format (more line breaks). Default is short. +- `--no-space-after-function` - skip the space after function names. - `--save` / `--save-to` - persist formatted expressions. ```bash @@ -604,7 +636,7 @@ Execute one or more C# scripts against a semantic model. The CLI uses the same s - `-S, --script ` - `.cs` / `.csx` file (repeatable). - `-e, --expression ` - inline C# (use `-` for stdin). - `--save` / `--save-to` / `--serialization`. -- `--dry-run`, `--timeout `. +- `--dry-run` - compile the script(s) and report errors without executing them. ```bash te script --script fix.cs --save @@ -615,7 +647,7 @@ echo "Info(Model.Name);" | te script -e - > [!IMPORTANT] > Two behavioral details to know if you're porting an older script: > -> - **No interactive selection in CLI scripts.** The TE3 Desktop helpers `SelectMeasure()`, `SelectTable()`, `SelectColumn()`, `SelectObject()`, and `SelectObjects()` throw `NotSupportedException` when called from `te script` - the CLI has no UI to pop up. Pre-resolve the object(s) outside the script and pass them in, or wrap the call in `try/catch` if the script is shared with TE3. +> - **No interactive selection in CLI scripts.** The TE3 Desktop helpers `SelectMeasure()`, `SelectTable()`, `SelectColumn()`, `SelectObject()`, and `SelectObjects()` throw `NotSupportedException` when called from `te script` - the CLI has no UI to pop up. Pre-resolve the object(s) outside the script and pass them in via environment variables or stdin, or wrap the call in `try/catch` if the script is shared with TE3. > - **Default `using` directives match TE3 Desktop.** Scripts that use `DataTable`, `File`, `StringBuilder`, or `Regex` must include the corresponding `using System.Data;` / `using System.IO;` / `using System.Text;` / `using System.Text.RegularExpressions;` directive explicitly. > [!NOTE] @@ -749,7 +781,7 @@ Manage incremental refresh policies on tables. te incremental-refresh show ``` -Additional subcommands (`set`, `remove`, `apply`) are documented via `te incremental-refresh --help`. +Additional subcommands (`set`, `rm`, `apply`) are documented via `te incremental-refresh --help`. ## Testing @@ -801,6 +833,7 @@ Pair a primary source with a secondary target so every subsequent `--save` mirro - `te connect -w ./src` - primary is remote; `./src` receives an initial TMDL export and mirrors every save. - `te connect ./src -w ` - primary is local; an initial deploy pushes the model to the workspace, and subsequent saves re-deploy automatically. - `--workspace-format ` - choose the on-disk format when mirroring to a folder/file (e.g., `-w ./model.bim` infers BIM). +- `--workspace-auth ` - auth method for a remote workspace target when the primary is local. Defaults to `--auth` if set, else `auto`. - `--force` - required when the target already exists (non-empty folder, existing database). Without it, `te connect` shows an interactive `y/n` prompt with `n` as the safe default. Once active, `te set --save`, `te rm --save`, `te script --save`, etc. all dual-save transparently. Save order is always **local first, then remote** so the on-disk copy reflects the latest user change even if the server push fails. Clear the mirror with `te connect --clear`. @@ -859,14 +892,41 @@ te interactive -s MyWorkspace -d MyModel # Start with a remote model Quoting and DAX-style references work the same as outside the session - see the [Object paths](#object-paths) section above and @te-cli-interactive for details on bracket-aware argv splitting inside the REPL. +### session + +Show or manage the current terminal session. The CLI keeps per-terminal state (active connection, active profile, active test suite) in a session file, isolated per shell process. Set the `TE_SESSION` environment variable to share one named session across shells. + +Subcommands: + +| Subcommand | Purpose | +| -- | -- | +| `show` | Show current session details (ID, file path, active state). Default when no subcommand is given. | +| `list` | List all session files. | +| `clear` | Clear active state for the current session. | +| `prune` | Delete session files whose shell process is no longer running. | + +`te session prune` accepts: + +- `--all` - also remove sessions with live shells and named (`TE_SESSION`) sessions. The current session is always kept. +- `--dry-run` - show what would be removed without doing it. + +```bash +te session # Show current session details +te session list # List all session files +te session clear # Clear active state for this session +te session prune # Remove sessions whose shell is dead +te session prune --all --dry-run # Preview a full cleanup +``` + ### completion -Generate a shell completion script. See @te-cli-install. +Generate a shell completion script for `bash`, `zsh`, `powershell` (alias `pwsh`) or `fish`. See @te-cli-install. ```bash te completion bash te completion zsh te completion pwsh +te completion fish ``` ## Exit codes @@ -874,8 +934,8 @@ te completion pwsh | Exit | Meaning | | -- | -- | | `0` | Success. | -| `1` | Generic failure (invalid arguments, command failed, validation errors, auth failure, BPA gate failed at severity ≥ error). | -| `2` | Non-zero diff (`te diff`) - models differ. | +| `1` | Generic failure (invalid arguments, command failed, validation errors, auth failure, BPA gate failed at severity ≥ error). For `te diff`: differences found. | +| `2` | `te diff` only: an error occurred while comparing, so the difference status is unknown. | For fine-grained control in CI pipelines, combine exit codes with `--ci ` annotations and `--trx` results files - see @te-cli-cicd. diff --git a/content/features/te-cli/te-cli-config.md b/content/features/te-cli/te-cli-config.md index 94b34508..9a5db398 100644 --- a/content/features/te-cli/te-cli-config.md +++ b/content/features/te-cli/te-cli-config.md @@ -2,7 +2,7 @@ uid: te-cli-config title: Custom Configuration author: Peer Grønnerup -updated: 2026-04-20 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -247,7 +247,7 @@ Use the following CLI-specific environment variables for paths, behavior, and di | `TE_DEBUG` | Set to `1` to enable debug logging globally (same as `--debug` or `debug: true` in config). | | `NO_SPINNER` | Set to `1` or `true` to disable animated progress indicators (alternative to `spinner: false` in config). | | `CI` | Auto-detected. When `1` or `true`, the CLI disables the spinner and switches to plain output. Most CI runners set this automatically. | -| `TE_SESSION` | Override the per-terminal session ID used for active-connection state. Useful for running multiple isolated CLI sessions inside the same shell, e.g. in parallel CI matrix jobs. | +| `TE_SESSION` | Override the per-terminal session ID used for active-connection state. Useful for running multiple isolated CLI sessions inside the same shell, e.g. in parallel CI matrix jobs. Inspect and manage sessions with [`te session`](xref:te-cli-commands#session). | | `TE_COMPAT` | Set to `te2` to force TE2-compatibility mode - see @te-cli-migrate. | ## Related pages diff --git a/content/features/te-cli/te-cli-install.md b/content/features/te-cli/te-cli-install.md index 6d94ea87..568023ba 100644 --- a/content/features/te-cli/te-cli-install.md +++ b/content/features/te-cli/te-cli-install.md @@ -2,7 +2,7 @@ uid: te-cli-install title: Installation and Setup author: Peer Grønnerup -updated: 2026-05-06 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -131,7 +131,7 @@ te config set hidePreviewNotice true ## Shell completion -The CLI provides tab-completion scripts for **Bash**, **Zsh**, and **PowerShell**. Pick the block that matches your shell — each one installs the completion persistently for new shell sessions. +The CLI provides tab-completion scripts for **Bash**, **Zsh**, **PowerShell** and **Fish**. Pick the block that matches your shell — each one installs the completion persistently for new shell sessions. ### Bash (macOS/Linux) @@ -154,6 +154,12 @@ echo 'fpath=(~/.zfunc $fpath); autoload -U compinit; compinit' >> ~/.zshrc Add-Content $PROFILE 'te completion pwsh | Out-String | Invoke-Expression' ``` +### Fish (macOS/Linux) + +```bash +te completion fish > ~/.config/fish/completions/te.fish +``` + Open a new shell session for completion to take effect. Completion covers subcommands, global flags, and model paths (where tab-completion against the filesystem is meaningful). diff --git a/content/features/te-cli/te-cli-limitations.md b/content/features/te-cli/te-cli-limitations.md index 71bcc8b5..ce83dd5d 100644 --- a/content/features/te-cli/te-cli-limitations.md +++ b/content/features/te-cli/te-cli-limitations.md @@ -2,7 +2,7 @@ uid: te-cli-limitations title: Known Limitations author: Peer Grønnerup -updated: 2026-05-20 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -27,13 +27,13 @@ The CLI runs C# scripts (`te script`) against the same `Model` object you use in | Limitation | Notes / Workaround | | -- | -- | -| **`System.Windows.Forms` not loaded** | The CLI uses a cross-platform `TOMWrapper` build that strips all WinForms-coupled code; the WinForms assembly is never loaded into the AppDomain. Scripts that reference `System.Windows.Forms` types (`MessageBox`, `Form`, file pickers, custom dialogs, …) fail to compile. Refactor any UI interaction into script arguments, environment variables, or stdin. | -| **`Selected.` returns an empty enumerable** | `Selected.Tables`, `Selected.Measures`, `Selected.Columns`, `Selected.Hierarchies`, etc. iterate to nothing in the CLI - no compile or runtime error, just no rows. Replace with explicit lookups: `Model.AllMeasures.Where(...)`, `Model.Tables["Sales"].Measures`, or pass object paths via `te script --args`. | +| **`System.Windows.Forms` not loaded** | The CLI uses a cross-platform `TOMWrapper` build that strips all WinForms-coupled code; the WinForms assembly is never loaded into the AppDomain. Scripts that reference `System.Windows.Forms` types (`MessageBox`, `Form`, file pickers, custom dialogs, …) fail to compile. Refactor any UI interaction into environment variables or stdin input. | +| **`Selected.` returns an empty enumerable** | `Selected.Tables`, `Selected.Measures`, `Selected.Columns`, `Selected.Hierarchies`, etc. iterate to nothing in the CLI - no compile or runtime error, just no rows. Replace with explicit lookups: `Model.AllMeasures.Where(...)`, `Model.Tables["Sales"].Measures`, or pass object paths into the script via environment variables or stdin. | | **`Selected.` throws an error at runtime** | `Selected.Table`, `Selected.Measure`, `Selected.Column`, `Selected.Hierarchy`, etc. return an error because they require exactly one selected object of that type and the CLI selection is always empty. Reference the object directly - e.g. `Model.Tables["Sales"]`. | | **`Selected.ActivePerspectives` and `Selected.ActiveCulture`** | Always return an empty collection and `null` respectively. Set the perspective or culture explicitly in the script if needed. | -| **`Select` dialogs throw `NotSupportedException`** | `SelectTable`, `SelectColumn`, `SelectMeasure`, `SelectObject`, `SelectObjects` (and all overloads) return the following error: *"Object selection dialogs … are not available in CLI scripts. Pre-select the object by name or path before scripting."* Resolve targets up front from script arguments, config, or by querying the model. | +| **`Select` dialogs throw `NotSupportedException`** | `SelectTable`, `SelectColumn`, `SelectMeasure`, `SelectObject`, `SelectObjects` (and all overloads) return the following error: *"Object selection dialogs … are not available in CLI scripts. Pre-select the object by name or path before scripting."* Resolve targets up front from environment variables, config, or by querying the model. | | **`Info` / `Warning` / `Error` / `Output` write to the console** | These still work, but route to stdout/stderr instead of opening a dialog. They never block and never offer an "ignore further popups" prompt. Safe to use in CI. | -| **`ShowPrompt(...)` always returns `Cancel`** | No interactive confirmation is possible. Pre-decide the answer via script arguments or configuration. | +| **`ShowPrompt(...)` always returns `Cancel`** | No interactive confirmation is possible. Pre-decide the answer via environment variables or configuration. | | **`SuspendWaitForm` / `WaitFormVisible` are no-ops** | The "Please wait" spinner is a TE3 UI element. `WaitFormVisible` is a settable flag with no visual effect, and `SuspendWaitForm` is silently ignored - existing scripts continue to compile. | | **`host.Macro(...)` / `CustomAction(...)` throws and error** | The CLI does not load `%APPDATA%/TabularEditor3/MacroActions.json`, so invoking a macro from inside a script returns an error. Inline the macro logic, or call the macro's underlying script file directly. | | **`table.GetCardinality()` / `column.GetTotalSize()` return 0** | The in-script VertiPaq cardinality helpers have no live VPA in the CLI host. For VPA statistics, load a VPAX explicitly and use `host.Vpa.*`, or run [`te vertipaq`](xref:te-cli-commands#vertipaq). | diff --git a/content/features/te-cli/te-cli-migrate.md b/content/features/te-cli/te-cli-migrate.md index 471a0ec3..aeaf127a 100644 --- a/content/features/te-cli/te-cli-migrate.md +++ b/content/features/te-cli/te-cli-migrate.md @@ -2,7 +2,7 @@ uid: te-cli-migrate title: Migrating from the TE2 Command Line author: Peer Grønnerup -updated: 2026-05-06 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -59,7 +59,7 @@ A non-exhaustive summary of the most commonly used flags. Run `te migrate` for t | `file` (positional) | `te ` or global `--model` | First positional arg on most commands. | | `server`, `database` | `te connect ` or `te deploy ` | Server is no longer a global positional. | | `-L` / `-LOCAL` | `te connect --local` | Windows only. | -| `-S` / `-SCRIPT` | `te script -s ` or `-e "code"` | Supports multiple scripts, inline code, and stdin. | +| `-S` / `-SCRIPT` | `te script -S ` or `-e "code"` | Supports multiple scripts, inline code, and stdin. Note: uppercase `-S` - lowercase `-s` is the global `--server` option. | | `-A` / `-ANALYZE` | `te bpa run --rules ` | Supports `--fail-on`, `--fix`, multiple rule files. | | `-AX` / `-ANALYZEX` | `te bpa run --rules ` (without `--model-rules`) | Excluding model-embedded rules is the new default. | | `-B` / `-BIM` | `te save -o --serialization bim` | | diff --git a/content/features/te-cli/te-cli.md b/content/features/te-cli/te-cli.md index 5378c744..5c091878 100644 --- a/content/features/te-cli/te-cli.md +++ b/content/features/te-cli/te-cli.md @@ -2,7 +2,7 @@ uid: te-cli title: Tabular Editor CLI (Limited Public Preview) author: Peer Grønnerup -updated: 2026-05-12 +updated: 2026-06-11 applies_to: products: - product: Tabular Editor 2 @@ -54,9 +54,9 @@ See @te-cli-commands for a full command reference with syntax, options, and exam | [Execution](xref:te-cli-commands#execution) | Run DAX queries, C# scripts, macros | [`te query`](xref:te-cli-commands#query), [`te script`](xref:te-cli-commands#script), [`te macro`](xref:te-cli-commands#macro) | | [Deployment & Refresh](xref:te-cli-commands#deployment-and-refresh) | Deploy to workspace, trigger refresh, incremental refresh | [`te deploy`](xref:te-cli-commands#deploy), [`te refresh`](xref:te-cli-commands#refresh), [`te incremental-refresh`](xref:te-cli-commands#incremental-refresh) | | [Testing](xref:te-cli-commands#testing) | Assertion tests, snapshots, A/B comparison | [`te test run`](xref:te-cli-commands#test-run) | -| [Connection & Authentication](xref:te-cli-commands#connection-and-auth) | Connect to workspaces, manage authentication and profiles | [`te connect`](xref:te-cli-commands#connect), [`te auth`](xref:te-cli-commands#auth-login--status--logout), [`te profile`](xref:te-cli-commands#profile-list--show--set--remove) | +| [Connection & Authentication](xref:te-cli-commands#connection-and-authentication) | Connect to workspaces, manage authentication and profiles | [`te connect`](xref:te-cli-commands#connect), [`te auth`](xref:te-cli-commands#auth-login--status--logout), [`te profile`](xref:te-cli-commands#profile-list--show--set--remove) | | [Configuration](xref:te-cli-commands#configuration) | Settings and licensing | [`te config`](xref:te-cli-commands#config-show--paths--init--set) | -| [Shell](xref:te-cli-commands#shell) | Interactive mode, shell completions | [`te interactive`](xref:te-cli-commands#interactive), [`te completion`](xref:te-cli-commands#completion) | +| [Shell](xref:te-cli-commands#shell) | Interactive mode, session state, shell completions | [`te interactive`](xref:te-cli-commands#interactive), [`te session`](xref:te-cli-commands#session), [`te completion`](xref:te-cli-commands#completion) | ## Getting started