@cereworker/core 0.2.0 → 0.5.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.
@@ -0,0 +1,20 @@
1
+ import type { Message } from './types.js';
2
+ /**
3
+ * Estimate token count using chars/4 heuristic with a 1.2x safety margin.
4
+ * Avoids tiktoken dependency — same approach as OpenClaw.
5
+ */
6
+ export declare function estimateTokens(text: string): number;
7
+ /**
8
+ * Estimate total tokens across an array of messages.
9
+ */
10
+ export declare function estimateMessageTokens(messages: Message[]): number;
11
+ /**
12
+ * Check if the conversation should be compacted.
13
+ * Returns true when estimated tokens exceed threshold * contextWindow.
14
+ */
15
+ export declare function shouldCompact(messages: Message[], contextWindow: number, threshold?: number): boolean;
16
+ /**
17
+ * Build the compacted message array: a system summary + the most recent messages.
18
+ */
19
+ export declare function buildCompactionMessages(messages: Message[], summary: string, keepRecent: number): Message[];
20
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAQjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,SAAS,SAAM,GACd,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,EAAE,CAYX"}
@@ -0,0 +1,45 @@
1
+ const SAFETY_MARGIN = 1.2;
2
+ /**
3
+ * Estimate token count using chars/4 heuristic with a 1.2x safety margin.
4
+ * Avoids tiktoken dependency — same approach as OpenClaw.
5
+ */
6
+ export function estimateTokens(text) {
7
+ return Math.ceil((text.length / 4) * SAFETY_MARGIN);
8
+ }
9
+ /**
10
+ * Estimate total tokens across an array of messages.
11
+ */
12
+ export function estimateMessageTokens(messages) {
13
+ let total = 0;
14
+ for (const msg of messages) {
15
+ total += estimateTokens(msg.content);
16
+ // Account for role/metadata overhead (~4 tokens per message)
17
+ total += 4;
18
+ }
19
+ return total;
20
+ }
21
+ /**
22
+ * Check if the conversation should be compacted.
23
+ * Returns true when estimated tokens exceed threshold * contextWindow.
24
+ */
25
+ export function shouldCompact(messages, contextWindow, threshold = 0.8) {
26
+ if (messages.length <= 1)
27
+ return false;
28
+ const tokens = estimateMessageTokens(messages);
29
+ return tokens > contextWindow * threshold;
30
+ }
31
+ /**
32
+ * Build the compacted message array: a system summary + the most recent messages.
33
+ */
34
+ export function buildCompactionMessages(messages, summary, keepRecent) {
35
+ const recentStart = Math.max(0, messages.length - keepRecent);
36
+ const recentMessages = messages.slice(recentStart);
37
+ const summaryMessage = {
38
+ id: 'compaction-summary',
39
+ role: 'system',
40
+ content: `[Previous conversation summary]\n${summary}`,
41
+ timestamp: recentMessages[0]?.timestamp ?? Date.now(),
42
+ };
43
+ return [summaryMessage, ...recentMessages];
44
+ }
45
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmB;IACvD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,6DAA6D;QAC7D,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAmB,EACnB,aAAqB,EACrB,SAAS,GAAG,GAAG;IAEf,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAmB,EACnB,OAAe,EACf,UAAkB;IAElB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAY;QAC9B,EAAE,EAAE,oBAAoB;QACxB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oCAAoC,OAAO,EAAE;QACtD,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KACtD,CAAC;IAEF,OAAO,CAAC,cAAc,EAAE,GAAG,cAAc,CAAC,CAAC;AAC7C,CAAC"}
@@ -1,11 +1,16 @@
1
1
  import type { Conversation, Message, MessageRole } from './types.js';
2
2
  export declare class ConversationStore {
3
- private conversations;
3
+ private db;
4
+ constructor(dbPath?: string);
5
+ private ensureSchema;
4
6
  create(): Conversation;
5
7
  get(id: string): Conversation | undefined;
6
8
  list(): Conversation[];
7
9
  appendMessage(conversationId: string, role: MessageRole, content: string, extra?: Partial<Message>): Message;
8
10
  getMessages(conversationId: string): Message[];
9
11
  delete(id: string): boolean;
12
+ /** Get the most recent message content from a conversation (for list previews) */
13
+ getPreview(conversationId: string): string | null;
14
+ close(): void;
10
15
  }
11
16
  //# sourceMappingURL=conversation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAmC;IAExD,MAAM,IAAI,YAAY;IAYtB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,IAAI,IAAI,YAAY,EAAE;IAItB,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAiB5G,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,EAAE;IAI9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAG5B"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4BrE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,CAAC,EAAE,MAAM;IAc3B,OAAO,CAAC,YAAY;IAyBpB,MAAM,IAAI,YAAY;IAiBtB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAezC,IAAI,IAAI,YAAY,EAAE;IAatB,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAsC5G,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,EAAE;IA2B9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS3B,kFAAkF;IAClF,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYjD,KAAK,IAAI,IAAI;CAGd"}
@@ -1,6 +1,54 @@
1
1
  import { nanoid } from 'nanoid';
2
+ import { existsSync, mkdirSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { createRequire } from 'node:module';
6
+ import { createLogger } from './logger.js';
7
+ const log = createLogger('conversation');
8
+ const require = createRequire(import.meta.url);
9
+ function openDb(dbPath) {
10
+ const Database = require('better-sqlite3');
11
+ return new Database(dbPath);
12
+ }
13
+ const DEFAULT_DB_PATH = join(homedir(), '.cereworker', 'conversations.db');
2
14
  export class ConversationStore {
3
- conversations = new Map();
15
+ db;
16
+ constructor(dbPath) {
17
+ const path = dbPath ?? DEFAULT_DB_PATH;
18
+ const dir = dirname(path);
19
+ if (!existsSync(dir)) {
20
+ mkdirSync(dir, { recursive: true });
21
+ }
22
+ this.db = openDb(path);
23
+ this.db.pragma('journal_mode = WAL');
24
+ this.db.pragma('foreign_keys = ON');
25
+ this.ensureSchema();
26
+ log.info('Opened conversation database', { path });
27
+ }
28
+ ensureSchema() {
29
+ this.db.exec(`
30
+ CREATE TABLE IF NOT EXISTS conversations (
31
+ id TEXT PRIMARY KEY,
32
+ createdAt INTEGER NOT NULL,
33
+ updatedAt INTEGER NOT NULL
34
+ );
35
+
36
+ CREATE TABLE IF NOT EXISTS messages (
37
+ id TEXT PRIMARY KEY,
38
+ conversationId TEXT NOT NULL,
39
+ role TEXT NOT NULL,
40
+ content TEXT NOT NULL,
41
+ timestamp INTEGER NOT NULL,
42
+ toolCalls TEXT,
43
+ toolResult TEXT,
44
+ metadata TEXT,
45
+ FOREIGN KEY (conversationId) REFERENCES conversations(id) ON DELETE CASCADE
46
+ );
47
+
48
+ CREATE INDEX IF NOT EXISTS idx_messages_conversation
49
+ ON messages(conversationId, timestamp);
50
+ `);
51
+ }
4
52
  create() {
5
53
  const now = Date.now();
6
54
  const conversation = {
@@ -9,18 +57,41 @@ export class ConversationStore {
9
57
  createdAt: now,
10
58
  updatedAt: now,
11
59
  };
12
- this.conversations.set(conversation.id, conversation);
60
+ this.db
61
+ .prepare('INSERT INTO conversations (id, createdAt, updatedAt) VALUES (?, ?, ?)')
62
+ .run(conversation.id, now, now);
63
+ log.debug('Created conversation', { id: conversation.id });
13
64
  return conversation;
14
65
  }
15
66
  get(id) {
16
- return this.conversations.get(id);
67
+ const row = this.db
68
+ .prepare('SELECT id, createdAt, updatedAt FROM conversations WHERE id = ?')
69
+ .get(id);
70
+ if (!row)
71
+ return undefined;
72
+ return {
73
+ id: row.id,
74
+ messages: this.getMessages(id),
75
+ createdAt: row.createdAt,
76
+ updatedAt: row.updatedAt,
77
+ };
17
78
  }
18
79
  list() {
19
- return Array.from(this.conversations.values()).sort((a, b) => b.updatedAt - a.updatedAt);
80
+ const rows = this.db
81
+ .prepare('SELECT id, createdAt, updatedAt FROM conversations ORDER BY updatedAt DESC')
82
+ .all();
83
+ return rows.map((row) => ({
84
+ id: row.id,
85
+ messages: [], // Don't load messages for list view
86
+ createdAt: row.createdAt,
87
+ updatedAt: row.updatedAt,
88
+ }));
20
89
  }
21
90
  appendMessage(conversationId, role, content, extra) {
22
- const conversation = this.conversations.get(conversationId);
23
- if (!conversation)
91
+ const row = this.db
92
+ .prepare('SELECT id FROM conversations WHERE id = ?')
93
+ .get(conversationId);
94
+ if (!row)
24
95
  throw new Error(`Conversation ${conversationId} not found`);
25
96
  const message = {
26
97
  id: nanoid(),
@@ -29,15 +100,48 @@ export class ConversationStore {
29
100
  timestamp: Date.now(),
30
101
  ...extra,
31
102
  };
32
- conversation.messages.push(message);
33
- conversation.updatedAt = Date.now();
103
+ this.db
104
+ .prepare(`INSERT INTO messages (id, conversationId, role, content, timestamp, toolCalls, toolResult, metadata)
105
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
106
+ .run(message.id, conversationId, message.role, message.content, message.timestamp, message.toolCalls ? JSON.stringify(message.toolCalls) : null, message.toolResult ? JSON.stringify(message.toolResult) : null, message.metadata ? JSON.stringify(message.metadata) : null);
107
+ this.db
108
+ .prepare('UPDATE conversations SET updatedAt = ? WHERE id = ?')
109
+ .run(Date.now(), conversationId);
34
110
  return message;
35
111
  }
36
112
  getMessages(conversationId) {
37
- return this.conversations.get(conversationId)?.messages ?? [];
113
+ const rows = this.db
114
+ .prepare(`SELECT id, role, content, timestamp, toolCalls, toolResult, metadata
115
+ FROM messages WHERE conversationId = ? ORDER BY timestamp`)
116
+ .all(conversationId);
117
+ return rows.map((row) => ({
118
+ id: row.id,
119
+ role: row.role,
120
+ content: row.content,
121
+ timestamp: row.timestamp,
122
+ ...(row.toolCalls ? { toolCalls: JSON.parse(row.toolCalls) } : {}),
123
+ ...(row.toolResult ? { toolResult: JSON.parse(row.toolResult) } : {}),
124
+ ...(row.metadata ? { metadata: JSON.parse(row.metadata) } : {}),
125
+ }));
38
126
  }
39
127
  delete(id) {
40
- return this.conversations.delete(id);
128
+ const result = this.db
129
+ .prepare('DELETE FROM conversations WHERE id = ?')
130
+ .run(id);
131
+ log.debug('Deleted conversation', { id, deleted: result.changes > 0 });
132
+ return result.changes > 0;
133
+ }
134
+ /** Get the most recent message content from a conversation (for list previews) */
135
+ getPreview(conversationId) {
136
+ const row = this.db
137
+ .prepare(`SELECT content FROM messages
138
+ WHERE conversationId = ? AND role = 'user'
139
+ ORDER BY timestamp ASC LIMIT 1`)
140
+ .get(conversationId);
141
+ return row?.content ?? null;
142
+ }
143
+ close() {
144
+ this.db.close();
41
145
  }
42
146
  }
43
147
  //# sourceMappingURL=conversation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,OAAO,iBAAiB;IACpB,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAExD,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,YAAY,GAAiB;YACjC,EAAE,EAAE,MAAM,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACtD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3F,CAAC;IAED,aAAa,CAAC,cAAsB,EAAE,IAAiB,EAAE,OAAe,EAAE,KAAwB;QAChG,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,cAAc,YAAY,CAAC,CAAC;QAE/E,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,MAAM,EAAE;YACZ,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,KAAK;SACT,CAAC;QAEF,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,cAAsB;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
package/dist/events.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Message, ToolCall, ToolResult, TaskAction, CerebellumStatus } from './types.js';
1
+ import type { Message, ToolCall, ToolResult, TaskAction, CerebellumStatus, VerificationResult, AgentHealthAction } from './types.js';
2
2
  export type OrchestratorEvent = {
3
3
  type: 'message:user';
4
4
  message: Message;
@@ -21,12 +21,43 @@ export type OrchestratorEvent = {
21
21
  } | {
22
22
  type: 'tool:end';
23
23
  result: ToolResult;
24
+ } | {
25
+ type: 'verification:start';
26
+ callId: string;
27
+ toolName: string;
28
+ } | {
29
+ type: 'verification:end';
30
+ result: VerificationResult;
24
31
  } | {
25
32
  type: 'heartbeat:tick';
26
33
  actions: TaskAction[];
27
34
  } | {
28
35
  type: 'cerebellum:status';
29
36
  status: CerebellumStatus;
37
+ } | {
38
+ type: 'agent:spawned';
39
+ agentId: string;
40
+ task: string;
41
+ } | {
42
+ type: 'agent:completed';
43
+ agentId: string;
44
+ result: string;
45
+ } | {
46
+ type: 'agent:failed';
47
+ agentId: string;
48
+ error: string;
49
+ } | {
50
+ type: 'agent:health';
51
+ actions: AgentHealthAction[];
52
+ } | {
53
+ type: 'exec:approval-required';
54
+ command: string;
55
+ } | {
56
+ type: 'exec:blocked';
57
+ command: string;
58
+ reason: string;
59
+ } | {
60
+ type: 'emergency:stop';
30
61
  } | {
31
62
  type: 'error';
32
63
  error: Error;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE1C,KAAK,QAAQ,GAAG;KACb,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAC1E,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA2D;IAE3E,EAAE,CAAC,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAYhG,IAAI,CAAC,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IASnE,kBAAkB,IAAI,IAAI;CAG3B"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErI,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE1C,KAAK,QAAQ,GAAG;KACb,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAC1E,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA2D;IAE3E,EAAE,CAAC,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAYhG,IAAI,CAAC,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IASnE,kBAAkB,IAAI,IAAI;CAG3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,iBAAiB;IACpB,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;IAE3E,EAAE,CAAsC,IAAO,EAAE,OAAkC;QACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,YAAY,GAAG,OAA0C,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE3C,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAsC,KAAkB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,iBAAiB;IACpB,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;IAE3E,EAAE,CAAsC,IAAO,EAAE,OAAkC;QACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,YAAY,GAAG,OAA0C,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE3C,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAsC,KAAkB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,13 @@
1
- export type { Message, MessageRole, ToolCall, ToolResult, Conversation, TaskAction, CerebellumStatus, OrchestratorConfig, } from './types.js';
1
+ export type { Message, MessageRole, ToolCall, ToolResult, Conversation, TaskAction, CerebellumStatus, OrchestratorConfig, VerificationResult, VerificationCheck, SubAgentState, SubAgentStatus, SubAgentCleanup, SubAgentSummary, AgentHealthAction, SystemStatus, } from './types.js';
2
2
  export type { OrchestratorEvent } from './events.js';
3
3
  export { TypedEventEmitter } from './events.js';
4
4
  export { ConversationStore } from './conversation.js';
5
5
  export { Orchestrator } from './orchestrator.js';
6
+ export { createLogger, configureLogger } from './logger.js';
7
+ export type { Logger, LogLevel } from './logger.js';
8
+ export type { CerebrumAdapter, CerebellumAdapter, ToolDefinition, StreamCallbacks, OrchestratorOptions, CompactionConfig } from './orchestrator.js';
9
+ export { SubAgentManager } from './sub-agent-manager.js';
10
+ export type { SubAgentManagerOptions } from './sub-agent-manager.js';
11
+ export { createSubAgentTools } from './sub-agent-tools.js';
12
+ export { estimateTokens, estimateMessageTokens, shouldCompact, buildCompactionMessages, } from './context.js';
6
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpJ,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,8 @@
1
1
  export { TypedEventEmitter } from './events.js';
2
2
  export { ConversationStore } from './conversation.js';
3
3
  export { Orchestrator } from './orchestrator.js';
4
+ export { createLogger, configureLogger } from './logger.js';
5
+ export { SubAgentManager } from './sub-agent-manager.js';
6
+ export { createSubAgentTools } from './sub-agent-tools.js';
7
+ export { estimateTokens, estimateMessageTokens, shouldCompact, buildCompactionMessages, } from './context.js';
4
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
+ export interface Logger {
3
+ debug(msg: string, data?: Record<string, unknown>): void;
4
+ info(msg: string, data?: Record<string, unknown>): void;
5
+ warn(msg: string, data?: Record<string, unknown>): void;
6
+ error(msg: string, data?: Record<string, unknown>): void;
7
+ child(name: string): Logger;
8
+ }
9
+ export declare function configureLogger(options: {
10
+ level?: LogLevel;
11
+ file?: string;
12
+ }): void;
13
+ export declare function createLogger(name: string): Logger;
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASlF;AAwBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD"}
package/dist/logger.js ADDED
@@ -0,0 +1,50 @@
1
+ const LOG_LEVELS = {
2
+ debug: 0,
3
+ info: 1,
4
+ warn: 2,
5
+ error: 3,
6
+ };
7
+ let globalLevel = 'info';
8
+ let logFile;
9
+ let writeStream = null;
10
+ export function configureLogger(options) {
11
+ if (options.level)
12
+ globalLevel = options.level;
13
+ if (options.file) {
14
+ logFile = options.file;
15
+ // Lazy import to avoid top-level side effects
16
+ import('node:fs').then(({ createWriteStream }) => {
17
+ writeStream = createWriteStream(logFile, { flags: 'a' });
18
+ });
19
+ }
20
+ }
21
+ function formatEntry(level, name, msg, data) {
22
+ const ts = new Date().toISOString();
23
+ const base = { ts, level, name, msg, ...data };
24
+ return JSON.stringify(base);
25
+ }
26
+ function shouldLog(level) {
27
+ return LOG_LEVELS[level] >= LOG_LEVELS[globalLevel];
28
+ }
29
+ function writeLog(level, name, msg, data) {
30
+ if (!shouldLog(level))
31
+ return;
32
+ const entry = formatEntry(level, name, msg, data);
33
+ if (writeStream) {
34
+ writeStream.write(entry + '\n');
35
+ }
36
+ // Also write to stderr for warn/error (won't interfere with TUI on stdout)
37
+ if (level === 'error' || level === 'warn') {
38
+ process.stderr.write(entry + '\n');
39
+ }
40
+ }
41
+ export function createLogger(name) {
42
+ return {
43
+ debug: (msg, data) => writeLog('debug', name, msg, data),
44
+ info: (msg, data) => writeLog('info', name, msg, data),
45
+ warn: (msg, data) => writeLog('warn', name, msg, data),
46
+ error: (msg, data) => writeLog('error', name, msg, data),
47
+ child: (childName) => createLogger(`${name}:${childName}`),
48
+ };
49
+ }
50
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAUF,IAAI,WAAW,GAAa,MAAM,CAAC;AACnC,IAAI,OAA2B,CAAC;AAChC,IAAI,WAAW,GAAsC,IAAI,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,OAA4C;IAC1E,IAAI,OAAO,CAAC,KAAK;QAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,8CAA8C;QAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE;YAC/C,WAAW,GAAG,iBAAiB,CAAC,OAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAe,EAAE,IAAY,EAAE,GAAW,EAAE,IAA8B;IAC7F,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,IAAY,EAAE,GAAW,EAAE,IAA8B;IAC1F,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,2EAA2E;IAC3E,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;QACxD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;QACtD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;QACtD,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;QACxD,KAAK,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import { TypedEventEmitter } from './events.js';
2
- import type { Message, ToolCall, ToolResult } from './types.js';
2
+ import { ConversationStore } from './conversation.js';
3
+ import { SubAgentManager } from './sub-agent-manager.js';
4
+ import type { Message, ToolCall, ToolResult, AgentHealthAction } from './types.js';
3
5
  export interface CerebrumAdapter {
4
6
  stream(messages: Message[], tools: Record<string, ToolDefinition>, callbacks: StreamCallbacks): Promise<void>;
7
+ summarize?(messages: Message[]): Promise<string>;
5
8
  }
6
9
  export interface ToolDefinition {
7
10
  description: string;
@@ -14,20 +17,83 @@ export interface StreamCallbacks {
14
17
  onFinish: (content: string) => void;
15
18
  onError: (error: Error) => void;
16
19
  }
20
+ export interface CerebellumAdapter {
21
+ isConnected(): boolean;
22
+ verifyToolResult(toolName: string, toolArgs: Record<string, string>, toolOutput: string, claimedSuccess: boolean): Promise<{
23
+ passed: boolean;
24
+ checks: Array<{
25
+ name: string;
26
+ passed: boolean;
27
+ description: string;
28
+ }>;
29
+ modelVerdict: boolean;
30
+ } | null>;
31
+ reportAgentStates?(agents: Array<{
32
+ id: string;
33
+ task: string;
34
+ status: string;
35
+ spawnedAt: number;
36
+ lastActivityAt: number;
37
+ timeoutMs: number;
38
+ messagesCount: number;
39
+ toolCallsCount: number;
40
+ retryCount: number;
41
+ }>): Promise<AgentHealthAction[]>;
42
+ }
43
+ export interface CompactionConfig {
44
+ enabled: boolean;
45
+ threshold: number;
46
+ keepRecentMessages: number;
47
+ contextWindow: number;
48
+ }
49
+ export interface OrchestratorOptions {
50
+ conversationStore?: ConversationStore;
51
+ compaction?: Partial<CompactionConfig>;
52
+ }
17
53
  export declare class Orchestrator extends TypedEventEmitter {
18
54
  private conversations;
19
55
  private cerebrum;
56
+ private cerebellum;
57
+ private subAgentManager;
20
58
  private tools;
21
59
  private activeConversationId;
22
- constructor();
60
+ private systemContext;
61
+ private verificationEnabled;
62
+ private verificationTimeoutMs;
63
+ private monitorIntervalMs;
64
+ private monitorTimer;
65
+ private abortController;
66
+ private autoMode;
67
+ private compactionConfig;
68
+ constructor(options?: OrchestratorOptions);
23
69
  setCerebrum(cerebrum: CerebrumAdapter): void;
70
+ setCerebellum(cerebellum: CerebellumAdapter, options?: {
71
+ enabled?: boolean;
72
+ timeoutMs?: number;
73
+ }): void;
74
+ /** Set system context (e.g. skills prompt) prepended to every Cerebrum call */
75
+ setSystemContext(context: string): void;
76
+ getSystemContext(): string | null;
77
+ setupSubAgents(options?: {
78
+ maxConcurrent?: number;
79
+ baseDir?: string;
80
+ monitorIntervalMs?: number;
81
+ }): SubAgentManager | null;
82
+ getSubAgentManager(): SubAgentManager | null;
83
+ getConversationStore(): ConversationStore;
24
84
  registerTool(name: string, tool: ToolDefinition): void;
85
+ setAutoMode(enabled: boolean): void;
86
+ getAutoMode(): boolean;
87
+ emergencyStop(): void;
25
88
  getActiveConversationId(): string | null;
26
89
  getConversation(id: string): import("./types.js").Conversation | undefined;
27
90
  getMessages(conversationId?: string): Message[];
28
91
  startConversation(): string;
92
+ /** Resume an existing conversation by ID */
93
+ resumeConversation(id: string): boolean;
29
94
  sendMessage(content: string, conversationId?: string): Promise<void>;
30
95
  start(): Promise<void>;
31
96
  stop(): Promise<void>;
97
+ private startMonitorLoop;
32
98
  }
33
99
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,MAAM,CACJ,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,oBAAoB,CAAuB;;IAOnD,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI5C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAItD,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAIxC,eAAe,CAAC,EAAE,EAAE,MAAM;IAI1B,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAM/C,iBAAiB,IAAI,MAAM;IAMrB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}