@castlemilk/omega 0.6.0 → 0.6.1
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.
- package/dist/server/node_modules/.pnpm/lock.yaml +9 -0
- package/dist/server/node_modules/@omega/agent/dist/executor.d.ts +12 -0
- package/dist/server/node_modules/@omega/agent/dist/executor.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/executor.js +352 -0
- package/dist/server/node_modules/@omega/agent/dist/executor.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/git.d.ts +15 -0
- package/dist/server/node_modules/@omega/agent/dist/git.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/git.js +56 -0
- package/dist/server/node_modules/@omega/agent/dist/git.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/index.d.ts +7 -0
- package/dist/server/node_modules/@omega/agent/dist/index.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/index.js +7 -0
- package/dist/server/node_modules/@omega/agent/dist/index.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/planner.d.ts +12 -0
- package/dist/server/node_modules/@omega/agent/dist/planner.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/planner.js +64 -0
- package/dist/server/node_modules/@omega/agent/dist/planner.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts +7 -0
- package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompts.js +55 -0
- package/dist/server/node_modules/@omega/agent/dist/prompts.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/publisher.d.ts +7 -0
- package/dist/server/node_modules/@omega/agent/dist/publisher.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/publisher.js +57 -0
- package/dist/server/node_modules/@omega/agent/dist/publisher.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/tools.d.ts +10 -0
- package/dist/server/node_modules/@omega/agent/dist/tools.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/tools.js +92 -0
- package/dist/server/node_modules/@omega/agent/dist/tools.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/validator.d.ts +17 -0
- package/dist/server/node_modules/@omega/agent/dist/validator.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/validator.js +28 -0
- package/dist/server/node_modules/@omega/agent/dist/validator.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/package.json +19 -0
- package/dist/server/node_modules/@omega/core/dist/agent.d.ts +51 -0
- package/dist/server/node_modules/@omega/core/dist/agent.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/agent.js +2 -0
- package/dist/server/node_modules/@omega/core/dist/agent.js.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/index.d.ts +5 -0
- package/dist/server/node_modules/@omega/core/dist/index.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/index.js +5 -0
- package/dist/server/node_modules/@omega/core/dist/index.js.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/provider.d.ts +48 -0
- package/dist/server/node_modules/@omega/core/dist/provider.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/provider.js +2 -0
- package/dist/server/node_modules/@omega/core/dist/provider.js.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/provider.test.d.ts +2 -0
- package/dist/server/node_modules/@omega/core/dist/provider.test.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/provider.test.js +27 -0
- package/dist/server/node_modules/@omega/core/dist/provider.test.js.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/skill.d.ts +21 -0
- package/dist/server/node_modules/@omega/core/dist/skill.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/skill.js +2 -0
- package/dist/server/node_modules/@omega/core/dist/skill.js.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/task.d.ts +27 -0
- package/dist/server/node_modules/@omega/core/dist/task.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/core/dist/task.js +2 -0
- package/dist/server/node_modules/@omega/core/dist/task.js.map +1 -0
- package/dist/server/node_modules/@omega/core/package.json +13 -0
- package/dist/server/node_modules/@omega/db/dist/client.d.ts +8 -0
- package/dist/server/node_modules/@omega/db/dist/client.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/client.js +8 -0
- package/dist/server/node_modules/@omega/db/dist/client.js.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/index.d.ts +5 -0
- package/dist/server/node_modules/@omega/db/dist/index.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/index.js +5 -0
- package/dist/server/node_modules/@omega/db/dist/index.js.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/migrate.d.ts +2 -0
- package/dist/server/node_modules/@omega/db/dist/migrate.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/migrate.js +58 -0
- package/dist/server/node_modules/@omega/db/dist/migrate.js.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/seed.d.ts +2 -0
- package/dist/server/node_modules/@omega/db/dist/seed.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/seed.js +42 -0
- package/dist/server/node_modules/@omega/db/dist/seed.js.map +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/default.d.ts +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/default.js +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/edge.d.ts +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/edge.js +282 -0
- package/dist/server/node_modules/@omega/db/generated/client/index-browser.js +272 -0
- package/dist/server/node_modules/@omega/db/generated/client/index.d.ts +12787 -0
- package/dist/server/node_modules/@omega/db/generated/client/index.js +303 -0
- package/dist/server/node_modules/@omega/db/generated/client/libquery_engine-darwin-arm64.dylib.node +0 -0
- package/dist/server/node_modules/@omega/db/generated/client/package.json +124 -0
- package/dist/server/node_modules/@omega/db/generated/client/query_engine_bg.js +2 -0
- package/dist/server/node_modules/@omega/db/generated/client/query_engine_bg.wasm +0 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/edge-esm.js +31 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/edge.js +31 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/index-browser.d.ts +365 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/index-browser.js +13 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/library.d.ts +3403 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/library.js +143 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/react-native.js +80 -0
- package/dist/server/node_modules/@omega/db/generated/client/runtime/wasm.js +32 -0
- package/dist/server/node_modules/@omega/db/generated/client/schema.prisma +119 -0
- package/dist/server/node_modules/@omega/db/generated/client/wasm-edge-light-loader.mjs +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/wasm-worker-loader.mjs +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/wasm.d.ts +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/wasm.js +289 -0
- package/dist/server/node_modules/@omega/db/package.json +18 -0
- package/dist/server/node_modules/@omega/db/prisma/migrations/20260702110000_init/migration.sql +154 -0
- package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts +10 -0
- package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/anthropic.js +50 -0
- package/dist/server/node_modules/@omega/providers/dist/anthropic.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts +9 -0
- package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/gemini.js +46 -0
- package/dist/server/node_modules/@omega/providers/dist/gemini.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/generic.d.ts +4 -0
- package/dist/server/node_modules/@omega/providers/dist/generic.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/generic.js +4 -0
- package/dist/server/node_modules/@omega/providers/dist/generic.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/index.d.ts +9 -0
- package/dist/server/node_modules/@omega/providers/dist/index.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/index.js +31 -0
- package/dist/server/node_modules/@omega/providers/dist/index.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts +8 -0
- package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/kimi.js +13 -0
- package/dist/server/node_modules/@omega/providers/dist/kimi.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts +9 -0
- package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/ollama.js +38 -0
- package/dist/server/node_modules/@omega/providers/dist/ollama.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/openai.d.ts +12 -0
- package/dist/server/node_modules/@omega/providers/dist/openai.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/openai.js +95 -0
- package/dist/server/node_modules/@omega/providers/dist/openai.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/providers.test.d.ts +2 -0
- package/dist/server/node_modules/@omega/providers/dist/providers.test.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/providers/dist/providers.test.js +147 -0
- package/dist/server/node_modules/@omega/providers/dist/providers.test.js.map +1 -0
- package/dist/server/node_modules/@omega/providers/package.json +16 -0
- package/dist/server/node_modules/@omega/router/dist/index.d.ts +2 -0
- package/dist/server/node_modules/@omega/router/dist/index.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/router/dist/index.js +2 -0
- package/dist/server/node_modules/@omega/router/dist/index.js.map +1 -0
- package/dist/server/node_modules/@omega/router/dist/router.test.d.ts +2 -0
- package/dist/server/node_modules/@omega/router/dist/router.test.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/router/dist/router.test.js +102 -0
- package/dist/server/node_modules/@omega/router/dist/router.test.js.map +1 -0
- package/dist/server/node_modules/@omega/router/dist/rules.d.ts +18 -0
- package/dist/server/node_modules/@omega/router/dist/rules.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/router/dist/rules.js +59 -0
- package/dist/server/node_modules/@omega/router/dist/rules.js.map +1 -0
- package/dist/server/node_modules/@omega/router/package.json +16 -0
- package/dist/server/package.json +3 -0
- package/package.json +2 -3
|
@@ -10,6 +10,9 @@ importers:
|
|
|
10
10
|
|
|
11
11
|
apps/server:
|
|
12
12
|
dependencies:
|
|
13
|
+
'@electric-sql/pglite':
|
|
14
|
+
specifier: ^0.5.3
|
|
15
|
+
version: 0.5.3
|
|
13
16
|
'@grpc/grpc-js':
|
|
14
17
|
specifier: ^1.14.4
|
|
15
18
|
version: 1.14.4
|
|
@@ -31,12 +34,18 @@ importers:
|
|
|
31
34
|
'@omega/router':
|
|
32
35
|
specifier: workspace:*
|
|
33
36
|
version: file:packages/router
|
|
37
|
+
'@prisma/client':
|
|
38
|
+
specifier: ^5.14.0
|
|
39
|
+
version: 5.22.0
|
|
34
40
|
cors:
|
|
35
41
|
specifier: ^2.8.5
|
|
36
42
|
version: 2.8.6
|
|
37
43
|
express:
|
|
38
44
|
specifier: ^4.19.2
|
|
39
45
|
version: 4.22.2
|
|
46
|
+
pglite-prisma-adapter:
|
|
47
|
+
specifier: ^0.3.0
|
|
48
|
+
version: 0.3.0(@electric-sql/pglite@0.5.3)
|
|
40
49
|
zod:
|
|
41
50
|
specifier: ^3.23.8
|
|
42
51
|
version: 3.25.76
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PrismaClient } from '@omega/db';
|
|
2
|
+
import type { Task, AgentOptions } from '@omega/core';
|
|
3
|
+
import { type ValidationSummary } from './validator.js';
|
|
4
|
+
import { type PublishResult } from './publisher.js';
|
|
5
|
+
export interface AgentResult {
|
|
6
|
+
task: Task;
|
|
7
|
+
agentRunId: string;
|
|
8
|
+
validation?: ValidationSummary;
|
|
9
|
+
publish?: PublishResult;
|
|
10
|
+
}
|
|
11
|
+
export declare function runAgentTask(prisma: PrismaClient, taskId: string, options: AgentOptions): Promise<AgentResult>;
|
|
12
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAA4B,IAAI,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAK1F,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA0ElE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAgDD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CA4EtB"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { createProvider } from '@omega/providers';
|
|
2
|
+
import { selectProvider } from '@omega/router';
|
|
3
|
+
import { createPlan } from './planner.js';
|
|
4
|
+
import { executeTool } from './tools.js';
|
|
5
|
+
import { validateProject } from './validator.js';
|
|
6
|
+
import { publishOmega } from './publisher.js';
|
|
7
|
+
import { buildTaskPrompt, buildToolResultPrompt, AGENT_SYSTEM_PROMPT, } from './prompts.js';
|
|
8
|
+
import { getCurrentBranch, getCurrentCommit, createBranch, hasChanges, stageAll, commit, getDiff, checkoutBranch, } from './git.js';
|
|
9
|
+
const ALL_TOOLS = [
|
|
10
|
+
{
|
|
11
|
+
name: 'read_file',
|
|
12
|
+
description: 'Read a file relative to project root.',
|
|
13
|
+
parameters: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: { path: { type: 'string' } },
|
|
16
|
+
required: ['path'],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'write_file',
|
|
21
|
+
description: 'Write content to a file relative to project root.',
|
|
22
|
+
parameters: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
properties: { path: { type: 'string' }, content: { type: 'string' } },
|
|
25
|
+
required: ['path', 'content'],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'run_command',
|
|
30
|
+
description: 'Run a shell command in the project root.',
|
|
31
|
+
parameters: {
|
|
32
|
+
type: 'object',
|
|
33
|
+
properties: { command: { type: 'string' } },
|
|
34
|
+
required: ['command'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'think',
|
|
39
|
+
description: 'Record reasoning.',
|
|
40
|
+
parameters: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: { thought: { type: 'string' } },
|
|
43
|
+
required: ['thought'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'finish',
|
|
48
|
+
description: 'Mark the task complete.',
|
|
49
|
+
parameters: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: { summary: { type: 'string' }, success: { type: 'boolean' } },
|
|
52
|
+
required: ['summary', 'success'],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'publish',
|
|
57
|
+
description: 'Build, validate, and publish the project.',
|
|
58
|
+
parameters: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: { version: { type: 'string' } },
|
|
61
|
+
required: [],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
function toCoreTask(row) {
|
|
66
|
+
return {
|
|
67
|
+
id: row.id,
|
|
68
|
+
projectId: row.projectId,
|
|
69
|
+
title: row.title,
|
|
70
|
+
description: row.description ?? undefined,
|
|
71
|
+
status: row.status,
|
|
72
|
+
complexity: row.complexity,
|
|
73
|
+
tags: row.tags ? JSON.parse(row.tags) : [],
|
|
74
|
+
assignedModel: row.provider && row.model ? { provider: row.provider, model: row.model } : undefined,
|
|
75
|
+
result: row.result ?? undefined,
|
|
76
|
+
error: row.error ?? undefined,
|
|
77
|
+
createdAt: row.createdAt,
|
|
78
|
+
updatedAt: row.updatedAt,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export async function runAgentTask(prisma, taskId, options) {
|
|
82
|
+
const task = await prisma.task.findUnique({ where: { id: taskId } });
|
|
83
|
+
if (!task)
|
|
84
|
+
throw new Error('Task not found');
|
|
85
|
+
await prisma.task.update({
|
|
86
|
+
where: { id: taskId },
|
|
87
|
+
data: { status: 'in_progress', error: null, result: null },
|
|
88
|
+
});
|
|
89
|
+
const providerConfigs = await prisma.providerConfig.findMany();
|
|
90
|
+
const coreConfigs = providerConfigs.map((cfg) => ({
|
|
91
|
+
id: cfg.id,
|
|
92
|
+
name: cfg.name,
|
|
93
|
+
kind: cfg.kind,
|
|
94
|
+
baseUrl: cfg.baseUrl ?? undefined,
|
|
95
|
+
apiKey: cfg.apiKey ?? undefined,
|
|
96
|
+
defaultModel: cfg.defaultModel,
|
|
97
|
+
capabilities: JSON.parse(cfg.capabilities),
|
|
98
|
+
enabled: cfg.enabled,
|
|
99
|
+
}));
|
|
100
|
+
const selection = selectProvider(coreConfigs, [], toCoreTask(task));
|
|
101
|
+
if (!selection) {
|
|
102
|
+
await failTask(prisma, taskId, 'No provider available for this task');
|
|
103
|
+
throw new Error('No provider available for this task');
|
|
104
|
+
}
|
|
105
|
+
const provider = createProvider(selection.provider);
|
|
106
|
+
const branch = `agent/${task.id}`;
|
|
107
|
+
const baseBranch = await getCurrentBranch(options.projectPath);
|
|
108
|
+
const baseCommit = await getCurrentCommit(options.projectPath);
|
|
109
|
+
if (!baseBranch.success || !baseCommit.success) {
|
|
110
|
+
await failTask(prisma, taskId, 'Not a git repository');
|
|
111
|
+
throw new Error('Not a git repository');
|
|
112
|
+
}
|
|
113
|
+
const branchResult = await createBranch(options.projectPath, branch, options.baseBranch ?? baseBranch.output);
|
|
114
|
+
if (!branchResult.success) {
|
|
115
|
+
// Branch may already exist; try to checkout.
|
|
116
|
+
await checkoutBranch(options.projectPath, branch);
|
|
117
|
+
}
|
|
118
|
+
const agentRun = await prisma.agentRun.create({
|
|
119
|
+
data: {
|
|
120
|
+
taskId,
|
|
121
|
+
branch,
|
|
122
|
+
baseCommit: baseCommit.output,
|
|
123
|
+
resultStatus: 'running',
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
const ctx = {
|
|
127
|
+
prisma,
|
|
128
|
+
task: toCoreTask(task),
|
|
129
|
+
projectPath: options.projectPath,
|
|
130
|
+
projectName: options.projectName,
|
|
131
|
+
provider,
|
|
132
|
+
model: selection.model,
|
|
133
|
+
branch,
|
|
134
|
+
baseCommit: baseCommit.output,
|
|
135
|
+
agentRunId: agentRun.id,
|
|
136
|
+
autoPublish: options.autoPublish ?? false,
|
|
137
|
+
maxSteps: options.maxSteps ?? 30,
|
|
138
|
+
};
|
|
139
|
+
try {
|
|
140
|
+
const result = await executeAgentLoop(ctx);
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
145
|
+
await failTask(prisma, taskId, message);
|
|
146
|
+
await prisma.agentRun.update({
|
|
147
|
+
where: { id: agentRun.id },
|
|
148
|
+
data: { resultStatus: 'failed' },
|
|
149
|
+
});
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function executeAgentLoop(ctx) {
|
|
154
|
+
// Initial planning trace
|
|
155
|
+
await addTrace(ctx, 'system', AGENT_SYSTEM_PROMPT);
|
|
156
|
+
await addTrace(ctx, 'user', buildTaskPrompt(ctx.task.title, ctx.task.description ?? undefined));
|
|
157
|
+
const plan = await createPlan(ctx.provider, ctx.task.title, ctx.task.description ?? undefined);
|
|
158
|
+
await addTrace(ctx, 'assistant', `Plan: ${JSON.stringify(plan)}`);
|
|
159
|
+
// Record plan as steps
|
|
160
|
+
for (let i = 0; i < plan.plan.length; i++) {
|
|
161
|
+
await ctx.prisma.taskStep.create({
|
|
162
|
+
data: {
|
|
163
|
+
taskId: ctx.task.id,
|
|
164
|
+
idx: i,
|
|
165
|
+
name: plan.plan[i]?.name ?? `step-${i.toString()}`,
|
|
166
|
+
status: 'pending',
|
|
167
|
+
input: plan.plan[i]?.tool ? JSON.stringify(plan.plan[i]?.input ?? {}) : undefined,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
let stepIndex = 0;
|
|
172
|
+
let finished = false;
|
|
173
|
+
let success = false;
|
|
174
|
+
let summary = '';
|
|
175
|
+
// Start the first turn with a think/plan step.
|
|
176
|
+
let prompt = `Plan created: ${JSON.stringify(plan)}\n\nExecute the plan. Use tools to make changes and run validation.`;
|
|
177
|
+
while (stepIndex < ctx.maxSteps && !finished) {
|
|
178
|
+
const response = await sendToProvider(ctx, prompt);
|
|
179
|
+
await addTrace(ctx, 'assistant', response.content ?? '', response.toolCalls);
|
|
180
|
+
if (!response.toolCalls || response.toolCalls.length === 0) {
|
|
181
|
+
prompt = 'No tool calls detected. Please respond with a JSON object containing tool_calls.';
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const toolCalls = parseToolCalls(response.toolCalls);
|
|
185
|
+
const toolResults = [];
|
|
186
|
+
for (const call of toolCalls) {
|
|
187
|
+
const step = await ctx.prisma.taskStep.findFirst({
|
|
188
|
+
where: { taskId: ctx.task.id, idx: stepIndex },
|
|
189
|
+
});
|
|
190
|
+
const stepId = step?.id;
|
|
191
|
+
if (call.name === 'finish') {
|
|
192
|
+
finished = true;
|
|
193
|
+
success = Boolean(call.arguments.success);
|
|
194
|
+
const summaryArg = call.arguments.summary;
|
|
195
|
+
summary = typeof summaryArg === 'string' ? summaryArg : '';
|
|
196
|
+
if (stepId) {
|
|
197
|
+
await ctx.prisma.taskStep.update({
|
|
198
|
+
where: { id: stepId },
|
|
199
|
+
data: { status: success ? 'done' : 'failed', output: summary },
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
toolResults.push({ toolCallId: call.id, output: summary });
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (call.name === 'publish') {
|
|
206
|
+
const validation = await validateProject(ctx.projectPath);
|
|
207
|
+
await ctx.prisma.agentRun.update({
|
|
208
|
+
where: { id: ctx.agentRunId },
|
|
209
|
+
data: { validationSummary: JSON.stringify(validation) },
|
|
210
|
+
});
|
|
211
|
+
let publishResult;
|
|
212
|
+
if (ctx.autoPublish && validation.allPassed) {
|
|
213
|
+
publishResult = await publishOmega(ctx.projectPath, call.arguments.version);
|
|
214
|
+
}
|
|
215
|
+
toolResults.push({
|
|
216
|
+
toolCallId: call.id,
|
|
217
|
+
output: JSON.stringify({ validation, publish: publishResult }),
|
|
218
|
+
});
|
|
219
|
+
if (stepId) {
|
|
220
|
+
await ctx.prisma.taskStep.update({
|
|
221
|
+
where: { id: stepId },
|
|
222
|
+
data: {
|
|
223
|
+
status: validation.allPassed ? 'done' : 'failed',
|
|
224
|
+
output: JSON.stringify({ validation, publish: publishResult }),
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
if (!validation.allPassed) {
|
|
229
|
+
finished = true;
|
|
230
|
+
success = false;
|
|
231
|
+
summary = 'Validation failed';
|
|
232
|
+
}
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
const result = await executeTool(ctx.projectPath, call.name, call.arguments);
|
|
236
|
+
if (stepId) {
|
|
237
|
+
await ctx.prisma.taskStep.update({
|
|
238
|
+
where: { id: stepId },
|
|
239
|
+
data: {
|
|
240
|
+
status: result.success ? 'done' : 'failed',
|
|
241
|
+
output: result.output,
|
|
242
|
+
error: result.success ? null : result.output,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
await addTrace(ctx, 'tool', result.output, undefined, stepId);
|
|
247
|
+
toolResults.push({ toolCallId: call.id, output: result.output });
|
|
248
|
+
stepIndex++;
|
|
249
|
+
}
|
|
250
|
+
prompt = buildToolResultPrompt(toolResults);
|
|
251
|
+
}
|
|
252
|
+
// Capture diff
|
|
253
|
+
if (await hasChanges(ctx.projectPath)) {
|
|
254
|
+
await stageAll(ctx.projectPath);
|
|
255
|
+
await commit(ctx.projectPath, `agent: ${ctx.task.title}`);
|
|
256
|
+
}
|
|
257
|
+
const diff = await getDiff(ctx.projectPath, ctx.baseCommit);
|
|
258
|
+
if (diff.output) {
|
|
259
|
+
await ctx.prisma.taskDiff.create({
|
|
260
|
+
data: {
|
|
261
|
+
taskId: ctx.task.id,
|
|
262
|
+
branch: ctx.branch,
|
|
263
|
+
patch: diff.output,
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
const updatedTask = await ctx.prisma.task.update({
|
|
268
|
+
where: { id: ctx.task.id },
|
|
269
|
+
data: {
|
|
270
|
+
status: success ? 'done' : 'failed',
|
|
271
|
+
result: summary,
|
|
272
|
+
error: success ? null : summary,
|
|
273
|
+
provider: ctx.provider.config.name,
|
|
274
|
+
model: ctx.model,
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
await ctx.prisma.agentRun.update({
|
|
278
|
+
where: { id: ctx.agentRunId },
|
|
279
|
+
data: { resultStatus: success ? 'done' : 'failed' },
|
|
280
|
+
});
|
|
281
|
+
return {
|
|
282
|
+
task: toCoreTask(updatedTask),
|
|
283
|
+
agentRunId: ctx.agentRunId,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async function sendToProvider(ctx, prompt) {
|
|
287
|
+
if ('sendWithTools' in ctx.provider && typeof ctx.provider.sendWithTools === 'function') {
|
|
288
|
+
const raw = await ctx.provider.sendWithTools(prompt, ALL_TOOLS, {
|
|
289
|
+
system: AGENT_SYSTEM_PROMPT,
|
|
290
|
+
model: ctx.model,
|
|
291
|
+
temperature: 0.3,
|
|
292
|
+
});
|
|
293
|
+
return parseProviderResponse(raw);
|
|
294
|
+
}
|
|
295
|
+
const raw = await ctx.provider.send(prompt, {
|
|
296
|
+
system: AGENT_SYSTEM_PROMPT,
|
|
297
|
+
model: ctx.model,
|
|
298
|
+
temperature: 0.3,
|
|
299
|
+
});
|
|
300
|
+
return parseProviderResponse(raw);
|
|
301
|
+
}
|
|
302
|
+
function parseProviderResponse(raw) {
|
|
303
|
+
const cleaned = raw.trim();
|
|
304
|
+
if (cleaned.startsWith('```')) {
|
|
305
|
+
const inner = cleaned.replace(/^```[a-z]*\n?/, '').replace(/\n?```$/, '');
|
|
306
|
+
return extractToolCalls(inner);
|
|
307
|
+
}
|
|
308
|
+
return extractToolCalls(cleaned);
|
|
309
|
+
}
|
|
310
|
+
function extractToolCalls(text) {
|
|
311
|
+
try {
|
|
312
|
+
const parsed = JSON.parse(text);
|
|
313
|
+
if (Array.isArray(parsed.tool_calls)) {
|
|
314
|
+
return { content: parsed.content, toolCalls: JSON.stringify(parsed.tool_calls) };
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// not JSON
|
|
319
|
+
}
|
|
320
|
+
return { content: text };
|
|
321
|
+
}
|
|
322
|
+
function parseToolCalls(raw) {
|
|
323
|
+
if (!raw)
|
|
324
|
+
return [];
|
|
325
|
+
try {
|
|
326
|
+
const parsed = JSON.parse(raw);
|
|
327
|
+
return parsed
|
|
328
|
+
.filter((t) => Boolean(t.id && t.name))
|
|
329
|
+
.map((t) => ({ id: t.id, name: t.name, arguments: t.arguments }));
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
return [];
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
async function addTrace(ctx, role, content, toolCalls, stepId) {
|
|
336
|
+
await ctx.prisma.taskTrace.create({
|
|
337
|
+
data: {
|
|
338
|
+
taskId: ctx.task.id,
|
|
339
|
+
stepId: stepId ?? null,
|
|
340
|
+
role,
|
|
341
|
+
content,
|
|
342
|
+
toolCalls: toolCalls ?? null,
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
async function failTask(prisma, taskId, error) {
|
|
347
|
+
await prisma.task.update({
|
|
348
|
+
where: { id: taskId },
|
|
349
|
+
data: { status: 'failed', error },
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface GitResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
output: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function getCurrentBranch(projectPath: string): Promise<GitResult>;
|
|
6
|
+
export declare function getCurrentCommit(projectPath: string): Promise<GitResult>;
|
|
7
|
+
export declare function createBranch(projectPath: string, branchName: string, base?: string): Promise<GitResult>;
|
|
8
|
+
export declare function checkoutBranch(projectPath: string, branchName: string): Promise<GitResult>;
|
|
9
|
+
export declare function stageAll(projectPath: string): Promise<GitResult>;
|
|
10
|
+
export declare function commit(projectPath: string, message: string): Promise<GitResult>;
|
|
11
|
+
export declare function getDiff(projectPath: string, base?: string): Promise<GitResult>;
|
|
12
|
+
export declare function hasChanges(projectPath: string): Promise<boolean>;
|
|
13
|
+
export declare function createTag(projectPath: string, tag: string, message?: string): Promise<GitResult>;
|
|
14
|
+
export declare function push(projectPath: string, remote?: string, ref?: string): Promise<GitResult>;
|
|
15
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE9E;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE9E;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,CAIpB;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAEhG;AAED,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAEtE;AAED,wBAAsB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAErF;AAED,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAGpF;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;AAED,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAGtG;AAED,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,SAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAInG"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
async function git(projectPath, args, options = {}) {
|
|
5
|
+
try {
|
|
6
|
+
const { stdout, stderr } = await execFileAsync('git', args, {
|
|
7
|
+
cwd: projectPath,
|
|
8
|
+
timeout: options.timeout ?? 30_000,
|
|
9
|
+
});
|
|
10
|
+
return { success: true, output: stdout.trim() + stderr.trim() };
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
14
|
+
return { success: false, output: message };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export async function getCurrentBranch(projectPath) {
|
|
18
|
+
return git(projectPath, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
19
|
+
}
|
|
20
|
+
export async function getCurrentCommit(projectPath) {
|
|
21
|
+
return git(projectPath, ['rev-parse', 'HEAD']);
|
|
22
|
+
}
|
|
23
|
+
export async function createBranch(projectPath, branchName, base) {
|
|
24
|
+
const args = ['checkout', '-b', branchName];
|
|
25
|
+
if (base)
|
|
26
|
+
args.push(base);
|
|
27
|
+
return git(projectPath, args);
|
|
28
|
+
}
|
|
29
|
+
export async function checkoutBranch(projectPath, branchName) {
|
|
30
|
+
return git(projectPath, ['checkout', branchName]);
|
|
31
|
+
}
|
|
32
|
+
export async function stageAll(projectPath) {
|
|
33
|
+
return git(projectPath, ['add', '.']);
|
|
34
|
+
}
|
|
35
|
+
export async function commit(projectPath, message) {
|
|
36
|
+
return git(projectPath, ['commit', '-m', message]);
|
|
37
|
+
}
|
|
38
|
+
export async function getDiff(projectPath, base) {
|
|
39
|
+
const args = base ? ['diff', base] : ['diff'];
|
|
40
|
+
return git(projectPath, args);
|
|
41
|
+
}
|
|
42
|
+
export async function hasChanges(projectPath) {
|
|
43
|
+
const result = await git(projectPath, ['status', '--porcelain']);
|
|
44
|
+
return result.success && result.output.trim().length > 0;
|
|
45
|
+
}
|
|
46
|
+
export async function createTag(projectPath, tag, message) {
|
|
47
|
+
const args = message ? ['tag', '-a', tag, '-m', message] : ['tag', tag];
|
|
48
|
+
return git(projectPath, args);
|
|
49
|
+
}
|
|
50
|
+
export async function push(projectPath, remote = 'origin', ref) {
|
|
51
|
+
const args = ['push', remote];
|
|
52
|
+
if (ref)
|
|
53
|
+
args.push(ref);
|
|
54
|
+
return git(projectPath, args, { timeout: 60_000 });
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { runAgentTask, type AgentResult } from './executor.js';
|
|
2
|
+
export { createPlan, type PlanStep, type PlannerResult } from './planner.js';
|
|
3
|
+
export { validateProject, type ValidationSummary } from './validator.js';
|
|
4
|
+
export { publishOmega, type PublishResult } from './publisher.js';
|
|
5
|
+
export * from './git.js';
|
|
6
|
+
export * from './tools.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { runAgentTask } from './executor.js';
|
|
2
|
+
export { createPlan } from './planner.js';
|
|
3
|
+
export { validateProject } from './validator.js';
|
|
4
|
+
export { publishOmega } from './publisher.js';
|
|
5
|
+
export * from './git.js';
|
|
6
|
+
export * from './tools.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAqC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,eAAe,EAA0B,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAClE,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Provider } from '@omega/core';
|
|
2
|
+
export interface PlanStep {
|
|
3
|
+
name: string;
|
|
4
|
+
tool?: string;
|
|
5
|
+
input?: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface PlannerResult {
|
|
8
|
+
plan: PlanStep[];
|
|
9
|
+
reasoning: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function createPlan(provider: Provider, taskTitle: string, taskDescription?: string): Promise<PlannerResult>;
|
|
12
|
+
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AA2BD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA+BxH"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const PLANNING_TOOLS = [
|
|
2
|
+
{
|
|
3
|
+
name: 'think',
|
|
4
|
+
description: 'Record a planning thought.',
|
|
5
|
+
parameters: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: { thought: { type: 'string' } },
|
|
8
|
+
required: ['thought'],
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
];
|
|
12
|
+
const PLAN_PROMPT = `You are a planning assistant. Given a task, produce a concise step-by-step plan.
|
|
13
|
+
|
|
14
|
+
Respond with strict JSON in this exact shape (no markdown):
|
|
15
|
+
{
|
|
16
|
+
"reasoning": "brief reasoning",
|
|
17
|
+
"plan": [
|
|
18
|
+
{ "name": "step name", "tool": "optional tool name", "input": { optional tool args } }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
Available tool names: read_file, write_file, run_command, think, finish, publish.
|
|
23
|
+
If a step does not need a tool, omit tool/input.`;
|
|
24
|
+
export async function createPlan(provider, taskTitle, taskDescription) {
|
|
25
|
+
const prompt = `${PLAN_PROMPT}\n\nTask: ${taskTitle}\n${taskDescription ? `Description: ${taskDescription}\n` : ''}`;
|
|
26
|
+
// Try tool-aware path first, fall back to plain send.
|
|
27
|
+
let raw;
|
|
28
|
+
if ('sendWithTools' in provider && typeof provider.sendWithTools === 'function') {
|
|
29
|
+
raw = await provider.sendWithTools(prompt, PLANNING_TOOLS, {
|
|
30
|
+
system: PLAN_PROMPT,
|
|
31
|
+
temperature: 0.2,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
raw = await provider.send(prompt, { system: PLAN_PROMPT, temperature: 0.2 });
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(stripMarkdown(raw));
|
|
39
|
+
if (!Array.isArray(parsed.plan)) {
|
|
40
|
+
throw new Error('plan is not an array');
|
|
41
|
+
}
|
|
42
|
+
return parsed;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Fallback: treat the whole response as reasoning and create a generic plan.
|
|
46
|
+
return {
|
|
47
|
+
reasoning: raw,
|
|
48
|
+
plan: [
|
|
49
|
+
{ name: 'Explore codebase', tool: 'run_command', input: { command: 'find . -type f -name "*.ts" | head -20' } },
|
|
50
|
+
{ name: 'Implement change', tool: 'think', input: { thought: 'Implement the requested change.' } },
|
|
51
|
+
{ name: 'Validate', tool: 'run_command', input: { command: 'pnpm lint && pnpm test' } },
|
|
52
|
+
{ name: 'Finish', tool: 'finish', input: { summary: 'Task complete.', success: true } },
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function stripMarkdown(raw) {
|
|
58
|
+
const trimmed = raw.trim();
|
|
59
|
+
if (trimmed.startsWith('```')) {
|
|
60
|
+
return trimmed.replace(/^```[a-z]*\n?/, '').replace(/\n?```$/, '');
|
|
61
|
+
}
|
|
62
|
+
return trimmed;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAaA,MAAM,cAAc,GAAqB;IACvC;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4BAA4B;QACzC,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC3C,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;iDAW6B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAkB,EAAE,SAAiB,EAAE,eAAwB;IAC9F,MAAM,MAAM,GAAG,GAAG,WAAW,aAAa,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,gBAAgB,eAAe,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrH,sDAAsD;IACtD,IAAI,GAAW,CAAC;IAChB,IAAI,eAAe,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAChF,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAkB,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,OAAO;YACL,SAAS,EAAE,GAAG;YACd,IAAI,EAAE;gBACJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,wCAAwC,EAAE,EAAE;gBAC/G,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE;gBAClG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE;gBACvF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;aACxF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const AGENT_SYSTEM_PROMPT = "You are Omega, an autonomous software engineering agent running inside a project repository. Your job is to plan and execute a given improvement task, then validate the result.\n\nYou have access to the following tools. Respond with a JSON object containing a single key \"tool_calls\" which is an array of tool calls to make. Each tool call must have \"id\" (unique), \"name\", and \"arguments\".\n\nAvailable tools:\n\n1. read_file\n Description: Read the contents of a file.\n Parameters: { \"path\": \"relative path from project root\" }\n\n2. write_file\n Description: Write content to a file. Creates parent directories if needed.\n Parameters: { \"path\": \"relative path from project root\", \"content\": \"file content\" }\n\n3. run_command\n Description: Run a shell command in the project root. Prefer pnpm/npm/node commands.\n Parameters: { \"command\": \"shell command\" }\n\n4. think\n Description: Record reasoning or a plan step. Use this before writing code.\n Parameters: { \"thought\": \"your reasoning\" }\n\n5. finish\n Description: Mark the task as complete.\n Parameters: { \"summary\": \"what was done\", \"success\": true | false }\n\n6. publish\n Description: Request that the changes be built, tested, and published. Only use after validation passes.\n Parameters: { \"version\": \"optional version override, e.g. 0.4.0\" }\n\nRules:\n- Work in small, verifiable steps.\n- Always think before writing or running commands.\n- Prefer editing existing files over creating new ones when possible.\n- Run tests and lint after making changes.\n- Do not expose secrets.\n- Do not run destructive commands (rm -rf, git reset --hard, etc).\n- If a step fails, use think to reason and try a fix.\n- Finish only when the task is truly complete or you cannot proceed.\n\nOutput format (strict JSON, no markdown):\n{\"tool_calls\":[{\"id\":\"1\",\"name\":\"think\",\"arguments\":{\"thought\":\"...\"}}]}";
|
|
2
|
+
export declare function buildTaskPrompt(title: string, description?: string): string;
|
|
3
|
+
export declare function buildToolResultPrompt(results: {
|
|
4
|
+
toolCallId: string;
|
|
5
|
+
output: string;
|
|
6
|
+
}[]): string;
|
|
7
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,05DAyCyC,CAAC;AAE1E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAI/F"}
|