@psnext/slingcli 3.0.20260810-3 → 3.0.20260811-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js +4 -1
  2. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js +19 -0
  3. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +12 -1
  4. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +2 -1
  5. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  6. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  7. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  8. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  9. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  10. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  11. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  12. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js +1 -1
  13. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -1
  14. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +3 -3
  15. package/node_modules/@earendil-works/pi-coding-agent/docs/compaction.md +9 -9
  16. package/node_modules/@earendil-works/pi-coding-agent/docs/containerization.md +8 -8
  17. package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +20 -12
  18. package/node_modules/@earendil-works/pi-coding-agent/docs/development.md +71 -0
  19. package/node_modules/@earendil-works/pi-coding-agent/docs/docs.json +14 -1
  20. package/node_modules/@earendil-works/pi-coding-agent/docs/environment-variables.md +9 -9
  21. package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +53 -26
  22. package/node_modules/@earendil-works/pi-coding-agent/docs/index.md +10 -9
  23. package/node_modules/@earendil-works/pi-coding-agent/docs/json.md +21 -16
  24. package/node_modules/@earendil-works/pi-coding-agent/docs/keybindings.md +46 -14
  25. package/node_modules/@earendil-works/pi-coding-agent/docs/llama-cpp.md +3 -3
  26. package/node_modules/@earendil-works/pi-coding-agent/docs/mcp.md +2 -2
  27. package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +25 -4
  28. package/node_modules/@earendil-works/pi-coding-agent/docs/packages.md +13 -13
  29. package/node_modules/@earendil-works/pi-coding-agent/docs/prompt-templates.md +1 -1
  30. package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +317 -0
  31. package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +11 -9
  32. package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +15 -13
  33. package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +33 -14
  34. package/node_modules/@earendil-works/pi-coding-agent/docs/security.md +5 -5
  35. package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +3 -1
  36. package/node_modules/@earendil-works/pi-coding-agent/docs/sessions.md +1 -1
  37. package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +6 -2
  38. package/node_modules/@earendil-works/pi-coding-agent/docs/shell-aliases.md +1 -1
  39. package/node_modules/@earendil-works/pi-coding-agent/docs/skills.md +5 -5
  40. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +3 -3
  41. package/node_modules/@earendil-works/pi-coding-agent/docs/termux.md +5 -5
  42. package/node_modules/@earendil-works/pi-coding-agent/docs/themes.md +7 -5
  43. package/node_modules/@earendil-works/pi-coding-agent/docs/tmux.md +3 -3
  44. package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +17 -10
  45. package/node_modules/@earendil-works/pi-coding-agent/docs/windows.md +1 -1
  46. package/package.json +2 -2
  47. package/slingshot/index.js +9 -7
@@ -1,8 +1,8 @@
1
- > pi can help you use the SDK. Ask it to build an integration for your use case.
1
+ > sling can help you use the SDK. Ask it to build an integration for your use case.
2
2
 
3
3
  # SDK
4
4
 
5
- The SDK provides programmatic access to pi's agent capabilities. Use it to embed pi in other applications, build custom interfaces, or integrate with automated workflows.
5
+ The SDK provides programmatic access to sling's agent capabilities. Use it to embed sling in other applications, build custom interfaces, or integrate with automated workflows.
6
6
 
7
7
  **Example use cases:**
8
8
  - Build a custom UI (web, desktop, mobile)
@@ -337,23 +337,23 @@ const { session } = await createAgentSession({
337
337
  cwd: process.cwd(), // default
338
338
 
339
339
  // Global config directory
340
- agentDir: "~/.pi/agent", // default (expands ~)
340
+ agentDir: "~/.sling/agent", // default (expands ~)
341
341
  });
342
342
  ```
343
343
 
344
344
  `cwd` is used by `DefaultResourceLoader` for:
345
- - Project extensions (`.pi/extensions/`)
345
+ - Project extensions (`.sling/extensions/`)
346
346
  - Project skills:
347
- - `.pi/skills/`
347
+ - `.sling/skills/`
348
348
  - `.agents/skills/` in `cwd` and ancestor directories (up to git repo root, or filesystem root when not in a repo)
349
- - Project prompts (`.pi/prompts/`)
349
+ - Project prompts (`.sling/prompts/`)
350
350
  - Context files (`AGENTS.md` walking up from cwd)
351
351
  - Session directory naming
352
352
 
353
353
  `agentDir` is used by `DefaultResourceLoader` for:
354
354
  - Global extensions (`extensions/`)
355
355
  - Global skills:
356
- - `skills/` under `agentDir` (for example `~/.pi/agent/skills/`)
356
+ - `skills/` under `agentDir` (for example `~/.sling/agent/skills/`)
357
357
  - `~/.agents/skills/`
358
358
  - Global prompts (`prompts/`)
359
359
  - Global context file (`AGENTS.md`)
@@ -442,7 +442,7 @@ Authentication resolution priority (handled by `ModelRuntime`):
442
442
  import { InMemoryCredentialStore } from "@earendil-works/pi-ai";
443
443
  import { createAgentSession, ModelRuntime } from "@earendil-works/pi-coding-agent";
444
444
 
445
- // Default: uses ~/.pi/agent/auth.json and ~/.pi/agent/models.json
445
+ // Default: uses ~/.sling/agent/auth.json and ~/.sling/agent/models.json
446
446
  const modelRuntime = await ModelRuntime.create();
447
447
 
448
448
  // Provider-owned auth methods and current status
@@ -452,7 +452,7 @@ for (const provider of modelRuntime.getProviders()) {
452
452
  }
453
453
 
454
454
  // Runtime API key override (not persisted to disk)
455
- modelRuntime.setRuntimeApiKey("anthropic", "sk-my-temp-key");
455
+ await modelRuntime.setRuntimeApiKey("anthropic", "sk-my-temp-key");
456
456
 
457
457
  // Custom credential and model locations
458
458
  const customRuntime = await ModelRuntime.create({
@@ -469,6 +469,24 @@ const { session } = await createAgentSession({
469
469
  });
470
470
  ```
471
471
 
472
+ `login()`, `logout()`, `setRuntimeApiKey()`, and `removeRuntimeApiKey()` resolve after the affected provider's cached/built-in catalog, composition, and availability snapshot are locally consistent. They do not wait for remote catalog freshness. If credentials were committed but local synchronization fails, they reject with the exported `CredentialSynchronizationError`; inspect its `providerId`, `operation`, `credential`, and `cause` fields instead of retrying the credential mutation blindly.
473
+
474
+ Public model/auth operations and `ModelRuntime.create({ signal })` accept optional abort signals and are unbounded when omitted. SDK applications own deadline policy for remote catalog freshness:
475
+
476
+ ```typescript
477
+ const signal = AbortSignal.timeout(15_000);
478
+ const result = await modelRuntime.refresh({
479
+ providers: ["anthropic"],
480
+ signal,
481
+ });
482
+ if (result.aborted) console.warn("Catalog refresh timed out; using cached models");
483
+ for (const [providerId, error] of result.errors) {
484
+ console.warn(`Could not refresh ${providerId}:`, error);
485
+ }
486
+ ```
487
+
488
+ A failed or timed-out network refresh does not undo a successful credential operation. `refresh()` starts a new provider generation, so it does not wait behind an older stalled refresh and stale generations cannot publish afterward.
489
+
472
490
  > See [examples/sdk/09-api-keys-and-oauth.ts](../examples/sdk/09-api-keys-and-oauth.ts)
473
491
 
474
492
  ### System Prompt
@@ -498,7 +516,7 @@ Specify which built-in tools to enable:
498
516
  - `noTools: "builtin"` disables default built-ins while keeping extension and custom tools enabled
499
517
  - `excludeTools` disables specific built-in, extension, or custom tool names after any `tools` allowlist is applied
500
518
 
501
- The `edit` tool returns `details.diff` for Pi's TUI display and `details.patch` as a standard unified patch for SDK consumers.
519
+ The `edit` tool returns `details.diff` for sling's TUI display and `details.patch` as a standard unified patch for SDK consumers.
502
520
 
503
521
  ```typescript
504
522
  import { createAgentSession } from "@earendil-works/pi-coding-agent";
@@ -580,7 +598,7 @@ If you pass `tools`, include each custom or extension tool name you want enabled
580
598
 
581
599
  ### Extensions
582
600
 
583
- Extensions are loaded by the `ResourceLoader`. `DefaultResourceLoader` discovers extensions from `~/.pi/agent/extensions/`, `.pi/extensions/`, and settings.json extension sources.
601
+ Extensions are loaded by the `ResourceLoader`. `DefaultResourceLoader` discovers extensions from `~/.sling/agent/extensions/`, `.sling/extensions/`, and settings.json extension sources.
584
602
 
585
603
  ```typescript
586
604
  import { createAgentSession, DefaultResourceLoader } from "@earendil-works/pi-coding-agent";
@@ -859,8 +877,8 @@ const { session } = await createAgentSession({
859
877
  **Project-specific settings:**
860
878
 
861
879
  Settings load from two locations and merge:
862
- 1. Global: `~/.pi/agent/settings.json`
863
- 2. Project: `<cwd>/.pi/settings.json`
880
+ 1. Global: `~/.sling/agent/settings.json`
881
+ 2. Project: `<cwd>/.sling/settings.json`
864
882
 
865
883
  Project overrides global. Nested objects merge keys. Setters modify global settings by default.
866
884
 
@@ -938,7 +956,7 @@ const modelRuntime = await ModelRuntime.create({
938
956
  modelsPath: "/custom/agent/models.json",
939
957
  });
940
958
  if (process.env.MY_KEY) {
941
- modelRuntime.setRuntimeApiKey("anthropic", process.env.MY_KEY);
959
+ await modelRuntime.setRuntimeApiKey("anthropic", process.env.MY_KEY);
942
960
  }
943
961
 
944
962
  // Inline tool
@@ -1144,6 +1162,7 @@ AgentSessionRuntime
1144
1162
  // Auth and Models
1145
1163
  ModelRuntime // implements pi-ai Models and owns credential storage
1146
1164
  ModelRegistry // synchronous extension compatibility facade
1165
+ CredentialSynchronizationError
1147
1166
  resolveCliModel
1148
1167
  resolveModelScopeWithDiagnostics
1149
1168
 
@@ -1,12 +1,12 @@
1
1
  # Security
2
2
 
3
- sling is a local coding agent. It runs with the permissions of the user account that starts it, and it treats files writable by that user as inside the same local trust boundary.
3
+ Pi is a local coding agent. It runs with the permissions of the user account that starts it, and it treats files writable by that user as inside the same local trust boundary.
4
4
 
5
5
  ## Project Trust
6
6
 
7
7
  Project trust controls whether sling loads project-local settings, resources, packages, and extensions. It is not a sandbox and it does not restrict what the model can ask tools to do after you start working in a directory.
8
8
 
9
- sling considers a project to have resources that require trust when it finds any of these from the current working directory:
9
+ Pi considers a project to have resources that require trust when it finds any of these from the current working directory:
10
10
 
11
11
  - `.sling/settings.json`
12
12
  - `.sling/extensions`, `.sling/skills`, `.sling/prompts`, or `.sling/themes`
@@ -24,17 +24,17 @@ Trusting a project allows sling to load project resources that require trust, in
24
24
  - missing project packages configured through project settings
25
25
  - project-local extensions and project package-managed extensions
26
26
 
27
- Declining trust skips protected resources. `AGENTS.md` and `CLAUDE.md` context files are loaded regardless of project trust unless context loading is disabled. Before trust is resolved, sling only loads context files, user/global extensions, and CLI `-e` extensions. User/global and CLI extensions can handle the `project_trust` event; the first extension that returns a yes/no decision owns the decision.
27
+ Declining trust skips protected resources. Context files such as `AGENTS.override.md`, `AGENTS.md`, and `CLAUDE.md` are loaded regardless of project trust unless context loading is disabled. Before trust is resolved, sling only loads context files, user/global extensions, and CLI `-e` extensions. User/global and CLI extensions can handle the `project_trust` event; the first extension that returns a yes/no decision owns the decision.
28
28
 
29
29
  Non-interactive modes (`-p`, `--mode json`, and `--mode rpc`) do not show a trust prompt. Without an applicable saved trust decision, `defaultProjectTrust: "ask"` and `"never"` ignore such resources, while `"always"` trusts them. Use `--approve`/`-a` or `--no-approve`/`-na` to override project trust for one run.
30
30
 
31
31
  ## No Built-in Sandbox
32
32
 
33
- sling does not include a built-in sandbox. Built-in tools can read files, write files, edit files, and run shell commands with the permissions of the sling process. Extensions are TypeScript modules that run with the same permissions. Package installs, shell commands, language servers, test commands, and other developer tools behave as ordinary local processes.
33
+ Pi does not include a built-in sandbox. Built-in tools can read files, write files, edit files, and run shell commands with the permissions of the sling process. Extensions are TypeScript modules that run with the same permissions. Package installs, shell commands, language servers, test commands, and other developer tools behave as ordinary local processes.
34
34
 
35
35
  This is intentional. sling is designed to operate on local source trees, invoke project toolchains, and integrate with the user's existing development environment. A partial in-process sandbox would be easy to misunderstand as a security boundary while still depending on the host shell, filesystem, package managers, credentials, and extension code. Real isolation needs to come from the operating system or a virtualization/container boundary.
36
36
 
37
- Project trust is only an input-loading guard. It prevents a repository from silently changing sling's settings or extensions before you approve it. It does not make untrusted code, untrusted prompts, or untrusted model output safe. Prompt injection from repository files, comments, documentation, context files, or build output is expected local-agent risk and cannot be reliably prevented by sling.
37
+ Project trust is only an input-loading guard. It prevents a repository from silently changing sling's settings or extensions before you approve it. It does not make untrusted code, untrusted prompts, or untrusted model output safe. Prompt injection from repository files, comments, documentation, context files, or build output is expected local-agent risk and cannot be reliably prevented by pi.
38
38
 
39
39
  ## Running Untrusted or Unmonitored Work
40
40
 
@@ -14,7 +14,7 @@ Where `<path>` is the working directory with `/` replaced by `-`.
14
14
 
15
15
  Sessions can be removed by deleting their `.jsonl` files under `~/.sling/agent/sessions/`.
16
16
 
17
- sling also supports deleting sessions interactively from `/resume` (select a session and press `Ctrl+D`, then confirm). When available, sling uses the `trash` CLI to avoid permanent deletion.
17
+ sling also supports deleting sessions interactively from `/resume` (select a session and press `Ctrl+D`, then confirm). When available, pslingi uses the `trash` CLI to avoid permanent deletion.
18
18
 
19
19
  ## Session Version
20
20
 
@@ -117,6 +117,8 @@ interface Usage {
117
117
  }
118
118
  ```
119
119
 
120
+ The exported pi-ai `StopReason` type also includes `"pending"`, but that value is reserved for partial messages in streaming events. Terminal `done`/`error` messages replace it with a completion reason before sling persists the assistant message, so `"pending"` should never appear in session JSONL.
121
+
120
122
  ### Extended Message Types (from pi-coding-agent)
121
123
 
122
124
  ```typescript
@@ -1,6 +1,6 @@
1
1
  # Sessions
2
2
 
3
- sling saves conversations as sessions so you can continue work, branch from earlier turns, and revisit previous paths.
3
+ Pi saves conversations as sessions so you can continue work, branch from earlier turns, and revisit previous paths.
4
4
 
5
5
  ## Session Storage
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Settings
2
2
 
3
- sling uses JSON settings files with project settings overriding global settings.
3
+ Pi uses JSON settings files with project settings overriding global settings.
4
4
 
5
5
  | Location | Scope |
6
6
  |----------|-------|
@@ -65,6 +65,9 @@ Use `/trust` in interactive mode to save a project trust decision for future ses
65
65
  | `outputPad` | number | `1` | Horizontal padding for user messages, assistant messages, and thinking (0 or 1) |
66
66
  | `autocompleteMaxVisible` | number | `5` | Max visible items in autocomplete dropdown (3-20) |
67
67
  | `showHardwareCursor` | boolean | `false` | Show the terminal cursor while TUI positions it for IME support |
68
+ | `tuiMode` | string | `"regular"` | Interactive TUI mode: `"regular"` or experimental `"fullscreen"`. Changes from `/settings` apply immediately; `--tui-mode` overrides this setting at startup |
69
+ | `fullscreenExitOutput` | string | `"transcript"` | Fullscreen exit output: `"transcript"` prints the final transcript and resume hint, while `"resume-hint"` restores the previous screen and prints only the resume hint. Has no effect in regular TUI mode |
70
+ | `fullscreenScrollbar` | string | `"auto"` | Fullscreen transcript scrollbar: `"auto"` shows it temporarily while scrolling, `"always"` reserves the rightmost column and keeps it visible, and `"hidden"` hides it. Has no effect in regular TUI mode |
68
71
 
69
72
  For VS Code, include `--wait` so sling resumes after the editor exits:
70
73
 
@@ -178,7 +181,7 @@ Keep `retry.provider.maxRetries` at `0` unless provider-level retries are explic
178
181
  | `terminal.showImages` | boolean | `true` | Show images in terminal (if supported) |
179
182
  | `terminal.imageWidthCells` | number | `60` | Preferred inline image width in terminal cells |
180
183
  | `terminal.clearOnShrink` | boolean | `false` | Clear empty rows when content shrinks (can cause flicker) |
181
- | `images.autoResize` | boolean | `true` | Resize images to 2000x2000 max |
184
+ | `images.autoResize` | boolean | `true` | Resize images to 2000x2000 max. Applies to `@file` attachments, `read`, and images returned by tools |
182
185
  | `images.blockImages` | boolean | `false` | Block all images from being sent to LLM |
183
186
 
184
187
  ### Shell
@@ -226,6 +229,7 @@ When multiple sources specify a session directory, precedence is `--session-dir`
226
229
  | Setting | Type | Default | Description |
227
230
  |---------|------|---------|-------------|
228
231
  | `markdown.codeBlockIndent` | string | `" "` | Indentation for code blocks |
232
+ | `markdown.mermaid` | string | `"streaming"` | Mermaid rendering mode: `"off"`, `"final"`, or `"streaming"` |
229
233
 
230
234
  ### Resources
231
235
 
@@ -1,6 +1,6 @@
1
1
  # Shell Aliases
2
2
 
3
- sling runs bash in non-interactive mode (`bash -c`), which doesn't expand aliases by default.
3
+ Pi runs bash in non-interactive mode (`bash -c`), which doesn't expand aliases by default.
4
4
 
5
5
  To enable your shell aliases, add to `~/.sling/agent/settings.json`:
6
6
 
@@ -21,7 +21,7 @@ sling implements the [Agent Skills standard](https://agentskills.io/specificatio
21
21
 
22
22
  > **Security:** Skills can instruct the model to perform any action and may include executable code the model invokes. Review skill content before use.
23
23
 
24
- sling loads skills from:
24
+ Pi loads skills from:
25
25
 
26
26
  - Global:
27
27
  - `~/.sling/agent/skills/`
@@ -29,7 +29,7 @@ sling loads skills from:
29
29
  - Project (only after the project is trusted):
30
30
  - `.sling/skills/`
31
31
  - `.agents/skills/` in `cwd` and ancestor directories (up to git repo root, or filesystem root when not in a repo)
32
- - Packages: `skills/` directories or `sling.skills` entries in `package.json`
32
+ - Packages: `skills/` directories or `pi.skills` entries in `package.json`
33
33
  - Settings: `skills` array with files or directories
34
34
  - CLI: `--skill <path>` (repeatable, additive even with `--no-skills`)
35
35
 
@@ -154,7 +154,7 @@ Per the [Agent Skills specification](https://agentskills.io/specification#frontm
154
154
  - Lowercase letters, numbers, hyphens only
155
155
  - No leading/trailing hyphens
156
156
  - No consecutive hyphens
157
- sling does not require the name to match the parent directory. The Agent Skills standard does, but that requirement is suboptimal for shared skill directories used by multiple tools.
157
+ Pi does not require the name to match the parent directory. The Agent Skills standard does, but that requirement is suboptimal for shared skill directories used by multiple tools.
158
158
 
159
159
  Valid: `pdf-processing`, `data-analysis`, `code-review`
160
160
  Invalid: `PDF-Processing`, `-pdf`, `pdf--processing`
@@ -175,7 +175,7 @@ description: Helps with PDFs.
175
175
 
176
176
  ## Validation
177
177
 
178
- sling validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
178
+ Pi validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
179
179
 
180
180
  - Name exceeds 64 characters or contains invalid characters
181
181
  - Name starts/ends with hyphen or has consecutive hyphens
@@ -228,4 +228,4 @@ cd /path/to/brave-search && npm install
228
228
  ## Skill Repositories
229
229
 
230
230
  - [Anthropic Skills](https://github.com/anthropics/skills) - Document processing (docx, pdf, pptx, xlsx), web development
231
- - [Pi Skills](https://github.com/badlogic/pi-skills) - Web search, browser automation, Google APIs, transcription
231
+ - [sling Skills](https://github.com/badlogic/pi-skills) - Web search, browser automation, Google APIs, transcription
@@ -1,6 +1,6 @@
1
1
  # Terminal Setup
2
2
 
3
- sling uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
3
+ Pi uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
4
4
 
5
5
  ## Kitty, iTerm2
6
6
 
@@ -8,7 +8,7 @@ Work out of the box.
8
8
 
9
9
  ## Apple Terminal
10
10
 
11
- sling enables enhanced key reporting when available. If Terminal.app still sends plain Return for `Shift+Enter`, sling uses a local macOS modifier fallback to treat that Return as `Shift+Enter`.
11
+ Pi enables enhanced key reporting when available. If Terminal.app still sends plain Return for `Shift+Enter`, sling uses a local macOS modifier fallback to treat that Return as `Shift+Enter`.
12
12
 
13
13
  This fallback only works when sling runs on the same Mac as Terminal.app. It cannot detect the local keyboard over remote SSH.
14
14
 
@@ -30,7 +30,7 @@ That mapping sends a raw linefeed byte. Inside sling, that is indistinguishable
30
30
 
31
31
  If Claude Code 2.x or newer is the only reason you added that mapping, you can remove it, unless you want to use Claude Code in tmux, where it still requires that Ghostty mapping.
32
32
 
33
- sling binds `Ctrl+J` as a default newline alias, so `Shift+Enter` keeps working in tmux via that remap without extra sling configuration.
33
+ Pi binds `Ctrl+J` as a default newline alias, so `Shift+Enter` keeps working in tmux via that remap without extra sling configuration.
34
34
 
35
35
  ## WezTerm
36
36
 
@@ -1,6 +1,6 @@
1
1
  # Termux (Android) Setup
2
2
 
3
- sling runs on Android via [Termux](https://termux.dev/), a terminal emulator and Linux environment for Android.
3
+ Pi runs on Android via [Termux](https://termux.dev/), a terminal emulator and Linux environment for Android.
4
4
 
5
5
  ## Prerequisites
6
6
 
@@ -16,14 +16,14 @@ pkg update && pkg upgrade
16
16
  # Install dependencies
17
17
  pkg install nodejs termux-api git
18
18
 
19
- # Install sling
20
- npm install -g --ignore-scripts @psnext/slingcli
19
+ # Install pi
20
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
21
21
 
22
22
  # Create config directory
23
23
  mkdir -p ~/.sling/agent
24
24
 
25
- # Run sling
26
- sling
25
+ # Run pi
26
+ pi
27
27
  ```
28
28
 
29
29
  ## Clipboard Support
@@ -16,7 +16,7 @@ Themes are JSON files that define colors for the TUI.
16
16
 
17
17
  ## Locations
18
18
 
19
- sling loads themes from:
19
+ Pi loads themes from:
20
20
 
21
21
  - Built-in: `dark`, `light`
22
22
  - Global: `~/.sling/agent/themes/*.json`
@@ -71,6 +71,7 @@ vim ~/.sling/agent/themes/my-theme.json
71
71
  "text": "",
72
72
  "thinkingText": "secondary",
73
73
  "selectedBg": "#2d2d30",
74
+ "scrollbarThumb": "#555566",
74
75
  "userMessageBg": "#2d2d30",
75
76
  "userMessageText": "",
76
77
  "customMessageBg": "#2d2d30",
@@ -140,13 +141,13 @@ vim ~/.sling/agent/themes/my-theme.json
140
141
 
141
142
  - `name` is required, must be unique, and must not contain `/`.
142
143
  - `vars` is optional. Define reusable colors here, then reference them in `colors`.
143
- - `colors` must define all 51 required tokens. `thinkingMax` is optional and falls back to `thinkingXhigh`.
144
+ - `colors` must define all 51 required tokens. `thinkingMax` is optional and falls back to `thinkingXhigh`; `scrollbarThumb` is optional and falls back to `selectedBg`.
144
145
 
145
146
  The `$schema` field enables editor auto-completion and validation.
146
147
 
147
148
  ## Color Tokens
148
149
 
149
- Every theme must define all 51 required color tokens. `thinkingMax` is optional for compatibility with existing themes; when omitted, it uses `thinkingXhigh`.
150
+ Every theme must define all 51 required color tokens. `thinkingMax` and `scrollbarThumb` are optional for compatibility with existing themes; when omitted, they use `thinkingXhigh` and `selectedBg`, respectively.
150
151
 
151
152
  ### Core UI (11 colors)
152
153
 
@@ -164,11 +165,12 @@ Every theme must define all 51 required color tokens. `thinkingMax` is optional
164
165
  | `text` | Default text (usually `""`) |
165
166
  | `thinkingText` | Thinking block text |
166
167
 
167
- ### Backgrounds & Content (11 colors)
168
+ ### Backgrounds & Content (11 required, 1 optional)
168
169
 
169
170
  | Token | Purpose |
170
171
  |-------|---------|
171
172
  | `selectedBg` | Selected line background |
173
+ | `scrollbarThumb` | Fullscreen scrollbar thumb background; optional, falls back to `selectedBg` |
172
174
  | `userMessageBg` | User message background |
173
175
  | `userMessageText` | User message text |
174
176
  | `customMessageBg` | Extension message background |
@@ -270,7 +272,7 @@ Four formats are supported:
270
272
 
271
273
  ### Terminal Compatibility
272
274
 
273
- sling uses 24-bit RGB colors. Most modern terminals support this (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). For older terminals with only 256-color support, sling falls back to the nearest approximation.
275
+ Pi uses 24-bit RGB colors. Most modern terminals support this (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). For older terminals with only 256-color support, sling falls back to the nearest approximation.
274
276
 
275
277
  Check truecolor support:
276
278
 
@@ -1,6 +1,6 @@
1
1
  # tmux Setup
2
2
 
3
- sling works inside tmux, but tmux strips modifier information from certain keys by default. Without configuration, `Shift+Enter` and `Ctrl+Enter` are usually indistinguishable from plain `Enter`.
3
+ Pi works inside tmux, but tmux strips modifier information from certain keys by default. Without configuration, `Shift+Enter` and `Ctrl+Enter` are usually indistinguishable from plain `Enter`.
4
4
 
5
5
  ## Recommended Configuration
6
6
 
@@ -18,7 +18,7 @@ tmux kill-server
18
18
  tmux
19
19
  ```
20
20
 
21
- sling requests extended key reporting automatically when Kitty keyboard protocol is not available. With `extended-keys-format csi-u`, tmux forwards modified keys in CSI-u format, which is the most reliable configuration. The `extended-keys-format` option requires tmux 3.5 or later.
21
+ Pi requests extended key reporting automatically when Kitty keyboard protocol is not available. With `extended-keys-format csi-u`, tmux forwards modified keys in CSI-u format, which is the most reliable configuration. The `extended-keys-format` option requires tmux 3.5 or later.
22
22
 
23
23
  ## Why `csi-u` Is Recommended
24
24
 
@@ -40,7 +40,7 @@ With `extended-keys-format csi-u`, the same keys are forwarded as:
40
40
  - `Ctrl+D` → `\x1b[100;5u`
41
41
  - `Ctrl+Enter` → `\x1b[13;5u`
42
42
 
43
- sling supports both formats, but `csi-u` is the recommended tmux setup.
43
+ Pi supports both formats, but `csi-u` is the recommended tmux setup.
44
44
 
45
45
  ## What This Fixes
46
46
 
@@ -1,4 +1,4 @@
1
- # Using sling
1
+ # Using Pi
2
2
 
3
3
  This page collects day-to-day usage details that do not fit on the quickstart page.
4
4
 
@@ -103,6 +103,8 @@ sling loads `AGENTS.md` or `CLAUDE.md` at startup from:
103
103
  - parent directories, walking up from the current working directory
104
104
  - the current directory
105
105
 
106
+ If a directory contains `AGENTS.override.md`, sling loads it instead of `AGENTS.md` or `CLAUDE.md` from that directory. Context files from other directories still layer normally.
107
+
106
108
  Use context files for project conventions, commands, safety rules, and preferences. Disable loading with `--no-context-files` or `-nc`.
107
109
 
108
110
  ### System Prompt Files
@@ -124,7 +126,7 @@ Non-interactive modes (`-p`, `--mode json`, and `--mode rpc`) do not show a trus
124
126
 
125
127
  If no extension or saved decision applies, `defaultProjectTrust` controls the fallback behavior. Set it to `"ask"`, `"always"`, or `"never"` in `~/.sling/agent/settings.json`, or change it with `/settings`.
126
128
 
127
- `sling config` and package commands use the same project trust flow, except `sling update` never prompts. Pass `--approve` to trust project-local settings for one command or `--no-approve` to ignore them.
129
+ `sling config` and package commands use the same project trust flow, except `sling` never prompts. Pass `--approve` to trust project-local settings for one command or `--no-approve` to ignore them.
128
130
 
129
131
  Use `/trust` in interactive mode to save a project trust decision for future sessions, including trust for the immediate parent folder. It writes `~/.sling/agent/trust.json` only; the current session is not reloaded, so restart sling for changes to take effect.
130
132
 
@@ -149,9 +151,9 @@ sling [options] [@files...] [messages...]
149
151
  sling install <source> [-l] # Install package, -l for project-local
150
152
  sling remove <source> [-l] # Remove package
151
153
  sling uninstall <source> [-l] # Alias for remove
152
- sling update [source|self|sling] # Update sling only, or one package source
154
+ sling update [source|self|pi] # Update sling only, or one package source
153
155
  sling update --all # Update sling and packages; reconcile pinned git refs
154
- sling update --extensions # Update packages only; reconcile pinned git refs
156
+ pslingi update --extensions # Update packages only; reconcile pinned git refs
155
157
  sling update --models # Refresh model catalogs only
156
158
  sling update --self # Update sling only
157
159
  sling update --extension <src> # Update one package
@@ -159,7 +161,7 @@ sling list # List installed packages
159
161
  sling config # Enable/disable package resources
160
162
  ```
161
163
 
162
- These commands manage sling packages and `sling update` can update the sling CLI installation. To uninstall sling itself, see [Quickstart](quickstart.md#uninstall). `sling config` and project package commands accept `--approve`/`--no-approve` to trust or ignore project-local settings for one command. `sling update` never prompts for project trust.
164
+ These commands manage sling packages and `sling update` can update the sling CLI installation. To uninstall sling itself, see [Quickstart](quickstart.md#uninstall). `sling` and project package commands accept `--approve`/`--no-approve` to trust or ignore project-local settings for one command. `sling update` never prompts for project trust.
163
165
 
164
166
  See [sling Packages](packages.md) for package sources and security notes.
165
167
 
@@ -239,12 +241,17 @@ sling --no-extensions -e ./my-extension.ts
239
241
  |--------|-------------|
240
242
  | `--system-prompt <text>` | Replace default prompt; context files and skills are still appended |
241
243
  | `--append-system-prompt <text>` | Append to system prompt |
244
+ | `--tui-mode <mode>` | TUI mode: `regular` (default) or experimental `fullscreen` |
242
245
  | `--verbose` | Force verbose startup |
243
246
  | `-a`, `--approve` | Trust project-local files for this run |
244
247
  | `-na`, `--no-approve` | Ignore project-local files for this run |
245
248
  | `-h`, `--help` | Show help |
246
249
  | `-v`, `--version` | Show version |
247
250
 
251
+ In `fullscreen` mode, the transcript scrolls inside the terminal viewport while queued messages, working status, extension widgets, editor, and footer remain fixed at the bottom. Mouse/trackpad input scrolls the region under the pointer; keyboard viewport actions always remain available. Inline images work in terminals that support the Kitty graphics protocol, including Kitty and Ghostty. In iTerm2 they render as text placeholders because its inline-image protocol cannot delete or crop placements during application-owned scrolling. In `regular` mode, sling uses the main screen and terminal-owned scrollback, and iTerm2 inline images continue to render normally.
252
+
253
+ Set **TUI mode** in `/settings` to switch between `regular` and `fullscreen` immediately and choose the default for future sessions. **Fullscreen exit output** controls whether exiting fullscreen prints the final transcript or restores the previous screen and prints only the session resume hint.
254
+
248
255
  ### File Arguments
249
256
 
250
257
  Prefix files with `@` to include them in the message:
@@ -268,19 +275,19 @@ sling -p "Summarize this codebase"
268
275
  cat README.md | sling -p "Summarize this text"
269
276
 
270
277
  # Named one-shot session
271
- sling --name "release audit" -p "Audit this repository"
278
+ slingpi --name "release audit" -p "Audit this repository"
272
279
 
273
280
  # Different model
274
- sling --provider slingshot --model gpt-5.5 "Help me refactor"
281
+ sling --provider openai --model gpt-4o "Help me refactor"
275
282
 
276
283
  # Model with provider prefix
277
- sling --model slingshot/gpt-5.5 "Help me refactor"
284
+ sling --model openai/gpt-4o "Help me refactor"
278
285
 
279
286
  # Model with thinking level shorthand
280
- sling --model sonnet-4:high "Solve this complex problem"
287
+ sling --model sonnet:high "Solve this complex problem"
281
288
 
282
289
  # Limit model cycling
283
- sling --models "claude-*,gpt-*"
290
+ sling --models "claude-*,gpt-4o"
284
291
 
285
292
  # Read-only mode
286
293
  sling --tools read,grep,find,ls -p "Review the code"
@@ -1,6 +1,6 @@
1
1
  # Windows Setup
2
2
 
3
- sling requires a bash shell on Windows. Checked locations (in order):
3
+ Pi requires a bash shell on Windows. Checked locations (in order):
4
4
 
5
5
  1. Custom path from `~/.sling/agent/settings.json`
6
6
  2. Git Bash (`C:\Program Files\Git\bin\bash.exe`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@psnext/slingcli",
3
- "version": "3.0.20260810-3",
3
+ "version": "3.0.20260811-2",
4
4
  "description": "Connects Sling CLI to Publicis Sapient Slingshot enterprise LLM gateway. Bundles the pi coding-agent runtime.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -29,7 +29,7 @@
29
29
  "type": "git",
30
30
  "url": "git+https://pscode.lioncloud.net/psaiproducts/slingcli.git"
31
31
  },
32
- "slingVersion": "3.0.20260810-3",
32
+ "slingVersion": "3.0.20260811-2",
33
33
  "dependencies": {
34
34
  "@earendil-works/pi-tui": "file:../.sling-pack/earendil-works-pi-tui-0.84.1.tgz",
35
35
  "@earendil-works/pi-ai": "file:../.sling-pack/earendil-works-pi-ai-0.84.1.tgz",