0xkobold 0.5.2 → 0.6.0
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/README.md +88 -11
- package/dist/package.json +3 -3
- package/dist/skills/session-resume-skill.js +121 -0
- package/dist/skills/session-resume-skill.js.map +1 -0
- package/dist/src/agent/DraconicRunRegistry.js +0 -9
- package/dist/src/agent/DraconicRunRegistry.js.map +1 -1
- package/dist/src/agent/auth-profiles.js +290 -0
- package/dist/src/agent/auth-profiles.js.map +1 -0
- package/dist/src/agent/embedded-runner.js +115 -29
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/agent/index.js +4 -0
- package/dist/src/agent/index.js.map +1 -1
- package/dist/src/agent/model-fallback.js +173 -0
- package/dist/src/agent/model-fallback.js.map +1 -0
- package/dist/src/agent/tools/spawn-agent.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +4 -8
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cron/notifications.js +15 -5
- package/dist/src/cron/notifications.js.map +1 -1
- package/dist/src/cron/runner.js +15 -6
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/core/gateway-status-extension.js +54 -0
- package/dist/src/extensions/core/gateway-status-extension.js.map +1 -0
- package/dist/src/gateway/gateway-server.js +383 -0
- package/dist/src/gateway/gateway-server.js.map +1 -0
- package/dist/src/gateway/index.js +15 -8
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/methods/agent.js +348 -0
- package/dist/src/gateway/methods/agent.js.map +1 -0
- package/dist/src/gateway/methods/index.js +30 -0
- package/dist/src/gateway/methods/index.js.map +1 -0
- package/dist/src/gateway/methods/types.js +7 -0
- package/dist/src/gateway/methods/types.js.map +1 -0
- package/dist/src/gateway/persistence/AgentStore.js +6 -0
- package/dist/src/gateway/persistence/AgentStore.js.map +1 -1
- package/dist/src/gateway/protocol/frames.js +43 -0
- package/dist/src/gateway/protocol/frames.js.map +1 -0
- package/dist/src/gateway/protocol/index.js +5 -0
- package/dist/src/gateway/protocol/index.js.map +1 -0
- package/dist/src/gateway/quickstart.js +34 -0
- package/dist/src/gateway/quickstart.js.map +1 -0
- package/dist/src/index.js +33 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/memory/memory-integration.js +204 -0
- package/dist/src/memory/memory-integration.js.map +1 -0
- package/dist/src/memory/session-memory-bridge.js +177 -0
- package/dist/src/memory/session-memory-bridge.js.map +1 -0
- package/dist/src/memory/session-resume.js +265 -0
- package/dist/src/memory/session-resume.js.map +1 -0
- package/dist/src/memory/session-store.js +224 -0
- package/dist/src/memory/session-store.js.map +1 -0
- package/dist/src/skills/framework.js +104 -16
- package/dist/src/skills/framework.js.map +1 -1
- package/dist/src/tui/components/footer.js +106 -0
- package/dist/src/tui/components/footer.js.map +1 -0
- package/dist/src/tui/components/status-bar.js +82 -16
- package/dist/src/tui/components/status-bar.js.map +1 -1
- package/dist/src/tui/gateway-chat-client.js +218 -0
- package/dist/src/tui/gateway-chat-client.js.map +1 -0
- package/dist/src/tui/index.js +1 -0
- package/dist/src/tui/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/session-resume-skill.ts +150 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Profiles (Phase 4)
|
|
3
|
+
*
|
|
4
|
+
* Multiple API keys per provider with automatic rotation.
|
|
5
|
+
* Similar to koclaw's auth profile system.
|
|
6
|
+
*/
|
|
7
|
+
import { Database } from "bun:sqlite";
|
|
8
|
+
import { mkdirSync } from "node:fs";
|
|
9
|
+
import { dirname, join } from "node:path";
|
|
10
|
+
import { eventBus } from "../event-bus";
|
|
11
|
+
import { getConfig } from "../config/loader";
|
|
12
|
+
const DB_PATH = join(process.env.HOME || "~", ".0xkobold", "auth-profiles.db");
|
|
13
|
+
let db = null;
|
|
14
|
+
let profileCache = new Map();
|
|
15
|
+
let providerOrder = new Map();
|
|
16
|
+
function getDb() {
|
|
17
|
+
if (db)
|
|
18
|
+
return db;
|
|
19
|
+
mkdirSync(dirname(DB_PATH), { recursive: true });
|
|
20
|
+
db = new Database(DB_PATH);
|
|
21
|
+
db.run(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS auth_profiles (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
provider TEXT NOT NULL,
|
|
25
|
+
name TEXT NOT NULL,
|
|
26
|
+
api_key TEXT NOT NULL,
|
|
27
|
+
base_url TEXT,
|
|
28
|
+
created_at INTEGER NOT NULL,
|
|
29
|
+
last_used INTEGER,
|
|
30
|
+
failure_count INTEGER DEFAULT 0,
|
|
31
|
+
total_requests INTEGER DEFAULT 0,
|
|
32
|
+
disabled INTEGER DEFAULT 0
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
db.run(`
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_profiles_provider
|
|
37
|
+
ON auth_profiles(provider)
|
|
38
|
+
`);
|
|
39
|
+
// Load into cache
|
|
40
|
+
const rows = db.query("SELECT * FROM auth_profiles").all();
|
|
41
|
+
for (const row of rows) {
|
|
42
|
+
const profile = rowToProfile(row);
|
|
43
|
+
profileCache.set(profile.id, profile);
|
|
44
|
+
if (!profile.disabled) {
|
|
45
|
+
const order = providerOrder.get(profile.provider) || [];
|
|
46
|
+
order.push(profile.id);
|
|
47
|
+
providerOrder.set(profile.provider, order);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return db;
|
|
51
|
+
}
|
|
52
|
+
function rowToProfile(row) {
|
|
53
|
+
return {
|
|
54
|
+
id: row.id,
|
|
55
|
+
provider: row.provider,
|
|
56
|
+
name: row.name,
|
|
57
|
+
apiKey: row.api_key,
|
|
58
|
+
baseUrl: row.base_url,
|
|
59
|
+
createdAt: row.created_at,
|
|
60
|
+
lastUsed: row.last_used,
|
|
61
|
+
failureCount: row.failure_count || 0,
|
|
62
|
+
totalRequests: row.total_requests || 0,
|
|
63
|
+
disabled: Boolean(row.disabled),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function profileToRow(profile) {
|
|
67
|
+
return [
|
|
68
|
+
profile.id,
|
|
69
|
+
profile.provider,
|
|
70
|
+
profile.name,
|
|
71
|
+
profile.apiKey,
|
|
72
|
+
profile.baseUrl ?? null,
|
|
73
|
+
profile.createdAt,
|
|
74
|
+
profile.lastUsed ?? null,
|
|
75
|
+
profile.failureCount,
|
|
76
|
+
profile.totalRequests,
|
|
77
|
+
profile.disabled ? 1 : 0,
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
// Profile CRUD
|
|
81
|
+
export function addAuthProfile(provider, name, apiKey, baseUrl) {
|
|
82
|
+
const db = getDb();
|
|
83
|
+
const id = `${provider}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
84
|
+
const profile = {
|
|
85
|
+
id,
|
|
86
|
+
provider,
|
|
87
|
+
name,
|
|
88
|
+
apiKey,
|
|
89
|
+
baseUrl,
|
|
90
|
+
createdAt: Date.now(),
|
|
91
|
+
failureCount: 0,
|
|
92
|
+
totalRequests: 0,
|
|
93
|
+
disabled: false,
|
|
94
|
+
};
|
|
95
|
+
db.run(`
|
|
96
|
+
INSERT INTO auth_profiles (id, provider, name, api_key, base_url, created_at, last_used, failure_count, total_requests, disabled)
|
|
97
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
98
|
+
`, profileToRow(profile));
|
|
99
|
+
profileCache.set(id, profile);
|
|
100
|
+
// Add to provider order
|
|
101
|
+
const order = providerOrder.get(provider) || [];
|
|
102
|
+
order.push(id);
|
|
103
|
+
providerOrder.set(provider, order);
|
|
104
|
+
eventBus.emit("auth-profile:added", { profileId: id, provider });
|
|
105
|
+
return profile;
|
|
106
|
+
}
|
|
107
|
+
export function removeAuthProfile(profileId) {
|
|
108
|
+
const db = getDb();
|
|
109
|
+
const profile = profileCache.get(profileId);
|
|
110
|
+
if (!profile)
|
|
111
|
+
return false;
|
|
112
|
+
db.run("DELETE FROM auth_profiles WHERE id = ?", [profileId]);
|
|
113
|
+
profileCache.delete(profileId);
|
|
114
|
+
// Remove from provider order
|
|
115
|
+
const order = providerOrder.get(profile.provider) || [];
|
|
116
|
+
const idx = order.indexOf(profileId);
|
|
117
|
+
if (idx > -1) {
|
|
118
|
+
order.splice(idx, 1);
|
|
119
|
+
providerOrder.set(profile.provider, order);
|
|
120
|
+
}
|
|
121
|
+
eventBus.emit("auth-profile:removed", { profileId, provider: profile.provider });
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
export function getAuthProfile(profileId) {
|
|
125
|
+
return profileCache.get(profileId);
|
|
126
|
+
}
|
|
127
|
+
export function listAuthProfiles(provider) {
|
|
128
|
+
const profiles = Array.from(profileCache.values());
|
|
129
|
+
if (provider) {
|
|
130
|
+
return profiles.filter((p) => p.provider === provider);
|
|
131
|
+
}
|
|
132
|
+
return profiles;
|
|
133
|
+
}
|
|
134
|
+
// Auth resolution with rotation
|
|
135
|
+
export function resolveAuthProfileOrder(provider) {
|
|
136
|
+
const order = providerOrder.get(provider) || [];
|
|
137
|
+
// Update from cache (filter disabled)
|
|
138
|
+
return order
|
|
139
|
+
.map((id) => profileCache.get(id))
|
|
140
|
+
.filter((p) => !!p && !p.disabled)
|
|
141
|
+
.sort((a, b) => {
|
|
142
|
+
// Prioritize by failure count, then by last used (least recently used first)
|
|
143
|
+
if (a.failureCount !== b.failureCount) {
|
|
144
|
+
return a.failureCount - b.failureCount;
|
|
145
|
+
}
|
|
146
|
+
return (a.lastUsed || 0) - (b.lastUsed || 0);
|
|
147
|
+
})
|
|
148
|
+
.map((p) => p.id);
|
|
149
|
+
}
|
|
150
|
+
export function getApiKeyForProvider(provider) {
|
|
151
|
+
const order = resolveAuthProfileOrder(provider);
|
|
152
|
+
for (const profileId of order) {
|
|
153
|
+
const profile = profileCache.get(profileId);
|
|
154
|
+
if (profile && !profile.disabled) {
|
|
155
|
+
return {
|
|
156
|
+
profileId,
|
|
157
|
+
apiKey: profile.apiKey,
|
|
158
|
+
baseUrl: profile.baseUrl,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
// Usage tracking
|
|
165
|
+
export function markAuthProfileUsed(profileId) {
|
|
166
|
+
const profile = profileCache.get(profileId);
|
|
167
|
+
if (!profile)
|
|
168
|
+
return;
|
|
169
|
+
profile.lastUsed = Date.now();
|
|
170
|
+
profile.totalRequests++;
|
|
171
|
+
const db = getDb();
|
|
172
|
+
db.run("UPDATE auth_profiles SET last_used = ?, total_requests = total_requests + 1 WHERE id = ?", [Date.now(), profileId]);
|
|
173
|
+
eventBus.emit("auth-profile:used", { profileId });
|
|
174
|
+
}
|
|
175
|
+
export function markAuthProfileFailure(profileId, reason) {
|
|
176
|
+
const profile = profileCache.get(profileId);
|
|
177
|
+
if (!profile)
|
|
178
|
+
return { shouldDisable: false };
|
|
179
|
+
profile.failureCount++;
|
|
180
|
+
const db = getDb();
|
|
181
|
+
db.run("UPDATE auth_profiles SET failure_count = ? WHERE id = ?", [
|
|
182
|
+
profile.failureCount,
|
|
183
|
+
profileId,
|
|
184
|
+
]);
|
|
185
|
+
// Disable after 5 failures
|
|
186
|
+
const shouldDisable = profile.failureCount >= 5;
|
|
187
|
+
if (shouldDisable) {
|
|
188
|
+
profile.disabled = true;
|
|
189
|
+
db.run("UPDATE auth_profiles SET disabled = 1 WHERE id = ?", [profileId]);
|
|
190
|
+
// Remove from provider order
|
|
191
|
+
const order = providerOrder.get(profile.provider) || [];
|
|
192
|
+
const idx = order.indexOf(profileId);
|
|
193
|
+
if (idx > -1) {
|
|
194
|
+
order.splice(idx, 1);
|
|
195
|
+
providerOrder.set(profile.provider, order);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
eventBus.emit("auth-profile:failed", {
|
|
199
|
+
profileId,
|
|
200
|
+
provider: profile.provider,
|
|
201
|
+
reason,
|
|
202
|
+
failureCount: profile.failureCount,
|
|
203
|
+
disabled: shouldDisable,
|
|
204
|
+
});
|
|
205
|
+
return { shouldDisable };
|
|
206
|
+
}
|
|
207
|
+
export function markAuthProfileGood(profileId) {
|
|
208
|
+
const profile = profileCache.get(profileId);
|
|
209
|
+
if (!profile)
|
|
210
|
+
return;
|
|
211
|
+
if (profile.failureCount > 0) {
|
|
212
|
+
profile.failureCount = 0;
|
|
213
|
+
const db = getDb();
|
|
214
|
+
db.run("UPDATE auth_profiles SET failure_count = 0 WHERE id = ?", [profileId]);
|
|
215
|
+
eventBus.emit("auth-profile:recovered", { profileId, provider: profile.provider });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Check if profile is rate limited
|
|
219
|
+
export function isProfileInCooldown(profileId, cooldownMs = 60000) {
|
|
220
|
+
const profile = profileCache.get(profileId);
|
|
221
|
+
if (!profile?.lastUsed) {
|
|
222
|
+
return { inCooldown: false };
|
|
223
|
+
}
|
|
224
|
+
const elapsed = Date.now() - profile.lastUsed;
|
|
225
|
+
if (elapsed < cooldownMs) {
|
|
226
|
+
return { inCooldown: true, remainingMs: cooldownMs - elapsed };
|
|
227
|
+
}
|
|
228
|
+
return { inCooldown: false };
|
|
229
|
+
}
|
|
230
|
+
// Rotation helper
|
|
231
|
+
export function rotateApiKey(provider) {
|
|
232
|
+
const order = providerOrder.get(provider) || [];
|
|
233
|
+
if (order.length <= 1) {
|
|
234
|
+
return getApiKeyForProvider(provider);
|
|
235
|
+
}
|
|
236
|
+
// Move first to end
|
|
237
|
+
const first = order.shift();
|
|
238
|
+
if (first) {
|
|
239
|
+
order.push(first);
|
|
240
|
+
providerOrder.set(provider, order);
|
|
241
|
+
}
|
|
242
|
+
return getApiKeyForProvider(provider);
|
|
243
|
+
}
|
|
244
|
+
// Reason resolution
|
|
245
|
+
export function resolveProfilesUnavailableReason(provider) {
|
|
246
|
+
const profiles = listAuthProfiles(provider);
|
|
247
|
+
if (profiles.length === 0) {
|
|
248
|
+
return `No auth profiles configured for ${provider}`;
|
|
249
|
+
}
|
|
250
|
+
const enabled = profiles.filter((p) => !p.disabled);
|
|
251
|
+
if (enabled.length === 0) {
|
|
252
|
+
return `All ${provider} auth profiles are disabled due to failures`;
|
|
253
|
+
}
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
// Config integration - auto-create from config
|
|
257
|
+
export function ensureAuthProfilesFromConfig() {
|
|
258
|
+
const config = getConfig();
|
|
259
|
+
if (!config)
|
|
260
|
+
return;
|
|
261
|
+
// Check for Anthropic key
|
|
262
|
+
if (config.anthropic?.apiKey) {
|
|
263
|
+
const existing = listAuthProfiles("anthropic").find((p) => p.apiKey === config.anthropic?.apiKey);
|
|
264
|
+
if (!existing) {
|
|
265
|
+
addAuthProfile("anthropic", "default", config.anthropic.apiKey);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Check for OpenAI key
|
|
269
|
+
if (config.openai?.apiKey) {
|
|
270
|
+
const existing = listAuthProfiles("openai").find((p) => p.apiKey === config.openai?.apiKey);
|
|
271
|
+
if (!existing) {
|
|
272
|
+
addAuthProfile("openai", "default", config.openai.apiKey);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Check for Ollama
|
|
276
|
+
if (config.ollama?.host) {
|
|
277
|
+
const existing = listAuthProfiles("ollama").find((p) => p.baseUrl === config.ollama?.host);
|
|
278
|
+
if (!existing) {
|
|
279
|
+
addAuthProfile("ollama", "default", "", config.ollama.host);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Clear all (for testing)
|
|
284
|
+
export function clearAuthProfiles() {
|
|
285
|
+
const db = getDb();
|
|
286
|
+
db.run("DELETE FROM auth_profiles");
|
|
287
|
+
profileCache.clear();
|
|
288
|
+
providerOrder.clear();
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=auth-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-profiles.js","sourceRoot":"","sources":["../../../src/agent/auth-profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAuB7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAE/E,IAAI,EAAE,GAAoB,IAAI,CAAC;AAC/B,IAAI,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;AACvD,IAAI,aAAa,GAA0B,IAAI,GAAG,EAAE,CAAC;AAErD,SAAS,KAAK;IACZ,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,EAAE,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaN,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC;;;GAGN,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAA+B,CAAC;IACxF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,GAA4B;IAChD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAY;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAkB;QAChC,IAAI,EAAE,GAAG,CAAC,IAAc;QACxB,MAAM,EAAE,GAAG,CAAC,OAAiB;QAC7B,OAAO,EAAE,GAAG,CAAC,QAA8B;QAC3C,SAAS,EAAE,GAAG,CAAC,UAAoB;QACnC,QAAQ,EAAE,GAAG,CAAC,SAA+B;QAC7C,YAAY,EAAG,GAAG,CAAC,aAAwB,IAAI,CAAC;QAChD,aAAa,EAAG,GAAG,CAAC,cAAyB,IAAI,CAAC;QAClD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,OAAO;QACL,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,QAAQ;QAChB,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO,IAAI,IAAI;QACvB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,QAAQ,IAAI,IAAI;QACxB,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,eAAe;AACf,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,IAAY,EACZ,MAAc,EACd,OAAgB;IAEhB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAEjF,MAAM,OAAO,GAAgB;QAC3B,EAAE;QACF,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,EAAE,CAAC,GAAG,CACJ;;;GAGD,EACC,YAAY,CAAC,OAAO,CAAC,CACtB,CAAC;IAEF,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAE9B,wBAAwB;IACxB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEnC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEjE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,EAAE,CAAC,GAAG,CAAC,wCAAwC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/B,6BAA6B;IAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhD,sCAAsC;IACtC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;SACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,6EAA6E;QAC7E,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAEhD,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO;gBACL,SAAS;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IAExB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,GAAG,CACJ,0FAA0F,EAC1F,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CACxB,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,MAAc;IAEd,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAE9C,OAAO,CAAC,YAAY,EAAE,CAAC;IAEvB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,GAAG,CAAC,yDAAyD,EAAE;QAChE,OAAO,CAAC,YAAY;QACpB,SAAS;KACV,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAChD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,EAAE,CAAC,GAAG,CAAC,oDAAoD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAE1E,6BAA6B;QAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE;QACnC,SAAS;QACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM;QACN,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QAEzB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,EAAE,CAAC,GAAG,CAAC,yDAAyD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAE/E,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,UAAU,GAAG,KAAK;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9C,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,gCAAgC,CAAC,QAAgB;IAC/D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,mCAAmC,QAAQ,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,QAAQ,6CAA6C,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,4BAA4B;IAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,0BAA0B;IAC1B,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAC7C,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACpC,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Embedded Agent Runner - v0.
|
|
2
|
+
* Embedded Agent Runner - v0.3.0
|
|
3
3
|
*
|
|
4
|
-
* Wraps pi-coding-agent with
|
|
5
|
-
*
|
|
4
|
+
* Wraps pi-coding-agent with full TUI settings sharing.
|
|
5
|
+
* Shares: extensions, model config, persona from IDENTITY.md/SOUL.md
|
|
6
6
|
*/
|
|
7
7
|
import { loadBootstrapFiles, ensureDefaultBootstrap } from "./bootstrap-loader.js";
|
|
8
8
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
9
|
+
import { config as piConfig } from "../pi-config.js";
|
|
10
|
+
import { getConfigValue } from "../config/loader.js";
|
|
9
11
|
/**
|
|
10
|
-
* Run agent with embedded mode (
|
|
12
|
+
* Run agent with embedded mode (shares TUI settings)
|
|
11
13
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
+
* Loads:
|
|
15
|
+
* - Extensions from pi-config.ts
|
|
16
|
+
* - Model from config (with override support)
|
|
17
|
+
* - Persona from IDENTITY.md/SOUL.md
|
|
18
|
+
* - Keybindings and settings
|
|
14
19
|
*/
|
|
15
20
|
export async function runEmbeddedAgent(config) {
|
|
16
21
|
const startTime = Date.now();
|
|
@@ -18,45 +23,109 @@ export async function runEmbeddedAgent(config) {
|
|
|
18
23
|
console.log("[Embedded] Starting embedded agent run");
|
|
19
24
|
console.log(`[Embedded] Workspace: ${workspaceDir}`);
|
|
20
25
|
console.log(`[Embedded] Mode: ${config.mode || "default"}`);
|
|
21
|
-
//
|
|
26
|
+
// Load shared settings if requested
|
|
27
|
+
let extensions = config.extensions || [];
|
|
28
|
+
let model = config.model || "";
|
|
29
|
+
if (config.useTuiSettings !== false) {
|
|
30
|
+
console.log("[Embedded] Loading TUI shared settings...");
|
|
31
|
+
// Load extensions from pi-config
|
|
32
|
+
if (piConfig.extensions && extensions.length === 0) {
|
|
33
|
+
extensions = piConfig.extensions.filter((e) =>
|
|
34
|
+
// Filter out TUI-specific extensions
|
|
35
|
+
!e.includes('tui-integration') &&
|
|
36
|
+
!e.includes('tui'));
|
|
37
|
+
console.log(`[Embedded] Loaded ${extensions.length} extensions from pi-config`);
|
|
38
|
+
}
|
|
39
|
+
// Load model preference from config
|
|
40
|
+
if (!model) {
|
|
41
|
+
try {
|
|
42
|
+
const koboldConfig = getConfigValue('agents.defaults.model') ||
|
|
43
|
+
process.env.KOBOLD_MODEL ||
|
|
44
|
+
"ollama/kimi-k2.5:cloud";
|
|
45
|
+
model = koboldConfig;
|
|
46
|
+
console.log(`[Embedded] Using model from config: ${model}`);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
model = process.env.KOBOLD_MODEL || "ollama/kimi-k2.5:cloud";
|
|
50
|
+
console.log(`[Embedded] Using default model: ${model}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Load keybindings from pi-config
|
|
54
|
+
if (piConfig.keybindings) {
|
|
55
|
+
console.log(`[Embedded] Loaded ${Object.keys(piConfig.keybindings).length} keybindings`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log("[Embedded] Using standalone mode (no TUI settings)");
|
|
60
|
+
model = config.model || process.env.KOBOLD_MODEL || "ollama/kimi-k2.5:cloud";
|
|
61
|
+
}
|
|
62
|
+
// 1. Ensure bootstrap files exist (checks global ~/.0xkobold/ first)
|
|
22
63
|
await ensureDefaultBootstrap(workspaceDir);
|
|
23
64
|
// 2. Load bootstrap files (SOUL.md, IDENTITY.md, etc.)
|
|
24
65
|
const bootstrapFiles = await loadBootstrapFiles(workspaceDir);
|
|
25
66
|
console.log(`[Embedded] Loaded ${bootstrapFiles.filter(f => f.exists).length} bootstrap files`);
|
|
26
|
-
// 3. Build custom system prompt
|
|
67
|
+
// 3. Build custom system prompt with persona context
|
|
27
68
|
const systemPrompt = buildSystemPrompt({
|
|
28
|
-
basePrompt: undefined,
|
|
69
|
+
basePrompt: undefined,
|
|
29
70
|
bootstrapFiles,
|
|
30
71
|
workspace: workspaceDir,
|
|
31
72
|
mode: config.mode,
|
|
32
|
-
tools:
|
|
73
|
+
tools: [],
|
|
33
74
|
});
|
|
34
75
|
console.log(`[Embedded] System prompt: ${systemPrompt.length} chars`);
|
|
35
|
-
// 4.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
// 4. Try to integrate with pi-coding-agent SDK
|
|
77
|
+
try {
|
|
78
|
+
const { createAgentSession } = await import('@mariozechner/pi-coding-agent').catch(() => ({ createAgentSession: null }));
|
|
79
|
+
if (createAgentSession) {
|
|
80
|
+
console.log('[Embedded] Using pi-coding-agent SDK');
|
|
81
|
+
// Create agent session with shared settings
|
|
82
|
+
const { session } = await createAgentSession({
|
|
83
|
+
cwd: config.cwd,
|
|
84
|
+
systemPrompt: systemPrompt,
|
|
85
|
+
extensions: extensions.length > 0 ? extensions : undefined,
|
|
86
|
+
model: model, // Pass model preference
|
|
87
|
+
settings: {
|
|
88
|
+
...piConfig.settings,
|
|
89
|
+
'0xkobold.embedded': true,
|
|
90
|
+
'0xkobold.mode': config.mode || 'default',
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
// Run the prompt
|
|
94
|
+
const maxIterations = config.mode === 'build' ? 30 : 15;
|
|
95
|
+
const result = await session.prompt(config.prompt, maxIterations);
|
|
96
|
+
const duration = Date.now() - startTime;
|
|
97
|
+
return {
|
|
98
|
+
text: result || 'No response',
|
|
99
|
+
toolCalls: [],
|
|
100
|
+
metadata: {
|
|
101
|
+
duration,
|
|
102
|
+
tokens: systemPrompt.length / 4,
|
|
103
|
+
model,
|
|
104
|
+
extensions: extensions.length > 0 ? extensions : undefined,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (sdkError) {
|
|
110
|
+
console.log('[Embedded] SDK integration failed, falling back to simulation:', sdkError.message);
|
|
111
|
+
}
|
|
112
|
+
// Fallback: Simulate the structure
|
|
113
|
+
console.log('[Embedded] Running in simulation mode (SDK not available)');
|
|
49
114
|
const simulatedResult = {
|
|
50
115
|
text: `[Embedded mode simulation]\n\n` +
|
|
51
116
|
`Bootstrap files loaded:\n` +
|
|
52
117
|
bootstrapFiles
|
|
53
118
|
.filter(f => f.exists)
|
|
54
119
|
.map(f => `- ${f.name} (${f.size} chars)`)
|
|
55
|
-
.join("\n")
|
|
120
|
+
.join("\n") +
|
|
121
|
+
(model ? `\n\nModel: ${model}` : '') +
|
|
122
|
+
(extensions.length > 0 ? `\nExtensions: ${extensions.length}` : ''),
|
|
56
123
|
toolCalls: [],
|
|
57
124
|
metadata: {
|
|
58
125
|
duration: Date.now() - startTime,
|
|
59
|
-
tokens: systemPrompt.length / 4,
|
|
126
|
+
tokens: systemPrompt.length / 4,
|
|
127
|
+
model,
|
|
128
|
+
extensions: extensions.length > 0 ? extensions : undefined,
|
|
60
129
|
},
|
|
61
130
|
};
|
|
62
131
|
console.log(`[Embedded] Completed in ${simulatedResult.metadata.duration}ms`);
|
|
@@ -64,10 +133,27 @@ export async function runEmbeddedAgent(config) {
|
|
|
64
133
|
}
|
|
65
134
|
/**
|
|
66
135
|
* Check if embedded mode is available
|
|
136
|
+
*
|
|
137
|
+
* Verifies pi-coding-agent SDK is properly linked and functional.
|
|
138
|
+
* Attempts dynamic import to check for SDK presence.
|
|
67
139
|
*/
|
|
68
|
-
export function isEmbeddedModeAvailable() {
|
|
69
|
-
|
|
70
|
-
|
|
140
|
+
export async function isEmbeddedModeAvailable() {
|
|
141
|
+
try {
|
|
142
|
+
// Try to import pi-coding-agent SDK
|
|
143
|
+
const { createAgentSession } = await import('@mariozechner/pi-coding-agent');
|
|
144
|
+
// Check for required API
|
|
145
|
+
const hasSessionAPI = typeof createAgentSession === 'function';
|
|
146
|
+
if (!hasSessionAPI) {
|
|
147
|
+
console.log('[Embedded] pi-coding-agent SDK found but createAgentSession API unavailable');
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
console.log('[Embedded] pi-coding-agent SDK fully available');
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.log('[Embedded] pi-coding-agent SDK not found:', error.message);
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
71
157
|
}
|
|
72
158
|
/**
|
|
73
159
|
* Initialize embedded mode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-runner.js","sourceRoot":"","sources":["../../../src/agent/embedded-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAA8B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"embedded-runner.js","sourceRoot":"","sources":["../../../src/agent/embedded-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent/index.js
CHANGED
|
@@ -13,4 +13,8 @@ export { loadUserProfile, saveUserProfile, learnPreference, ensureUserProfile, g
|
|
|
13
13
|
export { loadPersonalityState, savePersonalityState, recordInteraction, adaptPersonality, getDynamicPersona, getPersonalityInsights, resetPersonality } from "./dynamic-personality.js";
|
|
14
14
|
// Context Pruning (Phase 1.3)
|
|
15
15
|
export { calculateTokenUsage, shouldPrune, pruneContext, recommendStrategy, autoPrune, estimateTokens, oldestFirstStrategy, importanceStrategy, smartCompactionStrategy, smartestPruningStrategy, DEFAULT_BUDGET, BUDGET_PRESETS } from "./context-pruning.js";
|
|
16
|
+
// Model Fallback (Phase 3)
|
|
17
|
+
export { runWithModelFallback, runWithSimpleFallback, FailoverError, isRetryableError, classifyFailoverReason, computeBackoff } from "./model-fallback.js";
|
|
18
|
+
// Auth Profiles (Phase 4)
|
|
19
|
+
export { addAuthProfile, removeAuthProfile, getAuthProfile, listAuthProfiles, getApiKeyForProvider, markAuthProfileUsed, markAuthProfileFailure, markAuthProfileGood, rotateApiKey, ensureAuthProfilesFromConfig, isProfileInCooldown, resolveProfilesUnavailableReason, clearAuthProfiles, } from "./auth-profiles.js";
|
|
16
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAKnG,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGrG,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGvG,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAGtI,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAExL,8BAA8B;AAC9B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAKnG,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGrG,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG7E,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGvG,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAGtI,kCAAkC;AAClC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAExL,8BAA8B;AAC9B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAG9B,2BAA2B;AAC3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAQ7B,0BAA0B;AAC1B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,4BAA4B,EAC5B,mBAAmB,EACnB,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|