@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,312 @@
|
|
|
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
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
// CHECK RUNNERS
|
|
20
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
21
|
+
/** Check 1: Configurazione locale (token + sito + manifest) */
|
|
22
|
+
export function checkLocalConfig(input) {
|
|
23
|
+
const start = Date.now();
|
|
24
|
+
if (!input.hasToken) {
|
|
25
|
+
return {
|
|
26
|
+
id: 'local_config',
|
|
27
|
+
label: 'Configurazione locale',
|
|
28
|
+
status: 'fail',
|
|
29
|
+
detail: 'Nessun token configurato. Esegui /auth o /login.',
|
|
30
|
+
scope: 'local',
|
|
31
|
+
durationMs: Date.now() - start,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (!input.hasSite && !input.hasManifest) {
|
|
35
|
+
return {
|
|
36
|
+
id: 'local_config',
|
|
37
|
+
label: 'Configurazione locale',
|
|
38
|
+
status: 'warn',
|
|
39
|
+
detail: 'Token presente ma nessun sito collegato. Esegui /sites o /link.',
|
|
40
|
+
scope: 'local',
|
|
41
|
+
durationMs: Date.now() - start,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const manifestStatus = input.hasManifest ? 'manifest presente' : 'solo link legacy';
|
|
45
|
+
return {
|
|
46
|
+
id: 'local_config',
|
|
47
|
+
label: 'Configurazione locale',
|
|
48
|
+
status: input.hasManifest ? 'pass' : 'warn',
|
|
49
|
+
detail: `Token ok, sito collegato (${manifestStatus}).`,
|
|
50
|
+
scope: 'local',
|
|
51
|
+
durationMs: Date.now() - start,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Check 2: Salute del contesto (health issues) */
|
|
55
|
+
export function checkContextHealth(input) {
|
|
56
|
+
const start = Date.now();
|
|
57
|
+
if (input.healthLevel === 'ok' || input.healthLevel === 'info') {
|
|
58
|
+
return {
|
|
59
|
+
id: 'context_health',
|
|
60
|
+
label: 'Salute contesto',
|
|
61
|
+
status: 'pass',
|
|
62
|
+
detail: 'Contesto coerente, nessuna incoerenza rilevata.',
|
|
63
|
+
scope: 'local',
|
|
64
|
+
durationMs: Date.now() - start,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
id: 'context_health',
|
|
69
|
+
label: 'Salute contesto',
|
|
70
|
+
status: input.healthLevel === 'critical' ? 'fail' : 'warn',
|
|
71
|
+
detail: `Contesto ${input.healthLevel}: ${input.healthIssues.join('; ') || 'dettagli in /context'}.`,
|
|
72
|
+
scope: 'local',
|
|
73
|
+
durationMs: Date.now() - start,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Check 3: Stato sessione */
|
|
77
|
+
export function checkSessionState(input) {
|
|
78
|
+
const start = Date.now();
|
|
79
|
+
if (!input.hasSession) {
|
|
80
|
+
return {
|
|
81
|
+
id: 'session_state',
|
|
82
|
+
label: 'Sessione di lavoro',
|
|
83
|
+
status: 'warn',
|
|
84
|
+
detail: 'Nessuna sessione attiva. Avvia con /session start per tracciare il lavoro.',
|
|
85
|
+
scope: 'local',
|
|
86
|
+
durationMs: Date.now() - start,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const issues = [];
|
|
90
|
+
if (input.sessionDurationMinutes !== null && input.sessionDurationMinutes > 240) {
|
|
91
|
+
issues.push(`sessione molto lunga (${input.sessionDurationMinutes}min)`);
|
|
92
|
+
}
|
|
93
|
+
if (input.tasksOpen > 5) {
|
|
94
|
+
issues.push(`${input.tasksOpen} task ancora aperti`);
|
|
95
|
+
}
|
|
96
|
+
if (issues.length > 0) {
|
|
97
|
+
return {
|
|
98
|
+
id: 'session_state',
|
|
99
|
+
label: 'Sessione di lavoro',
|
|
100
|
+
status: 'warn',
|
|
101
|
+
detail: `Sessione attiva con attenzioni: ${issues.join(', ')}.`,
|
|
102
|
+
scope: 'local',
|
|
103
|
+
durationMs: Date.now() - start,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
id: 'session_state',
|
|
108
|
+
label: 'Sessione di lavoro',
|
|
109
|
+
status: 'pass',
|
|
110
|
+
detail: `Sessione attiva (${input.sessionDurationMinutes ?? '?'}min), ${input.tasksOpen} task aperti.`,
|
|
111
|
+
scope: 'local',
|
|
112
|
+
durationMs: Date.now() - start,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/** Check 4: Connettività backend (remoto, opzionale) */
|
|
116
|
+
export async function checkBackendConnectivity(io) {
|
|
117
|
+
const start = Date.now();
|
|
118
|
+
try {
|
|
119
|
+
const result = await io.pingBackend();
|
|
120
|
+
if (result.reachable) {
|
|
121
|
+
return {
|
|
122
|
+
id: 'backend_connectivity',
|
|
123
|
+
label: 'Connettività backend',
|
|
124
|
+
status: result.latencyMs > 2000 ? 'warn' : 'pass',
|
|
125
|
+
detail: `Backend raggiungibile (${result.latencyMs}ms).${result.latencyMs > 2000 ? ' Latenza alta.' : ''}`,
|
|
126
|
+
scope: 'remote',
|
|
127
|
+
durationMs: Date.now() - start,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
id: 'backend_connectivity',
|
|
132
|
+
label: 'Connettività backend',
|
|
133
|
+
status: 'fail',
|
|
134
|
+
detail: `Backend non raggiungibile: ${result.error ?? 'timeout'}.`,
|
|
135
|
+
scope: 'remote',
|
|
136
|
+
durationMs: Date.now() - start,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return {
|
|
141
|
+
id: 'backend_connectivity',
|
|
142
|
+
label: 'Connettività backend',
|
|
143
|
+
status: 'fail',
|
|
144
|
+
detail: `Errore verifica backend: ${err instanceof Error ? err.message : 'sconosciuto'}.`,
|
|
145
|
+
scope: 'remote',
|
|
146
|
+
durationMs: Date.now() - start,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Check 5: Validità token (remoto, opzionale) */
|
|
151
|
+
export async function checkTokenValidity(io) {
|
|
152
|
+
const start = Date.now();
|
|
153
|
+
try {
|
|
154
|
+
const result = await io.validateToken();
|
|
155
|
+
return {
|
|
156
|
+
id: 'token_validity',
|
|
157
|
+
label: 'Validità token',
|
|
158
|
+
status: result.valid ? 'pass' : 'fail',
|
|
159
|
+
detail: result.valid ? 'Token valido e attivo.' : `Token non valido: ${result.error ?? 'scaduto o revocato'}.`,
|
|
160
|
+
scope: 'remote',
|
|
161
|
+
durationMs: Date.now() - start,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return {
|
|
166
|
+
id: 'token_validity',
|
|
167
|
+
label: 'Validità token',
|
|
168
|
+
status: 'skip',
|
|
169
|
+
detail: `Verifica token non disponibile: ${err instanceof Error ? err.message : 'errore'}.`,
|
|
170
|
+
scope: 'remote',
|
|
171
|
+
durationMs: Date.now() - start,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
176
|
+
// REPORT BUILDER
|
|
177
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
178
|
+
/** Calcola lo status complessivo dai check */
|
|
179
|
+
export function computeOverallStatus(checks) {
|
|
180
|
+
if (checks.some(c => c.status === 'fail'))
|
|
181
|
+
return 'fail';
|
|
182
|
+
if (checks.some(c => c.status === 'warn'))
|
|
183
|
+
return 'warn';
|
|
184
|
+
if (checks.every(c => c.status === 'skip'))
|
|
185
|
+
return 'skip';
|
|
186
|
+
return 'pass';
|
|
187
|
+
}
|
|
188
|
+
/** Genera suggerimenti basati sui risultati dei check */
|
|
189
|
+
export function generateSuggestions(checks, input) {
|
|
190
|
+
const suggestions = [];
|
|
191
|
+
for (const check of checks) {
|
|
192
|
+
if (check.status === 'pass' || check.status === 'skip')
|
|
193
|
+
continue;
|
|
194
|
+
switch (check.id) {
|
|
195
|
+
case 'local_config':
|
|
196
|
+
if (!input.hasToken) {
|
|
197
|
+
suggestions.push({
|
|
198
|
+
priority: 'high',
|
|
199
|
+
text: 'Configura l\'autenticazione per collegare la CLI a Orbit.',
|
|
200
|
+
command: '/auth',
|
|
201
|
+
proposeTask: false,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
else if (!input.hasSite && !input.hasManifest) {
|
|
205
|
+
suggestions.push({
|
|
206
|
+
priority: 'medium',
|
|
207
|
+
text: 'Collega un sito per abilitare sessioni e report.',
|
|
208
|
+
command: '/sites',
|
|
209
|
+
proposeTask: false,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
else if (!input.hasManifest) {
|
|
213
|
+
suggestions.push({
|
|
214
|
+
priority: 'low',
|
|
215
|
+
text: 'Inizializza il manifesto progetto per una configurazione più robusta.',
|
|
216
|
+
command: '/init',
|
|
217
|
+
proposeTask: false,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
case 'context_health':
|
|
222
|
+
suggestions.push({
|
|
223
|
+
priority: check.status === 'fail' ? 'high' : 'medium',
|
|
224
|
+
text: `Contesto ${input.healthLevel} — verifica e correggi le incoerenze.`,
|
|
225
|
+
command: '/context',
|
|
226
|
+
proposeTask: check.status === 'fail',
|
|
227
|
+
});
|
|
228
|
+
break;
|
|
229
|
+
case 'session_state':
|
|
230
|
+
if (!input.hasSession) {
|
|
231
|
+
suggestions.push({
|
|
232
|
+
priority: 'medium',
|
|
233
|
+
text: 'Nessuna sessione attiva — il lavoro non viene tracciato.',
|
|
234
|
+
command: '/session start',
|
|
235
|
+
proposeTask: false,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
if (input.sessionDurationMinutes !== null && input.sessionDurationMinutes > 240) {
|
|
240
|
+
suggestions.push({
|
|
241
|
+
priority: 'medium',
|
|
242
|
+
text: 'Sessione molto lunga — valuta di chiudere e inviare un report.',
|
|
243
|
+
command: '/report',
|
|
244
|
+
proposeTask: true,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
if (input.tasksOpen > 5) {
|
|
248
|
+
suggestions.push({
|
|
249
|
+
priority: 'medium',
|
|
250
|
+
text: `${input.tasksOpen} task ancora aperti — rivedi con /session info.`,
|
|
251
|
+
command: '/session info',
|
|
252
|
+
proposeTask: false,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
case 'backend_connectivity':
|
|
258
|
+
suggestions.push({
|
|
259
|
+
priority: 'high',
|
|
260
|
+
text: 'Backend non raggiungibile — lavora in locale, il report sarà possibile quando tornerà online.',
|
|
261
|
+
command: null,
|
|
262
|
+
proposeTask: true,
|
|
263
|
+
});
|
|
264
|
+
break;
|
|
265
|
+
case 'token_validity':
|
|
266
|
+
suggestions.push({
|
|
267
|
+
priority: 'high',
|
|
268
|
+
text: 'Token non valido — riautentica per ripristinare la connessione.',
|
|
269
|
+
command: '/auth',
|
|
270
|
+
proposeTask: false,
|
|
271
|
+
});
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Sort by priority
|
|
276
|
+
const order = { high: 0, medium: 1, low: 2 };
|
|
277
|
+
suggestions.sort((a, b) => order[a.priority] - order[b.priority]);
|
|
278
|
+
return suggestions;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Esegue la diagnostica completa e produce un DiagnoseReport.
|
|
282
|
+
*
|
|
283
|
+
* v1: 3 check locali (sempre) + 2 check remoti (se includeRemoteChecks)
|
|
284
|
+
*/
|
|
285
|
+
export async function runDiagnose(input, io) {
|
|
286
|
+
const start = Date.now();
|
|
287
|
+
// Check locali (sincroni, sempre eseguiti)
|
|
288
|
+
const localChecks = [
|
|
289
|
+
checkLocalConfig(input),
|
|
290
|
+
checkContextHealth(input),
|
|
291
|
+
checkSessionState(input),
|
|
292
|
+
];
|
|
293
|
+
// Check remoti (asincroni, opzionali)
|
|
294
|
+
let remoteChecks = [];
|
|
295
|
+
if (input.includeRemoteChecks && input.hasToken) {
|
|
296
|
+
const [connectivity, tokenCheck] = await Promise.all([
|
|
297
|
+
checkBackendConnectivity(io),
|
|
298
|
+
checkTokenValidity(io),
|
|
299
|
+
]);
|
|
300
|
+
remoteChecks = [connectivity, tokenCheck];
|
|
301
|
+
}
|
|
302
|
+
const allChecks = [...localChecks, ...remoteChecks];
|
|
303
|
+
const suggestions = generateSuggestions(allChecks, input);
|
|
304
|
+
return {
|
|
305
|
+
generatedAt: new Date().toISOString(),
|
|
306
|
+
overallStatus: computeOverallStatus(allChecks),
|
|
307
|
+
checks: allChecks,
|
|
308
|
+
suggestions,
|
|
309
|
+
totalDurationMs: Date.now() - start,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=diagnose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../../src/lib/intelligence/diagnose.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,3 +33,23 @@ export declare function formatSummaryOneLiner(stats: SessionStats): string | nul
|
|
|
33
33
|
* Used by cmdSessionInfo to make tasks discoverable.
|
|
34
34
|
*/
|
|
35
35
|
export declare function formatOpenTaskList(notes: SessionNote[]): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Format recent decisions for /session info.
|
|
38
|
+
* Returns empty array if no decisions exist.
|
|
39
|
+
* Shows last 3 decision texts with a header.
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatRecentDecisions(notes: SessionNote[]): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Format recent activity for /session info.
|
|
44
|
+
* Excludes tasks (shown separately) and decisions (shown separately).
|
|
45
|
+
* Adds source labels ([mcp], [ai]) for non-user entries when session has mixed sources.
|
|
46
|
+
* Returns empty array if no relevant activity exists.
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatRecentActivity(notes: SessionNote[]): string[];
|
|
49
|
+
/**
|
|
50
|
+
* Return a single closure hint line, or null if not applicable.
|
|
51
|
+
* Only shown when session clearly looks ready for /report:
|
|
52
|
+
* - tasks all done (tasksDone > 0, tasksOpen === 0), OR
|
|
53
|
+
* - mature session without task lifecycle (notes >= 3 + decisions > 0)
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatSessionClosureHint(stats: SessionStats): string | null;
|
|
@@ -92,4 +92,73 @@ export function formatOpenTaskList(notes) {
|
|
|
92
92
|
lines.push(` ${DIM('→ /task done <id>')}`);
|
|
93
93
|
return lines;
|
|
94
94
|
}
|
|
95
|
+
const MAX_VISIBLE_DECISIONS = 3;
|
|
96
|
+
/**
|
|
97
|
+
* Format recent decisions for /session info.
|
|
98
|
+
* Returns empty array if no decisions exist.
|
|
99
|
+
* Shows last 3 decision texts with a header.
|
|
100
|
+
*/
|
|
101
|
+
export function formatRecentDecisions(notes) {
|
|
102
|
+
const decisions = notes.filter(n => n.kind === 'decision');
|
|
103
|
+
if (decisions.length === 0)
|
|
104
|
+
return [];
|
|
105
|
+
const lines = [];
|
|
106
|
+
lines.push(` ${DIM('Decisioni recenti:')}`);
|
|
107
|
+
const visible = decisions.slice(-MAX_VISIBLE_DECISIONS);
|
|
108
|
+
for (const d of visible) {
|
|
109
|
+
lines.push(` ${DIM('·')} ${WHITE(d.text)}`);
|
|
110
|
+
}
|
|
111
|
+
return lines;
|
|
112
|
+
}
|
|
113
|
+
const MAX_VISIBLE_ACTIVITY = 5;
|
|
114
|
+
/**
|
|
115
|
+
* Format recent activity for /session info.
|
|
116
|
+
* Excludes tasks (shown separately) and decisions (shown separately).
|
|
117
|
+
* Adds source labels ([mcp], [ai]) for non-user entries when session has mixed sources.
|
|
118
|
+
* Returns empty array if no relevant activity exists.
|
|
119
|
+
*/
|
|
120
|
+
export function formatRecentActivity(notes) {
|
|
121
|
+
// Filter out tasks and decisions — they have their own sections
|
|
122
|
+
const activity = notes.filter(n => {
|
|
123
|
+
const kind = n.kind ?? 'note';
|
|
124
|
+
return kind !== 'task' && kind !== 'decision';
|
|
125
|
+
});
|
|
126
|
+
if (activity.length === 0)
|
|
127
|
+
return [];
|
|
128
|
+
// Determine if session has mixed sources (need source tags)
|
|
129
|
+
const hasMixed = activity.some(n => n.source && n.source !== 'user');
|
|
130
|
+
const lines = [];
|
|
131
|
+
lines.push(` ${DIM('Attivita recenti:')}`);
|
|
132
|
+
const visible = activity.slice(-MAX_VISIBLE_ACTIVITY);
|
|
133
|
+
for (const n of visible) {
|
|
134
|
+
const source = n.source ?? 'user';
|
|
135
|
+
if (hasMixed && source !== 'user') {
|
|
136
|
+
lines.push(` ${DIM('·')} ${DIM(`[${source}]`)} ${WHITE(n.text)}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push(` ${DIM('·')} ${WHITE(n.text)}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return lines;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Return a single closure hint line, or null if not applicable.
|
|
146
|
+
* Only shown when session clearly looks ready for /report:
|
|
147
|
+
* - tasks all done (tasksDone > 0, tasksOpen === 0), OR
|
|
148
|
+
* - mature session without task lifecycle (notes >= 3 + decisions > 0)
|
|
149
|
+
*/
|
|
150
|
+
export function formatSessionClosureHint(stats) {
|
|
151
|
+
// Never suggest closure when tasks are still open
|
|
152
|
+
if (stats.tasksOpen > 0)
|
|
153
|
+
return null;
|
|
154
|
+
// Signal A: tasks completed, none remaining
|
|
155
|
+
if (stats.tasksDone > 0) {
|
|
156
|
+
return ` ${DIM('Nessun task aperto — puoi concludere con /report')}`;
|
|
157
|
+
}
|
|
158
|
+
// Signal B: mature session without task lifecycle
|
|
159
|
+
if (stats.notesTotal >= 3 && stats.decisions > 0) {
|
|
160
|
+
return ` ${DIM('Sessione pronta — valuta di concludere con /report')}`;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
95
164
|
//# sourceMappingURL=session-summary-format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-summary-format.js","sourceRoot":"","sources":["../../src/lib/session-summary-format.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-summary-format.js","sourceRoot":"","sources":["../../src/lib/session-summary-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export declare function cmdSessionEnd(): Promise<void>;
|
|
|
11
11
|
export declare function cmdSessionInfo(): Promise<void>;
|
|
12
12
|
export declare function cmdTaskDone(entryId: string): Promise<void>;
|
|
13
13
|
export declare function cmdNoteAdd(text: string): Promise<void>;
|
|
14
|
+
export declare function cmdTaskAdd(text: string): Promise<void>;
|
|
15
|
+
export declare function cmdDecisionAdd(text: string): Promise<void>;
|
|
14
16
|
export declare function cmdReport(promptFn?: PromptFn): Promise<void>;
|
|
15
17
|
export declare function cmdList(): Promise<void>;
|
|
16
18
|
export declare function cmdGet(id: string): Promise<void>;
|
|
@@ -12,7 +12,7 @@ import { loadSiteLink } from './site.js';
|
|
|
12
12
|
import { SessionEngine } from './session-engine.js';
|
|
13
13
|
import { getGitBranch, getGitCommitHead, getGitDiffStat } from './git.js';
|
|
14
14
|
import { buildReportPayload } from './report-builder.js';
|
|
15
|
-
import { computeSessionStats, formatSummaryLines, formatOpenTaskList } from './session-summary-format.js';
|
|
15
|
+
import { computeSessionStats, formatSummaryLines, formatOpenTaskList, formatRecentDecisions, formatRecentActivity, formatSessionClosureHint } from './session-summary-format.js';
|
|
16
16
|
import { B, BL, BB, GREEN, YELLOW, DIM, WHITE, sparkle, getClient } from './shell-render.js';
|
|
17
17
|
import { confirmAction } from './risk.js';
|
|
18
18
|
import { outputBlock } from './ui.js';
|
|
@@ -222,10 +222,23 @@ export async function cmdSessionInfo() {
|
|
|
222
222
|
for (const line of taskLines)
|
|
223
223
|
console.log(line);
|
|
224
224
|
}
|
|
225
|
-
|
|
225
|
+
const decisionLines = formatRecentDecisions(session.notes);
|
|
226
|
+
if (decisionLines.length > 0) {
|
|
226
227
|
console.log('');
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
for (const line of decisionLines)
|
|
229
|
+
console.log(line);
|
|
230
|
+
}
|
|
231
|
+
const activityLines = formatRecentActivity(session.notes);
|
|
232
|
+
if (activityLines.length > 0) {
|
|
233
|
+
console.log('');
|
|
234
|
+
for (const line of activityLines)
|
|
235
|
+
console.log(line);
|
|
236
|
+
}
|
|
237
|
+
const closureHint = formatSessionClosureHint(sessionStats);
|
|
238
|
+
if (closureHint) {
|
|
239
|
+
console.log('');
|
|
240
|
+
console.log(closureHint);
|
|
241
|
+
}
|
|
229
242
|
console.log('');
|
|
230
243
|
}
|
|
231
244
|
export async function cmdTaskDone(entryId) {
|
|
@@ -282,6 +295,47 @@ export async function cmdNoteAdd(text) {
|
|
|
282
295
|
console.log(`\n ${DIM(msg)}\n`);
|
|
283
296
|
}
|
|
284
297
|
}
|
|
298
|
+
export async function cmdTaskAdd(text) {
|
|
299
|
+
const siteLink = await loadSiteLink(process.cwd());
|
|
300
|
+
if (!siteLink) {
|
|
301
|
+
console.log(`\n ${chalk.red('✗')} ${DIM('Nessun sito collegato')}\n`);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const engine = new SessionEngine(siteLink.orbit_site_id);
|
|
305
|
+
try {
|
|
306
|
+
const updated = await engine.addEntry({ text, source: 'user', kind: 'task' });
|
|
307
|
+
const entry = updated.notes[updated.notes.length - 1];
|
|
308
|
+
const shortId = entry.id ? entry.id.slice(0, 6) : '?';
|
|
309
|
+
console.log('');
|
|
310
|
+
console.log(` ${GREEN('✓')} ${GREEN.bold('Task aggiunto')} ${DIM(`[${shortId}]`)}`);
|
|
311
|
+
console.log(` ${B('│')} ${WHITE(text)}`);
|
|
312
|
+
console.log(` ${DIM('→ /task done ' + shortId)}`);
|
|
313
|
+
console.log('');
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
317
|
+
console.log(`\n ${DIM(msg)}\n`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export async function cmdDecisionAdd(text) {
|
|
321
|
+
const siteLink = await loadSiteLink(process.cwd());
|
|
322
|
+
if (!siteLink) {
|
|
323
|
+
console.log(`\n ${chalk.red('✗')} ${DIM('Nessun sito collegato')}\n`);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const engine = new SessionEngine(siteLink.orbit_site_id);
|
|
327
|
+
try {
|
|
328
|
+
const updated = await engine.addEntry({ text, source: 'user', kind: 'decision' });
|
|
329
|
+
console.log('');
|
|
330
|
+
console.log(` ${GREEN('✓')} ${GREEN.bold('Decisione registrata')}`);
|
|
331
|
+
console.log(` ${B('│')} ${WHITE(text)}`);
|
|
332
|
+
console.log('');
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
336
|
+
console.log(`\n ${DIM(msg)}\n`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
285
339
|
export async function cmdReport(promptFn) {
|
|
286
340
|
const config = await loadConfig();
|
|
287
341
|
const client = getClient(config);
|