@kynver-app/openclaw-agent-os 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -2
- package/dist/index.js +258 -7
- package/dist/index.js.map +4 -4
- package/openclaw.plugin.json +15 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Recommended direct HTTP config:
|
|
|
33
33
|
"kynver-agent-os-tools": {
|
|
34
34
|
"kynverApiUrl": "https://www.kynver.com",
|
|
35
35
|
"kynverApiKey": "kynver_xxx",
|
|
36
|
-
"agentOsSlug": "
|
|
36
|
+
"agentOsSlug": "aos-your-primary-slug",
|
|
37
37
|
"enableDirectHttp": true,
|
|
38
38
|
"enableSessionLifecycle": true
|
|
39
39
|
}
|
|
@@ -43,6 +43,9 @@ Recommended direct HTTP config:
|
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
Prefer OpenClaw secret references or environment-backed config for `kynverApiKey` when your install supports it.
|
|
46
|
+
Use the primary AgentOS slug shown on your Kynver `/agent-os` page. You may omit
|
|
47
|
+
`agentOsSlug` when you want the Kynver API to resolve the account's primary
|
|
48
|
+
AgentOS workspace.
|
|
46
49
|
|
|
47
50
|
Compatibility config through an existing `mcporter.json` still works:
|
|
48
51
|
|
|
@@ -94,17 +97,33 @@ Expected healthy response:
|
|
|
94
97
|
- `agent_os_write_memory`
|
|
95
98
|
- `agent_os_update_memory`
|
|
96
99
|
- `agent_os_consolidate_memory`
|
|
100
|
+
- `agent_os_list_skills`
|
|
101
|
+
- `agent_os_get_skill`
|
|
102
|
+
- `agent_os_create_skill`
|
|
103
|
+
- `agent_os_update_skill`
|
|
104
|
+
- `agent_os_import_skills`
|
|
105
|
+
- `agent_os_bind_skill`
|
|
106
|
+
- `agent_os_write_skill_memory`
|
|
97
107
|
- `agent_os_get_contacts`
|
|
98
108
|
- `agent_os_create_contact`
|
|
99
109
|
- `agent_os_update_contact`
|
|
100
110
|
|
|
101
111
|
`agent_os_write_memory` and `agent_os_update_memory` are the OpenClaw
|
|
102
112
|
memory-writer surface. They accept `sourceRefs` plus `memoryType`, `confidence`,
|
|
103
|
-
`reviewStatus`, `projectId`, `goalId`, and `
|
|
113
|
+
`reviewStatus`, `projectId`, `goalId`, `contactId`, and `skillId` so OpenClaw agents can
|
|
104
114
|
write durable memories with provenance, reliability, review state, and project
|
|
105
115
|
links. Use `reviewStatus: "needs_review"` for important memories that are
|
|
106
116
|
uncertain or likely to need human correction.
|
|
107
117
|
|
|
118
|
+
Skill tools expose the AgentOS skill registry without injecting every skill into
|
|
119
|
+
every model context. Fetch a skill on demand with `agent_os_get_skill`, manage
|
|
120
|
+
user-authored skills with `agent_os_create_skill`/`agent_os_update_skill`,
|
|
121
|
+
import external skill markdown/JSON as draft unbound user skills with
|
|
122
|
+
`agent_os_import_skills`, enable selected skills with `agent_os_bind_skill`,
|
|
123
|
+
and write lessons learned from that workflow through `agent_os_write_skill_memory`.
|
|
124
|
+
Built-in skill memories use the skill slug as `skillId`; user-authored skill
|
|
125
|
+
memories use the `AgentSkill.id`.
|
|
126
|
+
|
|
108
127
|
`agent_os_log_session_event` records structured events for open sessions. This
|
|
109
128
|
lets AgentOS close summaries use real topics, decisions, work completed, and
|
|
110
129
|
follow-ups rather than generic session-ended text.
|
package/dist/index.js
CHANGED
|
@@ -27,8 +27,7 @@ var pluginConfigSchema = {
|
|
|
27
27
|
},
|
|
28
28
|
agentOsSlug: {
|
|
29
29
|
type: "string",
|
|
30
|
-
|
|
31
|
-
description: "Default AgentOS slug to use when a tool call does not pass slug."
|
|
30
|
+
description: "Optional default AgentOS slug to use when a tool call does not pass slug. Use the primary slug from Kynver /agent-os; omit to resolve the account's primary AgentOS workspace."
|
|
32
31
|
},
|
|
33
32
|
enableDirectHttp: {
|
|
34
33
|
type: "boolean",
|
|
@@ -49,7 +48,7 @@ function resolvePluginConfig(raw) {
|
|
|
49
48
|
mcporterConfigPath: typeof raw?.mcporterConfigPath === "string" && raw.mcporterConfigPath.trim() ? raw.mcporterConfigPath.trim() : void 0,
|
|
50
49
|
kynverApiUrl: typeof raw?.kynverApiUrl === "string" && raw.kynverApiUrl.trim() ? raw.kynverApiUrl.trim().replace(/\/$/, "") : void 0,
|
|
51
50
|
kynverApiKey: typeof raw?.kynverApiKey === "string" && raw.kynverApiKey.trim() ? raw.kynverApiKey.trim() : void 0,
|
|
52
|
-
agentOsSlug: typeof raw?.agentOsSlug === "string" && raw.agentOsSlug.trim() ? raw.agentOsSlug.trim() :
|
|
51
|
+
agentOsSlug: typeof raw?.agentOsSlug === "string" && raw.agentOsSlug.trim() ? raw.agentOsSlug.trim() : void 0,
|
|
53
52
|
enableDirectHttp: typeof raw?.enableDirectHttp === "boolean" ? raw.enableDirectHttp : true,
|
|
54
53
|
enableSessionLifecycle: typeof raw?.enableSessionLifecycle === "boolean" ? raw.enableSessionLifecycle : true
|
|
55
54
|
};
|
|
@@ -330,6 +329,31 @@ function directRequestForTool(toolName, params, defaultSlug) {
|
|
|
330
329
|
const q = requiredString(params.query, "query");
|
|
331
330
|
return { slug, method: "GET", path: `/memory?${queryStringFromEntries({ q, k: params.k })}` };
|
|
332
331
|
}
|
|
332
|
+
case "agent_os_list_skills":
|
|
333
|
+
return { slug, method: "GET", path: "/skills" };
|
|
334
|
+
case "agent_os_get_skill": {
|
|
335
|
+
const skillSlug = requiredString(params.skillSlug, "skillSlug");
|
|
336
|
+
return { slug, method: "GET", path: "/skills/" + encodeURIComponent(skillSlug) + queryString(params, ["source"]) };
|
|
337
|
+
}
|
|
338
|
+
case "agent_os_create_skill": {
|
|
339
|
+
const skillSlug = requiredString(params.skillSlug, "skillSlug");
|
|
340
|
+
return { slug, method: "POST", path: "/skills", body: { ...stripKeys(params, ["slug", "skillSlug"]), slug: skillSlug } };
|
|
341
|
+
}
|
|
342
|
+
case "agent_os_update_skill": {
|
|
343
|
+
const skillSlug = requiredString(params.skillSlug, "skillSlug");
|
|
344
|
+
return { slug, method: "PATCH", path: "/skills/" + encodeURIComponent(skillSlug), body: stripKeys(params, ["slug", "skillSlug"]) };
|
|
345
|
+
}
|
|
346
|
+
case "agent_os_import_skills":
|
|
347
|
+
return { slug, method: "POST", path: "/skills/import", body: withoutSlug };
|
|
348
|
+
case "agent_os_bind_skill": {
|
|
349
|
+
const skillSlug = requiredString(params.skillSlug, "skillSlug");
|
|
350
|
+
return {
|
|
351
|
+
slug,
|
|
352
|
+
method: "POST",
|
|
353
|
+
path: "/skills/" + encodeURIComponent(skillSlug) + "/bind",
|
|
354
|
+
body: stripKeys(params, ["slug", "skillSlug"])
|
|
355
|
+
};
|
|
356
|
+
}
|
|
333
357
|
case "agent_os_write_memory": {
|
|
334
358
|
const categoryToSourceId = {
|
|
335
359
|
long_term: "agent:long-term",
|
|
@@ -353,10 +377,31 @@ function directRequestForTool(toolName, params, defaultSlug) {
|
|
|
353
377
|
reviewStatus: params.reviewStatus,
|
|
354
378
|
projectId: params.projectId,
|
|
355
379
|
goalId: params.goalId,
|
|
356
|
-
contactId: params.contactId
|
|
380
|
+
contactId: params.contactId,
|
|
381
|
+
skillId: params.skillId
|
|
357
382
|
})
|
|
358
383
|
};
|
|
359
384
|
}
|
|
385
|
+
case "agent_os_write_skill_memory":
|
|
386
|
+
return {
|
|
387
|
+
slug,
|
|
388
|
+
method: "POST",
|
|
389
|
+
path: "/memory",
|
|
390
|
+
body: compact({
|
|
391
|
+
content: requiredString(params.content, "content"),
|
|
392
|
+
slug: stringParam(params.key),
|
|
393
|
+
sourceId: stringParam(params.sourceId) || "agent:long-term",
|
|
394
|
+
metadata: params.metadata,
|
|
395
|
+
sourceRefs: params.sourceRefs,
|
|
396
|
+
memoryType: params.memoryType || "lesson",
|
|
397
|
+
confidence: params.confidence,
|
|
398
|
+
reviewStatus: params.reviewStatus,
|
|
399
|
+
projectId: params.projectId,
|
|
400
|
+
goalId: params.goalId,
|
|
401
|
+
contactId: params.contactId,
|
|
402
|
+
skillId: requiredString(params.skillId, "skillId")
|
|
403
|
+
})
|
|
404
|
+
};
|
|
360
405
|
case "agent_os_update_memory":
|
|
361
406
|
return {
|
|
362
407
|
slug,
|
|
@@ -373,7 +418,8 @@ function directRequestForTool(toolName, params, defaultSlug) {
|
|
|
373
418
|
reviewStatus: params.reviewStatus,
|
|
374
419
|
projectId: params.projectId,
|
|
375
420
|
goalId: params.goalId,
|
|
376
|
-
contactId: params.contactId
|
|
421
|
+
contactId: params.contactId,
|
|
422
|
+
skillId: params.skillId
|
|
377
423
|
})
|
|
378
424
|
};
|
|
379
425
|
case "agent_os_get_contacts":
|
|
@@ -580,7 +626,7 @@ var getContextSchema = {
|
|
|
580
626
|
properties: {
|
|
581
627
|
slug: {
|
|
582
628
|
type: "string",
|
|
583
|
-
description: "AgentOS slug.
|
|
629
|
+
description: "AgentOS slug. Omit to use the account's primary AgentOS workspace."
|
|
584
630
|
}
|
|
585
631
|
},
|
|
586
632
|
additionalProperties: false,
|
|
@@ -762,6 +808,10 @@ var writeMemorySchema = {
|
|
|
762
808
|
projectId: { type: "string" },
|
|
763
809
|
goalId: { type: "string" },
|
|
764
810
|
contactId: { type: "string" },
|
|
811
|
+
skillId: {
|
|
812
|
+
type: "string",
|
|
813
|
+
description: "Skill identifier this memory belongs to. Built-ins use skill slug; user-authored skills use AgentSkill.id."
|
|
814
|
+
},
|
|
765
815
|
slug: { type: "string" }
|
|
766
816
|
},
|
|
767
817
|
required: ["content"],
|
|
@@ -782,6 +832,10 @@ var updateMemorySchema = {
|
|
|
782
832
|
projectId: { type: "string" },
|
|
783
833
|
goalId: { type: "string" },
|
|
784
834
|
contactId: { type: "string" },
|
|
835
|
+
skillId: {
|
|
836
|
+
type: "string",
|
|
837
|
+
description: "Skill identifier this memory belongs to. Built-ins use skill slug; user-authored skills use AgentSkill.id."
|
|
838
|
+
},
|
|
785
839
|
slug: { type: "string" }
|
|
786
840
|
},
|
|
787
841
|
required: ["key", "content"],
|
|
@@ -940,7 +994,7 @@ var openSessionSchema = {
|
|
|
940
994
|
properties: {
|
|
941
995
|
channel: { type: "string", description: "Runtime channel: 'webchat' | 'telegram' | 'discord' | \u2026" },
|
|
942
996
|
model: { type: "string", description: "Model used for the session." },
|
|
943
|
-
slug: { type: "string", description: "AgentOS slug.
|
|
997
|
+
slug: { type: "string", description: "AgentOS slug. Omit to use the account's primary AgentOS workspace." }
|
|
944
998
|
},
|
|
945
999
|
required: ["channel"],
|
|
946
1000
|
additionalProperties: false,
|
|
@@ -1018,6 +1072,202 @@ function createSessionTools(config) {
|
|
|
1018
1072
|
];
|
|
1019
1073
|
}
|
|
1020
1074
|
|
|
1075
|
+
// src/schemas/skills.ts
|
|
1076
|
+
var sourceRef3 = {
|
|
1077
|
+
type: "object",
|
|
1078
|
+
properties: {
|
|
1079
|
+
type: { type: "string", enum: ["repo", "commit", "branch", "pr", "map", "session", "tool", "url", "manual", "unknown"] },
|
|
1080
|
+
label: { type: "string" },
|
|
1081
|
+
repo: { type: "string" },
|
|
1082
|
+
path: { type: "string" },
|
|
1083
|
+
commit: { type: "string" },
|
|
1084
|
+
branch: { type: "string" },
|
|
1085
|
+
pr: { oneOf: [{ type: "number" }, { type: "string" }] },
|
|
1086
|
+
url: { type: "string" },
|
|
1087
|
+
sessionId: { type: "string" },
|
|
1088
|
+
toolName: { type: "string" },
|
|
1089
|
+
note: { type: "string" }
|
|
1090
|
+
},
|
|
1091
|
+
required: ["type"],
|
|
1092
|
+
additionalProperties: true
|
|
1093
|
+
};
|
|
1094
|
+
var sourceRefs2 = {
|
|
1095
|
+
type: "array",
|
|
1096
|
+
items: sourceRef3
|
|
1097
|
+
};
|
|
1098
|
+
var memoryType2 = {
|
|
1099
|
+
type: "string",
|
|
1100
|
+
enum: ["decision", "lesson", "fact", "preference", "project_update", "runbook", "source_map", "correction", "note"]
|
|
1101
|
+
};
|
|
1102
|
+
var confidence2 = {
|
|
1103
|
+
type: "string",
|
|
1104
|
+
enum: ["low", "medium", "high"]
|
|
1105
|
+
};
|
|
1106
|
+
var reviewStatus2 = {
|
|
1107
|
+
type: "string",
|
|
1108
|
+
enum: ["none", "needs_review", "reviewed", "stale", "rejected"]
|
|
1109
|
+
};
|
|
1110
|
+
var listSkillsSchema = {
|
|
1111
|
+
type: "object",
|
|
1112
|
+
properties: {
|
|
1113
|
+
slug: { type: "string" }
|
|
1114
|
+
},
|
|
1115
|
+
additionalProperties: false,
|
|
1116
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1117
|
+
};
|
|
1118
|
+
var getSkillSchema = {
|
|
1119
|
+
type: "object",
|
|
1120
|
+
properties: {
|
|
1121
|
+
skillSlug: { type: "string" },
|
|
1122
|
+
source: { type: "string", enum: ["builtin", "user"] },
|
|
1123
|
+
slug: { type: "string" }
|
|
1124
|
+
},
|
|
1125
|
+
required: ["skillSlug"],
|
|
1126
|
+
additionalProperties: false,
|
|
1127
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1128
|
+
};
|
|
1129
|
+
var bindSkillSchema = {
|
|
1130
|
+
type: "object",
|
|
1131
|
+
properties: {
|
|
1132
|
+
skillSlug: { type: "string" },
|
|
1133
|
+
skillSource: { type: "string", enum: ["builtin", "user"] },
|
|
1134
|
+
enabled: { type: "boolean" },
|
|
1135
|
+
priority: { type: "number" },
|
|
1136
|
+
autoInvoke: { type: "boolean" },
|
|
1137
|
+
notes: { type: "string" },
|
|
1138
|
+
config: looseObject,
|
|
1139
|
+
slug: { type: "string" }
|
|
1140
|
+
},
|
|
1141
|
+
required: ["skillSlug", "skillSource"],
|
|
1142
|
+
additionalProperties: false,
|
|
1143
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1144
|
+
};
|
|
1145
|
+
var skillCategory = {
|
|
1146
|
+
type: "string",
|
|
1147
|
+
enum: ["engineering", "productivity", "agent_ops", "domain", "personal", "misc"]
|
|
1148
|
+
};
|
|
1149
|
+
var skillStatus = {
|
|
1150
|
+
type: "string",
|
|
1151
|
+
enum: ["draft", "active", "deprecated", "archived"]
|
|
1152
|
+
};
|
|
1153
|
+
var skillDraft = {
|
|
1154
|
+
type: "object",
|
|
1155
|
+
properties: {
|
|
1156
|
+
slug: { type: "string" },
|
|
1157
|
+
name: { type: "string" },
|
|
1158
|
+
description: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1159
|
+
category: skillCategory,
|
|
1160
|
+
status: skillStatus,
|
|
1161
|
+
triggerRules: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1162
|
+
instructions: { type: "string" },
|
|
1163
|
+
sourceRefs: sourceRefs2,
|
|
1164
|
+
metadata: looseObject
|
|
1165
|
+
},
|
|
1166
|
+
additionalProperties: false
|
|
1167
|
+
};
|
|
1168
|
+
var createSkillSchema = {
|
|
1169
|
+
type: "object",
|
|
1170
|
+
properties: {
|
|
1171
|
+
skillSlug: { type: "string" },
|
|
1172
|
+
name: { type: "string" },
|
|
1173
|
+
description: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1174
|
+
category: skillCategory,
|
|
1175
|
+
status: skillStatus,
|
|
1176
|
+
triggerRules: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1177
|
+
instructions: { type: "string" },
|
|
1178
|
+
sourceRefs: sourceRefs2,
|
|
1179
|
+
metadata: looseObject,
|
|
1180
|
+
slug: { type: "string" }
|
|
1181
|
+
},
|
|
1182
|
+
required: ["skillSlug", "name", "instructions"],
|
|
1183
|
+
additionalProperties: false,
|
|
1184
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1185
|
+
};
|
|
1186
|
+
var updateSkillSchema = {
|
|
1187
|
+
type: "object",
|
|
1188
|
+
properties: {
|
|
1189
|
+
skillSlug: { type: "string" },
|
|
1190
|
+
name: { type: "string" },
|
|
1191
|
+
description: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1192
|
+
category: skillCategory,
|
|
1193
|
+
status: skillStatus,
|
|
1194
|
+
triggerRules: { oneOf: [{ type: "string" }, { type: "null" }] },
|
|
1195
|
+
instructions: { type: "string" },
|
|
1196
|
+
sourceRefs: sourceRefs2,
|
|
1197
|
+
metadata: looseObject,
|
|
1198
|
+
slug: { type: "string" }
|
|
1199
|
+
},
|
|
1200
|
+
required: ["skillSlug"],
|
|
1201
|
+
additionalProperties: false,
|
|
1202
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1203
|
+
};
|
|
1204
|
+
var importSkillsSchema = {
|
|
1205
|
+
type: "object",
|
|
1206
|
+
properties: {
|
|
1207
|
+
markdown: { type: "string" },
|
|
1208
|
+
skills: { type: "array", items: skillDraft },
|
|
1209
|
+
sourceLabel: { type: "string" },
|
|
1210
|
+
overwrite: { type: "boolean" },
|
|
1211
|
+
slug: { type: "string" }
|
|
1212
|
+
},
|
|
1213
|
+
additionalProperties: false,
|
|
1214
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1215
|
+
};
|
|
1216
|
+
var writeSkillMemorySchema = {
|
|
1217
|
+
type: "object",
|
|
1218
|
+
properties: {
|
|
1219
|
+
skillId: {
|
|
1220
|
+
type: "string",
|
|
1221
|
+
description: "Skill identifier: built-in skill slug or user-authored AgentSkill.id."
|
|
1222
|
+
},
|
|
1223
|
+
content: { type: "string" },
|
|
1224
|
+
key: { type: "string" },
|
|
1225
|
+
sourceId: { type: "string" },
|
|
1226
|
+
metadata: looseObject,
|
|
1227
|
+
sourceRefs: sourceRefs2,
|
|
1228
|
+
memoryType: memoryType2,
|
|
1229
|
+
confidence: confidence2,
|
|
1230
|
+
reviewStatus: reviewStatus2,
|
|
1231
|
+
projectId: { type: "string" },
|
|
1232
|
+
goalId: { type: "string" },
|
|
1233
|
+
contactId: { type: "string" },
|
|
1234
|
+
slug: { type: "string" }
|
|
1235
|
+
},
|
|
1236
|
+
required: ["skillId", "content"],
|
|
1237
|
+
additionalProperties: false,
|
|
1238
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
1239
|
+
};
|
|
1240
|
+
|
|
1241
|
+
// src/tools/skills.ts
|
|
1242
|
+
function createSkillTools(config) {
|
|
1243
|
+
const mk = (name, description, parameters) => ({
|
|
1244
|
+
name,
|
|
1245
|
+
label: name,
|
|
1246
|
+
description,
|
|
1247
|
+
parameters,
|
|
1248
|
+
execute: (_toolCallId, params) => callAgentOsTool({
|
|
1249
|
+
serverName: config.agentOsServer,
|
|
1250
|
+
toolName: name,
|
|
1251
|
+
params,
|
|
1252
|
+
timeoutMs: config.timeoutMs,
|
|
1253
|
+
mcporterConfigPath: config.mcporterConfigPath,
|
|
1254
|
+
kynverApiUrl: config.kynverApiUrl,
|
|
1255
|
+
kynverApiKey: config.kynverApiKey,
|
|
1256
|
+
agentOsSlug: config.agentOsSlug,
|
|
1257
|
+
enableDirectHttp: config.enableDirectHttp
|
|
1258
|
+
})
|
|
1259
|
+
});
|
|
1260
|
+
return [
|
|
1261
|
+
mk("agent_os_list_skills", "List AgentOS skills and binding state.", listSkillsSchema),
|
|
1262
|
+
mk("agent_os_get_skill", "Fetch one AgentOS skill's instructions and binding state.", getSkillSchema),
|
|
1263
|
+
mk("agent_os_create_skill", "Create a user-authored AgentOS skill; created skills are not enabled until bound.", createSkillSchema),
|
|
1264
|
+
mk("agent_os_update_skill", "Update a user-authored AgentOS skill. Built-ins are read-only.", updateSkillSchema),
|
|
1265
|
+
mk("agent_os_import_skills", "Import external skills as draft, unbound user skills for review before enablement.", importSkillsSchema),
|
|
1266
|
+
mk("agent_os_bind_skill", "Enable or update an AgentOS skill binding.", bindSkillSchema),
|
|
1267
|
+
mk("agent_os_write_skill_memory", "Write durable AgentOS memory tagged to a skill.", writeSkillMemorySchema)
|
|
1268
|
+
];
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1021
1271
|
// src/tools/index.ts
|
|
1022
1272
|
function createAllTools(config) {
|
|
1023
1273
|
return [
|
|
@@ -1027,6 +1277,7 @@ function createAllTools(config) {
|
|
|
1027
1277
|
...createGoalTools(config),
|
|
1028
1278
|
...createProjectTools(config),
|
|
1029
1279
|
...createMemoryTools(config),
|
|
1280
|
+
...createSkillTools(config),
|
|
1030
1281
|
...createContactTools(config)
|
|
1031
1282
|
];
|
|
1032
1283
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/config.ts", "../src/mcporter-client.ts", "../src/result.ts", "../src/schemas/common.ts", "../src/schemas/contacts.ts", "../src/tools/contacts.ts", "../src/schemas/context.ts", "../src/tools/context.ts", "../src/schemas/goals.ts", "../src/tools/goals.ts", "../src/schemas/health.ts", "../src/tools/health.ts", "../src/schemas/memory.ts", "../src/tools/memory.ts", "../src/schemas/projects.ts", "../src/tools/projects.ts", "../src/schemas/sessions.ts", "../src/tools/sessions.ts", "../src/tools/index.ts", "../index.ts"],
|
|
4
|
-
"sourcesContent": ["export const pluginConfigSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n agentOsServer: {\r\n type: \"string\",\r\n default: \"kynver-agent-os\",\r\n description: \"mcporter server name for the Kynver AgentOS MCP server\",\r\n },\r\n timeoutMs: {\r\n type: \"number\",\r\n default: 30000,\r\n description: \"Timeout in milliseconds for mcporter calls\",\r\n },\r\n mcporterConfigPath: {\r\n type: \"string\",\r\n description:\r\n \"Explicit path to mcporter.json. Defaults to MCPORTER_CONFIG, OPENCLAW_MCPORTER_CONFIG, then <home>/.openclaw/workspace/config/mcporter.json.\",\r\n },\r\n kynverApiUrl: {\r\n type: \"string\",\r\n description:\r\n \"Kynver API origin for direct HTTP mode, for example https://www.kynver.com. Falls back to KYNVER_API_URL or mcporter env.\",\r\n },\r\n kynverApiKey: {\r\n type: \"string\",\r\n description: \"Kynver API key for direct HTTP mode. Prefer OpenClaw secret references when available.\",\r\n },\r\n agentOsSlug: {\r\n type: \"string\",\r\n default: \"ghost\",\r\n description: \"Default AgentOS slug to use when a tool call does not pass slug.\",\r\n },\r\n enableDirectHttp: {\r\n type: \"boolean\",\r\n default: true,\r\n description: \"Use Kynver's AgentOS HTTP API directly when configured; mcporter remains the compatibility fallback.\",\r\n },\r\n enableSessionLifecycle: {\r\n type: \"boolean\",\r\n default: true,\r\n description: \"Automatically open and close AgentOS session records from OpenClaw session lifecycle hooks.\",\r\n },\r\n },\r\n};\r\n\r\nexport function resolvePluginConfig(raw: Record<string, unknown> | undefined) {\r\n return {\r\n agentOsServer:\r\n typeof raw?.agentOsServer === \"string\" && raw.agentOsServer.trim()\r\n ? raw.agentOsServer.trim()\r\n : \"kynver-agent-os\",\r\n timeoutMs:\r\n typeof raw?.timeoutMs === \"number\" && Number.isFinite(raw.timeoutMs) && raw.timeoutMs > 0\r\n ? raw.timeoutMs\r\n : 30000,\r\n mcporterConfigPath:\r\n typeof raw?.mcporterConfigPath === \"string\" && raw.mcporterConfigPath.trim()\r\n ? raw.mcporterConfigPath.trim()\r\n : undefined,\r\n kynverApiUrl:\r\n typeof raw?.kynverApiUrl === \"string\" && raw.kynverApiUrl.trim()\r\n ? raw.kynverApiUrl.trim().replace(/\\/$/, \"\")\r\n : undefined,\r\n kynverApiKey:\r\n typeof raw?.kynverApiKey === \"string\" && raw.kynverApiKey.trim() ? raw.kynverApiKey.trim() : undefined,\r\n agentOsSlug:\r\n typeof raw?.agentOsSlug === \"string\" && raw.agentOsSlug.trim() ? raw.agentOsSlug.trim() : \"ghost\",\r\n enableDirectHttp: typeof raw?.enableDirectHttp === \"boolean\" ? raw.enableDirectHttp : true,\r\n enableSessionLifecycle: typeof raw?.enableSessionLifecycle === \"boolean\" ? raw.enableSessionLifecycle : true,\r\n };\r\n}\r\n", "import { execFile } from \"node:child_process\";\r\nimport { existsSync, readFileSync } from \"node:fs\";\r\nimport os from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { promisify } from \"node:util\";\r\nimport { toolError, toolJson } from \"./result.js\";\r\n\r\nconst execFileAsync = promisify(execFile);\r\n\r\nexport async function callAgentOsTool({\r\n serverName,\r\n toolName,\r\n params,\r\n timeoutMs,\r\n mcporterConfigPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n enableDirectHttp = true,\r\n}: {\r\n serverName: string;\r\n toolName: string;\r\n params?: Record<string, unknown>;\r\n timeoutMs: number;\r\n mcporterConfigPath?: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n enableDirectHttp?: boolean;\r\n}) {\r\n const configPath = resolveMcporterConfigPath(mcporterConfigPath);\r\n const directConfig = enableDirectHttp\r\n ? resolveDirectAgentOsConfig({ serverName, configPath, kynverApiUrl, kynverApiKey, agentOsSlug })\r\n : undefined;\r\n if (directConfig) {\r\n try {\r\n return toolJson(await callAgentOsApiDirect(toolName, params ?? {}, timeoutMs, directConfig));\r\n } catch (error: any) {\r\n // Keep mcporter as a compatibility fallback while the native client matures.\r\n if (!isDirectConfigError(error)) {\r\n return toolError(`Kynver AgentOS direct call failed for ${toolName}.`, {\r\n toolName,\r\n serverName,\r\n message: redactSecrets(String(error?.message || error)),\r\n });\r\n }\r\n }\r\n }\r\n\r\n const selector = `${serverName}.${toolName}`;\r\n const args = [\"--config\", configPath, \"call\", selector];\r\n const hasParams = params && Object.keys(params).length > 0;\r\n if (hasParams) {\r\n args.push(\"--args\", JSON.stringify(params));\r\n }\r\n\r\n try {\r\n const { stdout, stderr } = await execFileAsync(mcporterExecutable(), args, {\r\n timeout: timeoutMs,\r\n maxBuffer: 1024 * 1024 * 4,\r\n shell: process.platform === \"win32\",\r\n });\r\n const text = `${stdout || \"\"}${stderr || \"\"}`.trim();\r\n const parsed = parseMcporterOutput(text);\r\n return toolJson(parsed);\r\n } catch (error: any) {\r\n const msg = String(error?.message || error);\r\n if (msg.includes(\"timed out\")) {\r\n return toolError(`Kynver AgentOS call timed out after ${timeoutMs}ms.`, { toolName, serverName });\r\n }\r\n return toolError(`Kynver AgentOS call failed for ${toolName}.`, {\r\n toolName,\r\n serverName,\r\n message: msg,\r\n stdout: error?.stdout,\r\n stderr: error?.stderr,\r\n });\r\n }\r\n}\r\n\r\nexport async function checkAgentOsHealth({\r\n serverName,\r\n slug,\r\n timeoutMs,\r\n mcporterConfigPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n enableDirectHttp = true,\r\n}: {\r\n serverName: string;\r\n slug?: string;\r\n timeoutMs: number;\r\n mcporterConfigPath?: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n enableDirectHttp?: boolean;\r\n}) {\r\n const startedAt = Date.now();\r\n const configPath = resolveMcporterConfigPath(mcporterConfigPath);\r\n const directConfig = enableDirectHttp\r\n ? resolveDirectAgentOsConfig({ serverName, configPath, kynverApiUrl, kynverApiKey, agentOsSlug })\r\n : undefined;\r\n if (directConfig) {\r\n try {\r\n const parsed = await callAgentOsApiDirect(\"agent_os_get_context\", slug ? { slug } : {}, timeoutMs, directConfig);\r\n const summary = summarizeContextPayload(parsed);\r\n return toolJson({\r\n ok: true,\r\n status: \"available\",\r\n transport: \"direct-http\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n ...summary,\r\n });\r\n } catch (error: any) {\r\n return toolJson({\r\n ok: false,\r\n status: \"unavailable\",\r\n transport: \"direct-http\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n error: sanitizeHealthError(error),\r\n });\r\n }\r\n }\r\n\r\n const selector = `${serverName}.agent_os_get_context`;\r\n const args = [\"--config\", configPath, \"call\", selector];\r\n if (slug) {\r\n args.push(\"--args\", JSON.stringify({ slug }));\r\n }\r\n\r\n try {\r\n const { stdout, stderr } = await execFileAsync(mcporterExecutable(), args, {\r\n timeout: timeoutMs,\r\n maxBuffer: 1024 * 1024 * 4,\r\n shell: process.platform === \"win32\",\r\n });\r\n const text = `${stdout || \"\"}${stderr || \"\"}`.trim();\r\n const parsed = parseMcporterOutput(text);\r\n const summary = summarizeContextPayload(parsed);\r\n return toolJson({\r\n ok: true,\r\n status: \"available\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n ...summary,\r\n });\r\n } catch (error: any) {\r\n return toolJson({\r\n ok: false,\r\n status: \"unavailable\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n error: sanitizeHealthError(error),\r\n });\r\n }\r\n}\r\n\r\ntype DirectAgentOsConfig = {\r\n apiUrl: string;\r\n apiKey?: string;\r\n defaultSlug: string;\r\n};\r\n\r\nfunction resolveDirectAgentOsConfig({\r\n serverName,\r\n configPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n}: {\r\n serverName: string;\r\n configPath: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n}): DirectAgentOsConfig | undefined {\r\n if (kynverApiUrl?.trim()) {\r\n return {\r\n apiUrl: kynverApiUrl.trim().replace(/\\/$/, \"\"),\r\n apiKey: kynverApiKey?.trim() || undefined,\r\n defaultSlug: agentOsSlug?.trim() || \"ghost\",\r\n };\r\n }\r\n\r\n const envConfig = directConfigFromEnv(agentOsSlug, kynverApiKey);\r\n if (envConfig) return envConfig;\r\n\r\n try {\r\n const parsed = JSON.parse(readFileSync(configPath, \"utf8\")) as any;\r\n const server = parsed?.mcpServers?.[serverName];\r\n const env = server?.env;\r\n const apiUrl = typeof env?.KYNVER_API_URL === \"string\" ? env.KYNVER_API_URL.trim() : \"\";\r\n if (!apiUrl) return undefined;\r\n return {\r\n apiUrl: apiUrl.replace(/\\/$/, \"\"),\r\n apiKey: typeof env?.KYNVER_API_KEY === \"string\" ? env.KYNVER_API_KEY.trim() : undefined,\r\n defaultSlug:\r\n agentOsSlug?.trim() ||\r\n (typeof env?.KYNVER_AGENT_OS_SLUG === \"string\" && env.KYNVER_AGENT_OS_SLUG.trim()\r\n ? env.KYNVER_AGENT_OS_SLUG.trim()\r\n : \"ghost\"),\r\n };\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction directConfigFromEnv(agentOsSlug?: string, kynverApiKey?: string): DirectAgentOsConfig | undefined {\r\n const apiUrl = process.env.KYNVER_API_URL?.trim();\r\n if (!apiUrl) return undefined;\r\n return {\r\n apiUrl: apiUrl.replace(/\\/$/, \"\"),\r\n apiKey: kynverApiKey?.trim() || process.env.KYNVER_API_KEY?.trim() || undefined,\r\n defaultSlug: agentOsSlug?.trim() || process.env.KYNVER_AGENT_OS_SLUG?.trim() || \"ghost\",\r\n };\r\n}\r\n\r\nfunction isDirectConfigError(error: any) {\r\n return error?.code === \"AGENT_OS_DIRECT_CONFIG\";\r\n}\r\n\r\nasync function callAgentOsApiDirect(\r\n toolName: string,\r\n params: Record<string, unknown>,\r\n timeoutMs: number,\r\n config: DirectAgentOsConfig,\r\n) {\r\n const { slug, path, method, body } = directRequestForTool(toolName, params, config.defaultSlug);\r\n if (!slug) {\r\n const error = new Error(\"AgentOS slug could not be resolved.\") as Error & { code?: string };\r\n error.code = \"AGENT_OS_DIRECT_CONFIG\";\r\n throw error;\r\n }\r\n\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), timeoutMs);\r\n try {\r\n const res = await fetch(`${config.apiUrl}/api/agent-os/${encodeURIComponent(slug)}${path}`, {\r\n method,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...(config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : {}),\r\n },\r\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\r\n signal: controller.signal,\r\n });\r\n const text = await res.text();\r\n const payload = text ? safeJson(text) ?? text : {};\r\n if (!res.ok) {\r\n const message =\r\n payload && typeof payload === \"object\" && \"error\" in payload\r\n ? String((payload as any).error)\r\n : `HTTP ${res.status}`;\r\n throw new Error(message);\r\n }\r\n return payload;\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n}\r\n\r\nfunction directRequestForTool(toolName: string, params: Record<string, unknown>, defaultSlug: string) {\r\n const slug = stringParam(params.slug) || defaultSlug;\r\n const withoutSlug = stripKeys(params, [\"slug\"]);\r\n switch (toolName) {\r\n case \"agent_os_get_context\":\r\n return { slug, method: \"GET\", path: \"/stats\" };\r\n case \"agent_os_open_session\":\r\n return { slug, method: \"POST\", path: \"/sessions\", body: withoutSlug };\r\n case \"agent_os_close_session\": {\r\n const sessionId = requiredString(params.sessionId, \"sessionId\");\r\n return { slug, method: \"PATCH\", path: `/sessions/${encodeURIComponent(sessionId)}`, body: stripKeys(params, [\"slug\", \"sessionId\"]) };\r\n }\r\n case \"agent_os_log_session_event\": {\r\n const sessionId = requiredString(params.sessionId, \"sessionId\");\r\n return { slug, method: \"POST\", path: `/sessions/${encodeURIComponent(sessionId)}/events`, body: { event: stripKeys(params, [\"slug\", \"sessionId\"]) } };\r\n }\r\n case \"agent_os_log_session\": {\r\n const topics = arrayParam(params.topicsWorked);\r\n const decisions = arrayParam(params.keyDecisions);\r\n const lines = [requiredString(params.summary, \"summary\")];\r\n if (topics.length) lines.push(`Topics: ${topics.join(\", \")}`);\r\n if (decisions.length) lines.push(\"Key decisions:\", ...decisions.map((d) => `- ${d}`));\r\n return { slug, method: \"POST\", path: \"/daily-log\", body: { entry: lines.join(\"\\n\"), ...(stringParam(params.date) ? { date: stringParam(params.date) } : {}) } };\r\n }\r\n case \"agent_os_list_goals\":\r\n return { slug, method: \"GET\", path: `/goals${queryString(params, [\"status\", \"projectId\"])}` };\r\n case \"agent_os_update_goal\": {\r\n const goalId = stringParam(params.goalId);\r\n if (goalId) return { slug, method: \"PATCH\", path: `/goals/${encodeURIComponent(goalId)}`, body: stripKeys(params, [\"slug\", \"goalId\"]) };\r\n return { slug, method: \"POST\", path: \"/goals\", body: withoutSlug };\r\n }\r\n case \"agent_os_get_projects\":\r\n return { slug, method: \"GET\", path: `/projects${queryString(params, [\"status\"])}` };\r\n case \"agent_os_create_project\":\r\n return { slug, method: \"POST\", path: \"/projects\", body: withoutSlug };\r\n case \"agent_os_update_project\": {\r\n const projectId = requiredString(params.projectId, \"projectId\");\r\n return { slug, method: \"PATCH\", path: `/projects/${encodeURIComponent(projectId)}`, body: stripKeys(params, [\"slug\", \"projectId\"]) };\r\n }\r\n case \"agent_os_search_memory\": {\r\n const q = requiredString(params.query, \"query\");\r\n return { slug, method: \"GET\", path: `/memory?${queryStringFromEntries({ q, k: params.k })}` };\r\n }\r\n case \"agent_os_write_memory\": {\r\n const categoryToSourceId: Record<string, string> = {\r\n long_term: \"agent:long-term\",\r\n project: \"agent:project\",\r\n contact: \"agent:long-term\",\r\n tool_config: \"agent:long-term\",\r\n };\r\n const sourceId = stringParam(params.sourceId) || categoryToSourceId[stringParam(params.category) || \"\"];\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/memory\",\r\n body: compact({\r\n content: requiredString(params.content, \"content\"),\r\n slug: stringParam(params.key),\r\n sourceId,\r\n metadata: params.metadata,\r\n sourceRefs: params.sourceRefs,\r\n memoryType: params.memoryType,\r\n confidence: params.confidence,\r\n reviewStatus: params.reviewStatus,\r\n projectId: params.projectId,\r\n goalId: params.goalId,\r\n contactId: params.contactId,\r\n }),\r\n };\r\n }\r\n case \"agent_os_update_memory\":\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/memory\",\r\n body: compact({\r\n content: requiredString(params.content, \"content\"),\r\n slug: requiredString(params.key, \"key\"),\r\n sourceId: stringParam(params.sourceId),\r\n metadata: params.metadata,\r\n sourceRefs: params.sourceRefs,\r\n memoryType: params.memoryType,\r\n confidence: params.confidence,\r\n reviewStatus: params.reviewStatus,\r\n projectId: params.projectId,\r\n goalId: params.goalId,\r\n contactId: params.contactId,\r\n }),\r\n };\r\n case \"agent_os_get_contacts\":\r\n return { slug, method: \"GET\", path: \"/contacts\" };\r\n case \"agent_os_create_contact\":\r\n return { slug, method: \"POST\", path: \"/contacts\", body: withoutSlug };\r\n case \"agent_os_update_contact\": {\r\n const contactId = requiredString(params.contactId, \"contactId\");\r\n return { slug, method: \"PATCH\", path: `/contacts/${encodeURIComponent(contactId)}`, body: stripKeys(params, [\"slug\", \"contactId\"]) };\r\n }\r\n case \"agent_os_consolidate_memory\":\r\n return { slug, method: \"POST\", path: \"/consolidate\", body: {} };\r\n default:\r\n throw new Error(`Unsupported AgentOS direct tool: ${toolName}`);\r\n }\r\n}\r\n\r\nfunction requiredString(value: unknown, name: string) {\r\n const stringValue = stringParam(value);\r\n if (!stringValue) throw new Error(`${name} is required`);\r\n return stringValue;\r\n}\r\n\r\nfunction stringParam(value: unknown) {\r\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\r\n}\r\n\r\nfunction arrayParam(value: unknown) {\r\n return Array.isArray(value)\r\n ? value.filter((item): item is string => typeof item === \"string\" && !!item.trim()).map((item) => item.trim())\r\n : [];\r\n}\r\n\r\nfunction stripKeys(source: Record<string, unknown>, keys: string[]) {\r\n const out: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(source)) {\r\n if (!keys.includes(key) && value !== undefined) out[key] = value;\r\n }\r\n return out;\r\n}\r\n\r\nfunction compact(source: Record<string, unknown>) {\r\n const out: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value !== undefined) out[key] = value;\r\n }\r\n return out;\r\n}\r\n\r\nfunction queryString(params: Record<string, unknown>, keys: string[]) {\r\n return queryStringFromEntries(Object.fromEntries(keys.map((key) => [key, params[key]])));\r\n}\r\n\r\nfunction queryStringFromEntries(entries: Record<string, unknown>) {\r\n const params = new URLSearchParams();\r\n for (const [key, value] of Object.entries(entries)) {\r\n if (typeof value === \"string\" && value.trim()) params.set(key, value.trim());\r\n else if (typeof value === \"number\" && Number.isFinite(value)) params.set(key, String(value));\r\n }\r\n const qs = params.toString();\r\n return qs ? `?${qs}` : \"\";\r\n}\r\n\r\nfunction parseMcporterOutput(text: string) {\r\n const trimmed = text.trim();\r\n if (!trimmed) return { ok: true, empty: true };\r\n\r\n const codeFenceMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\r\n if (codeFenceMatch) {\r\n const inner = codeFenceMatch[1].trim();\r\n return safeJson(inner) ?? { raw: trimmed };\r\n }\r\n\r\n const firstBrace = trimmed.indexOf(\"{\");\r\n const firstBracket = trimmed.indexOf(\"[\");\r\n let start = -1;\r\n if (firstBrace >= 0 && firstBracket >= 0) start = Math.min(firstBrace, firstBracket);\r\n else start = Math.max(firstBrace, firstBracket);\r\n\r\n if (start >= 0) {\r\n const candidate = trimmed.slice(start);\r\n return safeJson(candidate) ?? { raw: trimmed };\r\n }\r\n\r\n return { raw: trimmed };\r\n}\r\n\r\nfunction safeJson(value: string) {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction resolveMcporterConfigPath(configuredPath?: string) {\r\n const here = fileURLToPath(new URL(\".\", import.meta.url));\r\n const homeDir = os.homedir();\r\n const candidates = [\r\n configuredPath,\r\n process.env.MCPORTER_CONFIG,\r\n process.env.OPENCLAW_MCPORTER_CONFIG,\r\n homeDir ? path.resolve(homeDir, \".openclaw\", \"workspace\", \"config\", \"mcporter.json\") : undefined,\r\n path.resolve(here, \"../../config/mcporter.json\"),\r\n path.resolve(here, \"../../../config/mcporter.json\"),\r\n path.resolve(process.cwd(), \"config/mcporter.json\"),\r\n ].filter((candidate): candidate is string => Boolean(candidate));\r\n for (const candidate of candidates) {\r\n if (existsSync(candidate)) return candidate;\r\n }\r\n return path.resolve(process.cwd(), \"config/mcporter.json\");\r\n}\r\n\r\nfunction mcporterExecutable() {\r\n return process.platform === \"win32\" ? \"mcporter.cmd\" : \"mcporter\";\r\n}\r\n\r\nfunction summarizeContextPayload(payload: unknown) {\r\n if (!payload || typeof payload !== \"object\") return {};\r\n const record = payload as Record<string, any>;\r\n const identity = record.identity && typeof record.identity === \"object\" ? record.identity : undefined;\r\n return {\r\n slug: typeof identity?.slug === \"string\" ? identity.slug : undefined,\r\n openGoalCount: typeof record.openGoalCount === \"number\" ? record.openGoalCount : undefined,\r\n projectCount: Array.isArray(record.projects) ? record.projects.length : undefined,\r\n contactCount: Array.isArray(record.contacts) ? record.contacts.length : undefined,\r\n memoryStats: record.memoryStats && typeof record.memoryStats === \"object\" ? record.memoryStats : undefined,\r\n };\r\n}\r\n\r\nfunction sanitizeHealthError(error: any) {\r\n const message = String(error?.message || error).replace(/kynver_[A-Za-z0-9_]+/g, \"kynver_[REDACTED]\");\r\n return {\r\n message,\r\n code: typeof error?.code === \"string\" ? error.code : undefined,\r\n signal: typeof error?.signal === \"string\" ? error.signal : undefined,\r\n stdout: typeof error?.stdout === \"string\" ? redactSecrets(error.stdout).slice(0, 2000) : undefined,\r\n stderr: typeof error?.stderr === \"string\" ? redactSecrets(error.stderr).slice(0, 2000) : undefined,\r\n };\r\n}\r\n\r\nfunction redactSecrets(value: string) {\r\n return value.replace(/kynver_[A-Za-z0-9_]+/g, \"kynver_[REDACTED]\");\r\n}\r\n", "export function toolJson(payload: unknown) {\r\n return {\r\n content: [{ type: \"text\" as const, text: JSON.stringify(payload, null, 2) }],\r\n details: payload,\r\n };\r\n}\r\n\r\nexport function toolError(message: string, details?: unknown) {\r\n return {\r\n content: [{ type: \"text\" as const, text: message }],\r\n details,\r\n isError: true,\r\n };\r\n}\r\n", "export const slugOnlySchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug. Defaults to KYNVER_AGENT_OS_SLUG, then 'ghost'.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const stringArray = {\r\n type: \"array\",\r\n items: { type: \"string\" },\r\n};\r\n\r\nexport const looseObject = {\r\n type: \"object\",\r\n additionalProperties: {},\r\n};\r\n", "import { looseObject } from \"./common.js\";\r\n\r\nexport const getContactsSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const createContactSchema = {\r\n type: \"object\",\r\n properties: {\r\n name: { type: \"string\" },\r\n relationship: { type: \"string\" },\r\n context: { type: \"string\" },\r\n preferences: looseObject,\r\n notes: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"name\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateContactSchema = {\r\n type: \"object\",\r\n properties: {\r\n contactId: { type: \"string\" },\r\n name: { type: \"string\" },\r\n relationship: { type: \"string\" },\r\n context: { type: \"string\" },\r\n preferences: looseObject,\r\n notes: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"contactId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { createContactSchema, getContactsSchema, updateContactSchema } from \"../schemas/contacts.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createContactTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_get_contacts\", \"Get all AgentOS contacts.\", getContactsSchema),\r\n mk(\"agent_os_create_contact\", \"Create or upsert an AgentOS contact.\", createContactSchema),\r\n mk(\"agent_os_update_contact\", \"Update an existing AgentOS contact.\", updateContactSchema),\r\n ];\r\n}\r\n", "export const getContextSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug. Defaults to KYNVER_AGENT_OS_SLUG, then 'ghost'.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { getContextSchema } from \"../schemas/context.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createContextTools(config: PluginConfig) {\r\n return [\r\n {\r\n name: \"agent_os_get_context\",\r\n label: \"AgentOS Get Context\",\r\n description:\r\n \"Get the agent's full AgentOS state in one call: identity, goals, projects, contacts, sessions, and memory stats.\",\r\n parameters: getContextSchema,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_get_context\",\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n },\r\n ];\r\n}\r\n", "export const listGoalsSchema = {\r\n type: \"object\",\r\n properties: {\r\n status: { type: \"string\", enum: [\"open\", \"in_progress\", \"blocked\", \"complete\", \"cancelled\"] },\r\n projectId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateGoalSchema = {\r\n type: \"object\",\r\n properties: {\r\n title: { type: \"string\", description: \"Goal title. Required when creating.\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"open\", \"in_progress\", \"blocked\", \"complete\", \"cancelled\"] },\r\n priority: { type: \"string\", enum: [\"low\", \"normal\", \"high\", \"critical\"] },\r\n projectId: { type: \"string\" },\r\n analystHypothesisId: { type: \"string\" },\r\n outcome: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { listGoalsSchema, updateGoalSchema } from \"../schemas/goals.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createGoalTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_list_goals\", \"List AgentOS goals, optionally filtered by status or project.\", listGoalsSchema),\r\n mk(\"agent_os_update_goal\", \"Create a goal or update an existing AgentOS goal.\", updateGoalSchema),\r\n ];\r\n}\r\n", "export const healthCheckSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug to probe. Defaults to the AgentOS server default.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { checkAgentOsHealth } from \"../mcporter-client.js\";\r\nimport { healthCheckSchema } from \"../schemas/health.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createHealthTools(config: PluginConfig) {\r\n return [\r\n {\r\n name: \"agent_os_health_check\",\r\n label: \"AgentOS Health Check\",\r\n description: \"Check whether Kynver AgentOS is reachable through the configured first-class tool bridge.\",\r\n parameters: healthCheckSchema,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n checkAgentOsHealth({\r\n serverName: config.agentOsServer,\r\n slug: typeof params.slug === \"string\" && params.slug.trim() ? params.slug.trim() : undefined,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n },\r\n ];\r\n}\r\n", "import { looseObject } from \"./common.js\";\r\n\r\nconst sourceRef = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"repo\", \"commit\", \"branch\", \"pr\", \"map\", \"session\", \"tool\", \"url\", \"manual\", \"unknown\"] },\r\n label: { type: \"string\" },\r\n repo: { type: \"string\" },\r\n path: { type: \"string\" },\r\n commit: { type: \"string\" },\r\n branch: { type: \"string\" },\r\n pr: { oneOf: [{ type: \"number\" }, { type: \"string\" }] },\r\n url: { type: \"string\" },\r\n sessionId: { type: \"string\" },\r\n toolName: { type: \"string\" },\r\n note: { type: \"string\" },\r\n },\r\n required: [\"type\"],\r\n additionalProperties: true,\r\n};\r\n\r\nconst sourceRefs = {\r\n type: \"array\",\r\n items: sourceRef,\r\n};\r\n\r\nconst memoryType = {\r\n type: \"string\",\r\n enum: [\"decision\", \"lesson\", \"fact\", \"preference\", \"project_update\", \"runbook\", \"source_map\", \"correction\", \"note\"],\r\n description: \"What kind of durable memory this is. Use note only when a more specific type does not fit.\",\r\n};\r\n\r\nconst confidence = {\r\n type: \"string\",\r\n enum: [\"low\", \"medium\", \"high\"],\r\n description: \"How reliable this memory is based on available evidence.\",\r\n};\r\n\r\nconst reviewStatus = {\r\n type: \"string\",\r\n enum: [\"none\", \"needs_review\", \"reviewed\", \"stale\", \"rejected\"],\r\n description: \"Set needs_review for important, uncertain, stale-looking, or user-correctable memories.\",\r\n};\r\n\r\nexport const searchMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n query: { type: \"string\" },\r\n k: { type: \"number\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"query\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const writeMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n content: { type: \"string\" },\r\n key: { type: \"string\" },\r\n category: { type: \"string\", enum: [\"long_term\", \"project\", \"contact\", \"tool_config\"] },\r\n sourceId: { type: \"string\" },\r\n metadata: looseObject,\r\n sourceRefs,\r\n memoryType,\r\n confidence,\r\n reviewStatus,\r\n projectId: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n contactId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"content\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n key: { type: \"string\" },\r\n content: { type: \"string\" },\r\n sourceId: { type: \"string\" },\r\n metadata: looseObject,\r\n sourceRefs,\r\n memoryType,\r\n confidence,\r\n reviewStatus,\r\n projectId: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n contactId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"key\", \"content\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const consolidateMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport {\r\n consolidateMemorySchema,\r\n searchMemorySchema,\r\n updateMemorySchema,\r\n writeMemorySchema,\r\n} from \"../schemas/memory.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createMemoryTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_search_memory\", \"Search AgentOS memory using semantic + keyword hybrid recall.\", searchMemorySchema),\r\n mk(\r\n \"agent_os_write_memory\",\r\n \"Write durable AgentOS memory for facts, decisions, lessons, preferences, source maps, and runbooks. Prefer session event/log tools for ordinary progress; include sourceRefs plus memoryType/confidence/reviewStatus when possible.\",\r\n writeMemorySchema,\r\n ),\r\n mk(\r\n \"agent_os_update_memory\",\r\n \"Update an existing AgentOS memory entry by key, preserving or improving sourceRefs and writer-contract fields for auditability.\",\r\n updateMemorySchema,\r\n ),\r\n mk(\"agent_os_consolidate_memory\", \"Trigger an AgentOS memory consolidation pass.\", consolidateMemorySchema),\r\n ];\r\n}\r\n", "import { stringArray } from \"./common.js\";\r\n\r\nexport const getProjectsSchema = {\r\n type: \"object\",\r\n properties: {\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"] },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const createProjectSchema = {\r\n type: \"object\",\r\n properties: {\r\n name: { type: \"string\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"], default: \"active\" },\r\n currentFocus: { type: \"string\" },\r\n nextActions: stringArray,\r\n blockers: stringArray,\r\n repoUrl: { type: \"string\" },\r\n deployUrl: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"name\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateProjectSchema = {\r\n type: \"object\",\r\n properties: {\r\n projectId: { type: \"string\" },\r\n name: { type: \"string\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"] },\r\n currentFocus: { type: \"string\" },\r\n nextActions: stringArray,\r\n blockers: stringArray,\r\n repoUrl: { type: \"string\" },\r\n deployUrl: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"projectId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { createProjectSchema, getProjectsSchema, updateProjectSchema } from \"../schemas/projects.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createProjectTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_get_projects\", \"Get all tracked AgentOS projects.\", getProjectsSchema),\r\n mk(\"agent_os_create_project\", \"Create a new AgentOS project.\", createProjectSchema),\r\n mk(\"agent_os_update_project\", \"Update an existing AgentOS project.\", updateProjectSchema),\r\n ];\r\n}\r\n", "import { stringArray } from \"./common.js\";\r\n\r\nconst sourceRef = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"repo\", \"commit\", \"branch\", \"pr\", \"map\", \"session\", \"tool\", \"url\", \"manual\", \"unknown\"] },\r\n label: { type: \"string\" },\r\n repo: { type: \"string\" },\r\n path: { type: \"string\" },\r\n commit: { type: \"string\" },\r\n branch: { type: \"string\" },\r\n pr: { oneOf: [{ type: \"number\" }, { type: \"string\" }] },\r\n url: { type: \"string\" },\r\n sessionId: { type: \"string\" },\r\n toolName: { type: \"string\" },\r\n note: { type: \"string\" },\r\n },\r\n required: [\"type\"],\r\n additionalProperties: true,\r\n};\r\n\r\nconst sessionEvent = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"topic\", \"decision\", \"action\", \"file\", \"commit\", \"pr\", \"tool\", \"follow_up\", \"blocker\", \"note\"] },\r\n summary: { type: \"string\" },\r\n timestamp: { type: \"string\" },\r\n details: { type: \"object\", additionalProperties: {} },\r\n sourceRefs: { type: \"array\", items: sourceRef },\r\n },\r\n required: [\"summary\"],\r\n additionalProperties: true,\r\n};\r\n\r\nexport const openSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n channel: { type: \"string\", description: \"Runtime channel: 'webchat' | 'telegram' | 'discord' | \u2026\" },\r\n model: { type: \"string\", description: \"Model used for the session.\" },\r\n slug: { type: \"string\", description: \"AgentOS slug. Defaults to KYNVER_AGENT_OS_SLUG, then 'ghost'.\" },\r\n },\r\n required: [\"channel\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const closeSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n sessionId: { type: \"string\" },\r\n summary: { type: \"string\" },\r\n topicsWorked: stringArray,\r\n decisionsLog: {},\r\n events: { type: \"array\", items: sessionEvent },\r\n goalIds: stringArray,\r\n projectIds: stringArray,\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"sessionId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const logSessionEventSchema = {\r\n type: \"object\",\r\n properties: {\r\n sessionId: { type: \"string\" },\r\n type: { type: \"string\", enum: [\"topic\", \"decision\", \"action\", \"file\", \"commit\", \"pr\", \"tool\", \"follow_up\", \"blocker\", \"note\"] },\r\n summary: { type: \"string\" },\r\n timestamp: { type: \"string\" },\r\n details: { type: \"object\", additionalProperties: {} },\r\n sourceRefs: { type: \"array\", items: sourceRef },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"sessionId\", \"summary\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const logSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n summary: { type: \"string\", description: \"2-4 sentence summary of what was worked on.\" },\r\n topicsWorked: stringArray,\r\n keyDecisions: stringArray,\r\n date: { type: \"string\", description: \"Date to log against (YYYY-MM-DD, defaults to today UTC).\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"summary\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { closeSessionSchema, logSessionEventSchema, logSessionSchema, openSessionSchema } from \"../schemas/sessions.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createSessionTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_open_session\", \"Open an AgentOS session record at the start of a session.\", openSessionSchema),\r\n mk(\"agent_os_close_session\", \"Close an AgentOS session record with summary, decisions, and linked goals/projects.\", closeSessionSchema),\r\n mk(\"agent_os_log_session_event\", \"Append a structured event to an open AgentOS session trace.\", logSessionEventSchema),\r\n mk(\"agent_os_log_session\", \"Append a structured session log entry to AgentOS daily notes.\", logSessionSchema),\r\n ];\r\n}\r\n", "import { createContactTools } from \"./contacts.js\";\r\nimport { createContextTools } from \"./context.js\";\r\nimport { createGoalTools } from \"./goals.js\";\r\nimport { createHealthTools } from \"./health.js\";\r\nimport { createMemoryTools } from \"./memory.js\";\r\nimport { createProjectTools } from \"./projects.js\";\r\nimport { createSessionTools } from \"./sessions.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createAllTools(config: PluginConfig) {\r\n return [\r\n ...createHealthTools(config),\r\n ...createContextTools(config),\r\n ...createSessionTools(config),\r\n ...createGoalTools(config),\r\n ...createProjectTools(config),\r\n ...createMemoryTools(config),\r\n ...createContactTools(config),\r\n ];\r\n}\r\n", "import { pluginConfigSchema, resolvePluginConfig } from \"./src/config.js\";\r\nimport { callAgentOsTool } from \"./src/mcporter-client.js\";\r\nimport { createAllTools } from \"./src/tools/index.js\";\r\n\r\nconst plugin = {\r\n id: \"kynver-agent-os-tools\",\r\n name: \"Kynver AgentOS Tools\",\r\n description: \"First-class OpenClaw tools for Kynver AgentOS, using direct Kynver HTTP with mcporter fallback.\",\r\n configSchema: pluginConfigSchema,\r\n register(api: any) {\r\n const config = resolvePluginConfig(api?.config);\r\n const tools = createAllTools(config);\r\n for (const tool of tools) {\r\n api.registerTool(tool);\r\n }\r\n if (config.enableSessionLifecycle && typeof api.on === \"function\") {\r\n const sessionIds = new Map<string, string>();\r\n const keyFor = (event: any, ctx: any) => String(event?.sessionKey || ctx?.sessionKey || event?.sessionId || ctx?.sessionId || \"\");\r\n const shouldTrack = (key: string) => key && !key.includes(\"subagent\") && !key.includes(\"acp\") && !key.includes(\"isolated\");\r\n const channelFor = (key: string) => {\r\n if (key.includes(\"telegram\")) return \"telegram\";\r\n if (key.includes(\"discord\")) return \"discord\";\r\n if (key.includes(\"webchat\")) return \"webchat\";\r\n return \"openclaw\";\r\n };\r\n\r\n api.on(\r\n \"session_start\",\r\n async (event: any, ctx: any) => {\r\n const key = keyFor(event, ctx);\r\n if (!shouldTrack(key) || sessionIds.has(key)) return;\r\n const result = await callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_open_session\",\r\n params: { channel: channelFor(key), model: \"openclaw\" },\r\n timeoutMs: Math.min(config.timeoutMs, 10000),\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n });\r\n const id = (result as any)?.details?.id;\r\n if (typeof id === \"string\") sessionIds.set(key, id);\r\n },\r\n { priority: 10, timeoutMs: 12000 },\r\n );\r\n\r\n api.on(\r\n \"session_end\",\r\n async (event: any, ctx: any) => {\r\n const key = keyFor(event, ctx);\r\n const sessionId = sessionIds.get(key);\r\n if (!sessionId) return;\r\n sessionIds.delete(key);\r\n const reason = typeof event?.reason === \"string\" ? event.reason : \"unknown\";\r\n const messageCount = typeof event?.messageCount === \"number\" ? event.messageCount : undefined;\r\n const durationMs = typeof event?.durationMs === \"number\" ? event.durationMs : undefined;\r\n await callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_close_session\",\r\n params: {\r\n sessionId,\r\n summary: `OpenClaw session ended automatically (reason: ${reason}; messages: ${messageCount ?? \"unknown\"}; durationMs: ${durationMs ?? \"unknown\"}).`,\r\n topicsWorked: [\"OpenClaw session lifecycle\"],\r\n },\r\n timeoutMs: Math.min(config.timeoutMs, 10000),\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n });\r\n },\r\n { priority: 10, timeoutMs: 12000 },\r\n );\r\n }\r\n },\r\n};\r\n\r\nexport default plugin;\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["path", "sourceRef"]
|
|
3
|
+
"sources": ["../src/config.ts", "../src/mcporter-client.ts", "../src/result.ts", "../src/schemas/common.ts", "../src/schemas/contacts.ts", "../src/tools/contacts.ts", "../src/schemas/context.ts", "../src/tools/context.ts", "../src/schemas/goals.ts", "../src/tools/goals.ts", "../src/schemas/health.ts", "../src/tools/health.ts", "../src/schemas/memory.ts", "../src/tools/memory.ts", "../src/schemas/projects.ts", "../src/tools/projects.ts", "../src/schemas/sessions.ts", "../src/tools/sessions.ts", "../src/schemas/skills.ts", "../src/tools/skills.ts", "../src/tools/index.ts", "../index.ts"],
|
|
4
|
+
"sourcesContent": ["export const pluginConfigSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n agentOsServer: {\r\n type: \"string\",\r\n default: \"kynver-agent-os\",\r\n description: \"mcporter server name for the Kynver AgentOS MCP server\",\r\n },\r\n timeoutMs: {\r\n type: \"number\",\r\n default: 30000,\r\n description: \"Timeout in milliseconds for mcporter calls\",\r\n },\r\n mcporterConfigPath: {\r\n type: \"string\",\r\n description:\r\n \"Explicit path to mcporter.json. Defaults to MCPORTER_CONFIG, OPENCLAW_MCPORTER_CONFIG, then <home>/.openclaw/workspace/config/mcporter.json.\",\r\n },\r\n kynverApiUrl: {\r\n type: \"string\",\r\n description:\r\n \"Kynver API origin for direct HTTP mode, for example https://www.kynver.com. Falls back to KYNVER_API_URL or mcporter env.\",\r\n },\r\n kynverApiKey: {\r\n type: \"string\",\r\n description: \"Kynver API key for direct HTTP mode. Prefer OpenClaw secret references when available.\",\r\n },\r\n agentOsSlug: {\r\n type: \"string\",\r\n description:\r\n \"Optional default AgentOS slug to use when a tool call does not pass slug. Use the primary slug from Kynver /agent-os; omit to resolve the account's primary AgentOS workspace.\",\r\n },\r\n enableDirectHttp: {\r\n type: \"boolean\",\r\n default: true,\r\n description: \"Use Kynver's AgentOS HTTP API directly when configured; mcporter remains the compatibility fallback.\",\r\n },\r\n enableSessionLifecycle: {\r\n type: \"boolean\",\r\n default: true,\r\n description: \"Automatically open and close AgentOS session records from OpenClaw session lifecycle hooks.\",\r\n },\r\n },\r\n};\r\n\r\nexport function resolvePluginConfig(raw: Record<string, unknown> | undefined) {\r\n return {\r\n agentOsServer:\r\n typeof raw?.agentOsServer === \"string\" && raw.agentOsServer.trim()\r\n ? raw.agentOsServer.trim()\r\n : \"kynver-agent-os\",\r\n timeoutMs:\r\n typeof raw?.timeoutMs === \"number\" && Number.isFinite(raw.timeoutMs) && raw.timeoutMs > 0\r\n ? raw.timeoutMs\r\n : 30000,\r\n mcporterConfigPath:\r\n typeof raw?.mcporterConfigPath === \"string\" && raw.mcporterConfigPath.trim()\r\n ? raw.mcporterConfigPath.trim()\r\n : undefined,\r\n kynverApiUrl:\r\n typeof raw?.kynverApiUrl === \"string\" && raw.kynverApiUrl.trim()\r\n ? raw.kynverApiUrl.trim().replace(/\\/$/, \"\")\r\n : undefined,\r\n kynverApiKey:\r\n typeof raw?.kynverApiKey === \"string\" && raw.kynverApiKey.trim() ? raw.kynverApiKey.trim() : undefined,\r\n agentOsSlug:\r\n typeof raw?.agentOsSlug === \"string\" && raw.agentOsSlug.trim() ? raw.agentOsSlug.trim() : undefined,\r\n enableDirectHttp: typeof raw?.enableDirectHttp === \"boolean\" ? raw.enableDirectHttp : true,\r\n enableSessionLifecycle: typeof raw?.enableSessionLifecycle === \"boolean\" ? raw.enableSessionLifecycle : true,\r\n };\r\n}\r\n", "import { execFile } from \"node:child_process\";\r\nimport { existsSync, readFileSync } from \"node:fs\";\r\nimport os from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { promisify } from \"node:util\";\r\nimport { toolError, toolJson } from \"./result.js\";\r\n\r\nconst execFileAsync = promisify(execFile);\r\n\r\nexport async function callAgentOsTool({\r\n serverName,\r\n toolName,\r\n params,\r\n timeoutMs,\r\n mcporterConfigPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n enableDirectHttp = true,\r\n}: {\r\n serverName: string;\r\n toolName: string;\r\n params?: Record<string, unknown>;\r\n timeoutMs: number;\r\n mcporterConfigPath?: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n enableDirectHttp?: boolean;\r\n}) {\r\n const configPath = resolveMcporterConfigPath(mcporterConfigPath);\r\n const directConfig = enableDirectHttp\r\n ? resolveDirectAgentOsConfig({ serverName, configPath, kynverApiUrl, kynverApiKey, agentOsSlug })\r\n : undefined;\r\n if (directConfig) {\r\n try {\r\n return toolJson(await callAgentOsApiDirect(toolName, params ?? {}, timeoutMs, directConfig));\r\n } catch (error: any) {\r\n // Keep mcporter as a compatibility fallback while the native client matures.\r\n if (!isDirectConfigError(error)) {\r\n return toolError(`Kynver AgentOS direct call failed for ${toolName}.`, {\r\n toolName,\r\n serverName,\r\n message: redactSecrets(String(error?.message || error)),\r\n });\r\n }\r\n }\r\n }\r\n\r\n const selector = `${serverName}.${toolName}`;\r\n const args = [\"--config\", configPath, \"call\", selector];\r\n const hasParams = params && Object.keys(params).length > 0;\r\n if (hasParams) {\r\n args.push(\"--args\", JSON.stringify(params));\r\n }\r\n\r\n try {\r\n const { stdout, stderr } = await execFileAsync(mcporterExecutable(), args, {\r\n timeout: timeoutMs,\r\n maxBuffer: 1024 * 1024 * 4,\r\n shell: process.platform === \"win32\",\r\n });\r\n const text = `${stdout || \"\"}${stderr || \"\"}`.trim();\r\n const parsed = parseMcporterOutput(text);\r\n return toolJson(parsed);\r\n } catch (error: any) {\r\n const msg = String(error?.message || error);\r\n if (msg.includes(\"timed out\")) {\r\n return toolError(`Kynver AgentOS call timed out after ${timeoutMs}ms.`, { toolName, serverName });\r\n }\r\n return toolError(`Kynver AgentOS call failed for ${toolName}.`, {\r\n toolName,\r\n serverName,\r\n message: msg,\r\n stdout: error?.stdout,\r\n stderr: error?.stderr,\r\n });\r\n }\r\n}\r\n\r\nexport async function checkAgentOsHealth({\r\n serverName,\r\n slug,\r\n timeoutMs,\r\n mcporterConfigPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n enableDirectHttp = true,\r\n}: {\r\n serverName: string;\r\n slug?: string;\r\n timeoutMs: number;\r\n mcporterConfigPath?: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n enableDirectHttp?: boolean;\r\n}) {\r\n const startedAt = Date.now();\r\n const configPath = resolveMcporterConfigPath(mcporterConfigPath);\r\n const directConfig = enableDirectHttp\r\n ? resolveDirectAgentOsConfig({ serverName, configPath, kynverApiUrl, kynverApiKey, agentOsSlug })\r\n : undefined;\r\n if (directConfig) {\r\n try {\r\n const parsed = await callAgentOsApiDirect(\"agent_os_get_context\", slug ? { slug } : {}, timeoutMs, directConfig);\r\n const summary = summarizeContextPayload(parsed);\r\n return toolJson({\r\n ok: true,\r\n status: \"available\",\r\n transport: \"direct-http\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n ...summary,\r\n });\r\n } catch (error: any) {\r\n return toolJson({\r\n ok: false,\r\n status: \"unavailable\",\r\n transport: \"direct-http\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n error: sanitizeHealthError(error),\r\n });\r\n }\r\n }\r\n\r\n const selector = `${serverName}.agent_os_get_context`;\r\n const args = [\"--config\", configPath, \"call\", selector];\r\n if (slug) {\r\n args.push(\"--args\", JSON.stringify({ slug }));\r\n }\r\n\r\n try {\r\n const { stdout, stderr } = await execFileAsync(mcporterExecutable(), args, {\r\n timeout: timeoutMs,\r\n maxBuffer: 1024 * 1024 * 4,\r\n shell: process.platform === \"win32\",\r\n });\r\n const text = `${stdout || \"\"}${stderr || \"\"}`.trim();\r\n const parsed = parseMcporterOutput(text);\r\n const summary = summarizeContextPayload(parsed);\r\n return toolJson({\r\n ok: true,\r\n status: \"available\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n ...summary,\r\n });\r\n } catch (error: any) {\r\n return toolJson({\r\n ok: false,\r\n status: \"unavailable\",\r\n serverName,\r\n probeTool: \"agent_os_get_context\",\r\n latencyMs: Date.now() - startedAt,\r\n checkedAt: new Date().toISOString(),\r\n configPath,\r\n error: sanitizeHealthError(error),\r\n });\r\n }\r\n}\r\n\r\ntype DirectAgentOsConfig = {\r\n apiUrl: string;\r\n apiKey?: string;\r\n defaultSlug: string;\r\n};\r\n\r\nfunction resolveDirectAgentOsConfig({\r\n serverName,\r\n configPath,\r\n kynverApiUrl,\r\n kynverApiKey,\r\n agentOsSlug,\r\n}: {\r\n serverName: string;\r\n configPath: string;\r\n kynverApiUrl?: string;\r\n kynverApiKey?: string;\r\n agentOsSlug?: string;\r\n}): DirectAgentOsConfig | undefined {\r\n if (kynverApiUrl?.trim()) {\r\n return {\r\n apiUrl: kynverApiUrl.trim().replace(/\\/$/, \"\"),\r\n apiKey: kynverApiKey?.trim() || undefined,\r\n defaultSlug: agentOsSlug?.trim() || \"ghost\",\r\n };\r\n }\r\n\r\n const envConfig = directConfigFromEnv(agentOsSlug, kynverApiKey);\r\n if (envConfig) return envConfig;\r\n\r\n try {\r\n const parsed = JSON.parse(readFileSync(configPath, \"utf8\")) as any;\r\n const server = parsed?.mcpServers?.[serverName];\r\n const env = server?.env;\r\n const apiUrl = typeof env?.KYNVER_API_URL === \"string\" ? env.KYNVER_API_URL.trim() : \"\";\r\n if (!apiUrl) return undefined;\r\n return {\r\n apiUrl: apiUrl.replace(/\\/$/, \"\"),\r\n apiKey: typeof env?.KYNVER_API_KEY === \"string\" ? env.KYNVER_API_KEY.trim() : undefined,\r\n defaultSlug:\r\n agentOsSlug?.trim() ||\r\n (typeof env?.KYNVER_AGENT_OS_SLUG === \"string\" && env.KYNVER_AGENT_OS_SLUG.trim()\r\n ? env.KYNVER_AGENT_OS_SLUG.trim()\r\n : \"ghost\"),\r\n };\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction directConfigFromEnv(agentOsSlug?: string, kynverApiKey?: string): DirectAgentOsConfig | undefined {\r\n const apiUrl = process.env.KYNVER_API_URL?.trim();\r\n if (!apiUrl) return undefined;\r\n return {\r\n apiUrl: apiUrl.replace(/\\/$/, \"\"),\r\n apiKey: kynverApiKey?.trim() || process.env.KYNVER_API_KEY?.trim() || undefined,\r\n defaultSlug: agentOsSlug?.trim() || process.env.KYNVER_AGENT_OS_SLUG?.trim() || \"ghost\",\r\n };\r\n}\r\n\r\nfunction isDirectConfigError(error: any) {\r\n return error?.code === \"AGENT_OS_DIRECT_CONFIG\";\r\n}\r\n\r\nasync function callAgentOsApiDirect(\r\n toolName: string,\r\n params: Record<string, unknown>,\r\n timeoutMs: number,\r\n config: DirectAgentOsConfig,\r\n) {\r\n const { slug, path, method, body } = directRequestForTool(toolName, params, config.defaultSlug);\r\n if (!slug) {\r\n const error = new Error(\"AgentOS slug could not be resolved.\") as Error & { code?: string };\r\n error.code = \"AGENT_OS_DIRECT_CONFIG\";\r\n throw error;\r\n }\r\n\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), timeoutMs);\r\n try {\r\n const res = await fetch(`${config.apiUrl}/api/agent-os/${encodeURIComponent(slug)}${path}`, {\r\n method,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...(config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : {}),\r\n },\r\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\r\n signal: controller.signal,\r\n });\r\n const text = await res.text();\r\n const payload = text ? safeJson(text) ?? text : {};\r\n if (!res.ok) {\r\n const message =\r\n payload && typeof payload === \"object\" && \"error\" in payload\r\n ? String((payload as any).error)\r\n : `HTTP ${res.status}`;\r\n throw new Error(message);\r\n }\r\n return payload;\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n}\r\n\r\nfunction directRequestForTool(toolName: string, params: Record<string, unknown>, defaultSlug: string) {\r\n const slug = stringParam(params.slug) || defaultSlug;\r\n const withoutSlug = stripKeys(params, [\"slug\"]);\r\n switch (toolName) {\r\n case \"agent_os_get_context\":\r\n return { slug, method: \"GET\", path: \"/stats\" };\r\n case \"agent_os_open_session\":\r\n return { slug, method: \"POST\", path: \"/sessions\", body: withoutSlug };\r\n case \"agent_os_close_session\": {\r\n const sessionId = requiredString(params.sessionId, \"sessionId\");\r\n return { slug, method: \"PATCH\", path: `/sessions/${encodeURIComponent(sessionId)}`, body: stripKeys(params, [\"slug\", \"sessionId\"]) };\r\n }\r\n case \"agent_os_log_session_event\": {\r\n const sessionId = requiredString(params.sessionId, \"sessionId\");\r\n return { slug, method: \"POST\", path: `/sessions/${encodeURIComponent(sessionId)}/events`, body: { event: stripKeys(params, [\"slug\", \"sessionId\"]) } };\r\n }\r\n case \"agent_os_log_session\": {\r\n const topics = arrayParam(params.topicsWorked);\r\n const decisions = arrayParam(params.keyDecisions);\r\n const lines = [requiredString(params.summary, \"summary\")];\r\n if (topics.length) lines.push(`Topics: ${topics.join(\", \")}`);\r\n if (decisions.length) lines.push(\"Key decisions:\", ...decisions.map((d) => `- ${d}`));\r\n return { slug, method: \"POST\", path: \"/daily-log\", body: { entry: lines.join(\"\\n\"), ...(stringParam(params.date) ? { date: stringParam(params.date) } : {}) } };\r\n }\r\n case \"agent_os_list_goals\":\r\n return { slug, method: \"GET\", path: `/goals${queryString(params, [\"status\", \"projectId\"])}` };\r\n case \"agent_os_update_goal\": {\r\n const goalId = stringParam(params.goalId);\r\n if (goalId) return { slug, method: \"PATCH\", path: `/goals/${encodeURIComponent(goalId)}`, body: stripKeys(params, [\"slug\", \"goalId\"]) };\r\n return { slug, method: \"POST\", path: \"/goals\", body: withoutSlug };\r\n }\r\n case \"agent_os_get_projects\":\r\n return { slug, method: \"GET\", path: `/projects${queryString(params, [\"status\"])}` };\r\n case \"agent_os_create_project\":\r\n return { slug, method: \"POST\", path: \"/projects\", body: withoutSlug };\r\n case \"agent_os_update_project\": {\r\n const projectId = requiredString(params.projectId, \"projectId\");\r\n return { slug, method: \"PATCH\", path: `/projects/${encodeURIComponent(projectId)}`, body: stripKeys(params, [\"slug\", \"projectId\"]) };\r\n }\r\n case \"agent_os_search_memory\": {\r\n const q = requiredString(params.query, \"query\");\r\n return { slug, method: \"GET\", path: `/memory?${queryStringFromEntries({ q, k: params.k })}` };\r\n }\r\n case \"agent_os_list_skills\":\r\n return { slug, method: \"GET\", path: \"/skills\" };\r\n case \"agent_os_get_skill\": {\r\n const skillSlug = requiredString(params.skillSlug, \"skillSlug\");\r\n return { slug, method: \"GET\", path: \"/skills/\" + encodeURIComponent(skillSlug) + queryString(params, [\"source\"]) };\r\n }\r\n case \"agent_os_create_skill\": {\r\n const skillSlug = requiredString(params.skillSlug, \"skillSlug\");\r\n return { slug, method: \"POST\", path: \"/skills\", body: { ...stripKeys(params, [\"slug\", \"skillSlug\"]), slug: skillSlug } };\r\n }\r\n case \"agent_os_update_skill\": {\r\n const skillSlug = requiredString(params.skillSlug, \"skillSlug\");\r\n return { slug, method: \"PATCH\", path: \"/skills/\" + encodeURIComponent(skillSlug), body: stripKeys(params, [\"slug\", \"skillSlug\"]) };\r\n }\r\n case \"agent_os_import_skills\":\r\n return { slug, method: \"POST\", path: \"/skills/import\", body: withoutSlug };\r\n case \"agent_os_bind_skill\": {\r\n const skillSlug = requiredString(params.skillSlug, \"skillSlug\");\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/skills/\" + encodeURIComponent(skillSlug) + \"/bind\",\r\n body: stripKeys(params, [\"slug\", \"skillSlug\"]),\r\n };\r\n }\r\n case \"agent_os_write_memory\": {\r\n const categoryToSourceId: Record<string, string> = {\r\n long_term: \"agent:long-term\",\r\n project: \"agent:project\",\r\n contact: \"agent:long-term\",\r\n tool_config: \"agent:long-term\",\r\n };\r\n const sourceId = stringParam(params.sourceId) || categoryToSourceId[stringParam(params.category) || \"\"];\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/memory\",\r\n body: compact({\r\n content: requiredString(params.content, \"content\"),\r\n slug: stringParam(params.key),\r\n sourceId,\r\n metadata: params.metadata,\r\n sourceRefs: params.sourceRefs,\r\n memoryType: params.memoryType,\r\n confidence: params.confidence,\r\n reviewStatus: params.reviewStatus,\r\n projectId: params.projectId,\r\n goalId: params.goalId,\r\n contactId: params.contactId,\r\n skillId: params.skillId,\r\n }),\r\n };\r\n }\r\n case \"agent_os_write_skill_memory\":\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/memory\",\r\n body: compact({\r\n content: requiredString(params.content, \"content\"),\r\n slug: stringParam(params.key),\r\n sourceId: stringParam(params.sourceId) || \"agent:long-term\",\r\n metadata: params.metadata,\r\n sourceRefs: params.sourceRefs,\r\n memoryType: params.memoryType || \"lesson\",\r\n confidence: params.confidence,\r\n reviewStatus: params.reviewStatus,\r\n projectId: params.projectId,\r\n goalId: params.goalId,\r\n contactId: params.contactId,\r\n skillId: requiredString(params.skillId, \"skillId\"),\r\n }),\r\n };\r\n case \"agent_os_update_memory\":\r\n return {\r\n slug,\r\n method: \"POST\",\r\n path: \"/memory\",\r\n body: compact({\r\n content: requiredString(params.content, \"content\"),\r\n slug: requiredString(params.key, \"key\"),\r\n sourceId: stringParam(params.sourceId),\r\n metadata: params.metadata,\r\n sourceRefs: params.sourceRefs,\r\n memoryType: params.memoryType,\r\n confidence: params.confidence,\r\n reviewStatus: params.reviewStatus,\r\n projectId: params.projectId,\r\n goalId: params.goalId,\r\n contactId: params.contactId,\r\n skillId: params.skillId,\r\n }),\r\n };\r\n case \"agent_os_get_contacts\":\r\n return { slug, method: \"GET\", path: \"/contacts\" };\r\n case \"agent_os_create_contact\":\r\n return { slug, method: \"POST\", path: \"/contacts\", body: withoutSlug };\r\n case \"agent_os_update_contact\": {\r\n const contactId = requiredString(params.contactId, \"contactId\");\r\n return { slug, method: \"PATCH\", path: `/contacts/${encodeURIComponent(contactId)}`, body: stripKeys(params, [\"slug\", \"contactId\"]) };\r\n }\r\n case \"agent_os_consolidate_memory\":\r\n return { slug, method: \"POST\", path: \"/consolidate\", body: {} };\r\n default:\r\n throw new Error(`Unsupported AgentOS direct tool: ${toolName}`);\r\n }\r\n}\r\n\r\nfunction requiredString(value: unknown, name: string) {\r\n const stringValue = stringParam(value);\r\n if (!stringValue) throw new Error(`${name} is required`);\r\n return stringValue;\r\n}\r\n\r\nfunction stringParam(value: unknown) {\r\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\r\n}\r\n\r\nfunction arrayParam(value: unknown) {\r\n return Array.isArray(value)\r\n ? value.filter((item): item is string => typeof item === \"string\" && !!item.trim()).map((item) => item.trim())\r\n : [];\r\n}\r\n\r\nfunction stripKeys(source: Record<string, unknown>, keys: string[]) {\r\n const out: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(source)) {\r\n if (!keys.includes(key) && value !== undefined) out[key] = value;\r\n }\r\n return out;\r\n}\r\n\r\nfunction compact(source: Record<string, unknown>) {\r\n const out: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value !== undefined) out[key] = value;\r\n }\r\n return out;\r\n}\r\n\r\nfunction queryString(params: Record<string, unknown>, keys: string[]) {\r\n return queryStringFromEntries(Object.fromEntries(keys.map((key) => [key, params[key]])));\r\n}\r\n\r\nfunction queryStringFromEntries(entries: Record<string, unknown>) {\r\n const params = new URLSearchParams();\r\n for (const [key, value] of Object.entries(entries)) {\r\n if (typeof value === \"string\" && value.trim()) params.set(key, value.trim());\r\n else if (typeof value === \"number\" && Number.isFinite(value)) params.set(key, String(value));\r\n }\r\n const qs = params.toString();\r\n return qs ? `?${qs}` : \"\";\r\n}\r\n\r\nfunction parseMcporterOutput(text: string) {\r\n const trimmed = text.trim();\r\n if (!trimmed) return { ok: true, empty: true };\r\n\r\n const codeFenceMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\r\n if (codeFenceMatch) {\r\n const inner = codeFenceMatch[1].trim();\r\n return safeJson(inner) ?? { raw: trimmed };\r\n }\r\n\r\n const firstBrace = trimmed.indexOf(\"{\");\r\n const firstBracket = trimmed.indexOf(\"[\");\r\n let start = -1;\r\n if (firstBrace >= 0 && firstBracket >= 0) start = Math.min(firstBrace, firstBracket);\r\n else start = Math.max(firstBrace, firstBracket);\r\n\r\n if (start >= 0) {\r\n const candidate = trimmed.slice(start);\r\n return safeJson(candidate) ?? { raw: trimmed };\r\n }\r\n\r\n return { raw: trimmed };\r\n}\r\n\r\nfunction safeJson(value: string) {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction resolveMcporterConfigPath(configuredPath?: string) {\r\n const here = fileURLToPath(new URL(\".\", import.meta.url));\r\n const homeDir = os.homedir();\r\n const candidates = [\r\n configuredPath,\r\n process.env.MCPORTER_CONFIG,\r\n process.env.OPENCLAW_MCPORTER_CONFIG,\r\n homeDir ? path.resolve(homeDir, \".openclaw\", \"workspace\", \"config\", \"mcporter.json\") : undefined,\r\n path.resolve(here, \"../../config/mcporter.json\"),\r\n path.resolve(here, \"../../../config/mcporter.json\"),\r\n path.resolve(process.cwd(), \"config/mcporter.json\"),\r\n ].filter((candidate): candidate is string => Boolean(candidate));\r\n for (const candidate of candidates) {\r\n if (existsSync(candidate)) return candidate;\r\n }\r\n return path.resolve(process.cwd(), \"config/mcporter.json\");\r\n}\r\n\r\nfunction mcporterExecutable() {\r\n return process.platform === \"win32\" ? \"mcporter.cmd\" : \"mcporter\";\r\n}\r\n\r\nfunction summarizeContextPayload(payload: unknown) {\r\n if (!payload || typeof payload !== \"object\") return {};\r\n const record = payload as Record<string, any>;\r\n const identity = record.identity && typeof record.identity === \"object\" ? record.identity : undefined;\r\n return {\r\n slug: typeof identity?.slug === \"string\" ? identity.slug : undefined,\r\n openGoalCount: typeof record.openGoalCount === \"number\" ? record.openGoalCount : undefined,\r\n projectCount: Array.isArray(record.projects) ? record.projects.length : undefined,\r\n contactCount: Array.isArray(record.contacts) ? record.contacts.length : undefined,\r\n memoryStats: record.memoryStats && typeof record.memoryStats === \"object\" ? record.memoryStats : undefined,\r\n };\r\n}\r\n\r\nfunction sanitizeHealthError(error: any) {\r\n const message = String(error?.message || error).replace(/kynver_[A-Za-z0-9_]+/g, \"kynver_[REDACTED]\");\r\n return {\r\n message,\r\n code: typeof error?.code === \"string\" ? error.code : undefined,\r\n signal: typeof error?.signal === \"string\" ? error.signal : undefined,\r\n stdout: typeof error?.stdout === \"string\" ? redactSecrets(error.stdout).slice(0, 2000) : undefined,\r\n stderr: typeof error?.stderr === \"string\" ? redactSecrets(error.stderr).slice(0, 2000) : undefined,\r\n };\r\n}\r\n\r\nfunction redactSecrets(value: string) {\r\n return value.replace(/kynver_[A-Za-z0-9_]+/g, \"kynver_[REDACTED]\");\r\n}\r\n", "export function toolJson(payload: unknown) {\r\n return {\r\n content: [{ type: \"text\" as const, text: JSON.stringify(payload, null, 2) }],\r\n details: payload,\r\n };\r\n}\r\n\r\nexport function toolError(message: string, details?: unknown) {\r\n return {\r\n content: [{ type: \"text\" as const, text: message }],\r\n details,\r\n isError: true,\r\n };\r\n}\r\n", "export const slugOnlySchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug. Omit to use the account's primary AgentOS workspace.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const stringArray = {\r\n type: \"array\",\r\n items: { type: \"string\" },\r\n};\r\n\r\nexport const looseObject = {\r\n type: \"object\",\r\n additionalProperties: {},\r\n};\r\n", "import { looseObject } from \"./common.js\";\r\n\r\nexport const getContactsSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const createContactSchema = {\r\n type: \"object\",\r\n properties: {\r\n name: { type: \"string\" },\r\n relationship: { type: \"string\" },\r\n context: { type: \"string\" },\r\n preferences: looseObject,\r\n notes: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"name\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateContactSchema = {\r\n type: \"object\",\r\n properties: {\r\n contactId: { type: \"string\" },\r\n name: { type: \"string\" },\r\n relationship: { type: \"string\" },\r\n context: { type: \"string\" },\r\n preferences: looseObject,\r\n notes: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"contactId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { createContactSchema, getContactsSchema, updateContactSchema } from \"../schemas/contacts.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createContactTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_get_contacts\", \"Get all AgentOS contacts.\", getContactsSchema),\r\n mk(\"agent_os_create_contact\", \"Create or upsert an AgentOS contact.\", createContactSchema),\r\n mk(\"agent_os_update_contact\", \"Update an existing AgentOS contact.\", updateContactSchema),\r\n ];\r\n}\r\n", "export const getContextSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug. Omit to use the account's primary AgentOS workspace.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { getContextSchema } from \"../schemas/context.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createContextTools(config: PluginConfig) {\r\n return [\r\n {\r\n name: \"agent_os_get_context\",\r\n label: \"AgentOS Get Context\",\r\n description:\r\n \"Get the agent's full AgentOS state in one call: identity, goals, projects, contacts, sessions, and memory stats.\",\r\n parameters: getContextSchema,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_get_context\",\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n },\r\n ];\r\n}\r\n", "export const listGoalsSchema = {\r\n type: \"object\",\r\n properties: {\r\n status: { type: \"string\", enum: [\"open\", \"in_progress\", \"blocked\", \"complete\", \"cancelled\"] },\r\n projectId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateGoalSchema = {\r\n type: \"object\",\r\n properties: {\r\n title: { type: \"string\", description: \"Goal title. Required when creating.\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"open\", \"in_progress\", \"blocked\", \"complete\", \"cancelled\"] },\r\n priority: { type: \"string\", enum: [\"low\", \"normal\", \"high\", \"critical\"] },\r\n projectId: { type: \"string\" },\r\n analystHypothesisId: { type: \"string\" },\r\n outcome: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { listGoalsSchema, updateGoalSchema } from \"../schemas/goals.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createGoalTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_list_goals\", \"List AgentOS goals, optionally filtered by status or project.\", listGoalsSchema),\r\n mk(\"agent_os_update_goal\", \"Create a goal or update an existing AgentOS goal.\", updateGoalSchema),\r\n ];\r\n}\r\n", "export const healthCheckSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: {\r\n type: \"string\",\r\n description: \"AgentOS slug to probe. Defaults to the AgentOS server default.\",\r\n },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { checkAgentOsHealth } from \"../mcporter-client.js\";\r\nimport { healthCheckSchema } from \"../schemas/health.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createHealthTools(config: PluginConfig) {\r\n return [\r\n {\r\n name: \"agent_os_health_check\",\r\n label: \"AgentOS Health Check\",\r\n description: \"Check whether Kynver AgentOS is reachable through the configured first-class tool bridge.\",\r\n parameters: healthCheckSchema,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n checkAgentOsHealth({\r\n serverName: config.agentOsServer,\r\n slug: typeof params.slug === \"string\" && params.slug.trim() ? params.slug.trim() : undefined,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n },\r\n ];\r\n}\r\n", "import { looseObject } from \"./common.js\";\r\n\r\nconst sourceRef = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"repo\", \"commit\", \"branch\", \"pr\", \"map\", \"session\", \"tool\", \"url\", \"manual\", \"unknown\"] },\r\n label: { type: \"string\" },\r\n repo: { type: \"string\" },\r\n path: { type: \"string\" },\r\n commit: { type: \"string\" },\r\n branch: { type: \"string\" },\r\n pr: { oneOf: [{ type: \"number\" }, { type: \"string\" }] },\r\n url: { type: \"string\" },\r\n sessionId: { type: \"string\" },\r\n toolName: { type: \"string\" },\r\n note: { type: \"string\" },\r\n },\r\n required: [\"type\"],\r\n additionalProperties: true,\r\n};\r\n\r\nconst sourceRefs = {\r\n type: \"array\",\r\n items: sourceRef,\r\n};\r\n\r\nconst memoryType = {\r\n type: \"string\",\r\n enum: [\"decision\", \"lesson\", \"fact\", \"preference\", \"project_update\", \"runbook\", \"source_map\", \"correction\", \"note\"],\r\n description: \"What kind of durable memory this is. Use note only when a more specific type does not fit.\",\r\n};\r\n\r\nconst confidence = {\r\n type: \"string\",\r\n enum: [\"low\", \"medium\", \"high\"],\r\n description: \"How reliable this memory is based on available evidence.\",\r\n};\r\n\r\nconst reviewStatus = {\r\n type: \"string\",\r\n enum: [\"none\", \"needs_review\", \"reviewed\", \"stale\", \"rejected\"],\r\n description: \"Set needs_review for important, uncertain, stale-looking, or user-correctable memories.\",\r\n};\r\n\r\nexport const searchMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n query: { type: \"string\" },\r\n k: { type: \"number\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"query\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const writeMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n content: { type: \"string\" },\r\n key: { type: \"string\" },\r\n category: { type: \"string\", enum: [\"long_term\", \"project\", \"contact\", \"tool_config\"] },\r\n sourceId: { type: \"string\" },\r\n metadata: looseObject,\r\n sourceRefs,\r\n memoryType,\r\n confidence,\r\n reviewStatus,\r\n projectId: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n contactId: { type: \"string\" },\r\n skillId: {\r\n type: \"string\",\r\n description: \"Skill identifier this memory belongs to. Built-ins use skill slug; user-authored skills use AgentSkill.id.\",\r\n },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"content\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n key: { type: \"string\" },\r\n content: { type: \"string\" },\r\n sourceId: { type: \"string\" },\r\n metadata: looseObject,\r\n sourceRefs,\r\n memoryType,\r\n confidence,\r\n reviewStatus,\r\n projectId: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n contactId: { type: \"string\" },\r\n skillId: {\r\n type: \"string\",\r\n description: \"Skill identifier this memory belongs to. Built-ins use skill slug; user-authored skills use AgentSkill.id.\",\r\n },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"key\", \"content\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const consolidateMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport {\r\n consolidateMemorySchema,\r\n searchMemorySchema,\r\n updateMemorySchema,\r\n writeMemorySchema,\r\n} from \"../schemas/memory.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createMemoryTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_search_memory\", \"Search AgentOS memory using semantic + keyword hybrid recall.\", searchMemorySchema),\r\n mk(\r\n \"agent_os_write_memory\",\r\n \"Write durable AgentOS memory for facts, decisions, lessons, preferences, source maps, and runbooks. Prefer session event/log tools for ordinary progress; include sourceRefs plus memoryType/confidence/reviewStatus when possible.\",\r\n writeMemorySchema,\r\n ),\r\n mk(\r\n \"agent_os_update_memory\",\r\n \"Update an existing AgentOS memory entry by key, preserving or improving sourceRefs and writer-contract fields for auditability.\",\r\n updateMemorySchema,\r\n ),\r\n mk(\"agent_os_consolidate_memory\", \"Trigger an AgentOS memory consolidation pass.\", consolidateMemorySchema),\r\n ];\r\n}\r\n", "import { stringArray } from \"./common.js\";\r\n\r\nexport const getProjectsSchema = {\r\n type: \"object\",\r\n properties: {\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"] },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const createProjectSchema = {\r\n type: \"object\",\r\n properties: {\r\n name: { type: \"string\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"], default: \"active\" },\r\n currentFocus: { type: \"string\" },\r\n nextActions: stringArray,\r\n blockers: stringArray,\r\n repoUrl: { type: \"string\" },\r\n deployUrl: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"name\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateProjectSchema = {\r\n type: \"object\",\r\n properties: {\r\n projectId: { type: \"string\" },\r\n name: { type: \"string\" },\r\n description: { type: \"string\" },\r\n status: { type: \"string\", enum: [\"active\", \"on_hold\", \"shipped\", \"archived\"] },\r\n currentFocus: { type: \"string\" },\r\n nextActions: stringArray,\r\n blockers: stringArray,\r\n repoUrl: { type: \"string\" },\r\n deployUrl: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"projectId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { createProjectSchema, getProjectsSchema, updateProjectSchema } from \"../schemas/projects.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createProjectTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_get_projects\", \"Get all tracked AgentOS projects.\", getProjectsSchema),\r\n mk(\"agent_os_create_project\", \"Create a new AgentOS project.\", createProjectSchema),\r\n mk(\"agent_os_update_project\", \"Update an existing AgentOS project.\", updateProjectSchema),\r\n ];\r\n}\r\n", "import { stringArray } from \"./common.js\";\r\n\r\nconst sourceRef = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"repo\", \"commit\", \"branch\", \"pr\", \"map\", \"session\", \"tool\", \"url\", \"manual\", \"unknown\"] },\r\n label: { type: \"string\" },\r\n repo: { type: \"string\" },\r\n path: { type: \"string\" },\r\n commit: { type: \"string\" },\r\n branch: { type: \"string\" },\r\n pr: { oneOf: [{ type: \"number\" }, { type: \"string\" }] },\r\n url: { type: \"string\" },\r\n sessionId: { type: \"string\" },\r\n toolName: { type: \"string\" },\r\n note: { type: \"string\" },\r\n },\r\n required: [\"type\"],\r\n additionalProperties: true,\r\n};\r\n\r\nconst sessionEvent = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"topic\", \"decision\", \"action\", \"file\", \"commit\", \"pr\", \"tool\", \"follow_up\", \"blocker\", \"note\"] },\r\n summary: { type: \"string\" },\r\n timestamp: { type: \"string\" },\r\n details: { type: \"object\", additionalProperties: {} },\r\n sourceRefs: { type: \"array\", items: sourceRef },\r\n },\r\n required: [\"summary\"],\r\n additionalProperties: true,\r\n};\r\n\r\nexport const openSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n channel: { type: \"string\", description: \"Runtime channel: 'webchat' | 'telegram' | 'discord' | \u2026\" },\r\n model: { type: \"string\", description: \"Model used for the session.\" },\r\n slug: { type: \"string\", description: \"AgentOS slug. Omit to use the account's primary AgentOS workspace.\" },\r\n },\r\n required: [\"channel\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const closeSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n sessionId: { type: \"string\" },\r\n summary: { type: \"string\" },\r\n topicsWorked: stringArray,\r\n decisionsLog: {},\r\n events: { type: \"array\", items: sessionEvent },\r\n goalIds: stringArray,\r\n projectIds: stringArray,\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"sessionId\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const logSessionEventSchema = {\r\n type: \"object\",\r\n properties: {\r\n sessionId: { type: \"string\" },\r\n type: { type: \"string\", enum: [\"topic\", \"decision\", \"action\", \"file\", \"commit\", \"pr\", \"tool\", \"follow_up\", \"blocker\", \"note\"] },\r\n summary: { type: \"string\" },\r\n timestamp: { type: \"string\" },\r\n details: { type: \"object\", additionalProperties: {} },\r\n sourceRefs: { type: \"array\", items: sourceRef },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"sessionId\", \"summary\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const logSessionSchema = {\r\n type: \"object\",\r\n properties: {\r\n summary: { type: \"string\", description: \"2-4 sentence summary of what was worked on.\" },\r\n topicsWorked: stringArray,\r\n keyDecisions: stringArray,\r\n date: { type: \"string\", description: \"Date to log against (YYYY-MM-DD, defaults to today UTC).\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"summary\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport { closeSessionSchema, logSessionEventSchema, logSessionSchema, openSessionSchema } from \"../schemas/sessions.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createSessionTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_open_session\", \"Open an AgentOS session record at the start of a session.\", openSessionSchema),\r\n mk(\"agent_os_close_session\", \"Close an AgentOS session record with summary, decisions, and linked goals/projects.\", closeSessionSchema),\r\n mk(\"agent_os_log_session_event\", \"Append a structured event to an open AgentOS session trace.\", logSessionEventSchema),\r\n mk(\"agent_os_log_session\", \"Append a structured session log entry to AgentOS daily notes.\", logSessionSchema),\r\n ];\r\n}\r\n", "import { looseObject } from \"./common.js\";\r\n\r\nconst sourceRef = {\r\n type: \"object\",\r\n properties: {\r\n type: { type: \"string\", enum: [\"repo\", \"commit\", \"branch\", \"pr\", \"map\", \"session\", \"tool\", \"url\", \"manual\", \"unknown\"] },\r\n label: { type: \"string\" },\r\n repo: { type: \"string\" },\r\n path: { type: \"string\" },\r\n commit: { type: \"string\" },\r\n branch: { type: \"string\" },\r\n pr: { oneOf: [{ type: \"number\" }, { type: \"string\" }] },\r\n url: { type: \"string\" },\r\n sessionId: { type: \"string\" },\r\n toolName: { type: \"string\" },\r\n note: { type: \"string\" },\r\n },\r\n required: [\"type\"],\r\n additionalProperties: true,\r\n};\r\n\r\nconst sourceRefs = {\r\n type: \"array\",\r\n items: sourceRef,\r\n};\r\n\r\nconst memoryType = {\r\n type: \"string\",\r\n enum: [\"decision\", \"lesson\", \"fact\", \"preference\", \"project_update\", \"runbook\", \"source_map\", \"correction\", \"note\"],\r\n};\r\n\r\nconst confidence = {\r\n type: \"string\",\r\n enum: [\"low\", \"medium\", \"high\"],\r\n};\r\n\r\nconst reviewStatus = {\r\n type: \"string\",\r\n enum: [\"none\", \"needs_review\", \"reviewed\", \"stale\", \"rejected\"],\r\n};\r\n\r\nexport const listSkillsSchema = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const getSkillSchema = {\r\n type: \"object\",\r\n properties: {\r\n skillSlug: { type: \"string\" },\r\n source: { type: \"string\", enum: [\"builtin\", \"user\"] },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"skillSlug\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const bindSkillSchema = {\r\n type: \"object\",\r\n properties: {\r\n skillSlug: { type: \"string\" },\r\n skillSource: { type: \"string\", enum: [\"builtin\", \"user\"] },\r\n enabled: { type: \"boolean\" },\r\n priority: { type: \"number\" },\r\n autoInvoke: { type: \"boolean\" },\r\n notes: { type: \"string\" },\r\n config: looseObject,\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"skillSlug\", \"skillSource\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nconst skillCategory = {\r\n type: \"string\",\r\n enum: [\"engineering\", \"productivity\", \"agent_ops\", \"domain\", \"personal\", \"misc\"],\r\n};\r\n\r\nconst skillStatus = {\r\n type: \"string\",\r\n enum: [\"draft\", \"active\", \"deprecated\", \"archived\"],\r\n};\r\n\r\nconst skillDraft = {\r\n type: \"object\",\r\n properties: {\r\n slug: { type: \"string\" },\r\n name: { type: \"string\" },\r\n description: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n category: skillCategory,\r\n status: skillStatus,\r\n triggerRules: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n instructions: { type: \"string\" },\r\n sourceRefs,\r\n metadata: looseObject,\r\n },\r\n additionalProperties: false,\r\n};\r\n\r\nexport const createSkillSchema = {\r\n type: \"object\",\r\n properties: {\r\n skillSlug: { type: \"string\" },\r\n name: { type: \"string\" },\r\n description: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n category: skillCategory,\r\n status: skillStatus,\r\n triggerRules: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n instructions: { type: \"string\" },\r\n sourceRefs,\r\n metadata: looseObject,\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"skillSlug\", \"name\", \"instructions\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const updateSkillSchema = {\r\n type: \"object\",\r\n properties: {\r\n skillSlug: { type: \"string\" },\r\n name: { type: \"string\" },\r\n description: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n category: skillCategory,\r\n status: skillStatus,\r\n triggerRules: { oneOf: [{ type: \"string\" }, { type: \"null\" }] },\r\n instructions: { type: \"string\" },\r\n sourceRefs,\r\n metadata: looseObject,\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"skillSlug\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const importSkillsSchema = {\r\n type: \"object\",\r\n properties: {\r\n markdown: { type: \"string\" },\r\n skills: { type: \"array\", items: skillDraft },\r\n sourceLabel: { type: \"string\" },\r\n overwrite: { type: \"boolean\" },\r\n slug: { type: \"string\" },\r\n },\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n\r\nexport const writeSkillMemorySchema = {\r\n type: \"object\",\r\n properties: {\r\n skillId: {\r\n type: \"string\",\r\n description: \"Skill identifier: built-in skill slug or user-authored AgentSkill.id.\",\r\n },\r\n content: { type: \"string\" },\r\n key: { type: \"string\" },\r\n sourceId: { type: \"string\" },\r\n metadata: looseObject,\r\n sourceRefs,\r\n memoryType,\r\n confidence,\r\n reviewStatus,\r\n projectId: { type: \"string\" },\r\n goalId: { type: \"string\" },\r\n contactId: { type: \"string\" },\r\n slug: { type: \"string\" },\r\n },\r\n required: [\"skillId\", \"content\"],\r\n additionalProperties: false,\r\n $schema: \"http://json-schema.org/draft-07/schema#\",\r\n};\r\n", "import { callAgentOsTool } from \"../mcporter-client.js\";\r\nimport {\r\n bindSkillSchema,\r\n createSkillSchema,\r\n getSkillSchema,\r\n importSkillsSchema,\r\n listSkillsSchema,\r\n updateSkillSchema,\r\n writeSkillMemorySchema,\r\n} from \"../schemas/skills.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createSkillTools(config: PluginConfig) {\r\n const mk = (name: string, description: string, parameters: Record<string, unknown>) => ({\r\n name,\r\n label: name,\r\n description,\r\n parameters,\r\n execute: (_toolCallId: string, params: Record<string, unknown>) =>\r\n callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: name,\r\n params,\r\n timeoutMs: config.timeoutMs,\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n }),\r\n });\r\n\r\n return [\r\n mk(\"agent_os_list_skills\", \"List AgentOS skills and binding state.\", listSkillsSchema),\r\n mk(\"agent_os_get_skill\", \"Fetch one AgentOS skill's instructions and binding state.\", getSkillSchema),\r\n mk(\"agent_os_create_skill\", \"Create a user-authored AgentOS skill; created skills are not enabled until bound.\", createSkillSchema),\r\n mk(\"agent_os_update_skill\", \"Update a user-authored AgentOS skill. Built-ins are read-only.\", updateSkillSchema),\r\n mk(\"agent_os_import_skills\", \"Import external skills as draft, unbound user skills for review before enablement.\", importSkillsSchema),\r\n mk(\"agent_os_bind_skill\", \"Enable or update an AgentOS skill binding.\", bindSkillSchema),\r\n mk(\"agent_os_write_skill_memory\", \"Write durable AgentOS memory tagged to a skill.\", writeSkillMemorySchema),\r\n ];\r\n}\r\n", "import { createContactTools } from \"./contacts.js\";\r\nimport { createContextTools } from \"./context.js\";\r\nimport { createGoalTools } from \"./goals.js\";\r\nimport { createHealthTools } from \"./health.js\";\r\nimport { createMemoryTools } from \"./memory.js\";\r\nimport { createProjectTools } from \"./projects.js\";\r\nimport { createSessionTools } from \"./sessions.js\";\r\nimport { createSkillTools } from \"./skills.js\";\r\nimport type { PluginConfig } from \"../types.js\";\r\n\r\nexport function createAllTools(config: PluginConfig) {\r\n return [\r\n ...createHealthTools(config),\r\n ...createContextTools(config),\r\n ...createSessionTools(config),\r\n ...createGoalTools(config),\r\n ...createProjectTools(config),\r\n ...createMemoryTools(config),\r\n ...createSkillTools(config),\r\n ...createContactTools(config),\r\n ];\r\n}\r\n", "import { pluginConfigSchema, resolvePluginConfig } from \"./src/config.js\";\r\nimport { callAgentOsTool } from \"./src/mcporter-client.js\";\r\nimport { createAllTools } from \"./src/tools/index.js\";\r\n\r\nconst plugin = {\r\n id: \"kynver-agent-os-tools\",\r\n name: \"Kynver AgentOS Tools\",\r\n description: \"First-class OpenClaw tools for Kynver AgentOS, using direct Kynver HTTP with mcporter fallback.\",\r\n configSchema: pluginConfigSchema,\r\n register(api: any) {\r\n const config = resolvePluginConfig(api?.config);\r\n const tools = createAllTools(config);\r\n for (const tool of tools) {\r\n api.registerTool(tool);\r\n }\r\n if (config.enableSessionLifecycle && typeof api.on === \"function\") {\r\n const sessionIds = new Map<string, string>();\r\n const keyFor = (event: any, ctx: any) => String(event?.sessionKey || ctx?.sessionKey || event?.sessionId || ctx?.sessionId || \"\");\r\n const shouldTrack = (key: string) => key && !key.includes(\"subagent\") && !key.includes(\"acp\") && !key.includes(\"isolated\");\r\n const channelFor = (key: string) => {\r\n if (key.includes(\"telegram\")) return \"telegram\";\r\n if (key.includes(\"discord\")) return \"discord\";\r\n if (key.includes(\"webchat\")) return \"webchat\";\r\n return \"openclaw\";\r\n };\r\n\r\n api.on(\r\n \"session_start\",\r\n async (event: any, ctx: any) => {\r\n const key = keyFor(event, ctx);\r\n if (!shouldTrack(key) || sessionIds.has(key)) return;\r\n const result = await callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_open_session\",\r\n params: { channel: channelFor(key), model: \"openclaw\" },\r\n timeoutMs: Math.min(config.timeoutMs, 10000),\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n });\r\n const id = (result as any)?.details?.id;\r\n if (typeof id === \"string\") sessionIds.set(key, id);\r\n },\r\n { priority: 10, timeoutMs: 12000 },\r\n );\r\n\r\n api.on(\r\n \"session_end\",\r\n async (event: any, ctx: any) => {\r\n const key = keyFor(event, ctx);\r\n const sessionId = sessionIds.get(key);\r\n if (!sessionId) return;\r\n sessionIds.delete(key);\r\n const reason = typeof event?.reason === \"string\" ? event.reason : \"unknown\";\r\n const messageCount = typeof event?.messageCount === \"number\" ? event.messageCount : undefined;\r\n const durationMs = typeof event?.durationMs === \"number\" ? event.durationMs : undefined;\r\n await callAgentOsTool({\r\n serverName: config.agentOsServer,\r\n toolName: \"agent_os_close_session\",\r\n params: {\r\n sessionId,\r\n summary: `OpenClaw session ended automatically (reason: ${reason}; messages: ${messageCount ?? \"unknown\"}; durationMs: ${durationMs ?? \"unknown\"}).`,\r\n topicsWorked: [\"OpenClaw session lifecycle\"],\r\n },\r\n timeoutMs: Math.min(config.timeoutMs, 10000),\r\n mcporterConfigPath: config.mcporterConfigPath,\r\n kynverApiUrl: config.kynverApiUrl,\r\n kynverApiKey: config.kynverApiKey,\r\n agentOsSlug: config.agentOsSlug,\r\n enableDirectHttp: config.enableDirectHttp,\r\n });\r\n },\r\n { priority: 10, timeoutMs: 12000 },\r\n );\r\n }\r\n },\r\n};\r\n\r\nexport default plugin;\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["path", "sourceRef", "sourceRef", "sourceRefs", "memoryType", "confidence", "reviewStatus"]
|
|
7
7
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -22,6 +22,13 @@
|
|
|
22
22
|
"agent_os_write_memory",
|
|
23
23
|
"agent_os_update_memory",
|
|
24
24
|
"agent_os_consolidate_memory",
|
|
25
|
+
"agent_os_list_skills",
|
|
26
|
+
"agent_os_get_skill",
|
|
27
|
+
"agent_os_create_skill",
|
|
28
|
+
"agent_os_update_skill",
|
|
29
|
+
"agent_os_import_skills",
|
|
30
|
+
"agent_os_bind_skill",
|
|
31
|
+
"agent_os_write_skill_memory",
|
|
25
32
|
"agent_os_get_contacts",
|
|
26
33
|
"agent_os_create_contact",
|
|
27
34
|
"agent_os_update_contact"
|
|
@@ -43,6 +50,13 @@
|
|
|
43
50
|
"agent_os_write_memory": { "optional": true },
|
|
44
51
|
"agent_os_update_memory": { "optional": true },
|
|
45
52
|
"agent_os_consolidate_memory": { "optional": true },
|
|
53
|
+
"agent_os_list_skills": { "optional": true },
|
|
54
|
+
"agent_os_get_skill": { "optional": true },
|
|
55
|
+
"agent_os_create_skill": { "optional": true },
|
|
56
|
+
"agent_os_update_skill": { "optional": true },
|
|
57
|
+
"agent_os_import_skills": { "optional": true },
|
|
58
|
+
"agent_os_bind_skill": { "optional": true },
|
|
59
|
+
"agent_os_write_skill_memory": { "optional": true },
|
|
46
60
|
"agent_os_get_contacts": { "optional": true },
|
|
47
61
|
"agent_os_create_contact": { "optional": true },
|
|
48
62
|
"agent_os_update_contact": { "optional": true }
|
|
@@ -75,8 +89,7 @@
|
|
|
75
89
|
},
|
|
76
90
|
"agentOsSlug": {
|
|
77
91
|
"type": "string",
|
|
78
|
-
"
|
|
79
|
-
"description": "Default AgentOS slug to use when a tool call does not pass slug."
|
|
92
|
+
"description": "Optional default AgentOS slug to use when a tool call does not pass slug. Use the primary slug from Kynver /agent-os; omit to resolve the account's primary AgentOS workspace."
|
|
80
93
|
},
|
|
81
94
|
"enableDirectHttp": {
|
|
82
95
|
"type": "boolean",
|
package/package.json
CHANGED