agent-orchestrator-mcp-server 0.2.4 → 0.3.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 (32) hide show
  1. package/README.md +125 -30
  2. package/build/index.js +4 -4
  3. package/package.json +1 -1
  4. package/shared/orchestrator-client/orchestrator-client.d.ts +128 -3
  5. package/shared/orchestrator-client/orchestrator-client.integration-mock.js +313 -1
  6. package/shared/orchestrator-client/orchestrator-client.js +205 -0
  7. package/shared/resources.js +9 -4
  8. package/shared/tools/action-health.d.ts +58 -0
  9. package/shared/tools/action-health.js +101 -0
  10. package/shared/tools/action-notification.d.ts +46 -0
  11. package/shared/tools/action-notification.js +99 -0
  12. package/shared/tools/action-session.d.ts +33 -9
  13. package/shared/tools/action-session.js +177 -15
  14. package/shared/tools/action-trigger.d.ts +114 -0
  15. package/shared/tools/action-trigger.js +177 -0
  16. package/shared/tools/get-notifications.d.ts +70 -0
  17. package/shared/tools/get-notifications.js +113 -0
  18. package/shared/tools/get-session.d.ts +8 -0
  19. package/shared/tools/get-session.js +21 -2
  20. package/shared/tools/get-system-health.d.ts +38 -0
  21. package/shared/tools/get-system-health.js +69 -0
  22. package/shared/tools/get-transcript-archive.d.ts +27 -0
  23. package/shared/tools/get-transcript-archive.js +64 -0
  24. package/shared/tools/manage-enqueued-messages.d.ts +94 -0
  25. package/shared/tools/manage-enqueued-messages.js +259 -0
  26. package/shared/tools/search-sessions.d.ts +3 -10
  27. package/shared/tools/search-sessions.js +10 -15
  28. package/shared/tools/search-triggers.d.ts +78 -0
  29. package/shared/tools/search-triggers.js +145 -0
  30. package/shared/tools.d.ts +7 -9
  31. package/shared/tools.js +105 -32
  32. package/shared/types.d.ts +162 -1
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ export const SearchTriggersSchema = z.object({
3
+ id: z.number().optional(),
4
+ trigger_type: z.enum(['slack', 'schedule']).optional(),
5
+ status: z.enum(['enabled', 'disabled']).optional(),
6
+ include_channels: z.boolean().optional(),
7
+ page: z.number().min(1).optional(),
8
+ per_page: z.number().min(1).max(100).optional(),
9
+ });
10
+ const TOOL_DESCRIPTION = `Search and list automation triggers.
11
+
12
+ **Modes:**
13
+ - **Get by ID**: Provide an id to get trigger details with recent sessions
14
+ - **List**: List triggers with optional filters (trigger_type, status, pagination)
15
+ - **Include channels**: Set include_channels=true to also list available Slack channels (useful when creating Slack triggers)
16
+
17
+ **Use cases:**
18
+ - View configured automations (scheduled tasks, Slack integrations)
19
+ - Check trigger status and execution history
20
+ - Discover available Slack channels for new triggers`;
21
+ export function searchTriggersTool(_server, clientFactory) {
22
+ return {
23
+ name: 'search_triggers',
24
+ description: TOOL_DESCRIPTION,
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: {
28
+ id: {
29
+ type: 'number',
30
+ description: 'Get a specific trigger by ID. Returns trigger details with recent sessions.',
31
+ },
32
+ trigger_type: {
33
+ type: 'string',
34
+ enum: ['slack', 'schedule'],
35
+ description: 'Filter by trigger type.',
36
+ },
37
+ status: {
38
+ type: 'string',
39
+ enum: ['enabled', 'disabled'],
40
+ description: 'Filter by status.',
41
+ },
42
+ include_channels: {
43
+ type: 'boolean',
44
+ description: 'Include available Slack channels. Default: false',
45
+ },
46
+ page: { type: 'number', minimum: 1, description: 'Page number. Default: 1' },
47
+ per_page: {
48
+ type: 'number',
49
+ minimum: 1,
50
+ maximum: 100,
51
+ description: 'Results per page. Default: 25',
52
+ },
53
+ },
54
+ required: [],
55
+ },
56
+ handler: async (args) => {
57
+ try {
58
+ const validated = SearchTriggersSchema.parse(args);
59
+ const client = clientFactory();
60
+ if (validated.id) {
61
+ const response = await client.getTrigger(validated.id);
62
+ const t = response.trigger;
63
+ const lines = [
64
+ `## Trigger: ${t.name}`,
65
+ '',
66
+ `- **ID:** ${t.id}`,
67
+ `- **Type:** ${t.trigger_type}`,
68
+ `- **Status:** ${t.status}`,
69
+ `- **Agent Root:** ${t.agent_root_name}`,
70
+ `- **Reuse Session:** ${t.reuse_session ? 'Yes' : 'No'}`,
71
+ `- **MCP Servers:** ${t.mcp_servers.length > 0 ? t.mcp_servers.join(', ') : '(none)'}`,
72
+ ];
73
+ if (t.stop_condition)
74
+ lines.push(`- **Stop Condition:** ${t.stop_condition}`);
75
+ if (t.schedule_description)
76
+ lines.push(`- **Schedule:** ${t.schedule_description}`);
77
+ lines.push(`- **Sessions Created:** ${t.sessions_created_count}`);
78
+ if (t.last_triggered_at)
79
+ lines.push(`- **Last Triggered:** ${t.last_triggered_at}`);
80
+ lines.push('', '### Prompt Template', '```', t.prompt_template, '```');
81
+ if (t.configuration && Object.keys(t.configuration).length > 0) {
82
+ lines.push('', '### Configuration', '```json', JSON.stringify(t.configuration, null, 2), '```');
83
+ }
84
+ if (response.recent_sessions && response.recent_sessions.length > 0) {
85
+ lines.push('', '### Recent Sessions');
86
+ response.recent_sessions.forEach((s) => {
87
+ lines.push(`- **#${s.id}** ${s.title} (${s.status})`);
88
+ });
89
+ }
90
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
91
+ }
92
+ // List triggers
93
+ const response = await client.listTriggers({
94
+ trigger_type: validated.trigger_type,
95
+ status: validated.status,
96
+ page: validated.page,
97
+ per_page: validated.per_page,
98
+ });
99
+ const lines = [];
100
+ if (response.triggers.length === 0) {
101
+ lines.push('## Triggers\n\nNo triggers found.');
102
+ }
103
+ else {
104
+ lines.push(`## Triggers (${response.pagination.total_count} total, page ${response.pagination.page} of ${response.pagination.total_pages})`, '');
105
+ response.triggers.forEach((t) => {
106
+ lines.push(`### ${t.name} (ID: ${t.id})`);
107
+ lines.push(`- **Type:** ${t.trigger_type} | **Status:** ${t.status} | **Sessions:** ${t.sessions_created_count}`);
108
+ if (t.schedule_description)
109
+ lines.push(`- **Schedule:** ${t.schedule_description}`);
110
+ lines.push('');
111
+ });
112
+ }
113
+ if (validated.include_channels) {
114
+ try {
115
+ const channels = await client.getTriggerChannels();
116
+ lines.push('', '## Available Slack Channels', '');
117
+ if (channels.channels.length === 0) {
118
+ lines.push('No Slack channels available.');
119
+ }
120
+ else {
121
+ channels.channels.forEach((ch) => {
122
+ lines.push(`- **#${ch.name}** (${ch.id}) - ${ch.num_members} members${ch.is_private ? ' [private]' : ''}`);
123
+ });
124
+ }
125
+ }
126
+ catch (error) {
127
+ lines.push('', `*Could not fetch Slack channels: ${error instanceof Error ? error.message : 'Unknown error'}*`);
128
+ }
129
+ }
130
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
131
+ }
132
+ catch (error) {
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Error searching triggers: ${error instanceof Error ? error.message : 'Unknown error'}`,
138
+ },
139
+ ],
140
+ isError: true,
141
+ };
142
+ }
143
+ },
144
+ };
145
+ }
package/shared/tools.d.ts CHANGED
@@ -1,15 +1,13 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { ClientFactory } from './server.js';
3
3
  /**
4
- * Available tool groups for agent-orchestrator:
5
- * - 'readonly': Read-only operations (search_sessions, get_session)
6
- * - 'write': Write operations (start_session, action_session)
7
- * - 'admin': Administrative operations (reserved for future use)
4
+ * Available tool groups for agent-orchestrator.
5
+ * Each domain has a base group (full access) and a _readonly variant (read-only).
8
6
  */
9
- export type ToolGroup = 'readonly' | 'write' | 'admin';
7
+ export type ToolGroup = 'sessions' | 'sessions_readonly' | 'notifications' | 'notifications_readonly' | 'triggers' | 'triggers_readonly' | 'health' | 'health_readonly';
10
8
  /**
11
- * Parse enabled tool groups from environment variable.
12
- * @param enabledGroupsParam - Comma-separated list of groups (e.g., "readonly,write")
9
+ * Parse enabled tool groups from environment variable or parameter.
10
+ * @param enabledGroupsParam - Comma-separated list of groups (e.g., "sessions,notifications")
13
11
  * @returns Array of enabled tool groups
14
12
  */
15
13
  export declare function parseEnabledToolGroups(enabledGroupsParam?: string): ToolGroup[];
@@ -21,9 +19,9 @@ export declare function parseEnabledToolGroups(enabledGroupsParam?: string): Too
21
19
  * a factory pattern that accepts the server and clientFactory as parameters.
22
20
  *
23
21
  * @param clientFactory - Factory function that creates client instances
24
- * @param enabledGroups - Optional array of enabled tool groups (defaults to all)
22
+ * @param enabledGroups - Optional string of enabled tool groups (defaults to all)
25
23
  * @returns Function that registers all tools with a server
26
24
  */
27
- export declare function createRegisterTools(clientFactory: ClientFactory, enabledGroups?: ToolGroup[]): (server: Server) => void;
25
+ export declare function createRegisterTools(clientFactory: ClientFactory, enabledGroups?: string): (server: Server) => void;
28
26
  export declare function registerTools(server: Server): void;
29
27
  //# sourceMappingURL=tools.d.ts.map
package/shared/tools.js CHANGED
@@ -1,51 +1,122 @@
1
1
  import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
2
- // Simplified tool surface - 6 tools
3
- import { searchSessionsTool } from './tools/search-sessions.js';
2
+ // 13 tools across 4 domains
3
+ import { quickSearchSessionsTool } from './tools/search-sessions.js';
4
4
  import { startSessionTool } from './tools/start-session.js';
5
5
  import { getSessionTool } from './tools/get-session.js';
6
6
  import { actionSessionTool } from './tools/action-session.js';
7
7
  import { getConfigsTool } from './tools/get-configs.js';
8
+ import { manageEnqueuedMessagesTool } from './tools/manage-enqueued-messages.js';
8
9
  import { sendPushNotificationTool } from './tools/send-push-notification.js';
9
- const ALL_TOOL_GROUPS = ['readonly', 'write', 'admin'];
10
+ import { getNotificationsTool } from './tools/get-notifications.js';
11
+ import { actionNotificationTool } from './tools/action-notification.js';
12
+ import { searchTriggersTool } from './tools/search-triggers.js';
13
+ import { actionTriggerTool } from './tools/action-trigger.js';
14
+ import { getSystemHealthTool } from './tools/get-system-health.js';
15
+ import { actionHealthTool } from './tools/action-health.js';
16
+ import { getTranscriptArchiveTool } from './tools/get-transcript-archive.js';
10
17
  /**
11
- * Parse enabled tool groups from environment variable.
12
- * @param enabledGroupsParam - Comma-separated list of groups (e.g., "readonly,write")
18
+ * All valid tool groups (base groups and their _readonly variants)
19
+ */
20
+ const VALID_TOOL_GROUPS = [
21
+ 'sessions',
22
+ 'sessions_readonly',
23
+ 'notifications',
24
+ 'notifications_readonly',
25
+ 'triggers',
26
+ 'triggers_readonly',
27
+ 'health',
28
+ 'health_readonly',
29
+ ];
30
+ /**
31
+ * Base groups (without _readonly suffix) - used for default "all groups" behavior
32
+ */
33
+ const BASE_TOOL_GROUPS = ['sessions', 'notifications', 'triggers', 'health'];
34
+ /**
35
+ * Parse enabled tool groups from environment variable or parameter.
36
+ * @param enabledGroupsParam - Comma-separated list of groups (e.g., "sessions,notifications")
13
37
  * @returns Array of enabled tool groups
14
38
  */
15
39
  export function parseEnabledToolGroups(enabledGroupsParam) {
16
- if (!enabledGroupsParam) {
17
- return ALL_TOOL_GROUPS; // All groups enabled by default
40
+ const groupsStr = enabledGroupsParam || process.env.TOOL_GROUPS || '';
41
+ if (!groupsStr) {
42
+ // Default: all base groups enabled (full read+write access)
43
+ return [...BASE_TOOL_GROUPS];
18
44
  }
19
- const requestedGroups = enabledGroupsParam.split(',').map((g) => g.trim().toLowerCase());
20
- const validGroups = requestedGroups.filter((g) => ALL_TOOL_GROUPS.includes(g));
21
- if (validGroups.length === 0) {
22
- console.error(`Warning: No valid tool groups found in "${enabledGroupsParam}". Valid groups: ${ALL_TOOL_GROUPS.join(', ')}`);
23
- return ALL_TOOL_GROUPS;
45
+ const groups = groupsStr.split(',').map((g) => g.trim());
46
+ const validGroups = [];
47
+ for (const group of groups) {
48
+ if (VALID_TOOL_GROUPS.includes(group) &&
49
+ !validGroups.includes(group)) {
50
+ validGroups.push(group);
51
+ }
52
+ else if (!VALID_TOOL_GROUPS.includes(group)) {
53
+ console.warn(`Unknown tool group: ${group}`);
54
+ }
24
55
  }
25
56
  return validGroups;
26
57
  }
27
58
  /**
28
59
  * All available tools with their group assignments.
29
- * Tools can belong to multiple groups.
30
60
  *
31
- * Simplified tool surface:
32
- * - search_sessions: Search/list/get sessions by ID
33
- * - start_session: Create a new session
34
- * - get_session: Get detailed session info with optional logs/transcripts
35
- * - action_session: Perform actions (follow_up, pause, restart, archive, unarchive)
36
- * - get_configs: Fetch all static configuration (MCP servers, agent roots, stop conditions)
37
- * - send_push_notification: Send a push notification about a session needing attention
61
+ * 14 tools across 4 domains:
62
+ * - quick_search_sessions: Quick title-based search/list/get sessions by ID (sessions, read)
63
+ * - get_session: Get detailed session info with optional logs/transcripts (sessions, read)
64
+ * - get_configs: Fetch all static configuration (sessions, read)
65
+ * - get_transcript_archive: Get transcript archive download URL and metadata (sessions, read)
66
+ * - start_session: Create a new session (sessions, write)
67
+ * - action_session: Perform session actions (sessions, write)
68
+ * - manage_enqueued_messages: Manage session message queue (sessions, write)
69
+ * - get_notifications: Get/list notifications and badge count (notifications, read)
70
+ * - send_push_notification: Send a push notification (notifications, write)
71
+ * - action_notification: Mark read, dismiss notifications (notifications, write)
72
+ * - search_triggers: Search/list automation triggers (triggers, read)
73
+ * - action_trigger: Create, update, delete, toggle triggers (triggers, write)
74
+ * - get_system_health: Get system health report and CLI status (health, read)
75
+ * - action_health: System maintenance actions (health, write)
38
76
  */
39
77
  const ALL_TOOLS = [
40
- // Read operations
41
- { factory: searchSessionsTool, groups: ['readonly', 'write', 'admin'] },
42
- { factory: getSessionTool, groups: ['readonly', 'write', 'admin'] },
43
- { factory: getConfigsTool, groups: ['readonly', 'write', 'admin'] },
44
- // Write operations
45
- { factory: startSessionTool, groups: ['write', 'admin'] },
46
- { factory: actionSessionTool, groups: ['write', 'admin'] },
47
- { factory: sendPushNotificationTool, groups: ['write', 'admin'] },
78
+ // Session tools - read operations
79
+ { factory: quickSearchSessionsTool, group: 'sessions', isWriteOperation: false },
80
+ { factory: getSessionTool, group: 'sessions', isWriteOperation: false },
81
+ { factory: getConfigsTool, group: 'sessions', isWriteOperation: false },
82
+ { factory: getTranscriptArchiveTool, group: 'sessions', isWriteOperation: false },
83
+ // Session tools - write operations
84
+ { factory: startSessionTool, group: 'sessions', isWriteOperation: true },
85
+ { factory: actionSessionTool, group: 'sessions', isWriteOperation: true },
86
+ { factory: manageEnqueuedMessagesTool, group: 'sessions', isWriteOperation: true },
87
+ // Notification tools - read operations
88
+ { factory: getNotificationsTool, group: 'notifications', isWriteOperation: false },
89
+ // Notification tools - write operations
90
+ { factory: sendPushNotificationTool, group: 'notifications', isWriteOperation: true },
91
+ { factory: actionNotificationTool, group: 'notifications', isWriteOperation: true },
92
+ // Trigger tools - read operations
93
+ { factory: searchTriggersTool, group: 'triggers', isWriteOperation: false },
94
+ // Trigger tools - write operations
95
+ { factory: actionTriggerTool, group: 'triggers', isWriteOperation: true },
96
+ // Health tools - read operations
97
+ { factory: getSystemHealthTool, group: 'health', isWriteOperation: false },
98
+ // Health tools - write operations
99
+ { factory: actionHealthTool, group: 'health', isWriteOperation: true },
48
100
  ];
101
+ /**
102
+ * Check if a tool should be included based on enabled groups.
103
+ * @param toolDef - The tool definition to check
104
+ * @param enabledGroups - Array of enabled tool groups
105
+ * @returns true if the tool should be included
106
+ */
107
+ function shouldIncludeTool(toolDef, enabledGroups) {
108
+ const baseGroup = toolDef.group;
109
+ const readonlyGroup = `${baseGroup}_readonly`;
110
+ // Check if the base group (full access) is enabled
111
+ if (enabledGroups.includes(baseGroup)) {
112
+ return true;
113
+ }
114
+ // Check if the readonly group is enabled (only include read operations)
115
+ if (enabledGroups.includes(readonlyGroup) && !toolDef.isWriteOperation) {
116
+ return true;
117
+ }
118
+ return false;
119
+ }
49
120
  /**
50
121
  * Creates a function to register all tools with the server.
51
122
  * This pattern uses individual tool files for better modularity and testability.
@@ -54,14 +125,16 @@ const ALL_TOOLS = [
54
125
  * a factory pattern that accepts the server and clientFactory as parameters.
55
126
  *
56
127
  * @param clientFactory - Factory function that creates client instances
57
- * @param enabledGroups - Optional array of enabled tool groups (defaults to all)
128
+ * @param enabledGroups - Optional string of enabled tool groups (defaults to all)
58
129
  * @returns Function that registers all tools with a server
59
130
  */
60
131
  export function createRegisterTools(clientFactory, enabledGroups) {
61
- const groups = enabledGroups || parseEnabledToolGroups(process.env.ENABLED_TOOLGROUPS);
62
132
  return (server) => {
63
- // Filter tools by enabled groups and create instances
64
- const tools = ALL_TOOLS.filter((def) => def.groups.some((g) => groups.includes(g))).map((def) => def.factory(server, clientFactory));
133
+ const enabledToolGroups = parseEnabledToolGroups(enabledGroups);
134
+ // Filter tools based on enabled groups
135
+ const enabledTools = ALL_TOOLS.filter((toolDef) => shouldIncludeTool(toolDef, enabledToolGroups));
136
+ // Create tool instances
137
+ const tools = enabledTools.map((toolDef) => toolDef.factory(server, clientFactory));
65
138
  // List available tools
66
139
  server.setRequestHandler(ListToolsRequestSchema, async () => {
67
140
  return {
package/shared/types.d.ts CHANGED
@@ -68,7 +68,6 @@ export interface SessionsResponse {
68
68
  }
69
69
  export interface SearchSessionsResponse {
70
70
  query: string;
71
- search_contents: boolean;
72
71
  sessions: Session[];
73
72
  pagination: Pagination;
74
73
  }
@@ -186,4 +185,166 @@ export interface UpdateSubagentTranscriptRequest {
186
185
  total_tokens?: number;
187
186
  tool_use_count?: number;
188
187
  }
188
+ export type EnqueuedMessageStatus = 'pending' | 'processing' | 'sent';
189
+ export interface EnqueuedMessage {
190
+ id: number;
191
+ session_id: number;
192
+ content: string;
193
+ stop_condition: string | null;
194
+ position: number;
195
+ status: EnqueuedMessageStatus;
196
+ created_at: string;
197
+ updated_at: string;
198
+ }
199
+ export interface EnqueuedMessagesResponse {
200
+ enqueued_messages: EnqueuedMessage[];
201
+ pagination: Pagination;
202
+ }
203
+ export interface EnqueuedMessageResponse {
204
+ enqueued_message: EnqueuedMessage;
205
+ }
206
+ export interface EnqueuedMessageInterruptResponse {
207
+ session: Session;
208
+ message: string;
209
+ }
210
+ export type TriggerType = 'slack' | 'schedule';
211
+ export type TriggerStatus = 'enabled' | 'disabled';
212
+ export interface Trigger {
213
+ id: number;
214
+ name: string;
215
+ trigger_type: TriggerType;
216
+ status: TriggerStatus;
217
+ agent_root_name: string;
218
+ prompt_template: string;
219
+ stop_condition: string | null;
220
+ reuse_session: boolean;
221
+ mcp_servers: string[];
222
+ configuration: Record<string, unknown>;
223
+ schedule_description: string | null;
224
+ last_session_id: number | null;
225
+ last_triggered_at: string | null;
226
+ last_polled_at: string | null;
227
+ sessions_created_count: number;
228
+ created_at: string;
229
+ updated_at: string;
230
+ }
231
+ export interface TriggersResponse {
232
+ triggers: Trigger[];
233
+ pagination: Pagination;
234
+ }
235
+ export interface TriggerResponse {
236
+ trigger: Trigger;
237
+ recent_sessions?: Session[];
238
+ }
239
+ export interface TriggerChannelsResponse {
240
+ channels: Array<{
241
+ id: string;
242
+ name: string;
243
+ is_private: boolean;
244
+ num_members: number;
245
+ }>;
246
+ }
247
+ export interface CreateTriggerRequest {
248
+ name: string;
249
+ trigger_type: TriggerType;
250
+ agent_root_name: string;
251
+ prompt_template: string;
252
+ status?: TriggerStatus;
253
+ stop_condition?: string;
254
+ reuse_session?: boolean;
255
+ mcp_servers?: string[];
256
+ configuration?: Record<string, unknown>;
257
+ }
258
+ export interface UpdateTriggerRequest {
259
+ name?: string;
260
+ trigger_type?: TriggerType;
261
+ agent_root_name?: string;
262
+ prompt_template?: string;
263
+ status?: TriggerStatus;
264
+ stop_condition?: string;
265
+ reuse_session?: boolean;
266
+ mcp_servers?: string[];
267
+ configuration?: Record<string, unknown>;
268
+ }
269
+ export interface Notification {
270
+ id: number;
271
+ session_id: number;
272
+ notification_type: string;
273
+ read: boolean;
274
+ stale: boolean;
275
+ created_at: string;
276
+ updated_at: string;
277
+ session?: {
278
+ id: number;
279
+ slug: string | null;
280
+ title: string;
281
+ status: string;
282
+ };
283
+ }
284
+ export interface NotificationsResponse {
285
+ notifications: Notification[];
286
+ pagination: Pagination;
287
+ }
288
+ export interface NotificationResponse {
289
+ notification: Notification;
290
+ }
291
+ export interface NotificationBadgeResponse {
292
+ pending_count: number;
293
+ }
294
+ export interface NotificationMarkAllReadResponse {
295
+ marked_count: number;
296
+ pending_count: number;
297
+ }
298
+ export interface NotificationDismissAllReadResponse {
299
+ dismissed_count: number;
300
+ pending_count: number;
301
+ }
302
+ export interface HealthReport {
303
+ health_report: Record<string, unknown>;
304
+ timestamp: string;
305
+ rails_env: string;
306
+ ruby_version: string;
307
+ }
308
+ export interface HealthActionResponse {
309
+ [key: string]: unknown;
310
+ }
311
+ export interface CliStatusResponse {
312
+ cli_status: Record<string, unknown>;
313
+ unauthenticated_count: number;
314
+ }
315
+ export interface CliActionResponse {
316
+ queued: boolean;
317
+ message: string;
318
+ [key: string]: unknown;
319
+ }
320
+ export interface ForkSessionResponse {
321
+ session: Session;
322
+ message: string;
323
+ }
324
+ export interface RefreshSessionResponse {
325
+ session: Session;
326
+ message: string;
327
+ }
328
+ export interface RefreshAllSessionsResponse {
329
+ message: string;
330
+ refreshed: number;
331
+ restarted: number;
332
+ continued: number;
333
+ errors: number;
334
+ }
335
+ export interface BulkArchiveResponse {
336
+ archived_count: number;
337
+ errors: Array<{
338
+ id: number;
339
+ error: string;
340
+ }>;
341
+ }
342
+ export interface TranscriptResponse {
343
+ transcript_text: string;
344
+ }
345
+ export interface TranscriptArchiveStatusResponse {
346
+ generated_at: string;
347
+ session_count: number;
348
+ file_size_bytes: number;
349
+ }
189
350
  //# sourceMappingURL=types.d.ts.map