@ariso-ai/ivan 1.0.4 → 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 (70) 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/job-manager.d.ts +0 -1
  24. package/dist/services/job-manager.d.ts.map +1 -1
  25. package/dist/services/job-manager.js +0 -9
  26. package/dist/services/job-manager.js.map +1 -1
  27. package/dist/services/memory-service.d.ts +26 -0
  28. package/dist/services/memory-service.d.ts.map +1 -0
  29. package/dist/services/memory-service.js +128 -0
  30. package/dist/services/memory-service.js.map +1 -0
  31. package/dist/services/task-executor.d.ts.map +1 -1
  32. package/dist/services/task-executor.js +3 -7
  33. package/dist/services/task-executor.js.map +1 -1
  34. package/package.json +2 -2
  35. package/dist/agent.d.ts +0 -11
  36. package/dist/agent.d.ts.map +0 -1
  37. package/dist/agent.js +0 -48
  38. package/dist/agent.js.map +0 -1
  39. package/dist/config/config.d.ts +0 -20
  40. package/dist/config/config.d.ts.map +0 -1
  41. package/dist/config/config.js +0 -187
  42. package/dist/config/config.js.map +0 -1
  43. package/dist/database/database.d.ts +0 -12
  44. package/dist/database/database.d.ts.map +0 -1
  45. package/dist/database/database.js +0 -45
  46. package/dist/database/database.js.map +0 -1
  47. package/dist/database/migrations/001_initial_schema.d.ts +0 -3
  48. package/dist/database/migrations/001_initial_schema.d.ts.map +0 -1
  49. package/dist/database/migrations/001_initial_schema.js +0 -66
  50. package/dist/database/migrations/001_initial_schema.js.map +0 -1
  51. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts +0 -3
  52. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts.map +0 -1
  53. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js +0 -15
  54. package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js.map +0 -1
  55. package/dist/scripts/task-executor.d.ts +0 -3
  56. package/dist/scripts/task-executor.d.ts.map +0 -1
  57. package/dist/scripts/task-executor.js +0 -139
  58. package/dist/scripts/task-executor.js.map +0 -1
  59. package/dist/scripts/task-planner.d.ts +0 -3
  60. package/dist/scripts/task-planner.d.ts.map +0 -1
  61. package/dist/scripts/task-planner.js +0 -81
  62. package/dist/scripts/task-planner.js.map +0 -1
  63. package/dist/services/claude-planner.d.ts +0 -15
  64. package/dist/services/claude-planner.d.ts.map +0 -1
  65. package/dist/services/claude-planner.js +0 -107
  66. package/dist/services/claude-planner.js.map +0 -1
  67. package/dist/services/docker-orchestrator.d.ts +0 -11
  68. package/dist/services/docker-orchestrator.d.ts.map +0 -1
  69. package/dist/services/docker-orchestrator.js +0 -85
  70. package/dist/services/docker-orchestrator.js.map +0 -1
package/dist/agent.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { IvanConfig } from './config/config.js';
2
- import { DatabaseManager } from './database/database.js';
3
- export declare class OrchestrationAgent {
4
- private config;
5
- private dbManager;
6
- private claudePlanner;
7
- private jobManager;
8
- constructor(config: IvanConfig, dbManager: DatabaseManager);
9
- executeTask(task: string): Promise<void>;
10
- }
11
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAa;gBAEnB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe;IAO7C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA8CtD"}
package/dist/agent.js DELETED
@@ -1,48 +0,0 @@
1
- import { ClaudePlannerService } from './services/claude-planner.js';
2
- import { JobManager } from './services/job-manager.js';
3
- import { DockerOrchestrator } from './services/docker-orchestrator.js';
4
- import chalk from 'chalk';
5
- export class OrchestrationAgent {
6
- config;
7
- dbManager;
8
- claudePlanner;
9
- jobManager;
10
- constructor(config, dbManager) {
11
- this.config = config;
12
- this.dbManager = dbManager;
13
- this.claudePlanner = new ClaudePlannerService(config.repository, config.anthropicApiKey);
14
- this.jobManager = new JobManager(dbManager.getDatabase());
15
- }
16
- async executeTask(task) {
17
- console.log(chalk.gray('\nšŸ“ Task:'), task);
18
- console.log(chalk.gray('─'.repeat(50)));
19
- try {
20
- // Step 1: Plan tasks with Claude
21
- const taskPlan = await this.claudePlanner.planTasks(task);
22
- // Step 2: Create job and tasks in database
23
- const jobId = await this.jobManager.createJob(task, `User request: ${task}`, this.config.repository);
24
- await this.jobManager.createTasks(jobId, taskPlan.tasks);
25
- // Step 3: Update job status to in_progress
26
- await this.jobManager.updateJobStatus(jobId, 'in_progress');
27
- // Step 4: Run tasks in Docker containers
28
- const orchestrator = new DockerOrchestrator(this.jobManager, this.config.repository, this.config.openAiApiKey);
29
- await orchestrator.runAllTasks(jobId);
30
- // Step 5: Update job status to completed
31
- const tasks = await this.jobManager.getJobTasks(jobId);
32
- const allCompleted = tasks.every(t => t.status === 'completed');
33
- if (allCompleted) {
34
- await this.jobManager.updateJobStatus(jobId, 'completed');
35
- console.log(chalk.green(`\nāœ… Job #${jobId} completed successfully!`));
36
- }
37
- else {
38
- await this.jobManager.updateJobStatus(jobId, 'failed');
39
- console.log(chalk.yellow(`\nāš ļø Job #${jobId} completed with some failed tasks`));
40
- }
41
- }
42
- catch (error) {
43
- console.error(chalk.red('\nāŒ Task execution failed:'), error);
44
- throw error;
45
- }
46
- }
47
- }
48
- //# sourceMappingURL=agent.js.map
package/dist/agent.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAa;IACnB,SAAS,CAAkB;IAC3B,aAAa,CAAuB;IACpC,UAAU,CAAa;IAE/B,YAAY,MAAkB,EAAE,SAA0B;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,IAAY;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAE1D,2CAA2C;YAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAC3C,IAAI,EACJ,iBAAiB,IAAI,EAAE,EACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CACvB,CAAC;YAEF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEzD,2CAA2C;YAC3C,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAE5D,yCAAyC;YACzC,MAAM,YAAY,GAAG,IAAI,kBAAkB,CACzC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,YAAY,CACzB,CAAC;YAEF,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAEtC,yCAAyC;YACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;YAEhE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,0BAA0B,CAAC,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,KAAK,mCAAmC,CAAC,CAAC,CAAC;YACpF,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,20 +0,0 @@
1
- import { DatabaseManager } from '../database/database.js';
2
- export interface IvanConfig {
3
- openAiApiKey: string;
4
- anthropicApiKey: string;
5
- repository: string;
6
- }
7
- export declare class ConfigManager {
8
- private configDir;
9
- private configPath;
10
- private dbManager;
11
- constructor();
12
- initialize(): Promise<IvanConfig>;
13
- private loadConfig;
14
- private saveConfig;
15
- getConfig(): IvanConfig | null;
16
- getDatabase(): DatabaseManager;
17
- forceReconfigure(): Promise<IvanConfig>;
18
- private checkClaudeCodeInstallation;
19
- }
20
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAkB;;IAQtB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IA2E9C,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;IAQX,SAAS,IAAI,UAAU,GAAG,IAAI;IAI9B,WAAW,IAAI,eAAe;IAIxB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;YAiEtC,2BAA2B;CAyB1C"}
@@ -1,187 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import * as os from 'os';
4
- import { exec } from 'child_process';
5
- import { promisify } from 'util';
6
- import inquirer from 'inquirer';
7
- import chalk from 'chalk';
8
- import { DatabaseManager } from '../database/database.js';
9
- const execAsync = promisify(exec);
10
- export class ConfigManager {
11
- configDir;
12
- configPath;
13
- dbManager;
14
- constructor() {
15
- this.configDir = path.join(os.homedir(), '.ivan');
16
- this.configPath = path.join(this.configDir, 'config.json');
17
- this.dbManager = new DatabaseManager();
18
- }
19
- async initialize() {
20
- await this.dbManager.initialize();
21
- const existingConfig = this.loadConfig();
22
- if (existingConfig) {
23
- console.log(chalk.green('āœ“ Configuration found!'));
24
- return existingConfig;
25
- }
26
- console.log(chalk.cyan('\nšŸ¤– Welcome to Ivan - Your Coding Orchestration Agent\n'));
27
- console.log(chalk.yellow('Let\'s set up your configuration...\n'));
28
- await this.checkClaudeCodeInstallation();
29
- await this.dbManager.initialize();
30
- const answers = await inquirer.prompt([
31
- {
32
- type: 'input',
33
- name: 'repository',
34
- message: 'Enter the SSH repository URL (e.g., git@github.com:user/repo.git):',
35
- validate: (input) => {
36
- if (!input || input.trim() === '') {
37
- return 'Repository URL is required';
38
- }
39
- const trimmed = input.trim();
40
- const sshUrlPattern = /^git@[\w.-]+:[\w.-]+\/[\w.-]+\.git$/;
41
- if (!sshUrlPattern.test(trimmed)) {
42
- return 'Please enter a valid SSH repository URL (e.g., git@github.com:user/repo.git)';
43
- }
44
- return true;
45
- },
46
- filter: (input) => input.trim()
47
- },
48
- {
49
- type: 'password',
50
- name: 'openAiApiKey',
51
- message: 'Enter your OpenAI API key (for commit messages):',
52
- mask: '*',
53
- validate: (input) => {
54
- if (!input || input.trim() === '') {
55
- return 'OpenAI API key is required';
56
- }
57
- return true;
58
- }
59
- },
60
- {
61
- type: 'password',
62
- name: 'anthropicApiKey',
63
- message: 'Enter your Anthropic API key (for task planning):',
64
- mask: '*',
65
- validate: (input) => {
66
- if (!input || input.trim() === '') {
67
- return 'Anthropic API key is required';
68
- }
69
- return true;
70
- }
71
- }
72
- ]);
73
- const config = {
74
- repository: answers.repository,
75
- openAiApiKey: answers.openAiApiKey,
76
- anthropicApiKey: answers.anthropicApiKey
77
- };
78
- this.saveConfig(config);
79
- console.log(chalk.green('\nāœ“ Configuration saved successfully!\n'));
80
- return config;
81
- }
82
- loadConfig() {
83
- try {
84
- if (fs.existsSync(this.configPath)) {
85
- const configData = fs.readFileSync(this.configPath, 'utf-8');
86
- return JSON.parse(configData);
87
- }
88
- }
89
- catch (error) {
90
- console.error(chalk.red('Error loading configuration:'), error);
91
- }
92
- return null;
93
- }
94
- saveConfig(config) {
95
- if (!fs.existsSync(this.configDir)) {
96
- fs.mkdirSync(this.configDir, { recursive: true });
97
- }
98
- fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2));
99
- }
100
- getConfig() {
101
- return this.loadConfig();
102
- }
103
- getDatabase() {
104
- return this.dbManager;
105
- }
106
- async forceReconfigure() {
107
- console.log(chalk.cyan('\nšŸ”§ Reconfiguring Ivan...\n'));
108
- await this.dbManager.initialize();
109
- await this.checkClaudeCodeInstallation();
110
- const answers = await inquirer.prompt([
111
- {
112
- type: 'input',
113
- name: 'repository',
114
- message: 'Enter the SSH repository URL (e.g., git@github.com:user/repo.git):',
115
- validate: (input) => {
116
- if (!input || input.trim() === '') {
117
- return 'Repository URL is required';
118
- }
119
- const trimmed = input.trim();
120
- const sshUrlPattern = /^git@[\w.-]+:[\w.-]+\/[\w.-]+\.git$/;
121
- if (!sshUrlPattern.test(trimmed)) {
122
- return 'Please enter a valid SSH repository URL (e.g., git@github.com:user/repo.git)';
123
- }
124
- return true;
125
- },
126
- filter: (input) => input.trim()
127
- },
128
- {
129
- type: 'password',
130
- name: 'openAiApiKey',
131
- message: 'Enter your OpenAI API key (for commit messages):',
132
- mask: '*',
133
- validate: (input) => {
134
- if (!input || input.trim() === '') {
135
- return 'OpenAI API key is required';
136
- }
137
- return true;
138
- }
139
- },
140
- {
141
- type: 'password',
142
- name: 'anthropicApiKey',
143
- message: 'Enter your Anthropic API key (for task planning):',
144
- mask: '*',
145
- validate: (input) => {
146
- if (!input || input.trim() === '') {
147
- return 'Anthropic API key is required';
148
- }
149
- return true;
150
- }
151
- }
152
- ]);
153
- const config = {
154
- repository: answers.repository,
155
- openAiApiKey: answers.openAiApiKey,
156
- anthropicApiKey: answers.anthropicApiKey
157
- };
158
- this.saveConfig(config);
159
- console.log(chalk.green('\nāœ“ Configuration updated successfully!\n'));
160
- return config;
161
- }
162
- async checkClaudeCodeInstallation() {
163
- try {
164
- console.log(chalk.gray('šŸ” Checking for Claude Code installation...'));
165
- const { stdout } = await execAsync('claude --version');
166
- console.log(chalk.green('āœ“ Claude Code is installed'));
167
- console.log(chalk.gray(` Version: ${stdout.trim()}\n`));
168
- }
169
- catch {
170
- console.log(chalk.red('āœ— Claude Code not found'));
171
- console.log(chalk.yellow(' Please install Claude Code from: https://docs.anthropic.com/en/docs/claude-code\n'));
172
- const { continueAnyway } = await inquirer.prompt([
173
- {
174
- type: 'confirm',
175
- name: 'continueAnyway',
176
- message: 'Continue setup without Claude Code?',
177
- default: false
178
- }
179
- ]);
180
- if (!continueAnyway) {
181
- console.log(chalk.yellow('\nšŸ‘‹ Setup cancelled. Install Claude Code and try again.\n'));
182
- process.exit(0);
183
- }
184
- }
185
- }
186
- }
187
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -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":""}