@co-engram/openclaw 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -0
  3. package/dist/adapter.d.ts +36 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +330 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/auto-onboard.d.ts +19 -0
  8. package/dist/auto-onboard.d.ts.map +1 -0
  9. package/dist/auto-onboard.js +35 -0
  10. package/dist/auto-onboard.js.map +1 -0
  11. package/dist/entry-example.d.ts +10 -0
  12. package/dist/entry-example.d.ts.map +1 -0
  13. package/dist/entry-example.js +10 -0
  14. package/dist/entry-example.js.map +1 -0
  15. package/dist/entry.d.ts +96 -0
  16. package/dist/entry.d.ts.map +1 -0
  17. package/dist/entry.js +228 -0
  18. package/dist/entry.js.map +1 -0
  19. package/dist/index.d.ts +14 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +14 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/json-schemas.d.ts +35 -0
  24. package/dist/json-schemas.d.ts.map +1 -0
  25. package/dist/json-schemas.js +432 -0
  26. package/dist/json-schemas.js.map +1 -0
  27. package/dist/list-intent-detector.d.ts +20 -0
  28. package/dist/list-intent-detector.d.ts.map +1 -0
  29. package/dist/list-intent-detector.js +50 -0
  30. package/dist/list-intent-detector.js.map +1 -0
  31. package/dist/llm-client.d.ts +29 -0
  32. package/dist/llm-client.d.ts.map +1 -0
  33. package/dist/llm-client.js +112 -0
  34. package/dist/llm-client.js.map +1 -0
  35. package/dist/maintenance-runtime.d.ts +31 -0
  36. package/dist/maintenance-runtime.d.ts.map +1 -0
  37. package/dist/maintenance-runtime.js +61 -0
  38. package/dist/maintenance-runtime.js.map +1 -0
  39. package/dist/memory-tools.d.ts +82 -0
  40. package/dist/memory-tools.d.ts.map +1 -0
  41. package/dist/memory-tools.js +237 -0
  42. package/dist/memory-tools.js.map +1 -0
  43. package/dist/plugin-entry.d.ts +98 -0
  44. package/dist/plugin-entry.d.ts.map +1 -0
  45. package/dist/plugin-entry.js +444 -0
  46. package/dist/plugin-entry.js.map +1 -0
  47. package/dist/prompt-builder.d.ts +48 -0
  48. package/dist/prompt-builder.d.ts.map +1 -0
  49. package/dist/prompt-builder.js +33 -0
  50. package/dist/prompt-builder.js.map +1 -0
  51. package/dist/types.d.ts +236 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +29 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/viewer-loader.d.ts +36 -0
  56. package/dist/viewer-loader.d.ts.map +1 -0
  57. package/dist/viewer-loader.js +45 -0
  58. package/dist/viewer-loader.js.map +1 -0
  59. package/openclaw.plugin.json +137 -0
  60. package/package.json +61 -0
  61. package/scripts/setup.mjs +231 -0
  62. package/scripts/sync-deps.mjs +247 -0
@@ -0,0 +1,432 @@
1
+ /**
2
+ * 手写 JSON Schema 字典
3
+ *
4
+ * 与 packages/core/src/tools/schemas.ts 中的 Zod schemas 保持一致。
5
+ * P0 阶段手写避免引入 zod-to-json-schema 依赖。
6
+ * P1 阶段可改用 zod v4 的 z.toJSONSchema() 自动生成。
7
+ *
8
+ * @module @co-engram/openclaw
9
+ */
10
+ const ENGRAM_KIND_ENUM = [
11
+ "observation",
12
+ "fact",
13
+ "pattern",
14
+ "procedure",
15
+ "hypothesis",
16
+ ];
17
+ const ENGRAM_STATUS_ENUM = [
18
+ "active",
19
+ "draft",
20
+ "archived",
21
+ "forgotten",
22
+ ];
23
+ const ENGRAM_FRESHNESS_ENUM = ["fresh", "aging", "stale", "forgotten"];
24
+ const EMOTIONAL_VALENCE_ENUM = ["positive", "negative", "neutral"];
25
+ const SOURCE_TYPE_ENUM = ["firsthand", "secondhand", "inferred"];
26
+ const VISIBILITY_ENUM = ["public", "team", "private", "restricted"];
27
+ const DISCLOSURE_TIER_ENUM = [
28
+ "catalog",
29
+ "digest",
30
+ "content",
31
+ "meta",
32
+ "synapses",
33
+ ];
34
+ const ENGRAM_GET_TIER_ENUM = [
35
+ "catalog",
36
+ "digest",
37
+ "content",
38
+ "meta",
39
+ "synapses",
40
+ "auto",
41
+ ];
42
+ const SYNAPSE_KIND_ENUM = [
43
+ "extends",
44
+ "part_of",
45
+ "similar_to",
46
+ "depends_on",
47
+ "causes",
48
+ "follows",
49
+ "derives_from",
50
+ "contradicts",
51
+ "exemplifies",
52
+ "supersedes",
53
+ "consolidates",
54
+ "contextualizes",
55
+ ];
56
+ const SYNAPSE_DIRECTION_ENUM = ["directional", "bidirectional"];
57
+ const stringField = (description, maxLength, minLength = 1) => ({
58
+ type: "string",
59
+ description,
60
+ minLength,
61
+ ...(maxLength !== undefined ? { maxLength } : {}),
62
+ });
63
+ /** 可选字符串字段(minLength=0 允许空字符串/省略) */
64
+ const optionalStringField = (description, maxLength) => ({
65
+ type: "string",
66
+ description,
67
+ ...(maxLength !== undefined ? { maxLength } : {}),
68
+ });
69
+ const numberField = (description, min = 0, max = 1) => ({
70
+ type: "number",
71
+ description,
72
+ minimum: min,
73
+ maximum: max,
74
+ });
75
+ const engramIdField = stringField("Engram ID");
76
+ const searchFilterSchema = {
77
+ type: "object",
78
+ description: "可选过滤器",
79
+ additionalProperties: false,
80
+ properties: {
81
+ domainTags: { type: "array", items: { type: "string" } },
82
+ kinds: { type: "array", items: { type: "string" } },
83
+ status: {
84
+ type: "array",
85
+ items: { type: "string", enum: ENGRAM_STATUS_ENUM },
86
+ },
87
+ freshness: {
88
+ type: "array",
89
+ items: { type: "string", enum: ENGRAM_FRESHNESS_ENUM },
90
+ },
91
+ emotionalValence: {
92
+ type: "array",
93
+ items: { type: "string", enum: EMOTIONAL_VALENCE_ENUM },
94
+ },
95
+ createdBy: { type: "array", items: { type: "string" } },
96
+ createdAfter: { type: "string", description: "ISO 8601 时间戳" },
97
+ createdBefore: { type: "string", description: "ISO 8601 时间戳" },
98
+ minImportance: numberField("最低重要性阈值", 0, 1),
99
+ },
100
+ };
101
+ export const engramCreateSchema = {
102
+ type: "object",
103
+ additionalProperties: false,
104
+ required: ["title", "content", "kind", "domainTags", "createdBy"],
105
+ properties: {
106
+ title: stringField("标题(1-200 字符)", 200),
107
+ content: stringField("正文(Markdown,非空)"),
108
+ kind: { type: "string", enum: ENGRAM_KIND_ENUM },
109
+ kinds: { type: "array", items: { type: "string", enum: ENGRAM_KIND_ENUM } },
110
+ summary: stringField("摘要(≤300 字符)", 300),
111
+ domainTags: {
112
+ type: "array",
113
+ items: { type: "string", minLength: 1 },
114
+ minItems: 1,
115
+ },
116
+ contextTags: { type: "array", items: { type: "string", minLength: 1 } },
117
+ encodingContext: optionalStringField("编码情境"),
118
+ importance: numberField("重要性 [0,1]"),
119
+ confidence: numberField("置信度 [0,1]"),
120
+ emotionalValence: { type: "string", enum: EMOTIONAL_VALENCE_ENUM },
121
+ sourceType: { type: "string", enum: SOURCE_TYPE_ENUM },
122
+ visibility: { type: "string", enum: VISIBILITY_ENUM },
123
+ decayHalfLifeDays: {
124
+ type: ["integer", "null"],
125
+ description: "半衰期天数(null 表示永不衰退)",
126
+ minimum: 1,
127
+ },
128
+ createdBy: stringField("创建者标识"),
129
+ dedupe: {
130
+ type: "boolean",
131
+ description: "是否触发智能去重(默认 true)。DUPLICATE 时强化原 engram 不重复创建;UPDATE 时合并;NEW 时正常创建。",
132
+ default: true,
133
+ },
134
+ },
135
+ };
136
+ export const engramGetSchema = {
137
+ type: "object",
138
+ additionalProperties: false,
139
+ required: ["id"],
140
+ properties: {
141
+ id: engramIdField,
142
+ tier: {
143
+ type: "string",
144
+ enum: ENGRAM_GET_TIER_ENUM,
145
+ default: "digest",
146
+ description: "披露层级(默认 digest);auto 表示按 contextBudget 自动选",
147
+ },
148
+ contextBudget: {
149
+ type: "object",
150
+ description: "tier=auto 时的 token 预算;省略则默认 4096",
151
+ additionalProperties: false,
152
+ properties: {
153
+ totalTokens: { type: "integer", minimum: 1, description: "总预算" },
154
+ reserved: {
155
+ type: "integer",
156
+ minimum: 0,
157
+ default: 0,
158
+ description: "已被其他内容占用",
159
+ },
160
+ },
161
+ },
162
+ score: {
163
+ type: "number",
164
+ minimum: 0,
165
+ maximum: 1,
166
+ description: "auto 模式下该 engram 的相关度分数(默认 1.0)",
167
+ },
168
+ },
169
+ };
170
+ export const engramUpdateSchema = {
171
+ type: "object",
172
+ additionalProperties: false,
173
+ required: ["id", "updatedBy"],
174
+ properties: {
175
+ id: stringField("Engram ID"),
176
+ title: stringField("新标题", 200),
177
+ content: stringField("新正文"),
178
+ summary: stringField("新摘要", 300),
179
+ kinds: { type: "array", items: { type: "string", enum: ENGRAM_KIND_ENUM } },
180
+ domainTags: {
181
+ type: "array",
182
+ items: { type: "string", minLength: 1 },
183
+ minItems: 1,
184
+ },
185
+ contextTags: { type: "array", items: { type: "string", minLength: 1 } },
186
+ encodingContext: optionalStringField("编码情境"),
187
+ importance: numberField("重要性 [0,1]"),
188
+ confidence: numberField("置信度 [0,1]"),
189
+ emotionalValence: { type: "string", enum: EMOTIONAL_VALENCE_ENUM },
190
+ decayHalfLifeDays: {
191
+ type: ["integer", "null"],
192
+ minimum: 1,
193
+ },
194
+ visibility: { type: "string", enum: VISIBILITY_ENUM },
195
+ updatedBy: stringField("更新者标识"),
196
+ },
197
+ };
198
+ export const engramDeleteSchema = {
199
+ type: "object",
200
+ additionalProperties: false,
201
+ required: ["id"],
202
+ properties: {
203
+ id: engramIdField,
204
+ },
205
+ };
206
+ export const engramReinforceSchema = {
207
+ type: "object",
208
+ additionalProperties: false,
209
+ required: ["id"],
210
+ properties: {
211
+ id: engramIdField,
212
+ effectiveness: {
213
+ type: "number",
214
+ minimum: 0,
215
+ maximum: 1,
216
+ default: 1,
217
+ description: "有效性 [0,1],1=完全有效",
218
+ },
219
+ note: optionalStringField("有效性说明(≤500 字符,供审计)", 500),
220
+ },
221
+ };
222
+ export const engramReportFailureSchema = {
223
+ type: "object",
224
+ additionalProperties: false,
225
+ required: ["id", "reason"],
226
+ properties: {
227
+ id: engramIdField,
228
+ reason: stringField("失败原因(≤500 字符,供 LTD 学习)", 500),
229
+ context: optionalStringField("失败上下文(≤500 字符)", 500),
230
+ },
231
+ };
232
+ export const engramArchiveSchema = {
233
+ type: "object",
234
+ additionalProperties: false,
235
+ required: ["id"],
236
+ properties: {
237
+ id: engramIdField,
238
+ reason: optionalStringField("归档原因(审计)", 500),
239
+ },
240
+ };
241
+ export const engramRestoreSchema = engramArchiveSchema;
242
+ export const engramForgetSchema = {
243
+ type: "object",
244
+ additionalProperties: false,
245
+ required: ["id", "reason"],
246
+ properties: {
247
+ id: engramIdField,
248
+ reason: stringField("遗忘原因(必填,不可逆操作)", 500),
249
+ },
250
+ };
251
+ export const engramRecomputeImportanceSchema = {
252
+ type: "object",
253
+ additionalProperties: false,
254
+ required: ["id"],
255
+ properties: {
256
+ id: engramIdField,
257
+ overrides: {
258
+ type: "object",
259
+ description: "手动覆盖 personal/team/project 维度(network/temporal 系统派生)",
260
+ additionalProperties: false,
261
+ properties: {
262
+ personal: { type: "number", minimum: 0, maximum: 1 },
263
+ team: { type: "number", minimum: 0, maximum: 1 },
264
+ project: { type: "number", minimum: 0, maximum: 1 },
265
+ },
266
+ },
267
+ persist: {
268
+ type: "boolean",
269
+ default: true,
270
+ description: "是否写回 meta.yaml",
271
+ },
272
+ updatedBy: stringField("调用者标识", 100),
273
+ },
274
+ };
275
+ export const contradictionResolveSchema = {
276
+ type: "object",
277
+ additionalProperties: false,
278
+ required: ["fromId", "synapseId", "verdict", "rationale", "resolvedBy"],
279
+ properties: {
280
+ fromId: engramIdField,
281
+ synapseId: stringField("Synapse ID", 100),
282
+ verdict: {
283
+ type: "string",
284
+ enum: ["keep_new", "keep_old", "merge", "archive"],
285
+ description: "裁决选项",
286
+ },
287
+ rationale: stringField("裁决依据(必填,供审计)", 1000),
288
+ resolvedBy: stringField("裁决者标识", 100),
289
+ },
290
+ };
291
+ export const closeLearningLoopSchema = {
292
+ type: "object",
293
+ additionalProperties: false,
294
+ required: ["engramId", "outcome", "reportedBy"],
295
+ properties: {
296
+ engramId: engramIdField,
297
+ outcome: {
298
+ type: "string",
299
+ enum: ["success", "failure", "partial"],
300
+ description: "使用结果",
301
+ },
302
+ effectiveness: {
303
+ type: "number",
304
+ minimum: 0,
305
+ maximum: 1,
306
+ description: "有效性 [0,1](partial 时建议填写)",
307
+ },
308
+ reason: stringField("失败原因(outcome=failure 时建议填写)", 500),
309
+ reportedBy: stringField("调用者标识", 100),
310
+ },
311
+ };
312
+ export const engramSearchSchema = {
313
+ type: "object",
314
+ additionalProperties: false,
315
+ required: ["query"],
316
+ properties: {
317
+ query: stringField("查询字符串"),
318
+ filter: searchFilterSchema,
319
+ limit: { type: "integer", minimum: 1, maximum: 100, default: 20 },
320
+ },
321
+ };
322
+ export const engramListSchema = {
323
+ type: "object",
324
+ additionalProperties: false,
325
+ properties: {
326
+ filter: searchFilterSchema,
327
+ limit: { type: "integer", minimum: 1, maximum: 500, default: 100 },
328
+ },
329
+ };
330
+ export const synapseCreateSchema = {
331
+ type: "object",
332
+ additionalProperties: false,
333
+ required: ["from", "to", "kind", "createdBy"],
334
+ properties: {
335
+ from: engramIdField,
336
+ to: engramIdField,
337
+ kind: { type: "string", enum: SYNAPSE_KIND_ENUM },
338
+ weight: { type: "number", minimum: 0, maximum: 1, default: 0.5 },
339
+ direction: {
340
+ type: "string",
341
+ enum: SYNAPSE_DIRECTION_ENUM,
342
+ default: "directional",
343
+ },
344
+ evidence: {
345
+ type: "array",
346
+ items: {
347
+ type: "object",
348
+ required: ["description", "addedBy"],
349
+ properties: {
350
+ description: { type: "string", minLength: 1 },
351
+ source: { type: "string" },
352
+ confidence: { type: "number", minimum: 0, maximum: 1 },
353
+ addedBy: { type: "string", minLength: 1 },
354
+ },
355
+ },
356
+ },
357
+ createdBy: stringField("创建者"),
358
+ sourceSemantic: optionalStringField("源语义标签"),
359
+ targetSemantic: optionalStringField("目标语义标签"),
360
+ },
361
+ };
362
+ export const synapseGetSchema = {
363
+ type: "object",
364
+ additionalProperties: false,
365
+ required: ["from", "synapseId"],
366
+ properties: {
367
+ from: engramIdField,
368
+ synapseId: stringField("Synapse ID"),
369
+ },
370
+ };
371
+ export const synapseDeleteSchema = synapseGetSchema;
372
+ export const synapseListSchema = {
373
+ type: "object",
374
+ additionalProperties: false,
375
+ required: ["engramId"],
376
+ properties: {
377
+ engramId: engramIdField,
378
+ direction: {
379
+ type: "string",
380
+ enum: ["outgoing", "incoming", "both"],
381
+ default: "both",
382
+ },
383
+ },
384
+ };
385
+ export const skillGetSchema = {
386
+ type: "object",
387
+ additionalProperties: false,
388
+ required: ["id"],
389
+ properties: {
390
+ id: stringField("Skill ID"),
391
+ },
392
+ };
393
+ export const skillInvokeSchema = {
394
+ type: "object",
395
+ additionalProperties: false,
396
+ required: ["id"],
397
+ properties: {
398
+ id: stringField("Skill ID"),
399
+ args: {
400
+ type: "object",
401
+ description: "调用参数(自由 key-value)",
402
+ additionalProperties: true,
403
+ default: {},
404
+ },
405
+ },
406
+ };
407
+ /**
408
+ * 工具名 → JSON Schema 映射
409
+ */
410
+ export const TOOL_JSON_SCHEMAS = {
411
+ engram_create: engramCreateSchema,
412
+ engram_get: engramGetSchema,
413
+ engram_update: engramUpdateSchema,
414
+ engram_delete: engramDeleteSchema,
415
+ engram_search: engramSearchSchema,
416
+ engram_list: engramListSchema,
417
+ engram_reinforce: engramReinforceSchema,
418
+ engram_report_failure: engramReportFailureSchema,
419
+ engram_archive: engramArchiveSchema,
420
+ engram_restore: engramRestoreSchema,
421
+ engram_forget: engramForgetSchema,
422
+ engram_recompute_importance: engramRecomputeImportanceSchema,
423
+ contradiction_resolve: contradictionResolveSchema,
424
+ close_learning_loop: closeLearningLoopSchema,
425
+ synapse_create: synapseCreateSchema,
426
+ synapse_get: synapseGetSchema,
427
+ synapse_delete: synapseDeleteSchema,
428
+ synapse_list: synapseListSchema,
429
+ skill_get: skillGetSchema,
430
+ skill_invoke: skillInvokeSchema,
431
+ };
432
+ //# sourceMappingURL=json-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schemas.js","sourceRoot":"","sources":["../src/json-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 列举记忆意图检测
3
+ *
4
+ * 用于 before_prompt_build hook:当用户 prompt 明显是"列举我的记忆"场景时,
5
+ * 通过 appendSystemContext 直接注入实际的 engram 列表(markdown),与
6
+ * workspace MEMORY.md 平等竞争——避免 agent 因为看到 workspace MEMORY.md
7
+ * 现成内容而绕开 co-engram 工具调用。
8
+ *
9
+ * 检测策略:保守正则匹配。只在非常明确的列举意图下触发,避免对正常
10
+ * query 误注入(那样会污染 prompt + 损 prompt cache)。
11
+ *
12
+ * @module @co-engram/openclaw/list-intent
13
+ */
14
+ /**
15
+ * 检测 prompt 是否为列举记忆意图
16
+ *
17
+ * @returns true 如果是明确的列举场景
18
+ */
19
+ export declare function isListMemoryIntent(prompt: string): boolean;
20
+ //# sourceMappingURL=list-intent-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-intent-detector.d.ts","sourceRoot":"","sources":["../src/list-intent-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA2BH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK1D"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 列举记忆意图检测
3
+ *
4
+ * 用于 before_prompt_build hook:当用户 prompt 明显是"列举我的记忆"场景时,
5
+ * 通过 appendSystemContext 直接注入实际的 engram 列表(markdown),与
6
+ * workspace MEMORY.md 平等竞争——避免 agent 因为看到 workspace MEMORY.md
7
+ * 现成内容而绕开 co-engram 工具调用。
8
+ *
9
+ * 检测策略:保守正则匹配。只在非常明确的列举意图下触发,避免对正常
10
+ * query 误注入(那样会污染 prompt + 损 prompt cache)。
11
+ *
12
+ * @module @co-engram/openclaw/list-intent
13
+ */
14
+ const LIST_INTENT_PATTERNS = [
15
+ // 中文:列举/显示/列出 + 记忆/记忆库/记忆库
16
+ /我有哪些记忆/,
17
+ /列出.*记忆/,
18
+ /列出.*engram/,
19
+ /显示.*记忆/,
20
+ /显示.*engram/,
21
+ /列举.*记忆/,
22
+ /列举.*engram/,
23
+ /查看.*记忆库/,
24
+ /看看.*记忆/,
25
+ /记忆库.*有什么/,
26
+ /记忆库.*有哪些/,
27
+ /记忆库.*内容/,
28
+ /记忆总数/,
29
+ /多少.*记忆/,
30
+ /所有记忆/,
31
+ // 英文
32
+ /\bwhat.*memor(y|ies)\b.*(?:do i have|have|i)\b/i,
33
+ /\blist.*memor(y|ies)\b/i,
34
+ /\bshow.*memor(y|ies)\b/i,
35
+ /\ball memori?es?\b/i,
36
+ /\bhow many memori?es?\b/i,
37
+ ];
38
+ /**
39
+ * 检测 prompt 是否为列举记忆意图
40
+ *
41
+ * @returns true 如果是明确的列举场景
42
+ */
43
+ export function isListMemoryIntent(prompt) {
44
+ if (!prompt || typeof prompt !== "string")
45
+ return false;
46
+ // 只看 prompt 的前 500 字符(避免长 prompt 触发误判)
47
+ const head = prompt.slice(0, 500);
48
+ return LIST_INTENT_PATTERNS.some((re) => re.test(head));
49
+ }
50
+ //# sourceMappingURL=list-intent-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-intent-detector.js","sourceRoot":"","sources":["../src/list-intent-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,oBAAoB,GAAsB;IAC9C,2BAA2B;IAC3B,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,MAAM;IACN,QAAQ;IACR,MAAM;IACN,KAAK;IACL,iDAAiD;IACjD,yBAAyB;IACzB,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,uCAAuC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenAI-compatible LlmClient 适配器
3
+ *
4
+ * 把 co-engram core 的 LlmClient 抽象映射到一个 fetch POST `/chat/completions`。
5
+ * 支持任何 OpenAI 兼容端点(OpenAI / Azure / 通义 / 智谱 / DeepSeek / 月之暗面 / 本地 ollama 等)。
6
+ * 推理模型(Qwen3 / DeepSeek-R1 / DeepSeek-V4 / GLM-5.2)通过 reasoning_content fallback 自动支持。
7
+ *
8
+ * 设计参考 flexmem shared/llm-call.ts:
9
+ * - 复用 OpenClaw native model config(若可用)作为 fallback
10
+ * - 失败时抛错,由 LlmNecessityEvaluator 决定是否 fallback 到规则版
11
+ *
12
+ * @module @co-engram/openclaw
13
+ */
14
+ import type { LlmClient } from "@co-engram/core";
15
+ import type { NecessityLlmConfig } from "./types.js";
16
+ /**
17
+ * 从 OpenClaw 全局配置(~/.openclaw/openclaw.json)读默认 LLM 配置
18
+ *
19
+ * 当用户未在 plugin config 显式配置 necessityLlm 时,作为 fallback。
20
+ * 读 agents.defaults.model.primary 解析 provider,再取对应 provider 的 baseUrl + apiKey。
21
+ */
22
+ export declare function loadOpenClawFallbackLlmConfig(): NecessityLlmConfig | undefined;
23
+ /**
24
+ * 创建 OpenAI-compatible LlmClient
25
+ *
26
+ * 自动追加 `/chat/completions` 后缀。
27
+ */
28
+ export declare function createOpenAiCompatibleLlmClient(cfg: NecessityLlmConfig): LlmClient;
29
+ //# sourceMappingURL=llm-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../src/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,6BAA6B,IACzC,kBAAkB,GAClB,SAAS,CA8BZ;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,kBAAkB,GACtB,SAAS,CAyDX"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * OpenAI-compatible LlmClient 适配器
3
+ *
4
+ * 把 co-engram core 的 LlmClient 抽象映射到一个 fetch POST `/chat/completions`。
5
+ * 支持任何 OpenAI 兼容端点(OpenAI / Azure / 通义 / 智谱 / DeepSeek / 月之暗面 / 本地 ollama 等)。
6
+ * 推理模型(Qwen3 / DeepSeek-R1 / DeepSeek-V4 / GLM-5.2)通过 reasoning_content fallback 自动支持。
7
+ *
8
+ * 设计参考 flexmem shared/llm-call.ts:
9
+ * - 复用 OpenClaw native model config(若可用)作为 fallback
10
+ * - 失败时抛错,由 LlmNecessityEvaluator 决定是否 fallback 到规则版
11
+ *
12
+ * @module @co-engram/openclaw
13
+ */
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ /**
17
+ * 从 OpenClaw 全局配置(~/.openclaw/openclaw.json)读默认 LLM 配置
18
+ *
19
+ * 当用户未在 plugin config 显式配置 necessityLlm 时,作为 fallback。
20
+ * 读 agents.defaults.model.primary 解析 provider,再取对应 provider 的 baseUrl + apiKey。
21
+ */
22
+ export function loadOpenClawFallbackLlmConfig() {
23
+ try {
24
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
25
+ const cfgPath = join(home, ".openclaw", "openclaw.json");
26
+ if (!existsSync(cfgPath))
27
+ return undefined;
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ const raw = JSON.parse(readFileSync(cfgPath, "utf8"));
30
+ const agentModel = raw?.agents?.defaults?.model?.primary;
31
+ if (!agentModel)
32
+ return undefined;
33
+ const [providerKey, modelId] = agentModel.includes("/")
34
+ ? agentModel.split("/", 2)
35
+ : [undefined, agentModel];
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ const providerCfg = providerKey
38
+ ? raw?.models?.providers?.[providerKey]
39
+ : Object.values(raw?.models?.providers ?? {})[0];
40
+ if (!providerCfg)
41
+ return undefined;
42
+ const baseUrl = providerCfg.baseUrl;
43
+ const apiKey = providerCfg.apiKey;
44
+ if (!baseUrl || !apiKey)
45
+ return undefined;
46
+ return { endpoint: baseUrl, apiKey, model: modelId };
47
+ }
48
+ catch {
49
+ return undefined;
50
+ }
51
+ }
52
+ /**
53
+ * 创建 OpenAI-compatible LlmClient
54
+ *
55
+ * 自动追加 `/chat/completions` 后缀。
56
+ */
57
+ export function createOpenAiCompatibleLlmClient(cfg) {
58
+ const endpoint = normalizeEndpoint(cfg.endpoint);
59
+ return {
60
+ async complete(prompt, opts = {}) {
61
+ const headers = {
62
+ "Content-Type": "application/json",
63
+ Authorization: `Bearer ${cfg.apiKey}`,
64
+ ...(cfg.headers ?? {}),
65
+ };
66
+ const body = {
67
+ model: cfg.model,
68
+ temperature: opts.temperature ?? 0.1,
69
+ max_tokens: opts.maxTokens ?? 300,
70
+ messages: [{ role: "user", content: prompt }],
71
+ };
72
+ const resp = await fetch(endpoint, {
73
+ method: "POST",
74
+ headers,
75
+ body: JSON.stringify(body),
76
+ signal: AbortSignal.timeout(opts.timeoutMs ?? 15_000),
77
+ });
78
+ if (!resp.ok) {
79
+ const text = await resp.text();
80
+ throw new Error(`LLM call failed (${resp.status}): ${text.slice(0, 200)}`);
81
+ }
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ const json = (await resp.json());
84
+ const choice = json?.choices?.[0];
85
+ const message = choice?.message;
86
+ const finishReason = choice?.finish_reason;
87
+ // 1. 正式 content 优先
88
+ const content = message?.content;
89
+ if (content && content.trim().length > 0)
90
+ return content.trim();
91
+ // 2. reasoning 模型 fallback:content=null + reasoning_content 非空
92
+ // Qwen3 / DeepSeek-R1 / DeepSeek-V4 / GLM-5.2 等 reasoning 模型,
93
+ // reasoning 阶段就用光 max_tokens 时 content=null。
94
+ // reasoning_content 末尾常含 JSON 答案,交给 core 的 parseLlmVerdict 抽取。
95
+ const reasoning = message?.reasoning_content;
96
+ if (reasoning && reasoning.trim().length > 0) {
97
+ return reasoning.trim();
98
+ }
99
+ // 3. 都为空:抛错带诊断,让 LlmNecessityEvaluator fallback 到规则版
100
+ throw new Error(`LLM returned empty content (finish_reason=${finishReason ?? "unknown"})`);
101
+ },
102
+ };
103
+ }
104
+ function normalizeEndpoint(url) {
105
+ const stripped = url.replace(/\/+$/, "");
106
+ if (stripped.endsWith("/chat/completions"))
107
+ return stripped;
108
+ if (stripped.endsWith("/completions"))
109
+ return stripped;
110
+ return `${stripped}/chat/completions`;
111
+ }
112
+ //# sourceMappingURL=llm-client.js.map