@curie-agent/daemon 0.2.5

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 (43) hide show
  1. package/LICENSE +179 -0
  2. package/dist/src/approval-tracker.d.ts +42 -0
  3. package/dist/src/approval-tracker.d.ts.map +1 -0
  4. package/dist/src/approval-tracker.js +78 -0
  5. package/dist/src/approval-tracker.js.map +1 -0
  6. package/dist/src/auth.d.ts +17 -0
  7. package/dist/src/auth.d.ts.map +1 -0
  8. package/dist/src/auth.js +94 -0
  9. package/dist/src/auth.js.map +1 -0
  10. package/dist/src/channel-manager.d.ts +50 -0
  11. package/dist/src/channel-manager.d.ts.map +1 -0
  12. package/dist/src/channel-manager.js +184 -0
  13. package/dist/src/channel-manager.js.map +1 -0
  14. package/dist/src/daemon-app.d.ts +88 -0
  15. package/dist/src/daemon-app.d.ts.map +1 -0
  16. package/dist/src/daemon-app.js +496 -0
  17. package/dist/src/daemon-app.js.map +1 -0
  18. package/dist/src/index.d.ts +19 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +26 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/jsonrpc-handler.d.ts +47 -0
  23. package/dist/src/jsonrpc-handler.d.ts.map +1 -0
  24. package/dist/src/jsonrpc-handler.js +2205 -0
  25. package/dist/src/jsonrpc-handler.js.map +1 -0
  26. package/dist/src/server.d.ts +49 -0
  27. package/dist/src/server.d.ts.map +1 -0
  28. package/dist/src/server.js +204 -0
  29. package/dist/src/server.js.map +1 -0
  30. package/dist/src/slash-cd.d.ts +38 -0
  31. package/dist/src/slash-cd.d.ts.map +1 -0
  32. package/dist/src/slash-cd.js +93 -0
  33. package/dist/src/slash-cd.js.map +1 -0
  34. package/dist/src/static-files.d.ts +7 -0
  35. package/dist/src/static-files.d.ts.map +1 -0
  36. package/dist/src/static-files.js +73 -0
  37. package/dist/src/static-files.js.map +1 -0
  38. package/dist/src/ws-handler.d.ts +21 -0
  39. package/dist/src/ws-handler.d.ts.map +1 -0
  40. package/dist/src/ws-handler.js +119 -0
  41. package/dist/src/ws-handler.js.map +1 -0
  42. package/dist/tsconfig.tsbuildinfo +1 -0
  43. package/package.json +37 -0
@@ -0,0 +1,184 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ import { TurnLoop, ChannelRegistry, ChannelRouter } from '@curie-agent/core';
4
+ /** Maintains per-channel TurnLoop instances and session mapping. */
5
+ export class ChannelManager {
6
+ eventBus;
7
+ sessionStore;
8
+ settingsManager;
9
+ createProvider;
10
+ tools;
11
+ approvalTracker;
12
+ systemPrompt;
13
+ registry;
14
+ router;
15
+ turnLoops = new Map();
16
+ constructor(eventBus, sessionStore, settingsManager, createProvider, tools = [], approvalTracker, systemPrompt) {
17
+ this.eventBus = eventBus;
18
+ this.sessionStore = sessionStore;
19
+ this.settingsManager = settingsManager;
20
+ this.createProvider = createProvider;
21
+ this.tools = tools;
22
+ this.approvalTracker = approvalTracker;
23
+ this.systemPrompt = systemPrompt;
24
+ this.registry = new ChannelRegistry();
25
+ this.router = new ChannelRouter(this.registry,
26
+ // sendMessage: routed back via TelegramGateway
27
+ async () => { }, this.settingsManager,
28
+ // sendApproval: routed via TelegramGateway
29
+ async () => { });
30
+ // Ensure main CLI channel exists
31
+ this.registry.getOrCreate('cli', 'main', 'main', 'Main');
32
+ }
33
+ /**
34
+ * Send a message on a channel. Creates or reuses the channel's TurnLoop.
35
+ * Bridges turn loop events to the shared daemon EventBus.
36
+ */
37
+ async send(channelId, text, cwd, type) {
38
+ console.log(`[channelManager] send channelId=${channelId} text="${text.slice(0, 50)}"`);
39
+ if (!this.createProvider) {
40
+ console.log(`[channelManager] error: no provider configured`);
41
+ return { status: 'error: no provider configured', sessionId: '', events: 0 };
42
+ }
43
+ const settings = this.settingsManager.get();
44
+ const provider = this.createProvider(settings);
45
+ const channelCwd = cwd || join(homedir(), '.curie-agent');
46
+ // Get or create TurnLoop for this channel
47
+ let loop = this.turnLoops.get(channelId);
48
+ let sessionId = loop ? loop.sessionId : undefined;
49
+ if (!loop) {
50
+ const entry = this.registry.get(channelId);
51
+ sessionId = entry?.sessionId || channelId;
52
+ // Build approval callback
53
+ let onApprovalAsk;
54
+ if (this.approvalTracker) {
55
+ onApprovalAsk = async (req) => {
56
+ const toolCallId = req.toolCallId || crypto.randomUUID();
57
+ return this.approvalTracker.register({
58
+ toolCallId,
59
+ name: req.name,
60
+ input: req.input,
61
+ sessionId,
62
+ channelId,
63
+ });
64
+ };
65
+ }
66
+ loop = new TurnLoop({
67
+ provider,
68
+ model: settings.model_override || settings.model,
69
+ tools: this.tools,
70
+ cwd: channelCwd,
71
+ settings,
72
+ approvalMode: settings.mode || 'auto',
73
+ effort: settings.effort,
74
+ sessionId,
75
+ resume: !!sessionId,
76
+ onApprovalAsk,
77
+ system: this.systemPrompt,
78
+ type: type || 'webui',
79
+ }, this.sessionStore);
80
+ this.turnLoops.set(channelId, loop);
81
+ }
82
+ // Bridge events to shared event bus
83
+ const eventTypes = [
84
+ 'user-prompt', 'assistant-delta', 'assistant-stop', 'tool-call',
85
+ 'tool-result', 'approval-request', 'approval-decision', 'usage',
86
+ 'error', 'session-start', 'session-stop', 'hook', 'status',
87
+ 'session-resumed', 'context-warning', 'thinking-delta',
88
+ ];
89
+ const unsubscribes = [];
90
+ for (const type of eventTypes) {
91
+ unsubscribes.push(loop.eventBus.subscribe(type, (event) => {
92
+ this.eventBus.emit(event);
93
+ }));
94
+ }
95
+ try {
96
+ const result = await loop.run(text);
97
+ const sessionId = result.sessionId;
98
+ // Update channel session ID
99
+ this.registry.updateSession(channelId, sessionId);
100
+ // Emit channel-updated event
101
+ this.eventBus.emit({
102
+ type: 'channel-updated',
103
+ id: crypto.randomUUID(),
104
+ channelId,
105
+ channelType: this.registry.get(channelId)?.type || 'cli',
106
+ displayName: this.registry.get(channelId)?.displayName || channelId,
107
+ sessionId,
108
+ timestamp: Date.now(),
109
+ });
110
+ return { status: 'completed', sessionId, events: result.events.length };
111
+ }
112
+ catch (err) {
113
+ const msg = err instanceof Error ? err.message : String(err);
114
+ console.error(`[channelManager] TurnLoop error for channelId=${channelId}:`, msg);
115
+ return {
116
+ status: 'error',
117
+ sessionId: '',
118
+ events: 0,
119
+ };
120
+ }
121
+ finally {
122
+ // Clean up event subscriptions, keep the loop alive for follow-ups
123
+ for (const unsub of unsubscribes)
124
+ unsub();
125
+ }
126
+ }
127
+ /** Cancel a running turn for a channel. */
128
+ cancel(channelId) {
129
+ const loop = this.turnLoops.get(channelId);
130
+ if (loop) {
131
+ loop.abort = true;
132
+ loop.abortController?.abort();
133
+ this.turnLoops.delete(channelId);
134
+ }
135
+ }
136
+ /** Get or create the main CLI channel. */
137
+ getOrCreateMain() {
138
+ return this.registry.getOrCreate('cli', 'main', 'main', 'Main');
139
+ }
140
+ /** Handle incoming Telegram message — resolve channel. */
141
+ routeTelegramMessage(params) {
142
+ const settings = this.settingsManager.get();
143
+ const allowGroups = settings.channels?.allow_groups ?? false;
144
+ if (params.isGroup && !allowGroups)
145
+ return null;
146
+ let entry = this.registry.findTelegramChannel(params.chatId);
147
+ if (!entry) {
148
+ const sessionId = `telegram_${params.chatId}_${Date.now()}`;
149
+ const displayName = params.chatTitle || `User ${params.userId}`;
150
+ entry = this.registry.getOrCreate('telegram', params.chatId, sessionId, displayName);
151
+ this.eventBus.emit({
152
+ type: 'channel-updated',
153
+ id: crypto.randomUUID(),
154
+ channelId: entry.id,
155
+ channelType: 'telegram',
156
+ displayName,
157
+ sessionId,
158
+ timestamp: Date.now(),
159
+ });
160
+ }
161
+ return { channelId: entry.id, sessionId: entry.sessionId };
162
+ }
163
+ /** Get the Telegram chat ID for a channel. */
164
+ getTelegramChatId(channelId) {
165
+ return this.registry.getTelegramChatId(channelId);
166
+ }
167
+ /** List all channels. */
168
+ listChannels() {
169
+ return this.registry.list();
170
+ }
171
+ /** Get a channel by ID. */
172
+ getChannel(channelId) {
173
+ return this.registry.get(channelId);
174
+ }
175
+ /** Clean up all turn loops (on shutdown). */
176
+ cleanup() {
177
+ for (const [channelId, loop] of this.turnLoops) {
178
+ loop.abort = true;
179
+ loop.abortController?.abort();
180
+ }
181
+ this.turnLoops.clear();
182
+ }
183
+ }
184
+ //# sourceMappingURL=channel-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-manager.js","sourceRoot":"","sources":["../../src/channel-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAK7E,oEAAoE;AACpE,MAAM,OAAO,cAAc;IAMf;IACA;IACA;IACA;IACA;IACA;IACA;IAXF,QAAQ,CAAkB;IAC1B,MAAM,CAAgB;IACtB,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,YACU,QAAkB,EAClB,YAA0B,EAC1B,eAAgC,EAChC,cAAgC,EAChC,QAAgB,EAAE,EAClB,eAAiC,EACjC,YAAqB;QANrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,oBAAe,GAAf,eAAe,CAAiB;QAChC,mBAAc,GAAd,cAAc,CAAkB;QAChC,UAAK,GAAL,KAAK,CAAa;QAClB,oBAAe,GAAf,eAAe,CAAkB;QACjC,iBAAY,GAAZ,YAAY,CAAS;QAE7B,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAC7B,IAAI,CAAC,QAAQ;QACb,+CAA+C;QAC/C,KAAK,IAAI,EAAE,GAAE,CAAC,EACd,IAAI,CAAC,eAAe;QACpB,2CAA2C;QAC3C,KAAK,IAAI,EAAE,GAAE,CAAC,CACf,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,IAAY,EAAE,GAAY,EAAE,IAAa;QAKrE,OAAO,CAAC,GAAG,CAAC,mCAAmC,SAAS,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC/E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;QAE1D,0CAA0C;QAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAE,IAAY,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,SAAS,CAAC;YAE1C,0BAA0B;YAC1B,IAAI,aAA6I,CAAC;YAClJ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,aAAa,GAAG,KAAK,EAAE,GAA0F,EAAE,EAAE;oBACnH,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACzD,OAAO,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC;wBACpC,UAAU;wBACV,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,SAAS;wBACT,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC,CAAC;YACJ,CAAC;YAEF,IAAI,GAAG,IAAI,QAAQ,CAAC;gBACjB,QAAQ;gBACR,KAAK,EAAE,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,KAAK;gBAChD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,EAAE,UAAU;gBACf,QAAQ;gBACR,YAAY,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM;gBACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS;gBACT,MAAM,EAAE,CAAC,CAAC,SAAS;gBACnB,aAAa;gBACb,MAAM,EAAE,IAAI,CAAC,YAAY;gBACzB,IAAI,EAAE,IAAI,IAAI,OAAO;aACtB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,oCAAoC;QACpC,MAAM,UAAU,GAAoB;YAClC,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW;YAC/D,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,OAAO;YAC/D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ;YAC1D,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB;SACvD,CAAC;QACF,MAAM,YAAY,GAAsB,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAEnC,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAElD,6BAA6B;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,iBAAiB;gBACvB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,SAAS;gBACT,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,KAAK;gBACxD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,WAAW,IAAI,SAAS;gBACnE,SAAS;gBACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACF,CAAC,CAAC;YAEvB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,iDAAiD,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;YAClF,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,EAAE;gBACb,MAAM,EAAE,CAAC;aACV,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,mEAAmE;YACnE,KAAK,MAAM,KAAK,IAAI,YAAY;gBAAE,KAAK,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,SAAiB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACR,IAAY,CAAC,KAAK,GAAG,IAAI,CAAC;YAC1B,IAAY,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,0DAA0D;IAC1D,oBAAoB,CAAC,MAKpB;QACC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,YAAY,IAAI,KAAK,CAAC;QAE7D,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEhD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,YAAY,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YAChE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAErF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,iBAAiB;gBACvB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,SAAS,EAAE,KAAK,CAAC,EAAE;gBACnB,WAAW,EAAE,UAAU;gBACvB,WAAW;gBACX,SAAS;gBACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACF,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC7D,CAAC;IAED,8CAA8C;IAC9C,iBAAiB,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,yBAAyB;IACzB,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,2BAA2B;IAC3B,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,6CAA6C;IAC7C,OAAO;QACL,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,IAAY,CAAC,KAAK,GAAG,IAAI,CAAC;YAC1B,IAAY,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,88 @@
1
+ import type { EventBus, SessionStore, SettingsManager, Tool } from '@curie-agent/core';
2
+ import { TaskManager, TelegramGateway, SubagentExecutor } from '@curie-agent/core';
3
+ import type { ScheduleType } from '@curie-agent/core';
4
+ import type { ProviderFactory } from './server.js';
5
+ import { ApprovalTracker } from './approval-tracker.js';
6
+ import { ChannelManager } from './channel-manager.js';
7
+ /** MCP server configuration. */
8
+ export interface McpServerConfig {
9
+ command: string;
10
+ args?: string[];
11
+ env?: Record<string, string>;
12
+ }
13
+ export interface McpConnectionStatus {
14
+ serverId: string;
15
+ connected: boolean;
16
+ tools: string[];
17
+ }
18
+ /** Callback type for Telegram message delivery. */
19
+ export type SendMessageFn = (chatId: string, text: string) => Promise<void>;
20
+ /**
21
+ * Central orchestrator for the daemon. Wires together:
22
+ * - ChannelManager (per-channel TurnLoop)
23
+ * - ApprovalTracker (cross-client approval resolution)
24
+ * - TaskManager (heartbeats, reminders, scheduled tasks)
25
+ * - TelegramGateway (Telegram bot)
26
+ * - MCP tool management
27
+ */
28
+ export declare class DaemonApp {
29
+ private eventBus;
30
+ private sessionStore;
31
+ private settingsManager;
32
+ private createProvider?;
33
+ private tools;
34
+ private mcpServers?;
35
+ private sendMessage?;
36
+ private systemPrompt?;
37
+ channelManager: ChannelManager;
38
+ approvalTracker: ApprovalTracker;
39
+ /** Unified task manager — primary store for all tasks (manual, auto, notify). */
40
+ taskManager: TaskManager;
41
+ subagentExecutor: SubagentExecutor;
42
+ telegramGateway: TelegramGateway | null;
43
+ mcpStatus: McpConnectionStatus[];
44
+ private checkerTimer;
45
+ private unsubscribes;
46
+ /** Maps task ID → subagent agentId for auto-mode tasks. */
47
+ private taskIdAgentMap;
48
+ /** Reverse map: subagent agentId → task ID. */
49
+ private agentIdTaskMap;
50
+ constructor(eventBus: EventBus, sessionStore: SessionStore, settingsManager: SettingsManager, createProvider?: ProviderFactory | undefined, tools?: Tool[], mcpServers?: Record<string, McpServerConfig> | undefined, sendMessage?: SendMessageFn | undefined, systemPrompt?: string | undefined);
51
+ /** Start all subsystems. */
52
+ start(): Promise<void>;
53
+ /** Stop all subsystems. */
54
+ stop(): Promise<void>;
55
+ /**
56
+ * Handle incoming Telegram message. Routes to the appropriate
57
+ * channel, then calls back to the sender.
58
+ */
59
+ private handleTelegramMessage;
60
+ /**
61
+ * Process a Telegram turn. Sends the message to the TurnLoop,
62
+ * collects the response, and delivers it back via Telegram.
63
+ */
64
+ private processTelegramTurn;
65
+ /** Send a message to Telegram chat. */
66
+ private sendTelegram;
67
+ /** Start the cron checker (heartbeat + scheduled tasks + reminders). */
68
+ private startCronChecker;
69
+ /** Stop the cron checker. */
70
+ private stopCronChecker;
71
+ /** Execute a scheduled task from unified TaskManager (auto mode). */
72
+ private executeTaskUnified;
73
+ /** Build system prompt for an auto-mode subagent — persistent identity + operational context. */
74
+ private buildAutoSystemPrompt;
75
+ /** Build user message for an auto-mode subagent — task instruction only. */
76
+ private buildAutoUserPrompt;
77
+ /** Execute a heartbeat from unified TaskManager (auto mode + frequency). */
78
+ private executeHeartbeatUnified;
79
+ /** Run an immediate heartbeat (triggered via RPC). */
80
+ runHeartbeat(scheduleType?: ScheduleType): Promise<{
81
+ text: string;
82
+ toolCalls: number;
83
+ maxTurns?: number;
84
+ reason: string;
85
+ errors: string[];
86
+ }>;
87
+ }
88
+ //# sourceMappingURL=daemon-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-app.d.ts","sourceRoot":"","sources":["../../src/daemon-app.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EAAS,YAAY,EAAE,eAAe,EACf,IAAI,EACpC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAwC,gBAAgB,EAAiC,MAAM,mBAAmB,CAAC;AACxJ,OAAO,KAAK,EAAE,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,SAAS;IAiBlB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,YAAY,CAAC;IAvBhB,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACxC,iFAAiF;IAC1E,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAQ;IAC/C,SAAS,EAAE,mBAAmB,EAAE,CAAM;IAE7C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAAyB;IAC7C,2DAA2D;IAC3D,OAAO,CAAC,cAAc,CAA6B;IACnD,+CAA+C;IAC/C,OAAO,CAAC,cAAc,CAA6B;gBAGzC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,cAAc,CAAC,EAAE,eAAe,YAAA,EAChC,KAAK,GAAE,IAAI,EAAO,EAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,YAAA,EAC5C,WAAW,CAAC,EAAE,aAAa,YAAA,EAC3B,YAAY,CAAC,EAAE,MAAM,YAAA;IAW/B,4BAA4B;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4G5B,2BAA2B;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;;OAGG;YACW,mBAAmB;IA8EjC,uCAAuC;YACzB,YAAY;IAQ1B,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;IA2DxB,6BAA6B;IAC7B,OAAO,CAAC,eAAe;IAOvB,qEAAqE;YACvD,kBAAkB;IA4C/B,iGAAiG;IAClG,OAAO,CAAC,qBAAqB;IA0D5B,4EAA4E;IAC7E,OAAO,CAAC,mBAAmB;IAI3B,4EAA4E;YAC9D,uBAAuB;IAyCtC,sDAAsD;IAC/C,YAAY,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;QACvD,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CAmCH"}