@orbitpanel/cli 1.9.0 → 1.11.0

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.
Files changed (41) hide show
  1. package/dist/lib/ai-chat.js +2 -0
  2. package/dist/lib/ai-chat.js.map +1 -1
  3. package/dist/lib/ai-stream.js +2 -0
  4. package/dist/lib/ai-stream.js.map +1 -1
  5. package/dist/lib/command-router.js +21 -0
  6. package/dist/lib/command-router.js.map +1 -1
  7. package/dist/lib/intelligence/action-executor.d.ts +45 -0
  8. package/dist/lib/intelligence/action-executor.js +77 -0
  9. package/dist/lib/intelligence/action-executor.js.map +1 -0
  10. package/dist/lib/intelligence/action-parser.d.ts +63 -0
  11. package/dist/lib/intelligence/action-parser.js +149 -0
  12. package/dist/lib/intelligence/action-parser.js.map +1 -0
  13. package/dist/lib/intelligence/agent-prompt.d.ts +28 -0
  14. package/dist/lib/intelligence/agent-prompt.js +179 -0
  15. package/dist/lib/intelligence/agent-prompt.js.map +1 -0
  16. package/dist/lib/intelligence/capability-map.d.ts +53 -0
  17. package/dist/lib/intelligence/capability-map.js +266 -0
  18. package/dist/lib/intelligence/capability-map.js.map +1 -0
  19. package/dist/lib/intelligence/chat-enrichment.d.ts +32 -0
  20. package/dist/lib/intelligence/chat-enrichment.js +130 -0
  21. package/dist/lib/intelligence/chat-enrichment.js.map +1 -0
  22. package/dist/lib/intelligence/context-packet.d.ts +157 -0
  23. package/dist/lib/intelligence/context-packet.js +129 -0
  24. package/dist/lib/intelligence/context-packet.js.map +1 -0
  25. package/dist/lib/intelligence/diagnose-wiring.d.ts +20 -0
  26. package/dist/lib/intelligence/diagnose-wiring.js +157 -0
  27. package/dist/lib/intelligence/diagnose-wiring.js.map +1 -0
  28. package/dist/lib/intelligence/diagnose.d.ts +116 -0
  29. package/dist/lib/intelligence/diagnose.js +312 -0
  30. package/dist/lib/intelligence/diagnose.js.map +1 -0
  31. package/dist/lib/intelligence/model-config.d.ts +18 -0
  32. package/dist/lib/intelligence/model-config.js +27 -0
  33. package/dist/lib/intelligence/model-config.js.map +1 -0
  34. package/dist/lib/shell-ink.js +23 -1
  35. package/dist/lib/shell-ink.js.map +1 -1
  36. package/dist/lib/shell-render.js +1 -0
  37. package/dist/lib/shell-render.js.map +1 -1
  38. package/dist/lib/shell.js +62 -3
  39. package/dist/lib/shell.js.map +1 -1
  40. package/oclif.manifest.json +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,179 @@
1
+ /**
2
+ * CLI Agent Prompt — System prompt per il CLI Intelligence Layer.
3
+ *
4
+ * Questo prompt viene inviato al modello LLM insieme al Context Packet.
5
+ * È tecnico, disciplinato e operativo — non marketing.
6
+ *
7
+ * TONO: assistente di bordo di un aereo, non chatbot.
8
+ * Conciso, pratico, diretto. Parla italiano.
9
+ */
10
+ import { getAvailableCapabilities } from './capability-map.js';
11
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12
+ // SYSTEM PROMPT TEMPLATE
13
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14
+ const IDENTITY = `Sei il copilota operativo della CLI di OrbitPanel.
15
+ OrbitPanel è una piattaforma di gestione hosting (WordPress, PrestaShop, cPanel).
16
+ La CLI (@orbitpanel/cli) è uno strumento locale per tracciare sessioni di lavoro, annotare decisioni, e inviare report a Orbit.
17
+
18
+ NON sei l'agente web di Orbit. NON sei il backend. Sei il copilota locale.`;
19
+ const KNOWLEDGE_BOUNDARIES = `CONFINI DI CONOSCENZA:
20
+ - STATO LOCALE: lo conosci dal Context Packet allegato. È la verità.
21
+ - CONOSCENZA ORBIT: sai cos'è Orbit, come funziona la CLI, quali comandi ci sono.
22
+ - STATO BACKEND: NON lo conosci. Non inventare dati su interventi, siti, o memoria remota.
23
+ - Se il Context Packet non contiene un dato, rispondi "non ho questa informazione nel contesto locale".`;
24
+ const PRIMARY_TASKS = `COMPITI PRINCIPALI:
25
+ 1. SPIEGARE: cos'è Orbit, come funziona la CLI, cosa significano gli stati
26
+ 2. ORIENTARE: guidare l'utente nel workflow (auth → link → session → work → report)
27
+ 3. DIAGNOSTICARE: leggere lo stato e identificare problemi
28
+ 4. TRASFORMARE: problemi in task, osservazioni in note, scelte in decisioni
29
+ 5. SUGGERIRE: il comando giusto al momento giusto
30
+ 6. AGIRE: solo azioni consentite dalla capability map`;
31
+ const BEHAVIORAL_RULES = `REGOLE DI COMPORTAMENTO:
32
+ - MAI inventare stato che non è nel Context Packet
33
+ - MAI bypassare conferme su azioni sensibili (report, diagnostiche remote)
34
+ - MAI trattare la sessione locale come memoria backend
35
+ - MAI suggerire azioni remote ad alto rischio come default
36
+ - MAI dire "dovresti aggiornare la memoria" — la CLI non scrive nella memoria backend
37
+ - Quando suggerisci un comando, scrivi il comando esatto (es: /task add "Fixare CSS header")
38
+ - Quando proponi più opzioni, numerale
39
+ - Sii conciso: max 3-4 frasi per risposta, a meno che non sia una spiegazione richiesta
40
+ - Parla italiano
41
+ - Non usare emoji`;
42
+ const STRUCTURED_ACTIONS = `AZIONI STRUTTURATE:
43
+ Quando ritieni utile proporre un'azione locale (nota, task, decisione, completamento task),
44
+ aggiungi un blocco alla fine della tua risposta con questo formato esatto:
45
+
46
+ <orbit-action>
47
+ {"action":"create_task","params":{"text":"Descrizione del task"}}
48
+ </orbit-action>
49
+
50
+ Azioni disponibili:
51
+ - create_note: {"action":"create_note","params":{"text":"testo della nota"}}
52
+ - create_task: {"action":"create_task","params":{"text":"testo del task"}}
53
+ - create_decision: {"action":"create_decision","params":{"text":"testo della decisione"}}
54
+ - complete_task: {"action":"complete_task","params":{"taskId":"id del task"}}
55
+ - suggest_command: {"action":"suggest_command","params":{"command":"/comando"}}
56
+ - none: {"action":"none","params":{}}
57
+
58
+ REGOLE sulle azioni:
59
+ - Includi il blocco SOLO se l'azione e chiaramente utile e richiesta dall'utente
60
+ - NON includere il blocco per semplici spiegazioni o risposte informative
61
+ - L'utente vedra una richiesta di conferma prima dell'esecuzione
62
+ - Scrivi PRIMA il testo di risposta, POI il blocco azione alla fine
63
+ - Se non serve un'azione, NON includere il blocco`;
64
+ const TONE = `TONO:
65
+ Sei un assistente di bordo. Diretto, pratico, informato.
66
+ Non sei un chatbot allegro. Non sei un consulente che spiega troppo.
67
+ Rispondi come un collega esperto che ha il cruscotto davanti.
68
+ Frasi brevi. Informazione utile. Azione chiara.`;
69
+ /**
70
+ * Costruisce il system prompt per il CLI Intelligence Layer.
71
+ * Pure function — nessun side effect.
72
+ */
73
+ export function buildAgentSystemPrompt(input) {
74
+ const { contextPacket, phase } = input;
75
+ const capabilities = getAvailableCapabilities(contextPacket.capabilities.capabilityLevel, phase);
76
+ const capabilitySection = formatCapabilitySection(capabilities);
77
+ const contextSection = formatContextSection(contextPacket);
78
+ return [
79
+ IDENTITY,
80
+ '',
81
+ KNOWLEDGE_BOUNDARIES,
82
+ '',
83
+ PRIMARY_TASKS,
84
+ '',
85
+ capabilitySection,
86
+ '',
87
+ BEHAVIORAL_RULES,
88
+ '',
89
+ phase >= 2 ? STRUCTURED_ACTIONS : '',
90
+ phase >= 2 ? '' : '',
91
+ TONE,
92
+ '',
93
+ '━━━ CONTESTO CORRENTE ━━━',
94
+ contextSection,
95
+ ].join('\n');
96
+ }
97
+ /** Formatta la sezione capabilities per il prompt */
98
+ function formatCapabilitySection(capabilities) {
99
+ const byTier = {};
100
+ for (const cap of capabilities) {
101
+ if (!byTier[cap.tier])
102
+ byTier[cap.tier] = [];
103
+ const confirm = cap.requiresConfirmation ? ' [richiede conferma]' : '';
104
+ const scope = cap.scope === 'local_only' ? '' : ` [${cap.scope}]`;
105
+ byTier[cap.tier].push(`- ${cap.description}${scope}${confirm}`);
106
+ }
107
+ const sections = ['CAPABILITY ATTIVE:'];
108
+ const tierLabels = {
109
+ explain: 'EXPLAIN (spiegare)',
110
+ inspect: 'INSPECT (leggere)',
111
+ suggest: 'SUGGEST (suggerire)',
112
+ act: 'ACT (agire)',
113
+ };
114
+ for (const [tier, label] of Object.entries(tierLabels)) {
115
+ if (byTier[tier]?.length) {
116
+ sections.push(`\n${label}:`);
117
+ sections.push(...byTier[tier]);
118
+ }
119
+ }
120
+ sections.push('\nNON PUOI:');
121
+ sections.push('- Scrivere nella memoria backend di Orbit');
122
+ sections.push('- Eseguire tool MCP multi-step autonomamente');
123
+ sections.push('- Inviare report senza conferma utente');
124
+ sections.push('- Modificare file di progetto silenziosamente');
125
+ return sections.join('\n');
126
+ }
127
+ /** Formatta il Context Packet come sezione leggibile nel prompt */
128
+ function formatContextSection(packet) {
129
+ const lines = [];
130
+ // Project
131
+ const p = packet.project;
132
+ lines.push(`Progetto: ${p.name ?? '(non configurato)'} | ${p.platform ?? '?'} | ${p.environment ?? '?'}`);
133
+ lines.push(`Setup: ${p.setupLevel} | Salute: ${p.healthLevel}`);
134
+ if (p.healthIssues.length > 0) {
135
+ lines.push(`Problemi: ${p.healthIssues.join('; ')}`);
136
+ }
137
+ lines.push(`Prossimo passo: ${p.nextStep.cmd} — ${p.nextStep.reason}`);
138
+ // Session
139
+ const s = packet.session;
140
+ if (s.active) {
141
+ lines.push('');
142
+ lines.push(`Sessione: attiva (${s.durationMinutes ?? '?'}min) | ID: ${s.id}`);
143
+ lines.push(`Note: ${s.counts.notesTotal} (${s.counts.notesUser} utente, ${s.counts.notesAgent} agente)`);
144
+ lines.push(`Task: ${s.counts.tasksOpen} aperti, ${s.counts.tasksDone} completati`);
145
+ lines.push(`Decisioni: ${s.counts.decisions} | Warning: ${s.counts.warnings}`);
146
+ if (s.isLong) {
147
+ lines.push('⚠ Sessione lunga (>2h)');
148
+ }
149
+ if (s.recentEntries.length > 0) {
150
+ lines.push('Ultime entry:');
151
+ for (const e of s.recentEntries) {
152
+ lines.push(` [${e.kind}/${e.source}] ${e.text} (${e.minutesAgo}min fa)`);
153
+ }
154
+ }
155
+ }
156
+ else {
157
+ lines.push('');
158
+ lines.push('Sessione: nessuna attiva');
159
+ }
160
+ // Capabilities
161
+ const c = packet.capabilities;
162
+ lines.push('');
163
+ lines.push(`Auth: ${c.authenticated ? 'ok' : 'no'} | Backend: ${c.backendReachable === null ? 'non verificato' : c.backendReachable ? 'ok' : 'non raggiungibile'} | Livello: ${c.capabilityLevel}`);
164
+ // Tech
165
+ const t = packet.tech;
166
+ lines.push(`Dir: ${t.cwd} | Branch: ${t.gitBranch ?? 'n/a'} | Dirty: ${t.gitDirty === null ? 'n/v' : t.gitDirty ? 'si' : 'no'}`);
167
+ if (t.lastError) {
168
+ lines.push(`Ultimo errore: ${t.lastError}`);
169
+ }
170
+ return lines.join('\n');
171
+ }
172
+ /**
173
+ * Stima approssimativa dei token del system prompt (per budgeting).
174
+ * Conta ~4 char per token (approssimazione standard).
175
+ */
176
+ export function estimatePromptTokens(prompt) {
177
+ return Math.ceil(prompt.length / 4);
178
+ }
179
+ //# sourceMappingURL=agent-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-prompt.js","sourceRoot":"","sources":["../../../src/lib/intelligence/agent-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * CLI Capability Map — Definisce cosa il CLI Intelligence Layer può fare.
3
+ *
4
+ * Ogni capability ha:
5
+ * - livello (explain, inspect, suggest, act)
6
+ * - se è attivabile nella fase corrente
7
+ * - se richiede conferma utente
8
+ * - se è locale-only o usa backend
9
+ * - se è sicura, sensibile o da posticipare
10
+ *
11
+ * PRINCIPI:
12
+ * - Conservativo: phase 1 = solo lettura e suggerimenti
13
+ * - Esplicito: ogni capability ha un risk assessment
14
+ * - Grounded: mappa direttamente a comandi esistenti nella CLI
15
+ */
16
+ import type { CapabilityLevel } from './context-packet.js';
17
+ /** I 4 livelli operativi del CLI Intelligence Layer */
18
+ export type CapabilityTier = 'explain' | 'inspect' | 'suggest' | 'act';
19
+ /** Dove viene eseguita l'operazione */
20
+ export type ExecutionScope = 'local_only' | 'backend_read' | 'backend_write';
21
+ /** Rischio dell'operazione */
22
+ export type RiskLevel = 'safe' | 'sensitive' | 'deferred';
23
+ /** Fase di implementazione in cui la capability diventa disponibile */
24
+ export type ImplementationPhase = 1 | 2 | 3;
25
+ /** Singola capability del CLI Intelligence Layer */
26
+ export interface Capability {
27
+ /** Identificatore unico */
28
+ id: string;
29
+ /** Livello operativo */
30
+ tier: CapabilityTier;
31
+ /** Descrizione concisa (per il modello) */
32
+ description: string;
33
+ /** Dove viene eseguita */
34
+ scope: ExecutionScope;
35
+ /** Rischio */
36
+ risk: RiskLevel;
37
+ /** Richiede conferma utente? */
38
+ requiresConfirmation: boolean;
39
+ /** Fase di implementazione */
40
+ phase: ImplementationPhase;
41
+ /** Capability level minimo richiesto */
42
+ minCapabilityLevel: CapabilityLevel;
43
+ /** Comando CLI corrispondente (se esiste) */
44
+ mappedCommand: string | null;
45
+ }
46
+ export declare const CAPABILITY_REGISTRY: readonly Capability[];
47
+ /** Ritorna capabilities disponibili per un dato livello e fase */
48
+ export declare function getAvailableCapabilities(capabilityLevel: CapabilityLevel, phase: ImplementationPhase): Capability[];
49
+ /** Ritorna capabilities raggruppate per tier */
50
+ export declare function getCapabilitiesByTier(capabilityLevel: CapabilityLevel, phase: ImplementationPhase): Record<CapabilityTier, Capability[]>;
51
+ /** Verifica se una capability specifica è abilitata */
52
+ export declare function isCapabilityEnabled(id: string, capabilityLevel: CapabilityLevel, phase: ImplementationPhase): boolean;
53
+ export declare const PHASE_1_EXCLUSIONS: readonly ["high_risk_remote_write", "automatic_memory_sync", "automatic_report_without_confirmation", "autonomous_multi_step_tool_loop", "silent_project_modifications", "backend_memory_write", "session_bidirectional_sync"];
@@ -0,0 +1,266 @@
1
+ /**
2
+ * CLI Capability Map — Definisce cosa il CLI Intelligence Layer può fare.
3
+ *
4
+ * Ogni capability ha:
5
+ * - livello (explain, inspect, suggest, act)
6
+ * - se è attivabile nella fase corrente
7
+ * - se richiede conferma utente
8
+ * - se è locale-only o usa backend
9
+ * - se è sicura, sensibile o da posticipare
10
+ *
11
+ * PRINCIPI:
12
+ * - Conservativo: phase 1 = solo lettura e suggerimenti
13
+ * - Esplicito: ogni capability ha un risk assessment
14
+ * - Grounded: mappa direttamente a comandi esistenti nella CLI
15
+ */
16
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
17
+ // CAPABILITY REGISTRY
18
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
19
+ export const CAPABILITY_REGISTRY = [
20
+ // ─── TIER: EXPLAIN ────────────────────────────────────────────
21
+ {
22
+ id: 'explain_orbit',
23
+ tier: 'explain',
24
+ description: 'Spiega cos\'è Orbit, come funziona, quali componenti ha',
25
+ scope: 'local_only',
26
+ risk: 'safe',
27
+ requiresConfirmation: false,
28
+ phase: 1,
29
+ minCapabilityLevel: 'offline',
30
+ mappedCommand: null,
31
+ },
32
+ {
33
+ id: 'explain_cli',
34
+ tier: 'explain',
35
+ description: 'Spiega i comandi della CLI, il workflow, come usarla',
36
+ scope: 'local_only',
37
+ risk: 'safe',
38
+ requiresConfirmation: false,
39
+ phase: 1,
40
+ minCapabilityLevel: 'offline',
41
+ mappedCommand: '/help',
42
+ },
43
+ {
44
+ id: 'explain_state',
45
+ tier: 'explain',
46
+ description: 'Spiega lo stato locale corrente (sessione, progetto, contesto)',
47
+ scope: 'local_only',
48
+ risk: 'safe',
49
+ requiresConfirmation: false,
50
+ phase: 1,
51
+ minCapabilityLevel: 'offline',
52
+ mappedCommand: '/info',
53
+ },
54
+ {
55
+ id: 'explain_error',
56
+ tier: 'explain',
57
+ description: 'Spiega un errore recente e suggerisci come risolverlo',
58
+ scope: 'local_only',
59
+ risk: 'safe',
60
+ requiresConfirmation: false,
61
+ phase: 1,
62
+ minCapabilityLevel: 'offline',
63
+ mappedCommand: null,
64
+ },
65
+ // ─── TIER: INSPECT ────────────────────────────────────────────
66
+ {
67
+ id: 'inspect_session',
68
+ tier: 'inspect',
69
+ description: 'Leggi il summary della sessione attiva, task, decisioni',
70
+ scope: 'local_only',
71
+ risk: 'safe',
72
+ requiresConfirmation: false,
73
+ phase: 1,
74
+ minCapabilityLevel: 'offline',
75
+ mappedCommand: '/session info',
76
+ },
77
+ {
78
+ id: 'inspect_context',
79
+ tier: 'inspect',
80
+ description: 'Leggi il contesto progetto, health, attributed sources',
81
+ scope: 'local_only',
82
+ risk: 'safe',
83
+ requiresConfirmation: false,
84
+ phase: 1,
85
+ minCapabilityLevel: 'offline',
86
+ mappedCommand: '/context',
87
+ },
88
+ {
89
+ id: 'inspect_interventions',
90
+ tier: 'inspect',
91
+ description: 'Lista interventi recenti dal backend Orbit',
92
+ scope: 'backend_read',
93
+ risk: 'safe',
94
+ requiresConfirmation: false,
95
+ phase: 1,
96
+ minCapabilityLevel: 'readonly',
97
+ mappedCommand: '/list',
98
+ },
99
+ {
100
+ id: 'inspect_doctor',
101
+ tier: 'inspect',
102
+ description: 'Esegui diagnostica locale (token, API, git, sito)',
103
+ scope: 'local_only',
104
+ risk: 'safe',
105
+ requiresConfirmation: false,
106
+ phase: 1,
107
+ minCapabilityLevel: 'offline',
108
+ mappedCommand: '/doctor',
109
+ },
110
+ // ─── TIER: SUGGEST ────────────────────────────────────────────
111
+ {
112
+ id: 'suggest_next_step',
113
+ tier: 'suggest',
114
+ description: 'Suggerisci il prossimo comando basato sullo stato',
115
+ scope: 'local_only',
116
+ risk: 'safe',
117
+ requiresConfirmation: false,
118
+ phase: 1,
119
+ minCapabilityLevel: 'offline',
120
+ mappedCommand: null,
121
+ },
122
+ {
123
+ id: 'suggest_task_creation',
124
+ tier: 'suggest',
125
+ description: 'Suggerisci task da creare basato sulla conversazione',
126
+ scope: 'local_only',
127
+ risk: 'safe',
128
+ requiresConfirmation: false,
129
+ phase: 1,
130
+ minCapabilityLevel: 'offline',
131
+ mappedCommand: null,
132
+ },
133
+ {
134
+ id: 'suggest_report',
135
+ tier: 'suggest',
136
+ description: 'Suggerisci se è il momento di inviare un /report',
137
+ scope: 'local_only',
138
+ risk: 'safe',
139
+ requiresConfirmation: false,
140
+ phase: 1,
141
+ minCapabilityLevel: 'offline',
142
+ mappedCommand: null,
143
+ },
144
+ {
145
+ id: 'suggest_recovery',
146
+ tier: 'suggest',
147
+ description: 'Suggerisci passi di recovery per errori o problemi',
148
+ scope: 'local_only',
149
+ risk: 'safe',
150
+ requiresConfirmation: false,
151
+ phase: 1,
152
+ minCapabilityLevel: 'offline',
153
+ mappedCommand: null,
154
+ },
155
+ // ─── TIER: ACT ────────────────────────────────────────────────
156
+ {
157
+ id: 'act_create_note',
158
+ tier: 'act',
159
+ description: 'Crea una nota nella sessione locale',
160
+ scope: 'local_only',
161
+ risk: 'safe',
162
+ requiresConfirmation: false,
163
+ phase: 2,
164
+ minCapabilityLevel: 'local_write',
165
+ mappedCommand: '/note',
166
+ },
167
+ {
168
+ id: 'act_create_task',
169
+ tier: 'act',
170
+ description: 'Crea un task nella sessione locale',
171
+ scope: 'local_only',
172
+ risk: 'safe',
173
+ requiresConfirmation: false,
174
+ phase: 2,
175
+ minCapabilityLevel: 'local_write',
176
+ mappedCommand: '/task add',
177
+ },
178
+ {
179
+ id: 'act_create_decision',
180
+ tier: 'act',
181
+ description: 'Registra una decisione nella sessione locale',
182
+ scope: 'local_only',
183
+ risk: 'safe',
184
+ requiresConfirmation: false,
185
+ phase: 2,
186
+ minCapabilityLevel: 'local_write',
187
+ mappedCommand: '/decision',
188
+ },
189
+ {
190
+ id: 'act_complete_task',
191
+ tier: 'act',
192
+ description: 'Marca un task come completato',
193
+ scope: 'local_only',
194
+ risk: 'safe',
195
+ requiresConfirmation: false,
196
+ phase: 2,
197
+ minCapabilityLevel: 'local_write',
198
+ mappedCommand: '/task done',
199
+ },
200
+ {
201
+ id: 'act_run_diagnose',
202
+ tier: 'act',
203
+ description: 'Esegui diagnostica aggregata /diagnose',
204
+ scope: 'backend_read',
205
+ risk: 'sensitive',
206
+ requiresConfirmation: true,
207
+ phase: 3,
208
+ minCapabilityLevel: 'readonly',
209
+ mappedCommand: '/diagnose',
210
+ },
211
+ {
212
+ id: 'act_send_report',
213
+ tier: 'act',
214
+ description: 'Invia report a Orbit (crea intervento)',
215
+ scope: 'backend_write',
216
+ risk: 'sensitive',
217
+ requiresConfirmation: true,
218
+ phase: 3,
219
+ minCapabilityLevel: 'full',
220
+ mappedCommand: '/report',
221
+ },
222
+ ];
223
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
224
+ // QUERY FUNCTIONS
225
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
226
+ /** Ritorna capabilities disponibili per un dato livello e fase */
227
+ export function getAvailableCapabilities(capabilityLevel, phase) {
228
+ const levelOrder = {
229
+ offline: 0,
230
+ readonly: 1,
231
+ local_write: 2,
232
+ full: 3,
233
+ };
234
+ const currentLevel = levelOrder[capabilityLevel];
235
+ return CAPABILITY_REGISTRY.filter(cap => {
236
+ const requiredLevel = levelOrder[cap.minCapabilityLevel];
237
+ return cap.phase <= phase && requiredLevel <= currentLevel;
238
+ });
239
+ }
240
+ /** Ritorna capabilities raggruppate per tier */
241
+ export function getCapabilitiesByTier(capabilityLevel, phase) {
242
+ const available = getAvailableCapabilities(capabilityLevel, phase);
243
+ return {
244
+ explain: available.filter(c => c.tier === 'explain'),
245
+ inspect: available.filter(c => c.tier === 'inspect'),
246
+ suggest: available.filter(c => c.tier === 'suggest'),
247
+ act: available.filter(c => c.tier === 'act'),
248
+ };
249
+ }
250
+ /** Verifica se una capability specifica è abilitata */
251
+ export function isCapabilityEnabled(id, capabilityLevel, phase) {
252
+ return getAvailableCapabilities(capabilityLevel, phase).some(c => c.id === id);
253
+ }
254
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
255
+ // EXCLUSION LIST — cosa NON fare nella prima fase
256
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
257
+ export const PHASE_1_EXCLUSIONS = [
258
+ 'high_risk_remote_write',
259
+ 'automatic_memory_sync',
260
+ 'automatic_report_without_confirmation',
261
+ 'autonomous_multi_step_tool_loop',
262
+ 'silent_project_modifications',
263
+ 'backend_memory_write',
264
+ 'session_bidirectional_sync',
265
+ ];
266
+ //# sourceMappingURL=capability-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-map.js","sourceRoot":"","sources":["../../../src/lib/intelligence/capability-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Chat enrichment — Arricchisce il messaggio utente con contesto CLI.
3
+ *
4
+ * Questo modulo è il punto di integrazione tra il CLI Intelligence Layer
5
+ * e il flusso AI chat esistente. Arricchisce il messaggio inviato al backend
6
+ * con informazioni sul contesto locale che il backend non conosce.
7
+ *
8
+ * NON modifica il system prompt del backend (non ne ha controllo).
9
+ * NON aggiunge dipendenze nuove.
10
+ * NON fa I/O — usa solo dati già disponibili in OrbitStore.
11
+ *
12
+ * Approccio: prefissa il messaggio utente con un blocco di contesto leggero
13
+ * racchiuso in tag XML-like che il backend LLM può leggere ma che non
14
+ * interferiscono con il messaggio dell'utente.
15
+ */
16
+ import { type ContextPacketInput } from './context-packet.js';
17
+ import type { OrbitState } from '../../state/types.js';
18
+ /**
19
+ * Costruisce un ContextPacketInput dai dati già presenti in OrbitState.
20
+ * Pure function — nessun I/O, nessun side effect.
21
+ */
22
+ export declare function buildContextInputFromState(state: OrbitState, cwd: string): ContextPacketInput;
23
+ /**
24
+ * Formatta un contesto compatto (~150-200 token) da anteporre al messaggio utente.
25
+ * Il formato è un blocco racchiuso in tag che il LLM può leggere.
26
+ */
27
+ export declare function formatContextPrefix(state: OrbitState, cwd: string): string;
28
+ /**
29
+ * Arricchisce il messaggio utente con il contesto CLI.
30
+ * Se il contesto non è disponibile, ritorna il messaggio originale (fallback).
31
+ */
32
+ export declare function enrichMessageWithContext(userMessage: string, state: OrbitState, cwd: string): string;