juno-code 1.0.50 → 1.0.51

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.
@@ -276,10 +276,22 @@ check_all_for_updates() {
276
276
  log_info "Performing periodic version check..."
277
277
 
278
278
  for package in "${REQUIRED_PACKAGES[@]}"; do
279
- check_and_upgrade_package "$package" "true"
280
- local result=$?
279
+ local result=0
280
+
281
+ # check_and_upgrade_package can return 2 when an update is available.
282
+ # With `set -e`, calling it directly would abort the script before we
283
+ # can process that status. Wrap it in an if/else so we can capture and
284
+ # handle non-zero return codes intentionally.
285
+ if check_and_upgrade_package "$package" "true"; then
286
+ result=0
287
+ else
288
+ result=$?
289
+ fi
290
+
281
291
  if [ $result -eq 2 ]; then
282
292
  packages_needing_upgrade+=("$package")
293
+ elif [ $result -ne 0 ]; then
294
+ log_warning "Skipping upgrade decision for $package due to check error"
283
295
  fi
284
296
  done
285
297
 
@@ -194,6 +194,13 @@ cd "$PROJECT_ROOT"
194
194
  # not from wherever the calling agent happens to be. Respects existing override.
195
195
  export JUNO_TASK_ROOT="${JUNO_TASK_ROOT:-$PROJECT_ROOT}"
196
196
 
197
+ # Prefer local juno_kanban source when available (monorepo development).
198
+ # This keeps wrapper behavior aligned with working-tree changes without requiring
199
+ # immediate reinstall from PyPI between local iterations.
200
+ if [[ -d "$PROJECT_ROOT/juno_kanban/src" ]]; then
201
+ export PYTHONPATH="$PROJECT_ROOT/juno_kanban/src${PYTHONPATH:+:$PYTHONPATH}"
202
+ fi
203
+
197
204
  # Arrays to store normalized arguments (declared at script level for proper handling)
198
205
  declare -a NORMALIZED_GLOBAL_FLAGS=()
199
206
  declare -a NORMALIZED_COMMAND_ARGS=()
@@ -239,15 +239,17 @@ npm install -g @mariozechner/pi-coding-agent
239
239
  #### Features
240
240
 
241
241
  - Multi-provider support (Anthropic, OpenAI, Google, Groq, xAI, etc.)
242
- - Model shorthand aliases (`:pi`, `:sonnet`, `:opus`, `:gpt-5`, `:gemini-pro`, etc.)
242
+ - Model shorthand aliases (`:pi`, `:sonnet`, `:opus`, `:gpt-5`, `:api-codex`, `:gemini-pro`, etc.)
243
243
  - Support for inline prompts or prompt files
244
- - JSON/text output normalization
244
+ - Headless JSON mode (default) for structured automation output
245
+ - Live interactive mode via `--live` (Pi TUI + auto-exit on non-aborted `agent_end`)
246
+ - Temporary live extension capture (`JUNO_SUBAGENT_CAPTURE_PATH`) for iteration summaries/cost
245
247
  - Verbose mode for debugging
246
248
 
247
249
  #### Usage
248
250
 
249
251
  ```bash
250
- # Basic usage with Anthropic model
252
+ # Basic headless JSON-mode usage with Anthropic model
251
253
  ~/.juno_code/services/pi.py -p "Write a hello world function" -m :sonnet
252
254
 
253
255
  # Use with OpenAI model
@@ -256,6 +258,9 @@ npm install -g @mariozechner/pi-coding-agent
256
258
  # Use with Gemini model
257
259
  ~/.juno_code/services/pi.py -p "Add tests" -m :gemini-pro
258
260
 
261
+ # Live interactive mode (Pi TUI + auto-exit extension on non-aborted completion)
262
+ ~/.juno_code/services/pi.py --live -p "Summarize this repo" -m :api-codex
263
+
259
264
  # Specify project directory
260
265
  ~/.juno_code/services/pi.py -p "Fix bugs" --cd /path/to/project
261
266
 
@@ -269,18 +274,32 @@ npm install -g @mariozechner/pi-coding-agent
269
274
  - `-pp, --prompt-file <path>`: Path to prompt file (required if no --prompt)
270
275
  - `--cd <path>`: Project path (default: current directory)
271
276
  - `-m, --model <name>`: Model name (supports shorthand aliases)
277
+ - `--live`: Run Pi in interactive mode (no `--mode json`, prompt passed positionally)
278
+ - `--no-extensions`: Disable Pi extensions (incompatible with `--live`)
272
279
  - `--verbose`: Enable verbose output
273
280
 
274
281
  #### Via juno-code
275
282
 
276
283
  ```bash
277
- # Run Pi through juno-code
284
+ # Run Pi through juno-code (headless default)
278
285
  juno-code -b shell -s pi -m :sonnet -i 1 -v -p "your task"
279
286
 
287
+ # Run Pi in live interactive mode (auto-exits on non-aborted completion)
288
+ juno-code pi --live -p '/skill:ralph-loop' -i 1
289
+
290
+ # If :pi default model is unavailable in your provider config, set an explicit model
291
+ juno-code pi --live -m :api-codex -p "your task" -i 1
292
+
280
293
  # Quick shortcut
281
294
  juno-code pi "your task"
282
295
  ```
283
296
 
297
+ Notes:
298
+ - `--live` is Pi-only and expects an interactive terminal for clean TUI rendering.
299
+ - Esc interruptions do not auto-exit Pi: interrupted (`stopReason=aborted`) turns keep the live session open.
300
+ - To manually exit Pi and return control to juno-code, use Pi's normal exit keys (for example `Ctrl+C` twice quickly or `Ctrl+D` on an empty editor).
301
+ - Pi TUI should run on a modern Node runtime (Node 20+ recommended).
302
+
284
303
  ## Customization
285
304
 
286
305
  All service scripts installed in `~/.juno_code/services/` can be modified to suit your needs. This directory is designed for user customization.