@raidiant/notifai 11.4.1 → 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 +28 -0
- package/README.md +7 -3
- package/dist/codex-tool-messages.d.ts +17 -0
- package/dist/codex-tool-messages.js +142 -0
- package/dist/codex-tool-messages.js.map +1 -0
- package/dist/commands-acknowledge.js +11 -0
- package/dist/commands-acknowledge.js.map +1 -1
- package/dist/commands-ask.js +22 -3
- package/dist/commands-ask.js.map +1 -1
- package/dist/commands-doctor.js +149 -39
- package/dist/commands-doctor.js.map +1 -1
- package/dist/commands-harness-context.js +3 -0
- package/dist/commands-harness-context.js.map +1 -1
- package/dist/commands-hook-attend.d.ts +2 -0
- package/dist/commands-hook-attend.js +87 -22
- package/dist/commands-hook-attend.js.map +1 -1
- package/dist/commands-hook-diagnostics.d.ts +11 -1
- package/dist/commands-hook-diagnostics.js +40 -1
- package/dist/commands-hook-diagnostics.js.map +1 -1
- package/dist/commands-hook-install.js +162 -21
- package/dist/commands-hook-install.js.map +1 -1
- package/dist/commands-hook-run.js +245 -8
- package/dist/commands-hook-run.js.map +1 -1
- package/dist/commands-hook-shape.d.ts +4 -3
- package/dist/commands-hook-shape.js +5 -4
- package/dist/commands-hook-shape.js.map +1 -1
- package/dist/commands-send-support.js +3 -0
- package/dist/commands-send-support.js.map +1 -1
- package/dist/commands-send.js +29 -0
- package/dist/commands-send.js.map +1 -1
- package/dist/harnesses.d.ts +14 -10
- package/dist/harnesses.js +39 -9
- 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.d.ts +11 -0
- package/dist/hermes-plugin.js +299 -0
- package/dist/hermes-plugin.js.map +1 -0
- package/dist/hook-events.d.ts +9 -2
- package/dist/hook-events.js +16 -6
- package/dist/hook-events.js.map +1 -1
- package/dist/hook-lifecycle.d.ts +1 -1
- package/dist/hook-lifecycle.js +27 -10
- package/dist/hook-lifecycle.js.map +1 -1
- package/dist/hook-session-state.d.ts +4 -1
- package/dist/hook-session-state.js +16 -4
- package/dist/hook-session-state.js.map +1 -1
- package/dist/hook-types.d.ts +23 -0
- package/dist/install-hooks.js +51 -4
- package/dist/install-hooks.js.map +1 -1
- 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-continuation-bridge.d.ts +7 -0
- package/dist/openclaw-continuation-bridge.js +64 -0
- package/dist/openclaw-continuation-bridge.js.map +1 -0
- package/dist/openclaw-gateway-readiness.d.ts +1 -0
- package/dist/openclaw-gateway-readiness.js +24 -0
- package/dist/openclaw-gateway-readiness.js.map +1 -0
- package/dist/openclaw-generation.d.ts +21 -0
- package/dist/openclaw-generation.js +115 -0
- package/dist/openclaw-generation.js.map +1 -0
- 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 +8 -0
- package/dist/openclaw-pending.js +47 -0
- package/dist/openclaw-pending.js.map +1 -0
- package/dist/openclaw-plugin.d.ts +22 -4
- package/dist/openclaw-plugin.js +1075 -90
- package/dist/openclaw-plugin.js.map +1 -1
- package/dist/openclaw-session-access.d.ts +12 -0
- package/dist/openclaw-session-access.js +79 -0
- package/dist/openclaw-session-access.js.map +1 -0
- package/dist/program.js +13 -8
- package/dist/program.js.map +1 -1
- package/dist/session-activation.js +5 -4
- package/dist/session-activation.js.map +1 -1
- package/dist/session-attendant-probe.d.ts +11 -0
- package/dist/session-attendant-probe.js +41 -0
- package/dist/session-attendant-probe.js.map +1 -1
- package/dist/session-attendant-state.d.ts +5 -0
- package/dist/session-attendant-state.js +14 -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-delivery.d.ts +2 -0
- package/dist/session-delivery.js +2 -0
- package/dist/session-delivery.js.map +1 -1
- package/dist/session-handoff.d.ts +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 +5 -1
- package/dist/session-message-handoff.js +3 -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 +67 -18
- package/dist/skill-source/notifai/references/notes-and-edits.md +12 -1
- package/dist/skill-source/notifai/references/updates.md +7 -6
- package/dist/update-handoff.d.ts +1 -1
- package/dist/update-handoff.js +2 -1
- package/dist/update-handoff.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invocation-context.js","sourceRoot":"","sources":["../src/invocation-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"invocation-context.js","sourceRoot":"","sources":["../src/invocation-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EscalationDeliveryRoute } from './hook-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* FDs 3 and 4 are private pipes opened by the generated Gateway service.
|
|
4
|
+
* Neither User text nor reply content is written to them: only exact request
|
|
5
|
+
* identifiers and the durable service hand-off protocol cross this boundary.
|
|
6
|
+
*/
|
|
7
|
+
export declare function openclawContinuationRoute(sessionKey: string, generation: string): EscalationDeliveryRoute;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Pointer-only hand-off from a CLI answer owner to its Gateway plugin service. */
|
|
2
|
+
import { createReadStream, createWriteStream } from 'node:fs';
|
|
3
|
+
import { createInterface } from 'node:readline';
|
|
4
|
+
const BRIDGE_WAIT_MS = 30_000;
|
|
5
|
+
/**
|
|
6
|
+
* FDs 3 and 4 are private pipes opened by the generated Gateway service.
|
|
7
|
+
* Neither User text nor reply content is written to them: only exact request
|
|
8
|
+
* identifiers and the durable service hand-off protocol cross this boundary.
|
|
9
|
+
*/
|
|
10
|
+
export function openclawContinuationRoute(sessionKey, generation) {
|
|
11
|
+
return {
|
|
12
|
+
kind: 'session-queue',
|
|
13
|
+
deliver: async (event) => {
|
|
14
|
+
const requestIds = event.request_ids;
|
|
15
|
+
const guard = event.writeGuard;
|
|
16
|
+
if (requestIds.length === 0 || guard === undefined || !guard.writable()) {
|
|
17
|
+
return { acknowledgement: 'held', notes: [] };
|
|
18
|
+
}
|
|
19
|
+
const output = createWriteStream('', { fd: 3, autoClose: false });
|
|
20
|
+
const input = createReadStream('', { fd: 4, autoClose: false });
|
|
21
|
+
const lines = createInterface({ input, crlfDelay: Infinity });
|
|
22
|
+
const response = new Promise((resolve, reject) => {
|
|
23
|
+
const timer = setTimeout(() => reject(new Error('Gateway service hand-off timed out')), BRIDGE_WAIT_MS);
|
|
24
|
+
const finish = (value) => {
|
|
25
|
+
clearTimeout(timer);
|
|
26
|
+
resolve(value);
|
|
27
|
+
};
|
|
28
|
+
lines.once('line', (line) => {
|
|
29
|
+
try {
|
|
30
|
+
finish(JSON.parse(line));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
reject(new Error('Invalid Gateway service hand-off'));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
lines.once('close', () => reject(new Error('Gateway service hand-off closed')));
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
await new Promise((resolve, reject) => output.write(`${JSON.stringify({
|
|
40
|
+
type: 'prepare', session_key: sessionKey, generation,
|
|
41
|
+
request_ids: requestIds,
|
|
42
|
+
})}\n`, (err) => err ? reject(err) : resolve()));
|
|
43
|
+
const reply = await response;
|
|
44
|
+
if (typeof reply !== 'object' || reply === null ||
|
|
45
|
+
reply['type'] !== 'prepared') {
|
|
46
|
+
return { acknowledgement: 'held', notes: [], log: { reason: 'gateway-service-refused' } };
|
|
47
|
+
}
|
|
48
|
+
if (!guard.writable() || !event.commitDelivery('subprocess')) {
|
|
49
|
+
return { acknowledgement: 'held', notes: [], log: { reason: 'generation-fenced' } };
|
|
50
|
+
}
|
|
51
|
+
output.write(`${JSON.stringify({ type: 'committed' })}\n`);
|
|
52
|
+
return {
|
|
53
|
+
acknowledgement: 'delivered', notes: [],
|
|
54
|
+
log: { route: 'session-queue', stage: 'gateway-service-handoff' },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
lines.close();
|
|
59
|
+
output.end();
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=openclaw-continuation-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-continuation-bridge.js","sourceRoot":"","sources":["../src/openclaw-continuation-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function openclawGatewayReady(env: NodeJS.ProcessEnv): boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** A verified, still-running local Gateway service is required before ask admission. */
|
|
2
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { openclawStateDir } from './openclaw-plugin.js';
|
|
5
|
+
import { processIdentityLiveness } from './process-identity.js';
|
|
6
|
+
export function openclawGatewayReady(env) {
|
|
7
|
+
try {
|
|
8
|
+
const file = path.join(openclawStateDir(env), 'notifai', 'continuation-ready.json');
|
|
9
|
+
const raw = JSON.parse(readFileSync(file, 'utf8'));
|
|
10
|
+
if (typeof raw !== 'object' || raw === null)
|
|
11
|
+
return false;
|
|
12
|
+
const value = raw;
|
|
13
|
+
if (typeof value['pid'] !== 'number' || typeof value['start'] !== 'string' ||
|
|
14
|
+
typeof value['script'] !== 'string' || typeof value['script_mtime'] !== 'number')
|
|
15
|
+
return false;
|
|
16
|
+
if (processIdentityLiveness({ pid: value['pid'], start: value['start'] }) !== 'alive')
|
|
17
|
+
return false;
|
|
18
|
+
return statSync(value['script']).mtimeMs === value['script_mtime'];
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=openclaw-gateway-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-gateway-readiness.js","sourceRoot":"","sources":["../src/openclaw-gateway-readiness.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,MAAM,UAAU,oBAAoB,CAAC,GAAsB;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAA;QACnF,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QACzD,MAAM,KAAK,GAAG,GAA8B,CAAA;QAC5C,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;YACtE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAClG,IAAI,uBAAuB,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QACnG,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,cAAc,CAAC,CAAA;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface OpenclawGeneration {
|
|
2
|
+
id: string;
|
|
3
|
+
sessionId?: string;
|
|
4
|
+
/** OpenClaw's native reset identity; sessionId can stay unchanged across /reset. */
|
|
5
|
+
lifecycleRevision?: string;
|
|
6
|
+
resumedFrom?: string;
|
|
7
|
+
startSeen: boolean;
|
|
8
|
+
resetPending: boolean;
|
|
9
|
+
activated: boolean;
|
|
10
|
+
ended: boolean;
|
|
11
|
+
/** Transcript IDs replaced under this stable sessionKey; late hooks cannot restore them. */
|
|
12
|
+
supersededSessionIds?: string[];
|
|
13
|
+
/** Native revisions replaced under a stable sessionKey, including same-ID resets. */
|
|
14
|
+
supersededLifecycleRevisions?: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function openclawGenerationLockPath(sessionKey: string, env: NodeJS.ProcessEnv): string;
|
|
17
|
+
/** Callers hold openclawGenerationLockPath through the complete lifecycle action. */
|
|
18
|
+
export declare function readOpenclawGeneration(sessionKey: string, env: NodeJS.ProcessEnv): OpenclawGeneration | null;
|
|
19
|
+
export declare function writeOpenclawGeneration(sessionKey: string, env: NodeJS.ProcessEnv, state: OpenclawGeneration): void;
|
|
20
|
+
export declare function observeOpenclawStart(current: OpenclawGeneration | null, sessionId?: string, resumedFrom?: string): OpenclawGeneration;
|
|
21
|
+
export declare function observeOpenclawPrompt(current: OpenclawGeneration | null, sessionId?: string, lifecycleRevision?: string): OpenclawGeneration;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/** Durable generation fence shared by OpenClaw's Gateway and agent hook runners. */
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { atomicWriteFileSync } from './atomic-file.js';
|
|
6
|
+
import { sanitizeSessionId, stateDir } from './config.js';
|
|
7
|
+
function generationPath(sessionKey, env) {
|
|
8
|
+
return path.join(stateDir(env), 'sessions', `${sanitizeSessionId(sessionKey)}.openclaw-generation.json`);
|
|
9
|
+
}
|
|
10
|
+
export function openclawGenerationLockPath(sessionKey, env) {
|
|
11
|
+
return `${generationPath(sessionKey, env)}.lock`;
|
|
12
|
+
}
|
|
13
|
+
/** Callers hold openclawGenerationLockPath through the complete lifecycle action. */
|
|
14
|
+
export function readOpenclawGeneration(sessionKey, env) {
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(readFileSync(generationPath(sessionKey, env), 'utf8'));
|
|
17
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
18
|
+
return null;
|
|
19
|
+
const state = parsed;
|
|
20
|
+
if (typeof state['id'] !== 'string' ||
|
|
21
|
+
typeof state['startSeen'] !== 'boolean' ||
|
|
22
|
+
typeof state['resetPending'] !== 'boolean' ||
|
|
23
|
+
typeof state['activated'] !== 'boolean' ||
|
|
24
|
+
typeof state['ended'] !== 'boolean')
|
|
25
|
+
return null;
|
|
26
|
+
return {
|
|
27
|
+
id: state['id'],
|
|
28
|
+
...(typeof state['sessionId'] === 'string' ? { sessionId: state['sessionId'] } : {}),
|
|
29
|
+
...(typeof state['lifecycleRevision'] === 'string' ? { lifecycleRevision: state['lifecycleRevision'] } : {}),
|
|
30
|
+
...(typeof state['resumedFrom'] === 'string' ? { resumedFrom: state['resumedFrom'] } : {}),
|
|
31
|
+
startSeen: state['startSeen'],
|
|
32
|
+
resetPending: state['resetPending'],
|
|
33
|
+
activated: state['activated'],
|
|
34
|
+
ended: state['ended'],
|
|
35
|
+
...(Array.isArray(state['supersededSessionIds']) &&
|
|
36
|
+
state['supersededSessionIds'].every((id) => typeof id === 'string')
|
|
37
|
+
? { supersededSessionIds: state['supersededSessionIds'] } : {}),
|
|
38
|
+
...(Array.isArray(state['supersededLifecycleRevisions']) &&
|
|
39
|
+
state['supersededLifecycleRevisions'].every((id) => typeof id === 'string')
|
|
40
|
+
? { supersededLifecycleRevisions: state['supersededLifecycleRevisions'] } : {}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function writeOpenclawGeneration(sessionKey, env, state) {
|
|
48
|
+
atomicWriteFileSync(generationPath(sessionKey, env), `${JSON.stringify(state)}\n`);
|
|
49
|
+
}
|
|
50
|
+
function fresh(sessionId, resumedFrom, previous, lifecycleRevision) {
|
|
51
|
+
const superseded = previous?.supersededSessionIds ?? [];
|
|
52
|
+
const priorId = previous?.sessionId;
|
|
53
|
+
const supersededSessionIds = priorId !== undefined && priorId !== sessionId &&
|
|
54
|
+
!superseded.includes(priorId) ? [...superseded, priorId] : superseded;
|
|
55
|
+
const oldRevisions = previous?.supersededLifecycleRevisions ?? [];
|
|
56
|
+
const priorRevision = previous?.lifecycleRevision;
|
|
57
|
+
const supersededLifecycleRevisions = priorRevision !== undefined && lifecycleRevision !== undefined &&
|
|
58
|
+
priorRevision !== lifecycleRevision && !oldRevisions.includes(priorRevision)
|
|
59
|
+
? [...oldRevisions, priorRevision] : oldRevisions;
|
|
60
|
+
return {
|
|
61
|
+
id: randomUUID(),
|
|
62
|
+
...(sessionId === undefined ? {} : { sessionId }),
|
|
63
|
+
...(lifecycleRevision === undefined ? {} : { lifecycleRevision }),
|
|
64
|
+
...(resumedFrom === undefined ? {} : { resumedFrom }),
|
|
65
|
+
startSeen: false,
|
|
66
|
+
resetPending: false,
|
|
67
|
+
activated: false,
|
|
68
|
+
ended: false,
|
|
69
|
+
...(supersededSessionIds.length === 0 ? {} : { supersededSessionIds }),
|
|
70
|
+
...(supersededLifecycleRevisions.length === 0 ? {} : { supersededLifecycleRevisions }),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function isSuperseded(current, sessionId) {
|
|
74
|
+
return sessionId !== undefined && sessionId !== current.sessionId &&
|
|
75
|
+
(current.supersededSessionIds?.includes(sessionId) === true ||
|
|
76
|
+
current.resumedFrom === sessionId);
|
|
77
|
+
}
|
|
78
|
+
export function observeOpenclawStart(current, sessionId, resumedFrom) {
|
|
79
|
+
if (current !== null && isSuperseded(current, sessionId))
|
|
80
|
+
return { ...current };
|
|
81
|
+
const next = current === null || current.ended || current.resetPending ||
|
|
82
|
+
(sessionId !== undefined && current.sessionId !== undefined && sessionId !== current.sessionId) ||
|
|
83
|
+
(current.lifecycleRevision === undefined && current.startSeen &&
|
|
84
|
+
resumedFrom !== undefined && current.resumedFrom !== resumedFrom)
|
|
85
|
+
? fresh(sessionId, resumedFrom, current ?? undefined, current?.lifecycleRevision)
|
|
86
|
+
: { ...current };
|
|
87
|
+
if (next.sessionId === undefined && sessionId !== undefined)
|
|
88
|
+
next.sessionId = sessionId;
|
|
89
|
+
if (resumedFrom !== undefined)
|
|
90
|
+
next.resumedFrom = resumedFrom;
|
|
91
|
+
next.startSeen = true;
|
|
92
|
+
return next;
|
|
93
|
+
}
|
|
94
|
+
export function observeOpenclawPrompt(current, sessionId, lifecycleRevision) {
|
|
95
|
+
// Hook JSON may come from older generated plugins; malformed null is absence.
|
|
96
|
+
const revision = typeof lifecycleRevision === 'string' && lifecycleRevision !== ''
|
|
97
|
+
? lifecycleRevision : undefined;
|
|
98
|
+
if (current !== null && isSuperseded(current, sessionId))
|
|
99
|
+
return { ...current };
|
|
100
|
+
if (current !== null && revision !== undefined &&
|
|
101
|
+
current.supersededLifecycleRevisions?.includes(revision))
|
|
102
|
+
return { ...current };
|
|
103
|
+
const next = current === null || current.ended || current.resetPending ||
|
|
104
|
+
(revision !== undefined && current.lifecycleRevision !== undefined &&
|
|
105
|
+
revision !== current.lifecycleRevision) ||
|
|
106
|
+
(sessionId !== undefined && current.sessionId !== undefined && sessionId !== current.sessionId)
|
|
107
|
+
? fresh(sessionId, undefined, current ?? undefined, revision)
|
|
108
|
+
: { ...current };
|
|
109
|
+
if (next.sessionId === undefined && sessionId !== undefined)
|
|
110
|
+
next.sessionId = sessionId;
|
|
111
|
+
if (next.lifecycleRevision === undefined && revision !== undefined)
|
|
112
|
+
next.lifecycleRevision = revision;
|
|
113
|
+
return next;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=openclaw-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-generation.js","sourceRoot":"","sources":["../src/openclaw-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionWriteResult } from './session-handoff.js';
|
|
2
|
+
import type { WriteGuard } from './wake-support.js';
|
|
3
|
+
import type { SessionActivity } from '@raidiant/notifai-protocol';
|
|
4
|
+
/** A missing Gateway observation is uncertainty, never an idle assertion. */
|
|
5
|
+
export declare function openclawBridgeActivity(): SessionActivity | null;
|
|
6
|
+
export declare function openclawMessageBridgeAvailable(env: NodeJS.ProcessEnv): boolean;
|
|
7
|
+
/** Each attendant owns its pipes; handOffSessionMessages serializes writes. */
|
|
8
|
+
export declare function openclawMessageBridge(): (messageId: string, sessionKey: string, generation: string, text: string, begin: () => boolean, guard: WriteGuard) => Promise<SessionWriteResult>;
|
|
@@ -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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface OpenclawPendingSession {
|
|
2
|
+
session_key: string;
|
|
3
|
+
cwd: string;
|
|
4
|
+
generation: string;
|
|
5
|
+
session_id?: string;
|
|
6
|
+
}
|
|
7
|
+
/** Scan CLI-owned state so a Gateway restart finds every live activated session. */
|
|
8
|
+
export declare function listPendingOpenclawSessions(env: NodeJS.ProcessEnv): OpenclawPendingSession[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Gateway service inventory: only identity and timing, never question text. */
|
|
2
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { stateDir, loadConfig } from './config.js';
|
|
5
|
+
import { readSessionState, sessionHasEnded, sessionStatePath, readSessionIncarnation } from './hook-session-state.js';
|
|
6
|
+
import { readOpenclawGeneration } from './openclaw-generation.js';
|
|
7
|
+
import { projectBinding, projectEnabled } from './project-enablement.js';
|
|
8
|
+
/** Scan CLI-owned state so a Gateway restart finds every live activated session. */
|
|
9
|
+
export function listPendingOpenclawSessions(env) {
|
|
10
|
+
const directory = path.join(stateDir(env), 'sessions');
|
|
11
|
+
if (!existsSync(directory))
|
|
12
|
+
return [];
|
|
13
|
+
const sessions = [];
|
|
14
|
+
for (const name of readdirSync(directory)) {
|
|
15
|
+
if (!name.endsWith('.json'))
|
|
16
|
+
continue;
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(readFileSync(path.join(directory, name), 'utf8'));
|
|
19
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
20
|
+
continue;
|
|
21
|
+
const raw = parsed;
|
|
22
|
+
const sessionKey = raw['session_id'];
|
|
23
|
+
if (typeof sessionKey !== 'string' ||
|
|
24
|
+
path.basename(sessionStatePath(sessionKey, env)) !== name)
|
|
25
|
+
continue;
|
|
26
|
+
const state = readSessionState(sessionKey, env);
|
|
27
|
+
const cwd = state.activation_cwd;
|
|
28
|
+
if (state.harness !== 'openclaw' || typeof cwd !== 'string' ||
|
|
29
|
+
!path.isAbsolute(cwd) || sessionHasEnded(sessionKey, env))
|
|
30
|
+
continue;
|
|
31
|
+
const generation = readOpenclawGeneration(sessionKey, env);
|
|
32
|
+
if (generation === null || generation.ended || !generation.activated ||
|
|
33
|
+
readSessionIncarnation(sessionKey, env)?.openclaw_generation !== generation.id)
|
|
34
|
+
continue;
|
|
35
|
+
const config = loadConfig({ cwd, env, sessionId: sessionKey });
|
|
36
|
+
if (!projectEnabled(projectBinding(cwd, env, config.project.value)))
|
|
37
|
+
continue;
|
|
38
|
+
sessions.push({ session_key: sessionKey, cwd, generation: generation.id,
|
|
39
|
+
...(generation.sessionId === undefined ? {} : { session_id: generation.sessionId }) });
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Corrupt or unreadable state never authorizes a continuation.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return sessions;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=openclaw-pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-pending.js","sourceRoot":"","sources":["../src/openclaw-pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type JSONPath } from 'jsonc-parser';
|
|
1
2
|
import { type HookHostPlatform } from './hook-adapter.js';
|
|
2
3
|
/**
|
|
3
4
|
* The OpenClaw adapter.
|
|
@@ -7,14 +8,16 @@ import { type HookHostPlatform } from './hook-adapter.js';
|
|
|
7
8
|
* commands every other harness invokes, so presence, activation, and
|
|
8
9
|
* retirement stay in the CLI.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
+
* session_start -> openclaw-lifecycle (generation observation)
|
|
12
|
+
* before_reset -> openclaw-lifecycle (retire the old generation)
|
|
13
|
+
* before_prompt_build -> session-start / subagent-start (context once per generation)
|
|
11
14
|
* message_received -> user-prompt-submit (User is present)
|
|
12
15
|
* agent_end -> stop (the turn ended)
|
|
13
16
|
* session_end -> session-end (retire local state)
|
|
14
17
|
* resolve_exec_env -> NOTIFAI_ACTIVE_* markers (exact Source Context)
|
|
15
18
|
*
|
|
16
|
-
* `command:stop` is a User abort and is deliberately not wired.
|
|
17
|
-
*
|
|
19
|
+
* `command:stop` is a User abort and is deliberately not wired. The Gateway
|
|
20
|
+
* service owns answer continuation after agent_end records its turn boundary.
|
|
18
21
|
*/
|
|
19
22
|
export declare const OPENCLAW_PLUGIN_MARKER = "// notifai managed openclaw plugin";
|
|
20
23
|
export declare const OPENCLAW_PLUGIN_ID = "notifai";
|
|
@@ -44,7 +47,22 @@ export declare function openclawPluginTarget(contents: string): {
|
|
|
44
47
|
timeoutSeconds?: number;
|
|
45
48
|
nodePath?: string;
|
|
46
49
|
} | null;
|
|
47
|
-
export declare function parseOpenclawConfig(source: string): Record<string, unknown>;
|
|
50
|
+
export declare function parseOpenclawConfig(source: string, configFile?: string): Record<string, unknown>;
|
|
51
|
+
/** Apply one JSONC edit while leaving unrelated source ranges intact. */
|
|
52
|
+
export declare function editOpenclawConfigText(source: string, configFile: string, location: JSONPath, value: unknown): string;
|
|
53
|
+
/** Install or refresh Notifai's entry with a JSONC parser edit. */
|
|
54
|
+
export declare function enableOpenclawNotifaiConfigText(source: string, configFile: string): string;
|
|
55
|
+
/** Remove only the entry and explicit load path owned by this installation. */
|
|
56
|
+
export declare function removeOpenclawNotifaiConfigText(source: string, configFile: string, pluginDir: string): string;
|
|
57
|
+
/** Remove one older Project load path while leaving the shared entry alone. */
|
|
58
|
+
export declare function removeOpenclawLoadPathConfigText(source: string, configFile: string, pluginDir: string): string;
|
|
59
|
+
export interface OpenclawPluginLoadBlocker {
|
|
60
|
+
key: 'plugins.allow' | 'plugins.deny';
|
|
61
|
+
action: 'add' | 'remove';
|
|
62
|
+
}
|
|
63
|
+
export declare function openclawPluginLoadBlockers(config: Record<string, unknown>): OpenclawPluginLoadBlocker[];
|
|
64
|
+
export declare function openclawPluginLoadRemedy(blocker: OpenclawPluginLoadBlocker): string;
|
|
65
|
+
export declare function openclawPluginLoadWarning(blockers: OpenclawPluginLoadBlocker[]): string | null;
|
|
48
66
|
export declare function mergeOpenclawNotifaiEntry(config: Record<string, unknown>): Record<string, unknown>;
|
|
49
67
|
/**
|
|
50
68
|
* Drop a Project-scoped plugin directory from OpenClaw's explicit load paths,
|