juno-code 1.0.28 → 1.0.29

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/dist/bin/cli.js CHANGED
@@ -12684,6 +12684,11 @@ function createMainCommand() {
12684
12684
  description: "Model to use (optional, subagent-specific)",
12685
12685
  env: "JUNO_CODE_MODEL"
12686
12686
  }),
12687
+ createOption({
12688
+ flags: "--agents <config>",
12689
+ description: "Agents configuration (forwarded to shell backend, ignored for MCP)",
12690
+ env: "JUNO_CODE_AGENTS"
12691
+ }),
12687
12692
  createOption({
12688
12693
  flags: "-I, --interactive",
12689
12694
  description: "Interactive mode for typing/pasting prompts",
@@ -16262,12 +16267,13 @@ async function initCommandHandler(args, options, command) {
16262
16267
  }
16263
16268
  }
16264
16269
  function configureInitCommand(program) {
16265
- program.command("init").description("Initialize new juno-code project with simple setup").argument("[directory]", "Target directory (default: current directory)").option("-f, --force", "Force overwrite existing files").option("-t, --task <description>", "Main task description").option("-g, --git-url <url>", "Git repository URL").option("-i, --interactive", "Launch simple interactive setup").action(async (directory, options, command) => {
16270
+ program.command("init").description("Initialize new juno-code project - supports both interactive and inline modes").argument("[description]", "Task description for inline mode (optional - triggers inline mode if provided)").option("-s, --subagent <name>", "AI subagent to use (claude, codex, gemini, cursor)").option("-g, --git-repo <url>", "Git repository URL").option("-d, --directory <path>", "Target directory (default: current directory)").option("-f, --force", "Force overwrite existing files").option("-i, --interactive", "Force interactive mode (even if description is provided)").option("--git-url <url>", "Git repository URL (alias for --git-repo)").option("-t, --task <description>", "Task description (alias for positional description)").action(async (description, options, command) => {
16271
+ const taskDescription = description || options.task;
16266
16272
  const initOptions = {
16267
- directory,
16273
+ directory: options.directory,
16268
16274
  force: options.force,
16269
- task: options.task,
16270
- gitUrl: options.gitUrl,
16275
+ task: taskDescription,
16276
+ gitUrl: options.gitRepo || options.gitUrl,
16271
16277
  subagent: options.subagent,
16272
16278
  interactive: options.interactive,
16273
16279
  // Global options
@@ -16279,12 +16285,35 @@ function configureInitCommand(program) {
16279
16285
  };
16280
16286
  await initCommandHandler([], initOptions, command);
16281
16287
  }).addHelpText("after", `
16282
- Examples:
16283
- $ juno-code init # Initialize in current directory
16284
- $ juno-code init my-project # Initialize in ./my-project
16285
- $ juno-code init --interactive # Use simple interactive setup
16288
+ Modes:
16289
+ Interactive Mode (default):
16290
+ $ juno-code init # Opens interactive TUI
16291
+ $ juno-code init --interactive # Force interactive mode
16292
+
16293
+ Inline Mode (for automation):
16294
+ $ juno-code init "Build a REST API" # Minimal inline mode
16295
+ $ juno-code init "Build a REST API" --subagent claude --git-repo https://github.com/owner/repo
16296
+ $ juno-code init "Build a REST API" --subagent codex --directory ./my-project
16286
16297
 
16287
- Simplified Interactive Flow:
16298
+ Examples:
16299
+ # Interactive mode (default)
16300
+ $ juno-code init # Initialize in current directory with TUI
16301
+ $ juno-code init --directory my-project # Initialize in ./my-project with TUI
16302
+
16303
+ # Inline mode (automation-friendly)
16304
+ $ juno-code init "Create a TypeScript library" # Quick init with inline description
16305
+ $ juno-code init "Build web app" --subagent claude # Specify AI subagent
16306
+ $ juno-code init "API server" --git-repo https://github.com/me/repo
16307
+
16308
+ Arguments & Options:
16309
+ [description] Task description (optional - triggers inline mode)
16310
+ -s, --subagent <name> AI subagent: claude, codex, gemini, cursor (default: claude)
16311
+ -g, --git-repo <url> Git repository URL
16312
+ -d, --directory <path> Target directory (default: current directory)
16313
+ -f, --force Force overwrite existing files
16314
+ -i, --interactive Force interactive mode
16315
+
16316
+ Interactive Flow:
16288
16317
  1. Project Root \u2192 Specify target directory
16289
16318
  2. Main Task \u2192 Multi-line description (no character limits)
16290
16319
  3. Subagent Selection \u2192 Choose from Claude, Codex, Gemini, Cursor
@@ -16292,10 +16321,10 @@ Simplified Interactive Flow:
16292
16321
  5. Save \u2192 Handle existing files with override/cancel options
16293
16322
 
16294
16323
  Notes:
16324
+ - All inline mode arguments are optional
16325
+ - Defaults: directory=cwd, subagent=claude, no git repo
16295
16326
  - No prompt cost calculation or token counting
16296
16327
  - No character limits on task descriptions
16297
- - Simple file structure with basic templates
16298
- - Focus on quick project setup without complexity
16299
16328
  `);
16300
16329
  }
16301
16330
 
@@ -16361,6 +16390,7 @@ async function startCommandHandler(args, options, command) {
16361
16390
  backend: options.backend,
16362
16391
  maxIterations: options.maxIterations,
16363
16392
  model: options.model,
16393
+ agents: options.agents,
16364
16394
  directory: options.directory,
16365
16395
  verbose: options.verbose,
16366
16396
  quiet: options.quiet,
@@ -16395,7 +16425,7 @@ async function startCommandHandler(args, options, command) {
16395
16425
  }
16396
16426
  }
16397
16427
  function configureStartCommand(program) {
16398
- program.command("start").description("Start execution using .juno_task/init.md as prompt").option("-s, --subagent <name>", "Subagent to use (claude, cursor, codex, gemini)").option("-b, --backend <type>", "Backend to use (mcp, shell)").option("-i, --max-iterations <number>", "Maximum number of iterations", parseInt).option("-m, --model <name>", "Model to use for execution").option("-d, --directory <path>", "Project directory (default: current)").option("--enable-feedback", "Enable concurrent feedback collection during execution").option("--show-metrics", "Display performance metrics summary after execution").option("--show-dashboard", "Show interactive performance dashboard after execution").option("--show-trends", "Display performance trends from historical data").option("--save-metrics [file]", "Save performance metrics to file (default: .juno_task/metrics.json)").option("--metrics-file <path>", "Specify custom path for metrics file").option("--dry-run", "Validate configuration and exit without executing").action(async (options, command) => {
16428
+ program.command("start").description("Start execution using .juno_task/init.md as prompt").option("-s, --subagent <name>", "Subagent to use (claude, cursor, codex, gemini)").option("-b, --backend <type>", "Backend to use (mcp, shell)").option("-i, --max-iterations <number>", "Maximum number of iterations", parseInt).option("-m, --model <name>", "Model to use for execution").option("--agents <config>", "Agents configuration (forwarded to shell backend, ignored for MCP)").option("-d, --directory <path>", "Project directory (default: current)").option("--enable-feedback", "Enable concurrent feedback collection during execution").option("--show-metrics", "Display performance metrics summary after execution").option("--show-dashboard", "Show interactive performance dashboard after execution").option("--show-trends", "Display performance trends from historical data").option("--save-metrics [file]", "Save performance metrics to file (default: .juno_task/metrics.json)").option("--metrics-file <path>", "Specify custom path for metrics file").option("--dry-run", "Validate configuration and exit without executing").action(async (options, command) => {
16399
16429
  const allOptions2 = command.optsWithGlobals ? command.optsWithGlobals() : { ...command.opts(), ...options };
16400
16430
  if (allOptions2.saveMetrics === true) {
16401
16431
  allOptions2.saveMetrics = true;