@raidiant/notifai 11.5.0 → 11.6.0-beta.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/CHANGELOG.md +12 -0
- package/dist/commands-acknowledge.js +5 -2
- package/dist/commands-acknowledge.js.map +1 -1
- package/dist/commands-ask.js +9 -2
- package/dist/commands-ask.js.map +1 -1
- package/dist/commands-doctor.js +21 -15
- package/dist/commands-doctor.js.map +1 -1
- package/dist/commands-hook-attend.js +17 -0
- package/dist/commands-hook-attend.js.map +1 -1
- package/dist/commands-hook-install.js +1 -1
- package/dist/commands-hook-install.js.map +1 -1
- package/dist/commands-hook-run.js +32 -3
- package/dist/commands-hook-run.js.map +1 -1
- package/dist/commands-send-support.js +3 -0
- package/dist/commands-send-support.js.map +1 -1
- package/dist/harnesses.d.ts +8 -3
- package/dist/harnesses.js +16 -4
- package/dist/harnesses.js.map +1 -1
- package/dist/hermes-attendant.d.ts +38 -0
- package/dist/hermes-attendant.js +333 -0
- package/dist/hermes-attendant.js.map +1 -0
- package/dist/hermes-plugin.js +142 -4
- package/dist/hermes-plugin.js.map +1 -1
- package/dist/hook-lifecycle.d.ts +1 -1
- package/dist/hook-lifecycle.js +22 -11
- package/dist/hook-lifecycle.js.map +1 -1
- package/dist/hook-types.d.ts +3 -0
- package/dist/invocation-context.d.ts +1 -0
- package/dist/invocation-context.js +3 -0
- package/dist/invocation-context.js.map +1 -1
- package/dist/openclaw-generation.d.ts +5 -1
- package/dist/openclaw-generation.js +27 -5
- package/dist/openclaw-generation.js.map +1 -1
- package/dist/openclaw-message-bridge.d.ts +8 -0
- package/dist/openclaw-message-bridge.js +93 -0
- package/dist/openclaw-message-bridge.js.map +1 -0
- package/dist/openclaw-pending.d.ts +1 -1
- package/dist/openclaw-pending.js +1 -6
- package/dist/openclaw-pending.js.map +1 -1
- package/dist/openclaw-plugin.js +385 -14
- package/dist/openclaw-plugin.js.map +1 -1
- package/dist/openclaw-session-access.d.ts +2 -0
- package/dist/openclaw-session-access.js +10 -0
- package/dist/openclaw-session-access.js.map +1 -1
- package/dist/program.js +7 -2
- package/dist/program.js.map +1 -1
- package/dist/session-activation.js +1 -0
- package/dist/session-activation.js.map +1 -1
- package/dist/session-attendant-probe.d.ts +1 -0
- package/dist/session-attendant-probe.js +11 -1
- package/dist/session-attendant-probe.js.map +1 -1
- package/dist/session-attendant-state.d.ts +3 -0
- package/dist/session-attendant-state.js +8 -0
- package/dist/session-attendant-state.js.map +1 -1
- package/dist/session-attendant.d.ts +6 -0
- package/dist/session-attendant.js +12 -0
- package/dist/session-attendant.js.map +1 -1
- package/dist/session-labels.d.ts +2 -0
- package/dist/session-labels.js +5 -0
- package/dist/session-labels.js.map +1 -1
- package/dist/session-message-handoff.d.ts +3 -1
- package/dist/session-message-handoff.js +2 -1
- package/dist/session-message-handoff.js.map +1 -1
- package/dist/skill-source/manifest.json +6 -6
- package/dist/skill-source/notifai/SKILL.md +63 -59
- package/dist/skill-source/notifai/references/harness-setup.md +24 -8
- package/dist/skill-source/notifai/references/notes-and-edits.md +6 -0
- package/dist/skill-source/notifai/references/updates.md +3 -2
- package/dist/update-handoff.js +1 -1
- package/dist/update-handoff.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** Session Message text travels through private pipes to the Gateway plugin, never process argv. */
|
|
2
|
+
import { fstatSync, createReadStream, createWriteStream } from 'node:fs';
|
|
3
|
+
import { createInterface } from 'node:readline';
|
|
4
|
+
const RESPONSE_MS = 30_000;
|
|
5
|
+
let lastActivity = null;
|
|
6
|
+
/** A missing Gateway observation is uncertainty, never an idle assertion. */
|
|
7
|
+
export function openclawBridgeActivity() {
|
|
8
|
+
return lastActivity !== null && Date.now() - lastActivity.at < 10_000
|
|
9
|
+
? lastActivity.value : null;
|
|
10
|
+
}
|
|
11
|
+
export function openclawMessageBridgeAvailable(env) {
|
|
12
|
+
if (env['NOTIFAI_OPENCLAW_MESSAGE_BRIDGE'] !== '1')
|
|
13
|
+
return false;
|
|
14
|
+
try {
|
|
15
|
+
fstatSync(3);
|
|
16
|
+
fstatSync(4);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Each attendant owns its pipes; handOffSessionMessages serializes writes. */
|
|
24
|
+
export function openclawMessageBridge() {
|
|
25
|
+
const output = createWriteStream('', { fd: 3, autoClose: false });
|
|
26
|
+
const input = createReadStream('', { fd: 4, autoClose: false });
|
|
27
|
+
const lines = createInterface({ input, crlfDelay: Infinity });
|
|
28
|
+
let pending = null;
|
|
29
|
+
output.on('error', (error) => {
|
|
30
|
+
pending?.finish({ status: 'failed', reason: 'Gateway message pipe write failed', error });
|
|
31
|
+
});
|
|
32
|
+
input.on('error', (error) => {
|
|
33
|
+
pending?.finish({ status: 'failed', reason: 'Gateway message pipe read failed', error });
|
|
34
|
+
});
|
|
35
|
+
lines.on('line', (line) => {
|
|
36
|
+
let value;
|
|
37
|
+
try {
|
|
38
|
+
value = JSON.parse(line);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (value['type'] === 'activity' &&
|
|
44
|
+
(value['activity'] === 'working' || value['activity'] === 'idle')) {
|
|
45
|
+
lastActivity = { value: value['activity'], at: Date.now() };
|
|
46
|
+
}
|
|
47
|
+
else if (pending !== null && value['message_id'] === pending.id) {
|
|
48
|
+
pending.finish(value['status'] === 'written'
|
|
49
|
+
? { status: 'written', route: 'session-queue' }
|
|
50
|
+
: { status: 'failed', reason: 'Gateway message hand-off was unconfirmed', error: value['status'] });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
lines.on('close', () => {
|
|
54
|
+
lastActivity = null;
|
|
55
|
+
pending?.finish({ status: 'failed', reason: 'Gateway message pipe closed', error: null });
|
|
56
|
+
});
|
|
57
|
+
return async (messageId, sessionKey, generation, text, begin, guard) => {
|
|
58
|
+
if (!guard.writable())
|
|
59
|
+
return { status: 'cancelled' };
|
|
60
|
+
if (!begin())
|
|
61
|
+
return { status: 'cancelled' };
|
|
62
|
+
if (!guard.writable())
|
|
63
|
+
return { status: 'aborted', reason: 'the claim or lease expired before the Gateway hand-off' };
|
|
64
|
+
const remainingMs = guard.remainingMs();
|
|
65
|
+
if (!Number.isFinite(remainingMs) || remainingMs <= 0) {
|
|
66
|
+
return { status: 'aborted', reason: 'the claim expired before the Gateway hand-off' };
|
|
67
|
+
}
|
|
68
|
+
const deadlineNs = (process.hrtime.bigint() + BigInt(Math.floor(remainingMs * 1_000_000))).toString();
|
|
69
|
+
let timer;
|
|
70
|
+
const response = new Promise((resolve) => {
|
|
71
|
+
const finish = (result) => {
|
|
72
|
+
if (timer !== undefined)
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
pending = null;
|
|
75
|
+
resolve(result);
|
|
76
|
+
};
|
|
77
|
+
pending = { id: messageId, finish };
|
|
78
|
+
timer = setTimeout(() => finish({ status: 'failed', reason: 'Gateway message hand-off timed out', error: null }), Math.min(RESPONSE_MS, Math.max(1, remainingMs)));
|
|
79
|
+
});
|
|
80
|
+
try {
|
|
81
|
+
await new Promise((resolve, reject) => output.write(`${JSON.stringify({
|
|
82
|
+
type: 'message', message_id: messageId, session_key: sessionKey, generation, text,
|
|
83
|
+
deadline_ns: deadlineNs,
|
|
84
|
+
})}\n`, (error) => error ? reject(error) : resolve()));
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
pending?.finish({ status: 'failed', reason: 'Gateway message pipe write failed', error });
|
|
88
|
+
return { status: 'failed', reason: 'Gateway message pipe write failed', error };
|
|
89
|
+
}
|
|
90
|
+
return response;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=openclaw-message-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-message-bridge.js","sourceRoot":"","sources":["../src/openclaw-message-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ export interface OpenclawPendingSession {
|
|
|
4
4
|
generation: string;
|
|
5
5
|
session_id?: string;
|
|
6
6
|
}
|
|
7
|
-
/** Scan CLI-owned state so a Gateway restart finds
|
|
7
|
+
/** Scan CLI-owned state so a Gateway restart finds every live activated session. */
|
|
8
8
|
export declare function listPendingOpenclawSessions(env: NodeJS.ProcessEnv): OpenclawPendingSession[];
|
package/dist/openclaw-pending.js
CHANGED
|
@@ -5,7 +5,7 @@ import { stateDir, loadConfig } from './config.js';
|
|
|
5
5
|
import { readSessionState, sessionHasEnded, sessionStatePath, readSessionIncarnation } from './hook-session-state.js';
|
|
6
6
|
import { readOpenclawGeneration } from './openclaw-generation.js';
|
|
7
7
|
import { projectBinding, projectEnabled } from './project-enablement.js';
|
|
8
|
-
/** Scan CLI-owned state so a Gateway restart finds
|
|
8
|
+
/** Scan CLI-owned state so a Gateway restart finds every live activated session. */
|
|
9
9
|
export function listPendingOpenclawSessions(env) {
|
|
10
10
|
const directory = path.join(stateDir(env), 'sessions');
|
|
11
11
|
if (!existsSync(directory))
|
|
@@ -35,11 +35,6 @@ export function listPendingOpenclawSessions(env) {
|
|
|
35
35
|
const config = loadConfig({ cwd, env, sessionId: sessionKey });
|
|
36
36
|
if (!projectEnabled(projectBinding(cwd, env, config.project.value)))
|
|
37
37
|
continue;
|
|
38
|
-
const stopped = state.last_stop_at;
|
|
39
|
-
if (stopped === undefined ||
|
|
40
|
-
!((state.pending ?? []).some((entry) => (entry.asked_at ?? Infinity) <= stopped) ||
|
|
41
|
-
(state.accepted !== undefined && state.accepted.delivered_at === undefined)))
|
|
42
|
-
continue;
|
|
43
38
|
sessions.push({ session_key: sessionKey, cwd, generation: generation.id,
|
|
44
39
|
...(generation.sessionId === undefined ? {} : { session_id: generation.sessionId }) });
|
|
45
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-pending.js","sourceRoot":"","sources":["../src/openclaw-pending.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AASxE,
|
|
1
|
+
{"version":3,"file":"openclaw-pending.js","sourceRoot":"","sources":["../src/openclaw-pending.ts"],"names":[],"mappings":"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"}
|