genieceo 0.1.3 → 0.1.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 (81) hide show
  1. package/README.md +24 -0
  2. package/dist/agent/index.d.ts +4 -0
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +202 -0
  5. package/dist/agent/index.js.map +1 -1
  6. package/dist/agent/loop.d.ts +1 -1
  7. package/dist/agent/loop.d.ts.map +1 -1
  8. package/dist/agent/loop.js +2 -1
  9. package/dist/agent/loop.js.map +1 -1
  10. package/dist/agent/service/manager.d.ts +75 -0
  11. package/dist/agent/service/manager.d.ts.map +1 -0
  12. package/dist/agent/service/manager.js +399 -0
  13. package/dist/agent/service/manager.js.map +1 -0
  14. package/dist/agent/staff/manager.d.ts +88 -0
  15. package/dist/agent/staff/manager.d.ts.map +1 -0
  16. package/dist/agent/staff/manager.js +295 -0
  17. package/dist/agent/staff/manager.js.map +1 -0
  18. package/dist/cli/commands/chat.d.ts +1 -0
  19. package/dist/cli/commands/chat.d.ts.map +1 -1
  20. package/dist/cli/commands/chat.js +41 -25
  21. package/dist/cli/commands/chat.js.map +1 -1
  22. package/dist/cli/commands/onboard.d.ts.map +1 -1
  23. package/dist/cli/commands/onboard.js +210 -100
  24. package/dist/cli/commands/onboard.js.map +1 -1
  25. package/dist/cli/index.js +1 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/config/schema.d.ts +2 -2
  28. package/dist/memory/ceo.d.ts +131 -0
  29. package/dist/memory/ceo.d.ts.map +1 -0
  30. package/dist/memory/ceo.js +356 -0
  31. package/dist/memory/ceo.js.map +1 -0
  32. package/dist/memory/compaction.d.ts +59 -0
  33. package/dist/memory/compaction.d.ts.map +1 -0
  34. package/dist/memory/compaction.js +165 -0
  35. package/dist/memory/compaction.js.map +1 -0
  36. package/dist/memory/context-manager.d.ts +80 -0
  37. package/dist/memory/context-manager.d.ts.map +1 -0
  38. package/dist/memory/context-manager.js +246 -0
  39. package/dist/memory/context-manager.js.map +1 -0
  40. package/dist/memory/daily-log.d.ts +77 -0
  41. package/dist/memory/daily-log.d.ts.map +1 -0
  42. package/dist/memory/daily-log.js +302 -0
  43. package/dist/memory/daily-log.js.map +1 -0
  44. package/dist/memory/long-term.d.ts +65 -0
  45. package/dist/memory/long-term.d.ts.map +1 -0
  46. package/dist/memory/long-term.js +279 -0
  47. package/dist/memory/long-term.js.map +1 -0
  48. package/dist/memory/staff-loader.d.ts +67 -0
  49. package/dist/memory/staff-loader.d.ts.map +1 -0
  50. package/dist/memory/staff-loader.js +266 -0
  51. package/dist/memory/staff-loader.js.map +1 -0
  52. package/dist/providers/llm.d.ts +1 -0
  53. package/dist/providers/llm.d.ts.map +1 -1
  54. package/dist/providers/llm.js +28 -8
  55. package/dist/providers/llm.js.map +1 -1
  56. package/dist/tools/memory.d.ts +9 -0
  57. package/dist/tools/memory.d.ts.map +1 -0
  58. package/dist/tools/memory.js +125 -0
  59. package/dist/tools/memory.js.map +1 -0
  60. package/dist/tools/service.d.ts +9 -0
  61. package/dist/tools/service.d.ts.map +1 -0
  62. package/dist/tools/service.js +204 -0
  63. package/dist/tools/service.js.map +1 -0
  64. package/dist/tools/staff.d.ts +11 -0
  65. package/dist/tools/staff.d.ts.map +1 -0
  66. package/dist/tools/staff.js +276 -0
  67. package/dist/tools/staff.js.map +1 -0
  68. package/dist/tools/web.d.ts.map +1 -1
  69. package/dist/tools/web.js +106 -34
  70. package/dist/tools/web.js.map +1 -1
  71. package/dist/types/index.d.ts +81 -0
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/workspace/manager.d.ts +4 -0
  74. package/dist/workspace/manager.d.ts.map +1 -1
  75. package/dist/workspace/manager.js +56 -0
  76. package/dist/workspace/manager.js.map +1 -1
  77. package/examples/README.md +123 -0
  78. package/examples/staff/api-builder.md +77 -0
  79. package/examples/staff/codebase-scanner.md +79 -0
  80. package/examples/staff/debugger.md +76 -0
  81. package/package.json +3 -1
package/README.md CHANGED
@@ -12,6 +12,30 @@ genieceo is a powerful yet minimalist AI agent that helps you with tasks through
12
12
  - 🤖 **Subagents**: Delegate complex tasks to background agents
13
13
  - 🔄 **Provider-Agnostic**: Uses @mariozechner/pi-ai - supports 15+ providers with automatic model discovery
14
14
  - 💾 **Workspace**: Persistent workspace for files, skills, and configuration
15
+ - 🧞 **NEW: GenieCEO Mode** - Multi-agent system with context engineering and service management
16
+
17
+ ## 🆕 GenieCEO Multi-Agent Mode
18
+
19
+ Enable GenieCEO mode for advanced capabilities:
20
+
21
+ ```bash
22
+ genieceo chat --mode genieceo
23
+ ```
24
+
25
+ **Key Features:**
26
+ - **Context Engineering**: Staff return ≤2K summaries from 200K context (40x savings)
27
+ - **Flexible Staff**: Define any staff (api-builder, debugger, security-auditor)
28
+ - **Service Management**: Build and run web servers, APIs, webhooks
29
+ - **Smart Memory**: Auto-compaction, long-term knowledge, daily logs
30
+
31
+ **Quick Example:**
32
+ ```
33
+ "Define an api-builder staff that creates REST APIs"
34
+ "Spawn api-builder to build a blog API"
35
+ "Start the API as a service on port 3000"
36
+ ```
37
+
38
+ See [GENIECEO_BUILD_SUMMARY.md](GENIECEO_BUILD_SUMMARY.md) and [examples/](examples/) for details.
15
39
 
16
40
  ## 📦 Installation
17
41
 
@@ -4,6 +4,10 @@ import { AgentLoop } from './loop';
4
4
  * Initialize and create an agent instance with all tools and skills
5
5
  */
6
6
  export declare function createAgent(config: Config): Promise<AgentLoop>;
7
+ /**
8
+ * Create GenieCEO agent with multi-agent system capabilities
9
+ */
10
+ export declare function createGenieCEOAgent(config: Config): Promise<AgentLoop>;
7
11
  export { AgentLoop } from './loop';
8
12
  export { SubagentManager } from './subagent';
9
13
  export { ContextBuilder } from './context';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuCpE;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuCpE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA4M5E;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
@@ -1,7 +1,41 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.ContextBuilder = exports.SubagentManager = exports.AgentLoop = void 0;
4
37
  exports.createAgent = createAgent;
38
+ exports.createGenieCEOAgent = createGenieCEOAgent;
5
39
  const path_1 = require("path");
6
40
  const base_1 = require("../tools/base");
7
41
  const filesystem_1 = require("../tools/filesystem");
@@ -45,6 +79,174 @@ async function createAgent(config) {
45
79
  const agent = new loop_1.AgentLoop(config, toolRegistry, skillLoader);
46
80
  return agent;
47
81
  }
82
+ /**
83
+ * Create GenieCEO agent with multi-agent system capabilities
84
+ */
85
+ async function createGenieCEOAgent(config) {
86
+ // Import GenieCEO-specific modules
87
+ const { GenieCEOMemoryStore } = await Promise.resolve().then(() => __importStar(require('../memory/ceo')));
88
+ const { StaffDefinitionLoader } = await Promise.resolve().then(() => __importStar(require('../memory/staff-loader')));
89
+ const { ContextManager } = await Promise.resolve().then(() => __importStar(require('../memory/context-manager')));
90
+ const { DailyLogSystem } = await Promise.resolve().then(() => __importStar(require('../memory/daily-log')));
91
+ const { LongTermMemory } = await Promise.resolve().then(() => __importStar(require('../memory/long-term')));
92
+ const { LLMProvider } = await Promise.resolve().then(() => __importStar(require('../providers/llm')));
93
+ const { ContextCompactionService } = await Promise.resolve().then(() => __importStar(require('../memory/compaction')));
94
+ const { StaffManager } = await Promise.resolve().then(() => __importStar(require('./staff/manager')));
95
+ const { ServiceManager } = await Promise.resolve().then(() => __importStar(require('./service/manager')));
96
+ const { registerStaffTools } = await Promise.resolve().then(() => __importStar(require('../tools/staff')));
97
+ const { registerServiceTools } = await Promise.resolve().then(() => __importStar(require('../tools/service')));
98
+ const { registerMemoryTools } = await Promise.resolve().then(() => __importStar(require('../tools/memory')));
99
+ // Initialize memory systems
100
+ const ceoMemory = new GenieCEOMemoryStore(config.workspace);
101
+ await ceoMemory.load();
102
+ const staffLoader = new StaffDefinitionLoader(config.workspace);
103
+ await staffLoader.loadDefinitions();
104
+ const contextManager = new ContextManager(config.workspace);
105
+ await contextManager.ensureDirectories();
106
+ const dailyLog = new DailyLogSystem(config.workspace);
107
+ const longTermMemory = new LongTermMemory(config.workspace);
108
+ const llmProvider = new LLMProvider(config);
109
+ const compactionService = new ContextCompactionService(ceoMemory, contextManager, llmProvider);
110
+ // Initialize tool registry
111
+ const toolRegistry = new base_1.ToolRegistry();
112
+ // Register standard tools
113
+ toolRegistry.register(filesystem_1.readFileTool);
114
+ toolRegistry.register(filesystem_1.writeFileTool);
115
+ toolRegistry.register(filesystem_1.listDirTool);
116
+ toolRegistry.register((0, shell_1.createExecuteCommandTool)(config));
117
+ toolRegistry.register((0, web_1.createWebSearchTool)(config));
118
+ // Initialize skill loader
119
+ const builtinSkillsPath = (0, path_1.join)(__dirname, '..', 'skills', 'builtin');
120
+ const workspaceSkillsPath = (0, path_1.join)(config.workspace, 'skills');
121
+ const skillLoader = new loader_1.SkillLoader(builtinSkillsPath, workspaceSkillsPath, config);
122
+ await skillLoader.loadSkills();
123
+ // Create staff manager
124
+ const staffManager = new StaffManager(staffLoader, ceoMemory, contextManager, dailyLog, compactionService, config, toolRegistry, skillLoader);
125
+ // Create service manager
126
+ const serviceManager = new ServiceManager(ceoMemory, dailyLog, config.workspace);
127
+ // Start service health monitoring
128
+ serviceManager.startMonitoring(30000); // Every 30s
129
+ // Register GenieCEO tools
130
+ registerStaffTools(toolRegistry, staffManager, contextManager, ceoMemory, dailyLog);
131
+ registerServiceTools(toolRegistry, serviceManager, dailyLog);
132
+ registerMemoryTools(toolRegistry, ceoMemory, longTermMemory);
133
+ // Build system prompt
134
+ const staffList = staffLoader
135
+ .getAllDefinitions()
136
+ .map(d => `- **${d.name}**: ${d.description}`)
137
+ .join('\n');
138
+ const runningServices = serviceManager.getRunningServices();
139
+ const servicesList = runningServices.length > 0
140
+ ? runningServices.map(s => `- ${s.name} (${s.id}): ${s.type} on port ${s.port || 'N/A'}`).join('\n')
141
+ : '(None)';
142
+ const budget = ceoMemory.getContextBudget();
143
+ const systemPrompt = `# You are GenieCEO
144
+
145
+ An empowered multi-agent system that analyzes, builds, and runs applications.
146
+
147
+ ## Context Engineering
148
+
149
+ **Your goal**: Keep your context clean (<50K tokens) while accomplishing complex tasks.
150
+
151
+ **How**: Delegate deep work to staff. They return ~2K summaries. Detailed work stays in files.
152
+
153
+ **Example**: Staff reads 80K tokens of code → returns 2K summary → you get 40x context savings
154
+
155
+ ## Your Staff
156
+
157
+ ${staffList || '(No staff defined - create as needed with defineStaff)'}
158
+
159
+ **Staff are flexible**: Create whatever you need - api-builder, debugger, security-auditor, deployer, etc.
160
+
161
+ ## Service Management
162
+
163
+ **You can create and run applications**:
164
+ - Build web servers, APIs, webhooks, daemons
165
+ - Start them with startService (they keep running)
166
+ - Monitor health, view logs, restart if crashed
167
+ - Manage multiple services simultaneously
168
+
169
+ **Running Services (${runningServices.length})**:
170
+ ${servicesList}
171
+
172
+ ## Workflow
173
+
174
+ **For complex tasks**:
175
+ 1. Define or spawn staff to handle deep work
176
+ 2. Wait for completion (get ~2K summary)
177
+ 3. Read plan files if you need full details
178
+ 4. If building applications, use startService to run them
179
+ 5. Curate learnings to long-term memory
180
+
181
+ **For simple tasks**:
182
+ - Handle directly (no staff overhead needed)
183
+
184
+ **Token Budget**: ${budget.genieCEOCurrentTokens} / ${budget.genieCEOMaxTokens}
185
+ - Check with: viewContextBudget
186
+ - Auto-compaction at 45K tokens
187
+
188
+ ## Available Tools
189
+
190
+ **Staff Management**:
191
+ - defineStaff: Create new staff (api-builder, debugger, etc.)
192
+ - spawnStaff: Start staff on task
193
+ - waitForStaff: Get completion summary
194
+ - checkStaffStatus, listStaffTypes
195
+ - readStaffPlan: Read detailed findings
196
+
197
+ **Service Management**:
198
+ - startService: Run web servers, APIs, webhooks, daemons
199
+ - stopService, restartService
200
+ - listServices, checkServiceHealth
201
+ - viewServiceLogs: Debug services
202
+
203
+ **Memory**:
204
+ - remember/recall: Working memory (use sparingly)
205
+ - curateMemory: Save to long-term
206
+ - readLongTermMemory, searchMemory
207
+
208
+ **Standard**: readFile, writeFile, listDir, executeCommand, webSearch, etc.
209
+
210
+ ## Guidelines
211
+
212
+ 1. **Delegate deep work** - Staff keep your context clean
213
+ 2. **Read plan files** - When summaries aren't enough
214
+ 3. **Build applications** - Use staff + services
215
+ 4. **Monitor services** - Check health, view logs
216
+ 5. **Simple tasks** - Handle yourself (avoid overhead)
217
+ 6. **Curate patterns** - Save learnings to long-term memory`;
218
+ // Create agent loop with custom hooks
219
+ const agent = new loop_1.AgentLoop(config, toolRegistry, skillLoader);
220
+ // Override system prompt
221
+ agent.systemPrompt = systemPrompt;
222
+ // Add cleanup hook
223
+ const originalRun = agent.run.bind(agent);
224
+ agent.run = async function (userMessage) {
225
+ try {
226
+ const result = await originalRun(userMessage);
227
+ // Save memory after each run
228
+ await ceoMemory.save();
229
+ // Auto-compact if needed
230
+ if (ceoMemory.shouldCompact()) {
231
+ console.log('\n⚠️ Context approaching limit, auto-compacting...');
232
+ const messages = await ceoMemory.getRecentMessages(100);
233
+ await compactionService.compactMessages(messages);
234
+ ceoMemory.recordCompaction();
235
+ console.log('✓ Context compacted\n');
236
+ }
237
+ return result;
238
+ }
239
+ catch (error) {
240
+ await ceoMemory.save();
241
+ throw error;
242
+ }
243
+ };
244
+ // Add reference to managers for CLI access
245
+ agent.ceoMemory = ceoMemory;
246
+ agent.serviceManager = serviceManager;
247
+ agent.staffManager = staffManager;
248
+ return agent;
249
+ }
48
250
  var loop_2 = require("./loop");
49
251
  Object.defineProperty(exports, "AgentLoop", { enumerable: true, get: function () { return loop_2.AgentLoop; } });
50
252
  var subagent_2 = require("./subagent");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":";;;AAcA,kCAuCC;AArDD,+BAA4B;AAE5B,wCAA6C;AAC7C,oDAA+E;AAC/E,0CAA0D;AAC1D,sCAAmD;AACnD,0CAAmD;AACnD,6CAA+C;AAC/C,iCAAmC;AACnC,yCAA6C;AAE7C;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,2BAA2B;IAC3B,MAAM,YAAY,GAAG,IAAI,mBAAY,EAAE,CAAC;IAExC,4BAA4B;IAC5B,YAAY,CAAC,QAAQ,CAAC,yBAAY,CAAC,CAAC;IACpC,YAAY,CAAC,QAAQ,CAAC,0BAAa,CAAC,CAAC;IACrC,YAAY,CAAC,QAAQ,CAAC,wBAAW,CAAC,CAAC;IAEnC,yCAAyC;IACzC,YAAY,CAAC,QAAQ,CAAC,IAAA,gCAAwB,EAAC,MAAM,CAAC,CAAC,CAAC;IAExD,8CAA8C;IAC9C,YAAY,CAAC,QAAQ,CAAC,IAAA,yBAAmB,EAAC,MAAM,CAAC,CAAC,CAAC;IAEnD,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,mBAAmB,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAEpF,cAAc;IACd,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;IAE/B,8BAA8B;IAC9B,MAAM,eAAe,GAAG,IAAI,0BAAe,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE/E,4CAA4C;IAC5C,MAAM,SAAS,GAAG;QAChB,GAAG,yBAAiB;QACpB,OAAO,EAAE,KAAK,EAAE,MAA0C,EAAE,EAAE;YAC5D,OAAO,MAAM,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;IACF,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEjC,oBAAoB;IACpB,MAAM,KAAK,GAAG,IAAI,gBAAS,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+BAAmC;AAA1B,iGAAA,SAAS,OAAA;AAClB,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,qCAA2C;AAAlC,yGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { ToolRegistry } from '../tools/base';
3
3
  import { SkillLoader } from '../skills/loader';
4
4
  interface ChatMessage {
5
5
  role: 'user' | 'assistant' | 'system';
6
- content: string;
6
+ content: string | any[];
7
7
  }
8
8
  /**
9
9
  * Agent Loop
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;gBAGrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW;IAS1B;;OAEG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiC/C;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IAkD/D;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;gBAGrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW;IAS1B;;OAEG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiC/C;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IAmD/D;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
@@ -67,6 +67,7 @@ class AgentLoop {
67
67
  // Generate response with automatic tool calling
68
68
  const result = await this.llmProvider.generate(messages, tools, this.config.maxIterations);
69
69
  // Update history with new exchange
70
+ // Assistant messages must have content as an array for pi-ai compatibility
70
71
  const updatedHistory = [
71
72
  ...history,
72
73
  {
@@ -75,7 +76,7 @@ class AgentLoop {
75
76
  },
76
77
  {
77
78
  role: 'assistant',
78
- content: result.text,
79
+ content: result.content || (result.text ? [{ type: 'text', text: result.text }] : []),
79
80
  },
80
81
  ];
81
82
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ServiceManager - Manages long-running processes (empowerment)
3
+ *
4
+ * GenieCEO can create and run applications:
5
+ * - Web servers, APIs, webhooks, daemons
6
+ * - Start/stop/restart services
7
+ * - Health monitoring with auto-recovery
8
+ * - View logs for debugging
9
+ * - Manage multiple services simultaneously
10
+ */
11
+ import { ServiceProcess } from '../../types';
12
+ import { GenieCEOMemoryStore } from '../../memory/ceo';
13
+ import { DailyLogSystem } from '../../memory/daily-log';
14
+ export declare class ServiceManager {
15
+ private ceoMemory;
16
+ private dailyLog;
17
+ private workspacePath;
18
+ private logsPath;
19
+ private monitorInterval?;
20
+ constructor(ceoMemory: GenieCEOMemoryStore, dailyLog: DailyLogSystem, workspacePath: string);
21
+ /**
22
+ * Start a new service
23
+ */
24
+ startService(config: {
25
+ name: string;
26
+ type: ServiceProcess['type'];
27
+ command: string;
28
+ workingDir: string;
29
+ port?: number;
30
+ healthCheckUrl?: string;
31
+ autoRestart?: boolean;
32
+ env?: Record<string, string>;
33
+ }): Promise<ServiceProcess>;
34
+ /**
35
+ * Stop a running service
36
+ */
37
+ stopService(id: string): Promise<void>;
38
+ /**
39
+ * Restart a service
40
+ */
41
+ restartService(id: string): Promise<void>;
42
+ /**
43
+ * Spawn the actual process
44
+ */
45
+ private spawnProcess;
46
+ /**
47
+ * Check if a service is healthy
48
+ */
49
+ checkHealth(id: string): Promise<boolean>;
50
+ /**
51
+ * HTTP health check
52
+ */
53
+ private httpHealthCheck;
54
+ /**
55
+ * Monitor all services (background task)
56
+ */
57
+ monitorServices(): Promise<void>;
58
+ /**
59
+ * Start background monitoring
60
+ */
61
+ startMonitoring(intervalMs?: number): void;
62
+ /**
63
+ * Stop background monitoring
64
+ */
65
+ stopMonitoring(): void;
66
+ /**
67
+ * Get service logs
68
+ */
69
+ getServiceLogs(id: string, lines?: number): Promise<string>;
70
+ getService(id: string): ServiceProcess | undefined;
71
+ getAllServices(): ServiceProcess[];
72
+ getRunningServices(): ServiceProcess[];
73
+ private generateServiceId;
74
+ }
75
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/agent/service/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAGvC,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,MAAM;IAYvB;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,GAAG,OAAO,CAAC,cAAc,CAAC;IA0D3B;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C5C;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/C;;OAEG;YACW,YAAY;IA0F1B;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B/C;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtC;;OAEG;IACH,eAAe,CAAC,UAAU,GAAE,MAAc,GAAG,IAAI;IAYjD;;OAEG;IACH,cAAc,IAAI,IAAI;IAWtB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBrE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlD,cAAc,IAAI,cAAc,EAAE;IAIlC,kBAAkB,IAAI,cAAc,EAAE;IAQtC,OAAO,CAAC,iBAAiB;CAK1B"}