@orbitpanel/cli 0.9.2 → 1.0.0-beta.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.
@@ -1,12 +1,20 @@
1
1
  import { Command } from '@oclif/core';
2
- import { startShell } from '../lib/shell.js';
3
2
  export default class Shell extends Command {
4
3
  static summary = 'Avvia la shell interattiva di Orbit CLI';
5
4
  static description = 'Apre un ambiente interattivo con menu navigabili per gestire sessioni, report e interventi.';
6
5
  static args = {};
7
6
  static flags = {};
8
7
  async run() {
9
- await startShell(this.config.version);
8
+ if (process.stdin.isTTY) {
9
+ // Full Ink experience — React-based TUI
10
+ const { startInkShell } = await import('../lib/shell-ink.js');
11
+ await startInkShell(this.config.version);
12
+ }
13
+ else {
14
+ // Non-TTY fallback — plain readline
15
+ const { startShell } = await import('../lib/shell.js');
16
+ await startShell(this.config.version);
17
+ }
10
18
  }
11
19
  }
12
20
  //# sourceMappingURL=shell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/commands/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,OAAO,GAAG,yCAAyC,CAAC;IAC3D,MAAM,CAAC,WAAW,GAAG,6FAA6F,CAAC;IAEnH,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IAElB,KAAK,CAAC,GAAG;QACP,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/commands/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,OAAO,GAAG,yCAAyC,CAAC;IAC3D,MAAM,CAAC,WAAW,GAAG,6FAA6F,CAAC;IAEnH,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IAElB,KAAK,CAAC,GAAG;QACP,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,wCAAwC;YACxC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9D,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACvD,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Main Ink shell application for @orbitpanel/cli.
3
+ *
4
+ * Architecture (charmbracelet-inspired):
5
+ * - <Static> for command output history (rendered once, never re-rendered)
6
+ * - Dynamic area: prompt box + suggestions + status bar
7
+ * - useInput() for keypress handling (replaces _ttyWrite hack)
8
+ *
9
+ * Output from commands flows through addOutput() into Static items.
10
+ * The prompt area stays at the bottom, like Claude Code.
11
+ */
12
+ import type { OrbitStore } from '../state/store.js';
13
+ interface ShellAppProps {
14
+ store: OrbitStore;
15
+ version: string;
16
+ onCommand: (cmd: string, addOutput: (text: string) => void) => Promise<void>;
17
+ }
18
+ export declare function ShellApp({ store, version, onCommand }: ShellAppProps): import("react/jsx-runtime").JSX.Element;
19
+ export {};
@@ -0,0 +1,117 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Main Ink shell application for @orbitpanel/cli.
4
+ *
5
+ * Architecture (charmbracelet-inspired):
6
+ * - <Static> for command output history (rendered once, never re-rendered)
7
+ * - Dynamic area: prompt box + suggestions + status bar
8
+ * - useInput() for keypress handling (replaces _ttyWrite hack)
9
+ *
10
+ * Output from commands flows through addOutput() into Static items.
11
+ * The prompt area stays at the bottom, like Claude Code.
12
+ */
13
+ import { useState, useCallback, useRef } from 'react';
14
+ import { Box, Text, Static, useInput, useApp } from 'ink';
15
+ import TextInput from 'ink-text-input';
16
+ import { StatusBar } from './StatusBar.js';
17
+ import { SuggestionList } from './SuggestionList.js';
18
+ import { getSuggestions } from '../lib/shell-completer.js';
19
+ import { SLASH_COMMANDS } from '../lib/shell-render.js';
20
+ /** Build StatusBarProps from store state. */
21
+ function buildBarProps(store) {
22
+ const { tokenEntry, siteLink, session, gitBranch } = store.getState();
23
+ const sessionMinutes = session
24
+ ? Math.round((Date.now() - new Date(session.started_at).getTime()) / 60_000)
25
+ : undefined;
26
+ return {
27
+ connected: !!tokenEntry,
28
+ siteUrl: siteLink?.final_url ?? siteLink?.name ?? (siteLink ? siteLink.orbit_site_id.slice(0, 16) : undefined),
29
+ environment: siteLink?.environment,
30
+ gitBranch: (session?.git_branch ?? gitBranch) ?? undefined,
31
+ sessionActive: session?.status === 'active',
32
+ sessionMinutes,
33
+ };
34
+ }
35
+ export function ShellApp({ store, version, onCommand }) {
36
+ const { exit } = useApp();
37
+ const [input, setInput] = useState('');
38
+ const [outputItems, setOutputItems] = useState([]);
39
+ const [suggestions, setSuggestions] = useState([]);
40
+ const [selectedIdx, setSelectedIdx] = useState(0);
41
+ const [isProcessing, setIsProcessing] = useState(false);
42
+ const [barProps, setBarProps] = useState(buildBarProps(store));
43
+ const idCounter = useRef(0);
44
+ const suggestionsActive = suggestions.length > 0;
45
+ /** Add output text to the static history. */
46
+ const addOutput = useCallback((text) => {
47
+ idCounter.current += 1;
48
+ setOutputItems(prev => [...prev, { id: idCounter.current, text }]);
49
+ }, []);
50
+ /** Refresh status bar from store. */
51
+ const refreshBar = useCallback(() => {
52
+ setBarProps(buildBarProps(store));
53
+ }, [store]);
54
+ /** Handle input changes — update suggestions in real time. */
55
+ const handleChange = useCallback((value) => {
56
+ setInput(value);
57
+ if (value.startsWith('/') && value.length >= 1) {
58
+ const matches = getSuggestions(value, SLASH_COMMANDS).slice(0, 6);
59
+ setSuggestions(matches);
60
+ setSelectedIdx(0);
61
+ }
62
+ else {
63
+ setSuggestions([]);
64
+ setSelectedIdx(0);
65
+ }
66
+ }, []);
67
+ /** Handle Enter — submit command or select suggestion. */
68
+ const handleSubmit = useCallback(async (value) => {
69
+ const cmd = value.trim();
70
+ if (!cmd)
71
+ return;
72
+ // Clear input and suggestions
73
+ setInput('');
74
+ setSuggestions([]);
75
+ setSelectedIdx(0);
76
+ if (cmd === '/exit' || cmd === '/quit' || cmd === '/q') {
77
+ addOutput(' Alla prossima!');
78
+ exit();
79
+ return;
80
+ }
81
+ setIsProcessing(true);
82
+ try {
83
+ await onCommand(cmd, addOutput);
84
+ }
85
+ catch (err) {
86
+ addOutput(` ✗ Errore: ${err instanceof Error ? err.message : String(err)}`);
87
+ }
88
+ setIsProcessing(false);
89
+ refreshBar();
90
+ }, [onCommand, addOutput, refreshBar, exit]);
91
+ // Keyboard navigation for suggestions
92
+ useInput((_, key) => {
93
+ if (!suggestionsActive)
94
+ return;
95
+ if (key.upArrow) {
96
+ setSelectedIdx(prev => prev <= 0 ? suggestions.length - 1 : prev - 1);
97
+ }
98
+ else if (key.downArrow) {
99
+ setSelectedIdx(prev => prev >= suggestions.length - 1 ? 0 : prev + 1);
100
+ }
101
+ else if (key.return && suggestionsActive) {
102
+ // Select suggestion — fill input
103
+ const selected = suggestions[selectedIdx];
104
+ if (selected) {
105
+ setInput(selected.cmd);
106
+ setSuggestions([]);
107
+ setSelectedIdx(0);
108
+ }
109
+ }
110
+ else if (key.escape) {
111
+ setSuggestions([]);
112
+ setSelectedIdx(0);
113
+ }
114
+ }, { isActive: suggestionsActive });
115
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: outputItems, children: (item) => (_jsx(Text, { children: item.text }, item.id)) }), _jsxs(Box, { borderStyle: "round", borderColor: isProcessing ? 'yellow' : 'blue', paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "blue", bold: true, children: "orbit" }), _jsx(Text, { children: " " }), _jsx(Text, { color: isProcessing ? 'yellow' : 'blue', bold: true, children: isProcessing ? '⟳' : '❯' }), _jsx(Text, { children: " " }), isProcessing ? (_jsx(Text, { dimColor: true, children: "elaborazione..." })) : (_jsx(TextInput, { value: input, onChange: handleChange, onSubmit: handleSubmit }))] }), suggestionsActive && !isProcessing && (_jsx(SuggestionList, { items: suggestions, selectedIndex: selectedIdx })), _jsx(Box, { marginTop: suggestionsActive ? 0 : 0, borderStyle: "single", borderColor: "#334155", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, children: _jsx(StatusBar, { ...barProps }) })] }));
116
+ }
117
+ //# sourceMappingURL=ShellApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellApp.js","sourceRoot":"","sources":["../../src/components/ShellApp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Fixed bottom status bar — lipgloss-inspired styling.
3
+ * Shows: site, environment, git branch, session status.
4
+ */
5
+ export interface StatusBarProps {
6
+ connected: boolean;
7
+ siteUrl?: string;
8
+ environment?: string;
9
+ gitBranch?: string;
10
+ sessionActive: boolean;
11
+ sessionMinutes?: number;
12
+ }
13
+ export declare function StatusBar({ connected, siteUrl, environment, gitBranch, sessionActive, sessionMinutes, }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function StatusBar({ connected, siteUrl, environment, gitBranch, sessionActive, sessionMinutes, }) {
4
+ return (_jsxs(Box, { paddingX: 1, gap: 1, children: [!connected ? (_jsx(Text, { color: "red", children: "\u25CB non connesso" })) : siteUrl ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsxs(Text, { color: "#60A5FA", children: [" ", siteUrl] })] })) : (_jsx(Text, { dimColor: true, children: "\u25CB nessun sito" })), _jsx(Text, { dimColor: true, children: "\u2502" }), environment ? (environment === 'production' ? (_jsx(Text, { color: "yellow", children: "\u26A1 production" })) : (_jsxs(Text, { dimColor: true, children: ["\u25C6 ", environment] }))) : (_jsx(Text, { dimColor: true, children: "\u25C6 \u2014" })), _jsx(Text, { dimColor: true, children: "\u2502" }), gitBranch ? (_jsxs(Text, { color: "#60A5FA", children: ["\u2387 ", gitBranch] })) : (_jsx(Text, { dimColor: true, children: "\u2387 \u2014" })), _jsx(Text, { dimColor: true, children: "\u2502" }), sessionActive ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsxs(Text, { dimColor: true, children: [" attiva ", sessionMinutes ?? 0, "min"] })] })) : (_jsx(Text, { dimColor: true, children: "\u25CB idle" }))] }));
5
+ }
6
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,SAAS,CAAC,EACxB,SAAS,EACT,OAAO,EACP,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,GACC;IACf,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAErB,CAAC,SAAS,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,oCAAsB,CACxC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,8BAAE,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAAA,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,kBAAG,OAAO,IAAQ,IAAG,CACzE,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,yCAAqB,CACpC,EAED,KAAC,IAAI,IAAC,QAAQ,6BAAS,EAGtB,WAAW,CAAC,CAAC,CAAC,CACb,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,CAC7B,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kCAAoB,CACzC,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,QAAQ,8BAAI,WAAW,IAAQ,CACtC,CACF,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,oCAAW,CAC1B,EAED,KAAC,IAAI,IAAC,QAAQ,6BAAS,EAGtB,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,wBAAI,SAAS,IAAQ,CAC3C,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,oCAAW,CAC1B,EAED,KAAC,IAAI,IAAC,QAAQ,6BAAS,EAGtB,aAAa,CAAC,CAAC,CAAC,CACf,8BAAE,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAAA,MAAC,IAAI,IAAC,QAAQ,+BAAU,cAAc,IAAI,CAAC,WAAW,IAAG,CACxF,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,kCAAc,CAC7B,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Navigable suggestion dropdown — bubbles-inspired.
3
+ * Arrow keys navigate, Enter selects, Esc closes.
4
+ */
5
+ export interface SuggestionItem {
6
+ cmd: string;
7
+ alias: string;
8
+ desc: string;
9
+ }
10
+ interface SuggestionListProps {
11
+ items: SuggestionItem[];
12
+ selectedIndex: number;
13
+ }
14
+ export declare function SuggestionList({ items, selectedIndex }: SuggestionListProps): import("react/jsx-runtime").JSX.Element | null;
15
+ export {};
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function SuggestionList({ items, selectedIndex }) {
4
+ if (items.length === 0)
5
+ return null;
6
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, marginTop: 0, children: [items.map((item, i) => {
7
+ const isActive = i === selectedIndex;
8
+ return (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: isActive ? '#60A5FA' : undefined, children: isActive ? '❯' : ' ' }), _jsx(Text, { bold: isActive, color: isActive ? 'white' : undefined, dimColor: !isActive, children: item.cmd.padEnd(18) }), item.alias ? (_jsx(Text, { dimColor: true, children: item.alias.padEnd(6) })) : (_jsx(Text, { children: ' '.repeat(6) })), _jsx(Text, { dimColor: true, children: item.desc })] }, item.cmd));
9
+ }), _jsx(Box, { marginTop: 0, paddingLeft: 1, children: _jsx(Text, { dimColor: true, children: "\u2191\u2193 naviga \u00B7 Enter seleziona \u00B7 Esc chiudi" }) })] }));
10
+ }
11
+ //# sourceMappingURL=SuggestionList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuggestionList.js","sourceRoot":"","sources":["../../src/components/SuggestionList.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAahC,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,aAAa,EAAuB;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,aACrD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,QAAQ,GAAG,CAAC,KAAK,aAAa,CAAC;gBACrC,OAAO,CACL,MAAC,GAAG,IAAgB,GAAG,EAAE,CAAC,aACxB,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAC1C,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAChB,EACP,KAAC,IAAI,IACH,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACrC,QAAQ,EAAE,CAAC,QAAQ,YAElB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GACf,EACN,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAQ,CAC7C,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAQ,CAC7B,EACD,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,IAAI,GAAQ,KAhBzB,IAAI,CAAC,GAAG,CAiBZ,CACP,CAAC;YACJ,CAAC,CAAC,EACF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,YAC/B,KAAC,IAAI,IAAC,QAAQ,mFAAgD,GAC1D,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Ink-based interactive shell for @orbitpanel/cli.
3
+ * TTY-only — renders React/Ink UI with full UX (prompt box, suggestions, status bar).
4
+ * Non-TTY falls back to shell-readline.ts.
5
+ */
6
+ export declare function startInkShell(version: string): Promise<void>;
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Ink-based interactive shell for @orbitpanel/cli.
3
+ * TTY-only — renders React/Ink UI with full UX (prompt box, suggestions, status bar).
4
+ * Non-TTY falls back to shell-readline.ts.
5
+ */
6
+ import React from 'react';
7
+ import { render } from 'ink';
8
+ import chalk from 'chalk';
9
+ import gradient from 'gradient-string';
10
+ import { ShellApp } from '../components/ShellApp.js';
11
+ import { OrbitStore } from '../state/store.js';
12
+ import { loadConfig } from './config.js';
13
+ import { loadSiteLink } from './site.js';
14
+ import { loadActiveSession } from './session.js';
15
+ import { getGitBranch } from './git.js';
16
+ import { logoLines, SLASH_COMMANDS, DIM, BL, BB, sparkle, WHITE } from './shell-render.js';
17
+ import { getWelcomeHint } from './shell-hints.js';
18
+ import { cmdStatus, cmdDoctor, cmdSessionStart, cmdSessionEnd, cmdSessionInfo, cmdNoteAdd, cmdReport, cmdList, cmdGet, cmdHistory, cmdSites, cmdAuth, cmdLogin, cmdLink, } from './shell-commands.js';
19
+ import { getUnknownCommandHint } from './shell-hints.js';
20
+ import { formatSuggestionList } from './shell-completer.js';
21
+ const defaultStoreIO = {
22
+ loadConfig,
23
+ loadSiteLink: (cwd) => loadSiteLink(cwd),
24
+ loadActiveSession: (siteId) => loadActiveSession(siteId),
25
+ getGitBranch,
26
+ };
27
+ const orbitGrad = gradient(['#2563EB', '#3B82F6', '#60A5FA', '#0D9488']);
28
+ function sleep(ms) {
29
+ return new Promise(r => setTimeout(r, ms));
30
+ }
31
+ /** Capture console.log output and route to addOutput. */
32
+ function captureOutput(fn, addOutput) {
33
+ const origLog = console.log;
34
+ const lines = [];
35
+ console.log = (...args) => {
36
+ lines.push(args.map(a => typeof a === 'string' ? a : String(a)).join(' '));
37
+ };
38
+ const result = fn();
39
+ const finish = () => {
40
+ console.log = origLog;
41
+ if (lines.length > 0) {
42
+ addOutput(lines.join('\n'));
43
+ }
44
+ };
45
+ if (result instanceof Promise) {
46
+ return result.then(finish).catch((err) => { finish(); throw err; });
47
+ }
48
+ finish();
49
+ return Promise.resolve();
50
+ }
51
+ export async function startInkShell(version) {
52
+ // Print header (before Ink takes over)
53
+ console.log('');
54
+ for (const line of logoLines) {
55
+ console.log(orbitGrad(line));
56
+ await sleep(50);
57
+ }
58
+ console.log('');
59
+ console.log(` ${chalk.bgRgb(37, 99, 235).white.bold(' CLI ')} ${chalk.bgHex('#1E293B').hex('#60A5FA')(` v${version} `)} ${DIM('·')} ${BL('Gestione Orbit Panel AI-powered')}`);
60
+ console.log('');
61
+ // Init store
62
+ const cwd = process.cwd();
63
+ const store = new OrbitStore(defaultStoreIO);
64
+ await store.init(cwd);
65
+ const { tokenEntry, siteLink, session } = store.getState();
66
+ // Welcome hint
67
+ const welcomeHint = getWelcomeHint({
68
+ hasToken: !!tokenEntry,
69
+ hasSite: !!siteLink,
70
+ hasSession: !!session,
71
+ });
72
+ console.log(` ${DIM(welcomeHint)}`);
73
+ console.log('');
74
+ // Command handler — routes slash commands to existing handlers
75
+ const handleCommand = async (input, addOutput) => {
76
+ const cmd = input.toLowerCase();
77
+ // Slash commands
78
+ if (cmd === '/clear' || cmd === '/cls') {
79
+ addOutput('\n Schermo pulito.\n');
80
+ return;
81
+ }
82
+ if (cmd === '/help' || cmd === '/h') {
83
+ await captureOutput(() => {
84
+ console.log('');
85
+ console.log(` ${sparkle} ${BB('Comandi disponibili')}`);
86
+ console.log('');
87
+ for (const c of SLASH_COMMANDS) {
88
+ const alias = c.alias ? DIM(` ${c.alias}`) : '';
89
+ console.log(` ${WHITE(c.cmd.padEnd(18))}${alias.padEnd(10)}${DIM(c.desc)}`);
90
+ }
91
+ console.log('');
92
+ console.log(` ${DIM('Digita / e usa ↑↓ per navigare. Oppure scrivi in linguaggio naturale.')}`);
93
+ }, addOutput);
94
+ return;
95
+ }
96
+ if (cmd === '/status' || cmd === '/s') {
97
+ await captureOutput(() => cmdStatus(), addOutput);
98
+ return;
99
+ }
100
+ if (cmd === '/doctor' || cmd === '/doc') {
101
+ await captureOutput(() => cmdDoctor(), addOutput);
102
+ return;
103
+ }
104
+ if (cmd === '/session start' || cmd === '/ss') {
105
+ await captureOutput(() => cmdSessionStart(), addOutput);
106
+ await store.refresh(cwd);
107
+ return;
108
+ }
109
+ if (cmd === '/session end' || cmd === '/se') {
110
+ await captureOutput(() => cmdSessionEnd(), addOutput);
111
+ await store.refresh(cwd);
112
+ return;
113
+ }
114
+ if (cmd === '/session' || cmd === '/session info') {
115
+ await captureOutput(() => cmdSessionInfo(), addOutput);
116
+ return;
117
+ }
118
+ if (cmd.startsWith('/note ') || cmd.startsWith('/n ')) {
119
+ const text = input.slice(input.indexOf(' ') + 1);
120
+ await captureOutput(() => cmdNoteAdd(text), addOutput);
121
+ return;
122
+ }
123
+ if (cmd === '/report' || cmd === '/r') {
124
+ await captureOutput(() => cmdReport(), addOutput);
125
+ await store.refresh(cwd);
126
+ return;
127
+ }
128
+ if (cmd === '/list' || cmd === '/ls' || cmd === '/interventions') {
129
+ await captureOutput(() => cmdList(), addOutput);
130
+ return;
131
+ }
132
+ if (cmd === '/history' || cmd === '/hist') {
133
+ await captureOutput(() => cmdHistory(), addOutput);
134
+ return;
135
+ }
136
+ if (cmd.startsWith('/get ') || cmd.startsWith('/g ')) {
137
+ await captureOutput(() => cmdGet(input.split(' ')[1]), addOutput);
138
+ return;
139
+ }
140
+ if (cmd === '/sites' || cmd.startsWith('/sites ')) {
141
+ await captureOutput(() => cmdSites(cmd.split(' ')[1]), addOutput);
142
+ await store.refresh(cwd);
143
+ return;
144
+ }
145
+ if (cmd === '/auth') {
146
+ await captureOutput(() => cmdAuth(), addOutput);
147
+ await store.refresh(cwd);
148
+ return;
149
+ }
150
+ if (cmd.startsWith('/login ')) {
151
+ await captureOutput(() => cmdLogin(input.split(' ')[1]), addOutput);
152
+ await store.refresh(cwd);
153
+ return;
154
+ }
155
+ if (cmd.startsWith('/link ')) {
156
+ await captureOutput(() => cmdLink(input.split(' ')[1]), addOutput);
157
+ await store.refresh(cwd);
158
+ return;
159
+ }
160
+ if (cmd === '/') {
161
+ await captureOutput(() => {
162
+ console.log('');
163
+ console.log(` ${sparkle} ${BB('Comandi disponibili')}`);
164
+ console.log('');
165
+ console.log(formatSuggestionList(SLASH_COMMANDS));
166
+ console.log('');
167
+ }, addOutput);
168
+ return;
169
+ }
170
+ if (cmd.startsWith('/')) {
171
+ const hint = getUnknownCommandHint(cmd);
172
+ addOutput(`\n ${DIM('Comando sconosciuto:')} ${WHITE(cmd)}\n ${DIM(hint)}\n`);
173
+ return;
174
+ }
175
+ // Free text → AI chat
176
+ await handleAIChat(input, store, addOutput);
177
+ };
178
+ // Render Ink app
179
+ const { waitUntilExit } = render(React.createElement(ShellApp, {
180
+ store,
181
+ version,
182
+ onCommand: handleCommand,
183
+ }));
184
+ await waitUntilExit();
185
+ }
186
+ // AI chat handler — captures streaming output
187
+ async function handleAIChat(raw, store, addOutput) {
188
+ const { sendChatStream } = await import('./ai-stream.js');
189
+ const { sendChat } = await import('./ai-chat.js');
190
+ const { StreamStateMachine } = await import('./stream-state.js');
191
+ const { config, siteLink } = store.getState();
192
+ const sm = new StreamStateMachine();
193
+ let fullText = '';
194
+ addOutput(`\n ${sparkle} ${BB('Orbit AI')}\n`);
195
+ try {
196
+ store.startRequest();
197
+ const result = await sendChatStream(raw, (event) => {
198
+ if (!sm.transition(event.type))
199
+ return;
200
+ switch (event.type) {
201
+ case 'delta': {
202
+ const chunk = (event.data.content ?? '');
203
+ if (chunk)
204
+ fullText += chunk;
205
+ break;
206
+ }
207
+ case 'error':
208
+ addOutput(` ${chalk.red('✗')} ${event.data.message}`);
209
+ break;
210
+ }
211
+ }, config, siteLink);
212
+ store.endRequest();
213
+ const contentStarted = sm.current === 'generating' || sm.current === 'done';
214
+ if (result.error && !contentStarted) {
215
+ const fallback = await sendChat(raw);
216
+ if (fallback.error) {
217
+ addOutput(` ${chalk.red('✗')} ${fallback.error}`);
218
+ }
219
+ else {
220
+ addOutput(` ${fallback.response ?? ''}`);
221
+ if (fallback.provider_used)
222
+ addOutput(` ${DIM(`(${fallback.provider_used})`)}`);
223
+ }
224
+ }
225
+ else {
226
+ if (fullText) {
227
+ const indented = fullText.split('\n').map(l => ` ${l}`).join('\n');
228
+ addOutput(indented);
229
+ }
230
+ if (result.provider)
231
+ addOutput(` ${DIM(`(${result.provider})`)}`);
232
+ if (result.error)
233
+ addOutput(` ${chalk.red('✗')} ${result.error}`);
234
+ }
235
+ }
236
+ catch (err) {
237
+ store.endRequest();
238
+ try {
239
+ const fallback = await sendChat(raw);
240
+ if (fallback.error) {
241
+ addOutput(` ${chalk.red('✗')} ${fallback.error}`);
242
+ }
243
+ else {
244
+ addOutput(` ${fallback.response ?? ''}`);
245
+ }
246
+ }
247
+ catch (e2) {
248
+ addOutput(` ${chalk.red('✗')} ${e2 instanceof Error ? e2.message : String(e2)}`);
249
+ }
250
+ }
251
+ addOutput('');
252
+ }
253
+ //# sourceMappingURL=shell-ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-ink.js","sourceRoot":"","sources":["../../src/lib/shell-ink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EACpE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GACzF,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,cAAc,GAAY;IAC9B,UAAU;IACV,YAAY,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;IAChD,iBAAiB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChE,YAAY;CACb,CAAC;AAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzE,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,yDAAyD;AACzD,SAAS,aAAa,CAAC,EAA8B,EAAE,SAAiC;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;QACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,EAAE,CAAC;IACT,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,uCAAuC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;IAChL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,aAAa;IACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAE3D,eAAe;IACf,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,UAAU;QACtB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,UAAU,EAAE,CAAC,CAAC,OAAO;KACtB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,+DAA+D;IAC/D,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAE,SAAiC,EAAiB,EAAE;QAC9F,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEhC,iBAAiB;QACjB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACvC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACpC,MAAM,aAAa,CAAC,GAAG,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,uEAAuE,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACrG,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACvG,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7I,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzI,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACtH,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/H,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9H,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1G,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3G,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,MAAM,aAAa,CAAC,GAAG,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACxC,SAAS,CAAC,OAAO,GAAG,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,iBAAiB;IACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;QAC5B,KAAK;QACL,OAAO;QACP,SAAS,EAAE,aAAa;KACzB,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAED,8CAA8C;AAC9C,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAiB,EAAE,SAAiC;IAC3F,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAE9C,MAAM,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,SAAS,CAAC,OAAO,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;YACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO;YACvC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;oBACnD,IAAI,KAAK;wBAAE,QAAQ,IAAI,KAAK,CAAC;oBAC7B,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO;oBACV,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBACzD,MAAM;YACV,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC;QAE5E,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,OAAO,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,QAAQ,CAAC,aAAa;oBAAE,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ;gBAAE,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,KAAK;gBAAE,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,OAAO,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,SAAS,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC"}
@@ -749,5 +749,5 @@
749
749
  ]
750
750
  }
751
751
  },
752
- "version": "0.9.2"
752
+ "version": "1.0.0-beta.1"
753
753
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbitpanel/cli",
3
- "version": "0.9.2",
3
+ "version": "1.0.0-beta.1",
4
4
  "description": "Orbit CLI — strumento locale per sviluppatori OrbitPanel",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,14 +37,18 @@
37
37
  "@oclif/plugin-help": "^6.0.0",
38
38
  "chalk": "^5.4.0",
39
39
  "gradient-string": "^3.0.0",
40
+ "ink": "^6.8.0",
41
+ "ink-text-input": "^6.0.0",
40
42
  "mute-stream": "^3.0.0",
41
43
  "ora": "^9.3.0",
44
+ "react": "^19.2.4",
42
45
  "update-notifier": "^7.3.1"
43
46
  },
44
47
  "devDependencies": {
45
48
  "@oclif/test": "^4.0.0",
46
49
  "@types/gradient-string": "^1.1.6",
47
50
  "@types/node": "^22.0.0",
51
+ "@types/react": "^19.2.14",
48
52
  "@types/update-notifier": "^6.0.8",
49
53
  "oclif": "^4.0.0",
50
54
  "tsx": "^4.19.0",