orchestrix-yuri 4.5.0 → 4.5.1

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.
@@ -119,10 +119,21 @@ class TelegramAdapter {
119
119
  log.warn(`Bot error: ${msg}`);
120
120
  });
121
121
 
122
+ // Register bot command menu (shows autocomplete when user types /)
123
+ try {
124
+ await this.bot.api.setMyCommands([
125
+ { command: 'status', description: 'Show project progress card' },
126
+ { command: 'help', description: 'Show all available commands' },
127
+ { command: 'projects', description: 'List all registered projects' },
128
+ { command: 'plan', description: 'Start planning phase (background)' },
129
+ { command: 'develop', description: 'Start development phase (background)' },
130
+ { command: 'test', description: 'Start smoke testing (background)' },
131
+ { command: 'iterate', description: 'Start new iteration' },
132
+ { command: 'cancel', description: 'Cancel running phase' },
133
+ ]);
134
+ } catch { /* non-critical */ }
135
+
122
136
  // Force-disconnect any stale polling connection before starting.
123
- // deleteWebhook only clears webhooks, NOT existing long-polling connections.
124
- // A direct getUpdates call with timeout=0 "steals" the polling slot,
125
- // terminating any other instance's connection.
126
137
  log.telegram('Connecting...');
127
138
  await forceDisconnectPolling(this.token);
128
139
 
@@ -205,6 +205,14 @@ class Router {
205
205
  return { text: '🚀 Yuri is ready. Send me any message to interact with your projects.' };
206
206
  }
207
207
 
208
+ // ═══ SLASH → STAR conversion ═══
209
+ // Telegram/Feishu users type /status, /help, etc. via bot menu.
210
+ // Convert /command to *command so the router's pattern matching works.
211
+ // Excludes /start (handled above) and /o, /clear (Claude Code commands).
212
+ if (msg.text.startsWith('/') && !msg.text.startsWith('/start') && !msg.text.startsWith('/o') && !msg.text.startsWith('/clear')) {
213
+ msg.text = '*' + msg.text.slice(1);
214
+ }
215
+
208
216
  // ═══ STATUS QUERY — always allowed, even during processing ═══
209
217
  if (this._isStatusQuery(msg.text)) {
210
218
  return this._handleStatusQuery(msg);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchestrix-yuri",
3
- "version": "4.5.0",
3
+ "version": "4.5.1",
4
4
  "description": "Yuri — Meta-Orchestrator for Orchestrix. Drive your entire project lifecycle with natural language.",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {