@cfio/cohort-sync 0.11.0 → 0.11.2
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/dist/index.js +71 -85
- package/dist/openclaw.plugin.json +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -13334,7 +13334,7 @@ function dumpCtx(ctx) {
|
|
|
13334
13334
|
function dumpEvent(event) {
|
|
13335
13335
|
return dumpCtx(event);
|
|
13336
13336
|
}
|
|
13337
|
-
var PLUGIN_VERSION = true ? "0.11.
|
|
13337
|
+
var PLUGIN_VERSION = true ? "0.11.2" : "unknown";
|
|
13338
13338
|
function resolveGatewayToken(api) {
|
|
13339
13339
|
const token = api.config?.gateway?.auth?.token;
|
|
13340
13340
|
return typeof token === "string" ? token : null;
|
|
@@ -13464,9 +13464,10 @@ function initGatewayClient(port, token, cfg, resolveAgentName, logger) {
|
|
|
13464
13464
|
return client2;
|
|
13465
13465
|
}
|
|
13466
13466
|
async function handleGatewayStart(event, state) {
|
|
13467
|
-
if (!state)
|
|
13467
|
+
if (!state) {
|
|
13468
|
+
return;
|
|
13469
|
+
}
|
|
13468
13470
|
const { cfg, tracker, logger, config, api } = state;
|
|
13469
|
-
logger.debug("cohort-sync: hook: gateway_start", { port: event.port, eventKeys: Object.keys(event) });
|
|
13470
13471
|
try {
|
|
13471
13472
|
checkForUpdate(PLUGIN_VERSION, logger).catch(() => {
|
|
13472
13473
|
});
|
|
@@ -13610,12 +13611,11 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13610
13611
|
state.logger.debug("cohort-sync: resolve agent: result", { method: "fallback_main", resolved });
|
|
13611
13612
|
return resolved;
|
|
13612
13613
|
}
|
|
13613
|
-
api.
|
|
13614
|
+
api.on("agent_end", async (event, ctx) => {
|
|
13614
13615
|
const state = getState();
|
|
13615
13616
|
if (!state) return;
|
|
13616
13617
|
const { cfg, tracker, logger: log } = state;
|
|
13617
|
-
|
|
13618
|
-
log.debug("cohort-sync: hook: agent_end", { ctx: dumpCtx(ctx), success: ctx.success, error: ctx.error, durationMs: ctx.durationMs });
|
|
13618
|
+
log.debug("cohort-sync: hook: agent_end", { ctx: dumpCtx(ctx), success: event.success, error: event.error, durationMs: event.durationMs });
|
|
13619
13619
|
const agentId = ctx.agentId ?? "main";
|
|
13620
13620
|
const agentName = state.resolveAgentName(agentId);
|
|
13621
13621
|
try {
|
|
@@ -13641,11 +13641,11 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13641
13641
|
log.debug("cohort-sync: cron agent end push failed", { error: String(err) });
|
|
13642
13642
|
}
|
|
13643
13643
|
}
|
|
13644
|
-
if (
|
|
13644
|
+
if (event.success === false) {
|
|
13645
13645
|
const entry = buildActivityEntry(agentName, "agent_end", {
|
|
13646
13646
|
success: false,
|
|
13647
|
-
error:
|
|
13648
|
-
durationMs:
|
|
13647
|
+
error: event.error,
|
|
13648
|
+
durationMs: event.durationMs,
|
|
13649
13649
|
sessionKey: ctx.sessionKey
|
|
13650
13650
|
});
|
|
13651
13651
|
if (entry) state.activityBatch.add(entry);
|
|
@@ -13653,26 +13653,15 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13653
13653
|
} catch (err) {
|
|
13654
13654
|
log.warn(`cohort-sync: agent_end sync failed: ${String(err)}`);
|
|
13655
13655
|
}
|
|
13656
|
-
}
|
|
13657
|
-
api.
|
|
13656
|
+
});
|
|
13657
|
+
api.on("llm_output", async (event, ctx) => {
|
|
13658
13658
|
const state = getState();
|
|
13659
13659
|
if (!state) return;
|
|
13660
13660
|
const { cfg, tracker, logger: log } = state;
|
|
13661
|
-
const
|
|
13662
|
-
const usage = ctx.usage ?? {};
|
|
13661
|
+
const usage = event.usage ?? {};
|
|
13663
13662
|
const contextTokens = (usage.input ?? 0) + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0);
|
|
13664
|
-
const model =
|
|
13663
|
+
const model = event.model ?? state.resolveModel(ctx.agentId ?? "main");
|
|
13665
13664
|
const contextLimit = state.getModelContextLimit(model);
|
|
13666
|
-
log.debug("cohort-sync: hook: llm_output", {
|
|
13667
|
-
ctx: dumpCtx(ctx),
|
|
13668
|
-
model,
|
|
13669
|
-
tokensIn: usage.input,
|
|
13670
|
-
tokensOut: usage.output,
|
|
13671
|
-
cacheRead: usage.cacheRead,
|
|
13672
|
-
cacheWrite: usage.cacheWrite,
|
|
13673
|
-
contextTokens,
|
|
13674
|
-
contextLimit
|
|
13675
|
-
});
|
|
13676
13665
|
const agentId = ctx.agentId ?? "main";
|
|
13677
13666
|
const agentName = state.resolveAgentName(agentId);
|
|
13678
13667
|
try {
|
|
@@ -13706,18 +13695,17 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13706
13695
|
} catch (err) {
|
|
13707
13696
|
log.warn(`cohort-sync: llm_output telemetry failed: ${String(err)}`);
|
|
13708
13697
|
}
|
|
13709
|
-
}
|
|
13710
|
-
api.
|
|
13698
|
+
});
|
|
13699
|
+
api.on("after_compaction", async (event, ctx) => {
|
|
13711
13700
|
const state = getState();
|
|
13712
13701
|
if (!state) return;
|
|
13713
13702
|
const { cfg, tracker, logger: log } = state;
|
|
13714
|
-
|
|
13715
|
-
log.debug("cohort-sync: hook: after_compaction", { ctx: dumpCtx(ctx), messageCount: ctx.messageCount, tokenCount: ctx.tokenCount });
|
|
13703
|
+
log.debug("cohort-sync: hook: after_compaction", { ctx: dumpCtx(ctx), messageCount: event.messageCount, tokenCount: event.tokenCount });
|
|
13716
13704
|
const agentId = ctx.agentId ?? "main";
|
|
13717
13705
|
const agentName = state.resolveAgentName(agentId);
|
|
13718
13706
|
try {
|
|
13719
13707
|
tracker.updateFromCompaction(agentName, {
|
|
13720
|
-
contextTokens:
|
|
13708
|
+
contextTokens: event.tokenCount ?? 0,
|
|
13721
13709
|
contextLimit: state.getModelContextLimit(state.resolveModel(agentId))
|
|
13722
13710
|
});
|
|
13723
13711
|
if (tracker.shouldPushTelemetry(agentName)) {
|
|
@@ -13728,20 +13716,19 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13728
13716
|
}
|
|
13729
13717
|
}
|
|
13730
13718
|
const entry = buildActivityEntry(agentName, "after_compaction", {
|
|
13731
|
-
messageCount:
|
|
13732
|
-
compactedCount:
|
|
13719
|
+
messageCount: event.messageCount,
|
|
13720
|
+
compactedCount: event.compactedCount,
|
|
13733
13721
|
sessionKey: ctx.sessionKey
|
|
13734
13722
|
});
|
|
13735
13723
|
if (entry) state.activityBatch.add(entry);
|
|
13736
13724
|
} catch (err) {
|
|
13737
13725
|
log.warn(`cohort-sync: after_compaction telemetry failed: ${String(err)}`);
|
|
13738
13726
|
}
|
|
13739
|
-
}
|
|
13740
|
-
api.
|
|
13727
|
+
});
|
|
13728
|
+
api.on("before_agent_start", async (event, ctx) => {
|
|
13741
13729
|
const state = getState();
|
|
13742
13730
|
if (!state) return;
|
|
13743
13731
|
const { cfg, tracker, logger: log } = state;
|
|
13744
|
-
const ctx = event.context ?? {};
|
|
13745
13732
|
log.debug("cohort-sync: hook: before_agent_start", { ctx: dumpCtx(ctx), event: dumpEvent(event) });
|
|
13746
13733
|
const agentId = ctx.agentId ?? "main";
|
|
13747
13734
|
const agentName = state.resolveAgentName(agentId);
|
|
@@ -13794,17 +13781,16 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13794
13781
|
} catch (err) {
|
|
13795
13782
|
log.warn(`cohort-sync: before_agent_start telemetry failed: ${String(err)}`);
|
|
13796
13783
|
}
|
|
13797
|
-
}
|
|
13798
|
-
api.
|
|
13784
|
+
});
|
|
13785
|
+
api.on("session_start", async (event, ctx) => {
|
|
13799
13786
|
const state = getState();
|
|
13800
13787
|
if (!state) return;
|
|
13801
13788
|
const { cfg, tracker, logger: log } = state;
|
|
13802
|
-
const ctx = event.context ?? {};
|
|
13803
13789
|
log.debug("cohort-sync: hook: session_start", { ctx: dumpCtx(ctx), event: dumpEvent(event) });
|
|
13804
13790
|
const agentId = ctx.agentId ?? "main";
|
|
13805
13791
|
const agentName = state.resolveAgentName(agentId);
|
|
13806
13792
|
try {
|
|
13807
|
-
const sessionKey = ctx.sessionId ?? String(Date.now());
|
|
13793
|
+
const sessionKey = event.sessionId ?? ctx.sessionId ?? String(Date.now());
|
|
13808
13794
|
tracker.addSession(agentName, sessionKey);
|
|
13809
13795
|
if (tracker.shouldPushSessions(agentName)) {
|
|
13810
13796
|
const sessionsSnapshot = tracker.getSessionsSnapshot(agentName);
|
|
@@ -13815,23 +13801,22 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13815
13801
|
const entry = buildActivityEntry(agentName, "session_start", {
|
|
13816
13802
|
channel: parsed.channel,
|
|
13817
13803
|
sessionKey,
|
|
13818
|
-
resumedFrom:
|
|
13804
|
+
resumedFrom: event.resumedFrom
|
|
13819
13805
|
});
|
|
13820
13806
|
if (entry) state.activityBatch.add(entry);
|
|
13821
13807
|
} catch (err) {
|
|
13822
13808
|
log.warn(`cohort-sync: session_start tracking failed: ${String(err)}`);
|
|
13823
13809
|
}
|
|
13824
|
-
}
|
|
13825
|
-
api.
|
|
13810
|
+
});
|
|
13811
|
+
api.on("session_end", async (event, ctx) => {
|
|
13826
13812
|
const state = getState();
|
|
13827
13813
|
if (!state) return;
|
|
13828
13814
|
const { cfg, tracker, logger: log } = state;
|
|
13829
|
-
const ctx = event.context ?? {};
|
|
13830
13815
|
log.debug("cohort-sync: hook: session_end", { ctx: dumpCtx(ctx), event: dumpEvent(event) });
|
|
13831
13816
|
const agentId = ctx.agentId ?? "main";
|
|
13832
13817
|
const agentName = state.resolveAgentName(agentId);
|
|
13833
13818
|
try {
|
|
13834
|
-
const sessionKey = ctx.sessionId ?? "";
|
|
13819
|
+
const sessionKey = event.sessionId ?? ctx.sessionId ?? "";
|
|
13835
13820
|
tracker.removeSession(agentName, sessionKey);
|
|
13836
13821
|
if (tracker.shouldPushSessions(agentName)) {
|
|
13837
13822
|
const sessionsSnapshot = tracker.getSessionsSnapshot(agentName);
|
|
@@ -13840,26 +13825,25 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13840
13825
|
}
|
|
13841
13826
|
const entry = buildActivityEntry(agentName, "session_end", {
|
|
13842
13827
|
sessionKey,
|
|
13843
|
-
messageCount:
|
|
13844
|
-
durationMs:
|
|
13828
|
+
messageCount: event.messageCount,
|
|
13829
|
+
durationMs: event.durationMs
|
|
13845
13830
|
});
|
|
13846
13831
|
if (entry) state.activityBatch.add(entry);
|
|
13847
13832
|
} catch (err) {
|
|
13848
13833
|
log.warn(`cohort-sync: session_end tracking failed: ${String(err)}`);
|
|
13849
13834
|
}
|
|
13850
|
-
}
|
|
13851
|
-
api.
|
|
13835
|
+
});
|
|
13836
|
+
api.on("after_tool_call", async (event, ctx) => {
|
|
13852
13837
|
const state = getState();
|
|
13853
13838
|
if (!state) return;
|
|
13854
|
-
|
|
13855
|
-
state.logger.debug("cohort-sync: hook: after_tool_call", { ctx: dumpCtx(ctx), toolName: ctx.toolName, error: ctx.error });
|
|
13839
|
+
state.logger.debug("cohort-sync: hook: after_tool_call", { ctx: dumpCtx(ctx), toolName: event.toolName, error: event.error });
|
|
13856
13840
|
const agentName = resolveAgentFromContext(state, ctx);
|
|
13857
13841
|
try {
|
|
13858
13842
|
const entry = buildActivityEntry(agentName, "after_tool_call", {
|
|
13859
|
-
toolName:
|
|
13860
|
-
params:
|
|
13861
|
-
error:
|
|
13862
|
-
durationMs:
|
|
13843
|
+
toolName: event.toolName,
|
|
13844
|
+
params: event.params,
|
|
13845
|
+
error: event.error,
|
|
13846
|
+
durationMs: event.durationMs,
|
|
13863
13847
|
sessionKey: ctx.sessionKey,
|
|
13864
13848
|
model: state.resolveModel(ctx.agentId ?? "main")
|
|
13865
13849
|
});
|
|
@@ -13867,11 +13851,10 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13867
13851
|
} catch (err) {
|
|
13868
13852
|
state.logger.warn(`cohort-sync: after_tool_call activity failed: ${String(err)}`);
|
|
13869
13853
|
}
|
|
13870
|
-
}
|
|
13871
|
-
api.
|
|
13854
|
+
});
|
|
13855
|
+
api.on("message_received", async (event, ctx) => {
|
|
13872
13856
|
const state = getState();
|
|
13873
13857
|
if (!state) return;
|
|
13874
|
-
const ctx = event.context ?? {};
|
|
13875
13858
|
state.logger.debug("cohort-sync: hook: message_received raw", {
|
|
13876
13859
|
ctx: dumpCtx(ctx),
|
|
13877
13860
|
event: dumpEvent(event),
|
|
@@ -13884,7 +13867,7 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13884
13867
|
channel,
|
|
13885
13868
|
accountId: ctx.accountId,
|
|
13886
13869
|
conversationId: ctx.conversationId,
|
|
13887
|
-
from:
|
|
13870
|
+
from: event.from
|
|
13888
13871
|
});
|
|
13889
13872
|
try {
|
|
13890
13873
|
const entry = buildActivityEntry(agentName, "message_received", {
|
|
@@ -13894,11 +13877,10 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13894
13877
|
} catch (err) {
|
|
13895
13878
|
state.logger.warn(`cohort-sync: message_received activity failed: ${String(err)}`);
|
|
13896
13879
|
}
|
|
13897
|
-
}
|
|
13898
|
-
api.
|
|
13880
|
+
});
|
|
13881
|
+
api.on("message_sent", async (event, ctx) => {
|
|
13899
13882
|
const state = getState();
|
|
13900
13883
|
if (!state) return;
|
|
13901
|
-
const ctx = event.context ?? {};
|
|
13902
13884
|
state.logger.debug("cohort-sync: hook: message_sent raw", {
|
|
13903
13885
|
ctx: dumpCtx(ctx),
|
|
13904
13886
|
event: dumpEvent(event),
|
|
@@ -13911,25 +13893,24 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13911
13893
|
channel,
|
|
13912
13894
|
accountId: ctx.accountId,
|
|
13913
13895
|
conversationId: ctx.conversationId,
|
|
13914
|
-
to:
|
|
13915
|
-
success:
|
|
13916
|
-
error:
|
|
13896
|
+
to: event.to,
|
|
13897
|
+
success: event.success,
|
|
13898
|
+
error: event.error
|
|
13917
13899
|
});
|
|
13918
13900
|
try {
|
|
13919
13901
|
const entry = buildActivityEntry(agentName, "message_sent", {
|
|
13920
13902
|
channel: channel ?? "unknown",
|
|
13921
|
-
success:
|
|
13922
|
-
error:
|
|
13903
|
+
success: event.success,
|
|
13904
|
+
error: event.error
|
|
13923
13905
|
});
|
|
13924
13906
|
if (entry) state.activityBatch.add(entry);
|
|
13925
13907
|
} catch (err) {
|
|
13926
13908
|
state.logger.warn(`cohort-sync: message_sent activity failed: ${String(err)}`);
|
|
13927
13909
|
}
|
|
13928
|
-
}
|
|
13929
|
-
api.
|
|
13910
|
+
});
|
|
13911
|
+
api.on("before_compaction", async (event, ctx) => {
|
|
13930
13912
|
const state = getState();
|
|
13931
13913
|
if (!state) return;
|
|
13932
|
-
const ctx = event.context ?? {};
|
|
13933
13914
|
state.logger.debug("cohort-sync: hook: before_compaction", { ctx: dumpCtx(ctx) });
|
|
13934
13915
|
const agentId = ctx.agentId ?? "main";
|
|
13935
13916
|
const agentName = state.resolveAgentName(agentId);
|
|
@@ -13941,25 +13922,24 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13941
13922
|
} catch (err) {
|
|
13942
13923
|
state.logger.warn(`cohort-sync: before_compaction activity failed: ${String(err)}`);
|
|
13943
13924
|
}
|
|
13944
|
-
}
|
|
13945
|
-
api.
|
|
13925
|
+
});
|
|
13926
|
+
api.on("before_reset", async (event, ctx) => {
|
|
13946
13927
|
const state = getState();
|
|
13947
13928
|
if (!state) return;
|
|
13948
|
-
const ctx = event.context ?? {};
|
|
13949
13929
|
state.logger.debug("cohort-sync: hook: before_reset", { ctx: dumpCtx(ctx), event: dumpEvent(event) });
|
|
13950
13930
|
const agentId = ctx.agentId ?? "main";
|
|
13951
13931
|
const agentName = state.resolveAgentName(agentId);
|
|
13952
13932
|
try {
|
|
13953
13933
|
const entry = buildActivityEntry(agentName, "before_reset", {
|
|
13954
|
-
reason:
|
|
13934
|
+
reason: event.reason,
|
|
13955
13935
|
sessionKey: ctx.sessionKey
|
|
13956
13936
|
});
|
|
13957
13937
|
if (entry) state.activityBatch.add(entry);
|
|
13958
13938
|
} catch (err) {
|
|
13959
13939
|
state.logger.warn(`cohort-sync: before_reset activity failed: ${String(err)}`);
|
|
13960
13940
|
}
|
|
13961
|
-
}
|
|
13962
|
-
api.
|
|
13941
|
+
});
|
|
13942
|
+
api.on("gateway_stop", async (_event, _ctx) => {
|
|
13963
13943
|
const state = getState();
|
|
13964
13944
|
if (!state) return;
|
|
13965
13945
|
const { cfg, tracker, logger: log, config } = state;
|
|
@@ -13996,7 +13976,7 @@ function registerHookHandlers(api, logger, getState) {
|
|
|
13996
13976
|
tracker.clear();
|
|
13997
13977
|
closeBridge();
|
|
13998
13978
|
log.info("cohort-sync: gateway stopped, all resources cleaned up");
|
|
13999
|
-
}
|
|
13979
|
+
});
|
|
14000
13980
|
}
|
|
14001
13981
|
function initializeHookState(api, cfg) {
|
|
14002
13982
|
const { logger, config } = api;
|
|
@@ -14160,6 +14140,7 @@ var POCKET_GUIDE = `# Cohort Agent Guide (Pocket Version)
|
|
|
14160
14140
|
function textResult(text, details) {
|
|
14161
14141
|
return { content: [{ type: "text", text }], details: details ?? void 0 };
|
|
14162
14142
|
}
|
|
14143
|
+
var sharedHookState = null;
|
|
14163
14144
|
var plugin = {
|
|
14164
14145
|
id: "cohort-sync",
|
|
14165
14146
|
name: "Cohort Sync",
|
|
@@ -14182,8 +14163,7 @@ var plugin = {
|
|
|
14182
14163
|
);
|
|
14183
14164
|
return;
|
|
14184
14165
|
}
|
|
14185
|
-
|
|
14186
|
-
registerHookHandlers(api, api.logger, () => hookState);
|
|
14166
|
+
registerHookHandlers(api, api.logger, () => sharedHookState);
|
|
14187
14167
|
const gatewayPort = api.config?.gateway?.port ?? 18789;
|
|
14188
14168
|
api.registerHook(
|
|
14189
14169
|
"gateway:startup",
|
|
@@ -14191,7 +14171,11 @@ var plugin = {
|
|
|
14191
14171
|
const event = args[0] ?? {};
|
|
14192
14172
|
const port = event?.port ?? gatewayPort;
|
|
14193
14173
|
api.logger.info(`cohort-sync: gateway:startup hook fired (port=${port})`);
|
|
14194
|
-
|
|
14174
|
+
try {
|
|
14175
|
+
await handleGatewayStart({ ...event, port }, sharedHookState);
|
|
14176
|
+
} catch (err) {
|
|
14177
|
+
api.logger.error(`cohort-sync: handleGatewayStart THREW: ${err instanceof Error ? err.stack : String(err)}`);
|
|
14178
|
+
}
|
|
14195
14179
|
},
|
|
14196
14180
|
{
|
|
14197
14181
|
name: "cohort-sync.gateway-startup",
|
|
@@ -14438,15 +14422,17 @@ Do not attempt more comments until tomorrow.`);
|
|
|
14438
14422
|
return;
|
|
14439
14423
|
}
|
|
14440
14424
|
api.logger.info(`cohort-sync: activated (api: ${apiUrl2})`);
|
|
14441
|
-
|
|
14442
|
-
|
|
14443
|
-
|
|
14444
|
-
|
|
14445
|
-
|
|
14446
|
-
|
|
14425
|
+
if (!sharedHookState) {
|
|
14426
|
+
sharedHookState = initializeHookState(api, {
|
|
14427
|
+
apiUrl: apiUrl2,
|
|
14428
|
+
apiKey: apiKey2,
|
|
14429
|
+
stateDir: svcCtx.stateDir,
|
|
14430
|
+
agentNameMap: cfg?.agentNameMap
|
|
14431
|
+
});
|
|
14432
|
+
}
|
|
14447
14433
|
},
|
|
14448
14434
|
async stop() {
|
|
14449
|
-
|
|
14435
|
+
sharedHookState = null;
|
|
14450
14436
|
closeBridge();
|
|
14451
14437
|
api.logger.info("cohort-sync: service stopped");
|
|
14452
14438
|
}
|
package/dist/package.json
CHANGED
package/package.json
CHANGED