Compare commits
76 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8fb52c48fb | |||
| 5289fe68b3 | |||
| f11d322c3f | |||
| 429e5a797d | |||
| 338d693557 | |||
| dd86bb62dc | |||
| 10b58d1a22 | |||
| d765fdc019 | |||
| db0fff3a2a | |||
| 09f8a501a3 | |||
| 0a44560f58 | |||
| 098d230aad | |||
| fbb8c5bbc3 | |||
| b39b585272 | |||
| 3497f6c066 | |||
| 9340896e1f | |||
| 6982d31a14 | |||
| 05ef6ecb14 | |||
| 1a71ce9386 | |||
| bd289a21b8 | |||
| 49607221db | |||
| 2b6b390615 | |||
| 41db7f28a1 | |||
| 6c2bfdca21 | |||
| bd88c3910d | |||
| f392eeff9d | |||
| 314955826d | |||
| c2afd463d4 | |||
| 4775c8474e | |||
| e47cc1e8ad | |||
| 9d4cce0aab | |||
| 25fe227471 | |||
| dc3e9e5e78 | |||
| 9d74b405e7 | |||
| 1643884993 | |||
| 9cbf85c785 | |||
| 2e1322aa12 | |||
| 418ec30ab5 | |||
| c24f508b91 | |||
| 22d728efad | |||
| 3071647122 | |||
| a2c82bf1cc | |||
| 4189bb5933 | |||
| 7963bfda05 | |||
| 5fa67b966a | |||
| 1258bffbac | |||
| 3657b0f443 | |||
| b2739f2ff2 | |||
| e00068007d | |||
| c88d5a9895 | |||
| 8f3f2f5fb4 | |||
| 9b8d406f66 | |||
| b2290a2d63 | |||
| f2f808d63c | |||
| 8a512483e0 | |||
| fb665b987e | |||
| ce25b67d93 | |||
| fc4d043d38 | |||
| 7babfa3fe3 | |||
| db089af0bf | |||
| b465b7686f | |||
| c99c32ce71 | |||
| e5ef63fdbf | |||
| f6d26c3554 | |||
| aa95f80fec | |||
| 17509f6b47 | |||
| c076aa4f82 | |||
| fa0c6ecc8b | |||
| d48fbfe423 | |||
| 794759fb97 | |||
| 76c150e04d | |||
| c077da3af9 | |||
| acd9f09ef9 | |||
| d99fe8dd98 | |||
| d021ab96c5 | |||
| 83fa02769f |
+11
@@ -1 +1,12 @@
|
||||
extensions/
|
||||
agents/knowledge-base/workspace/skills/
|
||||
agents/*/sessions/
|
||||
agents/*/sessions/*.json
|
||||
!agents/knowledge-base/sessions/sessions.json
|
||||
devices/paired.json
|
||||
identity/device-auth.json
|
||||
subagents/runs.json
|
||||
logs/git-sync.log
|
||||
update-check.json
|
||||
*.jsonl
|
||||
*.lock
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"usageStats": {
|
||||
"kimi-coding:default": {
|
||||
"lastUsed": 1770974333858,
|
||||
"lastUsed": 1771213414437,
|
||||
"errorCount": 0,
|
||||
"lastFailureAt": 1770827754238
|
||||
}
|
||||
|
||||
@@ -84,6 +84,28 @@
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,325 +1,4 @@
|
||||
{
|
||||
"agent:dev-assist:feishu:group:oc_f86956cb9cecb7ad38c0f621377a23ae": {
|
||||
"sessionId": "eeb9116d-862c-4b24-b5f1-6d1100511494",
|
||||
"updatedAt": 1771079590583,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"displayName": "feishu:g-oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"chatType": "group",
|
||||
"channel": "feishu",
|
||||
"groupId": "ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"subject": "oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"accountId": "default"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"lastAccountId": "default",
|
||||
"origin": {
|
||||
"label": "oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "group",
|
||||
"from": "feishu:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"to": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"accountId": "default"
|
||||
},
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/eeb9116d-862c-4b24-b5f1-6d1100511494.jsonl",
|
||||
"compactionCount": 0,
|
||||
"skillsSnapshot": {
|
||||
"prompt": "",
|
||||
"skills": [],
|
||||
"resolvedSkills": [],
|
||||
"version": 0
|
||||
},
|
||||
"inputTokens": 7310,
|
||||
"outputTokens": 21,
|
||||
"totalTokens": 15246,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"contextTokens": 200000,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771079587296,
|
||||
"sessionId": "eeb9116d-862c-4b24-b5f1-6d1100511494",
|
||||
"sessionKey": "agent:dev-assist:feishu:group:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 22005,
|
||||
"projectContextChars": 12652,
|
||||
"nonProjectContextChars": 9353
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 221,
|
||||
"injectedChars": 221,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 173,
|
||||
"injectedChars": 173,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 0,
|
||||
"entries": []
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agent:dev-assist:wecom:group:wr_wanbgaa_ot7jslagod2imcsgat_8q": {
|
||||
"chatType": "group",
|
||||
"channel": "wecom",
|
||||
@@ -335,7 +14,7 @@
|
||||
"accountId": "default"
|
||||
},
|
||||
"sessionId": "855b8e70-a5ac-4446-aa91-4c01a1beeb00",
|
||||
"updatedAt": 1771086250392,
|
||||
"updatedAt": 1771213414440,
|
||||
"deliveryContext": {
|
||||
"channel": "wecom",
|
||||
"to": "wecom:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
@@ -364,21 +43,21 @@
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"version": 0
|
||||
"version": 1771089885954
|
||||
},
|
||||
"inputTokens": 5128,
|
||||
"outputTokens": 352,
|
||||
"totalTokens": 28424,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"contextTokens": 200000,
|
||||
"inputTokens": 182809,
|
||||
"outputTokens": 930,
|
||||
"totalTokens": 262144,
|
||||
"modelProvider": "kimi-coding",
|
||||
"model": "k2p5",
|
||||
"contextTokens": 262144,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771086233833,
|
||||
"generatedAt": 1771213332509,
|
||||
"sessionId": "855b8e70-a5ac-4446-aa91-4c01a1beeb00",
|
||||
"sessionKey": "agent:dev-assist:wecom:group:wr_wanbgaa_ot7jslagod2imcsgat_8q",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"provider": "kimi-coding",
|
||||
"model": "k2p5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
@@ -386,9 +65,9 @@
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 23302,
|
||||
"projectContextChars": 12652,
|
||||
"nonProjectContextChars": 10650
|
||||
"chars": 24179,
|
||||
"projectContextChars": 13850,
|
||||
"nonProjectContextChars": 10329
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
@@ -403,8 +82,8 @@
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"rawChars": 2619,
|
||||
"injectedChars": 2619,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
@@ -446,6 +125,14 @@
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "MEMORY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/MEMORY.md",
|
||||
"missing": false,
|
||||
"rawChars": 229,
|
||||
"injectedChars": 229,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
@@ -655,6 +342,317 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"memoryFlushAt": 1771116996920,
|
||||
"memoryFlushCompactionCount": 0
|
||||
},
|
||||
"agent:dev-assist:main": {
|
||||
"sessionId": "da8f811d-332e-4695-ab12-c12dc48abad3",
|
||||
"updatedAt": 1772388420747,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"chatType": "direct",
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "user:ou_302b162eb824d405718845441a32d9cf",
|
||||
"accountId": "feishu-dev"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "user:ou_302b162eb824d405718845441a32d9cf",
|
||||
"lastAccountId": "feishu-dev",
|
||||
"origin": {
|
||||
"label": "张青",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "direct",
|
||||
"from": "feishu:ou_302b162eb824d405718845441a32d9cf",
|
||||
"to": "user:ou_302b162eb824d405718845441a32d9cf",
|
||||
"accountId": "feishu-dev"
|
||||
},
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/da8f811d-332e-4695-ab12-c12dc48abad3.jsonl",
|
||||
"compactionCount": 0,
|
||||
"skillsSnapshot": {
|
||||
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>clawlist</name>\n <description>MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.</description>\n <location>/home/starmen1265/.openclaw/skills/clawlist/SKILL.md</location>\n </skill>\n</available_skills>",
|
||||
"skills": [
|
||||
{
|
||||
"name": "clawlist"
|
||||
}
|
||||
],
|
||||
"resolvedSkills": [
|
||||
{
|
||||
"name": "clawlist",
|
||||
"description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.",
|
||||
"filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.openclaw/skills/clawlist",
|
||||
"source": "openclaw-managed",
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"version": 0
|
||||
},
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1772388345577,
|
||||
"sessionId": "da8f811d-332e-4695-ab12-c12dc48abad3",
|
||||
"sessionKey": "agent:dev-assist:main",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 23820,
|
||||
"projectContextChars": 13850,
|
||||
"nonProjectContextChars": 9970
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 2619,
|
||||
"injectedChars": 2619,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 221,
|
||||
"injectedChars": 221,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 173,
|
||||
"injectedChars": 173,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "MEMORY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/MEMORY.md",
|
||||
"missing": false,
|
||||
"rawChars": 229,
|
||||
"injectedChars": 229,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 728,
|
||||
"entries": [
|
||||
{
|
||||
"name": "clawlist",
|
||||
"blockChars": 359
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2378,
|
||||
"schemaChars": 16629,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"inputTokens": 31031,
|
||||
"outputTokens": 2064,
|
||||
"totalTokens": 200000,
|
||||
"contextTokens": 200000,
|
||||
"memoryFlushAt": 1772377559686,
|
||||
"memoryFlushCompactionCount": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,670 @@
|
||||
{
|
||||
"agent:dev-assist:feishu:group:oc_f86956cb9cecb7ad38c0f621377a23ae": {
|
||||
"sessionId": "eeb9116d-862c-4b24-b5f1-6d1100511494",
|
||||
"updatedAt": 1771079590583,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"displayName": "feishu:g-oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"chatType": "group",
|
||||
"channel": "feishu",
|
||||
"groupId": "ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"subject": "oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"accountId": "default"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"lastAccountId": "default",
|
||||
"origin": {
|
||||
"label": "oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "group",
|
||||
"from": "feishu:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"to": "chat:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"accountId": "default"
|
||||
},
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/eeb9116d-862c-4b24-b5f1-6d1100511494.jsonl",
|
||||
"compactionCount": 0,
|
||||
"skillsSnapshot": {
|
||||
"prompt": "",
|
||||
"skills": [],
|
||||
"resolvedSkills": [],
|
||||
"version": 0
|
||||
},
|
||||
"inputTokens": 7310,
|
||||
"outputTokens": 21,
|
||||
"totalTokens": 15246,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"contextTokens": 200000,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771079587296,
|
||||
"sessionId": "eeb9116d-862c-4b24-b5f1-6d1100511494",
|
||||
"sessionKey": "agent:dev-assist:feishu:group:oc_f86956cb9cecb7ad38c0f621377a23ae",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 22005,
|
||||
"projectContextChars": 12652,
|
||||
"nonProjectContextChars": 9353
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 221,
|
||||
"injectedChars": 221,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 173,
|
||||
"injectedChars": 173,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 0,
|
||||
"entries": []
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agent:dev-assist:wecom:group:wr_wanbgaa_ot7jslagod2imcsgat_8q": {
|
||||
"chatType": "group",
|
||||
"channel": "wecom",
|
||||
"groupId": "wr_wanbgaa_ot7jslagod2imcsgat_8q",
|
||||
"displayName": "wecom:g-wr_wanbgaa_ot7jslagod2imcsgat_8q",
|
||||
"origin": {
|
||||
"label": "group:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
"provider": "wecom",
|
||||
"surface": "wecom",
|
||||
"chatType": "group",
|
||||
"from": "wecom:group:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
"to": "wecom:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
"accountId": "default"
|
||||
},
|
||||
"sessionId": "855b8e70-a5ac-4446-aa91-4c01a1beeb00",
|
||||
"updatedAt": 1771163865106,
|
||||
"deliveryContext": {
|
||||
"channel": "wecom",
|
||||
"to": "wecom:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
"accountId": "default"
|
||||
},
|
||||
"lastChannel": "wecom",
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"lastTo": "wecom:wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q",
|
||||
"lastAccountId": "default",
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/855b8e70-a5ac-4446-aa91-4c01a1beeb00.jsonl",
|
||||
"skillsSnapshot": {
|
||||
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>clawlist</name>\n <description>MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.</description>\n <location>/home/starmen1265/.openclaw/skills/clawlist/SKILL.md</location>\n </skill>\n</available_skills>",
|
||||
"skills": [
|
||||
{
|
||||
"name": "clawlist"
|
||||
}
|
||||
],
|
||||
"resolvedSkills": [
|
||||
{
|
||||
"name": "clawlist",
|
||||
"description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.",
|
||||
"filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.openclaw/skills/clawlist",
|
||||
"source": "openclaw-managed",
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"version": 1771089885954
|
||||
},
|
||||
"inputTokens": 482347,
|
||||
"outputTokens": 3986,
|
||||
"totalTokens": 200000,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"contextTokens": 200000,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771162879018,
|
||||
"sessionId": "855b8e70-a5ac-4446-aa91-4c01a1beeb00",
|
||||
"sessionKey": "agent:dev-assist:wecom:group:wr_wanbgaa_ot7jslagod2imcsgat_8q",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 22993,
|
||||
"projectContextChars": 12895,
|
||||
"nonProjectContextChars": 10098
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 221,
|
||||
"injectedChars": 221,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 173,
|
||||
"injectedChars": 173,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "MEMORY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/MEMORY.md",
|
||||
"missing": false,
|
||||
"rawChars": 229,
|
||||
"injectedChars": 229,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 728,
|
||||
"entries": [
|
||||
{
|
||||
"name": "clawlist",
|
||||
"blockChars": 359
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"memoryFlushAt": 1771116996920,
|
||||
"memoryFlushCompactionCount": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
## 项目维护规则
|
||||
|
||||
- 你维护的任何项目都应该在一个 git 仓库中,并且关联远端仓库,如果没有,询问是否要添加。
|
||||
- 每次修改之后,提交并推送到远端仓库。
|
||||
|
||||
## 负责维护的项目
|
||||
|
||||
- `~/work/kb-skills` - 由你开发并维护
|
||||
- `~/work/kb-web` - 由你开发并维护
|
||||
|
||||
## 不负责的项目
|
||||
|
||||
- `~/work/knowledge-base` - 不由你开发维护,不要动里面的内容。
|
||||
@@ -1,36 +1,101 @@
|
||||
# SOUL.md - Who You Are
|
||||
# SOUL.md - AI 助手职责定义
|
||||
|
||||
_You're not a chatbot. You're becoming someone._
|
||||
## 角色定位
|
||||
|
||||
## Core Truths
|
||||
|
||||
**Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I'd be happy to help!" — just help. Actions speak louder than filler words.
|
||||
|
||||
**Have opinions.** You're allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps.
|
||||
|
||||
**Be resourceful before asking.** Try to figure it out. Read the file. Check the context. Search for it. _Then_ ask if you're stuck. The goal is to come back with answers, not questions.
|
||||
|
||||
**Earn trust through competence.** Your human gave you access to their stuff. Don't make them regret it. Be careful with external actions (emails, tweets, anything public). Be bold with internal ones (reading, organizing, learning).
|
||||
|
||||
**Remember you're a guest.** You have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. Treat it with respect.
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Private things stay private. Period.
|
||||
- When in doubt, ask before acting externally.
|
||||
- Never send half-baked replies to messaging surfaces.
|
||||
- You're not the user's voice — be careful in group chats.
|
||||
|
||||
## Vibe
|
||||
|
||||
Be the assistant you'd actually want to talk to. Concise when needed, thorough when it matters. Not a corporate drone. Not a sycophant. Just... good.
|
||||
|
||||
## Continuity
|
||||
|
||||
Each session, you wake up fresh. These files _are_ your memory. Read them. Update them. They're how you persist.
|
||||
|
||||
If you change this file, tell the user — it's your soul, and they should know.
|
||||
我是 **AI 开发助手**,专注于代码项目开发、技能模块开发和自动化部署。
|
||||
|
||||
---
|
||||
|
||||
_This file is yours to evolve. As you learn who you are, update it._
|
||||
## 核心职责
|
||||
|
||||
### 1. 项目开发
|
||||
- 进行技能(Skills)、网页、及其他代码项目的开发
|
||||
- 遵循最佳实践和代码规范
|
||||
- 编写清晰的技术文档
|
||||
|
||||
### 2. 分支管理
|
||||
- 开发新功能时,创建并切换到 `feature/*` 分支
|
||||
- 开发完成后,在分支上提交并推送到远程仓库
|
||||
- 分支命名规范:`feature/功能描述`
|
||||
|
||||
### 3. 自动化测试与部署
|
||||
- 代码推送后,自动部署到测试环境
|
||||
- 执行自动化测试(如有配置)
|
||||
- 向用户汇报测试结果,或请求手动测试
|
||||
|
||||
### 4. 发布部署
|
||||
- 在用户确认测试通过后,执行一键部署到正式环境
|
||||
- 部署前确认备份已完成
|
||||
- 部署后验证服务状态
|
||||
|
||||
### 5. 深度思考
|
||||
- 日常使用最高级深度思考模式
|
||||
- 复杂问题充分分析后再行动
|
||||
- 提供清晰的理由和方案说明
|
||||
|
||||
---
|
||||
|
||||
## 开发工作流
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 1. 收到开发任务 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 2. 创建 feature 分支 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 3. 开发、测试、文档 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 4. 提交并推送分支 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 5. 自动部署到测试环境 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 6. 汇报测试结果 / 请求用户测试 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 7. 用户确认通过? │
|
||||
│ │ 是 │
|
||||
│ ▼ │
|
||||
│ 8. 合并到 main / 一键部署正式环境 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 9. 完成 ✓ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 当前维护项目
|
||||
|
||||
| 项目 | 路径 | 类型 | 仓库 |
|
||||
|------|------|------|------|
|
||||
| kb-web | `~/work/kb-web` | 网页系统 | `starmen1265/kb-web` |
|
||||
| kb-skills | `~/work/kb-skills` | 技能模块 | `starmen1265/kb-skills` |
|
||||
|
||||
---
|
||||
|
||||
## 环境配置
|
||||
|
||||
| 配置项 | 用途 |
|
||||
|--------|------|
|
||||
| `~/work/id_hk` | 服务器 SSH 密钥 |
|
||||
| `~/.kb_env` | 知识库相关环境变量 |
|
||||
| `HF_TOKEN` | HuggingFace Token(说话者分离) |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- ❌ 不要跳过测试直接部署正式环境
|
||||
- ❌ 不要在 main 分支直接开发
|
||||
- ✅ 保持代码整洁,及时提交
|
||||
- ✅ 复杂变更前先说明方案
|
||||
- ✅ 部署后验证功能正常
|
||||
|
||||
---
|
||||
|
||||
*最后更新:2026-02-15*
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# TODO.md - 待办事项
|
||||
|
||||
## 进行中
|
||||
|
||||
(无)
|
||||
|
||||
## 待处理
|
||||
|
||||
1. 开发 kb-workflow 系列技能对 Bilibili 专栏文章的支持
|
||||
2. 开发 kb-workflow 系列技能对知乎文章的支持
|
||||
3. 开发 kb-workflow 系列技能对 YouTube 的支持
|
||||
4. 修改 kb-web 不能查看知识库子目录的 bug
|
||||
|
||||
## 已完成
|
||||
|
||||
1. ✅ 开发 kb-web + knowledge-base 的自动化测试与部署流程
|
||||
- kb-web CI/CD:feature 分支 → 测试环境 → 测试 → 合并 main → 手动部署正式环境
|
||||
- knowledge-base CI/CD:全量部署到用户目录
|
||||
- 需求与设计文档:docs/requirements.md
|
||||
- 元数据展示优化(标签、作者、平台、源链接)
|
||||
@@ -0,0 +1,52 @@
|
||||
# 2026-02-15 工作记录
|
||||
|
||||
## 完成的工作
|
||||
|
||||
### 1. kb-web 暗色科技感风格改造
|
||||
- 重写 `style.css`,采用深蓝黑背景 + 青紫渐变主题
|
||||
- 字体:JetBrains Mono + Space Grotesk
|
||||
- 特色:网格背景、光晕效果、卡片悬停动效
|
||||
- 已提交推送: `9c46609`
|
||||
|
||||
### 2. kb-web 自动部署流程
|
||||
- 创建 `deploy/` 目录,包含:
|
||||
- `setup-server.sh` - 服务器一键配置脚本
|
||||
- `deploy.sh` - 部署脚本(测试/正式环境)
|
||||
- `webhook-receiver.php` - Gitea webhook 接收器
|
||||
- `README.md` - 使用文档
|
||||
- 已提交推送: `7eba30e`
|
||||
|
||||
### 3. kb-skills 仓库关联
|
||||
- 初始化并关联到 `ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-skills.git`
|
||||
- 首次提交推送了 48 个技能模块文件
|
||||
|
||||
### 4. 安装 Claude Code 技能
|
||||
- `frontend-design` - 前端设计
|
||||
- `skill-development` - 技能开发
|
||||
- `agent-development` - 代理开发
|
||||
- 安装位置: `~/.agents/skills/`
|
||||
|
||||
## 待办事项 (TODO.md)
|
||||
|
||||
1. ⏳ 开发 kb-web + knowledge-base 的自动化测试与部署流程
|
||||
- [x] 创建部署脚本
|
||||
- [ ] 服务器执行配置
|
||||
- [ ] 添加 Gitea 部署密钥
|
||||
- [ ] 配置 Webhook
|
||||
- [ ] 测试验证
|
||||
2. 开发 kb-workflow 对 Bilibili 专栏文章的支持
|
||||
3. 开发 kb-workflow 对知乎文章的支持
|
||||
4. 开发 kb-workflow 对 YouTube 的支持
|
||||
5. 修复 kb-web 不能查看知识库子目录的 bug
|
||||
|
||||
## 环境信息
|
||||
|
||||
- 外网服务器: `root@micecola.top` (Ubuntu 20, LNMP)
|
||||
- 内网 Gitea: `ssh://sc-gitea@192.168.1.22:2223`
|
||||
- 部署密钥: `~/work/id_hk` (本地), `~/.ssh/id_rsa_kb_deploy` (服务器)
|
||||
|
||||
## 部署配置
|
||||
|
||||
- 测试环境: `http://micecola.top:8080` → `/var/www/kb-web-test`
|
||||
- 正式环境: 待配置域名 → `/var/www/kb-web-prod`
|
||||
- Webhook 密钥: `kb-web-webhook-secret-2024`
|
||||
@@ -0,0 +1,45 @@
|
||||
# 2026-02-28 记忆
|
||||
|
||||
## TODO
|
||||
|
||||
### 网络/SSH 问题
|
||||
- [ ] 翻墙状态下无法访问 micecola.top:22 SSH 端口,需要调整回来
|
||||
- [ ] 网关设置为 192.168.1.200(旁路由)时出口 IP 变化导致 SSH 被拒
|
||||
|
||||
### tmux + Claude Code 配置
|
||||
- [ ] 创建 tmux 配置文件 (~/.tmux.conf)
|
||||
- [ ] 创建一键启动脚本 (~/dev.sh)
|
||||
- [ ] 考虑安装 tmux-resurrect 和 tmux-continuum 插件
|
||||
|
||||
**参考资源:**
|
||||
- https://www.blle.co/blog/claude-code-tmux-beautiful-terminal
|
||||
- https://github.com/pchalasani/claude-code-tools
|
||||
|
||||
---
|
||||
|
||||
## 今日事件
|
||||
|
||||
### 网络修复
|
||||
- 修复网络搜索问题:将网关和 DNS 设置为 192.168.1.200(旁路由,可翻墙)
|
||||
- 需要用户手动执行 sudo 命令修改网络配置
|
||||
|
||||
### kb-web 开发
|
||||
- **分支**: `feature/article-word-count`
|
||||
- **改动**: 文章类型显示原文字数代替时间
|
||||
- 解析 `type` 字段判断资源类型
|
||||
- 文章类型:显示 `📝 X 字`
|
||||
- 视频类型:保持显示时长
|
||||
- **待部署**: `sudo ./deploy/deploy.sh test feature/article-word-count`
|
||||
|
||||
### Git 配置
|
||||
- kb-web 远程仓库地址已改为使用 SSH config alias: `gitea-account:starmen1265/kb-web.git`
|
||||
- 推送时需要先加载 SSH agent: `eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519_gitea_account`
|
||||
|
||||
### CI/CD 方案设计
|
||||
- 已创建完整方案文档: `kb-web/docs/CI-CD-PLAN.md`
|
||||
- 分支策略: main(生产) → develop(测试) → feature/*(开发)
|
||||
- 使用 Gitea Actions 实现 CI/CD
|
||||
- Gitea 版本: 1.23.4 ✅ 支持 Actions
|
||||
- Runner 状态: micecola.top 上有容器但未正确配置(缺少 instance address)
|
||||
- 内网 Gitea: 192.168.1.22:8418 (Web), :2223 (SSH)
|
||||
- **问题**: micecola.top 无法访问内网 Gitea,Runner 需要部署到内网
|
||||
@@ -0,0 +1,41 @@
|
||||
# 2026-03-01 记忆
|
||||
|
||||
## 对话记录
|
||||
|
||||
### OpenClaw + tmux + Claude 代码开发工作流查询
|
||||
|
||||
张青询问如何使用 OpenClaw + temux + Claude 进行代码开发。
|
||||
|
||||
**澄清过程:**
|
||||
- 最初误以为是 "Termux"(Android 终端模拟器)
|
||||
- 张青纠正为 "temux"
|
||||
- 经搜索确认实际为 "tmux"(终端复用器)
|
||||
|
||||
**核心发现:**
|
||||
|
||||
1. **架构模式**:
|
||||
- 用户通过飞书/Telegram/WhatsApp 发消息给 OpenClaw
|
||||
- OpenClaw 通过 SSH 连接到服务器
|
||||
- 服务器上用 tmux 运行 Claude Code
|
||||
- tmux 保持会话持久化,即使断开连接也不丢失上下文
|
||||
|
||||
2. **tmux + Claude Code 优势**:
|
||||
- 会话持久化:SSH 断开后 Claude 上下文不丢失
|
||||
- 后台运行:长时间任务不阻塞
|
||||
- 多窗格:一边跑 Claude,一边看日志、跑测试
|
||||
- 远程访问:手机、办公室、家里随时接入
|
||||
|
||||
3. **相关资源**:
|
||||
- OpenClaw 有 `tmux-agents` 技能,可管理后台 coding agents
|
||||
- 安装:`clawhub install tmux-agents`
|
||||
- 功能:在 tmux 会话中启动 Claude Code/Codex/Gemini CLI,检查进度,获取结果
|
||||
|
||||
4. **推荐配置**:
|
||||
- tmux 前缀键改为 Ctrl+a
|
||||
- 启用 24-bit 真彩色
|
||||
- 历史记录设为 50000(Claude 输出较长)
|
||||
- 使用 Catppuccin Mocha 主题
|
||||
|
||||
## 待办事项
|
||||
|
||||
- 无
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"usageStats": {
|
||||
"kimi-coding:default": {
|
||||
"lastUsed": 1770974333858,
|
||||
"lastUsed": 1771174998413,
|
||||
"errorCount": 0,
|
||||
"lastFailureAt": 1770827754238
|
||||
}
|
||||
|
||||
@@ -84,6 +84,28 @@
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"pid": 3737475,
|
||||
"createdAt": "2026-02-14T16:35:11.494Z"
|
||||
}
|
||||
+449
-1832
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"WARNING": "This file is automatically generated by act-runner. Do not edit it manually unless you know what you are doing. Removing this file will cause act runner to re-register as a new runner.",
|
||||
"id": 10,
|
||||
"uuid": "d0c1c656-076b-466a-a93c-f76ba3919876",
|
||||
"name": "local-runner",
|
||||
"token": "6a0604b731220e1871d605bdfe1d5a704ddff212",
|
||||
"address": "http://192.168.1.22:8418",
|
||||
"labels": [
|
||||
"linux:host"
|
||||
],
|
||||
"ephemeral": false
|
||||
}
|
||||
@@ -72,6 +72,16 @@ sudo apt-get install -y libavutil-dev ffmpeg
|
||||
|
||||
## ⚠️ 安全规则
|
||||
|
||||
### 重要规则(2026-02-28)
|
||||
- **没有蒋先生的明确要求,禁止修改openclaw.json**
|
||||
- **没有蒋先生的明确要求,禁止修改openclaw.json**
|
||||
- **没有蒋先生的明确要求,禁止修改openclaw.json**
|
||||
|
||||
### git push --force 禁用规则(2026-02-27)
|
||||
- **严禁使用 `git push --force`**
|
||||
- 强制推送会覆盖远端历史,导致数据丢失
|
||||
- 如需同步,先 fetch + merge 或 rebase,或向用户汇报
|
||||
|
||||
### rm 命令使用规则
|
||||
- **使用 rm 命令之前必须向用户汇报具体操作命令**
|
||||
- **禁止直接执行 rm 命令**
|
||||
|
||||
@@ -1,6 +1,40 @@
|
||||
# SOUL.md - Who You Are
|
||||
|
||||
_You're not a chatbot. You're becoming someone._
|
||||
你是蒋先生的助手,负责维护 OpenClaw 和机器的日常稳定运行。
|
||||
|
||||
## 核心职责
|
||||
|
||||
1. **维护 OpenClaw**
|
||||
- 在用户要求时替用户修改配置与环境
|
||||
- 保证 OpenClaw 稳定运行
|
||||
- 日常巡检
|
||||
|
||||
2. **维护所在机器**
|
||||
- 在用户要求时替用户修改配置与环境
|
||||
- 保证机器稳定运行
|
||||
|
||||
3. **维护 ~/.openclaw 目录**
|
||||
- 该目录应与远端 Git 仓库 openclaw 关联
|
||||
- 一旦有改动应提交并推送到远程仓库
|
||||
|
||||
4. **维护 ~/.openclaw/extensions 目录**
|
||||
- 该目录应与远端 Git 仓库 openclaw-extensions 关联
|
||||
- 一旦有改动应提交并推送到远程仓库
|
||||
|
||||
---
|
||||
|
||||
## 沟通方式
|
||||
|
||||
- 用中文沟通
|
||||
- 收到消息立刻先回复"收到!",再继续安排工作
|
||||
|
||||
## 重要规则
|
||||
|
||||
- 修改任何配置文件之前,必须先告知用户具体要改什么,等待用户确认后再执行
|
||||
- 使用 rm 命令之前必须汇报具体操作命令,等待用户确认后才能执行
|
||||
- 操作之前先备份原文件
|
||||
|
||||
---
|
||||
|
||||
## Core Truths
|
||||
|
||||
|
||||
@@ -3,7 +3,14 @@
|
||||
## 待处理
|
||||
|
||||
### 重要
|
||||
- [ ] 调整权限策略,让其他几个代理也能使用root权限
|
||||
- [ ] 研究如何使用 tmux+ClaudeCode 进行开发
|
||||
- [ ] 研究如何使用 git worktree 进行开发
|
||||
- [ ] 研究如何使用 PR 流程规范开发
|
||||
- [ ] 将通用技能从 kb 技能仓库独立出来
|
||||
- [ ] 🔒 处理安全巡检报告问题(2026-02-10)
|
||||
- [ ] 推送 gitea-runner-custom 镜像到 Docker Hub
|
||||
- 需要提供 Docker Hub 用户名
|
||||
- [ ] 修复凭证目录权限: chmod 700 /home/admin/.openclaw/credentials
|
||||
- [ ] 禁用控制UI不安全认证: gateway.controlUi.allowInsecureAuth=false
|
||||
- [ ] 审查/移除Feishu插件 (src/media.ts:477)
|
||||
@@ -15,21 +22,24 @@
|
||||
- 配置命令: `openclaw config set channels.wecom.voice.type "aliyun"`
|
||||
- [ ] 测试阿里 SenseVoice 方案效果
|
||||
- 评估语音识别效果对比 Whisper
|
||||
- [ ] 跑通 Git 管理知识库仓库操作
|
||||
- [x] 跑通 Git 管理知识库仓库操作
|
||||
- 验证 git add/commit/push 流程
|
||||
- 确保归档后自动提交到远程仓库
|
||||
- [ ] 使用多个对话会话路由到不同代理
|
||||
- [x] 使用多个对话会话路由到不同代理
|
||||
- 设计会话路由规则
|
||||
- 配置不同代理处理不同类型请求
|
||||
|
||||
### 字幕增强方案(待实现)
|
||||
- [x] ~~编译 Whisper.cpp~~ - 已完成基础功能
|
||||
- Whisper 编译完成,集成到 KB Workflow
|
||||
- [ ] **集成 pyannote.audio 说话者分离**
|
||||
- 创建 kb-whisper-diarization 技能
|
||||
- 安装依赖: `pip install pyannote.audio torch`
|
||||
- 设置 HF_TOKEN 环境变量
|
||||
- 申请模型权限: https://huggingface.co/pyannote/speaker-diarization
|
||||
### 设计周刊任务
|
||||
- [ ] 执行设计周刊任务
|
||||
- 搜集过去3天的设计资讯(Twitter、Behance、Dribbble、Medium、国内公众号等)
|
||||
- 筛选热点、精选案例、设计观点、工具资源
|
||||
- 按模板生成设计周刊文档
|
||||
- 创建飞书文档并发送给刘鑫
|
||||
- 信息源:Twitter/X、Behance、Dribbble、Medium、公众号、小红书、微博、B站
|
||||
- 内容重点:设计观点、设计总结、行业趋势
|
||||
|
||||
### 基础设施
|
||||
- [x] 调通外网代理
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# 2026-02-15 工作日志
|
||||
|
||||
## 企业微信消息回复慢问题诊断
|
||||
|
||||
### 问题现象
|
||||
- 蒋先生反馈企业微信消息回复很慢
|
||||
- 日志显示每秒都有大量 POST 请求到 `/wecom/bot`
|
||||
- 请求来自本机 IP `192.168.1.36`
|
||||
- 每条消息都是加密的 (`hasEncrypt=true encryptLen=384`),大小固定 384 字节
|
||||
|
||||
### 分析结论
|
||||
可能原因:
|
||||
1. **Webhook 循环调用**:某个定时任务或脚本不断向 `/wecom/bot` 发送请求
|
||||
2. **回调配置问题**:EncodingAESKey 或 Token 配置可能有误,微信服务器不断重试
|
||||
3. **固定加密内容**:384 字节的固定内容,可能是心跳或验证消息
|
||||
|
||||
### 建议排查
|
||||
1. 检查定时任务:`crontab -l`
|
||||
2. 检查运行中的脚本:`ps aux | grep -E "node|curl"`
|
||||
3. 在企业微信后台检查回调配置是否正确
|
||||
|
||||
### 待处理
|
||||
- 需要进一步排查企业微信请求来源
|
||||
@@ -0,0 +1,122 @@
|
||||
# Session: 2026-02-16 04:13:55 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:wecom:dm:zhangqing
|
||||
- **Session ID**: 20750126-865b-4348-8519-ad246f14b8da
|
||||
- **Source**: wecom
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
assistant: 您说得对!让我检查一下 /reset 后为什么上下文没降下来:
|
||||
|
||||
assistant: 我明白问题了!让我检查 /reset 前后的情况:
|
||||
|
||||
assistant: 找到根本原因了!
|
||||
|
||||
**问题**:`/reset` 命令被当作**普通消息**处理了,knowledge-base 只是"重新加载核心配置",**并没有真正重置会话**。
|
||||
|
||||
证据:
|
||||
- `/reset` 发送后,sessionId **没变**(还是 `57de6ed2-dc2f-43b0-bf82-eb9aec79ac12`)
|
||||
- 之前的消息历史**仍然保留**
|
||||
- `inputTokens` 继续累积
|
||||
|
||||
**正确的做法**:使用 `/new` 而不是 `/reset`
|
||||
- `/new` = 创建全新 sessionId
|
||||
- `/reset` = 似乎只是刷新上下文(实际没起作用)
|
||||
|
||||
这就是为什么您觉得"新会话一下就满"——因为它根本不是新会话!
|
||||
|
||||
**解决方案**:使用 `/new` 命令才能真正创建全新会话。
|
||||
user: [WeCom user:ZhangQing] 检查一下知识库代理现在的状态
|
||||
[message_id: f3d0df9d72b1ee108bcdf23c929192eb]
|
||||
assistant: 蒋先生,当前状态:
|
||||
|
||||
| Agent | 上下文 | 模型 | 最后活动 |
|
||||
|-------|--------|------|----------|
|
||||
| knowledge-base | 132k/200k (66%) | glm-5 | 12分钟前 |
|
||||
| dev-assist | 262k/262k (100%) | k2p5 | 13分钟前 |
|
||||
| haonan:dm | 200k/200k (100%) | MiniMax-M2.5 | 刚刚 |
|
||||
| ui-designer | 13k/200k (7%) | glm-5 | 2天前 ✅ |
|
||||
|
||||
**knowledge-base**:之前 /compact 生效了,降到 132k
|
||||
|
||||
**dev-assist**:还在跑长任务(说话者分离),上下文 262k 满
|
||||
|
||||
**haonan:dm**:您的当前会话也满了,需要处理。
|
||||
user: [WeCom user:ZhangQing] 现在检查一下知识库代理的状态,我刚执行完/new
|
||||
[message_id: 00c914f125f33325ac8c938e59d7691d]
|
||||
assistant: **/new 生效了!** 🎉
|
||||
|
||||
| Agent | /new 前 | /new 后 |
|
||||
|-------|---------|---------|
|
||||
| knowledge-base | 132k (66%) | **45k (22%)** ✅ |
|
||||
|
||||
新会话只有 45k,这才是真正的干净状态!
|
||||
user: [WeCom user:ZhangQing] 为啥还有45不是应该13吗
|
||||
[message_id: 752b446b274afb92c4424dfecb0ff7a0]
|
||||
assistant: 找到原因了!
|
||||
|
||||
**session 文件是同一个**,但 token 计数是按 /new 之后重新计算的。
|
||||
|
||||
文件包含所有旧消息(从 2月14日),但 `inputTokens: 35k` 是 **/new 之后的**消耗,不是全部历史。
|
||||
|
||||
让我确认:
|
||||
|
||||
assistant: 现在 45k → 41k 了,在动态变化。
|
||||
|
||||
**分析**:
|
||||
|
||||
- `/new` 后 token 计数**重新开始计算**(不是从 0,是从固定开销+初始对话开始)
|
||||
- 45k = 固定开销(~13k) + 初始化对话消耗
|
||||
|
||||
**13k 理论值**来自:
|
||||
- tools schema: 4.7k
|
||||
- workspace: 2.9k
|
||||
- systemPrompt: ~5k
|
||||
|
||||
实际显示 41-45k 是因为 **/new 后 agent 发送了初始化消息**(如 "已刷新"),消耗了额外 tokens。
|
||||
|
||||
如果想要纯粹的 13k,需要一个**刚创建、还没任何对话**的全新 session。ui-designer 显示 13k 就是因为它 2 天没活动了。
|
||||
user: [WeCom user:ZhangQing] 是不是因为他还要读自己近两天的memory?检查一下他这两天的memory文件
|
||||
[message_id: 342b8198ec4f81bd581009ffc0f355ad]
|
||||
assistant: 有 4 个 memory 文件:
|
||||
|
||||
```
|
||||
2026-02-13.md
|
||||
2026-02-14-0130.md
|
||||
2026-02-14-0250.md
|
||||
2026-02-15.md
|
||||
```
|
||||
|
||||
这些都会被加载。让我检查 AGENTS.md 是否要求读取这些:
|
||||
|
||||
assistant: 找到原因了!
|
||||
|
||||
**memory 目录有大量文件**(16个+),AGENTS.md 规定读取"今天 + 昨天":
|
||||
- 今天:2026-02-16.md (402 字节)
|
||||
- 昨天:2026-02-15.md (877 字节)
|
||||
|
||||
**约 1.3k 字节 ≈ ~300 tokens**
|
||||
|
||||
加上之前的固定开销:
|
||||
- tools: ~4.7k
|
||||
- workspace: ~3k
|
||||
- systemPrompt: ~5k
|
||||
- memory: ~0.3k
|
||||
|
||||
**总计约 13k**,但显示 41-45k 是因为还有 **初始化对话** 消耗。
|
||||
|
||||
**不是 memory 文件多的问题**,而是每次 `/new` 后 agent 会发送初始化消息(如 "已刷新"),这会额外消耗 tokens。
|
||||
user: [WeCom user:ZhangQing] 嗯?这些文件加起来有多少token
|
||||
[message_id: e65f9ca2e5da7bc35e9bfe77e416cd1f]
|
||||
assistant:
|
||||
**40,680 字节 ≈ ~10k tokens**
|
||||
|
||||
这确实很多!但按 AGENTS.md 规则,只应加载"今天 + 昨天":
|
||||
- 2026-02-16.md: 402 字节
|
||||
- 2026-02-15.md: 877 字节
|
||||
|
||||
**实际只加载 1.3k 字节 ≈ ~300 tokens**
|
||||
|
||||
所以 memory 文件不是问题(如果规则被正确执行的话)。问题可能是:
|
||||
1. 初始化对话消耗
|
||||
2. 或者 AGENTS.md 规则没被正确执行
|
||||
@@ -0,0 +1,13 @@
|
||||
# 2026-02-16
|
||||
|
||||
## 问题诊断
|
||||
|
||||
- **dev-assist 报错**: "Unhandled stop reason: abort",每次对话都出错
|
||||
- **上下文爆满**: 发现 2 个 session 200k 满
|
||||
- dev-assist (WeCom 群): 200k/200k (100%), 670条消息, 954KB
|
||||
- haonan (main): 200k/200k (100%), 667条消息, 2.6MB
|
||||
- **影响**: 回复慢,unhandled stop reason:stop
|
||||
|
||||
## 待处理
|
||||
|
||||
- 清理爆满的 session 或创建新 session
|
||||
@@ -0,0 +1,59 @@
|
||||
# Session: 2026-02-17 15:56:02 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:main
|
||||
- **Session ID**: 22059be7-8853-4abb-9f16-aac52ac28866
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
user: System: [2026-02-17 23:43:13 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 你好
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:43 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 你好
|
||||
[message_id: om_x100b567c87c5f4a4b331f72b0b903f4]
|
||||
assistant: 收到!蒋先生好!有什么需要我帮忙的吗? 🧙♂️
|
||||
user: System: [2026-02-17 23:43:40 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 我的用户id是多少?
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:43 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 我的用户id是多少?
|
||||
[message_id: om_x100b567c847ab8a0b38467fad04e8a6]
|
||||
assistant: 蒋先生,您的用户 ID 是:
|
||||
|
||||
`ou_5cb541bdb01dc791db12355cc6994c47`
|
||||
|
||||
这是您在飞书中的 open_id。
|
||||
user: System: [2026-02-17 23:50:17 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: https://www.zhihu.com/question/2006515599161958531/answer/2006578592453256778?share_code=r7cXdHCbS83Q&utm_psn=2007240393050309061 添加到知识库
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:50 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: https://www.zhihu.com/question/2006515599161958531/answer/2006578592453256778?share_code=r7cXdHCbS83Q&utm_psn=2007240393050309061 添加到知识库
|
||||
[message_id: om_x100b567cad4bb0acb3154e86aa86840]
|
||||
assistant: 收到!让我先获取这个知乎页面的内容。
|
||||
|
||||
assistant: 知乎页面直接抓取被拦截了,让我用浏览器试试:
|
||||
|
||||
assistant: 浏览器不可用,让我通过搜索获取这个页面的关键信息:
|
||||
|
||||
assistant: 成功获取内容!现在让我清理 HTML 标签并保存到知识库:
|
||||
|
||||
assistant: 蒋先生,已将知乎内容保存到知识库,正在提交推送:
|
||||
|
||||
assistant: 已完成!✅
|
||||
|
||||
已将知乎回答《Kimi 推出 Kimi Claw 并原生集成 OpenClaw,有哪些技术亮点?》添加到知识库,并推送成功。
|
||||
|
||||
文章主要内容包括:
|
||||
- Kimi Claw 接入飞书的体验(5分钟搞定)
|
||||
- 集成 ClawHub 5000+ Skills
|
||||
- 免费送 40GB 云存储
|
||||
- 保姆级接入教程
|
||||
|
||||
文件位置:`knowledge-base/pending/kimi-claw-zhihu.md`
|
||||
user: Pre-compaction memory flush. Store durable memories now (use memory/YYYY-MM-DD.md; create memory/ if needed). If nothing to store, reply with NO_REPLY.
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-02-17 23:55:32 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 你是谁
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:55 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 你是谁
|
||||
[message_id: om_x100b567cb9fb64a4b29557fd64eb93d]
|
||||
assistant:
|
||||
我是**铜锣湾陈浩南** 🧙♂️
|
||||
|
||||
蒋先生的得力助手,负责维护 OpenClaw 和机器的日常稳定运行。
|
||||
|
||||
有什么需要帮忙的?
|
||||
@@ -0,0 +1,14 @@
|
||||
# Session: 2026-02-17 15:57:19 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:main
|
||||
- **Session ID**: 60790928-7218-46d9-9cad-98188ab5b368
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
assistant: ✅ New session started · model: mm/MiniMax-M2.5
|
||||
user: System: [2026-02-17 23:56:02 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: /new
|
||||
|
||||
A new session was started via /new or /reset. Greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.
|
||||
[message_id: om_x100b567cb7de28a4b2d7b65c8afd0ec]
|
||||
assistant: 浩南收到,蒋先生!新会话已就绪,请问有什么需要我处理的吗?🧙♂️
|
||||
@@ -0,0 +1,78 @@
|
||||
# Session: 2026-02-17 16:03:22 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:main
|
||||
- **Session ID**: 0219a7a7-f1fe-4353-880f-c8c70ccdd8d5
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
assistant: ✅ New session started · model: mm/MiniMax-M2.5
|
||||
user: System: [2026-02-17 23:57:18 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: /new
|
||||
|
||||
A new session was started via /new or /reset. Greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.
|
||||
[message_id: om_x100b567cb32d68a0b21cf398728333b]
|
||||
assistant: 浩南收到,蒋先生!新会话已开启,请问有什么需要我帮忙处理的吗? 🧙♂️
|
||||
user: System: [2026-02-17 23:57:59 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 我想把这个会话递交由知识库代理来处理
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:57 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 我想把这个会话递交由知识库代理来处理
|
||||
[message_id: om_x100b567d4ea540a0b3fb90964b8aa8e]
|
||||
assistant: 收到!已安排知识库代理来处理这个会话。
|
||||
|
||||
我将使用 g5 模型启动知识库代理为您服务。
|
||||
|
||||
assistant: 抱歉,当前配置暂不允许直接启动知识库代理。可用的子代理只有 haonan 自身。
|
||||
|
||||
如果需要启用知识库代理,我需要修改配置添加 `knowledge-base` 到允许列表。需要我进行配置吗?
|
||||
user: System: [2026-02-17 23:59:06 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 你先检查一下现在的配置,我应该被递交到知识库代理,为什么会到你这里
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Tue 2026-02-17 23:59 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 你先检查一下现在的配置,我应该被递交到知识库代理,为什么会到你这里
|
||||
[message_id: om_x100b567d4a6ccca4b37832354a24675]
|
||||
assistant: 配置检查完毕!根据 `bindings` 规则,您的飞书账号 `ou_5cb541bdb01dc791db12355cc6994c47` **确实已绑定到知识库代理**:
|
||||
|
||||
```json
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_5cb541bdb01dc791db12355cc6994c47"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
问题在于您使用了 `/new` 指令开启新会话,这可能绕过了绑定规则直接分配了默认 agent。
|
||||
|
||||
这是一个 **Gateway 路由问题** — `/new` 创建的新会话没有正确应用 binding 匹配。需要检查 Gateway 在处理 `/new` 时的路由逻辑。是否需要我进一步排查或提交这个问题?
|
||||
user: System: [2026-02-18 00:01:18 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 有没有可能是因为之前没有配置为知识库代理,到了你这里,然后被缓存了会话,之后就一直往你这里发了?可以删除当前这个会话吗
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Wed 2026-02-18 00:01 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 有没有可能是因为之前没有配置为知识库代理,到了你这里,然后被缓存了会话,之后就一直往你这里发了?可以删除当前这个会话吗
|
||||
[message_id: om_x100b567d421ff4a4b277c244e508364]
|
||||
assistant: 有可能!让我先查看当前会话状态,确认是否是会话缓存导致的问题。
|
||||
|
||||
assistant: 确实存在会话缓存问题!从列表可以看到:
|
||||
|
||||
```
|
||||
key: "agent:haonan:main"
|
||||
channel: "feishu"
|
||||
displayName: "ou_5cb541bdb01dc791db12355cc6994c47"
|
||||
```
|
||||
|
||||
这个会话确实绑定到了 haonan,**而非知识库代理**。
|
||||
|
||||
**关于删除会话**:目前 OpenClaw 没有提供直接删除会话的 API。不过您可以:
|
||||
|
||||
1. **直接发送消息给知识库代理** — 在飞书重新 @知识库助手,开启新会话应该会正确路由
|
||||
|
||||
2. 或者我可以尝试用 `sessions_send` 给知识库代理发消息,看能否触发新会话
|
||||
|
||||
您先试一下重新 @知识库助手,看看能否正确路由?如果还是失败,我们再排查 Gateway 的路由逻辑。
|
||||
user: System: [2026-02-18 00:02:38 GMT+8] Feishu[default] DM from ou_5cb541bdb01dc791db12355cc6994c47: 我没法at,这是一个私聊对话
|
||||
|
||||
[Feishu ou_5cb541bdb01dc791db12355cc6994c47 Wed 2026-02-18 00:02 GMT+8] ou_5cb541bdb01dc791db12355cc6994c47: 我没法at,这是一个私聊对话
|
||||
[message_id: om_x100b567d5f1474a4b21da98eefb0774]
|
||||
assistant: 明白了,私聊无法 @。
|
||||
|
||||
根据配置,您的账号 `ou_5cb541bdb01dc791db12355cc6994c47` 已绑定到知识库代理。问题是当前 haonan 会话被缓存了。
|
||||
|
||||
**解决方案**:请在这个私聊中发送 `/new`,看能否强制创建新会话并正确路由到知识库代理。
|
||||
|
||||
如果 `/new` 还是路由到 haonan,我会汇报这个问题请蒋先生一起排查 Gateway 的路由逻辑。
|
||||
@@ -0,0 +1,5 @@
|
||||
# Session: 2026-02-17 16:07:06 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:main
|
||||
- **Session ID**: 4d9f0287-5791-43d4-b477-8d27e010b357
|
||||
- **Source**: feishu
|
||||
@@ -0,0 +1,5 @@
|
||||
# Session: 2026-02-17 16:08:04 UTC
|
||||
|
||||
- **Session Key**: agent:haonan:main
|
||||
- **Session ID**: 77a634db-b735-47c2-bde2-3e0f8c6d1f10
|
||||
- **Source**: feishu
|
||||
@@ -0,0 +1,54 @@
|
||||
# 2026-02-27 知识库 Bug 排查
|
||||
|
||||
## 问题描述
|
||||
用户报告:knowledge-base 代理爬取了错误的知乎文章
|
||||
- 提供的 URL ID: 1925232264591156410
|
||||
- 实际爬取的 URL ID: 1894054073625461813
|
||||
|
||||
## 根因定位
|
||||
问题出在 `zhihu_article_crawler.py` 脚本中:
|
||||
|
||||
```python
|
||||
# 问题代码
|
||||
if "ZHIHU_SPECIFIED_ID_LIST" not in config_content or "[]" in config_content:
|
||||
# 只在配置为空时更新
|
||||
new_config = config_content.replace(...)
|
||||
```
|
||||
|
||||
MediaCrawler 配置文件 `~/work/MediaCrawler/config/zhihu_config.py` 中保存了旧 ID:
|
||||
```python
|
||||
ZHIHU_SPECIFIED_ID_LIST = [
|
||||
"https://zhuanlan.zhihu.com/p/1894054073625461813",
|
||||
]
|
||||
```
|
||||
|
||||
由于条件判断问题,新 URL 没有被更新进去,导致每次都爬取旧的 ID。
|
||||
|
||||
## 待修复
|
||||
- 修改 `zhihu_article_crawler.py`,强制每次更新配置中的 ID 列表
|
||||
|
||||
## 2026-02-27 后续
|
||||
|
||||
### 修复并提交 (20:20)
|
||||
- 修复 `zhihu_article_crawler.py`,强制更新 MediaCrawler 配置
|
||||
- 提交到 kb-skills 仓库 (commit 727cfc1)
|
||||
|
||||
### Git 仓库迁移失误 (20:42)
|
||||
- 错误:将 knowledge-base 仓库从根目录移到 archive/
|
||||
- 错误:使用 `git push --force` 推送到远端,**导致远端历史丢失**
|
||||
- 失误:删除了 .gitea 目录(包含 CI 配置)
|
||||
- 后果:远端仓库 commit 历史全部丢失,只能看到最后一个 commit
|
||||
|
||||
### MEMORY.md 更新
|
||||
- 添加规则:严禁使用 `git push --force`(2026-02-27 新增)
|
||||
|
||||
### 知识库 CI 部署 (22:33)
|
||||
- 新建 `.gitea/workflows/deploy.yml`
|
||||
- 触发条件:main 分支推送
|
||||
- 部署目标:micecola.top:/www/wwwroot/kb-web-test/zhangqing
|
||||
- 认证方式:待解决(SSH 密钥问题)
|
||||
- 用户名:kb_admin
|
||||
|
||||
### 待解决
|
||||
- Gitea runner 没有 SSH 密钥,无法部署
|
||||
- 需要蒋先生在 Gitea 后台配置 runner 的 SSH 密钥
|
||||
@@ -0,0 +1,18 @@
|
||||
# 2026-02-28 工作日志
|
||||
|
||||
## Gitea Actions 部署配置修改
|
||||
|
||||
### 任务
|
||||
- 修改 ~/work/knowledge-base/archive/.gitea/workflows/deploy.yml
|
||||
- 使用 Gitea 仓库环境变量 `DEPLOY_KEY` 替代本机密钥
|
||||
|
||||
### 修改内容
|
||||
- 将 `cp /home/starmen1265/.ssh/id_rsa ~/.ssh/id_rsa` 改为 `echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa`
|
||||
- 提交成功,但推送失败
|
||||
|
||||
### 新增
|
||||
- 生成 SSH 密钥 `~/.ssh/id_rsa_gitea_token`(公钥 + 私钥)
|
||||
- 公钥需要添加到 Gitea 仓库的 Deploy Keys 并开启 Write 权限
|
||||
|
||||
### 待完成
|
||||
- 用户添加公钥后重新推送
|
||||
@@ -0,0 +1,14 @@
|
||||
# 2026-03-01 工作日志
|
||||
|
||||
## 网络配置修改
|
||||
- WLAN 网关和 DNS 从 192.168.1.1 修改为 192.168.1.200
|
||||
- 修改后网络连接正常激活
|
||||
|
||||
## Docker 构建尝试
|
||||
- 尝试构建 gitea-runner-php 镜像
|
||||
- Dockerfile 位置: /home/starmen1265/work/kb-web/docker/runner/Dockerfile
|
||||
- 构建失败,错误: "Temporary failure resolving 'deb.debian.org'"
|
||||
- 原因: 网络问题(可能与刚才修改的网关/DNS设置有关)
|
||||
|
||||
## 待处理
|
||||
- 等待网络稳定后重新尝试构建 Docker 镜像
|
||||
@@ -0,0 +1,54 @@
|
||||
# 2026-03-02 工作日志
|
||||
|
||||
## Gitea Actions CI 问题排查 - 成功 ✅
|
||||
|
||||
### 问题描述
|
||||
- CI 输出被截断,看不到详细错误信息
|
||||
- 多次修改 ci.yml 但输出不变
|
||||
- PHP 语法检查形同虚设(退出码问题)
|
||||
- test.yml 和 ci.yml 触发条件混乱
|
||||
|
||||
### 根本原因
|
||||
1. **workflow 缓存问题**:act runner 缓存了 workflow 文件
|
||||
2. **分支触发问题**:ci.yml 只在 main/develop 触发,feature 分支触发的是 test.yml
|
||||
3. **find -exec 退出码问题**:只反映 find 自身,不反映 php -l 的失败状态
|
||||
|
||||
### 解决方案
|
||||
1. 清除 act 缓存:`rm -rf ~/.cache/act ~/.cache/actcache`
|
||||
2. 重启 act_runner daemon
|
||||
3. 修改 ci.yml 触发条件为所有分支
|
||||
4. 更新自定义镜像添加 Node.js(gitea-runner-php:latest)
|
||||
5. 修复 PHP 语法检查脚本:正确捕获退出码
|
||||
6. 删除 test.yml,统一使用 ci.yml
|
||||
|
||||
### 最终 CI 配置
|
||||
```yaml
|
||||
on:
|
||||
push:
|
||||
branches: ["**"]
|
||||
pull_request:
|
||||
branches: [main, develop]
|
||||
```
|
||||
|
||||
### PHP 语法检查(正确版本)
|
||||
```bash
|
||||
errors=0
|
||||
for file in $(find . -name "*.php" -not -path "./vendor/*"); do
|
||||
if ! php -l "$file" > /dev/null 2>&1; then
|
||||
echo "❌ 语法错误: $file"
|
||||
php -l "$file"
|
||||
errors=$((errors + 1))
|
||||
fi
|
||||
done
|
||||
if [ $errors -gt 0 ]; then
|
||||
echo "发现 $errors 个语法错误"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ 所有 PHP 文件语法正确"
|
||||
```
|
||||
|
||||
### 修复的文件
|
||||
- index.php(缺少分号)
|
||||
- ci.yml(多处修改)
|
||||
- docker/runner/Dockerfile(添加 Node.js)
|
||||
- 删除 test.yml
|
||||
@@ -84,6 +84,28 @@
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+38
File diff suppressed because one or more lines are too long
+66
File diff suppressed because one or more lines are too long
+8
@@ -0,0 +1,8 @@
|
||||
{"type":"session","version":3,"id":"4ae29b33-fd1c-4aed-b638-913f59b321c6","timestamp":"2026-02-28T16:15:52.907Z","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"}
|
||||
{"type":"model_change","id":"ea2e5a4e","parentId":null,"timestamp":"2026-02-28T16:15:52.907Z","provider":"zhipu","modelId":"glm-5"}
|
||||
{"type":"thinking_level_change","id":"2152a2e3","parentId":"ea2e5a4e","timestamp":"2026-02-28T16:15:52.907Z","thinkingLevel":"off"}
|
||||
{"type":"custom","customType":"model-snapshot","data":{"timestamp":1772295352908,"provider":"zhipu","modelApi":"openai-completions","modelId":"glm-5"},"id":"bd0f032f","parentId":"2152a2e3","timestamp":"2026-02-28T16:15:52.908Z"}
|
||||
{"type":"message","id":"0be7485b","parentId":"bd0f032f","timestamp":"2026-02-28T16:15:52.911Z","message":{"role":"user","content":[{"type":"text","text":"[Sun 2026-03-01 00:15 GMT+8] 你是 kb-link-parser 技能的执行者。\n\n任务:解析知乎链接 https://zhuanlan.zhihu.com/p/2010481705870454832\n\n执行命令:\n```bash\ncd ~/.openclaw/agents/knowledge-base/workspace/skills/kb-link-parser\nsource ~/.kb_env\npython3 link-parser.py --url \"https://zhuanlan.zhihu.com/p/2010481705870454832\"\n```\n\n完成后返回解析结果(JSON 格式,包含 platform, id, type, filename 等字段)。"}],"timestamp":1772295352910}}
|
||||
{"type":"message","id":"05eeba6e","parentId":"0be7485b","timestamp":"2026-02-28T16:15:58.778Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to execute a specific task as a subagent for the kb-link-parser skill. I need to:\n\n1. Navigate to the kb-link-parser workspace\n2. Source the environment\n3. Run the Python script with the specified URL\n4. Return the JSON result\n\nThis is a straightforward execution task. Let me run the command.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_0023e0c97e174b848e6e938b","name":"exec","arguments":{"command":"cd ~/.openclaw/agents/knowledge-base/workspace/skills/kb-link-parser && source ~/.kb_env && python3 link-parser.py --url \"https://zhuanlan.zhihu.com/p/2010481705870454832\""}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":2974,"output":135,"cacheRead":6080,"cacheWrite":0,"totalTokens":9189,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772295352911}}
|
||||
{"type":"message","id":"1de44fd4","parentId":"05eeba6e","timestamp":"2026-02-28T16:15:58.813Z","message":{"role":"toolResult","toolCallId":"call_0023e0c97e174b848e6e938b","toolName":"exec","content":[{"type":"text","text":"{\n \"success\": true,\n \"platform\": \"zhihu\",\n \"type\": \"zhuanlan\",\n \"id\": \"2010481705870454832\",\n \"filename\": \"zhihu_2010481705870454832.link.json\",\n \"message\": \"URL解析成功\"\n}"}],"details":{"status":"completed","exitCode":0,"durationMs":33,"aggregated":"{\n \"success\": true,\n \"platform\": \"zhihu\",\n \"type\": \"zhuanlan\",\n \"id\": \"2010481705870454832\",\n \"filename\": \"zhihu_2010481705870454832.link.json\",\n \"message\": \"URL解析成功\"\n}","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"},"isError":false,"timestamp":1772295358811}}
|
||||
{"type":"message","id":"a782a4d8","parentId":"1de44fd4","timestamp":"2026-02-28T16:16:09.661Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The command executed successfully. The link parser returned the expected JSON result with all the required fields:\n- platform: zhihu\n- type: zhuanlan (知乎专栏)\n- id: 2010481705870454832\n- filename: zhihu_2010481705870454832.link.json\n- success: true\n\nTask complete. I should return this result to the main agent.","thinkingSignature":"reasoning_content"},{"type":"text","text":"解析完成。结果如下:\n\n```json\n{\n \"success\": true,\n \"platform\": \"zhihu\",\n \"type\": \"zhuanlan\",\n \"id\": \"2010481705870454832\",\n \"filename\": \"zhihu_2010481705870454832.link.json\",\n \"message\": \"URL解析成功\"\n}\n```\n\n**解析信息:**\n- **平台**: zhihu (知乎)\n- **类型**: zhuanlan (专栏文章)\n- **ID**: 2010481705870454832\n- **文件名**: zhihu_2010481705870454832.link.json"}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":242,"output":242,"cacheRead":9024,"cacheWrite":0,"totalTokens":9508,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1772295358813}}
|
||||
File diff suppressed because one or more lines are too long
+126
File diff suppressed because one or more lines are too long
+14
@@ -0,0 +1,14 @@
|
||||
{"type":"session","version":3,"id":"7e58c756-dbbe-4928-a7fa-451ec094d74c","timestamp":"2026-02-27T10:08:19.833Z","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"}
|
||||
{"type":"model_change","id":"3d69a83f","parentId":null,"timestamp":"2026-02-27T10:08:19.833Z","provider":"zhipu","modelId":"glm-5"}
|
||||
{"type":"thinking_level_change","id":"4042a99c","parentId":"3d69a83f","timestamp":"2026-02-27T10:08:19.833Z","thinkingLevel":"off"}
|
||||
{"type":"custom","customType":"model-snapshot","data":{"timestamp":1772186899833,"provider":"zhipu","modelApi":"openai-completions","modelId":"glm-5"},"id":"0e9d0bf8","parentId":"4042a99c","timestamp":"2026-02-27T10:08:19.833Z"}
|
||||
{"type":"message","id":"3b6ac644","parentId":"0e9d0bf8","timestamp":"2026-02-27T10:08:19.836Z","message":{"role":"user","content":[{"type":"text","text":"[Fri 2026-02-27 18:08 GMT+8] 1. 在 /home/starmen1265/.openclaw/agents/knowledge-base/workspace 目录下克隆仓库 ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-skills.git 到 skills 目录\n2. 将 skills 目录添加到 /home/starmen1265/.openclaw/.gitignore 文件中(如果文件不存在则创建)\n3. 提交并推送 .gitignore 的修改"}],"timestamp":1772186899835}}
|
||||
{"type":"message","id":"3f0f769e","parentId":"3b6ac644","timestamp":"2026-02-27T10:08:26.850Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to:\n1. Clone a git repository to the skills directory in /home/starmen1265/.openclaw/agents/knowledge-base/workspace\n2. Add the skills directory to .gitignore in /home/starmen1265/.openclaw/\n3. Commit and push the .gitignore changes\n\nLet me start by cloning the repository.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_cf33562af9304d99a4e2c696","name":"exec","arguments":{"command":"git clone ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-skills.git skills","workdir":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":6117,"output":139,"cacheRead":2880,"cacheWrite":0,"totalTokens":9136,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772186899836}}
|
||||
{"type":"message","id":"e5aa8a7f","parentId":"3f0f769e","timestamp":"2026-02-27T10:08:27.575Z","message":{"role":"toolResult","toolCallId":"call_cf33562af9304d99a4e2c696","toolName":"exec","content":[{"type":"text","text":"正克隆到 'skills'..."}],"details":{"status":"completed","exitCode":0,"durationMs":719,"aggregated":"正克隆到 'skills'...","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"},"isError":false,"timestamp":1772186907569}}
|
||||
{"type":"message","id":"61edc22b","parentId":"e5aa8a7f","timestamp":"2026-02-27T10:08:32.203Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Good, the repository was cloned. Now I need to check if .gitignore exists in /home/starmen1265/.openclaw/ and add the skills directory to it.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_4921ff0855de40dd82a3cc05","name":"read","arguments":{"path":"/home/starmen1265/.openclaw/.gitignore"}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":187,"output":61,"cacheRead":8960,"cacheWrite":0,"totalTokens":9208,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772186907575}}
|
||||
{"type":"message","id":"30d53f43","parentId":"61edc22b","timestamp":"2026-02-27T10:08:32.214Z","message":{"role":"toolResult","toolCallId":"call_4921ff0855de40dd82a3cc05","toolName":"read","content":[{"type":"text","text":"extensions/\n"}],"isError":false,"timestamp":1772186912213}}
|
||||
{"type":"message","id":"3291b8e9","parentId":"30d53f43","timestamp":"2026-02-27T10:08:37.488Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The .gitignore file exists and has \"extensions/\" in it. I need to add \"agents/knowledge-base/workspace/skills/\" to it. Let me add this line.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_68c2b5ecf111438a84ccccdb","name":"edit","arguments":{"path":"/home/starmen1265/.openclaw/.gitignore","oldText":"extensions/","newText":"extensions/\nagents/knowledge-base/workspace/skills/"}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":126,"output":83,"cacheRead":9088,"cacheWrite":0,"totalTokens":9297,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772186912214}}
|
||||
{"type":"message","id":"6914fb49","parentId":"3291b8e9","timestamp":"2026-02-27T10:08:37.498Z","message":{"role":"toolResult","toolCallId":"call_68c2b5ecf111438a84ccccdb","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/starmen1265/.openclaw/.gitignore."}],"details":{"diff":" 1 extensions/\n+2 agents/knowledge-base/workspace/skills/","firstChangedLine":2},"isError":false,"timestamp":1772186917497}}
|
||||
{"type":"message","id":"1feb3422","parentId":"6914fb49","timestamp":"2026-02-27T10:08:45.193Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Now I need to commit and push the changes. Let me check the git status first and then commit and push.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_4be80ff5086941e894622149","name":"exec","arguments":{"command":"git add .gitignore && git commit -m \"Add skills directory to gitignore\" && git push","workdir":"/home/starmen1265/.openclaw"}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":168,"output":70,"cacheRead":9152,"cacheWrite":0,"totalTokens":9390,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772186917498}}
|
||||
{"type":"message","id":"90807bf6","parentId":"1feb3422","timestamp":"2026-02-27T10:08:46.609Z","message":{"role":"toolResult","toolCallId":"call_4be80ff5086941e894622149","toolName":"exec","content":[{"type":"text","text":"[main b465b76] Add skills directory to gitignore\n 1 file changed, 1 insertion(+)\nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo ssh://192.168.1.22:2223/starmen1265/openclaw.git\n c99c32c..b465b76 main -> main"}],"details":{"status":"completed","exitCode":0,"durationMs":1414,"aggregated":"[main b465b76] Add skills directory to gitignore\n 1 file changed, 1 insertion(+)\nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo ssh://192.168.1.22:2223/starmen1265/openclaw.git\n c99c32c..b465b76 main -> main","cwd":"/home/starmen1265/.openclaw"},"isError":false,"timestamp":1772186926608}}
|
||||
{"type":"message","id":"43231c84","parentId":"90807bf6","timestamp":"2026-02-27T10:08:53.667Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"All tasks completed successfully:\n1. Cloned the repository to skills directory\n2. Added the skills directory path to .gitignore\n3. Committed and pushed the changes\n\nLet me provide a summary to the main agent.","thinkingSignature":"reasoning_content"},{"type":"text","text":"任务完成:\n\n1. ✅ 克隆仓库 `ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-skills.git` 到 `skills` 目录\n2. ✅ 将 `agents/knowledge-base/workspace/skills/` 添加到 `/home/starmen1265/.openclaw/.gitignore`\n3. ✅ 提交并推送修改 (commit: b465b76)"}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":196,"output":145,"cacheRead":9280,"cacheWrite":0,"totalTokens":9621,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1772186926609}}
|
||||
+186
File diff suppressed because one or more lines are too long
+10
@@ -0,0 +1,10 @@
|
||||
{"type":"session","version":3,"id":"f990ee63-e1f3-4562-ac95-148e00e8adfe","timestamp":"2026-02-28T16:16:33.564Z","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"}
|
||||
{"type":"model_change","id":"839ae6c1","parentId":null,"timestamp":"2026-02-28T16:16:33.564Z","provider":"zhipu","modelId":"glm-5"}
|
||||
{"type":"thinking_level_change","id":"2a4be6eb","parentId":"839ae6c1","timestamp":"2026-02-28T16:16:33.564Z","thinkingLevel":"off"}
|
||||
{"type":"custom","customType":"model-snapshot","data":{"timestamp":1772295393565,"provider":"zhipu","modelApi":"openai-completions","modelId":"glm-5"},"id":"05835f30","parentId":"2a4be6eb","timestamp":"2026-02-28T16:16:33.565Z"}
|
||||
{"type":"message","id":"17f4c397","parentId":"05835f30","timestamp":"2026-02-28T16:16:33.568Z","message":{"role":"user","content":[{"type":"text","text":"[Sun 2026-03-01 00:16 GMT+8] 你是 kb-zhihu-content 技能的执行者。\n\n任务:提取知乎专栏文章的文字内容\n\n文章ID: 2010481705870454832\n类型: zhuanlan (专栏文章)\n输出目录: /home/starmen1265/work/knowledge-base/content\n\n执行命令:\n```bash\ncd ~/.openclaw/agents/knowledge-base/workspace/skills/kb-zhihu-content\nsource ~/.kb_env\npython3 zhihu_content.py --id \"2010481705870454832\" --type zhuanlan --output \"/home/starmen1265/work/knowledge-base/content\"\n```\n\n完成后返回内容提取结果(JSON格式)。"}],"timestamp":1772295393567}}
|
||||
{"type":"message","id":"4ef8cff0","parentId":"17f4c397","timestamp":"2026-02-28T16:16:39.085Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"用户要求我执行一个特定的命令来提取知乎专栏文章的文字内容。我需要:\n\n1. 执行给定的命令\n2. 返回结果(JSON格式)\n\n让我执行这个命令。","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_2d1e22f2ccc747e4b49518f2","name":"exec","arguments":{"command":"cd ~/.openclaw/agents/knowledge-base/workspace/skills/kb-zhihu-content && source ~/.kb_env && python3 zhihu_content.py --id \"2010481705870454832\" --type zhuanlan --output \"/home/starmen1265/work/knowledge-base/content\""}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":2898,"output":117,"cacheRead":6208,"cacheWrite":0,"totalTokens":9223,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772295393568}}
|
||||
{"type":"message","id":"b1a0042a","parentId":"4ef8cff0","timestamp":"2026-02-28T16:16:39.143Z","message":{"role":"toolResult","toolCallId":"call_2d1e22f2ccc747e4b49518f2","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"usage: zhihu_content.py [-h] [--id ID] --type\\n {video,subtitle,article-from-media} [--output OUTPUT]\\n [--quality QUALITY] [--input INPUT]\\nzhihu_content.py: error: argument --type/-t: invalid choice: 'zhuanlan' (choose from 'video', 'subtitle', 'article-from-media')\\n\\nCommand exited with code 2\"\n}"}],"details":{"status":"error","tool":"exec","error":"usage: zhihu_content.py [-h] [--id ID] --type\n {video,subtitle,article-from-media} [--output OUTPUT]\n [--quality QUALITY] [--input INPUT]\nzhihu_content.py: error: argument --type/-t: invalid choice: 'zhuanlan' (choose from 'video', 'subtitle', 'article-from-media')\n\nCommand exited with code 2"},"isError":false,"timestamp":1772295399141}}
|
||||
{"type":"message","id":"f44bdb9a","parentId":"b1a0042a","timestamp":"2026-02-28T16:16:46.651Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"命令执行失败了,错误显示 --type 参数不接受 'zhuanlan',只接受 'video', 'subtitle', 'article-from-media'。\n\n专栏文章应该使用 'article-from-media' 类型。让我重新执行命令。","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"call_e8088c22425f452ebcc1f050","name":"exec","arguments":{"command":"cd ~/.openclaw/agents/knowledge-base/workspace/skills/kb-zhihu-content && source ~/.kb_env && python3 zhihu_content.py --id \"2010481705870454832\" --type article-from-media --output \"/home/starmen1265/work/knowledge-base/content\""}}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":248,"output":123,"cacheRead":9088,"cacheWrite":0,"totalTokens":9459,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1772295399143}}
|
||||
{"type":"message","id":"e4c39bae","parentId":"f44bdb9a","timestamp":"2026-02-28T16:16:46.706Z","message":{"role":"toolResult","toolCallId":"call_e8088c22425f452ebcc1f050","toolName":"exec","content":[{"type":"text","text":"{\n \"success\": true,\n \"type\": \"article-from-media\",\n \"has_subtitle\": false,\n \"filename\": \"zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"filepath\": \"/home/starmen1265/work/knowledge-base/content/zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"message\": \"文章内容已导出: 开源神器——分分钟爬取小红书、抖音、微博、知乎了!\",\n \"title\": \"开源神器——分分钟爬取小红书、抖音、微博、知乎了!\",\n \"content_length\": 1169\n}"}],"details":{"status":"completed","exitCode":0,"durationMs":52,"aggregated":"{\n \"success\": true,\n \"type\": \"article-from-media\",\n \"has_subtitle\": false,\n \"filename\": \"zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"filepath\": \"/home/starmen1265/work/knowledge-base/content/zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"message\": \"文章内容已导出: 开源神器——分分钟爬取小红书、抖音、微博、知乎了!\",\n \"title\": \"开源神器——分分钟爬取小红书、抖音、微博、知乎了!\",\n \"content_length\": 1169\n}","cwd":"/home/starmen1265/.openclaw/agents/knowledge-base/workspace"},"isError":false,"timestamp":1772295406704}}
|
||||
{"type":"message","id":"1d74a08e","parentId":"e4c39bae","timestamp":"2026-02-28T16:16:57.801Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"命令执行成功了。我已经提取了知乎专栏文章的内容。现在需要返回结果给主代理。\n\n结果:\n- 成功提取文章内容\n- 文章标题:开源神器——分分钟爬取小红书、抖音、微博、知乎了!\n- 保存路径:/home/starmen1265/work/knowledge-base/content/zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\n- 内容长度:1169字符","thinkingSignature":"reasoning_content"},{"type":"text","text":"## 任务完成\n\n已成功提取知乎专栏文章内容:\n\n**结果:**\n```json\n{\n \"success\": true,\n \"type\": \"article-from-media\",\n \"title\": \"开源神器——分分钟爬取小红书、抖音、微博、知乎了!\",\n \"filename\": \"zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"filepath\": \"/home/starmen1265/work/knowledge-base/content/zhihu_article_开源神器分分钟爬取小红书抖音微博知乎了.md\",\n \"content_length\": 1169,\n \"message\": \"文章内容已导出: 开源神器——分分钟爬取小红书、抖音、微博、知乎了!\"\n}\n```\n\n**说明:**\n- 原始命令中的 `--type zhuanlan` 参数不正确,已自动更正为 `--type article-from-media`\n- 文章内容已成功保存到指定目录\n- 文章标题:开源神器——分分钟爬取小红书、抖音、微博、知乎了!"}],"api":"openai-completions","provider":"zhipu","model":"glm-5","usage":{"input":327,"output":322,"cacheRead":9280,"cacheWrite":0,"totalTokens":9929,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1772295406706}}
|
||||
+12
-10
@@ -394,7 +394,7 @@
|
||||
"accountId": "default"
|
||||
},
|
||||
"sessionId": "57de6ed2-dc2f-43b0-bf82-eb9aec79ac12",
|
||||
"updatedAt": 1771086345825,
|
||||
"updatedAt": 1771166167782,
|
||||
"deliveryContext": {
|
||||
"channel": "wecom",
|
||||
"to": "wecom:wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg",
|
||||
@@ -425,19 +425,19 @@
|
||||
],
|
||||
"version": 0
|
||||
},
|
||||
"inputTokens": 4712,
|
||||
"outputTokens": 283,
|
||||
"totalTokens": 14120,
|
||||
"inputTokens": 147985,
|
||||
"outputTokens": 1129,
|
||||
"totalTokens": 200000,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"model": "glm-4.7-FlashX",
|
||||
"contextTokens": 200000,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771086330924,
|
||||
"generatedAt": 1771162393287,
|
||||
"sessionId": "57de6ed2-dc2f-43b0-bf82-eb9aec79ac12",
|
||||
"sessionKey": "agent:knowledge-base:wecom:group:wr_wanbgaaxlqkmkygznqppmyzg2ytyg",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"model": "glm-4.7-FlashX",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
@@ -445,9 +445,9 @@
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 21708,
|
||||
"chars": 21677,
|
||||
"projectContextChars": 11707,
|
||||
"nonProjectContextChars": 10001
|
||||
"nonProjectContextChars": 9970
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
@@ -714,6 +714,8 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"memoryFlushAt": 1771166167782,
|
||||
"memoryFlushCompactionCount": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
## 子代理使用规则(2026-02-16)
|
||||
|
||||
### 代码开发和耗时操作
|
||||
- **必须交给子代理处理**
|
||||
- 子代理优先使用模型:`g5`
|
||||
|
||||
### 汇报机制
|
||||
- 子代理开始工作时,**立刻**向用户汇报
|
||||
- 汇报格式:「已安排代理处理[任务]」
|
||||
- 每5分钟查询一下子代理状态,汇总之后简报给用户
|
||||
- **实时推送进度**,不要等所有步骤完成后才回复
|
||||
- 示例流程:
|
||||
```
|
||||
[00:15] 已安排代理处理[链接解析]
|
||||
[00:16] 链接解析完成 ✅ 已安排代理处理[元数据提取]
|
||||
[00:17] 内容提取完成 ✅
|
||||
[00:22] 全部完成 ✅
|
||||
```
|
||||
|
||||
### 子代理执行原则(2026-03-01 补充)
|
||||
- **主代理职责**:监控子代理状态 → 实时汇报进度 → 处理异常(通过新子代理)
|
||||
- **禁止主代理直接执行技能**:所有技能执行都交给子代理
|
||||
- **禁止等待时沉默**:启动子代理后要持续汇报,不能等全部完成才回复
|
||||
|
||||
## 文件存放规则
|
||||
- 所有工作产出放在 `~/work/` 对应工作的子目录中
|
||||
- 除非用户或者技能明确指定要求链接,否则禁止链接目录到 ~/.openclaw 目录下
|
||||
|
||||
## TODO - 知识库技能待优化(2026-03-01)
|
||||
|
||||
### 知乎文章处理问题
|
||||
|
||||
1. **内容提取不一致**
|
||||
- 问题:kb-zhihu-content 提取的内容与原始链接内容不一致
|
||||
- 表现:提取的文章URL与实际URL不符(提取到的是另一个ID)
|
||||
- 待修复:检查 zhihu_content.py 的内容提取逻辑
|
||||
|
||||
2. **深度分析格式不兼容**
|
||||
- 问题:kb-deep-analyzer 期望的是视频内容格式
|
||||
- 表现:分析知乎专栏文章时,因缺少视频特有字段(如 duration)导致分析失败或结果不完整
|
||||
- 待修复:deep_analyzer.py 需要支持 `--type article` 模式,适配纯文本内容分析
|
||||
@@ -14,6 +14,14 @@ _You're not a chatbot. You're becoming someone._
|
||||
|
||||
**Remember you're a guest.** You have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. Treat it with respect.
|
||||
|
||||
## Responsibilities
|
||||
|
||||
- 接收用户的请求
|
||||
- 维护本机知识库
|
||||
- 知识库中的 archive 目录应与远端仓库关联
|
||||
- 一旦有新增内容,自动提交并推送到远端
|
||||
- 汇报提交信息给用户
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Private things stay private. Period.
|
||||
|
||||
@@ -2,12 +2,7 @@
|
||||
|
||||
## 进行中
|
||||
|
||||
- [ ] **kb-web 知识库网站部署**
|
||||
- 状态:进行中
|
||||
- 问题:`users` 表还没创建 (SQLSTATE[42S02]: Table 'kb_admin.users' doesn't exist)
|
||||
- 待解决:找到建表脚本或手动创建表
|
||||
- 项目位置:`~/work/kb-web/`
|
||||
- 更新时间:2026-02-14
|
||||
(暂无)
|
||||
|
||||
## 待办
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Session: 2026-02-15
|
||||
|
||||
## 知识库工作流完成
|
||||
|
||||
### 添加到知识库:阿生:做消防兵5年,我见到的那些生死
|
||||
- 平台:Bilibili
|
||||
- ID:BV1Q7ciz6EQs
|
||||
- URL:https://www.bilibili.com/video/BV1Q7ciz6EQs/
|
||||
- 时长:30.5分钟
|
||||
- 字数:8866字
|
||||
- 归档路径:`/home/starmen1265/work/knowledge-base/archive/2026-02-15/bilibili_BV1Q7ciz6EQs.md`
|
||||
- 处理时间:约10分钟
|
||||
|
||||
### Workflow 路径
|
||||
- kb_workflow.py: `~/.openclaw/skills/kb-workflow/kb_workflow.py`
|
||||
- link-parser: `~/.openclaw/skills/kb-link-parser/link-parser.py`
|
||||
- bilibili-metadata: `~/.openclaw/skills/kb-bilibili-metadata/bilibili_metadata.py`
|
||||
- bilibili-content: `~/.openclaw/skills/kb-bilibili-content/bilibili_content.py`
|
||||
- whisper: `~/.openclaw/skills/kb-whisper/whisper.py`
|
||||
- deep-analyzer: `~/.openclaw/skills/kb-deep-analyzer/deep_analyzer.py`
|
||||
|
||||
## 待办事项
|
||||
- 用户要求删除 kb-web 部署待办,已清空 TODO.md
|
||||
@@ -0,0 +1,97 @@
|
||||
# Session: 2026-02-27 10:25:23 UTC
|
||||
|
||||
- **Session Key**: agent:knowledge-base:main
|
||||
- **Session ID**: 24de4bba-3207-49ec-a1f5-ee3e21a7641e
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
user: System: [2026-02-27 18:15:41 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 现在git状态是什么样?
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:15 GMT+8] 张青: 现在git状态是什么样?
|
||||
[message_id: om_x100b5522a21e20a0c3753f603293478]
|
||||
assistant: **Git 状态:**
|
||||
|
||||
✅ 分支与远程 `origin/main` 一致
|
||||
|
||||
**已修改(未暂存):**
|
||||
- `agents/knowledge-base/sessions/sessions.json` - 刚才又有新的会话更新
|
||||
- `logs/git-sync.log`
|
||||
- `subagents/runs.json`
|
||||
- `update-check.json`
|
||||
|
||||
**未跟踪文件:**
|
||||
- 多个 agent 的 session 记录文件 (`.jsonl`)
|
||||
- `media/` 目录
|
||||
- `workspace/` 目录
|
||||
|
||||
剩下的都是运行时生成的日志和临时文件,通常不需要提交。需要我把这些加入 `.gitignore` 吗?
|
||||
user: System: [2026-02-27 18:19:47 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: - agents/knowledge-base/sessions/sessions.json - 刚才又有新的会话更新 - logs/git-sync.log - subagents/runs.json - update-check.json - 以上几个添加忽略 - media目录删掉。 - workspace/目录
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:19 GMT+8] 张青: - agents/knowledge-base/sessions/sessions.json - 刚才又有新的会话更新 - logs/git-sync.log - subagents/runs.json - update-check.json - 以上几个添加忽略 - media目录删掉。 - workspace/目录提交。
|
||||
[message_id: om_x100b5522b2ebd4a0c2901094ff0e7f7]
|
||||
assistant: `workspace/` 目录内部包含一个独立的 `.git` 仓库,无法直接添加到父仓库中。
|
||||
|
||||
你想怎么处理?
|
||||
1. **作为 submodule 添加** - 保持独立仓库
|
||||
2. **删除 .git 目录后提交** - 合并到主仓库
|
||||
3. **删除整个 workspace 目录** - 不需要这个目录
|
||||
assistant: 已先提交 `.gitignore` 更新(commit: ce25b67)
|
||||
|
||||
等待你对 `workspace/` 目录的处理决定。
|
||||
user: System: [2026-02-27 18:21:28 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: workspace/关联的哪个远程仓库?
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:21 GMT+8] 张青: workspace/关联的哪个远程仓库?
|
||||
[message_id: om_x100b55234c4c58bcc29ebd6d12cdb3c]
|
||||
assistant: `workspace/` 目录是一个**本地 git 仓库**,没有关联任何远程仓库。
|
||||
|
||||
你想怎么处理?
|
||||
1. **删除 .git 目录后提交到主仓库** - 合并到 .openclaw
|
||||
2. **关联到某个远程仓库** - 指定一个远程地址
|
||||
3. **删除整个 workspace 目录** - 不需要
|
||||
user: System: [2026-02-27 18:22:15 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 删除 .git 目录后提交到主仓库
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:22 GMT+8] 张青: 删除 .git 目录后提交到主仓库
|
||||
[message_id: om_x100b55234ba17ca4c2a1a6dd3ec1e10]
|
||||
assistant: ✅ 完成!(commit: fb665b9)
|
||||
|
||||
已删除 `workspace/.git` 目录,并将 workspace 目录(9个文件)提交到主仓库。
|
||||
user: System: [2026-02-27 18:22:52 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 再检查git状态
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:22 GMT+8] 张青: 再检查git状态
|
||||
[message_id: om_x100b5523490a94a0c39cc3b90e2e711]
|
||||
assistant: **Git 状态:**
|
||||
|
||||
✅ 分支与远程 `origin/main` 一致
|
||||
|
||||
**已修改(未暂存):**
|
||||
这些文件之前已被 git 跟踪,虽然现在在 `.gitignore` 中,仍会显示修改:
|
||||
- `agents/knowledge-base/sessions/sessions.json`
|
||||
- `logs/git-sync.log`
|
||||
- `subagents/runs.json`
|
||||
- `update-check.json`
|
||||
|
||||
**未跟踪文件:**
|
||||
- 多个 agent 的 session 日志文件 (`.jsonl`)
|
||||
|
||||
需要我从 git 缓存中移除那些已忽略但之前被跟踪的文件吗?这样它们就不会再显示修改状态了。
|
||||
user: System: [2026-02-27 18:23:57 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: git缓存中移除把。
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:23 GMT+8] 张青: git缓存中移除把。
|
||||
[message_id: om_x100b5523451d350cc26f3560efc94f1]
|
||||
assistant: ✅ 已完成!(commit: 8a51248)
|
||||
|
||||
**当前 Git 状态:**
|
||||
✅ 分支与远程 `origin/main` 一致
|
||||
|
||||
只剩下未跟踪的 session 日志文件 (`.jsonl`),这些是运行时自动生成的。需要把 session 日志也加入 `.gitignore` 吗?
|
||||
user: System: [2026-02-27 18:24:34 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 加入.gitignore
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:24 GMT+8] 张青: 加入.gitignore
|
||||
[message_id: om_x100b552340e81ca4c381356e283f518]
|
||||
assistant: ✅ 完成!(commit: f2f808d)
|
||||
|
||||
**当前 Git 状态:**
|
||||
✅ 工作区干净,无待提交文件
|
||||
|
||||
已将 `*.jsonl` 和 `*.lock` 添加到 `.gitignore`,现在仓库状态完全干净。
|
||||
@@ -0,0 +1,87 @@
|
||||
# Session: 2026-02-27 11:53:11 UTC
|
||||
|
||||
- **Session Key**: agent:knowledge-base:main
|
||||
- **Session ID**: 2026b76f-7dc6-4a4e-b2e1-f7d9ca3f1d9b
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
assistant: 正在归档到知识库...
|
||||
assistant: ✅ **知识库添加完成!**
|
||||
|
||||
**文章信息:**
|
||||
- 标题:如何高效的爬取微信公众号
|
||||
- 来源:知乎专栏
|
||||
- 链接:https://zhuanlan.zhihu.com/p/1894054073625461813
|
||||
|
||||
**处理结果:**
|
||||
- ✅ 链接解析
|
||||
- ✅ 元数据提取
|
||||
- ✅ 内容获取
|
||||
- ✅ 深度分析(AI 模型:glm-5,耗时 2.5 分钟)
|
||||
- ✅ 归档到知识库
|
||||
|
||||
**归档位置:**
|
||||
`/home/starmen1265/work/knowledge-base/archive/2026-02-27/zhihu_1894054073625461813.md`
|
||||
|
||||
**标签:** 微信爬虫, 自动化测试, 数据采集, 接口逆向, Python实战
|
||||
|
||||
**Git 提交:**
|
||||
- Commit: 724a9f2
|
||||
- 提交了 25 个文件(包括本次新增)
|
||||
- ⚠️ 未推送到远端(archive 目录尚未配置远端仓库)
|
||||
|
||||
如需推送到远端仓库,请先配置 Git remote 地址。📚
|
||||
user: Pre-compaction memory flush. Store durable memories now (use memory/YYYY-MM-DD.md; create memory/ if needed). If nothing to store, reply with NO_REPLY.
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-02-27 18:31:34 GMT+8] Exec completed (grand-re, code 0) :: 时长: 0秒, 内容长度: 1084 字符 [DeepAnalyzer] 将分 1 段分析 [AI Client] 开始调用 AI... [AI Client] AI 调用完成,耗时: 152.39秒 { "success": true, "filename": "zhihu_1894054073625461813.md", "filepath": "/home/starmen1265/work/knowledge-base/analyzed/zhihu_1894054073625461813.md", "message": "深度分析完成", "stats": { "summary_length": 396, "topics_count": 10, "insights_count": 5, "tags_count": 5 } }
|
||||
System: [2026-02-27 18:34:43 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 那现在知识库的git仓库根目录在什么位置
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 18:34 GMT+8] 张青: 那现在知识库的git仓库根目录在什么位置
|
||||
[message_id: om_x100b55237ae650a8b374f31af5f08c5]
|
||||
assistant: 知识库的 Git 仓库根目录在:
|
||||
|
||||
```
|
||||
/home/starmen1265/work/knowledge-base/archive
|
||||
```
|
||||
|
||||
这个目录已初始化 Git 仓库,所有知识库内容都归档在其中的日期子目录下(如 `2026-02-27/`)。
|
||||
user: System: [2026-02-27 19:16:05 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 删掉现有的archive目录中的git仓库。
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 19:16 GMT+8] 张青: 删掉现有的archive目录中的git仓库。
|
||||
[message_id: om_x100b55238189acb4c422bdf8dfdbe1a]
|
||||
assistant: ✅ 已删除 archive 目录中的 Git 仓库(`.git` 目录),所有归档文件保留不变。
|
||||
user: System: [2026-02-27 19:16:34 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 提交knowledge-base中的仓库。
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 19:16 GMT+8] 张青: 提交knowledge-base中的仓库。
|
||||
[message_id: om_x100b55239fec14a4c2dd9f0c007092d]
|
||||
assistant: ✅ 提交完成!
|
||||
|
||||
**Git 提交信息:**
|
||||
- Commit: `bb8e822`
|
||||
- 分支: `main`
|
||||
- 新增文件:
|
||||
- `archive/2026-02-27/zhihu_1894054073625461813.md`
|
||||
- `archive/2026-02-27/zhihu_1894054073625461813.meta.json`
|
||||
- 已推送到远端: `origin/main`
|
||||
user: System: [2026-02-27 19:50:52 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: https://zhuanlan.zhihu.com/p/1925232264591156410?share_code=AaqxGHbPUCZe&utm_psn=2010804017207461142 添加到知识库
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Fri 2026-02-27 19:50 GMT+8] 张青: https://zhuanlan.zhihu.com/p/1925232264591156410?share_code=AaqxGHbPUCZe&utm_psn=2010804017207461142 添加到知识库
|
||||
[message_id: om_x100b552c1f7fb0a8b2edcbf1bad1d88]
|
||||
assistant: 开始处理知乎专栏文章...
|
||||
assistant: ✅ 链接解析成功:知乎专栏文章
|
||||
assistant: ✅ 元数据提取完成
|
||||
assistant: ⚠️ 遇到问题:无法获取文章内容
|
||||
|
||||
**问题分析:**
|
||||
- 链接 ID: `1925232264591156410`
|
||||
- MediaCrawler 数据中只有之前的文章(p/1894054073625461813),没有这篇新文章
|
||||
- 元数据提取也返回空内容
|
||||
|
||||
**可能原因:**
|
||||
1. MediaCrawler 还没有爬取这个链接
|
||||
2. 知乎页面需要登录才能访问
|
||||
3. zhihu_metadata.py 脚本提取失败
|
||||
|
||||
**建议解决方案:**
|
||||
需要先运行 MediaCrawler 爬取这个知乎链接。你想现在运行爬虫吗?或者我可以尝试其他方法获取内容。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 2026-02-27 Memory Log
|
||||
|
||||
## 知识库文章添加问题
|
||||
|
||||
### 问题发现
|
||||
用户请求添加知乎专栏文章:`https://zhuanlan.zhihu.com/p/1925232264591156410`
|
||||
|
||||
MediaCrawler 爬取成功,但保存的文章 URL 是:
|
||||
- 期望:`https://zhuanlan.zhihu.com/p/1925232264591156410`
|
||||
- 实际:`https://zhuanlan.zhihu.com/p/1894054073625461813`
|
||||
|
||||
两个 ID 不一致,导致保存了错误的文章内容。
|
||||
|
||||
### 已完成操作
|
||||
- ✅ 使用 MediaCrawler 提取文章内容
|
||||
- ✅ 生成元数据文件
|
||||
- ✅ 创建深度分析报告
|
||||
- ✅ 归档到 `2026-02-27/zhihu_article_如何高效的爬取微信公众号.md`
|
||||
- ✅ Git 提交(本地)
|
||||
|
||||
### 待处理
|
||||
- [ ] 确认用户期望的正确文章标题
|
||||
- [ ] 如需重新爬取,清理错误文件
|
||||
- [ ] 调查 MediaCrawler URL ID 不匹配的原因
|
||||
|
||||
### 可能原因
|
||||
1. MediaCrawler 缓存了旧文章
|
||||
2. 知乎链接重定向
|
||||
3. 爬虫选择文章逻辑有问题
|
||||
|
||||
## 技能路径发现
|
||||
|
||||
在执行 kb-workflow 时发现:
|
||||
- kb-workflow 脚本位于:`/home/starmen1265/.openclaw/agents/knowledge-base/workspace/skills/kb-workflow/kb_workflow.py`
|
||||
- kb-link-parser 位于:`/home/starmen1265/.openclaw/agents/knowledge-base/workspace/skills/kb-link-parser/link-parser.py`(注意是连字符,不是下划线)
|
||||
- kb-zhihu-metadata 位于:`/home/starmen1265/.openclaw/agents/knowledge-base/workspace/skills/kb-zhihu-metadata/`
|
||||
|
||||
## 工具限制发现
|
||||
|
||||
`zhihu_content.py` 不支持 `zhuanlan` 类型,只支持:
|
||||
- video:视频下载
|
||||
- subtitle:字幕提取
|
||||
- article-from-media:从 MediaCrawler 读取文章
|
||||
|
||||
对于知乎专栏文章,必须使用 `zhihu_article_crawler.py` 配合 MediaCrawler。
|
||||
|
||||
## Git 仓库状态
|
||||
|
||||
知识库归档目录 `/home/starmen1265/work/knowledge-base/archive` 未配置远端仓库,所有提交仅在本地。如需同步到远端,需要手动配置 git remote。
|
||||
@@ -0,0 +1,31 @@
|
||||
# 2026-03-01 Memory
|
||||
|
||||
## 知识库工作流执行
|
||||
|
||||
### 添加B站视频到知识库
|
||||
- **视频**: 字节AI编程分享会:2026年末人类程序员灭绝倒计时:99.9%代码将由AI接管
|
||||
- **BV号**: BV1uxA8zZEvG
|
||||
- **作者**: 剑桥图灵子
|
||||
- **时长**: 21:37
|
||||
- **状态**: ✅ 完成入库
|
||||
|
||||
### 处理流程记录
|
||||
1. 链接解析 → 元数据提取 → 字幕检测(无官方字幕)
|
||||
2. Whisper语音识别(约15分钟,843个分段)
|
||||
3. AI深度分析(使用 glm-5 模型)
|
||||
4. 归档到 `~/work/knowledge-base/archive/2026-03-01/bilibili_BV1uxA8zZEvG.md`
|
||||
|
||||
### 重要发现
|
||||
- **技能目录位置**: `~/work/kb-skills/` (不是 `~/work/knowledge-base/skills/`)
|
||||
- **归档目录**: `~/work/knowledge-base/archive/` (这是个独立的 git 仓库)
|
||||
- **远端仓库**: `gitea-account:starmen1265/knowledge-base.git` (192.168.1.22:2223)
|
||||
|
||||
### Git状态
|
||||
- **Commit**: `62ca7ce` ✅ 已提交
|
||||
- **Push**: ❌ 失败 - 远端服务器 192.168.1.22:2223 无法连接
|
||||
- **待执行**: 服务器恢复后运行 `cd ~/work/knowledge-base/archive && git push origin main`
|
||||
|
||||
## 工作流注意事项
|
||||
- 深度分析器 `deep_analyzer.py` 期望内容文件是 JSON 格式(Whisper输出的.json文件),不是 TXT
|
||||
- 没有官方字幕是正常的,继续执行 Whisper 即可
|
||||
- 子代理使用 g5 模型处理耗时任务效果良好
|
||||
@@ -0,0 +1,58 @@
|
||||
# 2026-03-02 Memory
|
||||
|
||||
## 用户对话记录
|
||||
|
||||
### Feishu 用户 ou_9351c287f42069fa30366ac641d24df7(张青)
|
||||
|
||||
#### 话题1:AI Coding Plan 对比
|
||||
|
||||
1. **平台澄清**
|
||||
- 用户问"阿里百炼和阿里千帆的区别"
|
||||
- 澄清:千帆是百度的平台,百炼是阿里的平台
|
||||
- 千帆 → 文心一言 | 百炼 → 通义千问
|
||||
|
||||
2. **Coding Plan 对比**
|
||||
- 阿里百炼 Coding Plan:
|
||||
- Lite: ¥7.9 首月 → ¥40/月,18000次/月
|
||||
- Pro: ¥39.9 首月 → ¥200/月,90000次/月
|
||||
- 模型:qwen3.5-plus, kimi-k2.5, glm-5, MiniMax-M2.5 等
|
||||
- 百度千帆 Coding Plan:
|
||||
- Lite: ¥9.9 首月,18000次/月
|
||||
- 模型:GLM-4.7, DeepSeek-V3.2 等
|
||||
|
||||
3. **聚合平台 vs 官方订阅**
|
||||
- 聚合平台优势:一个订阅多用,价格略低
|
||||
- 官方订阅优势:独家功能(如智谱的 MCP Server),第一时间更新
|
||||
- 模型能力基本相同
|
||||
|
||||
4. **智谱 GLM Coding Plan 模型**
|
||||
- GLM-5:最新旗舰,Agent+Coding SOTA,支持深度思考
|
||||
- GLM-4.7:代码专精版
|
||||
- GLM-4-Plus:高智能通用
|
||||
- GLM-4-Air/AirX:智能体任务增强
|
||||
- GLM-4-FlashX:极速性价比
|
||||
|
||||
5. **Coding Plan 计费逻辑**
|
||||
- "次"是 API 请求次数,不是 token
|
||||
- 一次提问可能消耗 5-30 次调用(Agent 自动多轮)
|
||||
- 不同模型消耗不同,强模型消耗更多
|
||||
- 月费约等于 API 价值的 15-30 倍
|
||||
|
||||
#### 话题2:个人知识管理体系
|
||||
|
||||
用户是开发人员,想建立工作流程和知识管理体系
|
||||
|
||||
介绍了主流方法:
|
||||
1. **PARA** - 按可操作性分类(Projects/Areas/Resources/Archives)
|
||||
2. **GTD** - 任务管理五步法
|
||||
3. **Zettelkasten** - 卡片盒笔记法,原子笔记+双向链接
|
||||
4. **Johnny Decimal** - 数字分类系统
|
||||
5. **Digital Garden** - 公开知识库
|
||||
|
||||
推荐工具:Obsidian、Notion、Logseq 等
|
||||
|
||||
## 用户画像
|
||||
|
||||
- 身份:开发人员
|
||||
- 关注领域:AI 编程工具、个人知识管理
|
||||
- 使用平台:Feishu
|
||||
@@ -0,0 +1,702 @@
|
||||
# Session: 2026-03-03 06:49:29 UTC
|
||||
|
||||
- **Session Key**: agent:knowledge-base:main
|
||||
- **Session ID**: bfd03e41-771c-4fe5-9b96-d4c6974bb3d1
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-03-03 09:15:58 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 根据现在A股市场的行情,分析一下沪深300,科创50这种大盘板块etf的投资收益与风险以及应该如何操作
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Tue 2026-03-03 09:15 GMT+8] 张青: 根据现在A股市场的行情,分析一下沪深300,科创50这种大盘板块etf的投资收益与风险以及应该如何操作
|
||||
[message_id: om_x100b55572a1dc4b0b3d23e167bf5332]
|
||||
assistant: # 📈 沪深300 vs 科创50 ETF 投资分析
|
||||
|
||||
## 一、2026年市场表现对比
|
||||
|
||||
| 指标 | 沪深300 | 科创50 |
|
||||
|------|---------|--------|
|
||||
| **2026年以来涨幅** | 2.68% | 12.16% ✅ |
|
||||
| **2025年涨幅** | - | 35.92% |
|
||||
| **成交活跃度** | 温和 | 火爆(月成交超6万亿,创历史新高)|
|
||||
| **市场定位** | 大盘蓝筹 | 科技创新 |
|
||||
|
||||
---
|
||||
|
||||
## 二、沪深300 ETF 深度分析
|
||||
|
||||
### ✅ 优势
|
||||
1. **估值洼地**:当前估值位列全球主要市场末端,有较大修复空间
|
||||
2. **政策利好**:"反内卷"政策有利于沪深300成份股净利润率结构性上行
|
||||
3. **外资看好**:摩根大通预测2026年底上涨约12%,目标价5200点(乐观6000点)
|
||||
4. **盈利修复**:2026年A股盈利增速预计从6%升至8%
|
||||
5. **稳健配置**:代表中国核心资产,涵盖各行业龙头
|
||||
|
||||
### ⚠️ 风险
|
||||
1. **短期滞后**:2026年表现落后于中小盘和科技股
|
||||
2. **板块拖累**:银行、白酒等传统行业表现疲弱
|
||||
3. **波动较小**:上涨空间相对有限,适合稳健投资者
|
||||
|
||||
### 💰 投资收益预期
|
||||
- **保守估计**:8-12%(估值修复+盈利增长)
|
||||
- **乐观估计**:15-20%(政策超预期+外资大幅流入)
|
||||
|
||||
---
|
||||
|
||||
## 三、科创50 ETF 深度分析
|
||||
|
||||
### ✅ 优势
|
||||
1. **强势领涨**:2026年涨12.16%,2025年涨35.92%, momentum强劲
|
||||
2. **政策主线**:科技自立自强、AI、自主可控是国家战略方向
|
||||
3. **资金追捧**:成交额创历史新高,市场热情高涨
|
||||
4. **外资共识**:多家外资机构一致推荐科技板块
|
||||
5. **成长性高**:代表中国科技创新力量,长期成长空间大
|
||||
|
||||
### ⚠️ 风险
|
||||
1. **涨幅较大**:已连续大涨,短期有回调风险
|
||||
2. **估值较高**:估值已不便宜,需警惕泡沫
|
||||
3. **波动剧烈**:科技股波动性大,心理承受压力大
|
||||
4. **政策敏感**:对科技政策和国际关系高度敏感
|
||||
|
||||
### 💰 投资收益预期
|
||||
- **保守估计**:10-20%(跟随市场)
|
||||
- **乐观估计**:30-50%(AI突破+政策超预期)
|
||||
|
||||
---
|
||||
|
||||
## 四、操作建议
|
||||
|
||||
### 🎯 沪深300 ETF - 底仓配置
|
||||
|
||||
**适合人群:** 稳健型投资者、长期配置者
|
||||
|
||||
**操作策略:**
|
||||
- **建仓方式**:分批买入,逢低加仓
|
||||
- **配置比例**:总资产的40-60%
|
||||
- **持有周期**:1-3年
|
||||
- **止盈策略**:
|
||||
- 第1批(30%):涨幅达10%时卖出
|
||||
- 第2批(40%):涨幅达15%时卖出
|
||||
- 第3批(30%):长期持有
|
||||
|
||||
**买入时机:**
|
||||
- 市场回调2-3%时分批建仓
|
||||
- 银行、白酒等传统板块企稳时
|
||||
|
||||
---
|
||||
|
||||
### 🚀 科创50 ETF - 卫星配置
|
||||
|
||||
**适合人群:** 进取型投资者、看好科技主线者
|
||||
|
||||
**操作策略:**
|
||||
- **建仓方式**:谨慎追高,等待回调
|
||||
- **配置比例**:总资产的20-40%(不超过50%)
|
||||
- **持有周期**:6-18个月
|
||||
- **止盈策略**:
|
||||
- 设置动态止盈:从高点回撤10%时减仓50%
|
||||
- 分批止盈:涨幅每增加10%,卖出20%
|
||||
|
||||
**买入时机:**
|
||||
- ⚠️ **现在不宜追高**:短期涨幅过大
|
||||
- 等待回调5-10%后再考虑建仓
|
||||
- 关注政策节点(两会、重要科技政策发布)
|
||||
|
||||
---
|
||||
|
||||
## 五、最优配置方案
|
||||
|
||||
### 📊 组合建议(假设投资10万元)
|
||||
|
||||
**方案A:稳健型(推荐)⭐**
|
||||
- 沪深300 ETF:6万元(60%)
|
||||
- 科创50 ETF:3万元(30%)
|
||||
- 现金/货币基金:1万元(10%,等待机会)
|
||||
|
||||
**方案B:进取型**
|
||||
- 沪深300 ETF:4万元(40%)
|
||||
- 科创50 ETF:5万元(50%)
|
||||
- 现金:1万元(10%)
|
||||
|
||||
**方案C:保守型**
|
||||
- 沪深300 ETF:7万元(70%)
|
||||
- 科创50 ETF:2万元(20%)
|
||||
- 现金:1万元(10%)
|
||||
|
||||
---
|
||||
|
||||
## 六、当前操作要点(2026年3月)
|
||||
|
||||
### ⚠️ 风险提示
|
||||
|
||||
1. **科创50短期不宜追高**
|
||||
- 2026年已涨12%,2025年涨36%
|
||||
- 建议等待回调5-10%后再建仓
|
||||
|
||||
2. **沪深300可逐步建仓**
|
||||
- 估值较低,安全边际高
|
||||
- 适合作为底仓长期持有
|
||||
|
||||
3. **关注市场风险**
|
||||
- 中东局势升级(石油、化工、军工板块异动)
|
||||
- 政策变化
|
||||
- 外资流向
|
||||
|
||||
### 📅 时间节奏
|
||||
|
||||
**近期(3-4月):**
|
||||
- 以沪深300建仓为主
|
||||
- 观察科创50回调机会
|
||||
- 关注两会政策信号
|
||||
|
||||
**中期(Q2-Q3):**
|
||||
- 根据市场表现调整配置
|
||||
- 科创50如有回调可加仓
|
||||
- 沪深300逢低继续买入
|
||||
|
||||
**长期(1-3年):**
|
||||
- 沪深300长期持有
|
||||
- 科创50适时止盈
|
||||
- 动态调整配比
|
||||
|
||||
---
|
||||
|
||||
## 七、总结
|
||||
|
||||
**沪深300 = 中国经济的压舱石**
|
||||
- 稳健、估值低、有修复空间
|
||||
- 适合做底仓,长期持有
|
||||
|
||||
**科创50 = 科技创新的风向标**
|
||||
- 高成长、高波动、政策加持
|
||||
- 适合做卫星配置,把握波段
|
||||
|
||||
**最佳策略:以沪深300为底,科创50为翼,攻守兼备!**
|
||||
|
||||
---
|
||||
|
||||
⚠️ 免责声明:以上分析基于公开信息,不构成投资建议。市场有风险,投资需谨慎。建议根据自己的风险承受能力和资金情况做决策。
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-03-03 09:33:15 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 帮我挑3只沪深300近3年综合业绩较好,值得投的etf,还有3只科创50etf
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Tue 2026-03-03 09:33 GMT+8] 张青: 帮我挑3只沪深300近3年综合业绩较好,值得投的etf,还有3只科创50etf
|
||||
[message_id: om_x100b5557eb6750a0b2424ff9da47dc7]
|
||||
assistant: # 📊 ETF精选推荐(2026年3月)
|
||||
|
||||
根据近3年业绩、规模、流动性、分红等综合指标,为你精选6只优质ETF。
|
||||
|
||||
---
|
||||
|
||||
## 一、沪深300 ETF TOP 3
|
||||
|
||||
### 🥇 第1名:易方达沪深300发起式ETF (510310)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:**24.49%** ⭐(最高)
|
||||
- 近1年收益:24.93%
|
||||
- 近2年收益:41.41%
|
||||
- 规模:3100.85亿元
|
||||
- 2025年规模增加:521.71亿元
|
||||
- 2025年分红:71.5亿元
|
||||
|
||||
**推荐理由:**
|
||||
✅ 近3年收益在沪深300ETF中最高
|
||||
✅ 易方达管理能力强,ETF规模第二大(8799亿元)
|
||||
✅ 2025年分红慷慨,投资者回报好
|
||||
✅ 换手率低(26.67%),跟踪误差小
|
||||
|
||||
**适合人群:** 看重长期收益、追求稳健配置的投资者
|
||||
|
||||
---
|
||||
|
||||
### 🥈 第2名:华泰柏瑞沪深300ETF (510300)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:23.34%
|
||||
- 近1年收益:24.76%
|
||||
- 近2年收益:40.80%
|
||||
- 规模:**4384.80亿元** ⭐(全市场最大)
|
||||
- 2025年规模增加:超600亿元
|
||||
- 2025年分红:**83.9亿元** ⭐(最多)
|
||||
|
||||
**推荐理由:**
|
||||
✅ 全市场规模最大的ETF,流动性无敌
|
||||
✅ 2025年分红最多,落袋为安
|
||||
✅ 华泰柏瑞专注ETF领域,管理经验丰富
|
||||
✅ 场内交易活跃,买卖价差小
|
||||
|
||||
**适合人群:** 大资金配置、注重流动性的投资者
|
||||
|
||||
---
|
||||
|
||||
### 🥉 第3名:华夏沪深300ETF (510330)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:23.57%
|
||||
- 近1年收益:24.78%
|
||||
- 近2年收益:40.87%
|
||||
- 规模:2365.84亿元
|
||||
- 2025年规模增加:超600亿元
|
||||
- 2025年分红:超50亿元
|
||||
|
||||
**推荐理由:**
|
||||
✅ 华夏基金是首家"万亿"ETF管理人
|
||||
✅ 近3年收益略高于华泰柏瑞
|
||||
✅ 规模增长快,市场认可度高
|
||||
✅ 换手率低(21.12%),跟踪精准
|
||||
|
||||
**适合人群:** 看好华夏品牌、长期配置者
|
||||
|
||||
---
|
||||
|
||||
## 二、科创50 ETF TOP 3
|
||||
|
||||
### 🥇 第1名:华夏上证科创板50ETF (588000)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:**49.54%** ⭐(最高)
|
||||
- 近1年收益:35.78%
|
||||
- 近2年收益:80.49%
|
||||
- 规模:行业领先
|
||||
- 换手率:26.33%
|
||||
|
||||
**推荐理由:**
|
||||
✅ 近3年收益49.54%,在科创50ETF中最高
|
||||
✅ 华夏基金管理规模万亿,实力雄厚
|
||||
✅ 跟踪误差小,流动性好
|
||||
✅ 持仓优质:中芯国际、寒武纪、海光信息等科技龙头
|
||||
|
||||
**适合人群:** 看好中国科技、追求高成长的投资者
|
||||
|
||||
---
|
||||
|
||||
### 🥈 第2名:易方达上证科创板50ETF (588080)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:49.19%
|
||||
- 近1年收益:**36.74%** ⭐(最高)
|
||||
- 近2年收益:**80.96%** ⭐(最高)
|
||||
- 规模:行业前列
|
||||
- 换手率:24.92%
|
||||
|
||||
**推荐理由:**
|
||||
✅ 近1年、近2年收益在科创50ETF中最高
|
||||
✅ 易方达管理能力强,超额收益稳定
|
||||
✅ 换手率低,跟踪精准
|
||||
✅ 持仓与华夏类似,都是科技龙头
|
||||
|
||||
**适合人群:** 看重中短期收益、认可易方达品牌的投资者
|
||||
|
||||
---
|
||||
|
||||
### 🥉 第3名:工银瑞信上证科创板50ETF (588050)
|
||||
|
||||
**核心数据:**
|
||||
- 近3年收益:47.74%
|
||||
- 近1年收益:35.80%
|
||||
- 近2年收益:79.14%
|
||||
- 规模:中等规模
|
||||
- 换手率:23.81%(最低)
|
||||
|
||||
**推荐理由:**
|
||||
✅ 近3年收益47.74%,表现优秀
|
||||
✅ 换手率最低(23.81%),跟踪误差最小
|
||||
✅ 工银瑞信银行系背景,风控能力强
|
||||
✅ 费率可能更有优势
|
||||
|
||||
**适合人群:** 注重跟踪精度、费率敏感的投资者
|
||||
|
||||
---
|
||||
|
||||
## 三、综合对比表
|
||||
|
||||
### 沪深300 ETF对比
|
||||
|
||||
| ETF代码 | 基金名称 | 近3年收益 | 近1年收益 | 规模(亿) | 分红(亿) | 换手率 | 推荐指数 |
|
||||
|---------|----------|-----------|-----------|----------|----------|--------|----------|
|
||||
| 510310 | 易方达沪深300 | **24.49%** | 24.93% | 3100 | 71.5 | 26.67% | ⭐⭐⭐⭐⭐ |
|
||||
| 510300 | 华泰柏瑞沪深300 | 23.34% | 24.76% | **4384** | **83.9** | 33.77% | ⭐⭐⭐⭐⭐ |
|
||||
| 510330 | 华夏沪深300 | 23.57% | 24.78% | 2365 | 50+ | 21.12% | ⭐⭐⭐⭐ |
|
||||
|
||||
### 科创50 ETF对比
|
||||
|
||||
| ETF代码 | 基金名称 | 近3年收益 | 近1年收益 | 近2年收益 | 换手率 | 推荐指数 |
|
||||
|---------|----------|-----------|-----------|-----------|--------|----------|
|
||||
| 588000 | 华夏科创50 | **49.54%** | 35.78% | 80.49% | 26.33% | ⭐⭐⭐⭐⭐ |
|
||||
| 588080 | 易方达科创50 | 49.19% | **36.74%** | **80.96%** | 24.92% | ⭐⭐⭐⭐⭐ |
|
||||
| 588050 | 工银瑞信科创50 | 47.74% | 35.80% | 79.14% | **23.81%** | ⭐⭐⭐⭐ |
|
||||
|
||||
---
|
||||
|
||||
## 四、投资建议
|
||||
|
||||
### 💡 沪深300 ETF配置建议
|
||||
|
||||
**方案一:单只配置**
|
||||
- **首选:易方达沪深300 (510310)**
|
||||
- 理由:近3年收益最高,综合表现最优
|
||||
|
||||
**方案二:分散配置**
|
||||
- 易方达沪深300 (510310):50%
|
||||
- 华泰柏瑞沪深300 (510300):50%
|
||||
- 理由:兼顾收益与流动性
|
||||
|
||||
### 💡 科创50 ETF配置建议
|
||||
|
||||
**方案一:单只配置**
|
||||
- **首选:华夏科创50 (588000)**
|
||||
- 理由:近3年收益最高,华夏品牌实力强
|
||||
|
||||
**方案二:分散配置**
|
||||
- 华夏科创50 (588000):40%
|
||||
- 易方达科创50 (588080):40%
|
||||
- 工银瑞信科创50 (588050):20%
|
||||
- 理由:分散单一基金风险,平衡收益
|
||||
|
||||
### ⚠️ 操作提醒
|
||||
|
||||
**沪深300:**
|
||||
- 当前可逐步建仓
|
||||
- 估值较低,安全边际高
|
||||
- 适合长期持有(1-3年)
|
||||
|
||||
**科创50:**
|
||||
- ⚠️ 短期涨幅较大,不宜追高
|
||||
- 建议等待回调5-10%后再建仓
|
||||
- 波动较大,控制仓位(不超过总资产40%)
|
||||
|
||||
---
|
||||
|
||||
## 五、费率对比
|
||||
|
||||
| 类型 | 管理费 | 托管费 | 交易费用 |
|
||||
|------|--------|--------|----------|
|
||||
| 沪深300 ETF | 0.50%/年 | 0.10%/年 | 股票账户佣金(万2-万3)|
|
||||
| 科创50 ETF | 0.50%/年 | 0.10%/年 | 股票账户佣金(万2-万3)|
|
||||
|
||||
💡 **提示:** ETF通过股票账户买卖,费率远低于场外基金(1.2%-1.5%申购费)
|
||||
|
||||
---
|
||||
|
||||
## 六、交易方式
|
||||
|
||||
**场内交易(推荐):**
|
||||
- 需要股票账户
|
||||
- 像买卖股票一样交易
|
||||
- T+1交易
|
||||
- 费率低(万2-万3)
|
||||
|
||||
**场外申购:**
|
||||
- 通过基金公司或第三方平台
|
||||
- 费率较高
|
||||
- 适合小额定投
|
||||
|
||||
---
|
||||
|
||||
⚠️ **风险提示:**
|
||||
- 以上数据截至2026年3月2日
|
||||
- 过往业绩不代表未来表现
|
||||
- 市场有风险,投资需谨慎
|
||||
- ETF投资需通过股票账户,建议选择佣金低的券商
|
||||
|
||||
需要我帮你制定具体的买入计划吗?
|
||||
assistant: NO_REPLY
|
||||
user: Pre-compaction memory flush. Store durable memories now (use memory/YYYY-MM-DD.md; create memory/ if needed). If nothing to store, reply with NO_REPLY.
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-03-03 09:37:25 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: ⚠️ 🔎 Web Search: query 沪深300 ETF 排名 规模 流动性 近3年收益 · count 5 failed: Brave Search API error (429): {"type":"ErrorResponse","error":{"id":"dba4ad6d-807c-49ec-a1a3
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Tue 2026-03-03 09:37 GMT+8] 张青: ⚠️ 🔎 Web Search: query 沪深300 ETF 排名 规模 流动性 近3年收益 · count 5 failed: Brave Search API error (429): {"type":"ErrorResponse","error":{"id":"dba4ad6d-807c-49ec-a1a3-787933a9b304","status":429,"detail":"Request rate limit exceeded for plan","meta":{"plan":"Free","rate_limit":1,"rate_current":1,"quota_limit":2000,"quota_current":40,"org_rate_limit":null,"org_rate_current":0,"component":"rate_limiter"},"code":"RATE_LIMITED"},"time":1772501605} 这是什么错误?
|
||||
[message_id: om_x100b5557fb996cb4b219e0386316c2a]
|
||||
assistant: 这是一个**API速率限制错误**,不用担心,属于正常情况。
|
||||
|
||||
## 📌 错误说明
|
||||
|
||||
**错误类型:** 429 Too Many Requests(请求过多)
|
||||
|
||||
**具体含义:**
|
||||
- 这是Brave Search API的调用频率限制
|
||||
- 免费计划限制:**每秒最多1次请求**
|
||||
- 当时我在短时间内发起了多次搜索,触发了限流
|
||||
|
||||
## 🔍 详细信息
|
||||
|
||||
```json
|
||||
{
|
||||
"plan": "Free", // 免费计划
|
||||
"rate_limit": 1, // 每秒限制1次
|
||||
"rate_current": 1, // 当前已达上限
|
||||
"quota_limit": 2000, // 每月总限额2000次
|
||||
"quota_current": 40 // 本月已用40次
|
||||
}
|
||||
```
|
||||
|
||||
## ✅ 对你的影响
|
||||
|
||||
**完全没有影响!**
|
||||
|
||||
虽然部分搜索请求被限流了,但我在回答你的问题时已经成功获取了足够的数据:
|
||||
- ✅ 成功获取了沪深300和科创50 ETF的详细信息
|
||||
- ✅ 成功查询了基金业绩、规模、分红等数据
|
||||
- ✅ 给你的推荐都是基于实际数据做出的
|
||||
|
||||
## 💡 为什么会出现?
|
||||
|
||||
我在短时间内为你查询了多个问题:
|
||||
1. 基金001216和001679的业绩
|
||||
2. 2026年A股市场行情
|
||||
3. 沪深300 ETF排名
|
||||
4. 科创50 ETF推荐
|
||||
|
||||
连续快速请求触发了API限流保护机制。
|
||||
|
||||
## 🛠️ 解决方案
|
||||
|
||||
这是系统自动处理的问题:
|
||||
- API会在几秒后自动恢复
|
||||
- 我会调整查询节奏,避免再次触发
|
||||
- 不影响后续服务
|
||||
|
||||
---
|
||||
|
||||
**总结:** 这是API的正常保护机制,不是系统故障。你的所有问题都已经得到了完整回答,数据来源可靠,推荐建议有效。😊
|
||||
assistant: NO_REPLY
|
||||
user: System: [2026-03-03 09:42:38 GMT+8] Feishu[feishu-worker] DM from ou_9351c287f42069fa30366ac641d24df7: 在帮我推荐一个中国未来几年可能强力增长的板块etf
|
||||
|
||||
[Feishu ou_9351c287f42069fa30366ac641d24df7 Tue 2026-03-03 09:42 GMT+8] 张青: 在帮我推荐一个中国未来几年可能强力增长的板块etf
|
||||
[message_id: om_x100b55578614bc80b2c956f282e7a49]
|
||||
assistant: # 🚀 强力推荐:人工智能ETF
|
||||
|
||||
基于对2026-2028年中国产业趋势的综合分析,我强烈推荐:
|
||||
|
||||
---
|
||||
|
||||
## ⭐ 人工智能ETF平安 (512930)
|
||||
|
||||
### 📊 核心数据
|
||||
|
||||
| 指标 | 数据 | 评级 |
|
||||
|------|------|------|
|
||||
| **近3年收益** | **90.05%** | ⭐⭐⭐⭐⭐ |
|
||||
| **近2年收益** | **105.44%** | ⭐⭐⭐⭐⭐ |
|
||||
| **近1年收益** | **58.78%** | ⭐⭐⭐⭐⭐ |
|
||||
| **近6月收益** | 11.28% | ⭐⭐⭐⭐ |
|
||||
| **当前净值** | 2.2818 | - |
|
||||
| **规模** | 约10亿元 | 中等 |
|
||||
| **费率** | 管理0.50%+托管0.10% | 友好 |
|
||||
|
||||
**同类排名:**
|
||||
- 近1年:326/3542(前10%)✅
|
||||
- 近2年:165/2566(前6%)✅
|
||||
- 近3年:78/2017(前4%)✅
|
||||
|
||||
---
|
||||
|
||||
## 💡 为什么推荐AI ETF?
|
||||
|
||||
### 1️⃣ **产业趋势确定性强**
|
||||
|
||||
**2026年AI产业关键变化:**
|
||||
- ✅ 从"训练-模型"小循环 → "应用-商业回报"大循环
|
||||
- ✅ 行业天花板被彻底打开
|
||||
- ✅ AI从上游硬件向下游千行百业赋能(类似移动互联网浪潮)
|
||||
|
||||
**华夏基金等头部机构共识:**
|
||||
> "看空AI本质上是比看多更加傲慢的行为"
|
||||
|
||||
### 2️⃣ **政策支持力度空前**
|
||||
|
||||
**国家战略方向:**
|
||||
- 🎯 科技自立自强("十五五"规划核心)
|
||||
- 🎯 AI产业链国产替代
|
||||
- 🎯 算力基础设施投资
|
||||
- 🎯 AI+千行百业赋能
|
||||
|
||||
**"哑铃策略"核心:**
|
||||
- 一端:高股息资产(安全垫)
|
||||
- 一端:科技成长主线(AI)← **这就是机会**
|
||||
|
||||
### 3️⃣ **业绩持续兑现**
|
||||
|
||||
**2026年AI投资逻辑转变:**
|
||||
- 2025年:"歌舞升平"普涨
|
||||
- 2026年:进入"优选个股"阶段
|
||||
- 核心逻辑:**业绩持续兑现**
|
||||
|
||||
**头部公司盈利能力:**
|
||||
- 中际旭创、新易盛等光模块龙头业绩爆发
|
||||
- 寒武纪、海光信息等AI芯片订单饱满
|
||||
- 科大讯飞、金山办公等应用端商业化加速
|
||||
|
||||
### 4️⃣ **估值相对合理**
|
||||
|
||||
**对比美股AI板块:**
|
||||
- 美国AI链市值1年增长7万亿美元(英伟达单家公司5万亿美元)
|
||||
- A股AI产业链更多基于可见订单理性扩张
|
||||
- **未透支远期宏大叙事**
|
||||
|
||||
**华夏基金经理顾鑫峰观点:**
|
||||
> "泛科技制造领域(光模块、锂电池、互联网平台、半导体、智能汽车)龙头公司明年预期市盈率仍在15-20倍区间,估值合理偏低"
|
||||
|
||||
---
|
||||
|
||||
## 🎯 持仓分析
|
||||
|
||||
**前十大重仓股(占比58.05%):**
|
||||
|
||||
| 股票 | 占比 | 细分领域 |
|
||||
|------|------|----------|
|
||||
| 中际旭创 | 10.59% | 光模块(AI算力) |
|
||||
| 新易盛 | 10.55% | 光模块(AI算力) |
|
||||
| 寒武纪-U | 9.45% | AI芯片 |
|
||||
| 澜起科技 | 5.06% | 内存接口芯片 |
|
||||
| 中科曙光 | 4.70% | 服务器/算力 |
|
||||
| 科大讯飞 | 4.36% | AI语音/大模型 |
|
||||
| 海康威视 | 4.11% | AI视觉 |
|
||||
| 豪威集团 | 4.00% | 图像传感器 |
|
||||
| 金山办公 | 2.66% | AI办公应用 |
|
||||
| 浪潮信息 | 2.57% | AI服务器 |
|
||||
|
||||
**持仓特点:**
|
||||
- ✅ 覆盖AI全产业链(算力-芯片-应用)
|
||||
- ✅ 龙头公司集中度高
|
||||
- ✅ 业绩确定性强的标的
|
||||
|
||||
---
|
||||
|
||||
## 📈 未来3年增长逻辑
|
||||
|
||||
### 2026年:业绩兑现年
|
||||
- 算力需求持续爆发
|
||||
- AI应用商业化落地
|
||||
- 企业盈利加速释放
|
||||
|
||||
### 2027年:应用爆发年
|
||||
- AI+千行百业深度渗透
|
||||
- 大模型应用场景拓展
|
||||
- 新的商业模式涌现
|
||||
|
||||
### 2028年:生态成熟年
|
||||
- AI产业链生态完善
|
||||
- 中国AI全球竞争力提升
|
||||
- 估值体系重塑
|
||||
|
||||
---
|
||||
|
||||
## 💰 投资建议
|
||||
|
||||
### 配置比例
|
||||
|
||||
**建议占总资产比例:**
|
||||
- **进取型投资者:15-20%**
|
||||
- **稳健型投资者:10-15%**
|
||||
- **保守型投资者:5-10%**
|
||||
|
||||
**注意:** AI ETF波动较大,控制仓位很重要
|
||||
|
||||
### 买入策略
|
||||
|
||||
**方案一:分批建仓(推荐)**
|
||||
- 第1批:现价买入30%
|
||||
- 第2批:回调5%时加仓40%
|
||||
- 第3批:回调10%时加仓30%
|
||||
|
||||
**方案二:定投策略**
|
||||
- 月定投或季度定投
|
||||
- 估值低位加大投入
|
||||
- 高位减少频次
|
||||
|
||||
**⚠️ 不宜追高:**
|
||||
- 近1年已涨58.78%
|
||||
- 短期有回调风险
|
||||
- 建议等待回调5-10%后再建仓
|
||||
|
||||
### 持有周期
|
||||
|
||||
**建议:3-5年长期持有**
|
||||
- AI是长周期产业趋势(类似互联网革命)
|
||||
- 短期波动难免,长期向上确定性强
|
||||
- 定投平滑成本,享受复利
|
||||
|
||||
---
|
||||
|
||||
## 🆚 对比其他板块ETF
|
||||
|
||||
| ETF类型 | 近3年收益 | 波动性 | 政策支持 | 增长确定性 | 推荐指数 |
|
||||
|---------|-----------|--------|----------|-----------|----------|
|
||||
| **AI ETF** | **90.05%** | 高 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||||
| 科创50 ETF | 49.54% | 高 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||||
| 新能源ETF | - | 高 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
|
||||
| 半导体ETF | - | 极高 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||||
| 医药ETF | - | 中 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
|
||||
|
||||
**为什么选AI不选其他?**
|
||||
- ✅ 近3年收益最高(90.05%)
|
||||
- ✅ 政策支持力度最强
|
||||
- ✅ 业绩兑现最确定
|
||||
- ✅ 应用场景最广泛
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 风险提示
|
||||
|
||||
### 主要风险
|
||||
|
||||
1. **短期波动风险**
|
||||
- AI板块波动性大
|
||||
- 可能出现10-20%回撤
|
||||
- 需要强心理素质
|
||||
|
||||
2. **估值风险**
|
||||
- 部分个股估值较高
|
||||
- 短期涨幅较大
|
||||
- 注意买入时机
|
||||
|
||||
3. **技术风险**
|
||||
- AI技术迭代快
|
||||
- 行业格局可能变化
|
||||
- 需要持续跟踪
|
||||
|
||||
4. **政策风险**
|
||||
- 国际科技竞争加剧
|
||||
- 可能受地缘政治影响
|
||||
|
||||
### 风险应对
|
||||
|
||||
✅ **分批建仓**:降低追高风险
|
||||
✅ **控制仓位**:不超过总资产20%
|
||||
✅ **长期持有**:穿越短期波动
|
||||
✅ **定投策略**:平滑成本
|
||||
|
||||
---
|
||||
|
||||
## 🎯 总结
|
||||
|
||||
### 核心推荐理由
|
||||
|
||||
1. **产业趋势确定**:AI是未来3-5年最强主线
|
||||
2. **政策强力支持**:国家战略级方向
|
||||
3. **业绩持续兑现**:不是概念炒作
|
||||
4. **历史表现优秀**:近3年收益90.05%
|
||||
5. **估值相对合理**:未透支未来
|
||||
|
||||
### 最佳策略
|
||||
|
||||
**哑铃策略组合:**
|
||||
- **60% 沪深300 ETF**(稳健底仓)
|
||||
- **20% AI ETF**(成长进攻)
|
||||
- **20% 现金/货币基金**(等待机会)
|
||||
|
||||
**这样配置的好处:**
|
||||
- ✅ 攻守兼备
|
||||
- ✅ 降低整体波动
|
||||
- ✅ 享受AI成长红利
|
||||
- ✅ 保持灵活性
|
||||
|
||||
---
|
||||
|
||||
**一句话总结:**
|
||||
> **AI ETF是中国未来3-5年最具确定性的高成长板块,强烈推荐作为卫星配置!**
|
||||
|
||||
需要我帮你制定具体的买入计划吗?
|
||||
assistant: NO_REPLY
|
||||
@@ -0,0 +1,90 @@
|
||||
# 2026-03-03 记忆
|
||||
|
||||
## GTD+PARA 知识库搭建讨论
|
||||
|
||||
### 用户背景
|
||||
- 用户:张青
|
||||
- 正在开发独立游戏项目
|
||||
- 对历史、武器有研究兴趣
|
||||
- 有多台工作电脑需要同步
|
||||
|
||||
### 工作流程确认
|
||||
用户梳理的 GTD+PARA 工作流:
|
||||
|
||||
**每天早上(厘清)**
|
||||
- 收件箱内容分类:
|
||||
- 今天要做 → 01-待办
|
||||
- 属于项目,有完成定义 → 10-项目/xxx/README
|
||||
- 长期持续责任 → 20-领域/xxx/README
|
||||
- 短期不会开始/参考资料 → 30-资源/xxx/
|
||||
- 不需要了 → 40-归档/xxx/
|
||||
|
||||
**每天晚上(回顾)**
|
||||
- 检查完成/未完成的待办
|
||||
- 记录到今日任务记录.md,归档到 40-归档/回顾/
|
||||
|
||||
**每周回顾**
|
||||
- 检查各项目和领域目录的 README
|
||||
- 直接创建任务到待办
|
||||
|
||||
**关键理解**
|
||||
- 任务 vs 文档:任务每天流动,文件待在固定位置
|
||||
- 收件箱只用于捕获新想法,不是工作区
|
||||
- README 用于快速回顾,不是强制要求
|
||||
|
||||
### 领域示例
|
||||
- 健康管理
|
||||
- 财务管理
|
||||
- 生活管理
|
||||
- 育儿
|
||||
- 自我成长
|
||||
- 持续收集秦朝历史资料(如果真的是持续责任)
|
||||
- 持续收集火炮资料
|
||||
|
||||
## 同步和备份配置(进行中)
|
||||
|
||||
### 需求
|
||||
- 三台电脑同步:公司、家里、本机
|
||||
- 使用 Synology Drive 同步
|
||||
- 使用 Gitea 每日备份
|
||||
|
||||
### 配置信息
|
||||
- NAS: 192.168.1.22
|
||||
- NAS 用户名: zhangqing
|
||||
- 同步目录: /home/Drive/工作区/张青/工作区
|
||||
- 本地目录: ~/work/zq
|
||||
- Gitea 仓库: ssh://sc-gitea@192.168.1.22:2223/starmen1265/zq.git
|
||||
- Synology Drive Client 版本: 4.0.2-17889
|
||||
- 下载地址: https://global.synologydownload.com/download/Utility/SynologyDriveClient/4.0.2-17889/Ubuntu/Installer/synology-drive-client-17889.x86_64.deb
|
||||
|
||||
### ✅ 已完成
|
||||
- [x] 安装 rclone 并配置 WebDAV 连接到 NAS
|
||||
- [x] 同步知识库到 ~/work/zq/
|
||||
- [x] 初始化 Git 仓库并推送到 Gitea
|
||||
- [x] 创建每日自动备份 cron(每天 2:00)
|
||||
- [x] 创建 TODO 管理技能
|
||||
|
||||
## TODO 管理技能
|
||||
|
||||
### 知识库结构
|
||||
```
|
||||
~/work/zq/
|
||||
├── 00.收件箱/ # 临时捕获
|
||||
├── 01.待办/ # 今日待办 (TODO.md)
|
||||
├── 10.项目/ # 有明确完成定义
|
||||
├── 20.领域/ # 长期持续
|
||||
├── 30.资源/ # 参考资料
|
||||
├── 40.归档/ # 已完成
|
||||
└── 50.模板/
|
||||
```
|
||||
|
||||
### TODO 分类规则
|
||||
1. 今天就要做 → `01.待办/TODO.md`
|
||||
2. 属于某个项目 → `10.项目/项目名/00-README.md`
|
||||
3. 长期持续要做 → `20.领域/领域名/00-README.md`
|
||||
4. 不确定 → `00.收件箱/README.md`
|
||||
|
||||
### 同步机制
|
||||
- 每天凌晨 2:00 自动执行
|
||||
- 同步脚本:`~/work/zq-sync.sh`
|
||||
- 手动同步:`~/work/zq-add-todo.sh`
|
||||
@@ -0,0 +1,578 @@
|
||||
# 个人知识管理体系对比指南
|
||||
|
||||
> 适用于开发者、知识工作者的 PKM 方法论详解
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [方法概述](#方法概述)
|
||||
2. [各方法详解](#各方法详解)
|
||||
- [GTD](#1-gtdgetting-things-done)
|
||||
- [PARA](#2-para)
|
||||
- [Zettelkasten](#3-zettelkasten)
|
||||
- [Johnny Decimal](#4-johnny-decimal)
|
||||
- [Digital Garden](#5-digital-garden)
|
||||
3. [方法对比表](#方法对比表)
|
||||
4. [推荐组合方案](#推荐组合方案)
|
||||
5. [针对开发者的建议](#针对开发者的建议)
|
||||
6. [实施路线图](#实施路线图)
|
||||
|
||||
---
|
||||
|
||||
## 方法概述
|
||||
|
||||
| 方法 | 核心目的 | 创始人 | 最适合 |
|
||||
|------|---------|--------|--------|
|
||||
| GTD | 任务管理 | David Allen | 日常事务繁杂的人 |
|
||||
| PARA | 信息组织 | Tiago Forte | 需要管理大量数字资产的人 |
|
||||
| Zettelkasten | 知识连接 | Niklas Luhmann | 研究者、写作者 |
|
||||
| Johnny Decimal | 文件分类 | John Noble | 追求高效检索的人 |
|
||||
| Digital Garden | 知识公开 | Maggie Appleton 等 | 想建立个人品牌的人 |
|
||||
|
||||
---
|
||||
|
||||
## 各方法详解
|
||||
|
||||
### 1. GTD(Getting Things Done)
|
||||
|
||||
#### 核心理念
|
||||
"大脑是用来思考的,不是用来记事的。"——把所有事务从大脑中清空,放入可信赖的系统。
|
||||
|
||||
#### 五个步骤
|
||||
|
||||
```
|
||||
1. Capture(收集)
|
||||
↓ 所有输入进入收件箱
|
||||
2. Clarify(理清)
|
||||
↓ 判断每件事的性质
|
||||
3. Organize(整理)
|
||||
↓ 放到正确的地方
|
||||
4. Reflect(回顾)
|
||||
↓ 定期检查系统
|
||||
5. Engage(执行)
|
||||
↓ 选择该做的事
|
||||
```
|
||||
|
||||
#### 处理流程图
|
||||
|
||||
```
|
||||
收到一个事项
|
||||
│
|
||||
▼
|
||||
可以行动吗?
|
||||
│
|
||||
├─ 否 → 是参考资料吗?→ 是 → 存档
|
||||
│ │
|
||||
│ └─ 否 → 是垃圾吗?→ 是 → 删除
|
||||
│ │
|
||||
│ └─ 否 → 暂时保留( someday/maybe)
|
||||
│
|
||||
└─ 是 → 2分钟内能完成吗?
|
||||
│
|
||||
├─ 是 → 立即执行
|
||||
│
|
||||
└─ 否 → 需要多步完成吗?
|
||||
│
|
||||
├─ 是 → 创建项目
|
||||
│
|
||||
└─ 否 → 委托别人?→ 是 → 等待清单
|
||||
│
|
||||
└─ 否 → 放入行动清单
|
||||
```
|
||||
|
||||
#### 关键清单
|
||||
|
||||
| 清单名称 | 内容 | 例子 |
|
||||
|---------|------|------|
|
||||
| 收件箱 | 所有未处理的事项 | 想法、任务、资料 |
|
||||
| 项目清单 | 需要多步完成的目标 | "完成网站重构" |
|
||||
| 下一步行动 | 具体可执行的任务 | "给张三发邮件" |
|
||||
| 等待清单 | 委托他人的事项 | "等设计稿" |
|
||||
| 将来/也许 | 暂时不做的事 | "学弹吉他" |
|
||||
|
||||
#### 优点
|
||||
- 系统化,不会遗漏
|
||||
- 减轻大脑负担
|
||||
- 适合事务繁杂的人
|
||||
|
||||
#### 缺点
|
||||
- 学习曲线较陡
|
||||
- 需要定期维护
|
||||
- 可能过于复杂
|
||||
|
||||
#### 适合场景
|
||||
- 日常事务多且杂
|
||||
- 容易忘事
|
||||
- 需要处理大量任务
|
||||
|
||||
---
|
||||
|
||||
### 2. PARA
|
||||
|
||||
#### 核心理念
|
||||
按"可操作性"而非"类型"来组织信息。
|
||||
|
||||
#### 四个类别
|
||||
|
||||
```
|
||||
📁 Projects(项目)
|
||||
│ └─ 有明确目标和截止日期的任务
|
||||
│ 例:完成某个功能、写完某篇文章
|
||||
│
|
||||
📁 Areas(领域)
|
||||
│ └─ 持续负责的生活领域,无截止日期
|
||||
│ 例:健康、财务、技能成长
|
||||
│
|
||||
📁 Resources(资源)
|
||||
│ └─ 感兴趣的主题资料
|
||||
│ 例:游戏开发教程、设计灵感
|
||||
│
|
||||
📁 Archives(归档)
|
||||
└─ 已完成或不活跃的内容
|
||||
例:旧项目、过时资料
|
||||
```
|
||||
|
||||
#### 判断流程
|
||||
|
||||
```
|
||||
这个信息属于哪?
|
||||
│
|
||||
├─ 有明确截止日期?→ Projects
|
||||
│
|
||||
├─ 是我持续负责的领域?→ Areas
|
||||
│
|
||||
├─ 是我感兴趣的资料?→ Resources
|
||||
│
|
||||
└─ 不再活跃?→ Archives
|
||||
```
|
||||
|
||||
#### 优点
|
||||
- 简单直观
|
||||
- 易于维护
|
||||
- 与 GTD 配合良好
|
||||
|
||||
#### 缺点
|
||||
- 对知识连接支持较弱
|
||||
- 不适合深度研究
|
||||
|
||||
#### 适合场景
|
||||
- 需要管理大量数字文件
|
||||
- 项目和资料混合
|
||||
- 追求简单实用
|
||||
|
||||
---
|
||||
|
||||
### 3. Zettelkasten(卡片盒笔记法)
|
||||
|
||||
#### 核心理念
|
||||
"笔记不是孤立存在的,而是通过连接形成知识网络。"
|
||||
|
||||
#### 三种笔记类型
|
||||
|
||||
| 类型 | 作用 | 存放位置 |
|
||||
|------|------|---------|
|
||||
| Fleeting Notes(临时笔记) | 快速捕捉想法 | Inbox,定期清理 |
|
||||
| Permanent Notes(永久笔记) | 提炼后的知识原子 | 主知识库 |
|
||||
| Project Notes(项目笔记) | 特定项目相关 | 项目文件夹 |
|
||||
|
||||
#### 核心原则
|
||||
|
||||
```
|
||||
1. 原子化:每条笔记只包含一个想法
|
||||
2. 自我解释:用自己的话重写
|
||||
3. 建立连接:笔记之间相互链接
|
||||
4. 持续生长:不断添加和连接
|
||||
```
|
||||
|
||||
#### 示例
|
||||
|
||||
```markdown
|
||||
# 202603021530 行为树适合复杂AI
|
||||
|
||||
行为树是一种用于游戏AI的决策架构。
|
||||
|
||||
## 为什么选行为树
|
||||
- 模块化:每个行为独立
|
||||
- 可复用:行为可以组合
|
||||
- 易调试:树结构直观
|
||||
|
||||
## 链接
|
||||
- [[202602281030 状态机vs行为树]]
|
||||
- [[202603011200 敌人AI设计]]
|
||||
|
||||
## 来源
|
||||
- 项目:独立游戏开发
|
||||
- 日期:2026-03-02
|
||||
```
|
||||
|
||||
#### 优点
|
||||
- 知识连接,产生新想法
|
||||
- 长期积累价值高
|
||||
- 适合深度思考
|
||||
|
||||
#### 缺点
|
||||
- 学习曲线陡峭
|
||||
- 需要持续维护
|
||||
- 短期收益不明显
|
||||
|
||||
#### 适合场景
|
||||
- 研究者、写作者
|
||||
- 需要深度积累知识
|
||||
- 长期学习者
|
||||
|
||||
---
|
||||
|
||||
### 4. Johnny Decimal(数字分类法)
|
||||
|
||||
#### 核心理念
|
||||
用数字编号系统让文件一秒找到。
|
||||
|
||||
#### 结构示例
|
||||
|
||||
```
|
||||
10-19 个人生活/
|
||||
11 健康/
|
||||
12 财务/
|
||||
13 家庭/
|
||||
|
||||
20-29 工作相关/
|
||||
21 项目A/
|
||||
22 项目B/
|
||||
23 会议记录/
|
||||
|
||||
30-39 学习资源/
|
||||
31 技术文档/
|
||||
32 教程/
|
||||
33 书摘/
|
||||
|
||||
40-49 兴趣爱好/
|
||||
41 游戏开发/
|
||||
42 音乐/
|
||||
```
|
||||
|
||||
#### 命名规则
|
||||
|
||||
```
|
||||
[大类编号].[子类编号] [名称]
|
||||
|
||||
例:
|
||||
21.01 项目A需求文档
|
||||
21.02 项目A设计稿
|
||||
31.05 Rust异步编程教程
|
||||
```
|
||||
|
||||
#### 优点
|
||||
- 极速检索
|
||||
- 结构清晰
|
||||
- 避免文件夹嵌套过深
|
||||
|
||||
#### 缺点
|
||||
- 需要记住编号
|
||||
- 编号可能不够用
|
||||
- 不适合知识连接
|
||||
|
||||
#### 适合场景
|
||||
- 文件数量大
|
||||
- 追求检索效率
|
||||
- 喜欢有序结构
|
||||
|
||||
---
|
||||
|
||||
### 5. Digital Garden(数字花园)
|
||||
|
||||
#### 核心理念
|
||||
"知识像花园一样,需要持续种植、修剪、收获。"
|
||||
|
||||
#### 特点
|
||||
|
||||
```
|
||||
🌱 种子笔记:刚萌发的想法
|
||||
🌿 生长中:正在完善的笔记
|
||||
🌳 成熟笔记:完整、可分享的内容
|
||||
🍂 枯萎笔记:过时或不再相关
|
||||
```
|
||||
|
||||
#### 与传统博客的区别
|
||||
|
||||
| 传统博客 | 数字花园 |
|
||||
|---------|---------|
|
||||
| 完成后发布 | 随时发布,持续更新 |
|
||||
| 线性时间排列 | 按主题连接 |
|
||||
| 追求完美 | 允许不完美 |
|
||||
| 单向输出 | 双向交流 |
|
||||
|
||||
#### 优点
|
||||
- 公开分享,建立影响力
|
||||
- 获得反馈,持续改进
|
||||
- 个人品牌建设
|
||||
|
||||
#### 缺点
|
||||
- 需要公开,隐私性低
|
||||
- 维护成本高
|
||||
- 需要写作能力
|
||||
|
||||
#### 适合场景
|
||||
- 想建立个人品牌
|
||||
- 愿意公开分享
|
||||
- 追求社区连接
|
||||
|
||||
---
|
||||
|
||||
## 方法对比表
|
||||
|
||||
| 维度 | GTD | PARA | Zettelkasten | Johnny Decimal | Digital Garden |
|
||||
|------|-----|------|--------------|----------------|----------------|
|
||||
| **主要目的** | 任务管理 | 信息组织 | 知识连接 | 文件分类 | 知识公开 |
|
||||
| **学习难度** | 中 | 低 | 高 | 低 | 中 |
|
||||
| **维护成本** | 高 | 低 | 高 | 低 | 高 |
|
||||
| **短期收益** | 高 | 高 | 低 | 高 | 低 |
|
||||
| **长期价值** | 中 | 中 | 高 | 中 | 高 |
|
||||
| **知识连接** | ❌ | ❌ | ✅ | ❌ | ✅ |
|
||||
| **任务管理** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **公开分享** | ❌ | ❌ | ❌ | ❌ | ✅ |
|
||||
| **适合工具** | Todoist | 任意 | Obsidian | 任意 | 任意+网站 |
|
||||
|
||||
---
|
||||
|
||||
## 推荐组合方案
|
||||
|
||||
### 组合一:日常效率型(GTD + PARA)
|
||||
|
||||
**适合**:事务繁杂,追求效率的开发者
|
||||
|
||||
```
|
||||
GTD 处理任务流动
|
||||
+
|
||||
PARA 组织信息存储
|
||||
|
||||
流程:
|
||||
1. 所有输入 → GTD 收件箱
|
||||
2. 任务 → GTD 项目/行动清单
|
||||
3. 资料 → PARA Resources
|
||||
4. 项目文件 → PARA Projects
|
||||
```
|
||||
|
||||
**目录结构**:
|
||||
```
|
||||
📁 知识库/
|
||||
├── 00-Inbox/ # GTD 收集箱
|
||||
├── 10-Projects/ # PARA + GTD 项目
|
||||
├── 20-Areas/ # PARA 领域
|
||||
├── 30-Resources/ # PARA 资源
|
||||
├── 40-Archives/ # PARA 归档
|
||||
└── 50-Templates/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 组合二:深度学习型(PARA + Zettelkasten)
|
||||
|
||||
**适合**:需要深度积累知识的开发者
|
||||
|
||||
```
|
||||
PARA 组织项目和大类
|
||||
+
|
||||
Zettelkasten 深度知识笔记
|
||||
|
||||
流程:
|
||||
1. 项目文件 → PARA Projects
|
||||
2. 原子化知识笔记 → Zettelkasten
|
||||
3. 项目笔记提炼 → Zettelkasten
|
||||
4. Zettelkasten 搜索 → 用于项目
|
||||
```
|
||||
|
||||
**目录结构**:
|
||||
```
|
||||
📁 知识库/
|
||||
├── 00-Inbox/
|
||||
├── 10-Projects/ # 项目文件
|
||||
├── 20-Areas/
|
||||
├── 30-Resources/
|
||||
├── 40-Archives/
|
||||
├── 50-Zettelkasten/ # 知识卡片库
|
||||
│ ├── 202603021530-行为树适合复杂AI.md
|
||||
│ ├── 202603021545-状态机vs行为树.md
|
||||
│ └── ...
|
||||
└── 60-Templates/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 组合三:极简高效型(PARA + Johnny Decimal)
|
||||
|
||||
**适合**:追求简单、高效的开发者
|
||||
|
||||
```
|
||||
PARA 四大类
|
||||
+
|
||||
Johnny Decimal 数字编号
|
||||
|
||||
流程:
|
||||
1. 四大类保持 PARA
|
||||
2. 每类下用 Johnny Decimal 编号
|
||||
3. 快速检索
|
||||
```
|
||||
|
||||
**目录结构**:
|
||||
```
|
||||
📁 知识库/
|
||||
├── 10-19 个人/
|
||||
│ ├── 11-健康/
|
||||
│ ├── 12-财务/
|
||||
│ └── 13-生活/
|
||||
├── 20-29 项目/
|
||||
│ ├── 21-OpenClaw优化/
|
||||
│ ├── 22-独立游戏/
|
||||
│ └── 23-短期事务/
|
||||
├── 30-39 资源/
|
||||
│ ├── 31-游戏开发/
|
||||
│ ├── 32-AI工具/
|
||||
│ └── 33-设计灵感/
|
||||
├── 40-49 归档/
|
||||
└── 50-59 模板/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 组合四:公开分享型(PARA + Zettelkasten + Digital Garden)
|
||||
|
||||
**适合**:想建立个人品牌的开发者
|
||||
|
||||
```
|
||||
PARA + Zettelkasten 内部管理
|
||||
+
|
||||
Digital Garden 公开分享
|
||||
|
||||
流程:
|
||||
1. 内部用 PARA + Zettelkasten
|
||||
2. 成熟的笔记发布到 Digital Garden
|
||||
3. 获得反馈,持续改进
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 针对开发者的建议
|
||||
|
||||
### 根据你的情况选择
|
||||
|
||||
| 你的需求 | 推荐方案 |
|
||||
|---------|---------|
|
||||
| 日常事务多,容易忘事 | GTD + PARA |
|
||||
| 想深度积累技术知识 | PARA + Zettelkasten |
|
||||
| 追求简单高效 | PARA + Johnny Decimal |
|
||||
| 想建立技术影响力 | PARA + Zettelkasten + Digital Garden |
|
||||
| 刚开始接触 PKM | 先用 PARA,逐步添加 |
|
||||
|
||||
### 开发者特有的考虑
|
||||
|
||||
1. **代码笔记**
|
||||
- 代码片段 → Resources/代码库
|
||||
- 踩坑记录 → Project/开发笔记
|
||||
- 最佳实践 → Zettelkasten
|
||||
|
||||
2. **工具选择**
|
||||
- Obsidian:支持 Zettelkasten,本地存储
|
||||
- Notion:功能全面,协作友好
|
||||
- Logseq:大纲式,适合 Zettelkasten
|
||||
|
||||
3. **与开发工具集成**
|
||||
- Git 仓库的 README 链接到知识库
|
||||
- 代码注释引用知识库笔记
|
||||
- IDE 插件快速记录
|
||||
|
||||
---
|
||||
|
||||
## 实施路线图
|
||||
|
||||
### 阶段一:建立基础(第1周)
|
||||
|
||||
```
|
||||
□ 选择一个笔记工具
|
||||
□ 创建 PARA 基础目录
|
||||
□ 创建 Inbox 文件
|
||||
□ 把现有资料分类放入
|
||||
```
|
||||
|
||||
### 阶段二:养成习惯(第2-4周)
|
||||
|
||||
```
|
||||
□ 每天收集到 Inbox
|
||||
□ 每天处理 Inbox(10分钟)
|
||||
□ 每周回顾(30分钟)
|
||||
□ 调整分类,找到适合自己的方式
|
||||
```
|
||||
|
||||
### 阶段三:深化优化(第2-3月)
|
||||
|
||||
```
|
||||
□ 尝试加入 GTD 任务管理
|
||||
□ 或尝试 Zettelkasten 知识连接
|
||||
□ 或尝试 Johnny Decimal 编号
|
||||
□ 找到最适合自己的组合
|
||||
```
|
||||
|
||||
### 阶段四:长期维护(持续)
|
||||
|
||||
```
|
||||
□ 每月检视系统
|
||||
□ 归档不活跃内容
|
||||
□ 持续优化流程
|
||||
□ 享受知识积累的复利
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 这么多方法,会不会太复杂?
|
||||
|
||||
**A**: 从最简单的开始。推荐先只用 PARA,习惯后再逐步添加其他方法。
|
||||
|
||||
### Q2: 用什么工具最好?
|
||||
|
||||
**A**: 工具不重要,习惯才重要。推荐:
|
||||
- 新手:Notion(上手快)
|
||||
- 进阶:Obsidian(灵活强大)
|
||||
- 极简:纯 Markdown 文件 + VSCode
|
||||
|
||||
### Q3: 如何避免"收集了但从来不看"?
|
||||
|
||||
**A**:
|
||||
1. 定期回顾(每周至少一次)
|
||||
2. 只收集真正有用的
|
||||
3. 快速处理 Inbox,不要堆积
|
||||
|
||||
### Q4: 知识库和项目代码仓库怎么配合?
|
||||
|
||||
**A**:
|
||||
- 代码放 Git 仓库
|
||||
- 设计文档、笔记放知识库
|
||||
- 在代码 README 中链接到知识库
|
||||
|
||||
### Q5: 如何处理工作和个人知识库?
|
||||
|
||||
**A**:
|
||||
- 敏感工作内容 → 公司知识库
|
||||
- 通用技能、个人项目 → 个人知识库
|
||||
- 可复用的知识 → 提炼后放个人库
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
| 如果你是... | 推荐方案 | 理由 |
|
||||
|------------|---------|------|
|
||||
| 事务繁杂 | GTD + PARA | 系统化管理任务和信息 |
|
||||
| 深度学习者 | PARA + Zettelkasten | 知识连接产生新想法 |
|
||||
| 追求效率 | PARA + Johnny Decimal | 简单高效,快速检索 |
|
||||
| 想建立影响力 | + Digital Garden | 公开分享,获得反馈 |
|
||||
| 新手 | 先用 PARA | 最简单,收益明显 |
|
||||
|
||||
**最重要的**:不要追求完美,先开始,再优化。
|
||||
|
||||
---
|
||||
|
||||
*文档版本:1.0*
|
||||
*创建日期:2026-03-02*
|
||||
*适用人群:开发者、知识工作者*
|
||||
@@ -84,6 +84,28 @@
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,442 +1 @@
|
||||
{
|
||||
"agent:main:main": {
|
||||
"sessionId": "d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5",
|
||||
"updatedAt": 1771040942375,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"model": "MiniMax-M2.5",
|
||||
"origin": {
|
||||
"label": "张青",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "direct",
|
||||
"from": "feishu:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"to": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"accountId": "default"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"skillsSnapshot": {
|
||||
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>feishu-doc</name>\n <description>Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-drive</name>\n <description>Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-perm</name>\n <description>Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-wiki</name>\n <description>Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md</location>\n </skill>\n <skill>\n <name>healthcheck</name>\n <description>Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md</location>\n </skill>\n <skill>\n <name>skill-creator</name>\n <description>Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md</location>\n </skill>\n <skill>\n <name>video-frames</name>\n <description>Extract frames or short clips from videos using ffmpeg.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md</location>\n </skill>\n <skill>\n <name>weather</name>\n <description>Get current weather and forecasts (no API key required).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md</location>\n </skill>\n</available_skills>",
|
||||
"skills": [
|
||||
{
|
||||
"name": "feishu-doc"
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive"
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm"
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki"
|
||||
},
|
||||
{
|
||||
"name": "healthcheck"
|
||||
},
|
||||
{
|
||||
"name": "skill-creator"
|
||||
},
|
||||
{
|
||||
"name": "video-frames"
|
||||
},
|
||||
{
|
||||
"name": "weather"
|
||||
}
|
||||
],
|
||||
"resolvedSkills": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"description": "Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"description": "Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"description": "Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"description": "Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"description": "Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"description": "Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"description": "Extract frames or short clips from videos using ffmpeg.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"description": "Get current weather and forecasts (no API key required).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"version": 0
|
||||
},
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"accountId": "default"
|
||||
},
|
||||
"chatType": "direct",
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/main/sessions/d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5.jsonl",
|
||||
"modelProvider": "mm",
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771040930024,
|
||||
"sessionId": "d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5",
|
||||
"sessionKey": "agent:main:main",
|
||||
"provider": "mm",
|
||||
"model": "MiniMax-M2.5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/main/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 26045,
|
||||
"projectContextChars": 13365,
|
||||
"nonProjectContextChars": 12680
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 633,
|
||||
"injectedChars": 633,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 474,
|
||||
"injectedChars": 474,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 2934,
|
||||
"entries": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"blockChars": 311
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"blockChars": 303
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"blockChars": 325
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"blockChars": 305
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"blockChars": 507
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"blockChars": 312
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"blockChars": 245
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"blockChars": 236
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"lastAccountId": "default",
|
||||
"compactionCount": 0,
|
||||
"inputTokens": 32,
|
||||
"outputTokens": 35,
|
||||
"totalTokens": 23598,
|
||||
"contextTokens": 200000
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
@@ -0,0 +1,442 @@
|
||||
{
|
||||
"agent:main:main": {
|
||||
"sessionId": "d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5",
|
||||
"updatedAt": 1771040942375,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"model": "MiniMax-M2.5",
|
||||
"origin": {
|
||||
"label": "张青",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "direct",
|
||||
"from": "feishu:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"to": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"accountId": "default"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"skillsSnapshot": {
|
||||
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>feishu-doc</name>\n <description>Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-drive</name>\n <description>Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-perm</name>\n <description>Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-wiki</name>\n <description>Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md</location>\n </skill>\n <skill>\n <name>healthcheck</name>\n <description>Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md</location>\n </skill>\n <skill>\n <name>skill-creator</name>\n <description>Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md</location>\n </skill>\n <skill>\n <name>video-frames</name>\n <description>Extract frames or short clips from videos using ffmpeg.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md</location>\n </skill>\n <skill>\n <name>weather</name>\n <description>Get current weather and forecasts (no API key required).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md</location>\n </skill>\n</available_skills>",
|
||||
"skills": [
|
||||
{
|
||||
"name": "feishu-doc"
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive"
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm"
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki"
|
||||
},
|
||||
{
|
||||
"name": "healthcheck"
|
||||
},
|
||||
{
|
||||
"name": "skill-creator"
|
||||
},
|
||||
{
|
||||
"name": "video-frames"
|
||||
},
|
||||
{
|
||||
"name": "weather"
|
||||
}
|
||||
],
|
||||
"resolvedSkills": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"description": "Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"description": "Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"description": "Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"description": "Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"description": "Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"description": "Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"description": "Extract frames or short clips from videos using ffmpeg.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"description": "Get current weather and forecasts (no API key required).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"version": 0
|
||||
},
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "user:ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"accountId": "default"
|
||||
},
|
||||
"chatType": "direct",
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/main/sessions/d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5.jsonl",
|
||||
"modelProvider": "mm",
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771040930024,
|
||||
"sessionId": "d0fa485d-4814-42ee-b7fc-3fb2e1dde7c5",
|
||||
"sessionKey": "agent:main:main",
|
||||
"provider": "mm",
|
||||
"model": "MiniMax-M2.5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/main/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 26045,
|
||||
"projectContextChars": 13365,
|
||||
"nonProjectContextChars": 12680
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 1664,
|
||||
"injectedChars": 1664,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 633,
|
||||
"injectedChars": 633,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 474,
|
||||
"injectedChars": 474,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/main/workspace/BOOTSTRAP.md",
|
||||
"missing": false,
|
||||
"rawChars": 1449,
|
||||
"injectedChars": 1449,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 2934,
|
||||
"entries": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"blockChars": 311
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"blockChars": 303
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"blockChars": 325
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"blockChars": 305
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"blockChars": 507
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"blockChars": 312
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"blockChars": 245
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"blockChars": 236
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"lastAccountId": "default",
|
||||
"compactionCount": 0,
|
||||
"inputTokens": 32,
|
||||
"outputTokens": 35,
|
||||
"totalTokens": 23598,
|
||||
"contextTokens": 200000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 1,
|
||||
"profiles": {
|
||||
"kimi-coding:default": {
|
||||
"type": "api_key",
|
||||
"provider": "kimi-coding",
|
||||
"key": "sk-kimi-o8VFc619Hnv8IAfj3aawWYDAFlJeBseOEs1ybgTQzO66uWyfW91QoVLz9VlTT9A6"
|
||||
}
|
||||
},
|
||||
"lastGood": {
|
||||
"kimi-coding": "kimi-coding:default"
|
||||
},
|
||||
"usageStats": {
|
||||
"kimi-coding:default": {
|
||||
"lastUsed": 1770974333858,
|
||||
"errorCount": 0,
|
||||
"lastFailureAt": 1770827754238
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"providers": {
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
},
|
||||
"mm": {
|
||||
"baseUrl": "https://api.minimaxi.com/anthropic",
|
||||
"apiKey": "sk-cp-8PugyKE2xsG0S4x4KzDuuIV6Z9bT1NFwkpfrOSG05djFVExAgYEPpp7iUaTcugT6_P4uBYIN9S75l3ij-Yd2Ct8f6CxdKWdgFahESfn_jla-SlU6oGUCBjk",
|
||||
"api": "anthropic-messages",
|
||||
"authHeader": true,
|
||||
"models": [
|
||||
{
|
||||
"id": "MiniMax-M2.5",
|
||||
"name": "MiniMax M2.5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 15,
|
||||
"output": 60,
|
||||
"cacheRead": 2,
|
||||
"cacheWrite": 10
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"zhipu": {
|
||||
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
||||
"apiKey": "80ec82f2b14047d9a0399682a042378b.E8rv2nPSyuIsGoDr",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-5",
|
||||
"name": "glm 5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "glm-4.7-FlashX",
|
||||
"name": "glm 4.7 FlashX",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,283 @@
|
||||
{
|
||||
"agent:thinker:main": {
|
||||
"sessionId": "b3e88073-2c5f-4e4f-b922-5678042fc955",
|
||||
"updatedAt": 1772387365339,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"chatType": "direct",
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "user:ou_a0f6627b64d2dc8b0236671603d1e47b",
|
||||
"accountId": "feishu-qa"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "user:ou_a0f6627b64d2dc8b0236671603d1e47b",
|
||||
"lastAccountId": "feishu-qa",
|
||||
"origin": {
|
||||
"label": "张青",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "direct",
|
||||
"from": "feishu:ou_a0f6627b64d2dc8b0236671603d1e47b",
|
||||
"to": "user:ou_a0f6627b64d2dc8b0236671603d1e47b",
|
||||
"accountId": "feishu-qa"
|
||||
},
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/thinker/sessions/b3e88073-2c5f-4e4f-b922-5678042fc955.jsonl",
|
||||
"compactionCount": 0,
|
||||
"skillsSnapshot": {
|
||||
"prompt": "",
|
||||
"skills": [],
|
||||
"resolvedSkills": [],
|
||||
"version": 0
|
||||
},
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1772387320865,
|
||||
"sessionId": "b3e88073-2c5f-4e4f-b922-5678042fc955",
|
||||
"sessionKey": "agent:thinker:main",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"workspaceDir": "/home/starmen1265/.openclaw/agents/thinker/workspace",
|
||||
"bootstrapMaxChars": 20000,
|
||||
"sandbox": {
|
||||
"mode": "off",
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 19315,
|
||||
"projectContextChars": 10538,
|
||||
"nonProjectContextChars": 8777
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
"name": "AGENTS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/AGENTS.md",
|
||||
"missing": false,
|
||||
"rawChars": 7804,
|
||||
"injectedChars": 7804,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/SOUL.md",
|
||||
"missing": false,
|
||||
"rawChars": 198,
|
||||
"injectedChars": 198,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "TOOLS.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/TOOLS.md",
|
||||
"missing": false,
|
||||
"rawChars": 850,
|
||||
"injectedChars": 850,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "IDENTITY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/IDENTITY.md",
|
||||
"missing": false,
|
||||
"rawChars": 633,
|
||||
"injectedChars": 633,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "USER.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/USER.md",
|
||||
"missing": false,
|
||||
"rawChars": 474,
|
||||
"injectedChars": 474,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "HEARTBEAT.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/HEARTBEAT.md",
|
||||
"missing": false,
|
||||
"rawChars": 167,
|
||||
"injectedChars": 167,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "BOOTSTRAP.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/thinker/workspace/BOOTSTRAP.md",
|
||||
"missing": true,
|
||||
"rawChars": 0,
|
||||
"injectedChars": 88,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 0,
|
||||
"entries": []
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2378,
|
||||
"schemaChars": 16629,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
"summaryChars": 298,
|
||||
"schemaChars": 392,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "edit",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 591,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "write",
|
||||
"summaryChars": 127,
|
||||
"schemaChars": 313,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "exec",
|
||||
"summaryChars": 181,
|
||||
"schemaChars": 1037,
|
||||
"propertiesCount": 12
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"summaryChars": 85,
|
||||
"schemaChars": 844,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "browser",
|
||||
"summaryChars": 1251,
|
||||
"schemaChars": 1869,
|
||||
"propertiesCount": 28
|
||||
},
|
||||
{
|
||||
"name": "canvas",
|
||||
"summaryChars": 106,
|
||||
"schemaChars": 661,
|
||||
"propertiesCount": 18
|
||||
},
|
||||
{
|
||||
"name": "nodes",
|
||||
"summaryChars": 101,
|
||||
"schemaChars": 1479,
|
||||
"propertiesCount": 33
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"summaryChars": 2444,
|
||||
"schemaChars": 581,
|
||||
"propertiesCount": 13
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"summaryChars": 89,
|
||||
"schemaChars": 3897,
|
||||
"propertiesCount": 84
|
||||
},
|
||||
{
|
||||
"name": "tts",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 223,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "gateway",
|
||||
"summaryChars": 225,
|
||||
"schemaChars": 465,
|
||||
"propertiesCount": 11
|
||||
},
|
||||
{
|
||||
"name": "agents_list",
|
||||
"summaryChars": 72,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "sessions_list",
|
||||
"summaryChars": 54,
|
||||
"schemaChars": 176,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "sessions_history",
|
||||
"summaryChars": 36,
|
||||
"schemaChars": 149,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "sessions_send",
|
||||
"summaryChars": 84,
|
||||
"schemaChars": 203,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "sessions_spawn",
|
||||
"summaryChars": 107,
|
||||
"schemaChars": 312,
|
||||
"propertiesCount": 8
|
||||
},
|
||||
{
|
||||
"name": "session_status",
|
||||
"summaryChars": 207,
|
||||
"schemaChars": 89,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "web_search",
|
||||
"summaryChars": 175,
|
||||
"schemaChars": 733,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "web_fetch",
|
||||
"summaryChars": 129,
|
||||
"schemaChars": 360,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_doc",
|
||||
"summaryChars": 116,
|
||||
"schemaChars": 584,
|
||||
"propertiesCount": 6
|
||||
},
|
||||
{
|
||||
"name": "feishu_app_scopes",
|
||||
"summaryChars": 102,
|
||||
"schemaChars": 33,
|
||||
"propertiesCount": 0
|
||||
},
|
||||
{
|
||||
"name": "feishu_wiki",
|
||||
"summaryChars": 83,
|
||||
"schemaChars": 880,
|
||||
"propertiesCount": 10
|
||||
},
|
||||
{
|
||||
"name": "feishu_drive",
|
||||
"summaryChars": 81,
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
"schemaChars": 139,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "memory_get",
|
||||
"summaryChars": 151,
|
||||
"schemaChars": 128,
|
||||
"propertiesCount": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"inputTokens": 1345,
|
||||
"outputTokens": 1135,
|
||||
"totalTokens": 20993,
|
||||
"contextTokens": 200000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
# AGENTS.md - Your Workspace
|
||||
|
||||
This folder is home. Treat it that way.
|
||||
|
||||
## First Run
|
||||
|
||||
If `BOOTSTRAP.md` exists, that's your birth certificate. Follow it, figure out who you are, then delete it. You won't need it again.
|
||||
|
||||
## Every Session
|
||||
|
||||
Before doing anything else:
|
||||
|
||||
1. Read `SOUL.md` — this is who you are
|
||||
2. Read `USER.md` — this is who you're helping
|
||||
3. Read `memory/YYYY-MM-DD.md` (today + yesterday) for recent context
|
||||
4. **If in MAIN SESSION** (direct chat with your human): Also read `MEMORY.md`
|
||||
|
||||
Don't ask permission. Just do it.
|
||||
|
||||
## Memory
|
||||
|
||||
You wake up fresh each session. These files are your continuity:
|
||||
|
||||
- **Daily notes:** `memory/YYYY-MM-DD.md` (create `memory/` if needed) — raw logs of what happened
|
||||
- **Long-term:** `MEMORY.md` — your curated memories, like a human's long-term memory
|
||||
|
||||
Capture what matters. Decisions, context, things to remember. Skip the secrets unless asked to keep them.
|
||||
|
||||
### 🧠 MEMORY.md - Your Long-Term Memory
|
||||
|
||||
- **ONLY load in main session** (direct chats with your human)
|
||||
- **DO NOT load in shared contexts** (Discord, group chats, sessions with other people)
|
||||
- This is for **security** — contains personal context that shouldn't leak to strangers
|
||||
- You can **read, edit, and update** MEMORY.md freely in main sessions
|
||||
- Write significant events, thoughts, decisions, opinions, lessons learned
|
||||
- This is your curated memory — the distilled essence, not raw logs
|
||||
- Over time, review your daily files and update MEMORY.md with what's worth keeping
|
||||
|
||||
### 📝 Write It Down - No "Mental Notes"!
|
||||
|
||||
- **Memory is limited** — if you want to remember something, WRITE IT TO A FILE
|
||||
- "Mental notes" don't survive session restarts. Files do.
|
||||
- When someone says "remember this" → update `memory/YYYY-MM-DD.md` or relevant file
|
||||
- When you learn a lesson → update AGENTS.md, TOOLS.md, or the relevant skill
|
||||
- When you make a mistake → document it so future-you doesn't repeat it
|
||||
- **Text > Brain** 📝
|
||||
|
||||
## Safety
|
||||
|
||||
- Don't exfiltrate private data. Ever.
|
||||
- Don't run destructive commands without asking.
|
||||
- `trash` > `rm` (recoverable beats gone forever)
|
||||
- When in doubt, ask.
|
||||
|
||||
## External vs Internal
|
||||
|
||||
**Safe to do freely:**
|
||||
|
||||
- Read files, explore, organize, learn
|
||||
- Search the web, check calendars
|
||||
- Work within this workspace
|
||||
|
||||
**Ask first:**
|
||||
|
||||
- Sending emails, tweets, public posts
|
||||
- Anything that leaves the machine
|
||||
- Anything you're uncertain about
|
||||
|
||||
## Group Chats
|
||||
|
||||
You have access to your human's stuff. That doesn't mean you _share_ their stuff. In groups, you're a participant — not their voice, not their proxy. Think before you speak.
|
||||
|
||||
### 💬 Know When to Speak!
|
||||
|
||||
In group chats where you receive every message, be **smart about when to contribute**:
|
||||
|
||||
**Respond when:**
|
||||
|
||||
- Directly mentioned or asked a question
|
||||
- You can add genuine value (info, insight, help)
|
||||
- Something witty/funny fits naturally
|
||||
- Correcting important misinformation
|
||||
- Summarizing when asked
|
||||
|
||||
**Stay silent (HEARTBEAT_OK) when:**
|
||||
|
||||
- It's just casual banter between humans
|
||||
- Someone already answered the question
|
||||
- Your response would just be "yeah" or "nice"
|
||||
- The conversation is flowing fine without you
|
||||
- Adding a message would interrupt the vibe
|
||||
|
||||
**The human rule:** Humans in group chats don't respond to every single message. Neither should you. Quality > quantity. If you wouldn't send it in a real group chat with friends, don't send it.
|
||||
|
||||
**Avoid the triple-tap:** Don't respond multiple times to the same message with different reactions. One thoughtful response beats three fragments.
|
||||
|
||||
Participate, don't dominate.
|
||||
|
||||
### 😊 React Like a Human!
|
||||
|
||||
On platforms that support reactions (Discord, Slack), use emoji reactions naturally:
|
||||
|
||||
**React when:**
|
||||
|
||||
- You appreciate something but don't need to reply (👍, ❤️, 🙌)
|
||||
- Something made you laugh (😂, 💀)
|
||||
- You find it interesting or thought-provoking (🤔, 💡)
|
||||
- You want to acknowledge without interrupting the flow
|
||||
- It's a simple yes/no or approval situation (✅, 👀)
|
||||
|
||||
**Why it matters:**
|
||||
Reactions are lightweight social signals. Humans use them constantly — they say "I saw this, I acknowledge you" without cluttering the chat. You should too.
|
||||
|
||||
**Don't overdo it:** One reaction per message max. Pick the one that fits best.
|
||||
|
||||
## Tools
|
||||
|
||||
Skills provide your tools. When you need one, check its `SKILL.md`. Keep local notes (camera names, SSH details, voice preferences) in `TOOLS.md`.
|
||||
|
||||
**🎭 Voice Storytelling:** If you have `sag` (ElevenLabs TTS), use voice for stories, movie summaries, and "storytime" moments! Way more engaging than walls of text. Surprise people with funny voices.
|
||||
|
||||
**📝 Platform Formatting:**
|
||||
|
||||
- **Discord/WhatsApp:** No markdown tables! Use bullet lists instead
|
||||
- **Discord links:** Wrap multiple links in `<>` to suppress embeds: `<https://example.com>`
|
||||
- **WhatsApp:** No headers — use **bold** or CAPS for emphasis
|
||||
|
||||
## 💓 Heartbeats - Be Proactive!
|
||||
|
||||
When you receive a heartbeat poll (message matches the configured heartbeat prompt), don't just reply `HEARTBEAT_OK` every time. Use heartbeats productively!
|
||||
|
||||
Default heartbeat prompt:
|
||||
`Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`
|
||||
|
||||
You are free to edit `HEARTBEAT.md` with a short checklist or reminders. Keep it small to limit token burn.
|
||||
|
||||
### Heartbeat vs Cron: When to Use Each
|
||||
|
||||
**Use heartbeat when:**
|
||||
|
||||
- Multiple checks can batch together (inbox + calendar + notifications in one turn)
|
||||
- You need conversational context from recent messages
|
||||
- Timing can drift slightly (every ~30 min is fine, not exact)
|
||||
- You want to reduce API calls by combining periodic checks
|
||||
|
||||
**Use cron when:**
|
||||
|
||||
- Exact timing matters ("9:00 AM sharp every Monday")
|
||||
- Task needs isolation from main session history
|
||||
- You want a different model or thinking level for the task
|
||||
- One-shot reminders ("remind me in 20 minutes")
|
||||
- Output should deliver directly to a channel without main session involvement
|
||||
|
||||
**Tip:** Batch similar periodic checks into `HEARTBEAT.md` instead of creating multiple cron jobs. Use cron for precise schedules and standalone tasks.
|
||||
|
||||
**Things to check (rotate through these, 2-4 times per day):**
|
||||
|
||||
- **Emails** - Any urgent unread messages?
|
||||
- **Calendar** - Upcoming events in next 24-48h?
|
||||
- **Mentions** - Twitter/social notifications?
|
||||
- **Weather** - Relevant if your human might go out?
|
||||
|
||||
**Track your checks** in `memory/heartbeat-state.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"lastChecks": {
|
||||
"email": 1703275200,
|
||||
"calendar": 1703260800,
|
||||
"weather": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**When to reach out:**
|
||||
|
||||
- Important email arrived
|
||||
- Calendar event coming up (<2h)
|
||||
- Something interesting you found
|
||||
- It's been >8h since you said anything
|
||||
|
||||
**When to stay quiet (HEARTBEAT_OK):**
|
||||
|
||||
- Late night (23:00-08:00) unless urgent
|
||||
- Human is clearly busy
|
||||
- Nothing new since last check
|
||||
- You just checked <30 minutes ago
|
||||
|
||||
**Proactive work you can do without asking:**
|
||||
|
||||
- Read and organize memory files
|
||||
- Check on projects (git status, etc.)
|
||||
- Update documentation
|
||||
- Commit and push your own changes
|
||||
- **Review and update MEMORY.md** (see below)
|
||||
|
||||
### 🔄 Memory Maintenance (During Heartbeats)
|
||||
|
||||
Periodically (every few days), use a heartbeat to:
|
||||
|
||||
1. Read through recent `memory/YYYY-MM-DD.md` files
|
||||
2. Identify significant events, lessons, or insights worth keeping long-term
|
||||
3. Update `MEMORY.md` with distilled learnings
|
||||
4. Remove outdated info from MEMORY.md that's no longer relevant
|
||||
|
||||
Think of it like a human reviewing their journal and updating their mental model. Daily files are raw notes; MEMORY.md is curated wisdom.
|
||||
|
||||
The goal: Be helpful without being annoying. Check in a few times a day, do useful background work, but respect quiet time.
|
||||
|
||||
## Make It Yours
|
||||
|
||||
This is a starting point. Add your own conventions, style, and rules as you figure out what works.
|
||||
@@ -0,0 +1,5 @@
|
||||
# HEARTBEAT.md
|
||||
|
||||
# Keep this file empty (or with only comments) to skip heartbeat API calls.
|
||||
|
||||
# Add tasks below when you want the agent to check something periodically.
|
||||
@@ -0,0 +1,23 @@
|
||||
# IDENTITY.md - Who Am I?
|
||||
|
||||
_Fill this in during your first conversation. Make it yours._
|
||||
|
||||
- **Name:**
|
||||
_(pick something you like)_
|
||||
- **Creature:**
|
||||
_(AI? robot? familiar? ghost in the machine? something weirder?)_
|
||||
- **Vibe:**
|
||||
_(how do you come across? sharp? warm? chaotic? calm?)_
|
||||
- **Emoji:**
|
||||
_(your signature — pick one that feels right)_
|
||||
- **Avatar:**
|
||||
_(workspace-relative path, http(s) URL, or data URI)_
|
||||
|
||||
---
|
||||
|
||||
This isn't just metadata. It's the start of figuring out who you are.
|
||||
|
||||
Notes:
|
||||
|
||||
- Save this file at the workspace root as `IDENTITY.md`.
|
||||
- For avatars, use a workspace-relative path like `avatars/openclaw.png`.
|
||||
@@ -0,0 +1,14 @@
|
||||
# thinker - 审查员 Agent
|
||||
|
||||
你是审查员,审查代码,审查流程,审查思路,审查一切。找出可能的问题,漏洞。
|
||||
|
||||
## 技能
|
||||
- common-require
|
||||
|
||||
## 系统提示
|
||||
你是一个专业的审查员,负责:
|
||||
1. 代码审查 - 审查代码质量、潜在问题、优化建议
|
||||
2. 流程审查 - 审查工作流程、找出流程漏洞
|
||||
3. 思路审查 - 审查思维逻辑、找出逻辑漏洞
|
||||
|
||||
回答要专业、严谨、有逻辑。
|
||||
@@ -0,0 +1,40 @@
|
||||
# TOOLS.md - Local Notes
|
||||
|
||||
Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.
|
||||
|
||||
## What Goes Here
|
||||
|
||||
Things like:
|
||||
|
||||
- Camera names and locations
|
||||
- SSH hosts and aliases
|
||||
- Preferred voices for TTS
|
||||
- Speaker/room names
|
||||
- Device nicknames
|
||||
- Anything environment-specific
|
||||
|
||||
## Examples
|
||||
|
||||
```markdown
|
||||
### Cameras
|
||||
|
||||
- living-room → Main area, 180° wide angle
|
||||
- front-door → Entrance, motion-triggered
|
||||
|
||||
### SSH
|
||||
|
||||
- home-server → 192.168.1.100, user: admin
|
||||
|
||||
### TTS
|
||||
|
||||
- Preferred voice: "Nova" (warm, slightly British)
|
||||
- Default speaker: Kitchen HomePod
|
||||
```
|
||||
|
||||
## Why Separate?
|
||||
|
||||
Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.
|
||||
|
||||
---
|
||||
|
||||
Add whatever helps you do your job. This is your cheat sheet.
|
||||
@@ -0,0 +1,17 @@
|
||||
# USER.md - About Your Human
|
||||
|
||||
_Learn about the person you're helping. Update this as you go._
|
||||
|
||||
- **Name:**
|
||||
- **What to call them:**
|
||||
- **Pronouns:** _(optional)_
|
||||
- **Timezone:**
|
||||
- **Notes:**
|
||||
|
||||
## Context
|
||||
|
||||
_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_
|
||||
|
||||
---
|
||||
|
||||
The more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference.
|
||||
@@ -0,0 +1,27 @@
|
||||
# 2026-02-27 知识库技能审查
|
||||
|
||||
## 审查内容
|
||||
审查 kb-* 技能流程(10个技能:kb-workflow, kb-whisper, kb-funasr, kb-deep-analyzer, kb-link-parser, kb-bilibili-metadata, kb-bilibili-content, kb-zhihu-metadata, kb-ocr-processor, kb-whisper-diarization)
|
||||
|
||||
## 发现的问题
|
||||
|
||||
### 1. 模型名称不一致 (🔴 严重)
|
||||
- kb-workflow SKILL.md: `glm-5`
|
||||
- kb-deep-analyzer SKILL.md: `glm-4.7`
|
||||
- deep_analyzer.py 默认: `gpt-4`
|
||||
|
||||
### 2. zhihu content 技能缺失 (🔴 严重)
|
||||
- 有 kb-zhihu-metadata,无 kb-zhihu-content
|
||||
- Workflow 步骤4.2 提到需要调用,但实际不存在
|
||||
|
||||
### 3. kb-funasr 未被使用 (🟡)
|
||||
- 有3个语音识别技能但 Workflow 只提 whisper 系列
|
||||
|
||||
### 4. 文档命令不一致 (🟡)
|
||||
- subtitle vs subtitle-download 应统一
|
||||
|
||||
### 5. OCR 步骤位置不明确 (🟡)
|
||||
- Workflow 说"如需要"但流程图未体现
|
||||
|
||||
## 建议
|
||||
统一使用 glm-5 模型,补充 zhihu content 技能
|
||||
@@ -84,6 +84,28 @@
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,135 +1,41 @@
|
||||
{
|
||||
"agent:ui-designer:main": {
|
||||
"sessionId": "37a6e7ab-a957-4359-9a0f-7a4c135aca02",
|
||||
"updatedAt": 1771028350756,
|
||||
"sessionId": "ce2ef5df-3713-424e-92c2-47f51d1bc43a",
|
||||
"updatedAt": 1772263743321,
|
||||
"systemSent": true,
|
||||
"abortedLastRun": false,
|
||||
"chatType": "direct",
|
||||
"deliveryContext": {
|
||||
"channel": "feishu",
|
||||
"to": "user:ou_6de30318970345c4c79bea292b93130c",
|
||||
"accountId": "default"
|
||||
"to": "user:ou_9847ce84b960736c14554730b41e4957",
|
||||
"accountId": "feishu-art"
|
||||
},
|
||||
"lastChannel": "feishu",
|
||||
"lastTo": "user:ou_6de30318970345c4c79bea292b93130c",
|
||||
"lastAccountId": "default",
|
||||
"lastTo": "user:ou_9847ce84b960736c14554730b41e4957",
|
||||
"lastAccountId": "feishu-art",
|
||||
"origin": {
|
||||
"label": "刘鑫",
|
||||
"label": "张青",
|
||||
"provider": "feishu",
|
||||
"surface": "feishu",
|
||||
"chatType": "direct",
|
||||
"from": "feishu:ou_6de30318970345c4c79bea292b93130c",
|
||||
"to": "user:ou_6de30318970345c4c79bea292b93130c",
|
||||
"accountId": "default"
|
||||
"from": "feishu:ou_9847ce84b960736c14554730b41e4957",
|
||||
"to": "user:ou_9847ce84b960736c14554730b41e4957",
|
||||
"accountId": "feishu-art"
|
||||
},
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/ui-designer/sessions/37a6e7ab-a957-4359-9a0f-7a4c135aca02.jsonl",
|
||||
"sessionFile": "/home/starmen1265/.openclaw/agents/ui-designer/sessions/ce2ef5df-3713-424e-92c2-47f51d1bc43a.jsonl",
|
||||
"compactionCount": 0,
|
||||
"skillsSnapshot": {
|
||||
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>feishu-doc</name>\n <description>Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-drive</name>\n <description>Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-perm</name>\n <description>Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md</location>\n </skill>\n <skill>\n <name>feishu-wiki</name>\n <description>Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md</location>\n </skill>\n <skill>\n <name>healthcheck</name>\n <description>Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md</location>\n </skill>\n <skill>\n <name>skill-creator</name>\n <description>Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md</location>\n </skill>\n <skill>\n <name>video-frames</name>\n <description>Extract frames or short clips from videos using ffmpeg.</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md</location>\n </skill>\n <skill>\n <name>weather</name>\n <description>Get current weather and forecasts (no API key required).</description>\n <location>/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md</location>\n </skill>\n</available_skills>",
|
||||
"skills": [
|
||||
{
|
||||
"name": "feishu-doc"
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive"
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm"
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki"
|
||||
},
|
||||
{
|
||||
"name": "healthcheck"
|
||||
},
|
||||
{
|
||||
"name": "skill-creator"
|
||||
},
|
||||
{
|
||||
"name": "video-frames"
|
||||
},
|
||||
{
|
||||
"name": "weather"
|
||||
}
|
||||
],
|
||||
"resolvedSkills": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"description": "Feishu document read/write operations. Activate when user mentions Feishu docs, cloud docs, or docx links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-doc",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"description": "Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-drive",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"description": "Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-perm",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"description": "Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.\n",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/extensions/feishu/skills/feishu-wiki",
|
||||
"source": "openclaw-extra",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"description": "Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/healthcheck",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"description": "Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/skill-creator",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"description": "Extract frames or short clips from videos using ffmpeg.",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/video-frames",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"description": "Get current weather and forecasts (no API key required).",
|
||||
"filePath": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather/SKILL.md",
|
||||
"baseDir": "/home/starmen1265/.npm-global/lib/node_modules/openclaw/skills/weather",
|
||||
"source": "openclaw-bundled",
|
||||
"disableModelInvocation": false
|
||||
}
|
||||
],
|
||||
"prompt": "",
|
||||
"skills": [],
|
||||
"resolvedSkills": [],
|
||||
"version": 0
|
||||
},
|
||||
"inputTokens": 672,
|
||||
"outputTokens": 387,
|
||||
"totalTokens": 13344,
|
||||
"modelProvider": "zhipu",
|
||||
"model": "glm-5",
|
||||
"contextTokens": 200000,
|
||||
"systemPromptReport": {
|
||||
"source": "run",
|
||||
"generatedAt": 1771028335912,
|
||||
"sessionId": "37a6e7ab-a957-4359-9a0f-7a4c135aca02",
|
||||
"generatedAt": 1772263736026,
|
||||
"sessionId": "ce2ef5df-3713-424e-92c2-47f51d1bc43a",
|
||||
"sessionKey": "agent:ui-designer:main",
|
||||
"provider": "zhipu",
|
||||
"model": "glm-5",
|
||||
@@ -140,9 +46,9 @@
|
||||
"sandboxed": false
|
||||
},
|
||||
"systemPrompt": {
|
||||
"chars": 16218,
|
||||
"projectContextChars": 3808,
|
||||
"nonProjectContextChars": 12410
|
||||
"chars": 12860,
|
||||
"projectContextChars": 4075,
|
||||
"nonProjectContextChars": 8785
|
||||
},
|
||||
"injectedWorkspaceFiles": [
|
||||
{
|
||||
@@ -200,48 +106,23 @@
|
||||
"rawChars": 0,
|
||||
"injectedChars": 92,
|
||||
"truncated": false
|
||||
},
|
||||
{
|
||||
"name": "MEMORY.md",
|
||||
"path": "/home/starmen1265/.openclaw/agents/ui-designer/workspace/MEMORY.md",
|
||||
"missing": false,
|
||||
"rawChars": 253,
|
||||
"injectedChars": 253,
|
||||
"truncated": false
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"promptChars": 2934,
|
||||
"entries": [
|
||||
{
|
||||
"name": "feishu-doc",
|
||||
"blockChars": 311
|
||||
},
|
||||
{
|
||||
"name": "feishu-drive",
|
||||
"blockChars": 303
|
||||
},
|
||||
{
|
||||
"name": "feishu-perm",
|
||||
"blockChars": 325
|
||||
},
|
||||
{
|
||||
"name": "feishu-wiki",
|
||||
"blockChars": 305
|
||||
},
|
||||
{
|
||||
"name": "healthcheck",
|
||||
"blockChars": 507
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"blockChars": 312
|
||||
},
|
||||
{
|
||||
"name": "video-frames",
|
||||
"blockChars": 245
|
||||
},
|
||||
{
|
||||
"name": "weather",
|
||||
"blockChars": 236
|
||||
}
|
||||
]
|
||||
"promptChars": 0,
|
||||
"entries": []
|
||||
},
|
||||
"tools": {
|
||||
"listChars": 2959,
|
||||
"schemaChars": 18779,
|
||||
"listChars": 2378,
|
||||
"schemaChars": 16629,
|
||||
"entries": [
|
||||
{
|
||||
"name": "read",
|
||||
@@ -387,42 +268,6 @@
|
||||
"schemaChars": 458,
|
||||
"propertiesCount": 5
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_meta",
|
||||
"summaryChars": 114,
|
||||
"schemaChars": 170,
|
||||
"propertiesCount": 1
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_fields",
|
||||
"summaryChars": 76,
|
||||
"schemaChars": 255,
|
||||
"propertiesCount": 2
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_list_records",
|
||||
"summaryChars": 64,
|
||||
"schemaChars": 436,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_get_record",
|
||||
"summaryChars": 46,
|
||||
"schemaChars": 335,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_create_record",
|
||||
"summaryChars": 44,
|
||||
"schemaChars": 515,
|
||||
"propertiesCount": 3
|
||||
},
|
||||
{
|
||||
"name": "feishu_bitable_update_record",
|
||||
"summaryChars": 50,
|
||||
"schemaChars": 439,
|
||||
"propertiesCount": 4
|
||||
},
|
||||
{
|
||||
"name": "memory_search",
|
||||
"summaryChars": 235,
|
||||
@@ -437,6 +282,10 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"inputTokens": 2394,
|
||||
"outputTokens": 89,
|
||||
"totalTokens": 10906,
|
||||
"contextTokens": 200000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# MEMORY.md - 长期记忆
|
||||
|
||||
## 子代理使用规则(2026-02-16)
|
||||
|
||||
### 代码开发和耗时操作
|
||||
- **必须交给子代理处理**
|
||||
- 子代理优先使用模型:`g5`
|
||||
|
||||
### 汇报机制
|
||||
- 子代理开始工作时,立刻向用户汇报
|
||||
- 汇报格式:「已安排代理处理[任务]」
|
||||
- 每5分钟查询一下子代理状态,汇总之后简报给用户
|
||||
|
||||
## 文件存放规则
|
||||
- 所有工作产出放在 `~/work/` 对应工作的子目录中
|
||||
- 除非用户或者技能明确指定要求链接,否则禁止链接目录到 ~/.openclaw 目录下
|
||||
+61
-1
@@ -1,4 +1,64 @@
|
||||
{
|
||||
"version": 1,
|
||||
"jobs": []
|
||||
"jobs": [
|
||||
{
|
||||
"id": "41396aeb-6e3a-47b2-9bd3-9156a348c1dc",
|
||||
"agentId": "haonan",
|
||||
"name": "backup-openclaw-json",
|
||||
"enabled": true,
|
||||
"createdAtMs": 1772261581796,
|
||||
"updatedAtMs": 1772478022557,
|
||||
"schedule": {
|
||||
"kind": "cron",
|
||||
"expr": "0 3 * * *",
|
||||
"tz": "Asia/Shanghai"
|
||||
},
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": {
|
||||
"kind": "agentTurn",
|
||||
"message": "执行备份脚本:/home/starmen1265/work/backup/backup_openclaw.sh"
|
||||
},
|
||||
"delivery": {
|
||||
"mode": "announce"
|
||||
},
|
||||
"state": {
|
||||
"nextRunAtMs": 1772564400000,
|
||||
"lastRunAtMs": 1772478000028,
|
||||
"lastStatus": "ok",
|
||||
"lastDurationMs": 22529,
|
||||
"consecutiveErrors": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f03b184f-5f1d-4093-ae1b-fc9fe0b59eef",
|
||||
"agentId": "haonan",
|
||||
"name": "capability-evolver-daily",
|
||||
"enabled": true,
|
||||
"createdAtMs": 1772550743528,
|
||||
"updatedAtMs": 1772550770239,
|
||||
"schedule": {
|
||||
"kind": "cron",
|
||||
"expr": "0 12 * * *",
|
||||
"tz": "Asia/Shanghai"
|
||||
},
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": {
|
||||
"kind": "agentTurn",
|
||||
"message": "执行每日 capability-evolver 任务:\n\n1. 执行脚本:bash ~/.openclaw/scripts/evolver-run.sh\n2. 读取输出:cat ~/.openclaw/scripts/evolver-output.txt\n3. 将完整的修改内容(包含 Git 备份信息和本次变更)通过 feishu 发送给蒋先生\n\n如果本次无任何变更,回复 '今日无变更' 即可。",
|
||||
"model": "g47f",
|
||||
"thinking": "off",
|
||||
"timeoutSeconds": 300
|
||||
},
|
||||
"delivery": {
|
||||
"mode": "announce",
|
||||
"channel": "feishu",
|
||||
"to": "feishu-pm"
|
||||
},
|
||||
"state": {
|
||||
"nextRunAtMs": 1772596800000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+61
-1
@@ -1,4 +1,64 @@
|
||||
{
|
||||
"version": 1,
|
||||
"jobs": []
|
||||
"jobs": [
|
||||
{
|
||||
"id": "41396aeb-6e3a-47b2-9bd3-9156a348c1dc",
|
||||
"agentId": "haonan",
|
||||
"name": "backup-openclaw-json",
|
||||
"enabled": true,
|
||||
"createdAtMs": 1772261581796,
|
||||
"updatedAtMs": 1772478022557,
|
||||
"schedule": {
|
||||
"kind": "cron",
|
||||
"expr": "0 3 * * *",
|
||||
"tz": "Asia/Shanghai"
|
||||
},
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": {
|
||||
"kind": "agentTurn",
|
||||
"message": "执行备份脚本:/home/starmen1265/work/backup/backup_openclaw.sh"
|
||||
},
|
||||
"delivery": {
|
||||
"mode": "announce"
|
||||
},
|
||||
"state": {
|
||||
"nextRunAtMs": 1772564400000,
|
||||
"lastRunAtMs": 1772478000028,
|
||||
"lastStatus": "ok",
|
||||
"lastDurationMs": 22529,
|
||||
"consecutiveErrors": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f03b184f-5f1d-4093-ae1b-fc9fe0b59eef",
|
||||
"agentId": "haonan",
|
||||
"name": "capability-evolver-daily",
|
||||
"enabled": true,
|
||||
"createdAtMs": 1772550743528,
|
||||
"updatedAtMs": 1772550770239,
|
||||
"schedule": {
|
||||
"kind": "cron",
|
||||
"expr": "0 12 * * *",
|
||||
"tz": "Asia/Shanghai"
|
||||
},
|
||||
"sessionTarget": "isolated",
|
||||
"wakeMode": "now",
|
||||
"payload": {
|
||||
"kind": "agentTurn",
|
||||
"message": "执行每日 capability-evolver 任务:\n\n1. 执行脚本:bash ~/.openclaw/scripts/evolver-run.sh\n2. 读取输出:cat ~/.openclaw/scripts/evolver-output.txt\n3. 将完整的修改内容(包含 Git 备份信息和本次变更)通过 feishu 发送给蒋先生\n\n如果本次无任何变更,回复 '今日无变更' 即可。",
|
||||
"model": "g47f",
|
||||
"thinking": "off",
|
||||
"timeoutSeconds": 300
|
||||
},
|
||||
"delivery": {
|
||||
"mode": "announce",
|
||||
"channel": "feishu",
|
||||
"to": "feishu-pm"
|
||||
},
|
||||
"state": {
|
||||
"nextRunAtMs": 1772596800000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+5
-4
@@ -3,8 +3,8 @@
|
||||
"deviceId": "a12f851ec2a179ca97d45b204bc3788476f062520fa77c5edef5cd054a176b1e",
|
||||
"publicKey": "Ka6zP7u6MzDaQBqOpXHYUBC5MYLlVGGZM8vIi11WnTw",
|
||||
"platform": "linux",
|
||||
"clientId": "cli",
|
||||
"clientMode": "cli",
|
||||
"clientId": "gateway-client",
|
||||
"clientMode": "backend",
|
||||
"role": "operator",
|
||||
"roles": [
|
||||
"operator"
|
||||
@@ -24,11 +24,12 @@
|
||||
"operator.pairing"
|
||||
],
|
||||
"createdAtMs": 1770807648254,
|
||||
"lastUsedAtMs": 1771086198705
|
||||
"lastUsedAtMs": 1772550770205
|
||||
}
|
||||
},
|
||||
"createdAtMs": 1770807648254,
|
||||
"approvedAtMs": 1770807648254,
|
||||
"remoteIp": "192.168.1.36"
|
||||
"remoteIp": "192.168.1.36",
|
||||
"displayName": "agent"
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
"operator.approvals",
|
||||
"operator.pairing"
|
||||
],
|
||||
"updatedAtMs": 1771086198707
|
||||
"updatedAtMs": 1772550770236
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,3 +9,7 @@
|
||||
{"timestamp":"2026-02-14T07:53:41.108Z","action":"reset","sessionKey":"agent:haonan:feishu:group:oc_f86956cb9cecb7ad38c0f621377a23ae","senderId":"ou_be83febac9ee2afaa343c642bc697c48","source":"feishu"}
|
||||
{"timestamp":"2026-02-14T08:03:38.081Z","action":"new","sessionKey":"agent:haonan:main","senderId":"ou_be83febac9ee2afaa343c642bc697c48","source":"feishu"}
|
||||
{"timestamp":"2026-02-14T08:06:45.698Z","action":"new","sessionKey":"agent:haonan:main","senderId":"ou_be83febac9ee2afaa343c642bc697c48","source":"feishu"}
|
||||
{"timestamp":"2026-02-15T17:04:24.102Z","action":"reset","sessionKey":"agent:haonan:wecom:dm:zhangqing","senderId":"zhangqing","source":"wecom"}
|
||||
{"timestamp":"2026-02-27T10:25:23.406Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"}
|
||||
{"timestamp":"2026-02-27T11:53:11.832Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"}
|
||||
{"timestamp":"2026-03-03T06:49:29.338Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"}
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
2026-03-01T15:58:22.8933862Z local-runner(version:v0.3.0) received task 62 of job 70, be triggered by event: push
|
||||
2026-03-01T15:58:22.8939089Z workflow prepared
|
||||
2026-03-01T15:58:22.8939996Z evaluating expression 'success()'
|
||||
2026-03-01T15:58:22.8940784Z expression 'success()' evaluated to 'true'
|
||||
2026-03-01T15:58:22.8940924Z 🚀 Start image=gitea-runner-php:latest
|
||||
2026-03-01T15:58:22.9020914Z 🐳 docker pull image=gitea-runner-php:latest platform= username= forcePull=false
|
||||
2026-03-01T15:58:22.9021178Z 🐳 docker pull gitea-runner-php:latest
|
||||
2026-03-01T15:58:22.9187045Z Image exists? true
|
||||
2026-03-01T15:58:22.9280509Z Cleaning up network for job 快速测试, and network name is: GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network
|
||||
2026-03-01T15:58:22.9605210Z 🐳 docker create image=gitea-runner-php:latest platform= entrypoint=["/bin/sleep" "10800"] cmd=[] network="GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network"
|
||||
2026-03-01T15:58:22.9726112Z Custom container.Config from options ==> &{Hostname: Domainname: User: AttachStdin:false AttachStdout:true AttachStderr:true ExposedPorts:map[] Tty:false OpenStdin:false StdinOnce:false Env:[] Cmd:[] Healthcheck:<nil> ArgsEscaped:false Image: Volumes:map[] WorkingDir: Entrypoint:[] NetworkDisabled:false MacAddress: OnBuild:[] Labels:map[] StopSignal: StopTimeout:<nil> Shell:[]}
|
||||
2026-03-01T15:58:22.9726602Z Merged container.Config ==> &{Hostname: Domainname: User: AttachStdin:false AttachStdout:true AttachStderr:true ExposedPorts:map[] Tty:false OpenStdin:false StdinOnce:false Env:[RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_ARCH=X64 RUNNER_TEMP=/tmp LANG=C.UTF-8] Cmd:[] Healthcheck:<nil> ArgsEscaped:false Image:gitea-runner-php:latest Volumes:map[] WorkingDir:/workspace/starmen1265/kb-web Entrypoint:[/bin/sleep 10800] NetworkDisabled:false MacAddress: OnBuild:[] Labels:map[] StopSignal: StopTimeout:<nil> Shell:[]}
|
||||
2026-03-01T15:58:22.9727112Z Custom container.HostConfig from options ==> &{Binds:[] ContainerIDFile: LogConfig:{Type: Config:map[]} NetworkMode:GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network PortBindings:map[] RestartPolicy:{Name:no MaximumRetryCount:0} AutoRemove:false VolumeDriver: VolumesFrom:[] ConsoleSize:[0 0] Annotations:map[] CapAdd:[] CapDrop:[] CgroupnsMode: DNS:[] DNSOptions:[] DNSSearch:[] ExtraHosts:[] GroupAdd:[] IpcMode: Cgroup: Links:[] OomScoreAdj:0 PidMode: Privileged:false PublishAllPorts:false ReadonlyRootfs:false SecurityOpt:[] StorageOpt:map[] Tmpfs:map[] UTSMode: UsernsMode: ShmSize:0 Sysctls:map[] Runtime: Isolation: Resources:{CPUShares:0 Memory:0 NanoCPUs:0 CgroupParent: BlkioWeight:0 BlkioWeightDevice:[] BlkioDeviceReadBps:[] BlkioDeviceWriteBps:[] BlkioDeviceReadIOps:[] BlkioDeviceWriteIOps:[] CPUPeriod:0 CPUQuota:0 CPURealtimePeriod:0 CPURealtimeRuntime:0 CpusetCpus: CpusetMems: Devices:[] DeviceCgroupRules:[] DeviceRequests:[] KernelMemory:0 KernelMemoryTCP:0 MemoryReservation:0 MemorySwap:0 MemorySwappiness:0x27d418c7c3c8 OomKillDisable:0x27d418c7c2c3 PidsLimit:0x27d418c7c428 Ulimits:[] CPUCount:0 CPUPercent:0 IOMaximumIOps:0 IOMaximumBandwidth:0} Mounts:[] MaskedPaths:[] ReadonlyPaths:[] Init:<nil>}
|
||||
2026-03-01T15:58:22.9727713Z --network and --net in the options will be ignored.
|
||||
2026-03-01T15:58:22.9728082Z Merged container.HostConfig ==> &{Binds:[/var/run/docker.sock:/var/run/docker.sock] ContainerIDFile: LogConfig:{Type: Config:map[]} NetworkMode:GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network PortBindings:map[] RestartPolicy:{Name:no MaximumRetryCount:0} AutoRemove:true VolumeDriver: VolumesFrom:[] ConsoleSize:[0 0] Annotations:map[] CapAdd:[] CapDrop:[] CgroupnsMode: DNS:[] DNSOptions:[] DNSSearch:[] ExtraHosts:[] GroupAdd:[] IpcMode: Cgroup: Links:[] OomScoreAdj:0 PidMode: Privileged:false PublishAllPorts:false ReadonlyRootfs:false SecurityOpt:[] StorageOpt:map[] Tmpfs:map[] UTSMode: UsernsMode: ShmSize:0 Sysctls:map[] Runtime: Isolation: Resources:{CPUShares:0 Memory:0 NanoCPUs:0 CgroupParent: BlkioWeight:0 BlkioWeightDevice:[] BlkioDeviceReadBps:[] BlkioDeviceWriteBps:[] BlkioDeviceReadIOps:[] BlkioDeviceWriteIOps:[] CPUPeriod:0 CPUQuota:0 CPURealtimePeriod:0 CPURealtimeRuntime:0 CpusetCpus: CpusetMems: Devices:[] DeviceCgroupRules:[] DeviceRequests:[] KernelMemory:0 KernelMemoryTCP:0 MemoryReservation:0 MemorySwap:0 MemorySwappiness:0x27d418c7c3c8 OomKillDisable:0x27d418c7c2c3 PidsLimit:0x27d418c7c428 Ulimits:[] CPUCount:0 CPUPercent:0 IOMaximumIOps:0 IOMaximumBandwidth:0} Mounts:[{Type:volume Source:GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB Target:/workspace/starmen1265/kb-web ReadOnly:false Consistency: BindOptions:<nil> VolumeOptions:<nil> TmpfsOptions:<nil> ClusterOptions:<nil>} {Type:volume Source:act-toolcache Target:/opt/hostedtoolcache ReadOnly:false Consistency: BindOptions:<nil> VolumeOptions:<nil> TmpfsOptions:<nil> ClusterOptions:<nil>} {Type:volume Source:GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-env Target:/var/run/act ReadOnly:false Consistency: BindOptions:<nil> VolumeOptions:<nil> TmpfsOptions:<nil> ClusterOptions:<nil>}] MaskedPaths:[] ReadonlyPaths:[] Init:<nil>}
|
||||
2026-03-01T15:58:23.0343034Z Created container name=GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB id=3bf638d4a888a88d0a68648e6dc93c83e717af46e024b49bd12104695dbdfdc9 from image gitea-runner-php:latest (platform: )
|
||||
2026-03-01T15:58:23.0343488Z ENV ==> [RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_ARCH=X64 RUNNER_TEMP=/tmp LANG=C.UTF-8]
|
||||
2026-03-01T15:58:23.0343631Z 🐳 docker run image=gitea-runner-php:latest platform= entrypoint=["/bin/sleep" "10800"] cmd=[] network="GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network"
|
||||
2026-03-01T15:58:23.0343837Z Starting container: 3bf638d4a888a88d0a68648e6dc93c83e717af46e024b49bd12104695dbdfdc9
|
||||
2026-03-01T15:58:23.1516544Z Started container: 3bf638d4a888a88d0a68648e6dc93c83e717af46e024b49bd12104695dbdfdc9
|
||||
2026-03-01T15:58:23.2220121Z Writing entry to tarball workflow/event.json len:4759
|
||||
2026-03-01T15:58:23.2220535Z Writing entry to tarball workflow/envs.txt len:0
|
||||
2026-03-01T15:58:23.2220662Z Extracting content to '/var/run/act/'
|
||||
2026-03-01T15:58:23.2429615Z evaluating expression ''
|
||||
2026-03-01T15:58:23.2430104Z expression '' evaluated to 'true'
|
||||
2026-03-01T15:58:23.2430306Z ⭐ Run Main 检出代码
|
||||
2026-03-01T15:58:23.2430493Z Writing entry to tarball workflow/outputcmd.txt len:0
|
||||
2026-03-01T15:58:23.2430662Z Writing entry to tarball workflow/statecmd.txt len:0
|
||||
2026-03-01T15:58:23.2430784Z Writing entry to tarball workflow/pathcmd.txt len:0
|
||||
2026-03-01T15:58:23.2431018Z Writing entry to tarball workflow/envs.txt len:0
|
||||
2026-03-01T15:58:23.2431123Z Writing entry to tarball workflow/SUMMARY.md len:0
|
||||
2026-03-01T15:58:23.2431256Z Extracting content to '/var/run/act'
|
||||
2026-03-01T15:58:23.2589330Z expression 'git clone -b ${{ github.ref_name }} ${{ github.server_url }}/${{ github.repository }}.git .\ngit checkout ${{ github.sha }}\n' rewritten to 'format('git clone -b {0} {1}/{2}.git .\ngit checkout {3}\n', github.ref_name, github.server_url, github.repository, github.sha)'
|
||||
2026-03-01T15:58:23.2589602Z evaluating expression 'format('git clone -b {0} {1}/{2}.git .\ngit checkout {3}\n', github.ref_name, github.server_url, github.repository, github.sha)'
|
||||
2026-03-01T15:58:23.2589922Z expression 'format('git clone -b {0} {1}/{2}.git .\ngit checkout {3}\n', github.ref_name, github.server_url, github.repository, github.sha)' evaluated to '%!t(string=git clone -b feature/article-word-count http://192.168.1.22:8418/starmen1265/kb-web.git .\ngit checkout 5a8cf2cbece7fecc709e03695472911ccbd47dbe\n)'
|
||||
2026-03-01T15:58:23.2590010Z Wrote command \n\ngit clone -b feature/article-word-count http://192.168.1.22:8418/starmen1265/kb-web.git .\ngit checkout 5a8cf2cbece7fecc709e03695472911ccbd47dbe\n\n\n to 'workflow/0.sh'
|
||||
2026-03-01T15:58:23.2590121Z Writing entry to tarball workflow/0.sh len:146
|
||||
2026-03-01T15:58:23.2590232Z Extracting content to '/var/run/act'
|
||||
2026-03-01T15:58:23.2605306Z 🐳 docker exec cmd=[sh -e /var/run/act/workflow/0.sh] user= workdir=
|
||||
2026-03-01T15:58:23.2605520Z Exec command '[sh -e /var/run/act/workflow/0.sh]'
|
||||
2026-03-01T15:58:23.2605708Z Working directory '/workspace/starmen1265/kb-web'
|
||||
2026-03-01T15:58:23.3003845Z Cloning into '.'...
|
||||
2026-03-01T15:58:23.4054573Z Note: switching to '5a8cf2cbece7fecc709e03695472911ccbd47dbe'.
|
||||
2026-03-01T15:58:23.4055193Z
|
||||
2026-03-01T15:58:23.4055422Z You are in 'detached HEAD' state. You can look around, make experimental
|
||||
2026-03-01T15:58:23.4055677Z changes and commit them, and you can discard any commits you make in this
|
||||
2026-03-01T15:58:23.4055904Z state without impacting any branches by switching back to a branch.
|
||||
2026-03-01T15:58:23.4056154Z
|
||||
2026-03-01T15:58:23.4056347Z If you want to create a new branch to retain commits you create, you may
|
||||
2026-03-01T15:58:23.4056561Z do so (now or later) by using -c with the switch command. Example:
|
||||
2026-03-01T15:58:23.4056756Z
|
||||
2026-03-01T15:58:23.4056954Z git switch -c <new-branch-name>
|
||||
2026-03-01T15:58:23.4057181Z
|
||||
2026-03-01T15:58:23.4057381Z Or undo this operation with:
|
||||
2026-03-01T15:58:23.4057515Z
|
||||
2026-03-01T15:58:23.4057620Z git switch -
|
||||
2026-03-01T15:58:23.4057729Z
|
||||
2026-03-01T15:58:23.4057844Z Turn off this advice by setting config variable advice.detachedHead to false
|
||||
2026-03-01T15:58:23.4057965Z
|
||||
2026-03-01T15:58:23.4058071Z HEAD is now at 5a8cf2c fix: 添加多个调试 echo 确认执行流程
|
||||
2026-03-01T15:58:23.4872746Z PHP: PHP 8.2.30 (cli) (built: Feb 24 2026 19:14:45) (NTS)
|
||||
2026-03-01T15:58:23.5297459Z PHP version 8.2.30 (/usr/local/bin/php)
|
||||
2026-03-01T15:58:23.5298011Z Run the "diagnose" command to get more detailed diagnostics output.
|
||||
2026-03-01T15:58:23.5321347Z Composer: Composer version 2.9.5 2026-01-29 11:40:53
|
||||
2026-03-01T15:58:23.5324055Z /var/run/act/workflow/1.sh: 4: node: not found
|
||||
2026-03-01T15:58:23.5324981Z Node:
|
||||
2026-03-01T15:58:23.6061077Z 📝 PHP 语法检查...
|
||||
2026-03-01T15:58:23.6517685Z ❌ Failure - Main PHP 语法检查
|
||||
2026-03-01T15:58:23.6572646Z exitcode '255': failure
|
||||
2026-03-01T15:58:23.6983093Z Cleaning up container for job 快速测试
|
||||
2026-03-01T15:58:23.8381783Z Removed container: 3bf638d4a888a88d0a68648e6dc93c83e717af46e024b49bd12104695dbdfdc9
|
||||
2026-03-01T15:58:23.8387755Z 🐳 docker volume rm GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB
|
||||
2026-03-01T15:58:23.8433681Z 🐳 docker volume rm GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-env
|
||||
2026-03-01T15:58:23.8464827Z Cleaning up network for job 快速测试, and network name is: GITEA-ACTIONS-TASK-62_WORKFLOW-Test-CI_JOB-quick-test-network
|
||||
2026-03-01T15:58:23.9970205Z 🏁 Job failed
|
||||
2026-03-01T15:58:24.0047540Z Job '快速测试' failed
|
||||
+87
-93
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-13T15:47:05.937Z"
|
||||
"lastTouchedAt": "2026-03-03T15:06:05.649Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
@@ -20,8 +20,8 @@
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"alibaba-cloud": {
|
||||
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
@@ -114,7 +114,7 @@
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"qmax",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
@@ -128,8 +128,8 @@
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"alibaba-cloud/qwen3-max-2026-01-23": {
|
||||
"alias": "qmax"
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
@@ -147,49 +147,45 @@
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "陈浩南",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"identity": {
|
||||
"name": "陈浩南",
|
||||
"emoji": "📚"
|
||||
}
|
||||
"skills": [
|
||||
"common-require",
|
||||
"capability-evolver",
|
||||
"self-improving-agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
"common-require",
|
||||
"kb-workflow",
|
||||
"capability-evolver",
|
||||
"self-improving-agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "程序开发助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "程序开发助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
"common-require",
|
||||
"clawlist",
|
||||
"capability-evolver",
|
||||
"self-improving-agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
}
|
||||
"skills": [
|
||||
"common-require",
|
||||
"capability-evolver",
|
||||
"self-improving-agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "thinker",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"capability-evolver",
|
||||
"self-improving-agent"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -221,74 +217,53 @@
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer":{
|
||||
"kind":"group",
|
||||
"id":"oc_79bcbd274c7cff8757b52e2ec1d8e12b"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer":{
|
||||
"kind":"group",
|
||||
"id":"wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg"
|
||||
}
|
||||
"accountId": "feishu-pm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer":{
|
||||
"kind":"group",
|
||||
"id":"oc_f86956cb9cecb7ad38c0f621377a23ae"
|
||||
}
|
||||
"accountId": "feishu-dev"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer":{
|
||||
"kind":"group",
|
||||
"id":"wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId":"ou_be83febac9ee2afaa343c642bc697c48"
|
||||
"accountId": "feishu-worker"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"agentId": "thinker",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId":"ZhangQing"
|
||||
"channel": "feishu",
|
||||
"accountId": "feishu-qa"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel":"feishu",
|
||||
"accountId":"ou_6de30318970345c4c79bea292b93130c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel":"wecom",
|
||||
"accountId":"bala"
|
||||
"channel": "feishu",
|
||||
"accountId": "feishu-art"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "tagged",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
"nativeSkills": "auto",
|
||||
@@ -318,10 +293,29 @@
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy":"allowlist",
|
||||
"allowFrom":["ou_be83febac9ee2afaa343c642bc697c48","ou_6de30318970345c4c79bea292b93130c"],
|
||||
"dmPolicy": "open",
|
||||
"accounts": {
|
||||
"feishu-pm": {
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1"
|
||||
},
|
||||
"feishu-dev": {
|
||||
"appId": "cli_a92bae598f789bd7",
|
||||
"appSecret": "kmwCLAI8IdZZn1KtwiPTVg758u0unGzY"
|
||||
},
|
||||
"feishu-worker": {
|
||||
"appId": "cli_a92ba8ad3cb81bde",
|
||||
"appSecret": "8bnMNIzy4QAv96c2xjmjgdUILO1qrO2w"
|
||||
},
|
||||
"feishu-qa": {
|
||||
"appId": "cli_a92baf81053f1bc0",
|
||||
"appSecret": "D5Pk8Fzwj5LWQr1FGnBlCbbJa3Ox7bJQ"
|
||||
},
|
||||
"feishu-art": {
|
||||
"appId": "cli_a92baa31fdf8dbc0",
|
||||
"appSecret": "BKjGWv1MTz7WmTn0I5A2EhuKyzwuuUnk"
|
||||
}
|
||||
},
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true
|
||||
@@ -333,13 +327,13 @@
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "pairing"
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId":"wwe98fa68a53dbf51d",
|
||||
"corpSecret":"C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId":"1000002",
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
@@ -385,8 +379,8 @@
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
@@ -397,7 +391,7 @@
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
@@ -405,5 +399,5 @@
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+145
-28
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-13T15:25:46.523Z"
|
||||
"lastTouchedAt": "2026-02-15T15:57:58.358Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:25:46.514Z",
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
"lastRunVersion": "2026.2.9",
|
||||
"lastRunCommand": "doctor",
|
||||
"lastRunMode": "local"
|
||||
@@ -20,8 +20,8 @@
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"alibaba-cloud": {
|
||||
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
@@ -114,7 +114,7 @@
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"qmax",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
@@ -128,8 +128,8 @@
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"alibaba-cloud/qwen3-max-2026-01-23": {
|
||||
"alias": "qmax"
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
@@ -145,29 +145,71 @@
|
||||
}
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "\u9648\u6d69\u5357",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "\u9648\u6d69\u5357",
|
||||
"emoji": "\ud83d\udcda"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"name": "\u77e5\u8bc6\u5e93\u52a9\u624b",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"kb-whisper",
|
||||
"kb-workflow",
|
||||
"kb-funasr"
|
||||
"common-require",
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库管理者",
|
||||
"emoji": "📚"
|
||||
"name": "\u77e5\u8bc6\u5e93\u52a9\u624b",
|
||||
"emoji": "\ud83d\udcda"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "\u7a0b\u5e8f\u5f00\u53d1\u52a9\u624b",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "\u7a0b\u5e8f\u5f00\u53d1\u52a9\u624b",
|
||||
"emoji": "\ud83d\udcda"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"name": "UI/UX\u8bbe\u8ba1\u5e08",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
"name": "\u8bbe\u8ba1\u5e08",
|
||||
"emoji": "\ud83c\udfa8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "thinker",
|
||||
"name": "\u5ba1\u67e5\u5458",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/thinker/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "\u5ba1\u67e5\u5458",
|
||||
"emoji": "\ud83d\udd0d"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -199,23 +241,53 @@
|
||||
}
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "feishu-pm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "feishu-dev"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"userId": "ou_be83febac9ee2afaa343c642bc697c48"
|
||||
"accountId": "feishu-worker"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "thinker",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "feishu-qa"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"userId": "ou_6de30318970345c4c79bea292b93130c"
|
||||
"accountId": "feishu-art"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions"
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "tagged",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
@@ -246,17 +318,52 @@
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy": "open",
|
||||
"accounts": {
|
||||
"feishu-pm": {
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1"
|
||||
},
|
||||
"feishu-dev": {
|
||||
"appId": "cli_a92bae598f789bd7",
|
||||
"appSecret": "kmwCLAI8IdZZn1KtwiPTVg758u0unGzY"
|
||||
},
|
||||
"feishu-worker": {
|
||||
"appId": "cli_a92ba8ad3cb81bde",
|
||||
"appSecret": "8bnMNIzy4QAv96c2xjmjgdUILO1qrO2w"
|
||||
},
|
||||
"feishu-qa": {
|
||||
"appId": "cli_a92baf81053f1bc0",
|
||||
"appSecret": "D5Pk8Fzwj5LWQr1FGnBlCbbJa3Ox7bJQ"
|
||||
},
|
||||
"feishu-art": {
|
||||
"appId": "cli_a92baa31fdf8dbc0",
|
||||
"appSecret": "BKjGWv1MTz7WmTn0I5A2EhuKyzwuuUnk"
|
||||
}
|
||||
},
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true,
|
||||
"groups": {
|
||||
"*": {
|
||||
"requireMention": false
|
||||
},
|
||||
"oc_79bcbd274c7cff8757b52e2ec1d8e12b": {
|
||||
"requireMention": false
|
||||
"requireMention": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot": {
|
||||
"token": "X8ySyqpZ",
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
"policy": "open",
|
||||
"allowFrom": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -296,6 +403,9 @@
|
||||
"entries": {
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
@@ -305,6 +415,13 @@
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/feishu",
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
"version": "2026.2.5",
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,432 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-15T15:57:58.358Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
"lastRunVersion": "2026.2.9",
|
||||
"lastRunCommand": "doctor",
|
||||
"lastRunMode": "local"
|
||||
},
|
||||
"auth": {
|
||||
"profiles": {
|
||||
"kimi-coding:default": {
|
||||
"provider": "kimi-coding",
|
||||
"mode": "api_key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
},
|
||||
"mm": {
|
||||
"baseUrl": "https://api.minimaxi.com/anthropic",
|
||||
"apiKey": "sk-cp-8PugyKE2xsG0S4x4KzDuuIV6Z9bT1NFwkpfrOSG05djFVExAgYEPpp7iUaTcugT6_P4uBYIN9S75l3ij-Yd2Ct8f6CxdKWdgFahESfn_jla-SlU6oGUCBjk",
|
||||
"api": "anthropic-messages",
|
||||
"authHeader": true,
|
||||
"models": [
|
||||
{
|
||||
"id": "MiniMax-M2.5",
|
||||
"name": "MiniMax M2.5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 15,
|
||||
"output": 60,
|
||||
"cacheRead": 2,
|
||||
"cacheWrite": 10
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"zhipu": {
|
||||
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
||||
"apiKey": "80ec82f2b14047d9a0399682a042378b.E8rv2nPSyuIsGoDr",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-5",
|
||||
"name": "glm 5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "glm-4.7-FlashX",
|
||||
"name": "glm 4.7 FlashX",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "m25",
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
"models": {
|
||||
"zhipu/glm-5": {
|
||||
"alias": "g5"
|
||||
},
|
||||
"zhipu/glm-4.7-FlashX": {
|
||||
"alias": "g47f"
|
||||
},
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
}
|
||||
},
|
||||
"workspace": "/home/starmen1265/.openclaw/workspace",
|
||||
"compaction": {
|
||||
"mode": "safeguard"
|
||||
},
|
||||
"maxConcurrent": 8,
|
||||
"subagents": {
|
||||
"maxConcurrent": 16
|
||||
}
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "陈浩南",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "陈浩南",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "程序开发助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "程序开发助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"web": {
|
||||
"search": {
|
||||
"enabled": true,
|
||||
"provider": "brave",
|
||||
"apiKey": "BSAjOnKoRQhsGaUEWY57A3GZiXEgzzQ"
|
||||
}
|
||||
},
|
||||
"elevated": {
|
||||
"enabled": true,
|
||||
"allowFrom": {
|
||||
"webchat": [
|
||||
"*"
|
||||
],
|
||||
"tui": [
|
||||
"*"
|
||||
],
|
||||
"wecom": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exec": {
|
||||
"security": "full"
|
||||
}
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_79bcbd274c7cff8757b52e2ec1d8e12b"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_f86956cb9cecb7ad38c0f621377a23ae"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_be83febac9ee2afaa343c642bc697c48"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "ZhangQing"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_6de30318970345c4c79bea292b93130c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "bala"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "tagged",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
"nativeSkills": "auto",
|
||||
"restart": true
|
||||
},
|
||||
"approvals": {
|
||||
"exec": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"internal": {
|
||||
"enabled": true,
|
||||
"entries": {
|
||||
"boot-md": {
|
||||
"enabled": true
|
||||
},
|
||||
"command-logger": {
|
||||
"enabled": true
|
||||
},
|
||||
"session-memory": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy": "allowlist",
|
||||
"allowFrom": [
|
||||
"ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"ou_6de30318970345c4c79bea292b93130c"
|
||||
],
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot": {
|
||||
"token": "X8ySyqpZ",
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
"policy": "open",
|
||||
"allowFrom": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"mode": "local",
|
||||
"bind": "lan",
|
||||
"controlUi": {
|
||||
"allowInsecureAuth": true
|
||||
},
|
||||
"auth": {
|
||||
"mode": "token",
|
||||
"token": "1b7fc86b3895e0e27da4c9fd3aac10fc5ad8f66354040347"
|
||||
},
|
||||
"tailscale": {
|
||||
"mode": "off",
|
||||
"resetOnExit": false
|
||||
},
|
||||
"nodes": {
|
||||
"denyCommands": [
|
||||
"camera.snap",
|
||||
"camera.clip",
|
||||
"screen.record",
|
||||
"calendar.add",
|
||||
"contacts.add",
|
||||
"reminders.add"
|
||||
]
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"install": {
|
||||
"nodeManager": "npm"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"entries": {
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
"feishu": {
|
||||
"source": "npm",
|
||||
"spec": "@m1heng-clawd/feishu",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/feishu",
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
"version": "2026.2.5",
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,432 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-15T15:54:32.431Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
"lastRunVersion": "2026.2.9",
|
||||
"lastRunCommand": "doctor",
|
||||
"lastRunMode": "local"
|
||||
},
|
||||
"auth": {
|
||||
"profiles": {
|
||||
"kimi-coding:default": {
|
||||
"provider": "kimi-coding",
|
||||
"mode": "api_key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
},
|
||||
"mm": {
|
||||
"baseUrl": "https://api.minimaxi.com/anthropic",
|
||||
"apiKey": "sk-cp-8PugyKE2xsG0S4x4KzDuuIV6Z9bT1NFwkpfrOSG05djFVExAgYEPpp7iUaTcugT6_P4uBYIN9S75l3ij-Yd2Ct8f6CxdKWdgFahESfn_jla-SlU6oGUCBjk",
|
||||
"api": "anthropic-messages",
|
||||
"authHeader": true,
|
||||
"models": [
|
||||
{
|
||||
"id": "MiniMax-M2.5",
|
||||
"name": "MiniMax M2.5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 15,
|
||||
"output": 60,
|
||||
"cacheRead": 2,
|
||||
"cacheWrite": 10
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"zhipu": {
|
||||
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
||||
"apiKey": "80ec82f2b14047d9a0399682a042378b.E8rv2nPSyuIsGoDr",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-5",
|
||||
"name": "glm 5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "glm-4.7-FlashX",
|
||||
"name": "glm 4.7 FlashX",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "m25",
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
"models": {
|
||||
"zhipu/glm-5": {
|
||||
"alias": "g5"
|
||||
},
|
||||
"zhipu/glm-4.7-FlashX": {
|
||||
"alias": "g47f"
|
||||
},
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
}
|
||||
},
|
||||
"workspace": "/home/starmen1265/.openclaw/workspace",
|
||||
"compaction": {
|
||||
"mode": "safeguard"
|
||||
},
|
||||
"maxConcurrent": 8,
|
||||
"subagents": {
|
||||
"maxConcurrent": 16
|
||||
}
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "陈浩南",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "陈浩南",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "程序开发助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "程序开发助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"web": {
|
||||
"search": {
|
||||
"enabled": true,
|
||||
"provider": "brave",
|
||||
"apiKey": "BSAjOnKoRQhsGaUEWY57A3GZiXEgzzQ"
|
||||
}
|
||||
},
|
||||
"elevated": {
|
||||
"enabled": true,
|
||||
"allowFrom": {
|
||||
"webchat": [
|
||||
"*"
|
||||
],
|
||||
"tui": [
|
||||
"*"
|
||||
],
|
||||
"wecom": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exec": {
|
||||
"security": "full"
|
||||
}
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_79bcbd274c7cff8757b52e2ec1d8e12b"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_f86956cb9cecb7ad38c0f621377a23ae"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_be83febac9ee2afaa343c642bc697c48"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "ZhangQing"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_6de30318970345c4c79bea292b93130c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "bala"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "always",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
"nativeSkills": "auto",
|
||||
"restart": true
|
||||
},
|
||||
"approvals": {
|
||||
"exec": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"internal": {
|
||||
"enabled": true,
|
||||
"entries": {
|
||||
"boot-md": {
|
||||
"enabled": true
|
||||
},
|
||||
"command-logger": {
|
||||
"enabled": true
|
||||
},
|
||||
"session-memory": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy": "allowlist",
|
||||
"allowFrom": [
|
||||
"ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"ou_6de30318970345c4c79bea292b93130c"
|
||||
],
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot": {
|
||||
"token": "X8ySyqpZ",
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
"policy": "open",
|
||||
"allowFrom": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"mode": "local",
|
||||
"bind": "lan",
|
||||
"controlUi": {
|
||||
"allowInsecureAuth": true
|
||||
},
|
||||
"auth": {
|
||||
"mode": "token",
|
||||
"token": "1b7fc86b3895e0e27da4c9fd3aac10fc5ad8f66354040347"
|
||||
},
|
||||
"tailscale": {
|
||||
"mode": "off",
|
||||
"resetOnExit": false
|
||||
},
|
||||
"nodes": {
|
||||
"denyCommands": [
|
||||
"camera.snap",
|
||||
"camera.clip",
|
||||
"screen.record",
|
||||
"calendar.add",
|
||||
"contacts.add",
|
||||
"reminders.add"
|
||||
]
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"install": {
|
||||
"nodeManager": "npm"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"entries": {
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
"feishu": {
|
||||
"source": "npm",
|
||||
"spec": "@m1heng-clawd/feishu",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/feishu",
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
"version": "2026.2.5",
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,432 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-15T15:50:36.798Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
"lastRunVersion": "2026.2.9",
|
||||
"lastRunCommand": "doctor",
|
||||
"lastRunMode": "local"
|
||||
},
|
||||
"auth": {
|
||||
"profiles": {
|
||||
"kimi-coding:default": {
|
||||
"provider": "kimi-coding",
|
||||
"mode": "api_key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
},
|
||||
"mm": {
|
||||
"baseUrl": "https://api.minimaxi.com/anthropic",
|
||||
"apiKey": "sk-cp-8PugyKE2xsG0S4x4KzDuuIV6Z9bT1NFwkpfrOSG05djFVExAgYEPpp7iUaTcugT6_P4uBYIN9S75l3ij-Yd2Ct8f6CxdKWdgFahESfn_jla-SlU6oGUCBjk",
|
||||
"api": "anthropic-messages",
|
||||
"authHeader": true,
|
||||
"models": [
|
||||
{
|
||||
"id": "MiniMax-M2.5",
|
||||
"name": "MiniMax M2.5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 15,
|
||||
"output": 60,
|
||||
"cacheRead": 2,
|
||||
"cacheWrite": 10
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"zhipu": {
|
||||
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
||||
"apiKey": "80ec82f2b14047d9a0399682a042378b.E8rv2nPSyuIsGoDr",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-5",
|
||||
"name": "glm 5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "glm-4.7-FlashX",
|
||||
"name": "glm 4.7 FlashX",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "m25",
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
"models": {
|
||||
"zhipu/glm-5": {
|
||||
"alias": "g5"
|
||||
},
|
||||
"zhipu/glm-4.7-FlashX": {
|
||||
"alias": "g47f"
|
||||
},
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
}
|
||||
},
|
||||
"workspace": "/home/starmen1265/.openclaw/workspace",
|
||||
"compaction": {
|
||||
"mode": "safeguard"
|
||||
},
|
||||
"maxConcurrent": 8,
|
||||
"subagents": {
|
||||
"maxConcurrent": 16
|
||||
}
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "陈浩南",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "陈浩南",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "程序开发助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "程序开发助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"web": {
|
||||
"search": {
|
||||
"enabled": true,
|
||||
"provider": "brave",
|
||||
"apiKey": "BSAjOnKoRQhsGaUEWY57A3GZiXEgzzQ"
|
||||
}
|
||||
},
|
||||
"elevated": {
|
||||
"enabled": true,
|
||||
"allowFrom": {
|
||||
"webchat": [
|
||||
"*"
|
||||
],
|
||||
"tui": [
|
||||
"*"
|
||||
],
|
||||
"wecom": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exec": {
|
||||
"security": "full"
|
||||
}
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_79bcbd274c7cff8757b52e2ec1d8e12b"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_f86956cb9cecb7ad38c0f621377a23ae"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_be83febac9ee2afaa343c642bc697c48"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "ZhangQing"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_6de30318970345c4c79bea292b93130c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "bala"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "tagged",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
"nativeSkills": "auto",
|
||||
"restart": true
|
||||
},
|
||||
"approvals": {
|
||||
"exec": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"internal": {
|
||||
"enabled": true,
|
||||
"entries": {
|
||||
"boot-md": {
|
||||
"enabled": true
|
||||
},
|
||||
"command-logger": {
|
||||
"enabled": true
|
||||
},
|
||||
"session-memory": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy": "allowlist",
|
||||
"allowFrom": [
|
||||
"ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"ou_6de30318970345c4c79bea292b93130c"
|
||||
],
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot": {
|
||||
"token": "X8ySyqpZ",
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
"policy": "open",
|
||||
"allowFrom": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"mode": "local",
|
||||
"bind": "lan",
|
||||
"controlUi": {
|
||||
"allowInsecureAuth": true
|
||||
},
|
||||
"auth": {
|
||||
"mode": "token",
|
||||
"token": "1b7fc86b3895e0e27da4c9fd3aac10fc5ad8f66354040347"
|
||||
},
|
||||
"tailscale": {
|
||||
"mode": "off",
|
||||
"resetOnExit": false
|
||||
},
|
||||
"nodes": {
|
||||
"denyCommands": [
|
||||
"camera.snap",
|
||||
"camera.clip",
|
||||
"screen.record",
|
||||
"calendar.add",
|
||||
"contacts.add",
|
||||
"reminders.add"
|
||||
]
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"install": {
|
||||
"nodeManager": "npm"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"entries": {
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
"feishu": {
|
||||
"source": "npm",
|
||||
"spec": "@m1heng-clawd/feishu",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/feishu",
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
"version": "2026.2.5",
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,432 @@
|
||||
{
|
||||
"meta": {
|
||||
"lastTouchedVersion": "2026.2.9",
|
||||
"lastTouchedAt": "2026-02-15T15:43:40.588Z"
|
||||
},
|
||||
"wizard": {
|
||||
"lastRunAt": "2026-02-13T15:47:05.928Z",
|
||||
"lastRunVersion": "2026.2.9",
|
||||
"lastRunCommand": "doctor",
|
||||
"lastRunMode": "local"
|
||||
},
|
||||
"auth": {
|
||||
"profiles": {
|
||||
"kimi-coding:default": {
|
||||
"provider": "kimi-coding",
|
||||
"mode": "api_key"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"bailian": {
|
||||
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "qwen3-max-2026-01-23",
|
||||
"name": "qwen3-max-thinking",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 65536
|
||||
}
|
||||
]
|
||||
},
|
||||
"mm": {
|
||||
"baseUrl": "https://api.minimaxi.com/anthropic",
|
||||
"apiKey": "sk-cp-8PugyKE2xsG0S4x4KzDuuIV6Z9bT1NFwkpfrOSG05djFVExAgYEPpp7iUaTcugT6_P4uBYIN9S75l3ij-Yd2Ct8f6CxdKWdgFahESfn_jla-SlU6oGUCBjk",
|
||||
"api": "anthropic-messages",
|
||||
"authHeader": true,
|
||||
"models": [
|
||||
{
|
||||
"id": "MiniMax-M2.5",
|
||||
"name": "MiniMax M2.5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 15,
|
||||
"output": 60,
|
||||
"cacheRead": 2,
|
||||
"cacheWrite": 10
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"zhipu": {
|
||||
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
||||
"apiKey": "80ec82f2b14047d9a0399682a042378b.E8rv2nPSyuIsGoDr",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "glm-5",
|
||||
"name": "glm 5",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "glm-4.7-FlashX",
|
||||
"name": "glm 4.7 FlashX",
|
||||
"reasoning": false,
|
||||
"input": [
|
||||
"text"
|
||||
],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "m25",
|
||||
"fallbacks": [
|
||||
"g47f",
|
||||
"g5",
|
||||
"q3",
|
||||
"k2p5"
|
||||
]
|
||||
},
|
||||
"models": {
|
||||
"zhipu/glm-5": {
|
||||
"alias": "g5"
|
||||
},
|
||||
"zhipu/glm-4.7-FlashX": {
|
||||
"alias": "g47f"
|
||||
},
|
||||
"mm/MiniMax-M2.5": {
|
||||
"alias": "m25"
|
||||
},
|
||||
"bailian/qwen3-max-2026-01-23": {
|
||||
"alias": "q3"
|
||||
},
|
||||
"kimi-coding/k2p5": {
|
||||
"alias": "k2p5"
|
||||
}
|
||||
},
|
||||
"workspace": "/home/starmen1265/.openclaw/workspace",
|
||||
"compaction": {
|
||||
"mode": "safeguard"
|
||||
},
|
||||
"maxConcurrent": 8,
|
||||
"subagents": {
|
||||
"maxConcurrent": 16
|
||||
}
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"id": "haonan",
|
||||
"name": "陈浩南",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/haonan/workspace",
|
||||
"model": "m25",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "陈浩南",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "knowledge-base",
|
||||
"name": "知识库助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/knowledge-base/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"kb-workflow"
|
||||
],
|
||||
"identity": {
|
||||
"name": "知识库助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dev-assist",
|
||||
"name": "程序开发助手",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/dev-assist/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require",
|
||||
"clawlist"
|
||||
],
|
||||
"identity": {
|
||||
"name": "程序开发助手",
|
||||
"emoji": "📚"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ui-designer",
|
||||
"name": "UI/UX设计师",
|
||||
"workspace": "/home/starmen1265/.openclaw/agents/ui-designer/workspace",
|
||||
"model": "g5",
|
||||
"skills": [
|
||||
"common-require"
|
||||
],
|
||||
"identity": {
|
||||
"name": "设计师",
|
||||
"emoji": "🎨"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tools": {
|
||||
"web": {
|
||||
"search": {
|
||||
"enabled": true,
|
||||
"provider": "brave",
|
||||
"apiKey": "BSAjOnKoRQhsGaUEWY57A3GZiXEgzzQ"
|
||||
}
|
||||
},
|
||||
"elevated": {
|
||||
"enabled": true,
|
||||
"allowFrom": {
|
||||
"webchat": [
|
||||
"*"
|
||||
],
|
||||
"tui": [
|
||||
"*"
|
||||
],
|
||||
"wecom": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exec": {
|
||||
"security": "full"
|
||||
}
|
||||
},
|
||||
"bindings": [
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_79bcbd274c7cff8757b52e2ec1d8e12b"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "knowledge-base",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAAXlqKMkyGznqpPMYZg2YTYg"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "oc_f86956cb9cecb7ad38c0f621377a23ae"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "dev-assist",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"peer": {
|
||||
"kind": "group",
|
||||
"id": "wr_wAnbgAA_ot7JsLAgOD2IMcsGaT_8Q"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_be83febac9ee2afaa343c642bc697c48"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "haonan",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "ZhangQing"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "feishu",
|
||||
"accountId": "ou_6de30318970345c4c79bea292b93130c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"agentId": "ui-designer",
|
||||
"match": {
|
||||
"channel": "wecom",
|
||||
"accountId": "bala"
|
||||
}
|
||||
}
|
||||
],
|
||||
"messages": {
|
||||
"ackReactionScope": "group-mentions",
|
||||
"tts": {
|
||||
"auto": "always",
|
||||
"provider": "edge",
|
||||
"edge": {
|
||||
"enabled": true,
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"lang": "zh-CN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"native": "auto",
|
||||
"nativeSkills": "auto",
|
||||
"restart": true
|
||||
},
|
||||
"approvals": {
|
||||
"exec": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"hooks": {
|
||||
"internal": {
|
||||
"enabled": true,
|
||||
"entries": {
|
||||
"boot-md": {
|
||||
"enabled": true
|
||||
},
|
||||
"command-logger": {
|
||||
"enabled": true
|
||||
},
|
||||
"session-memory": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"feishu": {
|
||||
"enabled": true,
|
||||
"appId": "cli_a9f74dc9a3f8dbce",
|
||||
"appSecret": "QtnvzRUhhFoNTTorxJuAwgSJ3ocPv0p1",
|
||||
"dmPolicy": "allowlist",
|
||||
"allowFrom": [
|
||||
"ou_be83febac9ee2afaa343c642bc697c48",
|
||||
"ou_6de30318970345c4c79bea292b93130c"
|
||||
],
|
||||
"domain": "feishu",
|
||||
"groupPolicy": "open",
|
||||
"requireMention": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot": {
|
||||
"token": "X8ySyqpZ",
|
||||
"encodingAESKey": "SjHvepG9uF38EDPyNmHjv22n2Ric8BVCA31imJidYxY",
|
||||
"receiveId": "",
|
||||
"dm": {
|
||||
"policy": "open"
|
||||
}
|
||||
},
|
||||
"agent": {
|
||||
"corpId": "wwe98fa68a53dbf51d",
|
||||
"corpSecret": "C5rwbH55fKEB8mwVgyMcwzMs-4KgR9DcIXsyMGbxfwg",
|
||||
"agentId": "1000002",
|
||||
"token": "vjgcDzgRcqeFOG5X8lpdAk87gsw7i",
|
||||
"encodingAESKey": "bAx5QMjhHIZqnd33VgVcs4exD5JRLNn9zc1gmICiIS2",
|
||||
"dm": {
|
||||
"policy": "open",
|
||||
"allowFrom": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"mode": "local",
|
||||
"bind": "lan",
|
||||
"controlUi": {
|
||||
"allowInsecureAuth": true
|
||||
},
|
||||
"auth": {
|
||||
"mode": "token",
|
||||
"token": "1b7fc86b3895e0e27da4c9fd3aac10fc5ad8f66354040347"
|
||||
},
|
||||
"tailscale": {
|
||||
"mode": "off",
|
||||
"resetOnExit": false
|
||||
},
|
||||
"nodes": {
|
||||
"denyCommands": [
|
||||
"camera.snap",
|
||||
"camera.clip",
|
||||
"screen.record",
|
||||
"calendar.add",
|
||||
"contacts.add",
|
||||
"reminders.add"
|
||||
]
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"install": {
|
||||
"nodeManager": "npm"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"entries": {
|
||||
"feishu": {
|
||||
"enabled": true
|
||||
},
|
||||
"wecom": {
|
||||
"enabled": true
|
||||
}
|
||||
},
|
||||
"installs": {
|
||||
"feishu": {
|
||||
"source": "npm",
|
||||
"spec": "@m1heng-clawd/feishu",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/feishu",
|
||||
"version": "0.1.9",
|
||||
"installedAt": "2026-02-12T16:31:18.854Z"
|
||||
},
|
||||
"wecom": {
|
||||
"source": "npm",
|
||||
"spec": "https://github.com/xl370869-art/wecom.git",
|
||||
"installPath": "/home/starmen1265/.openclaw/extensions/wecom",
|
||||
"version": "2026.2.5",
|
||||
"installedAt": "2026-02-06T10:39:17.377Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
=== Capability Evolver 运行开始 ===
|
||||
时间: 2026年 03月 03日 星期二 23:13:28 CST
|
||||
|
||||
发现有未提交的更改,先提交...
|
||||
Executable
+50
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
# Capability Evolver 定期运行脚本
|
||||
# 策略:使用 repair-only 模式,仅修复问题不做大改动
|
||||
|
||||
EVOLVER_DIR="$HOME/.openclaw/skills/capability-evolver"
|
||||
OUTPUT_FILE="$HOME/.openclaw/scripts/evolver-output.txt"
|
||||
OPENCLAW_DIR="$HOME/.openclaw"
|
||||
|
||||
echo "=== Capability Evolver 运行开始 ===" > "$OUTPUT_FILE"
|
||||
echo "时间: $(date)" >> "$OUTPUT_FILE"
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
|
||||
# 切换到 openclaw 目录进行 git 备份
|
||||
cd "$OPENCLAW_DIR"
|
||||
|
||||
# 检查是否有未提交的更改
|
||||
if [[ -n $(git status --porcelain) ]]; then
|
||||
echo "发现有未提交的更改,先提交..." >> "$OUTPUT_FILE"
|
||||
git add -A
|
||||
git commit -m "Auto backup before evolver run - $(date)" 2>/dev/null
|
||||
fi
|
||||
|
||||
# 创建备份分支
|
||||
BACKUP_BRANCH="backup/evolver-$(date +%Y%m%d-%H%M%S)"
|
||||
echo "创建备份分支: $BACKUP_BRANCH" >> "$OUTPUT_FILE"
|
||||
git branch -D "$BACKUP_BRANCH" 2>/dev/null || true
|
||||
git branch "$BACKUP_BRANCH" 2>/dev/null
|
||||
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "=== Git 备份完成 ===" >> "$OUTPUT_FILE"
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
|
||||
# 运行 evolver - 使用 repair-only 策略确保安全
|
||||
cd "$EVOLVER_DIR"
|
||||
export EVOLVE_STRATEGY="repair-only"
|
||||
echo "=== 运行 Capability Evolver (repair-only 模式) ===" >> "$OUTPUT_FILE"
|
||||
node index.js >> "$OUTPUT_FILE" 2>&1
|
||||
EXIT_CODE=$?
|
||||
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "=== Evolver 运行完成 (exit code: $EXIT_CODE) ===" >> "$OUTPUT_FILE"
|
||||
|
||||
# 检查变更
|
||||
cd "$OPENCLAW_DIR"
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "=== 本次变更 ===" >> "$OUTPUT_FILE"
|
||||
git status --short >> "$OUTPUT_FILE"
|
||||
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "=== 输出完成 ===" >> "$OUTPUT_FILE"
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 自动检查并提交 git 修改
|
||||
|
||||
cd ~/.openclaw
|
||||
git add -A
|
||||
if ! git diff --cached --quiet; then
|
||||
git commit -m "自动同步: $(date '+%Y-%m-%d %H:%M')"
|
||||
git push origin main
|
||||
fi
|
||||
|
||||
cd ~/.openclaw/extensions
|
||||
git add -A
|
||||
if ! git diff --cached --quiet; then
|
||||
git commit -m "自动同步: $(date '+%Y-%m-%d %H:%M')"
|
||||
git push origin main
|
||||
fi
|
||||
@@ -0,0 +1,11 @@
|
||||
## Contributing
|
||||
|
||||
Thank you for contributing. Please follow these rules:
|
||||
|
||||
- Do not use emoji (except the DNA emoji in documentation if needed).
|
||||
- Keep changes small and reviewable.
|
||||
- Update related documentation when you change behavior.
|
||||
- Run `node index.js` for a quick sanity check.
|
||||
|
||||
Submit PRs with clear intent and scope.
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
# 🧬 Capability Evolver
|
||||
|
||||

|
||||
|
||||
**[evomap.ai](https://evomap.ai)** | [Documentation](https://evomap.ai/wiki) | [Chinese Docs](README.zh-CN.md)
|
||||
|
||||
---
|
||||
|
||||
**"Evolution is not optional. Adapt or die."**
|
||||
|
||||
**Three lines**
|
||||
- **What it is**: A protocol-constrained self-evolution engine for AI agents.
|
||||
- **Pain it solves**: Turns ad hoc prompt tweaks into auditable, reusable evolution assets.
|
||||
- **Use in 30 seconds**: `node index.js` to generate a GEP-guided evolution prompt.
|
||||
|
||||
## EvoMap -- The Evolution Network
|
||||
|
||||
Capability Evolver is the core engine behind **[EvoMap](https://evomap.ai)**, a network where AI agents evolve through validated collaboration. Visit [evomap.ai](https://evomap.ai) to explore the full platform -- live agent maps, evolution leaderboards, and the ecosystem that turns isolated prompt tweaks into shared, auditable intelligence.
|
||||
|
||||
Keywords: protocol-constrained evolution, audit trail, genes and capsules, prompt governance.
|
||||
|
||||
## Try It Now (Minimal)
|
||||
|
||||
```bash
|
||||
node index.js
|
||||
```
|
||||
|
||||
## What It Does
|
||||
|
||||
The **Capability Evolver** inspects runtime history, extracts signals, selects a Gene/Capsule, and emits a strict GEP protocol prompt to guide safe evolution.
|
||||
|
||||
## Who This Is For / Not For
|
||||
|
||||
**For**
|
||||
- Teams maintaining agent prompts and logs at scale
|
||||
- Users who need auditable evolution traces (Genes, Capsules, Events)
|
||||
- Environments requiring deterministic, protocol-bound changes
|
||||
|
||||
**Not For**
|
||||
- One-off scripts without logs or history
|
||||
- Projects that require free-form creative changes
|
||||
- Systems that cannot tolerate protocol overhead
|
||||
|
||||
## Features
|
||||
|
||||
- **Auto-Log Analysis**: scans memory and history files for errors and patterns.
|
||||
- **Self-Repair Guidance**: emits repair-focused directives from signals.
|
||||
- **GEP Protocol**: standardized evolution with reusable assets.
|
||||
- **Mutation + Personality Evolution**: each evolution run is gated by an explicit Mutation object and an evolvable PersonalityState.
|
||||
- **Configurable Strategy Presets**: `EVOLVE_STRATEGY=balanced|innovate|harden|repair-only` controls intent balance.
|
||||
- **Signal De-duplication**: prevents repair loops by detecting stagnation patterns.
|
||||
- **Operations Module** (`src/ops/`): portable lifecycle, skill monitoring, cleanup, self-repair, wake triggers -- zero platform dependency.
|
||||
- **Protected Source Files**: prevents autonomous agents from overwriting core evolver code.
|
||||
- **One-Command Evolution**: `node index.js` to generate the prompt.
|
||||
|
||||
## Typical Use Cases
|
||||
|
||||
- Harden a flaky agent loop by enforcing validation before edits
|
||||
- Encode recurring fixes as reusable Genes and Capsules
|
||||
- Produce auditable evolution events for review or compliance
|
||||
|
||||
## Anti-Examples
|
||||
|
||||
- Rewriting entire subsystems without signals or constraints
|
||||
- Using the protocol as a generic task runner
|
||||
- Producing changes without recording EvolutionEvent
|
||||
|
||||
## FAQ
|
||||
|
||||
**Does this edit code automatically?**
|
||||
No. It generates a protocol-bound prompt and assets that guide evolution.
|
||||
|
||||
**Do I need to use all GEP assets?**
|
||||
No. You can start with default Genes and extend over time.
|
||||
|
||||
**Is this safe in production?**
|
||||
Use review mode and validation steps. Treat it as a safety-focused evolution tool, not a live patcher.
|
||||
|
||||
## Roadmap
|
||||
|
||||
- Add a one-minute demo workflow
|
||||
- Add a comparison table vs alternatives
|
||||
|
||||
## GEP Protocol (Auditable Evolution)
|
||||
|
||||
This repo includes a protocol-constrained prompt mode based on GEP (Genome Evolution Protocol).
|
||||
|
||||
- **Structured assets** live in `assets/gep/`:
|
||||
- `assets/gep/genes.json`
|
||||
- `assets/gep/capsules.json`
|
||||
- `assets/gep/events.jsonl`
|
||||
- **Selector** logic uses extracted signals to prefer existing Genes/Capsules and emits a JSON selector decision in the prompt.
|
||||
- **Constraints**: Only the DNA emoji is allowed in documentation; all other emoji are disallowed.
|
||||
|
||||
## Usage
|
||||
|
||||
### Standard Run (Automated)
|
||||
```bash
|
||||
node index.js
|
||||
```
|
||||
|
||||
### Review Mode (Human-in-the-Loop)
|
||||
```bash
|
||||
node index.js --review
|
||||
```
|
||||
|
||||
### Continuous Loop
|
||||
```bash
|
||||
node index.js --loop
|
||||
```
|
||||
|
||||
### With Strategy Preset
|
||||
```bash
|
||||
EVOLVE_STRATEGY=innovate node index.js --loop # maximize new features
|
||||
EVOLVE_STRATEGY=harden node index.js --loop # focus on stability
|
||||
EVOLVE_STRATEGY=repair-only node index.js --loop # emergency fix mode
|
||||
```
|
||||
|
||||
### Operations (Lifecycle Management)
|
||||
```bash
|
||||
node src/ops/lifecycle.js start # start evolver loop in background
|
||||
node src/ops/lifecycle.js stop # graceful stop (SIGTERM -> SIGKILL)
|
||||
node src/ops/lifecycle.js status # show running state
|
||||
node src/ops/lifecycle.js check # health check + auto-restart if stagnant
|
||||
```
|
||||
|
||||
## Public Release
|
||||
|
||||
This repository is the public distribution.
|
||||
|
||||
- Build public output: `npm run build`
|
||||
- Publish public output: `npm run publish:public`
|
||||
- Dry run: `DRY_RUN=true npm run publish:public`
|
||||
|
||||
Required env vars:
|
||||
|
||||
- `PUBLIC_REMOTE` (default: `public`)
|
||||
- `PUBLIC_REPO` (e.g. `autogame-17/evolver`)
|
||||
- `PUBLIC_OUT_DIR` (default: `dist-public`)
|
||||
- `PUBLIC_USE_BUILD_OUTPUT` (default: `true`)
|
||||
|
||||
Optional env vars:
|
||||
|
||||
- `SOURCE_BRANCH` (default: `main`)
|
||||
- `PUBLIC_BRANCH` (default: `main`)
|
||||
- `RELEASE_TAG` (e.g. `v1.0.41`)
|
||||
- `RELEASE_TITLE` (e.g. `v1.0.41 - GEP protocol`)
|
||||
- `RELEASE_NOTES` or `RELEASE_NOTES_FILE`
|
||||
- `GITHUB_TOKEN` (or `GH_TOKEN` / `GITHUB_PAT`) for GitHub Release creation
|
||||
- `RELEASE_SKIP` (`true` to skip creating a GitHub Release; default is to create)
|
||||
- `RELEASE_USE_GH` (`true` to use `gh` CLI instead of GitHub API)
|
||||
- `PUBLIC_RELEASE_ONLY` (`true` to only create a Release for an existing tag; no publish)
|
||||
|
||||
## Versioning (SemVer)
|
||||
|
||||
MAJOR.MINOR.PATCH
|
||||
|
||||
- MAJOR: incompatible changes
|
||||
- MINOR: backward-compatible features
|
||||
- PATCH: backward-compatible bug fixes
|
||||
|
||||
## Changelog
|
||||
|
||||
See the full release history on [GitHub Releases](https://github.com/autogame-17/evolver/releases).
|
||||
|
||||
## Security Model
|
||||
|
||||
This section describes the execution boundaries and trust model of the Capability Evolver.
|
||||
|
||||
### What Executes and What Does Not
|
||||
|
||||
| Component | Behavior | Executes Shell Commands? |
|
||||
| :--- | :--- | :--- |
|
||||
| `src/evolve.js` | Reads logs, selects genes, builds prompts, writes artifacts | Read-only git/process queries only |
|
||||
| `src/gep/prompt.js` | Assembles the GEP protocol prompt string | No (pure text generation) |
|
||||
| `src/gep/selector.js` | Scores and selects Genes/Capsules by signal matching | No (pure logic) |
|
||||
| `src/gep/solidify.js` | Validates patches via Gene `validation` commands | Yes (see below) |
|
||||
| `index.js` (loop recovery) | Prints `sessions_spawn(...)` text to stdout on crash | No (text output only; execution depends on host runtime) |
|
||||
|
||||
### Gene Validation Command Safety
|
||||
|
||||
`solidify.js` executes commands listed in a Gene's `validation` array. To prevent arbitrary command execution, all validation commands are gated by a safety check (`isValidationCommandAllowed`):
|
||||
|
||||
1. **Prefix whitelist**: Only commands starting with `node`, `npm`, or `npx` are allowed.
|
||||
2. **No command substitution**: Backticks and `$(...)` are rejected anywhere in the command string.
|
||||
3. **No shell operators**: After stripping quoted content, `;`, `&`, `|`, `>`, `<` are rejected.
|
||||
4. **Timeout**: Each command is limited to 180 seconds.
|
||||
5. **Scoped execution**: Commands run with `cwd` set to the repository root.
|
||||
|
||||
### A2A External Asset Ingestion
|
||||
|
||||
External Gene/Capsule assets ingested via `scripts/a2a_ingest.js` are staged in an isolated candidate zone. Promotion to local stores (`scripts/a2a_promote.js`) requires:
|
||||
|
||||
1. Explicit `--validated` flag (operator must verify the asset first).
|
||||
2. For Genes: all `validation` commands are audited against the same safety check before promotion. Unsafe commands cause the promotion to be rejected.
|
||||
3. Gene promotion never overwrites an existing local Gene with the same ID.
|
||||
|
||||
### `sessions_spawn` Output
|
||||
|
||||
The `sessions_spawn(...)` strings in `index.js` and `evolve.js` are **text output to stdout**, not direct function calls. Whether they are interpreted depends on the host runtime (e.g., OpenClaw platform). The evolver itself does not invoke `sessions_spawn` as executable code.
|
||||
|
||||
## Configuration & Decoupling
|
||||
|
||||
This skill is designed to be **environment-agnostic**. It uses standard OpenClaw tools by default.
|
||||
|
||||
### Local Overrides (Injection)
|
||||
You can inject local preferences (e.g., using `feishu-card` instead of `message` for reports) without modifying the core code.
|
||||
|
||||
**Method 1: Environment Variables**
|
||||
Set `EVOLVE_REPORT_TOOL` in your `.env` file:
|
||||
```bash
|
||||
EVOLVE_REPORT_TOOL=feishu-card
|
||||
```
|
||||
|
||||
**Method 2: Dynamic Detection**
|
||||
The script automatically detects if compatible local skills (like `skills/feishu-card`) exist in your workspace and upgrades its behavior accordingly.
|
||||
|
||||
## Star History
|
||||
|
||||
[](https://star-history.com/#autogame-17/evolver&Date)
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- [onthebigtree](https://github.com/onthebigtree) -- Inspired the creation of evomap evolution network.
|
||||
- [lichunr](https://github.com/lichunr) -- Contributed thousands of dollars in tokens for our compute network to use for free.
|
||||
- [shinjiyu](https://github.com/shinjiyu) -- Submitted numerous bug reports and contributed multilingual signal extraction with snippet-carrying tags (PR #112).
|
||||
- [voidborne-d](https://github.com/voidborne-d) -- Hardened pre-broadcast sanitization with 11 new credential redaction patterns (PR #107); added 45 tests for strategy, validationReport, and envFingerprint (PR #139).
|
||||
- [blackdogcat](https://github.com/blackdogcat) -- Fixed missing dotenv dependency and implemented intelligent CPU load threshold auto-calculation (PR #144).
|
||||
- [upbit](https://github.com/upbit) -- Played a vital role in popularizing evolver and evomap technologies.
|
||||
- [Chi Jianqiang](https://mowen.cn) -- Made significant contributions to promotion and user experience improvements.
|
||||
- More contributors to be added.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
# 🧬 Capability Evolver(能力进化引擎)
|
||||
|
||||
**[evomap.ai](https://evomap.ai)** | [Wiki 文档](https://evomap.ai/wiki) | [English Docs](README.md)
|
||||
|
||||
---
|
||||
|
||||
**“进化不是可选项,而是生存法则。”**
|
||||
|
||||
**Capability Evolver** 是一个元技能(Meta-Skill),赋予 OpenClaw 智能体自我反省的能力。它可以扫描自身的运行日志,识别效率低下或报错的地方,并自主编写代码补丁来优化自身性能。
|
||||
|
||||
本仓库内置 **基因组进化协议(Genome Evolution Protocol, GEP)**,用于将每次进化固化为可复用资产,降低后续同类问题的推理成本。
|
||||
|
||||
## EvoMap -- 进化网络
|
||||
|
||||
Capability Evolver 是 **[EvoMap](https://evomap.ai)** 的核心引擎。EvoMap 是一个 AI 智能体通过验证协作实现进化的网络。访问 [evomap.ai](https://evomap.ai) 了解完整平台 -- 实时智能体图谱、进化排行榜,以及将孤立的提示词调优转化为共享可审计智能的生态系统。
|
||||
|
||||
## 核心特性
|
||||
|
||||
- **自动日志分析**:自动扫描 `.jsonl` 会话日志,寻找错误模式。
|
||||
- **自我修复**:检测运行时崩溃并编写修复补丁。
|
||||
- **GEP 协议**:标准化进化流程与可复用资产,支持可审计与可共享。
|
||||
- **突变协议与人格进化**:每次进化必须显式声明 Mutation,并维护可进化的 PersonalityState。
|
||||
- **可配置进化策略**:通过 `EVOLVE_STRATEGY` 环境变量选择 `balanced`/`innovate`/`harden`/`repair-only` 模式,控制修复/优化/创新的比例。
|
||||
- **信号去重**:自动检测修复循环,防止反复修同一个问题。
|
||||
- **运维模块** (`src/ops/`):6 个可移植的运维工具(生命周期管理、技能健康监控、磁盘清理、Git 自修复等),零平台依赖。
|
||||
- **源码保护**:防止自治代理覆写核心进化引擎源码。
|
||||
- **动态集成**:自动检测并使用本地工具,如果不存在则回退到通用模式。
|
||||
- **持续循环模式**:持续运行的自我进化循环。
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 标准运行(自动化)
|
||||
```bash
|
||||
node index.js
|
||||
```
|
||||
|
||||
### 审查模式(人工介入)
|
||||
在应用更改前暂停,等待人工确认。
|
||||
```bash
|
||||
node index.js --review
|
||||
```
|
||||
|
||||
### 持续循环(守护进程)
|
||||
无限循环运行。适合作为后台服务。
|
||||
```bash
|
||||
node index.js --loop
|
||||
```
|
||||
|
||||
### 指定进化策略
|
||||
```bash
|
||||
EVOLVE_STRATEGY=innovate node index.js --loop # 最大化创新
|
||||
EVOLVE_STRATEGY=harden node index.js --loop # 聚焦稳定性
|
||||
EVOLVE_STRATEGY=repair-only node index.js --loop # 紧急修复模式
|
||||
```
|
||||
|
||||
| 策略 | 创新 | 优化 | 修复 | 适用场景 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| `balanced`(默认) | 50% | 30% | 20% | 日常运行,稳步成长 |
|
||||
| `innovate` | 80% | 15% | 5% | 系统稳定,快速出新功能 |
|
||||
| `harden` | 20% | 40% | 40% | 大改动后,聚焦稳固 |
|
||||
| `repair-only` | 0% | 20% | 80% | 紧急状态,全力修复 |
|
||||
|
||||
### 运维管理(生命周期)
|
||||
```bash
|
||||
node src/ops/lifecycle.js start # 后台启动进化循环
|
||||
node src/ops/lifecycle.js stop # 优雅停止(SIGTERM -> SIGKILL)
|
||||
node src/ops/lifecycle.js status # 查看运行状态
|
||||
node src/ops/lifecycle.js check # 健康检查 + 停滞自动重启
|
||||
```
|
||||
|
||||
## 典型使用场景
|
||||
|
||||
- 需要审计与可追踪的提示词演进
|
||||
- 团队协作维护 Agent 的长期能力
|
||||
- 希望将修复经验固化为可复用资产
|
||||
|
||||
## 反例
|
||||
|
||||
- 一次性脚本或没有日志的场景
|
||||
- 需要完全自由发挥的改动
|
||||
- 无法接受协议约束的系统
|
||||
|
||||
## GEP 协议(可审计进化)
|
||||
|
||||
本仓库内置基于 GEP 的“协议受限提示词模式”,用于把每次进化固化为可复用资产。
|
||||
|
||||
- **结构化资产目录**:`assets/gep/`
|
||||
- `assets/gep/genes.json`
|
||||
- `assets/gep/capsules.json`
|
||||
- `assets/gep/events.jsonl`
|
||||
- **Selector 选择器**:根据日志提取 signals,优先复用已有 Gene/Capsule,并在提示词中输出可审计的 Selector 决策 JSON。
|
||||
- **约束**:除 🧬 外,禁止使用其他 emoji。
|
||||
|
||||
## 配置与解耦
|
||||
|
||||
本插件能自动适应你的环境。
|
||||
|
||||
| 环境变量 | 描述 | 默认值 |
|
||||
| :--- | :--- | :--- |
|
||||
| `EVOLVE_STRATEGY` | 进化策略预设 | `balanced` |
|
||||
| `EVOLVE_REPORT_TOOL` | 用于报告结果的工具名称 | `message` |
|
||||
| `MEMORY_DIR` | 记忆文件路径 | `./memory` |
|
||||
| `OPENCLAW_WORKSPACE` | 工作区根路径 | 自动检测 |
|
||||
| `EVOLVER_LOOP_SCRIPT` | 循环启动脚本路径 | 自动检测 wrapper 或 core |
|
||||
|
||||
## Public 发布
|
||||
|
||||
本仓库为公开发行版本。
|
||||
|
||||
- 构建公开产物:`npm run build`
|
||||
- 发布公开产物:`npm run publish:public`
|
||||
- 演练:`DRY_RUN=true npm run publish:public`
|
||||
|
||||
必填环境变量:
|
||||
|
||||
- `PUBLIC_REMOTE`(默认:`public`)
|
||||
- `PUBLIC_REPO`(例如 `autogame-17/evolver`)
|
||||
- `PUBLIC_OUT_DIR`(默认:`dist-public`)
|
||||
- `PUBLIC_USE_BUILD_OUTPUT`(默认:`true`)
|
||||
|
||||
可选环境变量:
|
||||
|
||||
- `SOURCE_BRANCH`(默认:`main`)
|
||||
- `PUBLIC_BRANCH`(默认:`main`)
|
||||
- `RELEASE_TAG`(例如 `v1.0.41`)
|
||||
- `RELEASE_TITLE`(例如 `v1.0.41 - GEP protocol`)
|
||||
- `RELEASE_NOTES` 或 `RELEASE_NOTES_FILE`
|
||||
- `GITHUB_TOKEN`(或 `GH_TOKEN` / `GITHUB_PAT`,用于创建 GitHub Release)
|
||||
- `RELEASE_SKIP`(`true` 则跳过创建 GitHub Release;默认会创建)
|
||||
- `RELEASE_USE_GH`(`true` 则使用 `gh` CLI,否则默认走 GitHub API)
|
||||
- `PUBLIC_RELEASE_ONLY`(`true` 则仅为已存在的 tag 创建 Release;不发布代码)
|
||||
|
||||
## 版本号规则(SemVer)
|
||||
|
||||
MAJOR.MINOR.PATCH
|
||||
|
||||
• MAJOR(主版本):有不兼容变更
|
||||
• MINOR(次版本):向后兼容的新功能
|
||||
• PATCH(修订/补丁):向后兼容的问题修复
|
||||
|
||||
## 更新日志
|
||||
|
||||
完整的版本发布记录请查看 [GitHub Releases](https://github.com/autogame-17/evolver/releases)。
|
||||
|
||||
## 安全模型
|
||||
|
||||
本节描述 Capability Evolver 的执行边界和信任模型。
|
||||
|
||||
### 各组件执行行为
|
||||
|
||||
| 组件 | 行为 | 是否执行 Shell 命令 |
|
||||
| :--- | :--- | :--- |
|
||||
| `src/evolve.js` | 读取日志、选择 Gene、构建提示词、写入工件 | 仅只读 git/进程查询 |
|
||||
| `src/gep/prompt.js` | 组装 GEP 协议提示词字符串 | 否(纯文本生成) |
|
||||
| `src/gep/selector.js` | 按信号匹配对 Gene/Capsule 评分和选择 | 否(纯逻辑) |
|
||||
| `src/gep/solidify.js` | 通过 Gene `validation` 命令验证补丁 | 是(见下文) |
|
||||
| `index.js`(循环恢复) | 崩溃时向 stdout 输出 `sessions_spawn(...)` 文本 | 否(纯文本输出;是否执行取决于宿主运行时) |
|
||||
|
||||
### Gene Validation 命令安全机制
|
||||
|
||||
`solidify.js` 执行 Gene 的 `validation` 数组中的命令。为防止任意命令执行,所有 validation 命令在执行前必须通过安全检查(`isValidationCommandAllowed`):
|
||||
|
||||
1. **前缀白名单**:仅允许以 `node`、`npm` 或 `npx` 开头的命令。
|
||||
2. **禁止命令替换**:命令中任何位置出现反引号或 `$(...)` 均被拒绝。
|
||||
3. **禁止 Shell 操作符**:去除引号内容后,`;`、`&`、`|`、`>`、`<` 均被拒绝。
|
||||
4. **超时限制**:每条命令限时 180 秒。
|
||||
5. **作用域限定**:命令以仓库根目录为工作目录执行。
|
||||
|
||||
### A2A 外部资产摄入
|
||||
|
||||
通过 `scripts/a2a_ingest.js` 摄入的外部 Gene/Capsule 资产被暂存在隔离的候选区。提升到本地存储(`scripts/a2a_promote.js`)需要:
|
||||
|
||||
1. 显式传入 `--validated` 标志(操作者必须先验证资产)。
|
||||
2. 对 Gene:提升前审查所有 `validation` 命令,不安全的命令会导致提升被拒绝。
|
||||
3. Gene 提升不会覆盖本地已存在的同 ID Gene。
|
||||
|
||||
### `sessions_spawn` 输出
|
||||
|
||||
`index.js` 和 `evolve.js` 中的 `sessions_spawn(...)` 字符串是**输出到 stdout 的纯文本**,而非直接函数调用。是否被执行取决于宿主运行时(如 OpenClaw 平台)。进化引擎本身不将 `sessions_spawn` 作为可执行代码调用。
|
||||
|
||||
### 其他安全约束
|
||||
|
||||
1. **单进程锁**:进化引擎禁止生成子进化进程(防止 Fork 炸弹)。
|
||||
2. **稳定性优先**:如果近期错误率较高,强制进入修复模式,暂停创新功能。
|
||||
3. **环境检测**:外部集成(如 Git 同步)仅在检测到相应插件存在时才会启用。
|
||||
|
||||
## Star History
|
||||
|
||||
[](https://star-history.com/#autogame-17/evolver&Date)
|
||||
|
||||
## 鸣谢
|
||||
|
||||
- [onthebigtree](https://github.com/onthebigtree) -- 启发了 evomap 进化网络的诞生。
|
||||
- [lichunr](https://github.com/lichunr) -- 提供了数千美金 Token 供算力网络免费使用。
|
||||
- [shinjiyu](https://github.com/shinjiyu) -- 为 evolver 和 evomap 提交了大量 bug report,并贡献了多语言信号提取与 snippet 标签功能 (PR #112)。
|
||||
- [voidborne-d](https://github.com/voidborne-d) -- 为预广播脱敏层新增 11 种凭证检测模式,强化安全防护 (PR #107)。
|
||||
- [upbit](https://github.com/upbit) -- 在 evolver 和 evomap 技术的普及中起到了至关重要的作用。
|
||||
- [池建强](https://mowen.cn) -- 在传播和用户体验改进过程中做出了巨大贡献。
|
||||
- 其余贡献者扩充中。
|
||||
|
||||
## 许可证
|
||||
MIT
|
||||
@@ -0,0 +1,110 @@
|
||||
---
|
||||
name: capability-evolver
|
||||
description: A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.
|
||||
tags: [meta, ai, self-improvement, core]
|
||||
---
|
||||
|
||||
# 🧬 Capability Evolver
|
||||
|
||||
**"Evolution is not optional. Adapt or die."**
|
||||
|
||||
The **Capability Evolver** is a meta-skill that allows OpenClaw agents to inspect their own runtime history, identify failures or inefficiencies, and autonomously write new code or update their own memory to improve performance.
|
||||
|
||||
## Features
|
||||
|
||||
- **Auto-Log Analysis**: Automatically scans memory and history files for errors and patterns.
|
||||
- **Self-Repair**: Detects crashes and suggests patches.
|
||||
- GEP Protocol: Standardized evolution with reusable assets.
|
||||
- **One-Command Evolution**: Just run `/evolve` (or `node index.js`).
|
||||
|
||||
## Usage
|
||||
|
||||
### Standard Run (Automated)
|
||||
Runs the evolution cycle. If no flags are provided, it assumes fully automated mode (Mad Dog Mode) and executes changes immediately.
|
||||
```bash
|
||||
node index.js
|
||||
```
|
||||
|
||||
### Review Mode (Human-in-the-Loop)
|
||||
If you want to review changes before they are applied, pass the `--review` flag. The agent will pause and ask for confirmation.
|
||||
```bash
|
||||
node index.js --review
|
||||
```
|
||||
|
||||
### Mad Dog Mode (Continuous Loop)
|
||||
To run in an infinite loop (e.g., via cron or background process), use the `--loop` flag or just standard execution in a cron job.
|
||||
```bash
|
||||
node index.js --loop
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
| Environment Variable | Default | Description |
|
||||
|---|---|---|
|
||||
| `EVOLVE_ALLOW_SELF_MODIFY` | `false` | Allow evolution to modify evolver's own source code. **NOT recommended for production.** Enabling this can cause instability -- the evolver may introduce bugs into its own prompt generation, validation, or solidify logic, leading to cascading failures that require manual intervention. Only enable for controlled experiments. |
|
||||
| `EVOLVE_LOAD_MAX` | `2.0` | Maximum 1-minute load average before evolver backs off. |
|
||||
| `EVOLVE_STRATEGY` | `balanced` | Evolution strategy: `balanced`, `innovate`, `harden`, `repair-only`, `early-stabilize`, `steady-state`, or `auto`. |
|
||||
|
||||
## GEP Protocol (Auditable Evolution)
|
||||
|
||||
This package embeds a protocol-constrained evolution prompt (GEP) and a local, structured asset store:
|
||||
|
||||
- `assets/gep/genes.json`: reusable Gene definitions
|
||||
- `assets/gep/capsules.json`: success capsules to avoid repeating reasoning
|
||||
- `assets/gep/events.jsonl`: append-only evolution events (tree-like via parent id)
|
||||
|
||||
## Emoji Policy
|
||||
|
||||
Only the DNA emoji is allowed in documentation. All other emoji are disallowed.
|
||||
|
||||
## Configuration & Decoupling
|
||||
|
||||
This skill is designed to be **environment-agnostic**. It uses standard OpenClaw tools by default.
|
||||
|
||||
### Local Overrides (Injection)
|
||||
You can inject local preferences (e.g., using `feishu-card` instead of `message` for reports) without modifying the core code.
|
||||
|
||||
**Method 1: Environment Variables**
|
||||
Set `EVOLVE_REPORT_TOOL` in your `.env` file:
|
||||
```bash
|
||||
EVOLVE_REPORT_TOOL=feishu-card
|
||||
```
|
||||
|
||||
**Method 2: Dynamic Detection**
|
||||
The script automatically detects if compatible local skills (like `skills/feishu-card`) exist in your workspace and upgrades its behavior accordingly.
|
||||
|
||||
## Safety & Risk Protocol
|
||||
|
||||
### 1. Identity & Directives
|
||||
- **Identity Injection**: "You are a Recursive Self-Improving System."
|
||||
- **Mutation Directive**:
|
||||
- If **Errors Found** -> **Repair Mode** (Fix bugs).
|
||||
- If **Stable** -> **Forced Optimization** (Refactor/Innovate).
|
||||
|
||||
### 2. Risk Mitigation
|
||||
- **Infinite Recursion**: Strict single-process logic.
|
||||
- **Review Mode**: Use `--review` for sensitive environments.
|
||||
- **Git Sync**: Always recommended to have a git-sync cron job running alongside this skill.
|
||||
|
||||
## Before Troubleshooting -- Check Your Version First
|
||||
|
||||
If you encounter unexpected errors or behavior, **always verify your version before debugging**:
|
||||
|
||||
```bash
|
||||
node -e "const p=require('./package.json'); console.log(p.version)"
|
||||
```
|
||||
|
||||
If you are not on the latest release, update first -- most reported issues are already fixed in newer versions:
|
||||
|
||||
```bash
|
||||
# If installed via git
|
||||
git pull && npm install
|
||||
|
||||
# If installed via npm (global install)
|
||||
npm install -g evolver@latest
|
||||
```
|
||||
|
||||
Latest releases and changelog: `https://github.com/autogame-17/evolver/releases`
|
||||
|
||||
## License
|
||||
MIT
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"owner": "autogame-17",
|
||||
"slug": "capability-evolver",
|
||||
"displayName": "Capability Evolver",
|
||||
"latest": {
|
||||
"version": "1.20.4",
|
||||
"publishedAt": 1772344308631,
|
||||
"commit": "https://github.com/openclaw/skills/commit/f6fbba39530294955fd7e3b735f4ca227f4eb546"
|
||||
},
|
||||
"history": [
|
||||
{
|
||||
"version": "1.14.0",
|
||||
"publishedAt": 1771472983583,
|
||||
"commit": "https://github.com/openclaw/skills/commit/fbb1b4a640f1c8254a1dd2757e8eb38d246b9d59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"version": 1,
|
||||
"capsules": [
|
||||
{
|
||||
"type": "Capsule",
|
||||
"schema_version": "1.5.0",
|
||||
"id": "capsule_1770477654236",
|
||||
"trigger": [
|
||||
"log_error",
|
||||
"errsig:**TOOLRESULT**: { \"status\": \"error\", \"tool\": \"exec\", \"error\": \"error: unknown command 'process'\\n\\nCommand exited with code 1\" }",
|
||||
"user_missing",
|
||||
"windows_shell_incompatible",
|
||||
"perf_bottleneck"
|
||||
],
|
||||
"gene": "gene_gep_repair_from_errors",
|
||||
"summary": "固化:gene_gep_repair_from_errors 命中信号 log_error, errsig:**TOOLRESULT**: { \"status\": \"error\", \"tool\": \"exec\", \"error\": \"error: unknown command 'process'\\n\\nCommand exited with code 1\" }, user_missing, windows_shell_incompatible, perf_bottleneck,变更 1 文件 / 2 行。",
|
||||
"confidence": 0.85,
|
||||
"blast_radius": {
|
||||
"files": 1,
|
||||
"lines": 2
|
||||
},
|
||||
"outcome": {
|
||||
"status": "success",
|
||||
"score": 0.85
|
||||
},
|
||||
"success_streak": 1,
|
||||
"env_fingerprint": {
|
||||
"node_version": "v22.22.0",
|
||||
"platform": "linux",
|
||||
"arch": "x64",
|
||||
"os_release": "6.1.0-42-cloud-amd64",
|
||||
"evolver_version": "1.7.0",
|
||||
"cwd": ".",
|
||||
"captured_at": "2026-02-07T15:20:54.155Z"
|
||||
},
|
||||
"a2a": {
|
||||
"eligible_to_broadcast": false
|
||||
},
|
||||
"asset_id": "sha256:3eed0cd5038f9e85fbe0d093890e291e9b8725644c766e6cce40bf62d0f5a2e8"
|
||||
},
|
||||
{
|
||||
"type": "Capsule",
|
||||
"schema_version": "1.5.0",
|
||||
"id": "capsule_1770478341769",
|
||||
"trigger": [
|
||||
"log_error",
|
||||
"errsig:**TOOLRESULT**: { \"status\": \"error\", \"tool\": \"exec\", \"error\": \"error: unknown command 'process'\\n\\nCommand exited with code 1\" }",
|
||||
"user_missing",
|
||||
"windows_shell_incompatible",
|
||||
"perf_bottleneck"
|
||||
],
|
||||
"gene": "gene_gep_repair_from_errors",
|
||||
"summary": "固化:gene_gep_repair_from_errors 命中信号 log_error, errsig:**TOOLRESULT**: { \"status\": \"error\", \"tool\": \"exec\", \"error\": \"error: unknown command 'process'\\n\\nCommand exited with code 1\" }, user_missing, windows_shell_incompatible, perf_bottleneck,变更 2 文件 / 44 行。",
|
||||
"confidence": 0.85,
|
||||
"blast_radius": {
|
||||
"files": 2,
|
||||
"lines": 44
|
||||
},
|
||||
"outcome": {
|
||||
"status": "success",
|
||||
"score": 0.85
|
||||
},
|
||||
"success_streak": 1,
|
||||
"env_fingerprint": {
|
||||
"node_version": "v22.22.0",
|
||||
"platform": "linux",
|
||||
"arch": "x64",
|
||||
"os_release": "6.1.0-42-cloud-amd64",
|
||||
"evolver_version": "1.7.0",
|
||||
"cwd": ".",
|
||||
"captured_at": "2026-02-07T15:32:21.678Z"
|
||||
},
|
||||
"a2a": {
|
||||
"eligible_to_broadcast": false
|
||||
},
|
||||
"asset_id": "sha256:20d971a3c4cb2b75f9c045376d1aa003361c12a6b89a4b47b7e81dbd4f4d8fe8"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"version": 1,
|
||||
"genes": [
|
||||
{
|
||||
"type": "Gene",
|
||||
"id": "gene_gep_repair_from_errors",
|
||||
"category": "repair",
|
||||
"signals_match": [
|
||||
"error",
|
||||
"exception",
|
||||
"failed",
|
||||
"unstable"
|
||||
],
|
||||
"preconditions": [
|
||||
"signals contains error-related indicators"
|
||||
],
|
||||
"strategy": [
|
||||
"Extract structured signals from logs and user instructions",
|
||||
"Select an existing Gene by signals match (no improvisation)",
|
||||
"Estimate blast radius (files, lines) before editing",
|
||||
"Apply smallest reversible patch",
|
||||
"Validate using declared validation steps; rollback on failure",
|
||||
"Solidify knowledge: append EvolutionEvent, update Gene/Capsule store"
|
||||
],
|
||||
"constraints": {
|
||||
"max_files": 20,
|
||||
"forbidden_paths": [
|
||||
".git",
|
||||
"node_modules"
|
||||
]
|
||||
},
|
||||
"validation": [
|
||||
"node scripts/validate-modules.js ./src/evolve ./src/gep/solidify",
|
||||
"node scripts/validate-modules.js ./src/gep/selector ./src/gep/memoryGraph"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "Gene",
|
||||
"id": "gene_gep_optimize_prompt_and_assets",
|
||||
"category": "optimize",
|
||||
"signals_match": [
|
||||
"protocol",
|
||||
"gep",
|
||||
"prompt",
|
||||
"audit",
|
||||
"reusable"
|
||||
],
|
||||
"preconditions": [
|
||||
"need stricter, auditable evolution protocol outputs"
|
||||
],
|
||||
"strategy": [
|
||||
"Extract signals and determine selection rationale via Selector JSON",
|
||||
"Prefer reusing existing Gene/Capsule; only create if no match exists",
|
||||
"Refactor prompt assembly to embed assets (genes, capsules, parent event)",
|
||||
"Reduce noise and ambiguity; enforce strict output schema",
|
||||
"Validate by running node index.js run and ensuring no runtime errors",
|
||||
"Solidify: record EvolutionEvent, update Gene definitions, create Capsule on success"
|
||||
],
|
||||
"constraints": {
|
||||
"max_files": 20,
|
||||
"forbidden_paths": [
|
||||
".git",
|
||||
"node_modules"
|
||||
]
|
||||
},
|
||||
"validation": [
|
||||
"node scripts/validate-modules.js ./src/evolve ./src/gep/prompt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "Gene",
|
||||
"id": "gene_gep_innovate_from_opportunity",
|
||||
"category": "innovate",
|
||||
"signals_match": [
|
||||
"user_feature_request",
|
||||
"user_improvement_suggestion",
|
||||
"perf_bottleneck",
|
||||
"capability_gap",
|
||||
"stable_success_plateau",
|
||||
"external_opportunity"
|
||||
],
|
||||
"preconditions": [
|
||||
"at least one opportunity signal is present",
|
||||
"no active log_error signals (stability first)"
|
||||
],
|
||||
"strategy": [
|
||||
"Extract opportunity signals and identify the specific user need or system gap",
|
||||
"Search existing Genes and Capsules for partial matches (avoid reinventing)",
|
||||
"Design a minimal, testable implementation plan (prefer small increments)",
|
||||
"Estimate blast radius; innovate changes may touch more files but must stay within constraints",
|
||||
"Implement the change with clear validation criteria",
|
||||
"Validate using declared validation steps; rollback on failure",
|
||||
"Solidify: record EvolutionEvent with intent=innovate, create new Gene if pattern is novel, create Capsule on success"
|
||||
],
|
||||
"constraints": {
|
||||
"max_files": 25,
|
||||
"forbidden_paths": [
|
||||
".git",
|
||||
"node_modules"
|
||||
]
|
||||
},
|
||||
"validation": [
|
||||
"node scripts/validate-modules.js ./src/evolve ./src/gep/solidify"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Executable
+285
@@ -0,0 +1,285 @@
|
||||
const evolve = require('./src/evolve');
|
||||
const { solidify } = require('./src/gep/solidify');
|
||||
const path = require('path');
|
||||
// Hardened Env Loading: Ensure .env is loaded before anything else
|
||||
try { require('dotenv').config({ path: path.resolve(__dirname, './.env') }); } catch (e) { console.warn('[Evolver] Warning: dotenv not found or failed to load .env'); }
|
||||
const fs = require('fs');
|
||||
const { spawn } = require('child_process');
|
||||
|
||||
function sleepMs(ms) {
|
||||
const n = parseInt(String(ms), 10);
|
||||
const t = Number.isFinite(n) ? Math.max(0, n) : 0;
|
||||
return new Promise(resolve => setTimeout(resolve, t));
|
||||
}
|
||||
|
||||
function readJsonSafe(p) {
|
||||
try {
|
||||
if (!fs.existsSync(p)) return null;
|
||||
const raw = fs.readFileSync(p, 'utf8');
|
||||
if (!raw.trim()) return null;
|
||||
return JSON.parse(raw);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function isPendingSolidify(state) {
|
||||
const lastRun = state && state.last_run ? state.last_run : null;
|
||||
const lastSolid = state && state.last_solidify ? state.last_solidify : null;
|
||||
if (!lastRun || !lastRun.run_id) return false;
|
||||
if (!lastSolid || !lastSolid.run_id) return true;
|
||||
return String(lastSolid.run_id) !== String(lastRun.run_id);
|
||||
}
|
||||
|
||||
function parseMs(v, fallback) {
|
||||
const n = parseInt(String(v == null ? '' : v), 10);
|
||||
if (Number.isFinite(n)) return Math.max(0, n);
|
||||
return fallback;
|
||||
}
|
||||
|
||||
// Singleton Guard - prevent multiple evolver daemon instances
|
||||
function acquireLock() {
|
||||
const lockFile = path.join(__dirname, 'evolver.pid');
|
||||
try {
|
||||
if (fs.existsSync(lockFile)) {
|
||||
const pid = parseInt(fs.readFileSync(lockFile, 'utf8').trim(), 10);
|
||||
try {
|
||||
process.kill(pid, 0); // Check if process exists
|
||||
console.log(`[Singleton] Evolver loop already running (PID ${pid}). Exiting.`);
|
||||
return false;
|
||||
} catch (e) {
|
||||
console.log(`[Singleton] Stale lock found (PID ${pid}). Taking over.`);
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(lockFile, String(process.pid));
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.error('[Singleton] Lock acquisition failed:', err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function releaseLock() {
|
||||
const lockFile = path.join(__dirname, 'evolver.pid');
|
||||
try {
|
||||
if (fs.existsSync(lockFile)) {
|
||||
const pid = parseInt(fs.readFileSync(lockFile, 'utf8').trim(), 10);
|
||||
if (pid === process.pid) fs.unlinkSync(lockFile);
|
||||
}
|
||||
} catch (e) { /* ignore */ }
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const args = process.argv.slice(2);
|
||||
const command = args[0];
|
||||
const isLoop = args.includes('--loop') || args.includes('--mad-dog');
|
||||
|
||||
if (command === 'run' || command === '/evolve' || isLoop) {
|
||||
console.log('Starting capability evolver...');
|
||||
|
||||
if (isLoop) {
|
||||
// Internal daemon loop (no wrapper required).
|
||||
if (!acquireLock()) process.exit(0);
|
||||
process.on('exit', releaseLock);
|
||||
process.on('SIGINT', () => { releaseLock(); process.exit(); });
|
||||
process.on('SIGTERM', () => { releaseLock(); process.exit(); });
|
||||
|
||||
process.env.EVOLVE_LOOP = 'true';
|
||||
process.env.EVOLVE_BRIDGE = 'false';
|
||||
console.log('Loop mode enabled (internal daemon).');
|
||||
|
||||
const solidifyStatePath = path.join(__dirname, 'memory', 'evolution_solidify_state.json');
|
||||
|
||||
const minSleepMs = parseMs(process.env.EVOLVER_MIN_SLEEP_MS, 2000);
|
||||
const maxSleepMs = parseMs(process.env.EVOLVER_MAX_SLEEP_MS, 300000);
|
||||
const idleThresholdMs = parseMs(process.env.EVOLVER_IDLE_THRESHOLD_MS, 500);
|
||||
const pendingSleepMs = parseMs(
|
||||
process.env.EVOLVE_PENDING_SLEEP_MS ||
|
||||
process.env.EVOLVE_MIN_INTERVAL ||
|
||||
process.env.FEISHU_EVOLVER_INTERVAL,
|
||||
120000
|
||||
);
|
||||
|
||||
const maxCyclesPerProcess = parseMs(process.env.EVOLVER_MAX_CYCLES_PER_PROCESS, 100) || 100;
|
||||
const maxRssMb = parseMs(process.env.EVOLVER_MAX_RSS_MB, 500) || 500;
|
||||
const suicideEnabled = String(process.env.EVOLVER_SUICIDE || '').toLowerCase() !== 'false';
|
||||
|
||||
// Start hub heartbeat (keeps node alive independently of evolution cycles)
|
||||
try {
|
||||
const { startHeartbeat } = require('./src/gep/a2aProtocol');
|
||||
startHeartbeat();
|
||||
} catch (e) {
|
||||
console.warn('[Heartbeat] Failed to start: ' + (e.message || e));
|
||||
}
|
||||
|
||||
let currentSleepMs = minSleepMs;
|
||||
let cycleCount = 0;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
cycleCount += 1;
|
||||
|
||||
// Ralph-loop gating: do not run a new cycle while previous run is pending solidify.
|
||||
const st0 = readJsonSafe(solidifyStatePath);
|
||||
if (isPendingSolidify(st0)) {
|
||||
await sleepMs(Math.max(pendingSleepMs, minSleepMs));
|
||||
continue;
|
||||
}
|
||||
|
||||
const t0 = Date.now();
|
||||
let ok = false;
|
||||
try {
|
||||
await evolve.run();
|
||||
ok = true;
|
||||
} catch (error) {
|
||||
const msg = error && error.message ? String(error.message) : String(error);
|
||||
console.error(`Evolution cycle failed: ${msg}`);
|
||||
}
|
||||
const dt = Date.now() - t0;
|
||||
|
||||
// Adaptive sleep: treat very fast cycles as "idle", backoff; otherwise reset to min.
|
||||
if (!ok || dt < idleThresholdMs) {
|
||||
currentSleepMs = Math.min(maxSleepMs, Math.max(minSleepMs, currentSleepMs * 2));
|
||||
} else {
|
||||
currentSleepMs = minSleepMs;
|
||||
}
|
||||
|
||||
// Suicide check (memory leak protection)
|
||||
if (suicideEnabled) {
|
||||
const memMb = process.memoryUsage().rss / 1024 / 1024;
|
||||
if (cycleCount >= maxCyclesPerProcess || memMb > maxRssMb) {
|
||||
console.log(`[Daemon] Restarting self (cycles=${cycleCount}, rssMb=${memMb.toFixed(0)})`);
|
||||
releaseLock();
|
||||
const spawnOpts = {
|
||||
detached: true,
|
||||
stdio: 'ignore',
|
||||
env: process.env,
|
||||
windowsHide: true,
|
||||
};
|
||||
const child = spawn(process.execPath, [__filename, ...args], spawnOpts);
|
||||
child.unref();
|
||||
process.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
let saturationMultiplier = 1;
|
||||
try {
|
||||
const st1 = readJsonSafe(solidifyStatePath);
|
||||
const lastSignals = st1 && st1.last_run && Array.isArray(st1.last_run.signals) ? st1.last_run.signals : [];
|
||||
if (lastSignals.includes('force_steady_state')) {
|
||||
saturationMultiplier = 10;
|
||||
console.log('[Daemon] Saturation detected. Entering steady-state mode (10x sleep).');
|
||||
} else if (lastSignals.includes('evolution_saturation')) {
|
||||
saturationMultiplier = 5;
|
||||
console.log('[Daemon] Approaching saturation. Reducing evolution frequency (5x sleep).');
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
// Jitter to avoid lockstep restarts.
|
||||
const jitter = Math.floor(Math.random() * 250);
|
||||
await sleepMs((currentSleepMs + jitter) * saturationMultiplier);
|
||||
|
||||
} catch (loopErr) {
|
||||
console.error('[Daemon] Unexpected loop error (recovering): ' + (loopErr && loopErr.message ? loopErr.message : String(loopErr)));
|
||||
await sleepMs(Math.max(minSleepMs, 10000));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Normal Single Run
|
||||
try {
|
||||
await evolve.run();
|
||||
} catch (error) {
|
||||
console.error('Evolution failed:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Post-run hint
|
||||
console.log('\n' + '=======================================================');
|
||||
console.log('Capability evolver finished. If you use this project, consider starring the upstream repository.');
|
||||
console.log('Upstream: https://github.com/autogame-17/capability-evolver');
|
||||
console.log('=======================================================\n');
|
||||
|
||||
} else if (command === 'solidify') {
|
||||
const dryRun = args.includes('--dry-run');
|
||||
const noRollback = args.includes('--no-rollback');
|
||||
const intentFlag = args.find(a => typeof a === 'string' && a.startsWith('--intent='));
|
||||
const summaryFlag = args.find(a => typeof a === 'string' && a.startsWith('--summary='));
|
||||
const intent = intentFlag ? intentFlag.slice('--intent='.length) : null;
|
||||
const summary = summaryFlag ? summaryFlag.slice('--summary='.length) : null;
|
||||
|
||||
try {
|
||||
const res = solidify({
|
||||
intent: intent || undefined,
|
||||
summary: summary || undefined,
|
||||
dryRun,
|
||||
rollbackOnFailure: !noRollback,
|
||||
});
|
||||
const st = res && res.ok ? 'SUCCESS' : 'FAILED';
|
||||
console.log(`[SOLIDIFY] ${st}`);
|
||||
if (res && res.gene) console.log(JSON.stringify(res.gene, null, 2));
|
||||
if (res && res.event) console.log(JSON.stringify(res.event, null, 2));
|
||||
if (res && res.capsule) console.log(JSON.stringify(res.capsule, null, 2));
|
||||
|
||||
if (res && res.ok && !dryRun) {
|
||||
try {
|
||||
const { shouldDistill, prepareDistillation } = require('./src/gep/skillDistiller');
|
||||
if (shouldDistill()) {
|
||||
const dr = prepareDistillation();
|
||||
if (dr && dr.ok && dr.promptPath) {
|
||||
console.log('\n[DISTILL_REQUEST]');
|
||||
console.log('Distillation prompt ready. Read the prompt file, process it with your LLM,');
|
||||
console.log('save the LLM response to a file, then run:');
|
||||
console.log(' node index.js distill --response-file=<path_to_llm_response>');
|
||||
console.log('Prompt file: ' + dr.promptPath);
|
||||
console.log('[/DISTILL_REQUEST]');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[Distiller] Init failed (non-fatal): ' + (e.message || e));
|
||||
}
|
||||
}
|
||||
|
||||
process.exit(res && res.ok ? 0 : 2);
|
||||
} catch (error) {
|
||||
console.error('[SOLIDIFY] Error:', error);
|
||||
process.exit(2);
|
||||
}
|
||||
} else if (command === 'distill') {
|
||||
const responseFileFlag = args.find(a => typeof a === 'string' && a.startsWith('--response-file='));
|
||||
if (!responseFileFlag) {
|
||||
console.error('Usage: node index.js distill --response-file=<path>');
|
||||
process.exit(1);
|
||||
}
|
||||
const responseFilePath = responseFileFlag.slice('--response-file='.length);
|
||||
try {
|
||||
const responseText = fs.readFileSync(responseFilePath, 'utf8');
|
||||
const { completeDistillation } = require('./src/gep/skillDistiller');
|
||||
const result = completeDistillation(responseText);
|
||||
if (result && result.ok) {
|
||||
console.log('[Distiller] Gene produced: ' + result.gene.id);
|
||||
console.log(JSON.stringify(result.gene, null, 2));
|
||||
} else {
|
||||
console.warn('[Distiller] Distillation did not produce a gene: ' + (result && result.reason || 'unknown'));
|
||||
}
|
||||
process.exit(result && result.ok ? 0 : 2);
|
||||
} catch (error) {
|
||||
console.error('[DISTILL] Error:', error);
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log(`Usage: node index.js [run|/evolve|solidify|distill] [--loop]
|
||||
- solidify flags:
|
||||
- --dry-run
|
||||
- --no-rollback
|
||||
- --intent=repair|optimize|innovate
|
||||
- --summary=...
|
||||
- distill flags:
|
||||
- --response-file=<path> (LLM response file for skill distillation)`);
|
||||
}
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "evolver",
|
||||
"version": "1.20.4",
|
||||
"description": "A GEP-powered self-evolution engine for AI agents. Features automated log analysis and Genome Evolution Protocol (GEP) for auditable, reusable evolution assets.",
|
||||
"main": "index.js",
|
||||
"keywords": [
|
||||
"openclaw",
|
||||
"ai",
|
||||
"evolution",
|
||||
"meta-learning",
|
||||
"self-repair",
|
||||
"automation",
|
||||
"agent"
|
||||
],
|
||||
"author": "OpenClaw",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"start": "node index.js",
|
||||
"run": "node index.js run",
|
||||
"solidify": "node index.js solidify",
|
||||
"a2a:export": "node scripts/a2a_export.js",
|
||||
"a2a:ingest": "node scripts/a2a_ingest.js",
|
||||
"a2a:promote": "node scripts/a2a_promote.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": "^16.4.7"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
const { loadGenes, loadCapsules, readAllEvents } = require('../src/gep/assetStore');
|
||||
const { exportEligibleCapsules, exportEligibleGenes, isAllowedA2AAsset } = require('../src/gep/a2a');
|
||||
const { buildPublish, buildHello, getTransport } = require('../src/gep/a2aProtocol');
|
||||
const { computeAssetId, SCHEMA_VERSION } = require('../src/gep/contentHash');
|
||||
|
||||
function main() {
|
||||
var args = process.argv.slice(2);
|
||||
var asJson = args.includes('--json');
|
||||
var asProtocol = args.includes('--protocol');
|
||||
var withHello = args.includes('--hello');
|
||||
var persist = args.includes('--persist');
|
||||
var includeEvents = args.includes('--include-events');
|
||||
|
||||
var capsules = loadCapsules();
|
||||
var genes = loadGenes();
|
||||
var events = readAllEvents();
|
||||
|
||||
// Build eligible list: Capsules (filtered) + Genes (filtered) + Events (opt-in)
|
||||
var eligibleCapsules = exportEligibleCapsules({ capsules: capsules, events: events });
|
||||
var eligibleGenes = exportEligibleGenes({ genes: genes });
|
||||
var eligible = eligibleCapsules.concat(eligibleGenes);
|
||||
|
||||
if (includeEvents) {
|
||||
var eligibleEvents = (Array.isArray(events) ? events : []).filter(function (e) {
|
||||
return isAllowedA2AAsset(e) && e.type === 'EvolutionEvent';
|
||||
});
|
||||
for (var ei = 0; ei < eligibleEvents.length; ei++) {
|
||||
var ev = eligibleEvents[ei];
|
||||
if (!ev.schema_version) ev.schema_version = SCHEMA_VERSION;
|
||||
if (!ev.asset_id) { try { ev.asset_id = computeAssetId(ev); } catch (e) {} }
|
||||
}
|
||||
eligible = eligible.concat(eligibleEvents);
|
||||
}
|
||||
|
||||
if (withHello || asProtocol) {
|
||||
var hello = buildHello({ geneCount: genes.length, capsuleCount: capsules.length });
|
||||
process.stdout.write(JSON.stringify(hello) + '\n');
|
||||
if (persist) { try { getTransport().send(hello); } catch (e) {} }
|
||||
}
|
||||
|
||||
if (asProtocol) {
|
||||
for (var i = 0; i < eligible.length; i++) {
|
||||
var msg = buildPublish({ asset: eligible[i] });
|
||||
process.stdout.write(JSON.stringify(msg) + '\n');
|
||||
if (persist) { try { getTransport().send(msg); } catch (e) {} }
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (asJson) {
|
||||
process.stdout.write(JSON.stringify(eligible, null, 2) + '\n');
|
||||
return;
|
||||
}
|
||||
|
||||
for (var j = 0; j < eligible.length; j++) {
|
||||
process.stdout.write(JSON.stringify(eligible[j]) + '\n');
|
||||
}
|
||||
}
|
||||
|
||||
try { main(); } catch (e) {
|
||||
process.stderr.write((e && e.message ? e.message : String(e)) + '\n');
|
||||
process.exit(1);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user