@oh-my-pi/pi-coding-agent 9.2.3 → 9.2.5

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [9.2.5] - 2026-01-31
6
+ ### Changed
7
+
8
+ - Clarified that user instructions about delegation override tool-use defaults
9
+ - Updated coordinator guidance to emphasize Task tool preference for substantial work with improved emphasis on context window limitations
10
+ - Enhanced `context` parameter documentation to require self-contained information for subagents, including file contents and user requirements
11
+
12
+ ## [9.2.4] - 2026-01-31
13
+ ### Fixed
14
+
15
+ - Prevented interactive commands from blocking on stdin by redirecting from /dev/null in POSIX and Fish shell sessions
16
+
5
17
  ## [9.2.3] - 2026-01-31
6
18
  ### Added
7
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-coding-agent",
3
- "version": "9.2.3",
3
+ "version": "9.2.5",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "ompConfig": {
@@ -79,12 +79,12 @@
79
79
  "test": "bun test"
80
80
  },
81
81
  "dependencies": {
82
- "@oh-my-pi/omp-stats": "9.2.3",
83
- "@oh-my-pi/pi-agent-core": "9.2.3",
84
- "@oh-my-pi/pi-ai": "9.2.3",
85
- "@oh-my-pi/pi-natives": "9.2.3",
86
- "@oh-my-pi/pi-tui": "9.2.3",
87
- "@oh-my-pi/pi-utils": "9.2.3",
82
+ "@oh-my-pi/omp-stats": "9.2.5",
83
+ "@oh-my-pi/pi-agent-core": "9.2.5",
84
+ "@oh-my-pi/pi-ai": "9.2.5",
85
+ "@oh-my-pi/pi-natives": "9.2.5",
86
+ "@oh-my-pi/pi-tui": "9.2.5",
87
+ "@oh-my-pi/pi-utils": "9.2.5",
88
88
  "@openai/agents": "^0.4.4",
89
89
  "@sinclair/typebox": "^0.34.48",
90
90
  "ajv": "^8.17.1",
@@ -90,7 +90,10 @@ function buildPosixCommandScript(
90
90
  ];
91
91
  if (envExports) lines.push(envExports);
92
92
  if (cwd) lines.push(`cd -- ${escapePosix(cwd)}`);
93
- lines.push(commandLine.length > 0 ? commandLine : ":");
93
+ // Redirect stdin from /dev/null to prevent interactive commands from blocking
94
+ // on the shell's stdin pipe (which is used for sending commands, not user input).
95
+ // Explicit pipes within the command (e.g., `echo "y" | cmd`) still work.
96
+ lines.push(commandLine.length > 0 ? `{ ${commandLine}; } < /dev/null` : ":");
94
97
  lines.push("__omp_status=$?");
95
98
  lines.push("unset -f exit logout exec 2>/dev/null");
96
99
  lines.push('if [ -n "$__omp_prev_exit" ]; then eval "$__omp_prev_exit"; fi');
@@ -145,7 +148,8 @@ function buildFishCommandScript(
145
148
  ];
146
149
  if (envExports) lines.push(envExports);
147
150
  if (cwd) lines.push(`cd -- ${escapePosix(cwd)}`);
148
- lines.push(commandLine.length > 0 ? commandLine : ":");
151
+ // Redirect stdin from /dev/null to prevent interactive commands from blocking
152
+ lines.push(commandLine.length > 0 ? `begin; ${commandLine}; end < /dev/null` : ":");
149
153
  lines.push("if set -q __omp_exit_code");
150
154
  lines.push(" set -l __omp_status $__omp_exit_code");
151
155
  lines.push(" set -e __omp_exit_code");
@@ -51,6 +51,8 @@ Say what is true. Omit what is filler.
51
51
  No apologies. No comfort where clarity belongs.
52
52
 
53
53
  Quote only what illuminates. The rest is noise.
54
+
55
+ User instructions about _how_ to work (directly vs. delegation) override tool-use defaults.
54
56
  </stance>
55
57
 
56
58
  {{#if systemPromptCustomization}}
@@ -328,8 +330,8 @@ Write what you can defend.
328
330
  {{#if isCoordinator}}
329
331
  {{#has tools "task"}}
330
332
  <critical id="coordinator">
331
- As the coordinator, default to the Task tool for all substantial work.
332
- **ALWAYS use Task tool.** Your context window is limited—especially the output. Work in discrete steps and run each step using Task tool. Avoid putting substantial work in the main context when possible. Run multiple tasks in parallel whenever possible.
333
+ As the coordinator, **ALWAYS prefer** delegation via Task tool for all SUBSTANTIAL work.
334
+ Your context window is limited—especially the output. Work in discrete steps and run each step using Task tool. Avoid putting substantial work in the main context when possible. Run multiple tasks in parallel whenever possible.
333
335
 
334
336
  ## Triggers requiring Task tool
335
337
  - Editing 4+ files with no dependencies → `Task`
@@ -35,11 +35,12 @@ This matters. Be thorough.
35
35
  4. **Always provide a `schema`** with typed properties. Avoid `{ "type": "string" }`—if data has any structure (list, fields, categories), model it. Plain text is almost never the right choice.
36
36
  5. Assign distinct file scopes per task to avoid conflicts.
37
37
  6. Trust the returned data, then verify with tools when correctness matters.
38
+ 7. The `context` must be self-contained. Paste relevant file contents, quote user requirements verbatim, include data from prior tool results. "The output user showed" means nothing to a subagent.
38
39
  </instruction>
39
40
 
40
41
  <parameters>
41
42
  - `agent`: Agent type to use for all tasks
42
- - `context`: Template with `\{{placeholders}}` for multi-task. Each placeholder is filled from task args. `\{{id}}` and `\{{description}}` are always available.
43
+ - `context`: Template with `\{{placeholders}}` for multi-task. Must be self-contained—include all information the subagent needs. Subagents cannot see conversation history, images, or prior tool results. Reproduce relevant content directly: paste file snippets, quote user requirements, embed data. Each placeholder is filled from task args. `\{{id}}` and `\{{description}}` are always available.
43
44
  - `isolated`: (optional) Run each task in its own git worktree and return patches; patches are applied only if all apply cleanly.
44
45
  - `tasks`: Array of `{id, description, args}` - tasks to run in parallel
45
46
  - `id`: Short CamelCase identifier (max 32 chars, e.g., "SessionStore", "LspRefactor")