@orbitpanel/cli 1.6.0 → 1.7.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 (48) hide show
  1. package/dist/commands/note/add.js +10 -9
  2. package/dist/commands/note/add.js.map +1 -1
  3. package/dist/commands/report/send.js +6 -7
  4. package/dist/commands/report/send.js.map +1 -1
  5. package/dist/commands/session/end.js +21 -24
  6. package/dist/commands/session/end.js.map +1 -1
  7. package/dist/commands/session/start.js +22 -25
  8. package/dist/commands/session/start.js.map +1 -1
  9. package/dist/commands/status.js +6 -2
  10. package/dist/commands/status.js.map +1 -1
  11. package/dist/lib/command-router.d.ts +11 -2
  12. package/dist/lib/command-router.js +30 -3
  13. package/dist/lib/command-router.js.map +1 -1
  14. package/dist/lib/context-guard.d.ts +11 -2
  15. package/dist/lib/context-guard.js +11 -2
  16. package/dist/lib/context-guard.js.map +1 -1
  17. package/dist/lib/git.d.ts +1 -0
  18. package/dist/lib/git.js +1 -1
  19. package/dist/lib/git.js.map +1 -1
  20. package/dist/lib/info-engine.d.ts +13 -6
  21. package/dist/lib/info-engine.js +13 -6
  22. package/dist/lib/info-engine.js.map +1 -1
  23. package/dist/lib/report-builder.d.ts +23 -1
  24. package/dist/lib/report-builder.js +134 -7
  25. package/dist/lib/report-builder.js.map +1 -1
  26. package/dist/lib/session-engine.d.ts +65 -0
  27. package/dist/lib/session-engine.js +143 -0
  28. package/dist/lib/session-engine.js.map +1 -0
  29. package/dist/lib/session-summary-format.d.ts +35 -0
  30. package/dist/lib/session-summary-format.js +95 -0
  31. package/dist/lib/session-summary-format.js.map +1 -0
  32. package/dist/lib/session.d.ts +1 -0
  33. package/dist/lib/session.js +1 -1
  34. package/dist/lib/session.js.map +1 -1
  35. package/dist/lib/shell-commands.d.ts +1 -0
  36. package/dist/lib/shell-commands.js +98 -41
  37. package/dist/lib/shell-commands.js.map +1 -1
  38. package/dist/lib/shell-hints.d.ts +4 -27
  39. package/dist/lib/shell-hints.js +4 -75
  40. package/dist/lib/shell-hints.js.map +1 -1
  41. package/dist/lib/shell-render.js +1 -0
  42. package/dist/lib/shell-render.js.map +1 -1
  43. package/dist/mcp/server.d.ts +13 -1
  44. package/dist/mcp/server.js +44 -27
  45. package/dist/mcp/server.js.map +1 -1
  46. package/dist/types.d.ts +24 -1
  47. package/oclif.manifest.json +71 -71
  48. package/package.json +7 -3
@@ -1,13 +1,20 @@
1
1
  /**
2
- * Info engine for @orbitpanel/cli.
2
+ * SOURCE OF TRUTH — User guidance layer
3
3
  *
4
4
  * Computes the "what should I do now?" logic:
5
- * - Next step recommendation
6
- * - Workflow checklist with visual status
7
- * - Contextual suggestions (max 2, with reasons)
8
- * - Onboarding steps for first-time users
5
+ * - setup level (unconfigured → configured)
6
+ * - onboarding steps for first-time users
7
+ * - next step recommendation
8
+ * - workflow checklist with visual status
9
+ * - contextual suggestions (max 2, with reasons)
10
+ * - welcome message
9
11
  *
10
- * PRINCIPLE: Every output answers "cosa fare adesso e perche'"
12
+ * PRINCIPLE: Every output answers "cosa fare adesso e perché"
13
+ *
14
+ * NON mettere qui:
15
+ * - logica di esecuzione comandi → command-router.ts
16
+ * - policy di sicurezza / guard → context-guard.ts
17
+ * - hint per comandi sconosciuti → shell-hints.ts
11
18
  */
12
19
  import type { ContextHealthLevel } from '../types.js';
13
20
  export interface InfoState {
@@ -1,13 +1,20 @@
1
1
  /**
2
- * Info engine for @orbitpanel/cli.
2
+ * SOURCE OF TRUTH — User guidance layer
3
3
  *
4
4
  * Computes the "what should I do now?" logic:
5
- * - Next step recommendation
6
- * - Workflow checklist with visual status
7
- * - Contextual suggestions (max 2, with reasons)
8
- * - Onboarding steps for first-time users
5
+ * - setup level (unconfigured → configured)
6
+ * - onboarding steps for first-time users
7
+ * - next step recommendation
8
+ * - workflow checklist with visual status
9
+ * - contextual suggestions (max 2, with reasons)
10
+ * - welcome message
9
11
  *
10
- * PRINCIPLE: Every output answers "cosa fare adesso e perche'"
12
+ * PRINCIPLE: Every output answers "cosa fare adesso e perché"
13
+ *
14
+ * NON mettere qui:
15
+ * - logica di esecuzione comandi → command-router.ts
16
+ * - policy di sicurezza / guard → context-guard.ts
17
+ * - hint per comandi sconosciuti → shell-hints.ts
11
18
  */
12
19
  // ─── Setup Level ──────────────────────────────────────────────────
13
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"info-engine.js","sourceRoot":"","sources":["../../src/lib/info-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"info-engine.js","sourceRoot":"","sources":["../../src/lib/info-engine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Report builder for @orbitpanel/cli.
3
3
  * Assembles intervention payload from session data + git info.
4
+ *
5
+ * v2: reads source/kind from SessionNote for structured reports.
4
6
  */
5
- import type { SessionState } from '../types.js';
7
+ import type { SessionState, SessionNote } from '../types.js';
6
8
  export interface ReportOptions {
7
9
  session: SessionState;
8
10
  title?: string;
@@ -13,5 +15,25 @@ export interface ReportOptions {
13
15
  files_changed?: number;
14
16
  environment?: string;
15
17
  }
18
+ /** Grouped notes by source and kind */
19
+ export interface GroupedNotes {
20
+ /** Notes from source='user' or legacy (no source) */
21
+ userNotes: SessionNote[];
22
+ /** Notes from source='mcp' or 'ai' */
23
+ agentNotes: SessionNote[];
24
+ /** Notes from source='system' */
25
+ systemNotes: SessionNote[];
26
+ /** Tasks grouped by status */
27
+ tasks: {
28
+ open: SessionNote[];
29
+ done: SessionNote[];
30
+ };
31
+ /** Decision entries */
32
+ decisions: SessionNote[];
33
+ /** Warning entries */
34
+ warnings: SessionNote[];
35
+ }
36
+ /** Group notes by source and kind. Exported for testability. */
37
+ export declare function groupNotes(notes: SessionNote[]): GroupedNotes;
16
38
  /** Build a complete intervention payload ready for POST /api/v1/maintenance/ */
17
39
  export declare function buildReportPayload(opts: ReportOptions): Record<string, unknown>;
@@ -1,21 +1,78 @@
1
1
  /**
2
2
  * Report builder for @orbitpanel/cli.
3
3
  * Assembles intervention payload from session data + git info.
4
+ *
5
+ * v2: reads source/kind from SessionNote for structured reports.
4
6
  */
7
+ /** Group notes by source and kind. Exported for testability. */
8
+ export function groupNotes(notes) {
9
+ const result = {
10
+ userNotes: [],
11
+ agentNotes: [],
12
+ systemNotes: [],
13
+ tasks: { open: [], done: [] },
14
+ decisions: [],
15
+ warnings: [],
16
+ };
17
+ for (const note of notes) {
18
+ const source = note.source ?? 'user';
19
+ const kind = note.kind ?? 'note';
20
+ // Group by kind (cross-source)
21
+ if (kind === 'task') {
22
+ if (note.taskStatus === 'done') {
23
+ result.tasks.done.push(note);
24
+ }
25
+ else {
26
+ result.tasks.open.push(note);
27
+ }
28
+ }
29
+ else if (kind === 'decision') {
30
+ result.decisions.push(note);
31
+ }
32
+ else if (kind === 'warning') {
33
+ result.warnings.push(note);
34
+ }
35
+ // Group by source (only generic notes — tasks/decisions/warnings already categorised)
36
+ if (kind === 'note') {
37
+ if (source === 'mcp' || source === 'ai') {
38
+ result.agentNotes.push(note);
39
+ }
40
+ else if (source === 'system') {
41
+ result.systemNotes.push(note);
42
+ }
43
+ else {
44
+ result.userNotes.push(note);
45
+ }
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ /** Map note source to actions_taken tool_used value */
51
+ function mapToolUsed(source) {
52
+ switch (source) {
53
+ case 'mcp': return 'mcp-agent';
54
+ case 'ai': return 'ai-agent';
55
+ case 'system': return 'system-auto';
56
+ default: return 'manual';
57
+ }
58
+ }
5
59
  /** Build a complete intervention payload ready for POST /api/v1/maintenance/ */
6
60
  export function buildReportPayload(opts) {
7
61
  const { session } = opts;
8
62
  // Auto-generate title from session if not provided
9
63
  const title = opts.title ?? generateTitle(session);
10
- // Convert notes to actions_taken format
64
+ const grouped = groupNotes(session.notes);
65
+ // Convert notes to actions_taken format (v2: source → tool_used)
11
66
  const actions_taken = session.notes.map(note => ({
12
67
  action: note.text,
13
- tool_used: 'manual',
68
+ tool_used: mapToolUsed(note.source),
14
69
  result: 'success',
15
70
  timestamp: note.timestamp,
16
71
  }));
17
72
  // Auto-generate description from notes if not provided
18
- const description = opts.description ?? generateDescription(session);
73
+ const description = opts.description ?? generateDescription(session, grouped);
74
+ // Build notes_summary (additive, optional field)
75
+ const notes_summary = buildNotesSummary(session.notes, grouped);
19
76
  // Build report_data matching backend schema v1.0
20
77
  const report_data = {
21
78
  findings: [],
@@ -30,6 +87,7 @@ export function buildReportPayload(opts) {
30
87
  git_commit_end: opts.git_commit_end,
31
88
  files_changed: opts.files_changed ?? 0,
32
89
  environment: opts.environment ?? 'local-dev',
90
+ notes_summary,
33
91
  },
34
92
  };
35
93
  return {
@@ -50,7 +108,8 @@ function generateTitle(session) {
50
108
  }
51
109
  return parts.join(' ');
52
110
  }
53
- function generateDescription(session) {
111
+ /** v2: structured description with sections based on source/kind */
112
+ function generateDescription(session, grouped) {
54
113
  const lines = [];
55
114
  lines.push('## Sessione locale');
56
115
  lines.push('');
@@ -60,14 +119,82 @@ function generateDescription(session) {
60
119
  if (session.git_commit_start) {
61
120
  lines.push(`- Commit inizio: ${session.git_commit_start}`);
62
121
  }
63
- if (session.notes.length > 0) {
122
+ // Section: Attività svolte (user notes, kind='note')
123
+ if (grouped.userNotes.length > 0) {
64
124
  lines.push('');
65
- lines.push('## Note');
125
+ lines.push('## Attività svolte');
66
126
  lines.push('');
67
- for (const note of session.notes) {
127
+ for (const note of grouped.userNotes) {
68
128
  lines.push(`- ${note.text}`);
69
129
  }
70
130
  }
131
+ // Section: Task (open + done)
132
+ const hasTasks = grouped.tasks.done.length > 0 || grouped.tasks.open.length > 0;
133
+ if (hasTasks) {
134
+ lines.push('');
135
+ lines.push('## Task');
136
+ lines.push('');
137
+ for (const t of grouped.tasks.done) {
138
+ lines.push(`- [x] ${t.text}`);
139
+ }
140
+ for (const t of grouped.tasks.open) {
141
+ lines.push(`- [ ] ${t.text}`);
142
+ }
143
+ }
144
+ // Section: Decisioni
145
+ if (grouped.decisions.length > 0) {
146
+ lines.push('');
147
+ lines.push('## Decisioni');
148
+ lines.push('');
149
+ for (const d of grouped.decisions) {
150
+ lines.push(`- ${d.text}`);
151
+ }
152
+ }
153
+ // Section: Note automatiche (agent = mcp + ai)
154
+ if (grouped.agentNotes.length > 0) {
155
+ lines.push('');
156
+ lines.push('## Note automatiche');
157
+ lines.push('');
158
+ for (const n of grouped.agentNotes) {
159
+ lines.push(`- ${n.text}`);
160
+ }
161
+ }
162
+ // Section: Avvisi (warnings + system notes)
163
+ const warningsAndSystem = [...grouped.warnings, ...grouped.systemNotes];
164
+ if (warningsAndSystem.length > 0) {
165
+ lines.push('');
166
+ lines.push('## Avvisi');
167
+ lines.push('');
168
+ for (const w of warningsAndSystem) {
169
+ lines.push(`- ${w.text}`);
170
+ }
171
+ }
71
172
  return lines.join('\n');
72
173
  }
174
+ /** Build additive notes_summary for report_data.session */
175
+ function buildNotesSummary(notes, grouped) {
176
+ let userCount = 0;
177
+ let agentCount = 0;
178
+ let systemCount = 0;
179
+ for (const note of notes) {
180
+ const source = note.source ?? 'user';
181
+ if (source === 'mcp' || source === 'ai') {
182
+ agentCount++;
183
+ }
184
+ else if (source === 'system') {
185
+ systemCount++;
186
+ }
187
+ else {
188
+ userCount++;
189
+ }
190
+ }
191
+ return {
192
+ total: notes.length,
193
+ by_source: { user: userCount, agent: agentCount, system: systemCount },
194
+ tasks_open: grouped.tasks.open.length,
195
+ tasks_done: grouped.tasks.done.length,
196
+ decisions: grouped.decisions.length,
197
+ warnings: grouped.warnings.length,
198
+ };
199
+ }
73
200
  //# sourceMappingURL=report-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-builder.js","sourceRoot":"","sources":["../../src/lib/report-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-builder.js","sourceRoot":"","sources":["../../src/lib/report-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * SOURCE OF TRUTH — Session lifecycle orchestration
3
+ *
4
+ * Cuore operativo locale della CLI. Gestisce:
5
+ * - avvio e chiusura sessioni (con cattura git automatica)
6
+ * - aggiunta entry (note, task, decisioni, warning) con source/kind
7
+ * - summary e metriche sessione
8
+ * - storico sessioni completate
9
+ *
10
+ * Usato da:
11
+ * - comandi CLI (shell-commands.ts)
12
+ * - MCP tools (mcp/server.ts)
13
+ *
14
+ * NON dipende da:
15
+ * - UI (chalk, ink, react, shell-render)
16
+ * - backend API (client.ts)
17
+ * - comandi specifici (shell-commands.ts)
18
+ */
19
+ import type { SessionState, SessionNote, SessionSummary, NoteSource, NoteKind } from '../types.js';
20
+ import { type SessionIO } from './session.js';
21
+ import { type GitRunner } from './git.js';
22
+ /** Dependencies — injectable for testing */
23
+ export interface SessionEngineDeps {
24
+ io: SessionIO;
25
+ git: GitRunner;
26
+ }
27
+ /** Input for adding an entry to the active session */
28
+ export interface AddEntryInput {
29
+ text: string;
30
+ source: NoteSource;
31
+ kind: NoteKind;
32
+ priority?: SessionNote['priority'];
33
+ }
34
+ /**
35
+ * Session Engine v2 — orchestrates session lifecycle for a single site.
36
+ *
37
+ * Stateless: every method reads from disk. No in-memory cache.
38
+ * This means multiple consumers (CLI + MCP) can operate concurrently.
39
+ */
40
+ export declare class SessionEngine {
41
+ private readonly siteId;
42
+ private readonly io;
43
+ private readonly git;
44
+ constructor(siteId: string, deps?: SessionEngineDeps);
45
+ /** Start a new session. Captures git branch and commit automatically. */
46
+ startSession(initialNote?: string): Promise<SessionState>;
47
+ /** End the active session. Captures final git commit automatically. */
48
+ endSession(summary?: string): Promise<SessionState>;
49
+ /**
50
+ * Add an entry (note, task, decision, warning) to the active session.
51
+ * Always populates id, source, kind, and timestamp.
52
+ */
53
+ addEntry(input: AddEntryInput): Promise<SessionState>;
54
+ /**
55
+ * Mark a task entry as done.
56
+ * No-op if already done. Throws if entry not found or not a task.
57
+ */
58
+ completeTask(entryId: string): Promise<SessionState>;
59
+ /** Get the active session, or null if none. */
60
+ getActive(): Promise<SessionState | null>;
61
+ /** Compute summary metrics for the active session. Returns null if no active session. */
62
+ getSummary(): Promise<SessionSummary | null>;
63
+ /** List completed sessions, newest first. */
64
+ listHistory(limit?: number): Promise<SessionState[]>;
65
+ }
@@ -0,0 +1,143 @@
1
+ /**
2
+ * SOURCE OF TRUTH — Session lifecycle orchestration
3
+ *
4
+ * Cuore operativo locale della CLI. Gestisce:
5
+ * - avvio e chiusura sessioni (con cattura git automatica)
6
+ * - aggiunta entry (note, task, decisioni, warning) con source/kind
7
+ * - summary e metriche sessione
8
+ * - storico sessioni completate
9
+ *
10
+ * Usato da:
11
+ * - comandi CLI (shell-commands.ts)
12
+ * - MCP tools (mcp/server.ts)
13
+ *
14
+ * NON dipende da:
15
+ * - UI (chalk, ink, react, shell-render)
16
+ * - backend API (client.ts)
17
+ * - comandi specifici (shell-commands.ts)
18
+ */
19
+ import { randomUUID } from 'node:crypto';
20
+ import { join } from 'node:path';
21
+ import { createSession, loadActiveSession, endSession, listCompletedSessions, SESSIONS_DIR, defaultIO, } from './session.js';
22
+ import { getGitBranch, getGitCommitHead, defaultRunner } from './git.js';
23
+ /**
24
+ * Session Engine v2 — orchestrates session lifecycle for a single site.
25
+ *
26
+ * Stateless: every method reads from disk. No in-memory cache.
27
+ * This means multiple consumers (CLI + MCP) can operate concurrently.
28
+ */
29
+ export class SessionEngine {
30
+ siteId;
31
+ io;
32
+ git;
33
+ constructor(siteId, deps) {
34
+ this.siteId = siteId;
35
+ this.io = deps?.io ?? defaultIO;
36
+ this.git = deps?.git ?? defaultRunner;
37
+ }
38
+ /** Start a new session. Captures git branch and commit automatically. */
39
+ async startSession(initialNote) {
40
+ const existing = await loadActiveSession(this.siteId, this.io);
41
+ if (existing) {
42
+ throw new Error(`Sessione gia' attiva: ${existing.id}. Chiudila prima con /session end.`);
43
+ }
44
+ const branch = await getGitBranch(this.git);
45
+ const commit = await getGitCommitHead(this.git);
46
+ return createSession(this.siteId, {
47
+ git_branch: branch ?? undefined,
48
+ git_commit: commit ?? undefined,
49
+ note: initialNote,
50
+ }, this.io);
51
+ }
52
+ /** End the active session. Captures final git commit automatically. */
53
+ async endSession(summary) {
54
+ const active = await loadActiveSession(this.siteId, this.io);
55
+ if (!active) {
56
+ throw new Error('Nessuna sessione attiva da chiudere.');
57
+ }
58
+ const commit = await getGitCommitHead(this.git);
59
+ return endSession(active.id, {
60
+ git_commit_end: commit ?? undefined,
61
+ summary,
62
+ }, this.io);
63
+ }
64
+ /**
65
+ * Add an entry (note, task, decision, warning) to the active session.
66
+ * Always populates id, source, kind, and timestamp.
67
+ */
68
+ async addEntry(input) {
69
+ const active = await loadActiveSession(this.siteId, this.io);
70
+ if (!active) {
71
+ throw new Error('Nessuna sessione attiva. Avviala con /session start.');
72
+ }
73
+ const entry = {
74
+ id: randomUUID().replace(/-/g, '').slice(0, 12),
75
+ text: input.text,
76
+ timestamp: new Date().toISOString(),
77
+ priority: input.priority ?? 'medium',
78
+ source: input.source,
79
+ kind: input.kind,
80
+ taskStatus: input.kind === 'task' ? 'open' : undefined,
81
+ };
82
+ active.notes.push(entry);
83
+ await this.io.write(join(SESSIONS_DIR, `${active.id}.json`), JSON.stringify(active, null, 2));
84
+ return active;
85
+ }
86
+ /**
87
+ * Mark a task entry as done.
88
+ * No-op if already done. Throws if entry not found or not a task.
89
+ */
90
+ async completeTask(entryId) {
91
+ const active = await loadActiveSession(this.siteId, this.io);
92
+ if (!active) {
93
+ throw new Error('Nessuna sessione attiva.');
94
+ }
95
+ const entry = active.notes.find(n => n.id === entryId);
96
+ if (!entry) {
97
+ throw new Error(`Entry non trovato: ${entryId}`);
98
+ }
99
+ if (entry.kind !== 'task') {
100
+ throw new Error(`Entry "${entryId}" non e' un task (kind: ${entry.kind}).`);
101
+ }
102
+ // No-op if already done
103
+ if (entry.taskStatus === 'done') {
104
+ return active;
105
+ }
106
+ entry.taskStatus = 'done';
107
+ await this.io.write(join(SESSIONS_DIR, `${active.id}.json`), JSON.stringify(active, null, 2));
108
+ return active;
109
+ }
110
+ /** Get the active session, or null if none. */
111
+ async getActive() {
112
+ return loadActiveSession(this.siteId, this.io);
113
+ }
114
+ /** Compute summary metrics for the active session. Returns null if no active session. */
115
+ async getSummary() {
116
+ const active = await loadActiveSession(this.siteId, this.io);
117
+ if (!active)
118
+ return null;
119
+ const tasks = active.notes.filter(n => n.kind === 'task');
120
+ const lastNote = active.notes.length > 0
121
+ ? active.notes[active.notes.length - 1]
122
+ : null;
123
+ const startMs = new Date(active.started_at).getTime();
124
+ const endMs = active.ended_at
125
+ ? new Date(active.ended_at).getTime()
126
+ : Date.now();
127
+ return {
128
+ sessionId: active.id,
129
+ status: active.status,
130
+ notesCount: active.notes.length,
131
+ tasksTotal: tasks.length,
132
+ tasksOpen: tasks.filter(t => t.taskStatus === 'open').length,
133
+ tasksDone: tasks.filter(t => t.taskStatus === 'done').length,
134
+ latestActivityAt: lastNote?.timestamp ?? null,
135
+ durationMs: endMs - startMs,
136
+ };
137
+ }
138
+ /** List completed sessions, newest first. */
139
+ async listHistory(limit = 10) {
140
+ return listCompletedSessions(this.siteId, limit, this.io);
141
+ }
142
+ }
143
+ //# sourceMappingURL=session-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-engine.js","sourceRoot":"","sources":["../../src/lib/session-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Session summary formatting — pure functions.
3
+ *
4
+ * Computes display-ready stats from SessionState using groupNotes().
5
+ * No IO, no side effects. Used by shell commands and CLI status.
6
+ */
7
+ import type { SessionState, SessionNote } from '../types.js';
8
+ export interface SessionStats {
9
+ notesTotal: number;
10
+ notesUser: number;
11
+ notesAgent: number;
12
+ tasksOpen: number;
13
+ tasksDone: number;
14
+ decisions: number;
15
+ warnings: number;
16
+ }
17
+ /** Compute flat stats from session notes using groupNotes(). */
18
+ export declare function computeSessionStats(session: SessionState): SessionStats;
19
+ /**
20
+ * Format 0–3 summary lines for cmdStatus / cmdSessionInfo.
21
+ * Each line is pre-indented (5 spaces). Only non-trivial lines are included.
22
+ * Returns empty array if nothing interesting to show (e.g. all-user, no tasks).
23
+ */
24
+ export declare function formatSummaryLines(stats: SessionStats): string[];
25
+ /**
26
+ * Format a one-liner for /info. Returns null if nothing to show.
27
+ * Example: "12 note · 3 task aperti"
28
+ */
29
+ export declare function formatSummaryOneLiner(stats: SessionStats): string | null;
30
+ /**
31
+ * Format a list of open tasks with abbreviated IDs.
32
+ * Returns empty array if no actionable tasks exist.
33
+ * Used by cmdSessionInfo to make tasks discoverable.
34
+ */
35
+ export declare function formatOpenTaskList(notes: SessionNote[]): string[];