@ariso-ai/ivan 1.0.3 → 1.0.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 (63) hide show
  1. package/README.md +7 -21
  2. package/dist/config.d.ts +4 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +43 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/database/migrations/009_create_memory_tables.d.ts +3 -0
  7. package/dist/database/migrations/009_create_memory_tables.d.ts.map +1 -0
  8. package/dist/database/migrations/009_create_memory_tables.js +35 -0
  9. package/dist/database/migrations/009_create_memory_tables.js.map +1 -0
  10. package/dist/index.js +12 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/services/address-task-executor.d.ts.map +1 -1
  13. package/dist/services/address-task-executor.js +5 -3
  14. package/dist/services/address-task-executor.js.map +1 -1
  15. package/dist/services/embedding-service.d.ts +12 -0
  16. package/dist/services/embedding-service.d.ts.map +1 -0
  17. package/dist/services/embedding-service.js +51 -0
  18. package/dist/services/embedding-service.js.map +1 -0
  19. package/dist/services/git-manager.d.ts +1 -0
  20. package/dist/services/git-manager.d.ts.map +1 -1
  21. package/dist/services/git-manager.js +10 -4
  22. package/dist/services/git-manager.js.map +1 -1
  23. package/dist/services/memory-service.d.ts +26 -0
  24. package/dist/services/memory-service.d.ts.map +1 -0
  25. package/dist/services/memory-service.js +128 -0
  26. package/dist/services/memory-service.js.map +1 -0
  27. package/package.json +2 -2
  28. package/dist/agent.d.ts +0 -11
  29. package/dist/agent.d.ts.map +0 -1
  30. package/dist/agent.js +0 -48
  31. package/dist/agent.js.map +0 -1
  32. package/dist/config/config.d.ts +0 -20
  33. package/dist/config/config.d.ts.map +0 -1
  34. package/dist/config/config.js +0 -187
  35. package/dist/config/config.js.map +0 -1
  36. package/dist/database/database.d.ts +0 -12
  37. package/dist/database/database.d.ts.map +0 -1
  38. package/dist/database/database.js +0 -45
  39. package/dist/database/database.js.map +0 -1
  40. package/dist/database/migrations/001_initial_schema.d.ts +0 -3
  41. package/dist/database/migrations/001_initial_schema.d.ts.map +0 -1
  42. package/dist/database/migrations/001_initial_schema.js +0 -66
  43. package/dist/database/migrations/001_initial_schema.js.map +0 -1
  44. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts +0 -3
  45. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts.map +0 -1
  46. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js +0 -15
  47. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js.map +0 -1
  48. package/dist/scripts/task-executor.d.ts +0 -3
  49. package/dist/scripts/task-executor.d.ts.map +0 -1
  50. package/dist/scripts/task-executor.js +0 -139
  51. package/dist/scripts/task-executor.js.map +0 -1
  52. package/dist/scripts/task-planner.d.ts +0 -3
  53. package/dist/scripts/task-planner.d.ts.map +0 -1
  54. package/dist/scripts/task-planner.js +0 -81
  55. package/dist/scripts/task-planner.js.map +0 -1
  56. package/dist/services/claude-planner.d.ts +0 -15
  57. package/dist/services/claude-planner.d.ts.map +0 -1
  58. package/dist/services/claude-planner.js +0 -107
  59. package/dist/services/claude-planner.js.map +0 -1
  60. package/dist/services/docker-orchestrator.d.ts +0 -11
  61. package/dist/services/docker-orchestrator.d.ts.map +0 -1
  62. package/dist/services/docker-orchestrator.js +0 -85
  63. package/dist/services/docker-orchestrator.js.map +0 -1
@@ -1,12 +0,0 @@
1
- import { Kysely } from 'kysely';
2
- import { Database as DatabaseSchema } from './types.js';
3
- export declare class DatabaseManager {
4
- private db;
5
- private dbPath;
6
- constructor();
7
- initialize(): Promise<void>;
8
- private runMigrations;
9
- getDatabase(): Kysely<DatabaseSchema>;
10
- close(): Promise<void>;
11
- }
12
- //# sourceMappingURL=database.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/database/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAM/C,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAIxD,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,MAAM,CAAS;;IAmBV,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAY1B,aAAa;IAKpB,WAAW,IAAI,MAAM,CAAC,cAAc,CAAC;IAI/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -1,45 +0,0 @@
1
- import { Kysely, SqliteDialect } from 'kysely';
2
- import Database from 'better-sqlite3';
3
- import * as path from 'path';
4
- import * as fs from 'fs';
5
- import * as os from 'os';
6
- import chalk from 'chalk';
7
- import { MigrationRunner } from './migration.js';
8
- import { migrations } from './migrations/index.js';
9
- export class DatabaseManager {
10
- db;
11
- dbPath;
12
- constructor() {
13
- const ivanDir = path.join(os.homedir(), '.ivan');
14
- this.dbPath = path.join(ivanDir, 'db.sqlite');
15
- if (!fs.existsSync(ivanDir)) {
16
- fs.mkdirSync(ivanDir, { recursive: true });
17
- }
18
- const sqlite = new Database(this.dbPath);
19
- this.db = new Kysely({
20
- dialect: new SqliteDialect({
21
- database: sqlite
22
- })
23
- });
24
- }
25
- async initialize() {
26
- console.log(chalk.gray('🗄️ Initializing database...'));
27
- const dbExists = fs.existsSync(this.dbPath);
28
- if (!dbExists) {
29
- console.log(chalk.gray('📁 Creating database file...'));
30
- }
31
- await this.runMigrations();
32
- console.log(chalk.green('✓ Database initialized'));
33
- }
34
- async runMigrations() {
35
- const migrationRunner = new MigrationRunner(this.db);
36
- await migrationRunner.runMigrations(migrations);
37
- }
38
- getDatabase() {
39
- return this.db;
40
- }
41
- async close() {
42
- await this.db.destroy();
43
- }
44
- }
45
- //# sourceMappingURL=database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/database/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,OAAO,eAAe;IAClB,EAAE,CAAyB;IAC3B,MAAM,CAAS;IAEvB;QACE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,CAAC,EAAE,GAAG,IAAI,MAAM,CAAiB;YACnC,OAAO,EAAE,IAAI,aAAa,CAAC;gBACzB,QAAQ,EAAE,MAAM;aACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- import { Migration } from '../migration.js';
2
- export declare const initialSchema: Migration;
3
- //# sourceMappingURL=001_initial_schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"001_initial_schema.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/001_initial_schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,aAAa,EAAE,SAuE3B,CAAC"}
@@ -1,66 +0,0 @@
1
- export const initialSchema = {
2
- id: '001_initial_schema',
3
- name: 'Create initial schema with jobs, tasks, agents, and executions',
4
- async up(db) {
5
- await db.schema
6
- .createTable('jobs')
7
- .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
8
- .addColumn('title', 'text', (col) => col.notNull())
9
- .addColumn('description', 'text')
10
- .addColumn('status', 'text', (col) => col.notNull().defaultTo('pending'))
11
- .addColumn('repository', 'text', (col) => col.notNull())
12
- .addColumn('created_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
13
- .addColumn('updated_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
14
- .addColumn('completed_at', 'text')
15
- .execute();
16
- await db.schema
17
- .createTable('tasks')
18
- .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
19
- .addColumn('job_id', 'integer', (col) => col.notNull().references('jobs.id').onDelete('cascade'))
20
- .addColumn('title', 'text', (col) => col.notNull())
21
- .addColumn('description', 'text')
22
- .addColumn('status', 'text', (col) => col.notNull().defaultTo('pending'))
23
- .addColumn('order_index', 'integer', (col) => col.notNull().defaultTo(0))
24
- .addColumn('created_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
25
- .addColumn('updated_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
26
- .addColumn('completed_at', 'text')
27
- .execute();
28
- await db.schema
29
- .createTable('agents')
30
- .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
31
- .addColumn('name', 'text', (col) => col.notNull())
32
- .addColumn('type', 'text', (col) => col.notNull())
33
- .addColumn('config', 'text')
34
- .addColumn('created_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
35
- .execute();
36
- await db.schema
37
- .createTable('executions')
38
- .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
39
- .addColumn('task_id', 'integer', (col) => col.notNull().references('tasks.id').onDelete('cascade'))
40
- .addColumn('agent_id', 'integer', (col) => col.notNull().references('agents.id'))
41
- .addColumn('input', 'text', (col) => col.notNull())
42
- .addColumn('output', 'text')
43
- .addColumn('status', 'text', (col) => col.notNull().defaultTo('running'))
44
- .addColumn('started_at', 'text', (col) => col.notNull().defaultTo('CURRENT_TIMESTAMP'))
45
- .addColumn('completed_at', 'text')
46
- .addColumn('error_message', 'text')
47
- .execute();
48
- await db.schema
49
- .createIndex('idx_tasks_job_id')
50
- .on('tasks')
51
- .column('job_id')
52
- .execute();
53
- await db.schema
54
- .createIndex('idx_executions_task_id')
55
- .on('executions')
56
- .column('task_id')
57
- .execute();
58
- },
59
- async down(db) {
60
- await db.schema.dropTable('executions').execute();
61
- await db.schema.dropTable('tasks').execute();
62
- await db.schema.dropTable('agents').execute();
63
- await db.schema.dropTable('jobs').execute();
64
- }
65
- };
66
- //# sourceMappingURL=001_initial_schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"001_initial_schema.js","sourceRoot":"","sources":["../../../src/database/migrations/001_initial_schema.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Migration } from '../types.js';
2
- export declare const migration: Migration;
3
- //# sourceMappingURL=006_add_comment_url_and_commit_to_tasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"006_add_comment_url_and_commit_to_tasks.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/006_add_comment_url_and_commit_to_tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,eAAO,MAAM,SAAS,EAAE,SAavB,CAAC"}
@@ -1,15 +0,0 @@
1
- export const migration = {
2
- id: 6,
3
- name: 'add_comment_url_and_commit_to_tasks',
4
- up: `
5
- ALTER TABLE tasks
6
- ADD COLUMN comment_url TEXT,
7
- ADD COLUMN commit TEXT
8
- `,
9
- down: `
10
- ALTER TABLE tasks
11
- DROP COLUMN comment_url,
12
- DROP COLUMN commit
13
- `
14
- };
15
- //# sourceMappingURL=006_add_comment_url_and_commit_to_tasks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"006_add_comment_url_and_commit_to_tasks.js","sourceRoot":"","sources":["../../../src/database/migrations/006_add_comment_url_and_commit_to_tasks.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,EAAE,EAAE,CAAC;IACL,IAAI,EAAE,qCAAqC;IAC3C,EAAE,EAAE;;;;GAIH;IACD,IAAI,EAAE;;;;GAIL;CACF,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=task-executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/scripts/task-executor.ts"],"names":[],"mappings":""}
@@ -1,139 +0,0 @@
1
- #!/usr/bin/env node
2
- import { exec } from 'child_process';
3
- import { promisify } from 'util';
4
- import * as fs from 'fs';
5
- import { Kysely, SqliteDialect } from 'kysely';
6
- import Database from 'better-sqlite3';
7
- import OpenAI from 'openai';
8
- const execAsync = promisify(exec);
9
- async function executeCommand(command) {
10
- try {
11
- const { stdout, stderr } = await execAsync(command);
12
- return { stdout, stderr };
13
- }
14
- catch (error) {
15
- console.error(`Command failed: ${command}`);
16
- console.error(error);
17
- throw error;
18
- }
19
- }
20
- async function generateCommitMessage(changes) {
21
- const apiKey = process.env.OPENAI_API_KEY;
22
- if (!apiKey) {
23
- console.warn('OpenAI API key not provided, using default commit message');
24
- return `feat: complete task ${process.env.TASK_TITLE}`;
25
- }
26
- const openai = new OpenAI({
27
- apiKey: apiKey
28
- });
29
- const prompt = `Based on the following git diff, generate a concise and meaningful commit message.
30
- The message should follow conventional commit format (feat:, fix:, docs:, etc.) and be under 72 characters.
31
- Respond with ONLY the commit message, no other text.
32
-
33
- Changes:
34
- ${changes.substring(0, 2000)}`;
35
- try {
36
- const completion = await openai.chat.completions.create({
37
- model: 'gpt-4',
38
- messages: [
39
- {
40
- role: 'system',
41
- content: 'You are a helpful assistant that generates clear, concise git commit messages.'
42
- },
43
- {
44
- role: 'user',
45
- content: prompt
46
- }
47
- ],
48
- temperature: 0.3,
49
- max_tokens: 100
50
- });
51
- const message = completion.choices[0]?.message?.content?.trim();
52
- return message || `feat: complete task ${process.env.TASK_TITLE}`;
53
- }
54
- catch (error) {
55
- console.error('Failed to generate commit message:', error);
56
- return `feat: complete task ${process.env.TASK_TITLE}`;
57
- }
58
- }
59
- async function main() {
60
- const env = process.env;
61
- console.log('\n📦 Task Executor Starting');
62
- console.log(`Task: ${env.TASK_TITLE}`);
63
- console.log(`Description: ${env.TASK_DESCRIPTION}\n`);
64
- try {
65
- // Clone repository
66
- console.log('📥 Cloning repository...');
67
- await executeCommand(`git clone ${env.REPOSITORY} /workspace/repo`);
68
- process.chdir('/workspace/repo');
69
- // Create and checkout branch
70
- console.log(`🌿 Creating branch: ${env.BRANCH_NAME}`);
71
- await executeCommand(`git checkout -b ${env.BRANCH_NAME}`);
72
- // Execute Claude Code with the task
73
- console.log('🤖 Running Claude Code...');
74
- const claudeCommand = `echo '${env.TASK_DESCRIPTION.replace(/'/g, "'\\''")}' | claude --dangerously-skip-permissions`;
75
- await executeCommand(claudeCommand);
76
- // Check for changes
77
- const { stdout: statusOutput } = await executeCommand('git status --porcelain');
78
- if (statusOutput.trim()) {
79
- console.log('📝 Changes detected, preparing commit...');
80
- // Add all changes
81
- await executeCommand('git add -A');
82
- // Get diff for commit message
83
- const { stdout: diffOutput } = await executeCommand('git diff --cached');
84
- // Generate commit message
85
- console.log('✍️ Generating commit message...');
86
- const commitMessage = await generateCommitMessage(diffOutput);
87
- // Commit changes
88
- console.log(`💾 Committing: ${commitMessage}`);
89
- await executeCommand(`git commit -m "${commitMessage}"`);
90
- console.log('✅ Task completed successfully!');
91
- }
92
- else {
93
- console.log('ℹ️ No changes were made by Claude Code');
94
- }
95
- // Update task status in database
96
- if (env.IVAN_DB_PATH && fs.existsSync(env.IVAN_DB_PATH)) {
97
- const sqlite = new Database(env.IVAN_DB_PATH);
98
- const db = new Kysely({
99
- dialect: new SqliteDialect({
100
- database: sqlite
101
- })
102
- });
103
- await db
104
- .updateTable('tasks')
105
- .set({
106
- status: 'completed',
107
- completed_at: new Date().toISOString(),
108
- updated_at: new Date().toISOString()
109
- })
110
- .where('id', '=', parseInt(env.TASK_ID))
111
- .execute();
112
- await db.destroy();
113
- }
114
- }
115
- catch (error) {
116
- console.error('❌ Task execution failed:', error);
117
- // Update task status to failed
118
- if (env.IVAN_DB_PATH && fs.existsSync(env.IVAN_DB_PATH)) {
119
- const sqlite = new Database(env.IVAN_DB_PATH);
120
- const db = new Kysely({
121
- dialect: new SqliteDialect({
122
- database: sqlite
123
- })
124
- });
125
- await db
126
- .updateTable('tasks')
127
- .set({
128
- status: 'failed',
129
- updated_at: new Date().toISOString()
130
- })
131
- .where('id', '=', parseInt(env.TASK_ID))
132
- .execute();
133
- await db.destroy();
134
- }
135
- process.exit(1);
136
- }
137
- }
138
- main().catch(console.error);
139
- //# sourceMappingURL=task-executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-executor.js","sourceRoot":"","sources":["../../src/scripts/task-executor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=task-planner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-planner.d.ts","sourceRoot":"","sources":["../../src/scripts/task-planner.ts"],"names":[],"mappings":""}
@@ -1,81 +0,0 @@
1
- #!/usr/bin/env node
2
- import { spawn } from 'child_process';
3
- import { exec } from 'child_process';
4
- import { promisify } from 'util';
5
- const execAsync = promisify(exec);
6
- async function executeCommand(command) {
7
- try {
8
- const { stdout, stderr } = await execAsync(command);
9
- return { stdout, stderr };
10
- }
11
- catch (error) {
12
- console.error(`Command failed: ${command}`);
13
- console.error(error);
14
- throw error;
15
- }
16
- }
17
- async function main() {
18
- const env = process.env;
19
- console.log('📋 Task Planner Starting');
20
- console.log(`Request: ${env.USER_REQUEST}\n`);
21
- try {
22
- // Clone repository
23
- console.log('📥 Cloning repository...');
24
- await executeCommand(`git clone ${env.REPOSITORY} /workspace/repo`);
25
- process.chdir('/workspace/repo');
26
- const prompt = 'Say the word "maximum"';
27
- console.log('🤔 Planning tasks with Claude...');
28
- // Use spawn to call Claude with real-time output
29
- const claudeProcess = spawn('claude', [
30
- '-p',
31
- `"${prompt}"`,
32
- '--output-format',
33
- 'json',
34
- '--permission-mode',
35
- 'plan'
36
- ]);
37
- let stdout = '';
38
- let stderr = '';
39
- claudeProcess.stdout.on('data', (data) => {
40
- const chunk = data.toString();
41
- stdout += chunk;
42
- process.stdout.write(chunk);
43
- });
44
- claudeProcess.stderr.on('data', (data) => {
45
- const chunk = data.toString();
46
- stderr += chunk;
47
- process.stderr.write(chunk);
48
- });
49
- await new Promise((resolve, reject) => {
50
- claudeProcess.on('close', (code) => {
51
- if (code !== 0) {
52
- reject(new Error(`Claude CLI exited with code ${code}: ${stderr}`));
53
- }
54
- else {
55
- resolve();
56
- }
57
- });
58
- claudeProcess.on('error', (error) => {
59
- reject(new Error(`Failed to start Claude CLI: ${error}`));
60
- });
61
- });
62
- // Parse the Claude CLI response
63
- const claudeResponse = JSON.parse(stdout);
64
- // Extract the JSON from the result field (may be wrapped in ```json blocks)
65
- let resultContent = claudeResponse.result;
66
- // Remove markdown code blocks if present
67
- resultContent = resultContent.replace(/^```json\s*/, '').replace(/\s*```$/, '');
68
- const response = JSON.parse(resultContent);
69
- console.log(`✓ Planned ${response.tasks.length} tasks`);
70
- // Output the result as JSON for the parent process to read
71
- console.log('TASK_PLAN_START');
72
- console.log(JSON.stringify(response));
73
- console.log('TASK_PLAN_END');
74
- }
75
- catch (error) {
76
- console.error('❌ Task planning failed:', error);
77
- process.exit(1);
78
- }
79
- }
80
- main().catch(console.error);
81
- //# sourceMappingURL=task-planner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-planner.js","sourceRoot":"","sources":["../../src/scripts/task-planner.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export interface TaskPlan {
2
- title: string;
3
- description: string;
4
- order: number;
5
- }
6
- export interface TaskPlanResponse {
7
- tasks: TaskPlan[];
8
- }
9
- export declare class ClaudePlannerService {
10
- private repository;
11
- private anthropicApiKey;
12
- constructor(repository: string, anthropicApiKey: string);
13
- planTasks(userRequest: string): Promise<TaskPlanResponse>;
14
- }
15
- //# sourceMappingURL=claude-planner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-planner.d.ts","sourceRoot":"","sources":["../../src/services/claude-planner.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;gBAEpB,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAKjD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA+GhE"}
@@ -1,107 +0,0 @@
1
- import { exec, spawn } from 'child_process';
2
- import { promisify } from 'util';
3
- import * as path from 'path';
4
- import * as os from 'os';
5
- import chalk from 'chalk';
6
- const execAsync = promisify(exec);
7
- export class ClaudePlannerService {
8
- repository;
9
- anthropicApiKey;
10
- constructor(repository, anthropicApiKey) {
11
- this.repository = repository;
12
- this.anthropicApiKey = anthropicApiKey;
13
- }
14
- async planTasks(userRequest) {
15
- console.log(chalk.gray('🤔 Planning tasks with Claude Code...'));
16
- try {
17
- const homeDir = os.homedir();
18
- const scriptPath = path.join(process.cwd(), 'dist', 'scripts', 'task-planner.js');
19
- console.log(chalk.gray('Starting planning container...'));
20
- // Start container in background
21
- const containerName = `ivan-planner-${Date.now()}`;
22
- const startCommand = `docker run -d --name ${containerName} \
23
- -e USER_REQUEST="${userRequest.replace(/"/g, '\\"')}" \
24
- -e REPOSITORY="${this.repository}" \
25
- -e HOST_HOME="${homeDir}" \
26
- -e ANTHROPIC_API_KEY="${this.anthropicApiKey}" \
27
- -w /workspace \
28
- node:24-alpine \
29
- sleep 300`;
30
- await execAsync(startCommand);
31
- let stdout = '';
32
- let stderr = '';
33
- try {
34
- // Create app directory and copy scripts to container
35
- await execAsync(`docker exec ${containerName} mkdir -p /app`);
36
- await execAsync(`docker cp "${scriptPath}" ${containerName}:/app/task-planner.js`);
37
- const setupScript = path.join(process.cwd(), 'src', 'scripts', 'setup-container.sh');
38
- await execAsync(`docker cp "${setupScript}" ${containerName}:/app/setup-container.sh`);
39
- // Copy SSH and git configs
40
- await execAsync(`docker exec ${containerName} mkdir -p /root/.ssh /root/.claude/plugins`);
41
- await execAsync(`docker cp "${homeDir}/.ssh/." ${containerName}:/root/.ssh/`).catch(() => { });
42
- await execAsync(`docker cp "${homeDir}/.claude/." ${containerName}:/root/.claude/`).catch(() => { });
43
- await execAsync(`docker cp "${homeDir}/.gitconfig" ${containerName}:/root/.gitconfig`).catch(() => { });
44
- console.log('running docker');
45
- // Execute setup and task planning with streaming output
46
- const dockerProcess = spawn('docker', [
47
- 'exec', containerName, 'sh', '-c',
48
- 'chmod +x /app/setup-container.sh && /app/setup-container.sh && echo "Starting task planner..." && CLAUDE_CONFIG_DIR=/root/.claude node /app/task-planner.js'
49
- ]);
50
- dockerProcess.stdout.on('data', (data) => {
51
- const chunk = data.toString();
52
- stdout += chunk;
53
- process.stdout.write(chunk);
54
- });
55
- dockerProcess.stderr.on('data', (data) => {
56
- const chunk = data.toString();
57
- stderr += chunk;
58
- process.stderr.write(chunk);
59
- });
60
- await new Promise((resolve, reject) => {
61
- dockerProcess.on('close', (code) => {
62
- if (code !== 0) {
63
- reject(new Error(`Docker exec exited with code ${code}`));
64
- }
65
- else {
66
- resolve();
67
- }
68
- });
69
- dockerProcess.on('error', (error) => {
70
- reject(new Error(`Failed to execute docker command: ${error}`));
71
- });
72
- });
73
- console.log(chalk.gray('=== CONTAINER OUTPUT START ==='));
74
- console.log(stdout);
75
- console.log(chalk.gray('=== CONTAINER OUTPUT END ==='));
76
- if (stderr) {
77
- console.log(chalk.yellow('=== CONTAINER STDERR START ==='));
78
- console.log(stderr);
79
- console.log(chalk.yellow('=== CONTAINER STDERR END ==='));
80
- }
81
- }
82
- finally {
83
- // Clean up container
84
- await execAsync(`docker rm -f ${containerName}`).catch(() => { });
85
- }
86
- // Extract the JSON response from between the markers
87
- const startMarker = 'TASK_PLAN_START';
88
- const endMarker = 'TASK_PLAN_END';
89
- const startIndex = stdout.indexOf(startMarker);
90
- const endIndex = stdout.indexOf(endMarker);
91
- if (startIndex === -1 || endIndex === -1) {
92
- console.log(chalk.red('Failed to find task plan in output:'));
93
- console.log(stdout);
94
- throw new Error('Task plan markers not found in output');
95
- }
96
- const jsonString = stdout.substring(startIndex + startMarker.length, endIndex).trim();
97
- const response = JSON.parse(jsonString);
98
- console.log(chalk.green(`✓ Planned ${response.tasks.length} tasks`));
99
- return response;
100
- }
101
- catch (error) {
102
- console.error(chalk.red('Failed to plan tasks:'), error);
103
- throw new Error('Task planning failed');
104
- }
105
- }
106
- }
107
- //# sourceMappingURL=claude-planner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-planner.js","sourceRoot":"","sources":["../../src/services/claude-planner.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { TaskTable } from '../database/types.js';
2
- import { JobManager } from './job-manager.js';
3
- export declare class DockerOrchestrator {
4
- private jobManager;
5
- private repository;
6
- private openAiApiKey;
7
- constructor(jobManager: JobManager, repository: string, openAiApiKey: string);
8
- runTask(task: TaskTable): Promise<void>;
9
- runAllTasks(jobId: number): Promise<void>;
10
- }
11
- //# sourceMappingURL=docker-orchestrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker-orchestrator.d.ts","sourceRoot":"","sources":["../../src/services/docker-orchestrator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAMtE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAchD"}