Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/nu-bang/README.md

Raw
Rendered preview

nu-bang

Nushell bang-command bridge for Pi.

Runs Pi ! and !! shell input through Nushell. Adds Nushell completions for bang input. Requires nu in PATH, or a configured Nushell executable.

Install / load

Loaded through the root pi-ext package. See root README.

Commands / tools / settings

  • Commands: none
  • Tools: none
  • Hooks: user_bash, session_start, session_shutdown
  • Settings: nu-bang.command

Settings

nu-bang.command selects the Nushell executable for bang commands and bang completion. Environment variable: PI_NU_BANG_COMMAND. Default: "nu", looked up in PATH. Valid values: a non-empty string, either a bare command name or a path. Precedence: PI_NU_BANG_COMMAND, trusted project .pi/settings.json, user ~/.pi/agent/settings.json, default. Project settings are ignored while the project is untrusted. The value is resolved once at session_start. An invalid value, such as a non-string or an empty or blank string, shows one warning and uses nu. An invalid value never falls through to a lower-priority source.

{ "nu-bang": { "command": "/usr/bin/nu" } }

Behavior

  • user_bash replaces Pi shell operations with Nushell execution for the Pi-provided command.
  • Commands run as <nu-bang.command> --no-history --error-style fancy --table-mode none -c <command>.
  • Execution receives Pi cwd, env, abort signal, and timeout.
  • Working directory is checked before execution and completion.
  • Abort and timeout terminate the spawned Nushell process.
  • Output has terminal control sequences removed before it is returned.
  • Long output is truncated with Pi's output truncation helper.
  • Truncated full output is written to pi-nu-bang-output-*.log temp files with mode 0600.
  • session_start wraps the current autocomplete provider.
  • Bang completion strips leading ! or !! before asking Nushell for completions.
  • Bang completion uses <nu-bang.command> --no-history --error-style fancy -I <cwd> --ide-complete <offset> <temp>/command.nu.
  • Completion temp files live in pi-nu-bang-* temp dirs and are removed after use.
  • Non-bang completion delegates to the existing provider.
  • Bang completion failures fall back to the existing provider unless the request was aborted.
  • Completion prefix detection handles pipes, spaces, cell paths, quoted paths, and escaped-space paths.
  • Completion application replaces the current Nushell token and removes a stale closing quote when needed.
  • Bang input always allows file-completion triggering; non-bang input delegates that decision.
  • Completion JSON accepts Nushell's normal output and salvages malformed quoted list items.
  • session_shutdown removes temporary completion dirs still tracked by the extension.

Debugging

Opt-in metadata-only tracing follows debug contract. Safe events: session.start, session.shutdown, nu.execute.start, nu.execute.finish, nu.execute.error.

# nu-bang

Nushell bang-command bridge for Pi.

Runs Pi `!` and `!!` shell input through Nushell.
Adds Nushell completions for bang input.
Requires `nu` in `PATH`, or a configured Nushell executable.

## Install / load

Loaded through the root pi-ext package.
See [root README](../../README.md).

## Commands / tools / settings

- Commands:
  none
- Tools:
  none
- Hooks:
  `user_bash`, `session_start`, `session_shutdown`
- Settings:
  `nu-bang.command`

## Settings

`nu-bang.command` selects the Nushell executable for bang commands and bang completion.
Environment variable: `PI_NU_BANG_COMMAND`.
Default: `"nu"`, looked up in `PATH`.
Valid values: a non-empty string, either a bare command name or a path.
Precedence: `PI_NU_BANG_COMMAND`, trusted project `.pi/settings.json`, user `~/.pi/agent/settings.json`, default.
Project settings are ignored while the project is untrusted.
The value is resolved once at `session_start`.
An invalid value, such as a non-string or an empty or blank string, shows one warning and uses `nu`.
An invalid value never falls through to a lower-priority source.

```json
{ "nu-bang": { "command": "/usr/bin/nu" } }
```

## Behavior

- `user_bash` replaces Pi shell operations with Nushell execution for the
  Pi-provided command.
- Commands run as `<nu-bang.command> --no-history --error-style fancy --table-mode none -c
  <command>`.
- Execution receives Pi cwd, env, abort signal, and timeout.
- Working directory is checked before execution and completion.
- Abort and timeout terminate the spawned Nushell process.
- Output has terminal control sequences removed before it is returned.
- Long output is truncated with Pi's output truncation helper.
- Truncated full output is written to `pi-nu-bang-output-*.log` temp files with
  mode `0600`.
- `session_start` wraps the current autocomplete provider.
- Bang completion strips leading `!` or `!!` before asking Nushell for
  completions.
- Bang completion uses `<nu-bang.command> --no-history --error-style fancy -I <cwd>
  --ide-complete <offset> <temp>/command.nu`.
- Completion temp files live in `pi-nu-bang-*` temp dirs and are removed after
  use.
- Non-bang completion delegates to the existing provider.
- Bang completion failures fall back to the existing provider unless the request
  was aborted.
- Completion prefix detection handles pipes, spaces, cell paths, quoted paths,
  and escaped-space paths.
- Completion application replaces the current Nushell token and removes a stale
  closing quote when needed.
- Bang input always allows file-completion triggering; non-bang input delegates
  that decision.
- Completion JSON accepts Nushell's normal output and salvages malformed quoted
  list items.
- `session_shutdown` removes temporary completion dirs still tracked by the
  extension.

## Debugging

Opt-in metadata-only tracing follows [debug contract](../DEBUG.md).
Safe events: `session.start`, `session.shutdown`, `nu.execute.start`, `nu.execute.finish`, `nu.execute.error`.