@oh-my-pi/pi-coding-agent 3.33.0 → 3.35.0

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 (72) hide show
  1. package/CHANGELOG.md +57 -8
  2. package/docs/custom-tools.md +1 -1
  3. package/docs/extensions.md +4 -4
  4. package/docs/hooks.md +2 -2
  5. package/docs/sdk.md +4 -8
  6. package/examples/custom-tools/README.md +2 -2
  7. package/examples/extensions/README.md +1 -1
  8. package/examples/extensions/todo.ts +1 -1
  9. package/examples/hooks/custom-compaction.ts +4 -2
  10. package/examples/hooks/handoff.ts +1 -1
  11. package/examples/hooks/qna.ts +1 -1
  12. package/examples/sdk/02-custom-model.ts +1 -1
  13. package/examples/sdk/README.md +1 -1
  14. package/package.json +5 -5
  15. package/src/capability/ssh.ts +42 -0
  16. package/src/cli/file-processor.ts +1 -1
  17. package/src/cli/list-models.ts +1 -1
  18. package/src/core/agent-session.ts +214 -31
  19. package/src/core/auth-storage.ts +1 -1
  20. package/src/core/compaction/branch-summarization.ts +2 -2
  21. package/src/core/compaction/compaction.ts +2 -2
  22. package/src/core/compaction/utils.ts +1 -1
  23. package/src/core/custom-tools/types.ts +1 -1
  24. package/src/core/extensions/runner.ts +1 -1
  25. package/src/core/extensions/types.ts +1 -1
  26. package/src/core/extensions/wrapper.ts +1 -1
  27. package/src/core/hooks/runner.ts +2 -2
  28. package/src/core/hooks/types.ts +1 -1
  29. package/src/core/index.ts +11 -0
  30. package/src/core/messages.ts +1 -1
  31. package/src/core/model-registry.ts +1 -1
  32. package/src/core/model-resolver.ts +7 -6
  33. package/src/core/sdk.ts +33 -4
  34. package/src/core/session-manager.ts +16 -1
  35. package/src/core/settings-manager.ts +20 -6
  36. package/src/core/ssh/connection-manager.ts +466 -0
  37. package/src/core/ssh/ssh-executor.ts +190 -0
  38. package/src/core/ssh/sshfs-mount.ts +162 -0
  39. package/src/core/ssh-executor.ts +5 -0
  40. package/src/core/system-prompt.ts +424 -1
  41. package/src/core/title-generator.ts +2 -2
  42. package/src/core/tools/edit.ts +1 -0
  43. package/src/core/tools/grep.ts +1 -1
  44. package/src/core/tools/index.test.ts +1 -0
  45. package/src/core/tools/index.ts +5 -0
  46. package/src/core/tools/output.ts +1 -1
  47. package/src/core/tools/read.ts +24 -11
  48. package/src/core/tools/renderers.ts +3 -0
  49. package/src/core/tools/ssh.ts +302 -0
  50. package/src/core/tools/task/index.ts +11 -2
  51. package/src/core/tools/task/model-resolver.ts +5 -4
  52. package/src/core/tools/task/types.ts +1 -1
  53. package/src/core/tools/task/worker.ts +1 -1
  54. package/src/core/voice.ts +1 -1
  55. package/src/discovery/index.ts +3 -0
  56. package/src/discovery/ssh.ts +162 -0
  57. package/src/main.ts +4 -1
  58. package/src/modes/interactive/components/assistant-message.ts +1 -1
  59. package/src/modes/interactive/components/custom-message.ts +1 -1
  60. package/src/modes/interactive/components/footer.ts +1 -1
  61. package/src/modes/interactive/components/hook-message.ts +1 -1
  62. package/src/modes/interactive/components/model-selector.ts +1 -1
  63. package/src/modes/interactive/components/oauth-selector.ts +1 -1
  64. package/src/modes/interactive/components/status-line.ts +1 -1
  65. package/src/modes/interactive/components/tool-execution.ts +15 -12
  66. package/src/modes/interactive/interactive-mode.ts +43 -9
  67. package/src/modes/print-mode.ts +1 -1
  68. package/src/modes/rpc/rpc-client.ts +1 -1
  69. package/src/modes/rpc/rpc-types.ts +1 -1
  70. package/src/prompts/system-prompt.md +4 -0
  71. package/src/prompts/tools/ssh.md +74 -0
  72. package/src/utils/image-resize.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -2,13 +2,58 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [3.35.0] - 2026-01-09
6
+ ### Added
7
+
8
+ - Added retry logic with exponential backoff for auto-compaction failures
9
+ - Added fallback to alternative models when auto-compaction fails with the primary model
10
+ - Added support for `pi/<role>` model aliases in task tool (e.g., `pi/slow`, `pi/default`)
11
+ - Added visual cycle indicator when switching between role models showing available roles
12
+ - Added automatic model inheritance for subtasks when parent uses default model
13
+ - Added `--` separator in grep tool to prevent pattern interpretation as flags
14
+
15
+ ### Changed
16
+
17
+ - Changed role model cycling to remember last selected role instead of matching current model
18
+ - Changed edit tool to merge call and result displays into single block
19
+ - Changed model override behavior to persist in settings when explicitly set via CLI
20
+
21
+ ### Fixed
22
+
23
+ - Fixed retry-after parsing from error messages supporting multiple header formats (retry-after, retry-after-ms, x-ratelimit-reset)
24
+ - Fixed image attachments being dropped when steering/follow-up messages are queued during streaming
25
+ - Fixed image auto-resize not applying to clipboard images before sending
26
+ - Fixed clipboard image attachments being dropped when steering/follow-up messages are queued while streaming
27
+ - Fixed clipboard image attachments ignoring the auto-resize setting before sending
28
+
29
+ ## [3.34.0] - 2026-01-09
30
+
31
+ ### Added
32
+
33
+ - Added caching for system environment detection to improve startup performance
34
+ - Added disk usage information to automatic environment detection in system prompt
35
+ - Added `compat` option for SSH hosts to wrap commands in a POSIX shell on Windows systems
36
+ - Added automatic working directory handling for PowerShell and cmd.exe on Windows SSH hosts
37
+ - Added automatic environment detection to system prompt including OS, distro, kernel, CPU, GPU, shell, terminal, desktop environment, and window manager information
38
+ - Added SSH tool with project ssh.json/.ssh.json discovery, persistent connections, and optional sshfs mounts
39
+ - Added SSH host OS/shell detection with compat mode and persistent host info cache
40
+
41
+ ### Changed
42
+
43
+ - Changed GPU detection on Linux to prioritize discrete GPUs (NVIDIA, AMD) over integrated graphics and skip server management adapters
44
+ - Changed SSH host info cache to use versioned format for automatic refresh on schema changes
45
+ - Changed SSH compat shell detection to actively probe for bash/sh availability on Windows hosts
46
+ - Changed SSH tool description to show detected shell type and available commands per host
47
+
5
48
  ## [3.33.0] - 2026-01-08
6
49
 
7
50
  ### Added
51
+
8
52
  - Added `env` support in `settings.json` for automatically setting environment variables on startup
9
53
  - Added environment variable management methods to SettingsManager (get/set/clear)
10
54
 
11
55
  ### Fixed
56
+
12
57
  - Fixed bash output previews to recompute on resize, preventing TUI line width overflow crashes
13
58
  - Fixed session title generation to retry alternate smol models when the primary model errors or is rate-limited
14
59
  - Fixed file mentions to resolve extensionless paths and directories, using read tool truncation limits for injected content
@@ -18,6 +63,7 @@
18
63
  - Fixed output tool previews to use compact JSON when outputs are formatted with leading braces
19
64
 
20
65
  ## [3.32.0] - 2026-01-08
66
+
21
67
  ### Added
22
68
 
23
69
  - Added progress indicator when starting LSP servers at session startup
@@ -103,6 +149,7 @@
103
149
  - Fixed byte counting in task output truncation to handle multi-byte Unicode characters correctly
104
150
 
105
151
  ## [3.30.0] - 2026-01-07
152
+
106
153
  ### Added
107
154
 
108
155
  - Added environment variable configuration for task limits: `OMP_TASK_MAX_PARALLEL`, `OMP_TASK_MAX_CONCURRENCY`, `OMP_TASK_MAX_OUTPUT_BYTES`, `OMP_TASK_MAX_OUTPUT_LINES`, and `OMP_TASK_MAX_AGENTS_IN_DESCRIPTION`
@@ -122,6 +169,7 @@
122
169
  - Fixed markitdown tool installation to use automatic tool installer instead of requiring manual installation
123
170
 
124
171
  ## [3.25.0] - 2026-01-07
172
+
125
173
  ### Added
126
174
 
127
175
  - Added `complete` tool for structured subagent output with JSON schema validation
@@ -137,6 +185,7 @@
137
185
  - Simplified worker agent system prompt to be more concise and focused
138
186
 
139
187
  ## [3.24.0] - 2026-01-07
188
+
140
189
  ### Added
141
190
 
142
191
  - Added `ToolSession` interface to unify tool creation with session context including cwd, UI availability, and rulebook rules
@@ -179,7 +228,7 @@
179
228
 
180
229
  ### Changed
181
230
 
182
- - Switched from local `@oh-my-pi/pi-ai` to upstream `@mariozechner/pi-ai` package
231
+ - Switched from local `@oh-my-pi/pi-ai` to upstream `@oh-my-pi/pi-ai` package
183
232
 
184
233
  ### Added
185
234
 
@@ -820,7 +869,7 @@ See [docs/custom-tools.md](docs/custom-tools.md) and [examples/custom-tools/](ex
820
869
  - `AppMessage` → `AgentMessage`
821
870
  - `sessionFile` returns `string | undefined` (was `string | null`)
822
871
  - `model` returns `Model | undefined` (was `Model | null`)
823
- - `Attachment` type removed. Use `ImageContent` from `@mariozechner/pi-ai` instead. Add images directly to message content arrays.
872
+ - `Attachment` type removed. Use `ImageContent` from `@oh-my-pi/pi-ai` instead. Add images directly to message content arrays.
824
873
 
825
874
  **AgentSession API:**
826
875
 
@@ -1046,7 +1095,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
1046
1095
  - `createAgentSession()` now accepts `authStorage` and `modelRegistry` options
1047
1096
  - Removed `configureOAuthStorage()`, `defaultGetApiKey()`, `findModel()`, `discoverAvailableModels()`
1048
1097
  - Removed `getApiKey` callback option (use `AuthStorage.setRuntimeApiKey()` for runtime overrides)
1049
- - Use `getModel()` from `@mariozechner/pi-ai` for built-in models, `modelRegistry.find()` for custom models + built-in models
1098
+ - Use `getModel()` from `@oh-my-pi/pi-ai` for built-in models, `modelRegistry.find()` for custom models + built-in models
1050
1099
  - See updated [SDK documentation](docs/sdk.md) and [README](README.md)
1051
1100
 
1052
1101
  - **Settings changes**: Removed `apiKeys` from `settings.json`. Use `auth.json` instead. ([#296](https://github.com/badlogic/pi-mono/issues/296))
@@ -1349,7 +1398,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
1349
1398
  - `rpc.md`: Added missing `hook_error` event documentation
1350
1399
  - `README.md`: Complete settings table, condensed philosophy section, standardized OAuth docs
1351
1400
 
1352
- - Hooks loader now supports same import aliases as custom tools (`@sinclair/typebox`, `@mariozechner/pi-ai`, `@oh-my-pi/pi-tui`, `@oh-my-pi/pi-coding-agent`).
1401
+ - Hooks loader now supports same import aliases as custom tools (`@sinclair/typebox`, `@oh-my-pi/pi-ai`, `@oh-my-pi/pi-tui`, `@oh-my-pi/pi-coding-agent`).
1353
1402
 
1354
1403
  ### Breaking Changes
1355
1404
 
@@ -1371,7 +1420,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
1371
1420
 
1372
1421
  - Fixed TUI performance regression caused by Box component lacking render caching. Built-in tools now use Text directly (like v0.22.5), and Box has proper caching for custom tool rendering.
1373
1422
 
1374
- - Fixed custom tools failing to load from `~/.omp/agent/tools/` when omp is installed globally. Module imports (`@sinclair/typebox`, `@oh-my-pi/pi-tui`, `@mariozechner/pi-ai`) are now resolved via aliases.
1423
+ - Fixed custom tools failing to load from `~/.omp/agent/tools/` when omp is installed globally. Module imports (`@sinclair/typebox`, `@oh-my-pi/pi-tui`, `@oh-my-pi/pi-ai`) are now resolved via aliases.
1375
1424
 
1376
1425
  ## [0.23.0] - 2025-12-17
1377
1426
 
@@ -1411,7 +1460,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
1411
1460
 
1412
1461
  - **Tool output display**: When collapsed, tool output now shows the last N lines instead of the first N lines, making streaming output more useful.
1413
1462
 
1414
- - Updated `@mariozechner/pi-ai` with X-Initiator header support for GitHub Copilot, ensuring agent calls are not deducted from quota. ([#200](https://github.com/badlogic/pi-mono/pull/200) by [@kim0](https://github.com/kim0))
1463
+ - Updated `@oh-my-pi/pi-ai` with X-Initiator header support for GitHub Copilot, ensuring agent calls are not deducted from quota. ([#200](https://github.com/badlogic/pi-mono/pull/200) by [@kim0](https://github.com/kim0))
1415
1464
 
1416
1465
  ### Fixed
1417
1466
 
@@ -1423,7 +1472,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
1423
1472
 
1424
1473
  ### Changed
1425
1474
 
1426
- - Updated `@mariozechner/pi-ai` with interleaved thinking enabled by default for Anthropic Claude 4 models.
1475
+ - Updated `@oh-my-pi/pi-ai` with interleaved thinking enabled by default for Anthropic Claude 4 models.
1427
1476
 
1428
1477
  ## [0.22.1] - 2025-12-15
1429
1478
 
@@ -1431,7 +1480,7 @@ _Dedicated to Peter's shoulder ([@steipete](https://twitter.com/steipete))_
1431
1480
 
1432
1481
  ### Changed
1433
1482
 
1434
- - Updated `@mariozechner/pi-ai` with interleaved thinking support for Anthropic models.
1483
+ - Updated `@oh-my-pi/pi-ai` with interleaved thinking support for Anthropic models.
1435
1484
 
1436
1485
  ## [0.22.0] - 2025-12-15
1437
1486
 
@@ -94,7 +94,7 @@ Custom tools can import from these packages:
94
94
  | --------------------------- | --------------------------------------------------------- | --------------------------------------------------- |
95
95
  | `@sinclair/typebox` | Schema definitions (`Type.Object`, `Type.String`, etc.) | Via `pi.typebox.*` (injected) |
96
96
  | `@oh-my-pi/pi-coding-agent` | Types and utilities | Via `pi.pi.*` (injected) or direct import for types |
97
- | `@mariozechner/pi-ai` | AI utilities (`StringEnum` for Google-compatible enums) | Via `pi.pi.*` (re-exported through coding-agent) |
97
+ | `@oh-my-pi/pi-ai` | AI utilities (`StringEnum` for Google-compatible enums) | Via `pi.pi.*` (re-exported through coding-agent) |
98
98
  | `@oh-my-pi/pi-tui` | TUI components (`Text`, `Box`, etc. for custom rendering) | Via `pi.pi.*` (re-exported through coding-agent) |
99
99
 
100
100
  Node.js built-in modules (`node:fs`, `node:path`, etc.) are also available.
@@ -167,7 +167,7 @@ The `package.json` approach enables:
167
167
  | --------------------------- | ------------------------------------------------------------ |
168
168
  | `@oh-my-pi/pi-coding-agent` | Extension types (`ExtensionAPI`, `ExtensionContext`, events) |
169
169
  | `@sinclair/typebox` | Schema definitions for tool parameters |
170
- | `@mariozechner/pi-ai` | AI utilities (`StringEnum` for Google-compatible enums) |
170
+ | `@oh-my-pi/pi-ai` | AI utilities (`StringEnum` for Google-compatible enums) |
171
171
  | `@oh-my-pi/pi-tui` | TUI components for custom rendering |
172
172
 
173
173
  npm dependencies work too. Add a `package.json` next to your extension (or in a parent directory), run `npm install`, and imports from `node_modules/` are resolved automatically.
@@ -608,7 +608,7 @@ Register a custom tool callable by the LLM. See [Custom Tools](#custom-tools) fo
608
608
 
609
609
  ```typescript
610
610
  import { Type } from "@sinclair/typebox";
611
- import { StringEnum } from "@mariozechner/pi-ai";
611
+ import { StringEnum } from "@oh-my-pi/pi-ai";
612
612
 
613
613
  pi.registerTool({
614
614
  name: "my_tool",
@@ -793,7 +793,7 @@ Register tools the LLM can call via `pi.registerTool()`. Tools appear in the sys
793
793
 
794
794
  ```typescript
795
795
  import { Type } from "@sinclair/typebox";
796
- import { StringEnum } from "@mariozechner/pi-ai";
796
+ import { StringEnum } from "@oh-my-pi/pi-ai";
797
797
  import { Text } from "@oh-my-pi/pi-tui";
798
798
 
799
799
  pi.registerTool({
@@ -833,7 +833,7 @@ pi.registerTool({
833
833
  });
834
834
  ```
835
835
 
836
- **Important:** Use `StringEnum` from `@mariozechner/pi-ai` for string enums. `Type.Union`/`Type.Literal` doesn't work with Google's API.
836
+ **Important:** Use `StringEnum` from `@oh-my-pi/pi-ai` for string enums. `Type.Union`/`Type.Literal` doesn't work with Google's API.
837
837
 
838
838
  ### Multiple Tools
839
839
 
package/docs/hooks.md CHANGED
@@ -72,7 +72,7 @@ Additional paths via `settings.json`:
72
72
  | --------------------------------- | --------------------------------------------- |
73
73
  | `@oh-my-pi/pi-coding-agent/hooks` | Hook types (`HookAPI`, `HookContext`, events) |
74
74
  | `@oh-my-pi/pi-coding-agent` | Additional types if needed |
75
- | `@mariozechner/pi-ai` | AI utilities |
75
+ | `@oh-my-pi/pi-ai` | AI utilities |
76
76
  | `@oh-my-pi/pi-tui` | TUI components |
77
77
 
78
78
  Node.js built-ins (`node:fs`, `node:path`, etc.) are also available.
@@ -548,7 +548,7 @@ Current model, or `undefined` if none selected yet. Use for LLM calls in hooks:
548
548
  ```typescript
549
549
  if (ctx.model) {
550
550
  const apiKey = await ctx.modelRegistry.getApiKey(ctx.model);
551
- // Use with @mariozechner/pi-ai complete()
551
+ // Use with @oh-my-pi/pi-ai complete()
552
552
  }
553
553
  ```
554
554
 
package/docs/sdk.md CHANGED
@@ -248,7 +248,7 @@ const { session } = await createAgentSession({
248
248
  ### Model
249
249
 
250
250
  ```typescript
251
- import { getModel } from "@mariozechner/pi-ai";
251
+ import { getModel } from "@oh-my-pi/pi-ai";
252
252
  import { discoverAuthStorage, discoverModels } from "@oh-my-pi/pi-coding-agent";
253
253
 
254
254
  const authStorage = discoverAuthStorage();
@@ -385,11 +385,7 @@ All tools are defined in `BUILTIN_TOOLS`:
385
385
  For advanced use cases, you can create tools directly using `createTools`:
386
386
 
387
387
  ```typescript
388
- import {
389
- BUILTIN_TOOLS,
390
- createTools,
391
- type ToolSession,
392
- } from "@oh-my-pi/pi-coding-agent";
388
+ import { BUILTIN_TOOLS, createTools, type ToolSession } from "@oh-my-pi/pi-coding-agent";
393
389
 
394
390
  const session: ToolSession = {
395
391
  cwd: "/path/to/project",
@@ -733,7 +729,7 @@ Project overrides global. Nested objects merge keys. Setters only modify global
733
729
  All discovery functions accept optional `cwd` and `agentDir` parameters.
734
730
 
735
731
  ```typescript
736
- import { getModel } from "@mariozechner/pi-ai";
732
+ import { getModel } from "@oh-my-pi/pi-ai";
737
733
  import {
738
734
  AuthStorage,
739
735
  ModelRegistry,
@@ -806,7 +802,7 @@ interface CreateAgentSessionResult {
806
802
  ## Complete Example
807
803
 
808
804
  ```typescript
809
- import { getModel } from "@mariozechner/pi-ai";
805
+ import { getModel } from "@oh-my-pi/pi-ai";
810
806
  import { Type } from "@sinclair/typebox";
811
807
  import {
812
808
  AuthStorage,
@@ -48,7 +48,7 @@ See [docs/custom-tools.md](../../docs/custom-tools.md) for full documentation.
48
48
 
49
49
  ```typescript
50
50
  import { Type } from "@sinclair/typebox";
51
- import { StringEnum } from "@mariozechner/pi-ai";
51
+ import { StringEnum } from "@oh-my-pi/pi-ai";
52
52
  import { Text } from "@oh-my-pi/pi-tui";
53
53
  import type { CustomToolFactory } from "@oh-my-pi/pi-coding-agent";
54
54
 
@@ -99,7 +99,7 @@ renderResult(result, { expanded, isPartial }, theme) {
99
99
  **Use StringEnum for string parameters** (required for Google API compatibility):
100
100
 
101
101
  ```typescript
102
- import { StringEnum } from "@mariozechner/pi-ai";
102
+ import { StringEnum } from "@oh-my-pi/pi-ai";
103
103
 
104
104
  // Good
105
105
  action: StringEnum(["list", "add"] as const);
@@ -113,7 +113,7 @@ export default function (pi: ExtensionAPI) {
113
113
  **Use StringEnum for string parameters** (required for Google API compatibility):
114
114
 
115
115
  ```typescript
116
- import { StringEnum } from "@mariozechner/pi-ai";
116
+ import { StringEnum } from "@oh-my-pi/pi-ai";
117
117
 
118
118
  // Good
119
119
  action: StringEnum(["list", "add"] as const);
@@ -10,7 +10,7 @@
10
10
  * correct for that point in history.
11
11
  */
12
12
 
13
- import { StringEnum } from "@mariozechner/pi-ai";
13
+ import { StringEnum } from "@oh-my-pi/pi-ai";
14
14
  import type { ExtensionAPI, ExtensionContext, Theme } from "@oh-my-pi/pi-coding-agent";
15
15
  import { matchesKey, Text, truncateToWidth } from "@oh-my-pi/pi-tui";
16
16
  import { Type } from "@sinclair/typebox";
@@ -13,7 +13,7 @@
13
13
  * omp --hook examples/hooks/custom-compaction.ts
14
14
  */
15
15
 
16
- import { complete, getModel } from "@mariozechner/pi-ai";
16
+ import { complete, getModel } from "@oh-my-pi/pi-ai";
17
17
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
18
18
  import { convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
19
19
 
@@ -42,7 +42,9 @@ export default function (pi: HookAPI) {
42
42
  const allMessages = [...messagesToSummarize, ...turnPrefixMessages];
43
43
 
44
44
  ctx.ui.notify(
45
- `Custom compaction: summarizing ${allMessages.length} messages (${tokensBefore.toLocaleString()} tokens) with ${model.id}...`,
45
+ `Custom compaction: summarizing ${allMessages.length} messages (${tokensBefore.toLocaleString()} tokens) with ${
46
+ model.id
47
+ }...`,
46
48
  "info",
47
49
  );
48
50
 
@@ -12,7 +12,7 @@
12
12
  * The generated prompt appears as a draft in the editor for review/editing.
13
13
  */
14
14
 
15
- import { complete, type Message } from "@mariozechner/pi-ai";
15
+ import { complete, type Message } from "@oh-my-pi/pi-ai";
16
16
  import type { HookAPI, SessionEntry } from "@oh-my-pi/pi-coding-agent";
17
17
  import { BorderedLoader, convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
18
18
 
@@ -7,7 +7,7 @@
7
7
  * 3. Loads the result into the editor for user to fill in answers
8
8
  */
9
9
 
10
- import { complete, type UserMessage } from "@mariozechner/pi-ai";
10
+ import { complete, type UserMessage } from "@oh-my-pi/pi-ai";
11
11
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
12
12
  import { BorderedLoader } from "@oh-my-pi/pi-coding-agent";
13
13
 
@@ -4,7 +4,7 @@
4
4
  * Shows how to select a specific model and thinking level.
5
5
  */
6
6
 
7
- import { getModel } from "@mariozechner/pi-ai";
7
+ import { getModel } from "@oh-my-pi/pi-ai";
8
8
  import { createAgentSession, discoverAuthStorage, discoverModels } from "@oh-my-pi/pi-coding-agent";
9
9
 
10
10
  // Set up auth storage and model registry
@@ -29,7 +29,7 @@ npx tsx examples/sdk/01-minimal.ts
29
29
  ## Quick Reference
30
30
 
31
31
  ```typescript
32
- import { getModel } from "@mariozechner/pi-ai";
32
+ import { getModel } from "@oh-my-pi/pi-ai";
33
33
  import {
34
34
  AuthStorage,
35
35
  createAgentSession,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-coding-agent",
3
- "version": "3.33.0",
3
+ "version": "3.35.0",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "ompConfig": {
@@ -39,10 +39,10 @@
39
39
  "prepublishOnly": "bun run generate-template && bun run clean && bun run build"
40
40
  },
41
41
  "dependencies": {
42
- "@mariozechner/pi-ai": "^0.37.8",
43
- "@oh-my-pi/pi-agent-core": "3.33.0",
44
- "@oh-my-pi/pi-git-tool": "3.33.0",
45
- "@oh-my-pi/pi-tui": "3.33.0",
42
+ "@oh-my-pi/pi-ai": "3.35.0",
43
+ "@oh-my-pi/pi-agent-core": "3.35.0",
44
+ "@oh-my-pi/pi-git-tool": "3.35.0",
45
+ "@oh-my-pi/pi-tui": "3.35.0",
46
46
  "@openai/agents": "^0.3.7",
47
47
  "@sinclair/typebox": "^0.34.46",
48
48
  "ajv": "^8.17.1",
@@ -0,0 +1,42 @@
1
+ /**
2
+ * SSH Hosts Capability
3
+ *
4
+ * Canonical shape for SSH host entries, regardless of source format.
5
+ */
6
+
7
+ import { defineCapability } from "./index";
8
+ import type { SourceMeta } from "./types";
9
+
10
+ /**
11
+ * Canonical SSH host entry.
12
+ */
13
+ export interface SSHHost {
14
+ /** Host name (config key) */
15
+ name: string;
16
+ /** Host address or DNS name */
17
+ host: string;
18
+ /** Optional username override */
19
+ username?: string;
20
+ /** Optional port override */
21
+ port?: number;
22
+ /** Optional identity key path */
23
+ keyPath?: string;
24
+ /** Optional host description */
25
+ description?: string;
26
+ /** Optional compatibility mode flag */
27
+ compat?: boolean;
28
+ /** Source metadata (added by loader) */
29
+ _source: SourceMeta;
30
+ }
31
+
32
+ export const sshCapability = defineCapability<SSHHost>({
33
+ id: "ssh",
34
+ displayName: "SSH Hosts",
35
+ description: "SSH host entries for remote command execution",
36
+ key: (host) => host.name,
37
+ validate: (host) => {
38
+ if (!host.name) return "Missing name";
39
+ if (!host.host) return "Missing host";
40
+ return undefined;
41
+ },
42
+ });
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { existsSync, readFileSync, statSync } from "node:fs";
6
6
  import { resolve } from "node:path";
7
- import type { ImageContent } from "@mariozechner/pi-ai";
7
+ import type { ImageContent } from "@oh-my-pi/pi-ai";
8
8
  import chalk from "chalk";
9
9
  import { resolveReadPath } from "../core/tools/path-utils";
10
10
  import { formatDimensionNote, resizeImage } from "../utils/image-resize";
@@ -2,7 +2,7 @@
2
2
  * List available models with optional fuzzy search
3
3
  */
4
4
 
5
- import type { Api, Model } from "@mariozechner/pi-ai";
5
+ import type { Api, Model } from "@oh-my-pi/pi-ai";
6
6
  import type { ModelRegistry } from "../core/model-registry";
7
7
  import { fuzzyFilter } from "../utils/fuzzy";
8
8