@ftarganski/omni-ai 0.1.1 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-PPTEJ2FH.js → chunk-6KQE3NUV.js} +18 -10
- package/dist/{chunk-6APAA6WD.js → chunk-A7SDO64L.js} +54 -54
- package/dist/{chunk-AWMSN7OB.js → chunk-AU3KUCI7.js} +47 -45
- package/dist/{chunk-S5MK6LBH.js → chunk-BU7KK25R.js} +33 -18
- package/dist/{chunk-6OPRALDC.js → chunk-E2JJOPZB.js} +30 -18
- package/dist/{chunk-6YFFZMXY.js → chunk-GQL6DDF4.js} +7 -4
- package/dist/{chunk-TFU437SW.js → chunk-IVDHCLGS.js} +5 -4
- package/dist/{chunk-M4QJF7CV.js → chunk-JQRNMPWC.js} +11 -6
- package/dist/{chunk-3RZELMF2.js → chunk-LEW34E32.js} +27 -18
- package/dist/{chunk-JTXDF5KG.js → chunk-MQWOX2ZJ.js} +11 -6
- package/dist/{chunk-5WELBZWN.js → chunk-WRBBQFKB.js} +10 -8
- package/dist/{chunk-Y4EYGADJ.js → chunk-YRGG3PAL.js} +15 -10
- package/dist/{chunk-AG6NZIJ3.js → chunk-ZSNUHWSC.js} +10 -10
- package/dist/cli/bin.js +297 -254
- package/dist/{src-6MUVU5ML.js → dist-KBUP5623.js} +2 -2
- package/dist/{src-ZHTGR7T6.js → dist-Z76P5KV4.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/mcp.js +15 -18
- package/dist/memory.js +27 -32
- package/dist/provider-anthropic.js +10 -10
- package/dist/provider-google.js +15 -14
- package/dist/provider-openai.js +15 -10
- package/dist/skills/backend.js +1 -1
- package/dist/skills/code.js +1 -1
- package/dist/skills/frontend.js +1 -1
- package/dist/skills/fs.js +1 -1
- package/dist/skills/git.js +1 -1
- package/dist/skills/http.js +1 -1
- package/dist/skills/index.js +9 -9
- package/dist/skills/multimodal.js +1 -1
- package/dist/skills/qa.js +1 -1
- package/dist/skills/ux.js +1 -1
- package/package.json +18 -17
package/dist/index.js
CHANGED
package/dist/mcp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// ../../packages/mcp/dist/server.js
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { z } from "zod";
|
|
@@ -19,22 +19,18 @@ function createMcpServer(skills, options) {
|
|
|
19
19
|
config: options?.ctx?.config ?? {}
|
|
20
20
|
};
|
|
21
21
|
for (const skill of skills) {
|
|
22
|
-
server.registerTool(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
|
|
33
|
-
isError: true
|
|
34
|
-
};
|
|
35
|
-
}
|
|
22
|
+
server.registerTool(skill.name, { description: skill.description, inputSchema: z.record(z.unknown()) }, async (args) => {
|
|
23
|
+
try {
|
|
24
|
+
const result = await skill.execute(args, ctx);
|
|
25
|
+
const text = typeof result === "string" ? result : JSON.stringify(result);
|
|
26
|
+
return { content: [{ type: "text", text }] };
|
|
27
|
+
} catch (err) {
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
|
|
30
|
+
isError: true
|
|
31
|
+
};
|
|
36
32
|
}
|
|
37
|
-
);
|
|
33
|
+
});
|
|
38
34
|
}
|
|
39
35
|
return server;
|
|
40
36
|
}
|
|
@@ -48,7 +44,7 @@ async function serveStdioMcp(skills, options) {
|
|
|
48
44
|
return serveMcp(skills, transport, options);
|
|
49
45
|
}
|
|
50
46
|
|
|
51
|
-
//
|
|
47
|
+
// ../../packages/mcp/dist/skill.js
|
|
52
48
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
53
49
|
var McpSkill = class {
|
|
54
50
|
name;
|
|
@@ -64,7 +60,8 @@ var McpSkill = class {
|
|
|
64
60
|
const result = await this.client.callTool({ name: this.name, arguments: args });
|
|
65
61
|
const content = result.content;
|
|
66
62
|
const first = content?.[0];
|
|
67
|
-
if (first?.type === "text")
|
|
63
|
+
if (first?.type === "text")
|
|
64
|
+
return first.text;
|
|
68
65
|
return JSON.stringify(content);
|
|
69
66
|
}
|
|
70
67
|
};
|
package/dist/memory.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
contentToString
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A7SDO64L.js";
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// ../../packages/memory/dist/utils.js
|
|
6
6
|
function estimateTokens(messages) {
|
|
7
7
|
return messages.reduce((sum, m) => sum + Math.ceil(contentToString(m.content).length / 4), 0);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
//
|
|
10
|
+
// ../../packages/memory/dist/compactors/observation-masking.js
|
|
11
11
|
var TOOL_RESULT_PREFIX = "[Tool ";
|
|
12
12
|
function isToolResult(msg) {
|
|
13
13
|
return msg.role === "user" && contentToString(msg.content).startsWith(TOOL_RESULT_PREFIX);
|
|
@@ -27,10 +27,12 @@ var ObservationMaskingCompactor = class {
|
|
|
27
27
|
return estimateTokens(messages) > maxTokens * this.threshold;
|
|
28
28
|
}
|
|
29
29
|
async compact(messages, _provider) {
|
|
30
|
-
if (messages.length <= this.lastMessages)
|
|
30
|
+
if (messages.length <= this.lastMessages)
|
|
31
|
+
return messages;
|
|
31
32
|
const cutoff = messages.length - this.lastMessages;
|
|
32
33
|
return messages.map((msg, i) => {
|
|
33
|
-
if (i >= cutoff || !isToolResult(msg))
|
|
34
|
+
if (i >= cutoff || !isToolResult(msg))
|
|
35
|
+
return msg;
|
|
34
36
|
const str = contentToString(msg.content);
|
|
35
37
|
const tokenCount = Math.ceil(str.length / 4);
|
|
36
38
|
const match = /^\[Tool ([^\]]+) result\]:/.exec(str);
|
|
@@ -43,7 +45,7 @@ var ObservationMaskingCompactor = class {
|
|
|
43
45
|
}
|
|
44
46
|
};
|
|
45
47
|
|
|
46
|
-
//
|
|
48
|
+
// ../../packages/memory/dist/compactors/summary.js
|
|
47
49
|
function formatForSummary(messages) {
|
|
48
50
|
return messages.map((m) => {
|
|
49
51
|
const label = m.role === "assistant" ? "Assistant" : "User/Tool";
|
|
@@ -65,7 +67,8 @@ var SummaryCompactor = class {
|
|
|
65
67
|
return estimateTokens(messages) > maxTokens * this.threshold;
|
|
66
68
|
}
|
|
67
69
|
async compact(messages, provider) {
|
|
68
|
-
if (messages.length <= this.lastMessages)
|
|
70
|
+
if (messages.length <= this.lastMessages)
|
|
71
|
+
return messages;
|
|
69
72
|
const cutoff = messages.length - this.lastMessages;
|
|
70
73
|
const toSummarize = messages.slice(0, cutoff);
|
|
71
74
|
const toKeep = messages.slice(cutoff);
|
|
@@ -96,7 +99,7 @@ ${summaryResponse.content}`
|
|
|
96
99
|
}
|
|
97
100
|
};
|
|
98
101
|
|
|
99
|
-
//
|
|
102
|
+
// ../../packages/memory/dist/stores/in-memory.js
|
|
100
103
|
function sessionKey(session) {
|
|
101
104
|
return `${session.resourceId}:${session.threadId}`;
|
|
102
105
|
}
|
|
@@ -125,7 +128,7 @@ var InMemoryStore = class {
|
|
|
125
128
|
}
|
|
126
129
|
};
|
|
127
130
|
|
|
128
|
-
//
|
|
131
|
+
// ../../packages/memory/dist/vector.js
|
|
129
132
|
function cosineSimilarity(a, b) {
|
|
130
133
|
let dot = 0;
|
|
131
134
|
let normA = 0;
|
|
@@ -157,16 +160,14 @@ var VectorIndex = class {
|
|
|
157
160
|
}
|
|
158
161
|
};
|
|
159
162
|
|
|
160
|
-
//
|
|
163
|
+
// ../../packages/memory/dist/stores/semantic-memory-store.js
|
|
161
164
|
var SemanticMemoryStore = class {
|
|
162
165
|
provider;
|
|
163
166
|
inner;
|
|
164
167
|
cache = /* @__PURE__ */ new Map();
|
|
165
168
|
constructor(provider, inner) {
|
|
166
169
|
if (!provider.embed) {
|
|
167
|
-
throw new Error(
|
|
168
|
-
`Provider "${provider.name}" does not support embeddings \u2014 use a provider with capabilities.embedding = true`
|
|
169
|
-
);
|
|
170
|
+
throw new Error(`Provider "${provider.name}" does not support embeddings \u2014 use a provider with capabilities.embedding = true`);
|
|
170
171
|
}
|
|
171
172
|
this.provider = provider;
|
|
172
173
|
this.inner = inner ?? new InMemoryStore();
|
|
@@ -178,7 +179,8 @@ var SemanticMemoryStore = class {
|
|
|
178
179
|
for (const m of messages) {
|
|
179
180
|
try {
|
|
180
181
|
const resp = await this.provider.embed?.({ input: m.content });
|
|
181
|
-
if (resp)
|
|
182
|
+
if (resp)
|
|
183
|
+
cached.push({ content: m.content, vector: resp.embeddings[0] });
|
|
182
184
|
} catch {
|
|
183
185
|
}
|
|
184
186
|
}
|
|
@@ -192,7 +194,8 @@ var SemanticMemoryStore = class {
|
|
|
192
194
|
}
|
|
193
195
|
try {
|
|
194
196
|
const resp = await this.provider.embed?.({ input: query });
|
|
195
|
-
if (!resp)
|
|
197
|
+
if (!resp)
|
|
198
|
+
return this.inner.search?.(session, query, topK) ?? [];
|
|
196
199
|
const queryVector = resp.embeddings[0];
|
|
197
200
|
return cached.map((e) => ({ content: e.content, score: cosineSimilarity(queryVector, e.vector) })).sort((a, b) => b.score - a.score).slice(0, topK);
|
|
198
201
|
} catch {
|
|
@@ -216,7 +219,7 @@ function sessionKey2(session) {
|
|
|
216
219
|
return `${session.resourceId}:${session.threadId}`;
|
|
217
220
|
}
|
|
218
221
|
|
|
219
|
-
//
|
|
222
|
+
// ../../packages/memory/dist/stores/sqlite.js
|
|
220
223
|
import Database from "better-sqlite3";
|
|
221
224
|
var SQLiteMemoryStore = class {
|
|
222
225
|
db;
|
|
@@ -261,10 +264,8 @@ var SQLiteMemoryStore = class {
|
|
|
261
264
|
`);
|
|
262
265
|
}
|
|
263
266
|
async saveMessages(session, messages) {
|
|
264
|
-
const insert = this.db.prepare(
|
|
265
|
-
|
|
266
|
-
VALUES (@resourceId, @threadId, @role, @content, @timestamp)`
|
|
267
|
-
);
|
|
267
|
+
const insert = this.db.prepare(`INSERT INTO messages (resource_id, thread_id, role, content, timestamp)
|
|
268
|
+
VALUES (@resourceId, @threadId, @role, @content, @timestamp)`);
|
|
268
269
|
const insertMany = this.db.transaction((entries) => {
|
|
269
270
|
for (const e of entries) {
|
|
270
271
|
insert.run({ ...session, role: e.role, content: e.content, timestamp: e.timestamp });
|
|
@@ -274,24 +275,20 @@ var SQLiteMemoryStore = class {
|
|
|
274
275
|
}
|
|
275
276
|
async loadMessages(session, limit) {
|
|
276
277
|
const n = limit ?? this.defaultLimit;
|
|
277
|
-
const rows = this.db.prepare(
|
|
278
|
-
`SELECT role, content, timestamp FROM (
|
|
278
|
+
const rows = this.db.prepare(`SELECT role, content, timestamp FROM (
|
|
279
279
|
SELECT role, content, timestamp FROM messages
|
|
280
280
|
WHERE resource_id = ? AND thread_id = ?
|
|
281
281
|
ORDER BY id DESC LIMIT ?
|
|
282
|
-
) ORDER BY timestamp ASC`
|
|
283
|
-
).all(session.resourceId, session.threadId, n);
|
|
282
|
+
) ORDER BY timestamp ASC`).all(session.resourceId, session.threadId, n);
|
|
284
283
|
return rows;
|
|
285
284
|
}
|
|
286
285
|
async search(session, query, topK = 5) {
|
|
287
|
-
const rows = this.db.prepare(
|
|
288
|
-
`SELECT m.content, rank AS score
|
|
286
|
+
const rows = this.db.prepare(`SELECT m.content, rank AS score
|
|
289
287
|
FROM messages_fts fts
|
|
290
288
|
JOIN messages m ON m.id = fts.rowid
|
|
291
289
|
WHERE fts.content MATCH ?
|
|
292
290
|
AND m.resource_id = ? AND m.thread_id = ?
|
|
293
|
-
ORDER BY rank LIMIT ?`
|
|
294
|
-
).all(query, session.resourceId, session.threadId, topK);
|
|
291
|
+
ORDER BY rank LIMIT ?`).all(query, session.resourceId, session.threadId, topK);
|
|
295
292
|
return rows.map((r) => ({ content: r.content, score: r.score }));
|
|
296
293
|
}
|
|
297
294
|
async getWorkingMemory(session) {
|
|
@@ -299,11 +296,9 @@ var SQLiteMemoryStore = class {
|
|
|
299
296
|
return row?.content ?? null;
|
|
300
297
|
}
|
|
301
298
|
async setWorkingMemory(session, content) {
|
|
302
|
-
this.db.prepare(
|
|
303
|
-
`INSERT INTO working_memory (resource_id, thread_id, content, updated_at)
|
|
299
|
+
this.db.prepare(`INSERT INTO working_memory (resource_id, thread_id, content, updated_at)
|
|
304
300
|
VALUES (?, ?, ?, ?)
|
|
305
|
-
ON CONFLICT (resource_id, thread_id) DO UPDATE SET content = excluded.content, updated_at = excluded.updated_at`
|
|
306
|
-
).run(session.resourceId, session.threadId, content, Date.now());
|
|
301
|
+
ON CONFLICT (resource_id, thread_id) DO UPDATE SET content = excluded.content, updated_at = excluded.updated_at`).run(session.resourceId, session.threadId, content, Date.now());
|
|
307
302
|
}
|
|
308
303
|
async close() {
|
|
309
304
|
this.db.close();
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A7SDO64L.js";
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// ../../packages/provider-anthropic/dist/provider.js
|
|
6
6
|
import Anthropic from "@anthropic-ai/sdk";
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// ../../packages/provider-anthropic/dist/mappers.js
|
|
9
9
|
function toAnthropicContentPart(part) {
|
|
10
|
-
if (part.type === "text")
|
|
10
|
+
if (part.type === "text")
|
|
11
|
+
return { type: "text", text: part.text };
|
|
11
12
|
return {
|
|
12
13
|
type: "image",
|
|
13
14
|
source: { type: "base64", media_type: part.mimeType, data: part.data }
|
|
@@ -29,7 +30,8 @@ function toAnthropicTools(tools) {
|
|
|
29
30
|
function extractSystemPrompt(request) {
|
|
30
31
|
const systemMsg = request.messages.find((m) => m.role === "system");
|
|
31
32
|
const raw = request.systemPrompt ?? systemMsg?.content;
|
|
32
|
-
if (raw === void 0)
|
|
33
|
+
if (raw === void 0)
|
|
34
|
+
return void 0;
|
|
33
35
|
return typeof raw === "string" ? raw : raw.map((p) => p.type === "text" ? p.text : "").join("");
|
|
34
36
|
}
|
|
35
37
|
function fromAnthropicResponse(response, providerName) {
|
|
@@ -58,7 +60,7 @@ function fromAnthropicResponse(response, providerName) {
|
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
//
|
|
63
|
+
// ../../packages/provider-anthropic/dist/provider.js
|
|
62
64
|
var AnthropicProvider = class {
|
|
63
65
|
name;
|
|
64
66
|
capabilities = {
|
|
@@ -78,9 +80,7 @@ var AnthropicProvider = class {
|
|
|
78
80
|
async complete(request) {
|
|
79
81
|
const model = request.model ?? this.defaultModel;
|
|
80
82
|
if (request.temperature !== void 0 && request.temperature > 1) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`Anthropic models require temperature <= 1.0 (got ${request.temperature}). Update the agent YAML or use an OpenAI provider for higher temperature values.`
|
|
83
|
-
);
|
|
83
|
+
throw new Error(`Anthropic models require temperature <= 1.0 (got ${request.temperature}). Update the agent YAML or use an OpenAI provider for higher temperature values.`);
|
|
84
84
|
}
|
|
85
85
|
const system = extractSystemPrompt(request);
|
|
86
86
|
const messages = toAnthropicMessages(request.messages);
|
|
@@ -104,7 +104,7 @@ var AnthropicProvider = class {
|
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
106
|
|
|
107
|
-
//
|
|
107
|
+
// ../../packages/provider-anthropic/dist/index.js
|
|
108
108
|
registerProvider("anthropic", (config) => {
|
|
109
109
|
if (!config.apiKey) {
|
|
110
110
|
throw new Error(`Provider "${config.name}" (anthropic) requires ANTHROPIC_API_KEY to be set in the environment.`);
|
package/dist/provider-google.js
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A7SDO64L.js";
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// ../../packages/provider-google/dist/provider.js
|
|
6
6
|
import { GoogleGenerativeAI } from "@google/generative-ai";
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// ../../packages/provider-google/dist/mappers.js
|
|
9
9
|
function toGeminiPart(part) {
|
|
10
|
-
if (part.type === "text")
|
|
10
|
+
if (part.type === "text")
|
|
11
|
+
return { text: part.text };
|
|
11
12
|
return { inlineData: { mimeType: part.mimeType, data: part.data } };
|
|
12
13
|
}
|
|
13
14
|
function contentToParts(content) {
|
|
14
|
-
if (typeof content === "string")
|
|
15
|
+
if (typeof content === "string")
|
|
16
|
+
return [{ text: content }];
|
|
15
17
|
return content.map(toGeminiPart);
|
|
16
18
|
}
|
|
17
19
|
function extractSystemInstruction(request) {
|
|
18
20
|
const systemMsg = request.messages.find((m) => m.role === "system");
|
|
19
21
|
const raw = request.systemPrompt ?? systemMsg?.content;
|
|
20
|
-
if (raw === void 0)
|
|
22
|
+
if (raw === void 0)
|
|
23
|
+
return void 0;
|
|
21
24
|
return typeof raw === "string" ? raw : raw.map((p) => p.type === "text" ? p.text : "").join("");
|
|
22
25
|
}
|
|
23
26
|
function toGeminiContents(messages) {
|
|
@@ -63,7 +66,7 @@ function fromGeminiResponse(response, modelName, providerName) {
|
|
|
63
66
|
};
|
|
64
67
|
}
|
|
65
68
|
|
|
66
|
-
//
|
|
69
|
+
// ../../packages/provider-google/dist/provider.js
|
|
67
70
|
var GoogleProvider = class {
|
|
68
71
|
name;
|
|
69
72
|
capabilities = {
|
|
@@ -115,17 +118,15 @@ var GoogleProvider = class {
|
|
|
115
118
|
const modelName = "text-embedding-004";
|
|
116
119
|
const model = this.client.getGenerativeModel({ model: modelName });
|
|
117
120
|
const inputs = Array.isArray(request.input) ? request.input : [request.input];
|
|
118
|
-
const embeddings = await Promise.all(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
})
|
|
123
|
-
);
|
|
121
|
+
const embeddings = await Promise.all(inputs.map(async (text) => {
|
|
122
|
+
const result = await model.embedContent(text);
|
|
123
|
+
return result.embedding.values;
|
|
124
|
+
}));
|
|
124
125
|
return { embeddings, model: modelName, provider: this.name };
|
|
125
126
|
}
|
|
126
127
|
};
|
|
127
128
|
|
|
128
|
-
//
|
|
129
|
+
// ../../packages/provider-google/dist/index.js
|
|
129
130
|
registerProvider("google", (config) => {
|
|
130
131
|
if (!config.apiKey) {
|
|
131
132
|
throw new Error(`Provider "${config.name}" (google) requires GOOGLE_API_KEY to be set in the environment.`);
|
package/dist/provider-openai.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-A7SDO64L.js";
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// ../../packages/provider-openai/dist/provider.js
|
|
6
6
|
import OpenAI from "openai";
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// ../../packages/provider-openai/dist/mappers.js
|
|
9
9
|
function toOpenAIUserContentPart(part) {
|
|
10
|
-
if (part.type === "text")
|
|
10
|
+
if (part.type === "text")
|
|
11
|
+
return { type: "text", text: part.text };
|
|
11
12
|
return {
|
|
12
13
|
type: "image_url",
|
|
13
14
|
image_url: { url: `data:${part.mimeType};base64,${part.data}` }
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
function contentAsString(content) {
|
|
17
|
-
if (typeof content === "string")
|
|
18
|
+
if (typeof content === "string")
|
|
19
|
+
return content;
|
|
18
20
|
return content.map((p) => p.type === "text" ? p.text : "").join("");
|
|
19
21
|
}
|
|
20
22
|
function toOpenAIMessages(messages) {
|
|
@@ -64,7 +66,7 @@ function fromOpenAIResponse(response, providerName) {
|
|
|
64
66
|
};
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
//
|
|
69
|
+
// ../../packages/provider-openai/dist/provider.js
|
|
68
70
|
var OpenAIProvider = class {
|
|
69
71
|
name;
|
|
70
72
|
capabilities = {
|
|
@@ -115,9 +117,12 @@ var OpenAIProvider = class {
|
|
|
115
117
|
if (!toolCallAccum[idx]) {
|
|
116
118
|
toolCallAccum[idx] = { id: "", name: "", args: "" };
|
|
117
119
|
}
|
|
118
|
-
if (tc.id)
|
|
119
|
-
|
|
120
|
-
if (tc.function?.
|
|
120
|
+
if (tc.id)
|
|
121
|
+
toolCallAccum[idx].id = tc.id;
|
|
122
|
+
if (tc.function?.name)
|
|
123
|
+
toolCallAccum[idx].name = tc.function.name;
|
|
124
|
+
if (tc.function?.arguments)
|
|
125
|
+
toolCallAccum[idx].args += tc.function.arguments;
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
128
|
if (chunk.usage) {
|
|
@@ -166,7 +171,7 @@ var OpenAIProvider = class {
|
|
|
166
171
|
}
|
|
167
172
|
};
|
|
168
173
|
|
|
169
|
-
//
|
|
174
|
+
// ../../packages/provider-openai/dist/index.js
|
|
170
175
|
registerProvider("openai", (config) => {
|
|
171
176
|
if (!config.apiKey) {
|
|
172
177
|
throw new Error(`Provider "${config.name}" (openai) requires OPENAI_API_KEY to be set in the environment.`);
|
package/dist/skills/backend.js
CHANGED
package/dist/skills/code.js
CHANGED
package/dist/skills/frontend.js
CHANGED
package/dist/skills/fs.js
CHANGED
package/dist/skills/git.js
CHANGED
package/dist/skills/http.js
CHANGED
package/dist/skills/index.js
CHANGED
|
@@ -3,39 +3,39 @@ import {
|
|
|
3
3
|
analyzeGraphqlSchemaSkill,
|
|
4
4
|
analyzeNestjsModuleSkill,
|
|
5
5
|
findCodePatternSkill
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-LEW34E32.js";
|
|
7
7
|
import {
|
|
8
8
|
analyzeComponentSkill,
|
|
9
9
|
analyzeModuleStructureSkill,
|
|
10
10
|
findComponentPatternSkill
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-BU7KK25R.js";
|
|
12
12
|
import {
|
|
13
13
|
analyzeTestCoverageSkill,
|
|
14
14
|
findTestPatternSkill
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-6KQE3NUV.js";
|
|
16
16
|
import {
|
|
17
17
|
listDirectorySkill,
|
|
18
18
|
readFileSkill,
|
|
19
19
|
writeFileSkill
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-IVDHCLGS.js";
|
|
21
21
|
import {
|
|
22
22
|
searchCodeSkill
|
|
23
|
-
} from "../chunk-
|
|
23
|
+
} from "../chunk-JQRNMPWC.js";
|
|
24
24
|
import {
|
|
25
25
|
auditAccessibilitySkill
|
|
26
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-MQWOX2ZJ.js";
|
|
27
27
|
import {
|
|
28
28
|
gitCommitMessageSkill,
|
|
29
29
|
gitDiffSkill,
|
|
30
30
|
gitLogSkill,
|
|
31
31
|
gitStatusSkill
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-E2JJOPZB.js";
|
|
33
33
|
import {
|
|
34
34
|
httpRequestSkill
|
|
35
|
-
} from "../chunk-
|
|
35
|
+
} from "../chunk-GQL6DDF4.js";
|
|
36
36
|
import {
|
|
37
37
|
analyzeImageSkill
|
|
38
|
-
} from "../chunk-
|
|
38
|
+
} from "../chunk-WRBBQFKB.js";
|
|
39
39
|
export {
|
|
40
40
|
analyzeComponentSkill,
|
|
41
41
|
analyzeDynamoSchemaSkill,
|
package/dist/skills/qa.js
CHANGED
package/dist/skills/ux.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ftarganski/omni-ai",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "Provider-agnostic AI agents and skills framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -73,12 +73,26 @@
|
|
|
73
73
|
"omni": "./dist/cli/bin.js"
|
|
74
74
|
},
|
|
75
75
|
"files": [
|
|
76
|
-
"dist"
|
|
76
|
+
"dist",
|
|
77
|
+
"README.md"
|
|
77
78
|
],
|
|
78
79
|
"publishConfig": {
|
|
79
80
|
"access": "public"
|
|
80
81
|
},
|
|
82
|
+
"scripts": {
|
|
83
|
+
"build": "tsup",
|
|
84
|
+
"dev": "tsup --watch",
|
|
85
|
+
"lint": "biome check src/"
|
|
86
|
+
},
|
|
81
87
|
"dependencies": {
|
|
88
|
+
"@omni-ai/cli": "workspace:*",
|
|
89
|
+
"@omni-ai/core": "workspace:*",
|
|
90
|
+
"@omni-ai/memory": "workspace:*",
|
|
91
|
+
"@omni-ai/mcp": "workspace:*",
|
|
92
|
+
"@omni-ai/provider-anthropic": "workspace:*",
|
|
93
|
+
"@omni-ai/provider-google": "workspace:*",
|
|
94
|
+
"@omni-ai/provider-openai": "workspace:*",
|
|
95
|
+
"@omni-ai/skills": "workspace:*",
|
|
82
96
|
"@inquirer/prompts": "^7.0.0",
|
|
83
97
|
"chalk": "^5.3.0",
|
|
84
98
|
"chokidar": "^4.0.0",
|
|
@@ -87,15 +101,7 @@
|
|
|
87
101
|
"express": "^4.21.0",
|
|
88
102
|
"glob": "^11.0.0",
|
|
89
103
|
"yaml": "^2.7.0",
|
|
90
|
-
"zod": "^3.24.0"
|
|
91
|
-
"@omni-ai/cli": "0.1.0",
|
|
92
|
-
"@omni-ai/core": "0.1.0",
|
|
93
|
-
"@omni-ai/memory": "0.1.0",
|
|
94
|
-
"@omni-ai/mcp": "0.1.0",
|
|
95
|
-
"@omni-ai/provider-anthropic": "0.1.0",
|
|
96
|
-
"@omni-ai/provider-google": "0.1.0",
|
|
97
|
-
"@omni-ai/provider-openai": "0.1.0",
|
|
98
|
-
"@omni-ai/skills": "0.1.0"
|
|
104
|
+
"zod": "^3.24.0"
|
|
99
105
|
},
|
|
100
106
|
"peerDependencies": {
|
|
101
107
|
"@anthropic-ai/sdk": "^0.39.0",
|
|
@@ -127,10 +133,5 @@
|
|
|
127
133
|
"@types/node": "^22.0.0",
|
|
128
134
|
"tsup": "^8.0.0",
|
|
129
135
|
"typescript": "^5.7.0"
|
|
130
|
-
},
|
|
131
|
-
"scripts": {
|
|
132
|
-
"build": "tsup",
|
|
133
|
-
"dev": "tsup --watch",
|
|
134
|
-
"lint": "biome check src/"
|
|
135
136
|
}
|
|
136
|
-
}
|
|
137
|
+
}
|