@happycastle/oh-my-openclaw 0.9.0 → 0.9.1
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.
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { OmocPluginApi } from '../types.js';
|
|
2
|
+
export declare function resetPersonaInjectorState(): void;
|
|
3
|
+
export declare function getPersonaInjectorState(): {
|
|
4
|
+
lastPersonaInjectionTime: number;
|
|
5
|
+
};
|
|
2
6
|
export declare function registerPersonaInjector(api: OmocPluginApi): void;
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { getActivePersona } from '../utils/persona-state.js';
|
|
2
2
|
import { readPersonaPromptSync } from '../agents/persona-prompts.js';
|
|
3
|
+
/** Minimum interval (ms) between persona injections to prevent regurgitation. */
|
|
4
|
+
const PERSONA_INJECTION_COOLDOWN_MS = 5_000;
|
|
5
|
+
let lastPersonaInjectionTime = 0;
|
|
6
|
+
export function resetPersonaInjectorState() {
|
|
7
|
+
lastPersonaInjectionTime = 0;
|
|
8
|
+
}
|
|
9
|
+
export function getPersonaInjectorState() {
|
|
10
|
+
return { lastPersonaInjectionTime };
|
|
11
|
+
}
|
|
3
12
|
export function registerPersonaInjector(api) {
|
|
4
13
|
api.registerHook('agent:bootstrap', (event) => {
|
|
5
14
|
const personaId = getActivePersona();
|
|
@@ -9,12 +18,23 @@ export function registerPersonaInjector(api) {
|
|
|
9
18
|
if (!event.context.bootstrapFiles) {
|
|
10
19
|
event.context.bootstrapFiles = [];
|
|
11
20
|
}
|
|
21
|
+
const alreadyInjected = event.context.bootstrapFiles.some((f) => f.path.startsWith('omoc://persona/'));
|
|
22
|
+
if (alreadyInjected) {
|
|
23
|
+
api.logger.info(`[omoc] Persona injection skipped (already present in bootstrapFiles)`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
if (now - lastPersonaInjectionTime < PERSONA_INJECTION_COOLDOWN_MS) {
|
|
28
|
+
api.logger.info(`[omoc] Persona injection skipped (cooldown)`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
12
31
|
try {
|
|
13
32
|
const content = readPersonaPromptSync(personaId);
|
|
14
33
|
event.context.bootstrapFiles.push({
|
|
15
34
|
path: `omoc://persona/${personaId}`,
|
|
16
35
|
content,
|
|
17
36
|
});
|
|
37
|
+
lastPersonaInjectionTime = now;
|
|
18
38
|
api.logger.info(`[omoc] Persona injected: ${personaId}`);
|
|
19
39
|
}
|
|
20
40
|
catch (err) {
|
|
@@ -22,6 +42,6 @@ export function registerPersonaInjector(api) {
|
|
|
22
42
|
}
|
|
23
43
|
}, {
|
|
24
44
|
name: 'oh-my-openclaw.persona-injector',
|
|
25
|
-
description: 'Injects active persona prompt into agent bootstrap',
|
|
45
|
+
description: 'Injects active persona prompt into agent bootstrap (with dedup + cooldown)',
|
|
26
46
|
});
|
|
27
47
|
}
|
|
@@ -42,6 +42,11 @@ export function registerTodoEnforcer(api) {
|
|
|
42
42
|
if (!event.context.bootstrapFiles) {
|
|
43
43
|
event.context.bootstrapFiles = [];
|
|
44
44
|
}
|
|
45
|
+
const alreadyInjected = event.context.bootstrapFiles.some((f) => f.path === 'omoc://todo-enforcer');
|
|
46
|
+
if (alreadyInjected) {
|
|
47
|
+
api.logger.info('[omoc] Todo enforcer skipped (already present in bootstrapFiles)');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
45
50
|
try {
|
|
46
51
|
event.context.bootstrapFiles.push({
|
|
47
52
|
path: 'omoc://todo-enforcer',
|
package/package.json
CHANGED