@innvisor/conny-ai 9.8.2 → 9.8.4

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
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.8.4 - 2026-06-02
4
+
5
+ - made bare `conny` route to the modern onboarding/chat surface instead of the legacy help screen
6
+ - kept `conny init` untouched while preserving the same banner and branding in the post-onboarding chat UI
7
+ - aligned the legacy Python CLI fallback so direct `conny_cli.py` launches follow the same start behavior
8
+
9
+ ## 9.8.3 - 2026-06-02
10
+
11
+ - made `conny` open the real chat interface after onboarding instead of the setup flow
12
+ - kept `conny init` unchanged and preserved its banner/design exactly
13
+ - added slash-command chat shortcuts with a Codex-style launcher header
14
+
3
15
  ## 9.8.2 - 2026-06-02
4
16
 
5
17
  - persisted the language selected in `conny init` so the rest of the CLI loads it automatically
package/conny_app.py CHANGED
@@ -282,10 +282,12 @@ def _sh(*a):
282
282
 
283
283
  def main():
284
284
  signal.signal(signal.SIGINT, lambda *_: sys.exit(0))
285
- if first_run() and not (len(sys.argv)>1 and sys.argv[1] in ("help","--help","-h","-v","--version")):
286
- onboard()
287
285
  if len(sys.argv) <= 1:
288
- cmd_new()
286
+ if first_run():
287
+ onboard()
288
+ return
289
+ cmd_chat()
290
+ return
289
291
  else:
290
292
  route(sys.argv[1], " ".join(sys.argv[2:]))
291
293
 
package/conny_cli.py CHANGED
@@ -11845,6 +11845,9 @@ def main():
11845
11845
  if not workspace_is_configured() or not get_instances():
11846
11846
  cmd_init(args)
11847
11847
  return
11848
+ modern_entrypoint = Path(os.environ.get("CONNY_DIR", os.path.dirname(os.path.abspath(__file__)))) / "conny_app.py"
11849
+ subprocess.call([sys.executable, str(modern_entrypoint)])
11850
+ return
11848
11851
 
11849
11852
  # Help
11850
11853
  if args.help or cmd in ("help", "--help", "-h", ""):
package/conny_studio.py CHANGED
@@ -1,20 +1,32 @@
1
1
  #!/usr/bin/env python3
2
- """conny_studio.py — Interactive CLI session with live monitoring."""
2
+ """conny_studio.py — Interactive CLI chat with live monitoring."""
3
3
  import asyncio
4
4
  import json
5
5
  import os
6
6
  import sys
7
7
  import time
8
8
  import uuid
9
+ import subprocess
9
10
  from pathlib import Path
10
11
  from datetime import datetime
11
12
 
12
13
  import httpx
14
+ from rich.console import Console
13
15
 
14
16
  sys.path.insert(0, str(Path(__file__).parent))
17
+ from conny_design import LOGO_FULL, SEP, ICON_BRAND
15
18
  from conny_uncertainty import UncertaintyDetector
16
19
  from conny_voice import ConnyVoice
17
20
 
21
+ CONSOLE = Console()
22
+ VERSION = "9.8.2"
23
+ try:
24
+ package_path = Path(__file__).resolve().parent / "package.json"
25
+ if package_path.exists():
26
+ VERSION = json.loads(package_path.read_text(encoding="utf-8")).get("version", VERSION)
27
+ except Exception:
28
+ pass
29
+
18
30
  STUDIO_DIR = Path.home() / ".conny" / "studio" / "memory"
19
31
  API_URL = "http://localhost:8001/test"
20
32
 
@@ -69,11 +81,16 @@ class ConnyStudio:
69
81
  }, ensure_ascii=False) + "\n")
70
82
 
71
83
  async def handle_command(self, cmd: str) -> str:
84
+ if cmd in ("/help", "/menu", "/start"):
85
+ return (
86
+ "Comandos: /help /menu /clear /history /models /config /language "
87
+ "/export /reload-persona /fix-last"
88
+ )
72
89
  if cmd == "/clear":
73
90
  self.history = []
74
91
  self.chat_id = f"studio_{uuid.uuid4().hex[:8]}"
75
92
  return "Session cleared. New conversation started."
76
- elif cmd == "/show-memory":
93
+ elif cmd in ("/history", "/show-memory"):
77
94
  if not self.history:
78
95
  return "No turns in memory yet."
79
96
  lines = []
@@ -81,6 +98,14 @@ class ConnyStudio:
81
98
  role = "YOU" if h["role"] == "user" else "MEL"
82
99
  lines.append(f" [{role}] {h['content'][:80]}")
83
100
  return "\n".join(lines)
101
+ elif cmd == "/models":
102
+ return self._run_cli_command("modelo")
103
+ elif cmd == "/config":
104
+ return self._run_cli_command("config")
105
+ elif cmd == "/language":
106
+ return self._run_cli_command("language")
107
+ elif cmd in ("/new", "/init"):
108
+ return self._run_cli_command("init")
84
109
  elif cmd == "/show-failures":
85
110
  if not self.failures_file.exists():
86
111
  return "No failures detected this session."
@@ -101,13 +126,28 @@ class ConnyStudio:
101
126
  return "No previous turn to fix."
102
127
  return f"Unknown command: {cmd}"
103
128
 
129
+ def _run_cli_command(self, command: str) -> str:
130
+ cli = Path(__file__).resolve().parent / "conny_cli.py"
131
+ if not cli.exists():
132
+ return f"CLI no disponible para /{command}"
133
+ try:
134
+ print(f"\033[90m[system] launching: conny {command}\033[0m")
135
+ subprocess.run([sys.executable, str(cli), command], check=False)
136
+ return f"/{command} closed. Back in chat."
137
+ except Exception as exc:
138
+ return f"No pude abrir /{command}: {exc}"
139
+
104
140
  def print_header(self):
105
- print("\033[1;36m╔══════════════════════════════════════════════╗\033[0m")
106
- print("\033[1;36m║ CONNY STUDIO v1.0 ║\033[0m")
107
- print(f"\033[1;36m║ Instance: {self.instance_id:<33}║\033[0m")
108
- print(f"\033[1;36m║ Session: {self.session_id:<34}║\033[0m")
109
- print("\033[1;36m╚══════════════════════════════════════════════╝\033[0m")
110
- print("\033[90mCommands: /clear /show-memory /show-failures /fix-last /reload-persona /export-session\033[0m\n")
141
+ print()
142
+ CONSOLE.print(LOGO_FULL)
143
+ CONSOLE.print(f" {ICON_BRAND} v{VERSION} · chat real")
144
+ CONSOLE.print(SEP)
145
+ print(f" Instance: {self.instance_id}")
146
+ print(f" Session: {self.session_id}")
147
+ print(" Comandos: /help /menu /clear /history /models /config /language /export")
148
+ print(" Atajos: 1=models 2=config 3=language 4=help")
149
+ CONSOLE.print(SEP)
150
+ print()
111
151
 
112
152
  def print_scores(self, scores):
113
153
  conf = scores["confidence"]
@@ -122,14 +162,16 @@ class ConnyStudio:
122
162
  self.print_header()
123
163
  while True:
124
164
  try:
125
- user_input = input("\033[1;32m[YOU]\033[0m ")
165
+ user_input = input("\033[1;32m[YOU]\033[0m ").strip()
126
166
  except (EOFError, KeyboardInterrupt):
127
167
  print("\n\033[90mSession ended.\033[0m")
128
168
  break
129
- if not user_input.strip():
169
+ if not user_input:
130
170
  continue
171
+ if user_input in ("1", "2", "3", "4"):
172
+ user_input = { "1": "/models", "2": "/config", "3": "/language", "4": "/help" }[user_input]
131
173
  if user_input.startswith("/"):
132
- result = await self.handle_command(user_input.strip())
174
+ result = await self.handle_command(user_input)
133
175
  print(f"\033[1;33m[SYSTEM]\033[0m {result}")
134
176
  continue
135
177
  try:
package/npm/conny.js CHANGED
@@ -485,7 +485,7 @@ function execConny(argv) {
485
485
  }
486
486
 
487
487
  const args = process.argv.slice(2);
488
- const isHelp = args.length === 0 || args.includes("-h") || args.includes("--help") || args.includes("help");
488
+ const isHelp = args.includes("-h") || args.includes("--help") || args.includes("help");
489
489
  const isVersion = args.includes("-v") || args.includes("--version") || args.includes("version");
490
490
  const isBootstrapCheck = args.includes("--bootstrap-check");
491
491
  const isJson = args.includes("--json");
@@ -518,7 +518,7 @@ if (isHelp) {
518
518
  process.exit(0);
519
519
  }
520
520
 
521
- const launchArgs = args.length === 0 ? ["new"] : args;
521
+ const launchArgs = args;
522
522
 
523
523
  if (!execConny(launchArgs)) {
524
524
  fail(`No pude iniciar Conny desde ${connyHome}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innvisor/conny-ai",
3
- "version": "9.8.2",
3
+ "version": "9.8.4",
4
4
  "description": "Open-source CLI and runtime for building Conny AI receptionist agents on WhatsApp and Telegram.",
5
5
  "license": "MIT",
6
6
  "author": "Santiago Rubio",
@@ -11785,6 +11785,9 @@ def main():
11785
11785
  if not workspace_is_configured() or not get_instances():
11786
11786
  cmd_init(args)
11787
11787
  return
11788
+ modern_entrypoint = Path(os.environ.get("CONNY_DIR", os.path.dirname(os.path.abspath(__file__)))) / "conny_app.py"
11789
+ subprocess.call([sys.executable, str(modern_entrypoint)])
11790
+ return
11788
11791
 
11789
11792
  # Help
11790
11793
  if args.help or cmd in ("help", "--help", "-h", ""):