@orbitpanel/cli 1.8.0 → 1.10.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.
- package/dist/lib/command-router.js +37 -1
- package/dist/lib/command-router.js.map +1 -1
- package/dist/lib/info-engine.d.ts +34 -24
- package/dist/lib/info-engine.js +53 -36
- package/dist/lib/info-engine.js.map +1 -1
- package/dist/lib/intelligence/agent-prompt.d.ts +28 -0
- package/dist/lib/intelligence/agent-prompt.js +155 -0
- package/dist/lib/intelligence/agent-prompt.js.map +1 -0
- package/dist/lib/intelligence/capability-map.d.ts +53 -0
- package/dist/lib/intelligence/capability-map.js +266 -0
- package/dist/lib/intelligence/capability-map.js.map +1 -0
- package/dist/lib/intelligence/chat-enrichment.d.ts +32 -0
- package/dist/lib/intelligence/chat-enrichment.js +130 -0
- package/dist/lib/intelligence/chat-enrichment.js.map +1 -0
- package/dist/lib/intelligence/context-packet.d.ts +157 -0
- package/dist/lib/intelligence/context-packet.js +129 -0
- package/dist/lib/intelligence/context-packet.js.map +1 -0
- package/dist/lib/intelligence/diagnose-wiring.d.ts +20 -0
- package/dist/lib/intelligence/diagnose-wiring.js +157 -0
- package/dist/lib/intelligence/diagnose-wiring.js.map +1 -0
- package/dist/lib/intelligence/diagnose.d.ts +116 -0
- package/dist/lib/intelligence/diagnose.js +312 -0
- package/dist/lib/intelligence/diagnose.js.map +1 -0
- package/dist/lib/session-summary-format.d.ts +20 -0
- package/dist/lib/session-summary-format.js +69 -0
- package/dist/lib/session-summary-format.js.map +1 -1
- package/dist/lib/shell-commands.d.ts +2 -0
- package/dist/lib/shell-commands.js +58 -4
- package/dist/lib/shell-commands.js.map +1 -1
- package/dist/lib/shell-ink.js +8 -1
- package/dist/lib/shell-ink.js.map +1 -1
- package/dist/lib/shell-render.js +3 -0
- package/dist/lib/shell-render.js.map +1 -1
- package/dist/lib/shell.js +8 -1
- package/dist/lib/shell.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Context Packet — Snapshot del contesto locale per il CLI Intelligence Layer.
|
|
3
|
+
*
|
|
4
|
+
* Questo è il payload che viene passato al modello LLM ogni volta che
|
|
5
|
+
* il CLI Intelligence Layer deve ragionare sullo stato corrente.
|
|
6
|
+
*
|
|
7
|
+
* PRINCIPI:
|
|
8
|
+
* - Proiezione da OrbitState + SessionSummary + InfoState (nessuna fonte nuova)
|
|
9
|
+
* - Minimale ma sufficiente (~1.5-2K token serializzato)
|
|
10
|
+
* - Stabile: i campi cambiano poco tra invocazioni successive
|
|
11
|
+
* - Nessun dato sensibile (token, credenziali, path assoluti)
|
|
12
|
+
*
|
|
13
|
+
* NON contiene:
|
|
14
|
+
* - Token o credenziali
|
|
15
|
+
* - Testi completi di note/decisioni (solo conteggi e ultime 3)
|
|
16
|
+
* - Stato backend (memory, RAG, audit) — quello è responsabilità del backend
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Assembla un ContextPacket da input già disponibili nella CLI.
|
|
20
|
+
* Pure function — nessun side effect, nessuna chiamata I/O.
|
|
21
|
+
*/
|
|
22
|
+
export function buildContextPacket(input) {
|
|
23
|
+
const now = new Date();
|
|
24
|
+
// Session counts
|
|
25
|
+
const notes = input.session?.notes ?? [];
|
|
26
|
+
const notesUser = notes.filter(n => !n.source || n.source === 'user').length;
|
|
27
|
+
const notesAgent = notes.filter(n => n.source === 'mcp' || n.source === 'ai').length;
|
|
28
|
+
const tasksOpen = notes.filter(n => n.kind === 'task' && n.taskStatus === 'open').length;
|
|
29
|
+
const tasksDone = notes.filter(n => n.kind === 'task' && n.taskStatus === 'done').length;
|
|
30
|
+
const decisions = notes.filter(n => n.kind === 'decision').length;
|
|
31
|
+
const warnings = notes.filter(n => n.kind === 'warning').length;
|
|
32
|
+
// Duration
|
|
33
|
+
let durationMinutes = null;
|
|
34
|
+
if (input.session?.started_at) {
|
|
35
|
+
const startMs = new Date(input.session.started_at).getTime();
|
|
36
|
+
durationMinutes = Math.round((now.getTime() - startMs) / 60_000);
|
|
37
|
+
}
|
|
38
|
+
// Recent entries (last 3, text truncated)
|
|
39
|
+
const recentEntries = notes
|
|
40
|
+
.slice(-3)
|
|
41
|
+
.map(n => ({
|
|
42
|
+
kind: (n.kind ?? 'note'),
|
|
43
|
+
source: (n.source ?? 'user'),
|
|
44
|
+
text: n.text.length > 80 ? n.text.slice(0, 77) + '...' : n.text,
|
|
45
|
+
minutesAgo: Math.round((now.getTime() - new Date(n.timestamp).getTime()) / 60_000),
|
|
46
|
+
}));
|
|
47
|
+
// Capability level
|
|
48
|
+
let capabilityLevel = 'offline';
|
|
49
|
+
if (input.hasToken && input.backendReachable) {
|
|
50
|
+
capabilityLevel = 'full';
|
|
51
|
+
}
|
|
52
|
+
else if (input.hasToken && input.backendReachable === null) {
|
|
53
|
+
capabilityLevel = 'local_write'; // assume local until verified
|
|
54
|
+
}
|
|
55
|
+
else if (input.hasToken) {
|
|
56
|
+
capabilityLevel = 'local_write';
|
|
57
|
+
}
|
|
58
|
+
else if (input.backendReachable) {
|
|
59
|
+
capabilityLevel = 'readonly';
|
|
60
|
+
}
|
|
61
|
+
// Available commands (based on state)
|
|
62
|
+
const availableCommands = buildAvailableCommands(input);
|
|
63
|
+
return {
|
|
64
|
+
version: 1,
|
|
65
|
+
generatedAt: now.toISOString(),
|
|
66
|
+
project: {
|
|
67
|
+
name: input.projectName,
|
|
68
|
+
platform: input.platform,
|
|
69
|
+
environment: input.environment,
|
|
70
|
+
hasManifest: input.hasManifest,
|
|
71
|
+
setupLevel: input.setupLevel,
|
|
72
|
+
healthLevel: input.healthLevel,
|
|
73
|
+
healthIssues: input.healthIssues.slice(0, 3),
|
|
74
|
+
nextStep: input.nextStep,
|
|
75
|
+
},
|
|
76
|
+
session: {
|
|
77
|
+
active: input.session !== null,
|
|
78
|
+
id: input.session?.id?.slice(0, 8) ?? null,
|
|
79
|
+
durationMinutes,
|
|
80
|
+
gitBranch: input.gitBranch,
|
|
81
|
+
counts: {
|
|
82
|
+
notesTotal: notes.length,
|
|
83
|
+
notesUser,
|
|
84
|
+
notesAgent,
|
|
85
|
+
tasksOpen,
|
|
86
|
+
tasksDone,
|
|
87
|
+
decisions,
|
|
88
|
+
warnings,
|
|
89
|
+
},
|
|
90
|
+
recentEntries,
|
|
91
|
+
isLong: durationMinutes !== null && durationMinutes > 120,
|
|
92
|
+
},
|
|
93
|
+
capabilities: {
|
|
94
|
+
availableCommands,
|
|
95
|
+
authenticated: input.hasToken,
|
|
96
|
+
backendReachable: input.backendReachable,
|
|
97
|
+
mcpServerActive: input.mcpServerActive,
|
|
98
|
+
capabilityLevel,
|
|
99
|
+
},
|
|
100
|
+
tech: {
|
|
101
|
+
cwd: input.cwd.split('/').pop() ?? input.cwd,
|
|
102
|
+
gitBranch: input.gitBranch,
|
|
103
|
+
gitDirty: input.gitDirty,
|
|
104
|
+
lastError: input.lastError,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Comandi disponibili in base allo stato corrente */
|
|
109
|
+
function buildAvailableCommands(input) {
|
|
110
|
+
const cmds = ['/help', '/info', '/context', '/doctor', '/status'];
|
|
111
|
+
if (!input.hasToken) {
|
|
112
|
+
cmds.push('/auth', '/login');
|
|
113
|
+
return cmds;
|
|
114
|
+
}
|
|
115
|
+
cmds.push('/sites', '/link', '/unlink', '/init');
|
|
116
|
+
if (!input.hasSite && !input.hasManifest) {
|
|
117
|
+
return cmds;
|
|
118
|
+
}
|
|
119
|
+
// Site connected
|
|
120
|
+
cmds.push('/list', '/get', '/history');
|
|
121
|
+
if (input.session) {
|
|
122
|
+
cmds.push('/note', '/task add', '/task done', '/decision', '/session end', '/session info', '/report');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
cmds.push('/session start');
|
|
126
|
+
}
|
|
127
|
+
return cmds;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=context-packet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-packet.js","sourceRoot":"","sources":["../../../src/lib/intelligence/context-packet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnose wiring — Collega diagnose.ts al runtime reale della CLI.
|
|
3
|
+
*
|
|
4
|
+
* Responsabilità:
|
|
5
|
+
* - buildDiagnoseInputFromState(): OrbitState → DiagnoseInput
|
|
6
|
+
* - buildRealDiagnoseIO(): crea DiagnoseIO con fetch reali
|
|
7
|
+
* - formatDiagnoseOutput(): DiagnoseReport → stringa formattata per CLI
|
|
8
|
+
*/
|
|
9
|
+
import type { OrbitState } from '../../state/types.js';
|
|
10
|
+
import type { DiagnoseInput, DiagnoseIO, DiagnoseReport } from './diagnose.js';
|
|
11
|
+
/** Costruisce DiagnoseInput dai dati in OrbitState. Pure function. */
|
|
12
|
+
export declare function buildDiagnoseInputFromState(state: OrbitState): DiagnoseInput;
|
|
13
|
+
/** Crea un DiagnoseIO reale con fetch HTTP. */
|
|
14
|
+
export declare function buildRealDiagnoseIO(apiUrl: string, token: string): DiagnoseIO;
|
|
15
|
+
export interface DiagnoseOutputOptions {
|
|
16
|
+
/** Se mostrare colori (default: true) */
|
|
17
|
+
colors?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Formatta il DiagnoseReport come stringa per output CLI. */
|
|
20
|
+
export declare function formatDiagnoseOutput(report: DiagnoseReport): string;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnose wiring — Collega diagnose.ts al runtime reale della CLI.
|
|
3
|
+
*
|
|
4
|
+
* Responsabilità:
|
|
5
|
+
* - buildDiagnoseInputFromState(): OrbitState → DiagnoseInput
|
|
6
|
+
* - buildRealDiagnoseIO(): crea DiagnoseIO con fetch reali
|
|
7
|
+
* - formatDiagnoseOutput(): DiagnoseReport → stringa formattata per CLI
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
11
|
+
// STATE → INPUT ADAPTER
|
|
12
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
13
|
+
/** Costruisce DiagnoseInput dai dati in OrbitState. Pure function. */
|
|
14
|
+
export function buildDiagnoseInputFromState(state) {
|
|
15
|
+
let sessionDurationMinutes = null;
|
|
16
|
+
let tasksOpen = 0;
|
|
17
|
+
if (state.session) {
|
|
18
|
+
const startMs = new Date(state.session.started_at).getTime();
|
|
19
|
+
sessionDurationMinutes = Math.round((Date.now() - startMs) / 60_000);
|
|
20
|
+
tasksOpen = state.session.notes.filter(n => n.kind === 'task' && n.taskStatus === 'open').length;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
hasToken: !!state.tokenEntry,
|
|
24
|
+
hasSite: !!state.siteLink,
|
|
25
|
+
hasManifest: !!state.manifest,
|
|
26
|
+
healthLevel: state.contextHealth.level,
|
|
27
|
+
healthIssues: state.contextHealth.issues.map(i => i.message),
|
|
28
|
+
hasSession: !!state.session,
|
|
29
|
+
sessionDurationMinutes,
|
|
30
|
+
tasksOpen,
|
|
31
|
+
includeRemoteChecks: !!state.tokenEntry,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
35
|
+
// REAL I/O ADAPTER
|
|
36
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
37
|
+
const DIAGNOSE_TIMEOUT_MS = 10_000;
|
|
38
|
+
/** Crea un DiagnoseIO reale con fetch HTTP. */
|
|
39
|
+
export function buildRealDiagnoseIO(apiUrl, token) {
|
|
40
|
+
return {
|
|
41
|
+
async validateToken() {
|
|
42
|
+
const controller = new AbortController();
|
|
43
|
+
const timer = setTimeout(() => controller.abort(), DIAGNOSE_TIMEOUT_MS);
|
|
44
|
+
try {
|
|
45
|
+
const res = await fetch(`${apiUrl}/api/v1/auth/me`, {
|
|
46
|
+
headers: {
|
|
47
|
+
'Authorization': `Bearer ${token}`,
|
|
48
|
+
'User-Agent': '@orbitpanel/cli',
|
|
49
|
+
},
|
|
50
|
+
signal: controller.signal,
|
|
51
|
+
});
|
|
52
|
+
if (res.ok) {
|
|
53
|
+
return { valid: true };
|
|
54
|
+
}
|
|
55
|
+
const body = await res.json().catch(() => ({}));
|
|
56
|
+
return { valid: false, error: body.detail ?? `HTTP ${res.status}` };
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
throw new Error(err instanceof Error ? err.message : 'Network error');
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
async pingBackend() {
|
|
66
|
+
const controller = new AbortController();
|
|
67
|
+
const timer = setTimeout(() => controller.abort(), DIAGNOSE_TIMEOUT_MS);
|
|
68
|
+
const start = Date.now();
|
|
69
|
+
try {
|
|
70
|
+
const res = await fetch(`${apiUrl}/api/v1/auth/me`, {
|
|
71
|
+
headers: {
|
|
72
|
+
'Authorization': `Bearer ${token}`,
|
|
73
|
+
'User-Agent': '@orbitpanel/cli',
|
|
74
|
+
},
|
|
75
|
+
signal: controller.signal,
|
|
76
|
+
});
|
|
77
|
+
const latencyMs = Date.now() - start;
|
|
78
|
+
return { reachable: res.status !== 0, latencyMs };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
return {
|
|
82
|
+
reachable: false,
|
|
83
|
+
latencyMs: Date.now() - start,
|
|
84
|
+
error: err instanceof Error ? err.message : 'timeout',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
async getGitBranch() {
|
|
92
|
+
try {
|
|
93
|
+
const { execSync } = await import('node:child_process');
|
|
94
|
+
return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim() || null;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
async getGitDirty() {
|
|
101
|
+
try {
|
|
102
|
+
const { execSync } = await import('node:child_process');
|
|
103
|
+
const output = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
|
|
104
|
+
return output.length > 0;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const STATUS_ICONS = {
|
|
113
|
+
pass: chalk.green('PASS'),
|
|
114
|
+
warn: chalk.yellow('WARN'),
|
|
115
|
+
fail: chalk.red('FAIL'),
|
|
116
|
+
skip: chalk.dim('SKIP'),
|
|
117
|
+
};
|
|
118
|
+
const CHECK_ICONS = {
|
|
119
|
+
pass: chalk.green('✓'),
|
|
120
|
+
warn: chalk.yellow('⚠'),
|
|
121
|
+
fail: chalk.red('✗'),
|
|
122
|
+
skip: chalk.dim('○'),
|
|
123
|
+
};
|
|
124
|
+
/** Formatta il DiagnoseReport come stringa per output CLI. */
|
|
125
|
+
export function formatDiagnoseOutput(report) {
|
|
126
|
+
const lines = [];
|
|
127
|
+
// Header
|
|
128
|
+
const overallIcon = STATUS_ICONS[report.overallStatus] ?? report.overallStatus;
|
|
129
|
+
lines.push('');
|
|
130
|
+
lines.push(` ${chalk.bold.rgb(37, 99, 235)('Diagnostica')} ${overallIcon} ${chalk.dim(`(${report.totalDurationMs}ms)`)}`);
|
|
131
|
+
lines.push('');
|
|
132
|
+
// Checks
|
|
133
|
+
for (const check of report.checks) {
|
|
134
|
+
const icon = CHECK_ICONS[check.status] ?? '?';
|
|
135
|
+
const scopeTag = check.scope === 'remote' ? chalk.dim(' [remoto]') : '';
|
|
136
|
+
lines.push(` ${icon} ${chalk.white(check.label)}${scopeTag}`);
|
|
137
|
+
lines.push(` ${chalk.dim(check.detail)}`);
|
|
138
|
+
}
|
|
139
|
+
// Suggestions
|
|
140
|
+
if (report.suggestions.length > 0) {
|
|
141
|
+
lines.push('');
|
|
142
|
+
lines.push(` ${chalk.bold.rgb(37, 99, 235)('Suggerimenti:')}`);
|
|
143
|
+
for (const s of report.suggestions) {
|
|
144
|
+
const priority = s.priority === 'high' ? chalk.red('!') : s.priority === 'medium' ? chalk.yellow('!') : chalk.dim('i');
|
|
145
|
+
const cmd = s.command ? ` ${chalk.cyan(s.command)}` : '';
|
|
146
|
+
const taskHint = s.proposeTask ? chalk.dim(' (consiglio: crea un task)') : '';
|
|
147
|
+
lines.push(` ${priority} ${s.text}${cmd}${taskHint}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (report.overallStatus === 'pass') {
|
|
151
|
+
lines.push('');
|
|
152
|
+
lines.push(` ${chalk.green('✓')} ${chalk.dim('Nessun problema rilevato. Tutto ok.')}`);
|
|
153
|
+
}
|
|
154
|
+
lines.push('');
|
|
155
|
+
return lines.join('\n');
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=diagnose-wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose-wiring.js","sourceRoot":"","sources":["../../../src/lib/intelligence/diagnose-wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /diagnose — Diagnostica aggregata per il CLI Intelligence Layer.
|
|
3
|
+
*
|
|
4
|
+
* v1 PERIMETRO:
|
|
5
|
+
* - 5 check (3 locali + 2 remoti opzionali)
|
|
6
|
+
* - Aggrega risultati in un DiagnoseReport
|
|
7
|
+
* - NON auto-fixa
|
|
8
|
+
* - NON fa loop complessi
|
|
9
|
+
* - NON tocca memoria backend
|
|
10
|
+
* - NON scrive task automaticamente
|
|
11
|
+
*
|
|
12
|
+
* ARCHITETTURA:
|
|
13
|
+
* - Pure data collection (check functions)
|
|
14
|
+
* - Report aggregation (buildDiagnoseReport)
|
|
15
|
+
* - Suggestion generation (suggerimenti per l'utente)
|
|
16
|
+
* - Integration con SessionEngine opzionale (propone task)
|
|
17
|
+
*/
|
|
18
|
+
export type CheckStatus = 'pass' | 'warn' | 'fail' | 'skip';
|
|
19
|
+
export interface DiagnoseCheck {
|
|
20
|
+
/** Identificatore del check */
|
|
21
|
+
id: string;
|
|
22
|
+
/** Nome leggibile */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Risultato */
|
|
25
|
+
status: CheckStatus;
|
|
26
|
+
/** Dettaglio del risultato */
|
|
27
|
+
detail: string;
|
|
28
|
+
/** Se il check è locale o remoto */
|
|
29
|
+
scope: 'local' | 'remote';
|
|
30
|
+
/** Tempo di esecuzione in ms */
|
|
31
|
+
durationMs: number;
|
|
32
|
+
}
|
|
33
|
+
export interface DiagnoseSuggestion {
|
|
34
|
+
/** Priorità: alta (problemi bloccanti) > media > bassa (miglioramenti) */
|
|
35
|
+
priority: 'high' | 'medium' | 'low';
|
|
36
|
+
/** Testo della raccomandazione */
|
|
37
|
+
text: string;
|
|
38
|
+
/** Comando da eseguire (se applicabile) */
|
|
39
|
+
command: string | null;
|
|
40
|
+
/** Se proporre la creazione di un task */
|
|
41
|
+
proposeTask: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface DiagnoseReport {
|
|
44
|
+
/** Timestamp di generazione */
|
|
45
|
+
generatedAt: string;
|
|
46
|
+
/** Risultato complessivo */
|
|
47
|
+
overallStatus: CheckStatus;
|
|
48
|
+
/** Check eseguiti */
|
|
49
|
+
checks: DiagnoseCheck[];
|
|
50
|
+
/** Suggerimenti ordinati per priorità */
|
|
51
|
+
suggestions: DiagnoseSuggestion[];
|
|
52
|
+
/** Durata totale in ms */
|
|
53
|
+
totalDurationMs: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* I/O adapter per i check — injectable per testing.
|
|
57
|
+
* Permette di testare la logica di diagnose senza I/O reale.
|
|
58
|
+
*/
|
|
59
|
+
export interface DiagnoseIO {
|
|
60
|
+
/** Verifica se il token è valido via API */
|
|
61
|
+
validateToken(): Promise<{
|
|
62
|
+
valid: boolean;
|
|
63
|
+
error?: string;
|
|
64
|
+
}>;
|
|
65
|
+
/** Verifica raggiungibilità backend */
|
|
66
|
+
pingBackend(): Promise<{
|
|
67
|
+
reachable: boolean;
|
|
68
|
+
latencyMs: number;
|
|
69
|
+
error?: string;
|
|
70
|
+
}>;
|
|
71
|
+
/** Verifica branch git */
|
|
72
|
+
getGitBranch(): Promise<string | null>;
|
|
73
|
+
/** Verifica se ci sono modifiche non committate */
|
|
74
|
+
getGitDirty(): Promise<boolean | null>;
|
|
75
|
+
}
|
|
76
|
+
/** Input per il diagnose engine */
|
|
77
|
+
export interface DiagnoseInput {
|
|
78
|
+
/** Se c'è un token configurato */
|
|
79
|
+
hasToken: boolean;
|
|
80
|
+
/** Se c'è un sito collegato */
|
|
81
|
+
hasSite: boolean;
|
|
82
|
+
/** Se c'è un manifest */
|
|
83
|
+
hasManifest: boolean;
|
|
84
|
+
/** Livello di salute contesto */
|
|
85
|
+
healthLevel: string;
|
|
86
|
+
/** Problemi di salute contesto */
|
|
87
|
+
healthIssues: string[];
|
|
88
|
+
/** Se c'è una sessione attiva */
|
|
89
|
+
hasSession: boolean;
|
|
90
|
+
/** Durata sessione in minuti (null se nessuna) */
|
|
91
|
+
sessionDurationMinutes: number | null;
|
|
92
|
+
/** Task aperti (0 se nessuna sessione) */
|
|
93
|
+
tasksOpen: number;
|
|
94
|
+
/** Se includere check remoti (backend API) */
|
|
95
|
+
includeRemoteChecks: boolean;
|
|
96
|
+
}
|
|
97
|
+
/** Check 1: Configurazione locale (token + sito + manifest) */
|
|
98
|
+
export declare function checkLocalConfig(input: DiagnoseInput): DiagnoseCheck;
|
|
99
|
+
/** Check 2: Salute del contesto (health issues) */
|
|
100
|
+
export declare function checkContextHealth(input: DiagnoseInput): DiagnoseCheck;
|
|
101
|
+
/** Check 3: Stato sessione */
|
|
102
|
+
export declare function checkSessionState(input: DiagnoseInput): DiagnoseCheck;
|
|
103
|
+
/** Check 4: Connettività backend (remoto, opzionale) */
|
|
104
|
+
export declare function checkBackendConnectivity(io: DiagnoseIO): Promise<DiagnoseCheck>;
|
|
105
|
+
/** Check 5: Validità token (remoto, opzionale) */
|
|
106
|
+
export declare function checkTokenValidity(io: DiagnoseIO): Promise<DiagnoseCheck>;
|
|
107
|
+
/** Calcola lo status complessivo dai check */
|
|
108
|
+
export declare function computeOverallStatus(checks: DiagnoseCheck[]): CheckStatus;
|
|
109
|
+
/** Genera suggerimenti basati sui risultati dei check */
|
|
110
|
+
export declare function generateSuggestions(checks: DiagnoseCheck[], input: DiagnoseInput): DiagnoseSuggestion[];
|
|
111
|
+
/**
|
|
112
|
+
* Esegue la diagnostica completa e produce un DiagnoseReport.
|
|
113
|
+
*
|
|
114
|
+
* v1: 3 check locali (sempre) + 2 check remoti (se includeRemoteChecks)
|
|
115
|
+
*/
|
|
116
|
+
export declare function runDiagnose(input: DiagnoseInput, io: DiagnoseIO): Promise<DiagnoseReport>;
|