@oh-my-pi/pi-coding-agent 16.2.12 → 16.2.13

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.
@@ -245,6 +245,9 @@ export declare const ModelOverrideSchema: import("arktype/internal/variants/obje
245
245
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
246
246
  endpoint?: string | undefined;
247
247
  model?: string | undefined;
248
+ v2StreamingEnabled?: boolean | undefined;
249
+ v2Endpoint?: string | undefined;
250
+ streamingEndpoint?: string | undefined;
248
251
  } | undefined;
249
252
  }, {}>;
250
253
  export type ModelOverride = typeof ModelOverrideSchema.infer;
@@ -368,6 +371,9 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
368
371
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
369
372
  endpoint?: string | undefined;
370
373
  model?: string | undefined;
374
+ v2StreamingEnabled?: boolean | undefined;
375
+ v2Endpoint?: string | undefined;
376
+ streamingEndpoint?: string | undefined;
371
377
  } | undefined;
372
378
  authHeader?: boolean | undefined;
373
379
  auth?: "apiKey" | "none" | "oauth" | undefined;
@@ -524,6 +530,9 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
524
530
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
525
531
  endpoint?: string | undefined;
526
532
  model?: string | undefined;
533
+ v2StreamingEnabled?: boolean | undefined;
534
+ v2Endpoint?: string | undefined;
535
+ streamingEndpoint?: string | undefined;
527
536
  } | undefined;
528
537
  }[] | undefined;
529
538
  modelOverrides?: {
@@ -674,6 +683,9 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
674
683
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
675
684
  endpoint?: string | undefined;
676
685
  model?: string | undefined;
686
+ v2StreamingEnabled?: boolean | undefined;
687
+ v2Endpoint?: string | undefined;
688
+ streamingEndpoint?: string | undefined;
677
689
  } | undefined;
678
690
  };
679
691
  } | undefined;
@@ -141,6 +141,9 @@ export declare const ModelsConfigFile: ConfigFile<{
141
141
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
142
142
  endpoint?: string | undefined;
143
143
  model?: string | undefined;
144
+ v2StreamingEnabled?: boolean | undefined;
145
+ v2Endpoint?: string | undefined;
146
+ streamingEndpoint?: string | undefined;
144
147
  } | undefined;
145
148
  authHeader?: boolean | undefined;
146
149
  auth?: "apiKey" | "none" | "oauth" | undefined;
@@ -282,6 +285,9 @@ export declare const ModelsConfigFile: ConfigFile<{
282
285
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
283
286
  endpoint?: string | undefined;
284
287
  model?: string | undefined;
288
+ v2StreamingEnabled?: boolean | undefined;
289
+ v2Endpoint?: string | undefined;
290
+ streamingEndpoint?: string | undefined;
285
291
  } | undefined;
286
292
  }[] | undefined;
287
293
  modelOverrides?: {
@@ -417,6 +423,9 @@ export declare const ModelsConfigFile: ConfigFile<{
417
423
  api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
418
424
  endpoint?: string | undefined;
419
425
  model?: string | undefined;
426
+ v2StreamingEnabled?: boolean | undefined;
427
+ v2Endpoint?: string | undefined;
428
+ streamingEndpoint?: string | undefined;
420
429
  } | undefined;
421
430
  };
422
431
  } | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-coding-agent",
4
- "version": "16.2.12",
4
+ "version": "16.2.13",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Can Boluk",
@@ -56,17 +56,17 @@
56
56
  "@agentclientprotocol/sdk": "0.25.0",
57
57
  "@babel/parser": "^7.29.7",
58
58
  "@mozilla/readability": "^0.6.0",
59
- "@oh-my-pi/hashline": "16.2.12",
60
- "@oh-my-pi/omp-stats": "16.2.12",
61
- "@oh-my-pi/pi-agent-core": "16.2.12",
62
- "@oh-my-pi/pi-ai": "16.2.12",
63
- "@oh-my-pi/pi-catalog": "16.2.12",
64
- "@oh-my-pi/pi-mnemopi": "16.2.12",
65
- "@oh-my-pi/pi-natives": "16.2.12",
66
- "@oh-my-pi/pi-tui": "16.2.12",
67
- "@oh-my-pi/pi-utils": "16.2.12",
68
- "@oh-my-pi/pi-wire": "16.2.12",
69
- "@oh-my-pi/snapcompact": "16.2.12",
59
+ "@oh-my-pi/hashline": "16.2.13",
60
+ "@oh-my-pi/omp-stats": "16.2.13",
61
+ "@oh-my-pi/pi-agent-core": "16.2.13",
62
+ "@oh-my-pi/pi-ai": "16.2.13",
63
+ "@oh-my-pi/pi-catalog": "16.2.13",
64
+ "@oh-my-pi/pi-mnemopi": "16.2.13",
65
+ "@oh-my-pi/pi-natives": "16.2.13",
66
+ "@oh-my-pi/pi-tui": "16.2.13",
67
+ "@oh-my-pi/pi-utils": "16.2.13",
68
+ "@oh-my-pi/pi-wire": "16.2.13",
69
+ "@oh-my-pi/snapcompact": "16.2.13",
70
70
  "@opentelemetry/api": "^1.9.1",
71
71
  "@opentelemetry/context-async-hooks": "^2.7.1",
72
72
  "@opentelemetry/exporter-trace-otlp-proto": "^0.218.0",
@@ -127,6 +127,9 @@ const RemoteCompactionSchema = type({
127
127
  "api?": ApiSchema,
128
128
  "endpoint?": "string",
129
129
  "model?": "string",
130
+ "v2StreamingEnabled?": "boolean",
131
+ "v2Endpoint?": "string",
132
+ "streamingEndpoint?": "string",
130
133
  }).narrow((value, ctx) => {
131
134
  if (value.endpoint !== undefined && typeof value.endpoint === "string" && value.endpoint.length === 0) {
132
135
  return ctx.mustBe("remoteCompaction.endpoint a non-empty string");
@@ -134,6 +137,16 @@ const RemoteCompactionSchema = type({
134
137
  if (value.model !== undefined && typeof value.model === "string" && value.model.length === 0) {
135
138
  return ctx.mustBe("remoteCompaction.model a non-empty string");
136
139
  }
140
+ if (value.v2Endpoint !== undefined && typeof value.v2Endpoint === "string" && value.v2Endpoint.length === 0) {
141
+ return ctx.mustBe("remoteCompaction.v2Endpoint a non-empty string");
142
+ }
143
+ if (
144
+ value.streamingEndpoint !== undefined &&
145
+ typeof value.streamingEndpoint === "string" &&
146
+ value.streamingEndpoint.length === 0
147
+ ) {
148
+ return ctx.mustBe("remoteCompaction.streamingEndpoint a non-empty string");
149
+ }
137
150
  return true;
138
151
  });
139
152
 
@@ -19,4 +19,5 @@ Runs commands on remote hosts.
19
19
 
20
20
  <critical>
21
21
  You MUST verify the shell type from "Available hosts" and use matching commands.
22
+ You SHOULD omit `cwd` unless required. `cwd` MUST be an explicit remote path; NEVER use `~` or `~/…`.
22
23
  </critical>
package/src/tools/ssh.ts CHANGED
@@ -26,7 +26,7 @@ import { clampTimeout } from "./tool-timeouts";
26
26
  const sshSchema = type({
27
27
  host: type("string").describe("ssh host"),
28
28
  command: type("string").describe("remote command"),
29
- "cwd?": type("string").describe("remote working directory"),
29
+ "cwd?": type("string").describe("remote working directory; omit unless required, never ~ or ~/..."),
30
30
  "timeout?": type("number").describe("timeout in seconds"),
31
31
  });
32
32
 
@@ -89,6 +89,12 @@ function quoteCmdPath(value: string): string {
89
89
  const escaped = value.replace(/"/g, '""');
90
90
  return `"${escaped}"`;
91
91
  }
92
+ function assertValidSshCwd(cwd: string | undefined): void {
93
+ if (!cwd) return;
94
+ if (cwd === "~" || cwd.startsWith("~/")) {
95
+ throw new ToolError("SSH cwd must be an absolute remote path; omit cwd instead of using ~.");
96
+ }
97
+ }
92
98
 
93
99
  function buildRemoteCommand(command: string, cwd: string | undefined, info: SSHHostInfo): string {
94
100
  if (!cwd) return command;
@@ -177,6 +183,7 @@ export class SshTool implements AgentTool<typeof sshSchema, SSHToolDetails> {
177
183
  if (!hostConfig) {
178
184
  throw new ToolError(`SSH host not loaded: ${host}`);
179
185
  }
186
+ assertValidSshCwd(cwd);
180
187
 
181
188
  const hostInfo = await ensureHostInfo(hostConfig);
182
189
  const remoteCommand = buildRemoteCommand(command, cwd, hostInfo);