foliko 1.0.87 → 1.1.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/.agent/data/default.json +3 -108
- package/.agent/data/plugins-state.json +34 -1
- package/.agent/mcp_config.json +0 -1
- package/.agent/memory/core.md +1 -0
- package/.agent/memory/project/mnn93ogy-ypjn27.md +9 -0
- package/.agent/memory/project/mnn98fqy-5nhc1u.md +25 -0
- package/.agent/memory/user/mnm67t9m-x8rekk.md +9 -0
- package/.agent/memory/user/mnn5mmqh-w6aktx.md +11 -0
- package/.agent/memory/user/mnnbfhhn-dk1bd1.md +22 -0
- package/.agent/plugins/__pycache__/file_writer.cpython-312.pyc +0 -0
- package/.agent/plugins/poster-plugin/README.md +304 -0
- package/.agent/plugins/poster-plugin/fonts/PatuaOne-Regular.ttf +0 -0
- package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221.ttf +0 -0
- package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221/347/262/227/344/275/223.ttf +0 -0
- package/.agent/plugins/poster-plugin/index.js +13 -0
- package/.agent/plugins/poster-plugin/package.json +28 -0
- package/.agent/plugins/poster-plugin/src/canvas.js +161 -0
- package/.agent/plugins/poster-plugin/src/components/arrow.js +84 -0
- package/.agent/plugins/poster-plugin/src/components/avatar.js +71 -0
- package/.agent/plugins/poster-plugin/src/components/badge.js +85 -0
- package/.agent/plugins/poster-plugin/src/components/card.js +88 -0
- package/.agent/plugins/poster-plugin/src/components/chart.js +127 -0
- package/.agent/plugins/poster-plugin/src/components/chip.js +88 -0
- package/.agent/plugins/poster-plugin/src/components/columns.js +107 -0
- package/.agent/plugins/poster-plugin/src/components/cta.js +85 -0
- package/.agent/plugins/poster-plugin/src/components/divider.js +55 -0
- package/.agent/plugins/poster-plugin/src/components/feature.js +85 -0
- package/.agent/plugins/poster-plugin/src/components/featureGrid.js +112 -0
- package/.agent/plugins/poster-plugin/src/components/grid.js +118 -0
- package/.agent/plugins/poster-plugin/src/components/imageFrame.js +155 -0
- package/.agent/plugins/poster-plugin/src/components/index.js +62 -0
- package/.agent/plugins/poster-plugin/src/components/listItem.js +146 -0
- package/.agent/plugins/poster-plugin/src/components/notification.js +123 -0
- package/.agent/plugins/poster-plugin/src/components/progress.js +79 -0
- package/.agent/plugins/poster-plugin/src/components/progressCircle.js +117 -0
- package/.agent/plugins/poster-plugin/src/components/quote.js +97 -0
- package/.agent/plugins/poster-plugin/src/components/rating.js +85 -0
- package/.agent/plugins/poster-plugin/src/components/star.js +70 -0
- package/.agent/plugins/poster-plugin/src/components/statCard.js +105 -0
- package/.agent/plugins/poster-plugin/src/components/stepper.js +118 -0
- package/.agent/plugins/poster-plugin/src/components/table.js +159 -0
- package/.agent/plugins/poster-plugin/src/components/tagCloud.js +78 -0
- package/.agent/plugins/poster-plugin/src/components/timeline.js +105 -0
- package/.agent/plugins/poster-plugin/src/components/watermark.js +52 -0
- package/.agent/plugins/poster-plugin/src/composer.js +1904 -0
- package/.agent/plugins/poster-plugin/src/elements/artText.js +60 -0
- package/.agent/plugins/poster-plugin/src/elements/background.js +52 -0
- package/.agent/plugins/poster-plugin/src/elements/circle.js +31 -0
- package/.agent/plugins/poster-plugin/src/elements/image.js +71 -0
- package/.agent/plugins/poster-plugin/src/elements/index.js +26 -0
- package/.agent/plugins/poster-plugin/src/elements/line.js +23 -0
- package/.agent/plugins/poster-plugin/src/elements/polygon.js +32 -0
- package/.agent/plugins/poster-plugin/src/elements/rectangle.js +32 -0
- package/.agent/plugins/poster-plugin/src/elements/svg.js +92 -0
- package/.agent/plugins/poster-plugin/src/elements/text.js +38 -0
- package/.agent/plugins/poster-plugin/src/fonts.js +118 -0
- package/.agent/plugins/poster-plugin/src/index.js +1659 -0
- package/.agent/plugins/poster-plugin/src/presets.js +36 -0
- package/.agent/plugins/poster-plugin/src/templates/business.js +60 -0
- package/.agent/plugins/poster-plugin/src/templates/gradient.js +64 -0
- package/.agent/plugins/poster-plugin/src/templates/index.js +43 -0
- package/.agent/plugins/poster-plugin/src/templates/modern.js +69 -0
- package/.agent/plugins/poster-plugin/src/templates/simple.js +58 -0
- package/.agent/plugins/poster-plugin/src/templates/social.js +62 -0
- package/.agent/plugins/poster-plugin/src/templates/tech.js +84 -0
- package/.agent/sessions/cli_default.json +24265 -0
- package/.agent/weixin.json +6 -0
- package/.claude/settings.local.json +5 -8
- package/CLAUDE.md +144 -108
- package/docs/CONTEXT_DESIGN.md +1596 -0
- package/examples/test-concurrent-chat.js +60 -60
- package/output/beef-love-poster.png +0 -0
- package/package.json +2 -2
- package/plugins/default-plugins.js +2 -1
- package/plugins/extension-executor-plugin.js +11 -0
- package/plugins/memory-plugin.js +984 -0
- package/plugins/session-plugin.js +57 -1
- package/plugins/weixin-plugin.js +24 -22
- package/skills/poster-guide/SKILL.md +743 -0
- package/skills/python-plugin-dev/SKILL.md +238 -238
- package/skills/skill-guide/SKILL.md +130 -108
- package/src/capabilities/skill-manager.js +99 -0
- package/src/core/agent-chat.js +538 -138
- package/src/core/agent-context.js +188 -0
- package/src/core/agent.js +6 -2
- package/src/core/context-manager.js +283 -0
- package/src/core/framework.js +264 -3
- package/src/core/plugin-manager.js +79 -2
- package/src/core/request-context.js +98 -0
- package/src/core/session-context.js +341 -0
- package/src/core/session-storage.js +274 -0
- package/src/executors/mcp-executor.js +2 -2
- package/src/utils/index.js +239 -67
- package/src/utils/plugin-helpers.js +17 -0
- package//346/265/267/346/212/245/346/217/222/344/273/266.md +621 -0
- package/.agent/plugins/__pycache__/test_plugin.cpython-312.pyc +0 -0
- package/.agent/plugins/temp-repo/LICENSE +0 -201
- package/.agent/plugins/temp-repo/puppeteer-plugin/README.md +0 -147
- package/.agent/plugins/temp-repo/puppeteer-plugin/index.js +0 -1418
- package/.agent/plugins/temp-repo/puppeteer-plugin/package.json +0 -9
- package/.agent/plugins/test_plugin.py +0 -304
- package/examples/test-chat-debug.js +0 -102
- package/examples/test-chat-result.js +0 -76
- package/examples/test-chat-stream-diff.js +0 -63
|
@@ -39,7 +39,11 @@ class SessionPlugin extends Plugin {
|
|
|
39
39
|
maxHistoryLength: config.maxHistoryLength || 150, // 放宽到 150,Agent 已有智能压缩
|
|
40
40
|
autoCleanup: config.autoCleanup||false, // 默认不开启自动清理,避免误删会话
|
|
41
41
|
cleanupInterval: config.cleanupInterval || 5 * 60 * 1000, // 5分钟
|
|
42
|
-
persistToStorage: config.persistToStorage !== false // 默认持久化到 storage
|
|
42
|
+
persistToStorage: config.persistToStorage !== false, // 默认持久化到 storage
|
|
43
|
+
// Session 钩子配置
|
|
44
|
+
onSessionStart: config.onSessionStart || null,
|
|
45
|
+
onSessionEnd: config.onSessionEnd || null,
|
|
46
|
+
onSessionCreated: config.onSessionCreated || null
|
|
43
47
|
}
|
|
44
48
|
// console.log('SessionPlugin config:', this.config)
|
|
45
49
|
this._framework = null
|
|
@@ -287,6 +291,15 @@ class SessionPlugin extends Plugin {
|
|
|
287
291
|
|
|
288
292
|
this._sessions.set(id, session)
|
|
289
293
|
this._saveToStorage(session)
|
|
294
|
+
|
|
295
|
+
// 触发 session:created 事件
|
|
296
|
+
this._events.emit('session:created', session)
|
|
297
|
+
|
|
298
|
+
// 调用 onSessionCreated 钩子
|
|
299
|
+
if (this.config.onSessionCreated) {
|
|
300
|
+
this._callHook(this.config.onSessionCreated, session)
|
|
301
|
+
}
|
|
302
|
+
|
|
290
303
|
return session
|
|
291
304
|
}
|
|
292
305
|
|
|
@@ -340,6 +353,15 @@ class SessionPlugin extends Plugin {
|
|
|
340
353
|
log.warn('Invalid message format, skipping:', { sessionId, message });
|
|
341
354
|
return session;
|
|
342
355
|
}
|
|
356
|
+
|
|
357
|
+
// 触发 session:started 事件(首次添加消息时)
|
|
358
|
+
if (session.messages.length === 0) {
|
|
359
|
+
this._events.emit('session:started', session)
|
|
360
|
+
if (this.config.onSessionStart) {
|
|
361
|
+
this._callHook(this.config.onSessionStart, session)
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
343
365
|
session.messages.push(message)
|
|
344
366
|
session.lastActive = new Date()
|
|
345
367
|
|
|
@@ -483,6 +505,40 @@ class SessionPlugin extends Plugin {
|
|
|
483
505
|
this._events.off(event, listener)
|
|
484
506
|
}
|
|
485
507
|
|
|
508
|
+
/**
|
|
509
|
+
* 调用会话钩子
|
|
510
|
+
* @param {Function} hook - 钩子函数
|
|
511
|
+
* @param {Object} session - 会话对象
|
|
512
|
+
* @private
|
|
513
|
+
*/
|
|
514
|
+
_callHook(hook, session) {
|
|
515
|
+
if (typeof hook === 'function') {
|
|
516
|
+
try {
|
|
517
|
+
const result = hook(session)
|
|
518
|
+
if (result && typeof result.catch === 'function') {
|
|
519
|
+
result.catch(err => log.warn('Session hook error:', err.message))
|
|
520
|
+
}
|
|
521
|
+
} catch (err) {
|
|
522
|
+
log.warn('Session hook error:', err.message)
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* 结束会话(触发 session:ended 事件)
|
|
529
|
+
* 当会话完成处理时调用
|
|
530
|
+
* @param {string} sessionId - 会话 ID
|
|
531
|
+
*/
|
|
532
|
+
endSession(sessionId) {
|
|
533
|
+
const session = this.getSession(sessionId)
|
|
534
|
+
if (session) {
|
|
535
|
+
this._events.emit('session:ended', session)
|
|
536
|
+
if (this.config.onSessionEnd) {
|
|
537
|
+
this._callHook(this.config.onSessionEnd, session)
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
486
542
|
/**
|
|
487
543
|
* 启动自动清理定时器
|
|
488
544
|
*/
|
package/plugins/weixin-plugin.js
CHANGED
|
@@ -372,8 +372,9 @@ class WeixinPlugin extends Plugin {
|
|
|
372
372
|
return { agent, sessionId: `weixin_${userId}` }
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
-
// 创建新 agent
|
|
376
|
-
const agent = this._framework.
|
|
375
|
+
// 创建新 agent - 和 CLI 一样使用 createAgent
|
|
376
|
+
const agent = this._framework.createAgent({
|
|
377
|
+
name: `weixin_${userId}`,
|
|
377
378
|
systemPrompt: this.systemPrompt,
|
|
378
379
|
sharedPrompt: `工作目录: {{WORK_DIR}}`,
|
|
379
380
|
metadata: { WORK_DIR: process.cwd() }
|
|
@@ -466,14 +467,18 @@ class WeixinPlugin extends Plugin {
|
|
|
466
467
|
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
467
468
|
|
|
468
469
|
try {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
const
|
|
470
|
+
// 使用 chatStream 保持和 CLI 一致的行为
|
|
471
|
+
|
|
472
|
+
let fullResponse = '';
|
|
473
|
+
for await (const chunk of agent.chatStream(text, { sessionId })) {
|
|
474
|
+
if (chunk.type === 'text') {
|
|
475
|
+
fullResponse += chunk.text;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
const response = cleanResponse(fullResponse);
|
|
473
479
|
|
|
474
|
-
if (
|
|
475
|
-
await this._sendMessageBatch(originalMsg, userId,
|
|
476
|
-
// log.info(` 回复成功 (${fullResponse.length} 字符)`)
|
|
480
|
+
if (response) {
|
|
481
|
+
await this._sendMessageBatch(originalMsg, userId, response, true)
|
|
477
482
|
}
|
|
478
483
|
} catch (err) {
|
|
479
484
|
log.error(' Media chat error:', err)
|
|
@@ -506,21 +511,18 @@ class WeixinPlugin extends Plugin {
|
|
|
506
511
|
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
507
512
|
|
|
508
513
|
try {
|
|
509
|
-
//
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
// this._sessionPlugin.addMessage(sessionId, { role: 'assistant', content: fullResponse })
|
|
518
|
-
// }
|
|
514
|
+
// 使用 chatStream 保持和 CLI 一致的行为
|
|
515
|
+
let fullResponse = '';
|
|
516
|
+
for await (const chunk of agent.chatStream(text, { sessionId })) {
|
|
517
|
+
if (chunk.type === 'text') {
|
|
518
|
+
fullResponse += chunk.text;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
const response = cleanResponse(fullResponse);
|
|
519
522
|
|
|
520
523
|
// 发送回复(超过500字自动分批)
|
|
521
|
-
if (
|
|
522
|
-
await this._sendMessageBatch(originalMsg, userId,
|
|
523
|
-
// log.info(` 回复成功 (${fullResponse.length} 字符)`)
|
|
524
|
+
if (response) {
|
|
525
|
+
await this._sendMessageBatch(originalMsg, userId, response, true)
|
|
524
526
|
} else {
|
|
525
527
|
await this._sendMessageBatch(originalMsg, userId, '抱歉,我没有收到有效的回复。', true)
|
|
526
528
|
}
|