opc-agent 4.1.10 → 4.1.11

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.
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ /**
3
+ * KnowledgeEvolveEngine — Local-model-driven knowledge distillation
4
+ *
5
+ * Core principle: evolve MUST use local Ollama model (zero cost).
6
+ * Chat model can be GPT-4o/Claude, but knowledge work is always local.
7
+ *
8
+ * Architecture:
9
+ * Agent conversations → Extract insights → Deduplicate → Distill → Promote upward
10
+ * workstation (工位) → job (岗位) → industry (行业)
11
+ *
12
+ * Triggers:
13
+ * 1. After every N conversations (configurable, default 10)
14
+ * 2. Periodic timer (configurable, default 6h)
15
+ * 3. Manual `opc brain evolve`
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.AutoEvolveScheduler = exports.KnowledgeEvolveEngine = void 0;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ // Prompts for local LLM — kept short for small models
55
+ const EXTRACT_PROMPT = `Extract key knowledge from this conversation. Output JSON array of insights.
56
+ Each insight: { "title": "short title", "content": "key information", "tags": ["tag1"], "confidence": 0.0-1.0 }
57
+ Only extract reusable knowledge (facts, procedures, preferences), not casual chat.
58
+ If nothing worth saving, return [].
59
+
60
+ Conversation:
61
+ `;
62
+ const DEDUP_PROMPT = `Compare these two knowledge entries. Are they about the same topic?
63
+ If yes, merge them into one better entry. If no, return null.
64
+ Respond JSON only: { "isDuplicate": boolean, "merged": { "title": string, "content": string, "confidence": number } | null }
65
+
66
+ Entry A:
67
+ {A}
68
+
69
+ Entry B:
70
+ {B}
71
+ `;
72
+ const DISTILL_PROMPT = `Distill these workstation-level knowledge entries into a higher-level summary suitable for the {TARGET_TIER} tier.
73
+ Remove agent-specific details, keep universal patterns.
74
+ Output JSON: { "title": string, "content": string, "tags": [string], "confidence": number }
75
+
76
+ Entries:
77
+ {ENTRIES}
78
+ `;
79
+ class KnowledgeEvolveEngine {
80
+ config;
81
+ ollamaUrl;
82
+ model;
83
+ knowledgeDir;
84
+ conversationCount = 0;
85
+ timer = null;
86
+ constructor(agentDir, config = {}) {
87
+ this.config = {
88
+ enabled: config.enabled !== false,
89
+ localModel: config.localModel,
90
+ ollamaUrl: config.ollamaUrl || process.env.OLLAMA_BASE_URL || 'http://localhost:11434/v1',
91
+ conversationThreshold: config.conversationThreshold ?? 10,
92
+ intervalMs: config.intervalMs ?? 6 * 60 * 60 * 1000, // 6h
93
+ maxPagesPerTier: config.maxPagesPerTier ?? 100,
94
+ };
95
+ this.ollamaUrl = this.config.ollamaUrl;
96
+ this.model = this.config.localModel || '';
97
+ this.knowledgeDir = path.join(agentDir, '.opc', 'knowledge');
98
+ fs.mkdirSync(this.knowledgeDir, { recursive: true });
99
+ }
100
+ /** Auto-detect best local Ollama model for evolve tasks */
101
+ async detectLocalModel() {
102
+ if (this.model)
103
+ return this.model;
104
+ try {
105
+ const tagsUrl = this.ollamaUrl.replace('/v1', '/api/tags');
106
+ const res = await fetch(tagsUrl);
107
+ if (!res.ok)
108
+ return 'qwen2.5:0.5b';
109
+ const data = await res.json();
110
+ const models = (data.models || []).map((m) => m.name);
111
+ // Prefer larger models for better distillation
112
+ const preferred = ['qwen2.5:32b', 'qwen2.5:14b', 'qwen2.5:7b', 'llama3.1:8b', 'qwen2.5:3b', 'qwen2.5:1.5b', 'qwen2.5:0.5b'];
113
+ for (const p of preferred) {
114
+ if (models.includes(p)) {
115
+ this.model = p;
116
+ return p;
117
+ }
118
+ }
119
+ if (models.length > 0) {
120
+ this.model = models[0];
121
+ return models[0];
122
+ }
123
+ }
124
+ catch { /* Ollama not running */ }
125
+ this.model = 'qwen2.5:0.5b';
126
+ return this.model;
127
+ }
128
+ /** Call local Ollama model */
129
+ async callLocal(prompt, system) {
130
+ const model = await this.detectLocalModel();
131
+ const messages = [];
132
+ if (system)
133
+ messages.push({ role: 'system', content: system });
134
+ messages.push({ role: 'user', content: prompt });
135
+ try {
136
+ const res = await fetch(`${this.ollamaUrl}/chat/completions`, {
137
+ method: 'POST',
138
+ headers: { 'Content-Type': 'application/json' },
139
+ body: JSON.stringify({ model, messages, temperature: 0.3, max_tokens: 1000 }),
140
+ });
141
+ if (!res.ok)
142
+ return '';
143
+ const data = await res.json();
144
+ return data.choices?.[0]?.message?.content || '';
145
+ }
146
+ catch {
147
+ return '';
148
+ }
149
+ }
150
+ /** Extract knowledge from conversation messages */
151
+ async extractFromConversation(messages) {
152
+ if (messages.length < 2)
153
+ return [];
154
+ const conversationText = messages
155
+ .slice(-20) // Last 20 messages max
156
+ .map(m => `${m.role}: ${m.content.substring(0, 200)}`)
157
+ .join('\n');
158
+ const response = await this.callLocal(EXTRACT_PROMPT + conversationText, 'You are a knowledge extraction engine. Output valid JSON arrays only.');
159
+ const pages = [];
160
+ try {
161
+ const match = response.match(/\[[\s\S]*\]/);
162
+ if (!match)
163
+ return [];
164
+ const insights = JSON.parse(match[0]);
165
+ if (!Array.isArray(insights))
166
+ return [];
167
+ for (const insight of insights) {
168
+ if (!insight.title || !insight.content)
169
+ continue;
170
+ if ((insight.confidence || 0) < 0.3)
171
+ continue;
172
+ const slug = this.slugify(insight.title);
173
+ pages.push({
174
+ slug,
175
+ content: `## ${insight.title}\n\n${insight.content}`,
176
+ tier: 'workstation',
177
+ source: 'conversation',
178
+ confidence: insight.confidence || 0.5,
179
+ createdAt: new Date().toISOString(),
180
+ updatedAt: new Date().toISOString(),
181
+ usageCount: 1,
182
+ tags: insight.tags || [],
183
+ });
184
+ }
185
+ }
186
+ catch { /* Parse error, skip */ }
187
+ // Save extracted pages
188
+ for (const page of pages) {
189
+ this.savePage(page);
190
+ }
191
+ return pages;
192
+ }
193
+ /** Deduplicate knowledge pages within a tier */
194
+ async deduplicateInTier(tier) {
195
+ const pages = this.loadPages(tier);
196
+ if (pages.length < 2)
197
+ return 0;
198
+ let deduped = 0;
199
+ const toRemove = new Set();
200
+ for (let i = 0; i < pages.length; i++) {
201
+ if (toRemove.has(pages[i].slug))
202
+ continue;
203
+ for (let j = i + 1; j < pages.length; j++) {
204
+ if (toRemove.has(pages[j].slug))
205
+ continue;
206
+ const prompt = DEDUP_PROMPT
207
+ .replace('{A}', pages[i].content.substring(0, 300))
208
+ .replace('{B}', pages[j].content.substring(0, 300));
209
+ const response = await this.callLocal(prompt, 'Respond in JSON only.');
210
+ try {
211
+ const match = response.match(/\{[\s\S]*\}/);
212
+ if (!match)
213
+ continue;
214
+ const result = JSON.parse(match[0]);
215
+ if (result.isDuplicate && result.merged) {
216
+ // Update A with merged content, mark B for removal
217
+ pages[i].content = `## ${result.merged.title}\n\n${result.merged.content}`;
218
+ pages[i].confidence = Math.max(pages[i].confidence, result.merged.confidence || pages[i].confidence);
219
+ pages[i].usageCount += pages[j].usageCount;
220
+ pages[i].updatedAt = new Date().toISOString();
221
+ toRemove.add(pages[j].slug);
222
+ deduped++;
223
+ }
224
+ }
225
+ catch {
226
+ continue;
227
+ }
228
+ }
229
+ }
230
+ // Save results
231
+ for (const page of pages) {
232
+ if (!toRemove.has(page.slug)) {
233
+ this.savePage(page);
234
+ }
235
+ else {
236
+ this.deletePage(page.slug, tier);
237
+ }
238
+ }
239
+ return deduped;
240
+ }
241
+ /** Promote knowledge upward: workstation → job → industry */
242
+ async promoteKnowledge() {
243
+ let promoted = 0;
244
+ // Workstation → Job: pages with high confidence + usage
245
+ const wsPages = this.loadPages('workstation')
246
+ .filter(p => p.confidence >= 0.7 && p.usageCount >= 3);
247
+ if (wsPages.length >= 3) {
248
+ const entries = wsPages.slice(0, 10).map(p => p.content.substring(0, 200)).join('\n---\n');
249
+ const prompt = DISTILL_PROMPT
250
+ .replace('{TARGET_TIER}', 'job (岗位)')
251
+ .replace('{ENTRIES}', entries);
252
+ const response = await this.callLocal(prompt, 'Output JSON only.');
253
+ try {
254
+ const match = response.match(/\{[\s\S]*\}/);
255
+ if (match) {
256
+ const result = JSON.parse(match[0]);
257
+ if (result.title && result.content) {
258
+ const page = {
259
+ slug: `promoted-${this.slugify(result.title)}`,
260
+ content: `## ${result.title}\n\n${result.content}`,
261
+ tier: 'job',
262
+ source: 'evolve-promotion',
263
+ confidence: result.confidence || 0.8,
264
+ createdAt: new Date().toISOString(),
265
+ updatedAt: new Date().toISOString(),
266
+ usageCount: 0,
267
+ tags: result.tags || ['promoted'],
268
+ };
269
+ this.savePage(page);
270
+ promoted++;
271
+ }
272
+ }
273
+ }
274
+ catch { /* skip */ }
275
+ }
276
+ // Job → Industry: high confidence job pages
277
+ const jobPages = this.loadPages('job')
278
+ .filter(p => p.confidence >= 0.85 && p.usageCount >= 5);
279
+ if (jobPages.length >= 3) {
280
+ const entries = jobPages.slice(0, 10).map(p => p.content.substring(0, 200)).join('\n---\n');
281
+ const prompt = DISTILL_PROMPT
282
+ .replace('{TARGET_TIER}', 'industry (行业)')
283
+ .replace('{ENTRIES}', entries);
284
+ const response = await this.callLocal(prompt, 'Output JSON only.');
285
+ try {
286
+ const match = response.match(/\{[\s\S]*\}/);
287
+ if (match) {
288
+ const result = JSON.parse(match[0]);
289
+ if (result.title && result.content) {
290
+ const page = {
291
+ slug: `industry-${this.slugify(result.title)}`,
292
+ content: `## ${result.title}\n\n${result.content}`,
293
+ tier: 'industry',
294
+ source: 'evolve-promotion',
295
+ confidence: result.confidence || 0.9,
296
+ createdAt: new Date().toISOString(),
297
+ updatedAt: new Date().toISOString(),
298
+ usageCount: 0,
299
+ tags: result.tags || ['promoted'],
300
+ };
301
+ this.savePage(page);
302
+ promoted++;
303
+ }
304
+ }
305
+ }
306
+ catch { /* skip */ }
307
+ }
308
+ return promoted;
309
+ }
310
+ /** Full evolve cycle: extract → dedup → promote */
311
+ async evolve(recentMessages) {
312
+ const result = { extracted: 0, deduplicated: 0, promoted: 0, errors: [] };
313
+ if (!this.config.enabled)
314
+ return result;
315
+ try {
316
+ // Step 1: Extract from recent conversation
317
+ if (recentMessages && recentMessages.length > 0) {
318
+ const pages = await this.extractFromConversation(recentMessages);
319
+ result.extracted = pages.length;
320
+ }
321
+ // Step 2: Deduplicate within each tier
322
+ result.deduplicated += await this.deduplicateInTier('workstation');
323
+ result.deduplicated += await this.deduplicateInTier('job');
324
+ // Step 3: Promote upward
325
+ result.promoted = await this.promoteKnowledge();
326
+ }
327
+ catch (err) {
328
+ result.errors.push(err.message || String(err));
329
+ }
330
+ // Save evolve log
331
+ this.saveEvolveLog(result);
332
+ return result;
333
+ }
334
+ /** Called after each conversation turn */
335
+ onConversationTurn(messages) {
336
+ this.conversationCount++;
337
+ if (this.conversationCount >= (this.config.conversationThreshold || 10)) {
338
+ this.conversationCount = 0;
339
+ // Background evolve — don't await, fire and forget
340
+ this.evolve(messages).catch(() => { });
341
+ }
342
+ }
343
+ /** Start periodic evolve timer */
344
+ startPeriodicEvolve() {
345
+ if (this.timer)
346
+ return;
347
+ const interval = this.config.intervalMs || 6 * 60 * 60 * 1000;
348
+ this.timer = setInterval(() => {
349
+ this.evolve().catch(() => { });
350
+ }, interval);
351
+ }
352
+ /** Stop periodic evolve */
353
+ stopPeriodicEvolve() {
354
+ if (this.timer) {
355
+ clearInterval(this.timer);
356
+ this.timer = null;
357
+ }
358
+ }
359
+ /** Get stats for all tiers */
360
+ getStats() {
361
+ return {
362
+ workstation: this.loadPages('workstation').length,
363
+ job: this.loadPages('job').length,
364
+ industry: this.loadPages('industry').length,
365
+ lastEvolve: this.getLastEvolveTime(),
366
+ };
367
+ }
368
+ // ─── File I/O ────────────────────────────────────────────
369
+ savePage(page) {
370
+ const tierDir = path.join(this.knowledgeDir, page.tier);
371
+ fs.mkdirSync(tierDir, { recursive: true });
372
+ const filePath = path.join(tierDir, `${page.slug}.json`);
373
+ fs.writeFileSync(filePath, JSON.stringify(page, null, 2));
374
+ }
375
+ loadPages(tier) {
376
+ const tierDir = path.join(this.knowledgeDir, tier);
377
+ if (!fs.existsSync(tierDir))
378
+ return [];
379
+ return fs.readdirSync(tierDir)
380
+ .filter(f => f.endsWith('.json'))
381
+ .map(f => {
382
+ try {
383
+ return JSON.parse(fs.readFileSync(path.join(tierDir, f), 'utf-8'));
384
+ }
385
+ catch {
386
+ return null;
387
+ }
388
+ })
389
+ .filter((p) => p !== null);
390
+ }
391
+ deletePage(slug, tier) {
392
+ const filePath = path.join(this.knowledgeDir, tier, `${slug}.json`);
393
+ try {
394
+ fs.unlinkSync(filePath);
395
+ }
396
+ catch { /* ok */ }
397
+ }
398
+ saveEvolveLog(result) {
399
+ const logPath = path.join(this.knowledgeDir, 'evolve-log.json');
400
+ let logs = [];
401
+ try {
402
+ logs = JSON.parse(fs.readFileSync(logPath, 'utf-8'));
403
+ }
404
+ catch { /* ok */ }
405
+ logs.push({ ...result, timestamp: new Date().toISOString() });
406
+ // Keep last 100 entries
407
+ if (logs.length > 100)
408
+ logs = logs.slice(-100);
409
+ fs.writeFileSync(logPath, JSON.stringify(logs, null, 2));
410
+ }
411
+ getLastEvolveTime() {
412
+ const logPath = path.join(this.knowledgeDir, 'evolve-log.json');
413
+ try {
414
+ const logs = JSON.parse(fs.readFileSync(logPath, 'utf-8'));
415
+ return logs[logs.length - 1]?.timestamp;
416
+ }
417
+ catch {
418
+ return undefined;
419
+ }
420
+ }
421
+ slugify(text) {
422
+ return text
423
+ .toLowerCase()
424
+ .replace(/[^a-z0-9\u4e00-\u9fff]+/g, '-')
425
+ .replace(/^-|-$/g, '')
426
+ .substring(0, 60);
427
+ }
428
+ }
429
+ exports.KnowledgeEvolveEngine = KnowledgeEvolveEngine;
430
+ /**
431
+ * AutoEvolveScheduler — integrates with runtime
432
+ */
433
+ class AutoEvolveScheduler {
434
+ engine;
435
+ constructor(agentDir, config) {
436
+ this.engine = new KnowledgeEvolveEngine(agentDir, config);
437
+ }
438
+ async start() {
439
+ await this.engine.detectLocalModel();
440
+ this.engine.startPeriodicEvolve();
441
+ }
442
+ stop() {
443
+ this.engine.stopPeriodicEvolve();
444
+ }
445
+ getEngine() {
446
+ return this.engine;
447
+ }
448
+ }
449
+ exports.AutoEvolveScheduler = AutoEvolveScheduler;
450
+ //# sourceMappingURL=evolve-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolve-engine.js","sourceRoot":"","sources":["../../src/memory/evolve-engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opc-agent",
3
- "version": "4.1.10",
3
+ "version": "4.1.11",
4
4
  "description": "Open Agent Framework — Build, test, and run AI Agents for business workstations",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",