projax 3.3.69 → 3.3.71

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 (44) hide show
  1. package/dist/agent-runner.d.ts +60 -0
  2. package/dist/agent-runner.js +382 -0
  3. package/dist/api/database.d.ts +38 -1
  4. package/dist/api/database.d.ts.map +1 -1
  5. package/dist/api/database.js +327 -0
  6. package/dist/api/database.js.map +1 -1
  7. package/dist/api/routes/agents.d.ts +4 -0
  8. package/dist/api/routes/agents.d.ts.map +1 -0
  9. package/dist/api/routes/agents.js +375 -0
  10. package/dist/api/routes/agents.js.map +1 -0
  11. package/dist/api/routes/index.d.ts.map +1 -1
  12. package/dist/api/routes/index.js +4 -0
  13. package/dist/api/routes/index.js.map +1 -1
  14. package/dist/api/routes/todos.d.ts +4 -0
  15. package/dist/api/routes/todos.d.ts.map +1 -0
  16. package/dist/api/routes/todos.js +595 -0
  17. package/dist/api/routes/todos.js.map +1 -0
  18. package/dist/api/types.d.ts +67 -0
  19. package/dist/api/types.d.ts.map +1 -1
  20. package/dist/core/database.d.ts +47 -0
  21. package/dist/core/database.js +48 -0
  22. package/dist/core-bridge.d.ts +1 -1
  23. package/dist/electron/core/database.d.ts +47 -0
  24. package/dist/electron/core/database.js +48 -0
  25. package/dist/electron/renderer/assets/index-6afBeDFD.js +66 -0
  26. package/dist/electron/renderer/assets/index-Bd3aFi7B.css +1 -0
  27. package/dist/electron/renderer/index.html +2 -2
  28. package/dist/index.js +6 -175
  29. package/dist/octopus-cli.d.ts +2 -0
  30. package/dist/octopus-cli.js +45 -0
  31. package/dist/octopus-show-tui.d.ts +1 -0
  32. package/dist/octopus-show-tui.js +802 -0
  33. package/dist/octopus-tui.d.ts +1 -0
  34. package/dist/octopus-tui.js +115 -0
  35. package/dist/prxi.js +373 -63
  36. package/dist/prxi.tsx +472 -65
  37. package/package.json +7 -2
  38. package/dist/electron/renderer/assets/index-BjZn_mEF.js +0 -66
  39. package/dist/electron/renderer/assets/index-CZmDxbJO.js +0 -66
  40. package/dist/electron/renderer/assets/index-Cd1mTO3s.js +0 -66
  41. package/dist/electron/renderer/assets/index-Cj4QON0s.js +0 -66
  42. package/dist/electron/renderer/assets/index-CmtZriN5.js +0 -66
  43. package/dist/electron/renderer/assets/index-DJDPi0kp.css +0 -1
  44. package/dist/electron/renderer/assets/index-DfocdjIj.css +0 -1
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const database_1 = require("../database");
5
+ const child_process_1 = require("child_process");
6
+ const router = (0, express_1.Router)();
7
+ const db = (0, database_1.getDatabase)();
8
+ // Track running agent processes
9
+ const runningAgents = new Map();
10
+ // CLI type to command mapping
11
+ const CLI_COMMANDS = {
12
+ claude: 'claude',
13
+ gemini: 'gemini',
14
+ openai: 'openai',
15
+ xai: 'xai',
16
+ ollama: 'ollama',
17
+ aider: 'aider',
18
+ continue: 'continue',
19
+ custom: '',
20
+ };
21
+ // CLI type to environment variable mapping for API keys
22
+ const CLI_ENV_VARS = {
23
+ claude: 'ANTHROPIC_API_KEY',
24
+ gemini: 'GOOGLE_API_KEY',
25
+ openai: 'OPENAI_API_KEY',
26
+ xai: 'XAI_API_KEY',
27
+ ollama: null, // Local, no API key needed
28
+ aider: null, // Uses OPENAI_API_KEY or ANTHROPIC_API_KEY depending on model
29
+ continue: null, // IDE extension
30
+ custom: null,
31
+ };
32
+ // Helper to build command and args for an agent
33
+ function buildAgentCommand(agent) {
34
+ const command = agent.cli_type === 'custom' && agent.cli_command
35
+ ? agent.cli_command
36
+ : CLI_COMMANDS[agent.cli_type];
37
+ const args = [];
38
+ const env = { ...process.env };
39
+ // Set API key in environment if available
40
+ if (agent.api_key) {
41
+ const envVar = CLI_ENV_VARS[agent.cli_type];
42
+ if (envVar) {
43
+ env[envVar] = agent.api_key;
44
+ }
45
+ // For aider, set both possible keys
46
+ if (agent.cli_type === 'aider') {
47
+ env['OPENAI_API_KEY'] = agent.api_key;
48
+ env['ANTHROPIC_API_KEY'] = agent.api_key;
49
+ }
50
+ }
51
+ // Add model flag if specified
52
+ if (agent.model) {
53
+ switch (agent.cli_type) {
54
+ case 'claude':
55
+ args.push('--model', agent.model);
56
+ break;
57
+ case 'openai':
58
+ args.push('--model', agent.model);
59
+ break;
60
+ case 'gemini':
61
+ args.push('--model', agent.model);
62
+ break;
63
+ case 'ollama':
64
+ args.push('run', agent.model);
65
+ break;
66
+ case 'aider':
67
+ args.push('--model', agent.model);
68
+ break;
69
+ default:
70
+ // Custom or unknown - add as generic flag
71
+ if (agent.model) {
72
+ args.push('--model', agent.model);
73
+ }
74
+ }
75
+ }
76
+ // Add system prompt if specified
77
+ if (agent.system_prompt) {
78
+ switch (agent.cli_type) {
79
+ case 'claude':
80
+ args.push('--system-prompt', agent.system_prompt);
81
+ break;
82
+ case 'aider':
83
+ args.push('--message', agent.system_prompt);
84
+ break;
85
+ default:
86
+ // Most CLIs don't support system prompt via CLI
87
+ break;
88
+ }
89
+ }
90
+ // Add additional args if specified
91
+ if (agent.additional_args) {
92
+ const additionalArgs = agent.additional_args.split(/\s+/).filter(Boolean);
93
+ args.push(...additionalArgs);
94
+ }
95
+ return { command, args, env };
96
+ }
97
+ // List agents for a project
98
+ router.get('/projects/:projectId/agents', (req, res) => {
99
+ try {
100
+ const projectId = parseInt(req.params.projectId, 10);
101
+ if (isNaN(projectId)) {
102
+ return res.status(400).json({ error: 'Invalid project ID' });
103
+ }
104
+ // Verify project exists
105
+ const project = db.getProject(projectId);
106
+ if (!project) {
107
+ return res.status(404).json({ error: 'Project not found' });
108
+ }
109
+ const agents = db.getAgentsByProject(projectId);
110
+ res.json(agents);
111
+ }
112
+ catch (error) {
113
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
114
+ }
115
+ });
116
+ // Create agent for a project
117
+ router.post('/projects/:projectId/agents', (req, res) => {
118
+ try {
119
+ const projectId = parseInt(req.params.projectId, 10);
120
+ if (isNaN(projectId)) {
121
+ return res.status(400).json({ error: 'Invalid project ID' });
122
+ }
123
+ // Verify project exists
124
+ const project = db.getProject(projectId);
125
+ if (!project) {
126
+ return res.status(404).json({ error: 'Project not found' });
127
+ }
128
+ const { name, cli_type, cli_command, model, api_key, system_prompt, temperature, max_tokens, additional_args } = req.body;
129
+ if (!name || !cli_type) {
130
+ return res.status(400).json({ error: 'Name and cli_type are required' });
131
+ }
132
+ // Validate cli_type
133
+ const validCliTypes = ['claude', 'gemini', 'openai', 'xai', 'ollama', 'aider', 'continue', 'custom'];
134
+ if (!validCliTypes.includes(cli_type)) {
135
+ return res.status(400).json({ error: `Invalid cli_type. Must be one of: ${validCliTypes.join(', ')}` });
136
+ }
137
+ // Validate temperature if provided
138
+ if (temperature !== undefined && temperature !== null) {
139
+ if (typeof temperature !== 'number' || temperature < 0 || temperature > 2) {
140
+ return res.status(400).json({ error: 'Temperature must be a number between 0 and 2' });
141
+ }
142
+ }
143
+ // Validate max_tokens if provided
144
+ if (max_tokens !== undefined && max_tokens !== null) {
145
+ if (typeof max_tokens !== 'number' || max_tokens < 1) {
146
+ return res.status(400).json({ error: 'max_tokens must be a positive number' });
147
+ }
148
+ }
149
+ const agent = db.addAgent(projectId, {
150
+ name,
151
+ cli_type,
152
+ cli_command: cli_command || null,
153
+ model: model || null,
154
+ api_key: api_key || null,
155
+ system_prompt: system_prompt || null,
156
+ temperature: temperature ?? null,
157
+ max_tokens: max_tokens ?? null,
158
+ additional_args: additional_args || null,
159
+ });
160
+ res.status(201).json(agent);
161
+ }
162
+ catch (error) {
163
+ if (error instanceof Error && error.message.includes('already exists')) {
164
+ return res.status(409).json({ error: error.message });
165
+ }
166
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
167
+ }
168
+ });
169
+ // Get agent by ID
170
+ router.get('/agents/:id', (req, res) => {
171
+ try {
172
+ const id = parseInt(req.params.id, 10);
173
+ if (isNaN(id)) {
174
+ return res.status(400).json({ error: 'Invalid agent ID' });
175
+ }
176
+ const agent = db.getAgent(id);
177
+ if (!agent) {
178
+ return res.status(404).json({ error: 'Agent not found' });
179
+ }
180
+ res.json(agent);
181
+ }
182
+ catch (error) {
183
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
184
+ }
185
+ });
186
+ // Update agent
187
+ router.put('/agents/:id', (req, res) => {
188
+ try {
189
+ const id = parseInt(req.params.id, 10);
190
+ if (isNaN(id)) {
191
+ return res.status(400).json({ error: 'Invalid agent ID' });
192
+ }
193
+ const { name, cli_type, cli_command, model, api_key, system_prompt, temperature, max_tokens, additional_args } = req.body;
194
+ // Validate cli_type if provided
195
+ if (cli_type !== undefined) {
196
+ const validCliTypes = ['claude', 'gemini', 'openai', 'xai', 'ollama', 'aider', 'continue', 'custom'];
197
+ if (!validCliTypes.includes(cli_type)) {
198
+ return res.status(400).json({ error: `Invalid cli_type. Must be one of: ${validCliTypes.join(', ')}` });
199
+ }
200
+ }
201
+ // Validate temperature if provided
202
+ if (temperature !== undefined && temperature !== null) {
203
+ if (typeof temperature !== 'number' || temperature < 0 || temperature > 2) {
204
+ return res.status(400).json({ error: 'Temperature must be a number between 0 and 2' });
205
+ }
206
+ }
207
+ // Validate max_tokens if provided
208
+ if (max_tokens !== undefined && max_tokens !== null) {
209
+ if (typeof max_tokens !== 'number' || max_tokens < 1) {
210
+ return res.status(400).json({ error: 'max_tokens must be a positive number' });
211
+ }
212
+ }
213
+ const updates = {};
214
+ if (name !== undefined)
215
+ updates.name = name;
216
+ if (cli_type !== undefined)
217
+ updates.cli_type = cli_type;
218
+ if (cli_command !== undefined)
219
+ updates.cli_command = cli_command;
220
+ if (model !== undefined)
221
+ updates.model = model;
222
+ if (api_key !== undefined)
223
+ updates.api_key = api_key;
224
+ if (system_prompt !== undefined)
225
+ updates.system_prompt = system_prompt;
226
+ if (temperature !== undefined)
227
+ updates.temperature = temperature;
228
+ if (max_tokens !== undefined)
229
+ updates.max_tokens = max_tokens;
230
+ if (additional_args !== undefined)
231
+ updates.additional_args = additional_args;
232
+ const agent = db.updateAgent(id, updates);
233
+ res.json(agent);
234
+ }
235
+ catch (error) {
236
+ if (error instanceof Error && error.message.includes('not found')) {
237
+ return res.status(404).json({ error: error.message });
238
+ }
239
+ if (error instanceof Error && error.message.includes('already exists')) {
240
+ return res.status(409).json({ error: error.message });
241
+ }
242
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
243
+ }
244
+ });
245
+ // Delete agent
246
+ router.delete('/agents/:id', (req, res) => {
247
+ try {
248
+ const id = parseInt(req.params.id, 10);
249
+ if (isNaN(id)) {
250
+ return res.status(400).json({ error: 'Invalid agent ID' });
251
+ }
252
+ // Stop agent if running
253
+ const running = runningAgents.get(id);
254
+ if (running) {
255
+ running.process.kill();
256
+ runningAgents.delete(id);
257
+ }
258
+ db.removeAgent(id);
259
+ res.status(204).send();
260
+ }
261
+ catch (error) {
262
+ if (error instanceof Error && error.message.includes('not found')) {
263
+ return res.status(404).json({ error: error.message });
264
+ }
265
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
266
+ }
267
+ });
268
+ // Launch agent
269
+ router.post('/agents/:id/launch', (req, res) => {
270
+ try {
271
+ const id = parseInt(req.params.id, 10);
272
+ if (isNaN(id)) {
273
+ return res.status(400).json({ error: 'Invalid agent ID' });
274
+ }
275
+ // Check if already running
276
+ if (runningAgents.has(id)) {
277
+ return res.status(409).json({ error: 'Agent is already running', running: runningAgents.get(id).info });
278
+ }
279
+ const agent = db.getAgent(id);
280
+ if (!agent) {
281
+ return res.status(404).json({ error: 'Agent not found' });
282
+ }
283
+ const project = db.getProject(agent.project_id);
284
+ if (!project) {
285
+ return res.status(404).json({ error: 'Project not found' });
286
+ }
287
+ const { command, args, env } = buildAgentCommand(agent);
288
+ if (!command) {
289
+ return res.status(400).json({ error: 'No command configured for this agent' });
290
+ }
291
+ // Spawn the process
292
+ const childProcess = (0, child_process_1.spawn)(command, args, {
293
+ cwd: project.path,
294
+ env,
295
+ stdio: 'pipe',
296
+ detached: true,
297
+ });
298
+ if (!childProcess.pid) {
299
+ return res.status(500).json({ error: 'Failed to start agent process' });
300
+ }
301
+ const runningInfo = {
302
+ pid: childProcess.pid,
303
+ agentId: agent.id,
304
+ agentName: agent.name,
305
+ projectId: project.id,
306
+ projectPath: project.path,
307
+ cliType: agent.cli_type,
308
+ startedAt: Math.floor(Date.now() / 1000),
309
+ };
310
+ runningAgents.set(id, { process: childProcess, info: runningInfo });
311
+ // Clean up when process exits
312
+ childProcess.on('exit', () => {
313
+ runningAgents.delete(id);
314
+ });
315
+ childProcess.on('error', () => {
316
+ runningAgents.delete(id);
317
+ });
318
+ // Unref to allow the parent to exit independently
319
+ childProcess.unref();
320
+ res.status(201).json(runningInfo);
321
+ }
322
+ catch (error) {
323
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
324
+ }
325
+ });
326
+ // Stop agent
327
+ router.post('/agents/:id/stop', (req, res) => {
328
+ try {
329
+ const id = parseInt(req.params.id, 10);
330
+ if (isNaN(id)) {
331
+ return res.status(400).json({ error: 'Invalid agent ID' });
332
+ }
333
+ const running = runningAgents.get(id);
334
+ if (!running) {
335
+ return res.status(404).json({ error: 'Agent is not running' });
336
+ }
337
+ running.process.kill();
338
+ runningAgents.delete(id);
339
+ res.status(204).send();
340
+ }
341
+ catch (error) {
342
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
343
+ }
344
+ });
345
+ // Get all running agents
346
+ router.get('/agents/running', (req, res) => {
347
+ try {
348
+ const running = Array.from(runningAgents.values()).map(r => r.info);
349
+ res.json(running);
350
+ }
351
+ catch (error) {
352
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
353
+ }
354
+ });
355
+ // Get running status for specific agent
356
+ router.get('/agents/:id/status', (req, res) => {
357
+ try {
358
+ const id = parseInt(req.params.id, 10);
359
+ if (isNaN(id)) {
360
+ return res.status(400).json({ error: 'Invalid agent ID' });
361
+ }
362
+ const running = runningAgents.get(id);
363
+ if (running) {
364
+ res.json({ running: true, info: running.info });
365
+ }
366
+ else {
367
+ res.json({ running: false });
368
+ }
369
+ }
370
+ catch (error) {
371
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
372
+ }
373
+ });
374
+ exports.default = router;
375
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMjC,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AAYhC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQjC,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AAchC,eAAe,MAAM,CAAC"}
@@ -8,11 +8,15 @@ const projects_1 = __importDefault(require("./projects"));
8
8
  const settings_1 = __importDefault(require("./settings"));
9
9
  const workspaces_1 = __importDefault(require("./workspaces"));
10
10
  const backup_1 = __importDefault(require("./backup"));
11
+ const agents_1 = __importDefault(require("./agents"));
12
+ const todos_1 = __importDefault(require("./todos"));
11
13
  const router = (0, express_1.Router)();
12
14
  router.use('/projects', projects_1.default);
13
15
  router.use('/settings', settings_1.default);
14
16
  router.use('/workspaces', workspaces_1.default);
15
17
  router.use('/backup', backup_1.default);
18
+ router.use('/', agents_1.default); // Mounts both /projects/:id/agents and /agents routes
19
+ router.use('/', todos_1.default); // Mounts todo list and task routes
16
20
  // Health check endpoint
17
21
  router.get('/health', (req, res) => {
18
22
  res.json({ status: 'ok', timestamp: new Date().toISOString() });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AACjC,0DAAwC;AACxC,0DAAwC;AACxC,8DAA4C;AAC5C,sDAAoC;AAEpC,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAc,CAAC,CAAC;AACxC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAc,CAAC,CAAC;AACxC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,oBAAgB,CAAC,CAAC;AAC5C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAY,CAAC,CAAC;AAEpC,wBAAwB;AACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AACjC,0DAAwC;AACxC,0DAAwC;AACxC,8DAA4C;AAC5C,sDAAoC;AACpC,sDAAoC;AACpC,oDAAkC;AAElC,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAc,CAAC,CAAC;AACxC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAc,CAAC,CAAC;AACxC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,oBAAgB,CAAC,CAAC;AAC5C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAY,CAAC,CAAC;AACpC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAY,CAAC,CAAC,CAAC,sDAAsD;AACrF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,eAAW,CAAC,CAAC,CAAE,mCAAmC;AAElE,wBAAwB;AACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Router } from 'express';
2
+ declare const router: Router;
3
+ export default router;
4
+ //# sourceMappingURL=todos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todos.d.ts","sourceRoot":"","sources":["../../src/routes/todos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AAumBhC,eAAe,MAAM,CAAC"}