@aight-cool/aight-utils 0.1.21 → 0.1.22
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 +0 -1
- package/dist/index.js.map +1 -1
- package/dist/src/bootstrap.d.ts +1 -1
- package/dist/src/bootstrap.js +7 -9
- package/dist/src/bootstrap.js.map +1 -1
- package/dist/src/groups.js +1 -3
- package/dist/src/groups.js.map +1 -1
- package/dist/src/notif-prefs.js +11 -14
- package/dist/src/notif-prefs.js.map +1 -1
- package/dist/src/push-hook.js +33 -47
- package/dist/src/push-hook.js.map +1 -1
- package/dist/src/push-net.js +4 -1
- package/dist/src/push-net.js.map +1 -1
- package/dist/src/reminders.js +35 -26
- package/dist/src/reminders.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/openclaw.plugin.json +7 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,oFAAoF;IAEjG,YAAY,EAAE;QACZ,KAAK,CAAC,KAAc;YAClB,MAAM,GAAG,GACP,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACzD,CAAC,CAAE,KAAiC;gBACpC,CAAC,CAAC,EAAE,CAAC;YACT,OAAO;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAG,GAAG,CAAC,IAAY,EAAE,IAAI,IAAI,SAAS;oBAC1C,QAAQ,EAAG,GAAG,CAAC,IAAY,EAAE,QAAQ,IAAI,wBAAwB;oBACjE,WAAW,EAAG,GAAG,CAAC,IAAY,EAAE,WAAW;iBAC5C;gBACD,KAAK,EAAE;oBACL,OAAO,EAAG,GAAG,CAAC,KAAa,EAAE,OAAO,IAAI,IAAI;iBAC7C;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE;YACP,WAAW,EAAE;gBACX,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,6DAA6D;aACpE;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,wBAAwB;aACtC;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,IAAI;aAChB;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,YAAY;aACpB;SACF;KACF;IAED,QAAQ,CAAC,GAAsB;QAC7B,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAEjC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtB,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtB,qBAAqB,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,oFAAoF;IAEjG,YAAY,EAAE;QACZ,KAAK,CAAC,KAAc;YAClB,MAAM,GAAG,GACP,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACzD,CAAC,CAAE,KAAiC;gBACpC,CAAC,CAAC,EAAE,CAAC;YACT,OAAO;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAG,GAAG,CAAC,IAAY,EAAE,IAAI,IAAI,SAAS;oBAC1C,QAAQ,EAAG,GAAG,CAAC,IAAY,EAAE,QAAQ,IAAI,wBAAwB;oBACjE,WAAW,EAAG,GAAG,CAAC,IAAY,EAAE,WAAW;iBAC5C;gBACD,KAAK,EAAE;oBACL,OAAO,EAAG,GAAG,CAAC,KAAa,EAAE,OAAO,IAAI,IAAI;iBAC7C;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE;YACP,WAAW,EAAE;gBACX,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,6DAA6D;aACpE;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,wBAAwB;aACtC;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,IAAI;aAChB;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,YAAY;aACpB;SACF;KACF;IAED,QAAQ,CAAC,GAAsB;QAC7B,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAEjC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtB,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/dist/src/bootstrap.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent Bootstrap — injects AIGHT.md
|
|
2
|
+
* Agent Bootstrap — injects AIGHT.md via before_prompt_build hook
|
|
3
3
|
*/
|
|
4
4
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
5
5
|
export declare function registerBootstrap(api: OpenClawPluginApi): void;
|
package/dist/src/bootstrap.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent Bootstrap — injects AIGHT.md
|
|
2
|
+
* Agent Bootstrap — injects AIGHT.md via before_prompt_build hook
|
|
3
3
|
*/
|
|
4
4
|
const AIGHT_MD = `# Aight Integration
|
|
5
5
|
|
|
@@ -248,14 +248,12 @@ See the Shortcuts Protocol at the top of this document.
|
|
|
248
248
|
`;
|
|
249
249
|
export function registerBootstrap(api) {
|
|
250
250
|
try {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
});
|
|
258
|
-
api.logger.info("[aight-utils] Bootstrap hook registered (before_agent_start)");
|
|
251
|
+
// Register both event names so we work on old (before_agent_start only) and
|
|
252
|
+
// new (before_prompt_build) openclaw. Identical return shape lets the new
|
|
253
|
+
// SDK's `??` merge dedupe the injection.
|
|
254
|
+
const handler = () => ({ systemPrompt: AIGHT_MD });
|
|
255
|
+
api.on("before_prompt_build", handler);
|
|
256
|
+
api.on("before_agent_start", handler);
|
|
259
257
|
}
|
|
260
258
|
catch (err) {
|
|
261
259
|
api.logger.error(`[aight-utils] Failed to register bootstrap hook: ${err}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoPhB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,GAAsB;IACtD,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoPhB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,GAAsB;IACtD,IAAI,CAAC;QACH,4EAA4E;QAC5E,0EAA0E;QAC1E,yCAAyC;QACzC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,EAAE,CAAC,qBAA4B,EAAE,OAAO,CAAC,CAAC;QAC9C,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,GAAG,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/src/groups.js
CHANGED
|
@@ -8,8 +8,7 @@ import { join } from "path";
|
|
|
8
8
|
import { homedir } from "os";
|
|
9
9
|
const FILENAME = "group-names.json";
|
|
10
10
|
function filePath(api) {
|
|
11
|
-
const dir = api.dataDir ??
|
|
12
|
-
join(homedir(), ".openclaw", "plugin-data", "aight-utils");
|
|
11
|
+
const dir = api.dataDir ?? join(homedir(), ".openclaw", "plugin-data", "aight-utils");
|
|
13
12
|
mkdirSync(dir, { recursive: true });
|
|
14
13
|
return join(dir, FILENAME);
|
|
15
14
|
}
|
|
@@ -56,6 +55,5 @@ export function registerGroupRpc(api) {
|
|
|
56
55
|
removeGroupName(api, groupId);
|
|
57
56
|
respond(true, { ok: true });
|
|
58
57
|
});
|
|
59
|
-
api.logger.info("[aight-utils] Group name RPC registered");
|
|
60
58
|
}
|
|
61
59
|
//# sourceMappingURL=groups.js.map
|
package/dist/src/groups.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/groups.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,SAAS,QAAQ,CAAC,GAAsB;IACtC,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/groups.ts"],"names":[],"mappings":"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"}
|
package/dist/src/notif-prefs.js
CHANGED
|
@@ -28,7 +28,14 @@ export function loadNotifPrefs() {
|
|
|
28
28
|
return { ...DEFAULTS };
|
|
29
29
|
const raw = fs.readFileSync(PREFS_FILE, "utf-8");
|
|
30
30
|
const parsed = JSON.parse(raw);
|
|
31
|
-
|
|
31
|
+
const prefs = { ...DEFAULTS, ...parsed };
|
|
32
|
+
// Normalize expired timed mute in memory so getPrefs returns coherent
|
|
33
|
+
// state to the app. No write — disk is reconciled on the next setPrefs.
|
|
34
|
+
if (prefs.globalMute && prefs.muteUntil && Date.now() >= new Date(prefs.muteUntil).getTime()) {
|
|
35
|
+
prefs.globalMute = false;
|
|
36
|
+
prefs.muteUntil = null;
|
|
37
|
+
}
|
|
38
|
+
return prefs;
|
|
32
39
|
}
|
|
33
40
|
catch {
|
|
34
41
|
return { ...DEFAULTS };
|
|
@@ -53,18 +60,9 @@ export function shouldSendPush(sessionKey) {
|
|
|
53
60
|
if (!sessionKey)
|
|
54
61
|
return true; // fail open
|
|
55
62
|
const prefs = loadNotifPrefs();
|
|
56
|
-
// Global mute
|
|
57
|
-
if (prefs.globalMute)
|
|
58
|
-
|
|
59
|
-
return false; // indefinite
|
|
60
|
-
const expiry = new Date(prefs.muteUntil).getTime();
|
|
61
|
-
if (Date.now() < expiry)
|
|
62
|
-
return false;
|
|
63
|
-
// Mute expired — clear it
|
|
64
|
-
prefs.globalMute = false;
|
|
65
|
-
prefs.muteUntil = null;
|
|
66
|
-
saveNotifPrefs(prefs);
|
|
67
|
-
}
|
|
63
|
+
// Global mute (loadNotifPrefs already normalizes expired timed mutes)
|
|
64
|
+
if (prefs.globalMute)
|
|
65
|
+
return false;
|
|
68
66
|
// Category check
|
|
69
67
|
const category = classifySessionKey(sessionKey);
|
|
70
68
|
return prefs[category];
|
|
@@ -91,6 +89,5 @@ export function registerNotifPrefsRPC(api) {
|
|
|
91
89
|
api.logger.info(`[aight-utils] Notification prefs updated: ${JSON.stringify(current)}`);
|
|
92
90
|
respond(true, current);
|
|
93
91
|
});
|
|
94
|
-
api.logger.info("[aight-utils] Notification prefs RPC registered");
|
|
95
92
|
}
|
|
96
93
|
//# sourceMappingURL=notif-prefs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notif-prefs.js","sourceRoot":"","sources":["../../src/notif-prefs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAa9B,MAAM,QAAQ,GAAe;IAC3B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,gBAAgB;AAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAE5D,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,
|
|
1
|
+
{"version":3,"file":"notif-prefs.js","sourceRoot":"","sources":["../../src/notif-prefs.ts"],"names":[],"mappings":"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"}
|
package/dist/src/push-hook.js
CHANGED
|
@@ -6,32 +6,39 @@ import { loadTokens, unregisterToken } from "./push-store.js";
|
|
|
6
6
|
import { sendPush } from "./push-net.js";
|
|
7
7
|
import { loadGroupName } from "./groups.js";
|
|
8
8
|
import { shouldSendPush } from "./notif-prefs.js";
|
|
9
|
+
const HIDDEN_SUFFIXES = [
|
|
10
|
+
":aight-config",
|
|
11
|
+
":aight-pentest",
|
|
12
|
+
":speak",
|
|
13
|
+
":structured_content",
|
|
14
|
+
":main",
|
|
15
|
+
"security-fix",
|
|
16
|
+
"skill-scan",
|
|
17
|
+
];
|
|
18
|
+
const HIDDEN_SUBSTRINGS = ["subagent", "security-audit", "_skill-audit-", "_ensure-skill-defender"];
|
|
19
|
+
const META_RESPONSES = ["NO_REPLY", "REPLY_SKIP", "ANNOUNCE_SKIP", "HEARTBEAT_OK"];
|
|
20
|
+
const STALE_TOKEN_ERRORS = ["baddevicetoken", "unregistered", "devicetokennotfortopic", "expired"];
|
|
9
21
|
export function registerPushHook(api) {
|
|
10
22
|
try {
|
|
11
23
|
api.on("agent_end", async (event, ctx) => {
|
|
12
|
-
|
|
24
|
+
const sessionKey = ctx.sessionKey ?? "";
|
|
25
|
+
api.logger.info(`[aight-utils] agent_end fired session=${sessionKey} agent=${ctx.agentId}`);
|
|
13
26
|
const tokens = loadTokens();
|
|
14
27
|
if (tokens.length === 0)
|
|
15
28
|
return;
|
|
16
29
|
// Skip hidden/internal sessions — no push notifications for config,
|
|
17
30
|
// security, voice, sub-agent, or other background sessions.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
sk.includes("_skill-audit-") ||
|
|
27
|
-
sk.includes("_ensure-skill-defender") ||
|
|
28
|
-
sk.endsWith("security-fix") ||
|
|
29
|
-
sk.endsWith("skill-scan")) {
|
|
30
|
-
api.logger.info(`[aight-utils] Skipping hidden session push: ${sk}`);
|
|
31
|
+
if (HIDDEN_SUFFIXES.some((s) => sessionKey.endsWith(s)) ||
|
|
32
|
+
HIDDEN_SUBSTRINGS.some((s) => sessionKey.includes(s))) {
|
|
33
|
+
api.logger.info(`[aight-utils] Skipping hidden session push: ${sessionKey}`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Notification preference gate — bail before expensive preview extraction
|
|
37
|
+
if (!shouldSendPush(sessionKey)) {
|
|
38
|
+
api.logger.info(`[aight-utils] Push suppressed by notification prefs: ${sessionKey}`);
|
|
31
39
|
return;
|
|
32
40
|
}
|
|
33
41
|
const msgs = event.messages ?? [];
|
|
34
|
-
api.logger.info(`[aight-utils] messages count=${msgs.length} roles=${msgs.map((m) => m.role).join(",")}`);
|
|
35
42
|
// Extract last assistant message - try string and array content formats
|
|
36
43
|
let preview = "";
|
|
37
44
|
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
@@ -54,16 +61,7 @@ export function registerPushHook(api) {
|
|
|
54
61
|
api.logger.info(`[aight-utils] No preview found, skipping push`);
|
|
55
62
|
return;
|
|
56
63
|
}
|
|
57
|
-
|
|
58
|
-
const sessionKey_ = ctx.sessionKey ?? "";
|
|
59
|
-
const HIDDEN_SESSIONS = ["aight-config", "structured_content"];
|
|
60
|
-
if (HIDDEN_SESSIONS.some((h) => sessionKey_.includes(h))) {
|
|
61
|
-
api.logger.info(`[aight-utils] Skipping hidden session: ${sessionKey_}`);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
// Skip internal/meta responses
|
|
65
|
-
const skip = ["NO_REPLY", "REPLY_SKIP", "ANNOUNCE_SKIP", "HEARTBEAT_OK"];
|
|
66
|
-
if (skip.includes(preview.trim())) {
|
|
64
|
+
if (META_RESPONSES.includes(preview.trim())) {
|
|
67
65
|
api.logger.info(`[aight-utils] Skipping meta response: ${preview.trim()}`);
|
|
68
66
|
return;
|
|
69
67
|
}
|
|
@@ -74,9 +72,7 @@ export function registerPushHook(api) {
|
|
|
74
72
|
const agent = agents.find((a) => a.id === agentId);
|
|
75
73
|
const displayName = agent?.name ?? agent?.identity?.name ?? agentId;
|
|
76
74
|
// Resolve group chat name for push subtitle (WhatsApp-style layout)
|
|
77
|
-
const pushTitle = displayName;
|
|
78
75
|
let pushSubtitle;
|
|
79
|
-
const sessionKey = ctx.sessionKey ?? "";
|
|
80
76
|
if (sessionKey.includes(":group-chat:")) {
|
|
81
77
|
const groupId = sessionKey.split(":group-chat:")[1];
|
|
82
78
|
if (groupId) {
|
|
@@ -87,31 +83,22 @@ export function registerPushHook(api) {
|
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
85
|
const cleanBody = preview.trim().replace(/\n+/g, " ").trim();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
86
|
+
const pushPayload = {
|
|
87
|
+
title: displayName.trim(),
|
|
88
|
+
subtitle: pushSubtitle,
|
|
89
|
+
body: cleanBody,
|
|
90
|
+
data: { sessionKey, agentId },
|
|
91
|
+
};
|
|
97
92
|
for (const device of tokens) {
|
|
98
93
|
if (!device.sendKey)
|
|
99
94
|
continue;
|
|
100
95
|
try {
|
|
101
|
-
const pushResult = await sendPush(device,
|
|
102
|
-
|
|
103
|
-
subtitle: pushSubtitle,
|
|
104
|
-
body: cleanBody,
|
|
105
|
-
data: { sessionKey: ctx.sessionKey, agentId },
|
|
106
|
-
}, freshConfig);
|
|
107
|
-
api.logger.info(`[aight-utils] Push sent: session=${ctx.sessionKey} device=${device.deviceId} ok=${pushResult.ok}${pushResult.error ? ` error=${pushResult.error}` : ""}`);
|
|
96
|
+
const pushResult = await sendPush(device, pushPayload, freshConfig);
|
|
97
|
+
api.logger.info(`[aight-utils] Push sent: session=${sessionKey} device=${device.deviceId} ok=${pushResult.ok}${pushResult.error ? ` error=${pushResult.error}` : ""}`);
|
|
108
98
|
// Auto-prune stale tokens — if the relay rejects the token, remove it
|
|
109
99
|
if (!pushResult.ok && pushResult.error) {
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
err.includes("unregistered") ||
|
|
113
|
-
err.includes("devicetokennotfortopic") ||
|
|
114
|
-
err.includes("expired")) {
|
|
100
|
+
const errLower = pushResult.error.toLowerCase();
|
|
101
|
+
if (STALE_TOKEN_ERRORS.some((e) => errLower.includes(e))) {
|
|
115
102
|
api.logger.info(`[aight-utils] Pruning stale device token: ${device.deviceId}`);
|
|
116
103
|
unregisterToken(device.deviceId);
|
|
117
104
|
}
|
|
@@ -122,7 +109,6 @@ export function registerPushHook(api) {
|
|
|
122
109
|
}
|
|
123
110
|
}
|
|
124
111
|
});
|
|
125
|
-
api.logger.info("[aight-utils] Push hook registered (agent_end)");
|
|
126
112
|
}
|
|
127
113
|
catch (err) {
|
|
128
114
|
api.logger.error(`[aight-utils] Failed to register push hook: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-hook.js","sourceRoot":"","sources":["../../src/push-hook.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,
|
|
1
|
+
{"version":3,"file":"push-hook.js","sourceRoot":"","sources":["../../src/push-hook.ts"],"names":[],"mappings":"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"}
|
package/dist/src/push-net.js
CHANGED
|
@@ -20,7 +20,10 @@ export async function obtainSendKey(relayUrl, pushToken) {
|
|
|
20
20
|
}
|
|
21
21
|
export async function sendPush(device, payload, config) {
|
|
22
22
|
if (!device.sendKey) {
|
|
23
|
-
return {
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
error: `No sendKey for device ${device.deviceId} — re-register to obtain one`,
|
|
26
|
+
};
|
|
24
27
|
}
|
|
25
28
|
const relayUrl = config.push?.relayUrl ?? DEFAULT_RELAY_URL;
|
|
26
29
|
const mode = config.push?.mode ?? DEFAULT_PUSH_MODE;
|
package/dist/src/push-net.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-net.js","sourceRoot":"","sources":["../../src/push-net.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErE,yCAAyC;AAEzC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,SAAiB;IACrE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAmB,EACnB,OAAoB,EACpB,MAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"push-net.js","sourceRoot":"","sources":["../../src/push-net.ts"],"names":[],"mappings":"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"}
|
package/dist/src/reminders.js
CHANGED
|
@@ -7,37 +7,46 @@ import { sendPush } from "./push-net.js";
|
|
|
7
7
|
const CHECK_INTERVAL_MS = 30_000;
|
|
8
8
|
export function registerReminders(api, config) {
|
|
9
9
|
let timer = null;
|
|
10
|
+
let running = false;
|
|
10
11
|
async function checkReminders() {
|
|
11
|
-
|
|
12
|
-
const items = loadItems();
|
|
13
|
-
let changed = false;
|
|
14
|
-
const dueItems = items.filter((i) => i.type === "trigger" &&
|
|
15
|
-
i.status === "active" &&
|
|
16
|
-
i.scheduledFor &&
|
|
17
|
-
new Date(i.scheduledFor).getTime() <= now);
|
|
18
|
-
if (dueItems.length === 0)
|
|
12
|
+
if (running)
|
|
19
13
|
return;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
changed =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
14
|
+
running = true;
|
|
15
|
+
try {
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
const items = loadItems();
|
|
18
|
+
let changed = false;
|
|
19
|
+
const dueItems = items.filter((i) => i.type === "trigger" &&
|
|
20
|
+
i.status === "active" &&
|
|
21
|
+
i.scheduledFor &&
|
|
22
|
+
new Date(i.scheduledFor).getTime() <= now);
|
|
23
|
+
if (dueItems.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
const tokens = loadTokens();
|
|
26
|
+
for (const item of dueItems) {
|
|
27
|
+
item.status = "fired";
|
|
28
|
+
item.updatedAt = new Date().toISOString();
|
|
29
|
+
changed = true;
|
|
30
|
+
api.logger.info(`[aight-utils] Trigger fired: ${item.title} (${item.id})`);
|
|
31
|
+
for (const device of tokens) {
|
|
32
|
+
try {
|
|
33
|
+
await sendPush(device, {
|
|
34
|
+
title: "Reminder",
|
|
35
|
+
body: item.title,
|
|
36
|
+
data: { itemId: item.id, type: "trigger" },
|
|
37
|
+
}, config);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
api.logger.error(`[aight-utils] Push failed for ${device.deviceId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
41
|
+
}
|
|
36
42
|
}
|
|
37
43
|
}
|
|
44
|
+
if (changed) {
|
|
45
|
+
saveItems(items);
|
|
46
|
+
}
|
|
38
47
|
}
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
finally {
|
|
49
|
+
running = false;
|
|
41
50
|
}
|
|
42
51
|
}
|
|
43
52
|
api.registerService({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminders.js","sourceRoot":"","sources":["../../src/reminders.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAAC,GAAsB,EAAE,MAAmB;IAC3E,IAAI,KAAK,GAA0C,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"reminders.js","sourceRoot":"","sources":["../../src/reminders.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses Node built-ins only (no child_process).
|
|
6
6
|
*/
|
|
7
7
|
/** Updated by scripts/release.sh — do not edit manually. */
|
|
8
|
-
const VERSION = "0.1.
|
|
8
|
+
const VERSION = "0.1.22";
|
|
9
9
|
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
10
10
|
const npmCache = new Map();
|
|
11
11
|
async function getLatestNpmVersion(pkg) {
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
"id": "aight-utils",
|
|
3
3
|
"name": "Aight App Utils",
|
|
4
4
|
"description": "Aight App: Push notifications, Today items, config RPC, and agent bootstrap",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.22",
|
|
6
|
+
"activation": {
|
|
7
|
+
"onStartup": true
|
|
8
|
+
},
|
|
9
|
+
"contracts": {
|
|
10
|
+
"tools": ["aight_item"]
|
|
11
|
+
},
|
|
6
12
|
"configSchema": {
|
|
7
13
|
"type": "object",
|
|
8
14
|
"additionalProperties": false,
|
package/package.json
CHANGED