@raidiant/notifai 11.5.0 → 11.6.0-beta.3

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/commands-acknowledge.js +5 -2
  3. package/dist/commands-acknowledge.js.map +1 -1
  4. package/dist/commands-ask.js +9 -2
  5. package/dist/commands-ask.js.map +1 -1
  6. package/dist/commands-doctor.js +21 -15
  7. package/dist/commands-doctor.js.map +1 -1
  8. package/dist/commands-hook-attend.js +42 -6
  9. package/dist/commands-hook-attend.js.map +1 -1
  10. package/dist/commands-hook-install.js +1 -1
  11. package/dist/commands-hook-install.js.map +1 -1
  12. package/dist/commands-hook-run.js +79 -8
  13. package/dist/commands-hook-run.js.map +1 -1
  14. package/dist/commands-send-support.js +3 -0
  15. package/dist/commands-send-support.js.map +1 -1
  16. package/dist/commands-update-check.d.ts +1 -1
  17. package/dist/commands-update-check.js +12 -4
  18. package/dist/commands-update-check.js.map +1 -1
  19. package/dist/commands-update-resume.d.ts +7 -0
  20. package/dist/commands-update-resume.js +133 -0
  21. package/dist/commands-update-resume.js.map +1 -0
  22. package/dist/commands-update.js +25 -11
  23. package/dist/commands-update.js.map +1 -1
  24. package/dist/commands.d.ts +1 -0
  25. package/dist/commands.js +1 -0
  26. package/dist/commands.js.map +1 -1
  27. package/dist/harnesses.d.ts +8 -3
  28. package/dist/harnesses.js +16 -4
  29. package/dist/harnesses.js.map +1 -1
  30. package/dist/hermes-attendant.d.ts +38 -0
  31. package/dist/hermes-attendant.js +333 -0
  32. package/dist/hermes-attendant.js.map +1 -0
  33. package/dist/hermes-plugin.js +142 -4
  34. package/dist/hermes-plugin.js.map +1 -1
  35. package/dist/hook-lifecycle.d.ts +1 -1
  36. package/dist/hook-lifecycle.js +22 -11
  37. package/dist/hook-lifecycle.js.map +1 -1
  38. package/dist/hook-types.d.ts +3 -0
  39. package/dist/integration-health.d.ts +26 -0
  40. package/dist/integration-health.js +133 -0
  41. package/dist/integration-health.js.map +1 -0
  42. package/dist/invocation-context.d.ts +1 -0
  43. package/dist/invocation-context.js +3 -0
  44. package/dist/invocation-context.js.map +1 -1
  45. package/dist/native-skills.d.ts +1 -0
  46. package/dist/native-skills.js +30 -3
  47. package/dist/native-skills.js.map +1 -1
  48. package/dist/openclaw-generation.d.ts +5 -1
  49. package/dist/openclaw-generation.js +27 -5
  50. package/dist/openclaw-generation.js.map +1 -1
  51. package/dist/openclaw-message-bridge.d.ts +8 -0
  52. package/dist/openclaw-message-bridge.js +93 -0
  53. package/dist/openclaw-message-bridge.js.map +1 -0
  54. package/dist/openclaw-pending.d.ts +1 -1
  55. package/dist/openclaw-pending.js +1 -6
  56. package/dist/openclaw-pending.js.map +1 -1
  57. package/dist/openclaw-plugin.js +385 -14
  58. package/dist/openclaw-plugin.js.map +1 -1
  59. package/dist/openclaw-session-access.d.ts +2 -0
  60. package/dist/openclaw-session-access.js +10 -0
  61. package/dist/openclaw-session-access.js.map +1 -1
  62. package/dist/program.d.ts +2 -1
  63. package/dist/program.js +17 -10
  64. package/dist/program.js.map +1 -1
  65. package/dist/session-activation.js +1 -0
  66. package/dist/session-activation.js.map +1 -1
  67. package/dist/session-attendant-probe.d.ts +1 -0
  68. package/dist/session-attendant-probe.js +11 -1
  69. package/dist/session-attendant-probe.js.map +1 -1
  70. package/dist/session-attendant-state.d.ts +3 -0
  71. package/dist/session-attendant-state.js +8 -0
  72. package/dist/session-attendant-state.js.map +1 -1
  73. package/dist/session-attendant.d.ts +6 -0
  74. package/dist/session-attendant.js +12 -0
  75. package/dist/session-attendant.js.map +1 -1
  76. package/dist/session-labels.d.ts +2 -0
  77. package/dist/session-labels.js +5 -0
  78. package/dist/session-labels.js.map +1 -1
  79. package/dist/session-message-handoff.d.ts +3 -1
  80. package/dist/session-message-handoff.js +2 -1
  81. package/dist/session-message-handoff.js.map +1 -1
  82. package/dist/skill-integrity.d.ts +8 -3
  83. package/dist/skill-integrity.js +18 -8
  84. package/dist/skill-integrity.js.map +1 -1
  85. package/dist/skill-source/manifest.json +7 -7
  86. package/dist/skill-source/notifai/SKILL.md +66 -61
  87. package/dist/skill-source/notifai/references/diagnostics.md +5 -0
  88. package/dist/skill-source/notifai/references/harness-setup.md +24 -8
  89. package/dist/skill-source/notifai/references/notes-and-edits.md +6 -0
  90. package/dist/skill-source/notifai/references/updates.md +44 -10
  91. package/dist/update-handoff.js +1 -1
  92. package/dist/update-handoff.js.map +1 -1
  93. package/package.json +1 -1
@@ -27,7 +27,7 @@ export const OPENCLAW_PLUGIN_ID = 'notifai';
27
27
  export const OPENCLAW_PLUGIN_FILENAME = 'index.js';
28
28
  export const OPENCLAW_PLUGIN_MANIFEST = 'openclaw.plugin.json';
29
29
  export const OPENCLAW_PLUGIN_PACKAGE = 'package.json';
30
- const OPENCLAW_ADAPTER_VERSION = 4;
30
+ const OPENCLAW_ADAPTER_VERSION = 5;
31
31
  export function openclawStateDir(env = process.env, platform = process.platform) {
32
32
  const override = env['OPENCLAW_STATE_DIR'];
33
33
  if (override !== undefined && override !== '')
@@ -62,6 +62,10 @@ function openclawContinuationServiceSource() {
62
62
  return `
63
63
  let continuationService = null
64
64
  let JOURNAL_DIR = null
65
+ let MESSAGE_JOURNAL_DIR = null
66
+ let pendingMessageJournals = null
67
+ let awaitingMessageContexts = new Map()
68
+ const GATEWAY_BOOT_ID = randomUUID()
65
69
 
66
70
  function readinessPath() {
67
71
  return path.join(path.dirname(JOURNAL_DIR), "continuation-ready.json")
@@ -77,7 +81,7 @@ function writeReadiness(target) {
77
81
  const file = readinessPath()
78
82
  mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 })
79
83
  const temp = file + "." + randomUUID() + ".tmp"
80
- writeFileSync(temp, JSON.stringify({ pid: process.pid, start,
84
+ writeFileSync(temp, JSON.stringify({ pid: process.pid, start, boot_id: GATEWAY_BOOT_ID,
81
85
  script: target.script, script_mtime: statSync(target.script).mtimeMs }) + "\\n",
82
86
  { mode: 0o600, flag: "wx" })
83
87
  renameSync(temp, file)
@@ -124,6 +128,109 @@ function existingJournal(deliveryId) {
124
128
  } catch { return null }
125
129
  }
126
130
 
131
+ function messageJournalPath(deliveryId) {
132
+ return path.join(MESSAGE_JOURNAL_DIR, deliveryId + ".json")
133
+ }
134
+
135
+ function messageContextMarkerPath(deliveryId) {
136
+ return path.join(MESSAGE_JOURNAL_DIR, deliveryId + ".context-used")
137
+ }
138
+
139
+ function saveMessageJournal(record) {
140
+ mkdirSync(MESSAGE_JOURNAL_DIR, { recursive: true, mode: 0o700 })
141
+ const file = messageJournalPath(record.delivery_id)
142
+ const temp = file + "." + randomUUID() + ".tmp"
143
+ const { text: _text, ...withoutText } = record
144
+ const stored = existsSync(messageContextMarkerPath(record.delivery_id)) ? withoutText : record
145
+ writeFileSync(temp, JSON.stringify(stored) + "\\n", { mode: 0o600, flag: "wx" })
146
+ const fd = openSync(temp, "r")
147
+ try { fsyncSync(fd) } finally { closeSync(fd) }
148
+ renameSync(temp, file)
149
+ if (pendingMessageJournals !== null) {
150
+ if (stored.phase === "transcript" || stored.phase === "unconfirmed") pendingMessageJournals.delete(stored.delivery_id)
151
+ else pendingMessageJournals.set(stored.delivery_id, stored)
152
+ }
153
+ if (stored.phase === "transcript" && stored.text !== undefined) {
154
+ awaitingMessageContexts.set(stored.delivery_id, stored)
155
+ } else {
156
+ awaitingMessageContexts.delete(stored.delivery_id)
157
+ }
158
+ try {
159
+ const directory = openSync(MESSAGE_JOURNAL_DIR, "r")
160
+ try { fsyncSync(directory) } finally { closeSync(directory) }
161
+ } catch { /* Directory fsync is unavailable on some hosts. */ }
162
+ // The prompt hook runs in another plugin process. If it consumed the context
163
+ // during this synchronous save, its marker wins and text is redacted again.
164
+ if (stored.text !== undefined && existsSync(messageContextMarkerPath(record.delivery_id))) {
165
+ saveMessageJournal(withoutText)
166
+ }
167
+ }
168
+
169
+ function readMessageJournal(deliveryId) {
170
+ try {
171
+ const record = JSON.parse(readFileSync(messageJournalPath(deliveryId), "utf8"))
172
+ if (!record || record.delivery_id !== deliveryId) throw new Error("Invalid message journal")
173
+ return record
174
+ } catch (error) {
175
+ if (error?.code === "ENOENT") return null
176
+ throw error
177
+ }
178
+ }
179
+
180
+ function retryMessageJournals() {
181
+ if (pendingMessageJournals === null) {
182
+ let names
183
+ try { names = readdirSync(MESSAGE_JOURNAL_DIR) }
184
+ catch (error) { if (error?.code !== "ENOENT") throw error; names = [] }
185
+ const pending = new Map()
186
+ awaitingMessageContexts = new Map()
187
+ for (const name of names.filter((value) => value.endsWith(".json"))) {
188
+ const record = readMessageJournal(name.slice(0, -5))
189
+ if (record !== null && record.boot_id !== GATEWAY_BOOT_ID) {
190
+ if (record.text !== undefined) {
191
+ settleMessageJournal(record, record.phase === "transcript" ? "transcript" : "unconfirmed")
192
+ }
193
+ continue
194
+ }
195
+ if (record !== null && record.phase !== "transcript" && record.phase !== "unconfirmed") {
196
+ pending.set(record.delivery_id, record)
197
+ } else if (record !== null && record.phase === "transcript" &&
198
+ record.text !== undefined) {
199
+ awaitingMessageContexts.set(record.delivery_id, record)
200
+ }
201
+ }
202
+ pendingMessageJournals = pending
203
+ }
204
+ return [...pendingMessageJournals.values()]
205
+ }
206
+
207
+ function settleMessageJournal(record, phase) {
208
+ const { text: _text, ...rest } = record
209
+ // A committed pointer can begin its model turn after chat.history sees the
210
+ // user transcript. Keep context until that exact turn claims it once.
211
+ saveMessageJournal(phase === "transcript" && record.boot_id === GATEWAY_BOOT_ID &&
212
+ !existsSync(messageContextMarkerPath(record.delivery_id))
213
+ ? { ...record, phase } : { ...rest, phase })
214
+ }
215
+
216
+ function nativeSessionRevision(api, sessionKey, sessionId) {
217
+ if (typeof sessionId !== "string" || sessionId === "") return null
218
+ try {
219
+ const entry = api.runtime?.agent?.session?.getSessionEntry?.({
220
+ sessionKey, readConsistency: "latest",
221
+ })
222
+ return entry?.sessionId === sessionId &&
223
+ typeof entry.lifecycleRevision === "string" && entry.lifecycleRevision !== ""
224
+ ? entry.lifecycleRevision : null
225
+ } catch { return null }
226
+ }
227
+
228
+ function claimTimeAvailable(record) {
229
+ return typeof record.deadline_ns === "string" &&
230
+ record.deadline_ns.length <= 32 && /^[0-9]+$/.test(record.deadline_ns) &&
231
+ BigInt(record.deadline_ns) > process.hrtime.bigint()
232
+ }
233
+
127
234
  function openclawCliTarget(config) {
128
235
  if (process.env.OPENCLAW_SHELL === "exec") return null
129
236
  const gateway = config?.gateway ?? {}
@@ -261,11 +368,79 @@ function pointerMessage(record) {
261
368
  " with the concrete work you will do.").join(" ")
262
369
  }
263
370
 
371
+ function messagePointer(record) {
372
+ return "Notifai Session Message " + record.message_id +
373
+ " should appear in this turn's context. If its full context is absent, " +
374
+ "say that this Session Message is missing and do not acknowledge it. " +
375
+ "If present, read it and run notifai acknowledge " + record.message_id +
376
+ " with the concrete work you will do when text is required."
377
+ }
378
+
379
+ /** Attach private text only to the admitted pointer turn of its native generation. */
380
+ async function messageContextForPointer(api, event, ctx, sessionKey, nativeRevision) {
381
+ if (MESSAGE_JOURNAL_DIR === null || JOURNAL_DIR === null || nativeRevision === null) return null
382
+ const prompt = typeof event?.currentUserMessage === "string"
383
+ ? event.currentUserMessage : event?.prompt
384
+ if (typeof prompt !== "string" || !prompt.startsWith("Notifai Session Message ")) return null
385
+ const messageId = prompt.slice("Notifai Session Message ".length).split(" ", 1)[0]
386
+ if (!/^sm_[A-Za-z0-9_-]+$/.test(messageId)) return null
387
+ const envelope = { ...envelopeFor(sessionKey, event, ctx, "BeforePromptBuild"),
388
+ openclaw_lifecycle_revision: nativeRevision }
389
+ const generation = (await runHook("openclaw-generation", envelope))?.trim()
390
+ if (typeof generation !== "string" || !/^[0-9a-f-]{36}$/i.test(generation)) return null
391
+ const deliveryId = createHash("sha256").update(generation + "\\0" + messageId)
392
+ .digest("hex").slice(0, 32)
393
+ try {
394
+ const record = readMessageJournal(deliveryId)
395
+ const readiness = JSON.parse(readFileSync(readinessPath(), "utf8"))
396
+ if (record === null || record.message_id !== messageId ||
397
+ record.session_key !== sessionKey || record.generation !== generation ||
398
+ record.native_revision !== nativeRevision ||
399
+ record.openclaw_session_id !== sessionIdOf(event, ctx) ||
400
+ record.boot_id !== readiness?.boot_id ||
401
+ typeof record.text !== "string" ||
402
+ (record.phase !== "submitting" && record.phase !== "admitted" &&
403
+ record.phase !== "transcript") ||
404
+ prompt !== messagePointer(record) ||
405
+ existsSync(messageContextMarkerPath(deliveryId)) ||
406
+ nativeSessionRevision(api, sessionKey, sessionIdOf(event, ctx)) !== nativeRevision) return null
407
+ ctx?.hookInvocation?.assertActive?.()
408
+ writeFileSync(messageContextMarkerPath(deliveryId), "used\\n", { mode: 0o600, flag: "wx" })
409
+ saveMessageJournal(record)
410
+ return record.text
411
+ } catch { return null }
412
+ }
413
+
414
+ async function gatewaySessions(target) {
415
+ let offset = 0
416
+ const sessions = new Map()
417
+ for (let page = 0; page < 1000; page += 1) {
418
+ const result = await gatewayCall(target, "sessions.list", { limit: 200, offset })
419
+ if (!Array.isArray(result?.sessions) || typeof result?.hasMore !== "boolean") return null
420
+ for (const session of result.sessions) {
421
+ if (typeof session?.key === "string") sessions.set(session.key, session)
422
+ }
423
+ if (!result.hasMore) return sessions
424
+ if (!Number.isInteger(result.nextOffset) || result.nextOffset <= offset) return null
425
+ offset = result.nextOffset
426
+ }
427
+ return null
428
+ }
429
+
430
+ async function currentSession(target, record) {
431
+ const sessions = await gatewaySessions(target)
432
+ const session = sessions?.get(record.session_key)
433
+ return typeof record.openclaw_session_id === "string" &&
434
+ session?.sessionId === record.openclaw_session_id &&
435
+ session.archived !== true ? session : null
436
+ }
437
+
264
438
  function spawnOwnedHook(event, envelope, extraFds = false) {
265
439
  const child = spawn(HOOK_COMMAND, [...HOOK_PREFIX, "hook", event,
266
440
  "--owner", "notifai", "--harness", "openclaw"], {
267
441
  cwd: envelope.cwd,
268
- env: { ...process.env, NOTIFAI_HOOK_SOURCE_PID: String(process.pid) },
442
+ env: { ...process.env, NOTIFAI_HOOK_SOURCE_PID: String(process.pid),
443
+ ...(event === "attend" && extraFds ? { NOTIFAI_OPENCLAW_MESSAGE_BRIDGE: "1" } : {}) },
269
444
  shell: false, windowsHide: true,
270
445
  stdio: extraFds ? ["pipe", "ignore", "ignore", "pipe", "pipe"] : ["pipe", "ignore", "ignore"],
271
446
  })
@@ -273,14 +448,16 @@ function spawnOwnedHook(event, envelope, extraFds = false) {
273
448
  return child
274
449
  }
275
450
 
276
- function makeContinuationService(config, logger) {
451
+ function makeContinuationService(config, logger, api) {
277
452
  const active = new Map()
278
453
  const delivering = new Set()
279
454
  const reported = new Map()
455
+ const deliveringMessages = new Map()
280
456
  let stopped = false
281
457
  let timer = null
282
458
  let scanning = false
283
459
  let ready = false
460
+ let gatewayTarget = null
284
461
 
285
462
  function report(record, reason) {
286
463
  if (reported.get(record.delivery_id) === reason) return
@@ -335,6 +512,138 @@ function makeContinuationService(config, logger) {
335
512
  }
336
513
  }
337
514
 
515
+ async function deliverMessageOnce(record) {
516
+ try {
517
+ if (record.boot_id !== GATEWAY_BOOT_ID) {
518
+ settleMessageJournal(record, "unconfirmed")
519
+ return false
520
+ }
521
+ if (!claimTimeAvailable(record) && record.phase !== "admitted" &&
522
+ record.phase !== "transcript") {
523
+ settleMessageJournal(record, "unconfirmed")
524
+ return false
525
+ }
526
+ const envelope = { session_id: record.session_key, cwd: record.cwd,
527
+ openclaw_session_id: record.openclaw_session_id,
528
+ openclaw_lifecycle_revision: record.native_revision }
529
+ if (nativeSessionRevision(api, record.session_key, record.openclaw_session_id) !==
530
+ record.native_revision) {
531
+ settleMessageJournal(record, "unconfirmed")
532
+ return false
533
+ }
534
+ const generation = (await runHook("openclaw-generation", envelope))?.trim()
535
+ if (generation !== record.generation) {
536
+ settleMessageJournal(record, "unconfirmed")
537
+ return false
538
+ }
539
+ const attendance = (await runHook("openclaw-attendance-ready", envelope))?.trim()
540
+ if (attendance !== "ready") return false
541
+ const target = await verifiedGatewayTarget(config, logger)
542
+ if (target === null) return false
543
+ const session = await currentSession(target, record)
544
+ if (session === null) return false
545
+ const state = await inspectSubmission(target, record)
546
+ if (state === "transcript") {
547
+ settleMessageJournal(record, "transcript")
548
+ return true
549
+ }
550
+ if (state === "pending") return true
551
+ if (state !== "absent" || record.phase === "admitted" ||
552
+ record.phase === "submitting") {
553
+ settleMessageJournal(record, "unconfirmed")
554
+ return false
555
+ }
556
+ if (!claimTimeAvailable(record)) {
557
+ settleMessageJournal(record, "unconfirmed")
558
+ return false
559
+ }
560
+ if ((await runHook("openclaw-generation", envelope))?.trim() !== record.generation) {
561
+ settleMessageJournal(record, "unconfirmed")
562
+ return false
563
+ }
564
+ if (nativeSessionRevision(api, record.session_key, record.openclaw_session_id) !==
565
+ record.native_revision) {
566
+ settleMessageJournal(record, "unconfirmed")
567
+ return false
568
+ }
569
+ if (await currentSession(target, record) === null) return false
570
+ saveMessageJournal({ ...record, phase: "submitting" })
571
+ await gatewayCall(target, "chat.send", {
572
+ sessionKey: record.session_key, message: messagePointer(record),
573
+ queueMode: "followup",
574
+ idempotencyKey: submissionKey(record),
575
+ })
576
+ saveMessageJournal({ ...record, phase: "admitted" })
577
+ return true
578
+ } catch {
579
+ // An uncertain admission is reconciled by identity, never blindly replayed.
580
+ return false
581
+ } finally { /* The wrapper removes the in-flight entry. */ }
582
+ }
583
+
584
+ function deliverMessage(record) {
585
+ if (record.phase === "transcript" || record.phase === "unconfirmed") return Promise.resolve(false)
586
+ const existing = deliveringMessages.get(record.delivery_id)
587
+ if (existing) return existing
588
+ const run = deliverMessageOnce(record).finally(() => deliveringMessages.delete(record.delivery_id))
589
+ deliveringMessages.set(record.delivery_id, run)
590
+ return run
591
+ }
592
+
593
+ function startMessageBridge(session, child) {
594
+ let buffer = ""
595
+ let queue = Promise.resolve()
596
+ child.stdio[4].on("error", () => { /* A closed attendant cannot accept a result. */ })
597
+ child.stdio[3].setEncoding("utf8")
598
+ child.stdio[3].on("data", (chunk) => {
599
+ buffer += chunk
600
+ if (buffer.length > 100_000) { child.kill("SIGTERM"); return }
601
+ for (;;) {
602
+ const end = buffer.indexOf("\\n")
603
+ if (end < 0) break
604
+ const line = buffer.slice(0, end)
605
+ buffer = buffer.slice(end + 1)
606
+ let payload
607
+ try { payload = JSON.parse(line) } catch { continue }
608
+ if (payload?.type !== "message" ||
609
+ !/^sm_[A-Za-z0-9_-]+$/.test(payload.message_id) ||
610
+ payload.session_key !== session.session_key ||
611
+ payload.generation !== session.generation ||
612
+ typeof payload.text !== "string" || payload.text.length > 32768 ||
613
+ typeof payload.deadline_ns !== "string" ||
614
+ payload.deadline_ns.length > 32 ||
615
+ !/^[0-9]+$/.test(payload.deadline_ns)) continue
616
+ queue = queue.then(async () => {
617
+ const deliveryId = createHash("sha256")
618
+ .update(session.generation + "\\0" + payload.message_id)
619
+ .digest("hex").slice(0, 32)
620
+ const record = { delivery_id: deliveryId, message_id: payload.message_id,
621
+ session_key: session.session_key, cwd: session.cwd,
622
+ openclaw_session_id: session.session_id, generation: session.generation,
623
+ native_revision: nativeSessionRevision(api, session.session_key, session.session_id),
624
+ boot_id: GATEWAY_BOOT_ID, text: payload.text, deadline_ns: payload.deadline_ns,
625
+ attempt: 1, phase: "prepared" }
626
+ const existing = readMessageJournal(deliveryId)
627
+ const current = active.get(session.session_key)
628
+ let written = false
629
+ if (current?.attendant === child && record.native_revision !== null &&
630
+ (existing === null ||
631
+ (existing.message_id === record.message_id &&
632
+ existing.session_key === record.session_key &&
633
+ existing.generation === record.generation))) {
634
+ if (existing === null) saveMessageJournal(record)
635
+ written = await deliverMessage(existing ?? record)
636
+ }
637
+ child.stdio[4].write(JSON.stringify({ message_id: payload.message_id,
638
+ status: written ? "written" : "unconfirmed" }) + "\\n")
639
+ }).catch(() => {
640
+ child.stdio[4].write(JSON.stringify({ message_id: payload.message_id,
641
+ status: "unconfirmed" }) + "\\n")
642
+ })
643
+ }
644
+ })
645
+ }
646
+
338
647
  function startSettlement(session, entry) {
339
648
  const envelope = { session_id: session.session_key, cwd: session.cwd,
340
649
  openclaw_session_id: session.session_id, hook_event_name: "SessionStart" }
@@ -393,11 +702,19 @@ function makeContinuationService(config, logger) {
393
702
  const envelope = { session_id: session.session_key, cwd: session.cwd,
394
703
  openclaw_session_id: session.session_id, hook_event_name: "SessionStart" }
395
704
  const entry = { generation: session.generation,
396
- attendant: spawnOwnedHook("attend", envelope), child: null }
705
+ attendant: spawnOwnedHook("attend", envelope, true), child: null }
397
706
  active.set(session.session_key, entry)
707
+ startMessageBridge(session, entry.attendant)
398
708
  startSettlement(session, entry)
399
709
  }
400
710
 
711
+ function sendActivity(entry, session) {
712
+ if (entry.attendant.exitCode === null && entry.attendant.stdio[4].writable) {
713
+ entry.attendant.stdio[4].write(JSON.stringify({ type: "activity",
714
+ activity: session.hasActiveRun === true ? "working" : "idle" }) + "\\n")
715
+ }
716
+ }
717
+
401
718
  async function tick() {
402
719
  if (stopped || scanning) return
403
720
  scanning = true
@@ -405,26 +722,38 @@ function makeContinuationService(config, logger) {
405
722
  if (!ready) {
406
723
  const target = await verifiedGatewayTarget(config, logger)
407
724
  if (target === null || !writeReadiness(target)) return
725
+ gatewayTarget = target
408
726
  ready = true
409
727
  }
410
728
  const raw = await runHook("openclaw-list-pending", { cwd: process.cwd() })
411
- const pending = raw === null ? [] : JSON.parse(raw)
729
+ if (raw === null) return
730
+ const pending = JSON.parse(raw)
731
+ const sessions = await gatewaySessions(gatewayTarget)
732
+ if (sessions === null) return
733
+ const seen = new Set()
412
734
  if (Array.isArray(pending)) for (const session of pending) {
413
735
  if (typeof session?.session_key !== "string" ||
414
736
  typeof session?.cwd !== "string" ||
415
737
  typeof session?.generation !== "string") continue
738
+ const gatewaySession = sessions.get(session.session_key)
739
+ if (typeof session.session_id !== "string" ||
740
+ gatewaySession?.sessionId !== session.session_id ||
741
+ gatewaySession.archived === true) continue
742
+ seen.add(session.session_key)
416
743
  const current = active.get(session.session_key)
417
744
  if (current?.generation === session.generation) {
418
745
  if (current.attendant.exitCode !== null) {
419
746
  active.delete(session.session_key)
420
747
  if (current.child !== null) current.child.kill("SIGTERM")
421
748
  startSession(session)
749
+ sendActivity(active.get(session.session_key), gatewaySession)
422
750
  } else if (current.child === null) {
423
751
  const ready = await runHook("openclaw-attendance-ready", {
424
752
  session_id: session.session_key, cwd: session.cwd,
425
753
  openclaw_session_id: session.session_id })
426
754
  if (ready?.trim() === "ready") startSettlement(session, current)
427
755
  }
756
+ if (active.get(session.session_key) === current) sendActivity(current, gatewaySession)
428
757
  continue
429
758
  }
430
759
  if (current) {
@@ -432,14 +761,41 @@ function makeContinuationService(config, logger) {
432
761
  current.attendant.kill("SIGTERM")
433
762
  }
434
763
  startSession(session)
764
+ sendActivity(active.get(session.session_key), gatewaySession)
765
+ }
766
+ for (const [key, entry] of active) {
767
+ if (seen.has(key)) continue
768
+ if (entry.child !== null) entry.child.kill("SIGTERM")
769
+ entry.attendant.kill("SIGTERM")
770
+ active.delete(key)
435
771
  }
436
772
  for (const record of readJournals()) void deliver(record)
773
+ for (const [deliveryId] of awaitingMessageContexts) {
774
+ const record = readMessageJournal(deliveryId)
775
+ if (record === null || record.text === undefined) {
776
+ awaitingMessageContexts.delete(deliveryId)
777
+ } else if (record.boot_id !== GATEWAY_BOOT_ID ||
778
+ nativeSessionRevision(api, record.session_key, record.openclaw_session_id) !==
779
+ record.native_revision) {
780
+ const { text: _text, ...withoutText } = record
781
+ saveMessageJournal(withoutText)
782
+ }
783
+ }
784
+ for (const pending of retryMessageJournals()) {
785
+ const record = readMessageJournal(pending.delivery_id)
786
+ if (record === null) continue
787
+ if (record.phase === "transcript" || record.phase === "unconfirmed") {
788
+ pendingMessageJournals?.delete(record.delivery_id)
789
+ continue
790
+ }
791
+ void deliverMessage(record)
792
+ }
437
793
  } catch { /* The next Gateway tick retries discovery. */ }
438
794
  finally { scanning = false }
439
795
  }
440
796
 
441
797
  return {
442
- start() { timer = setInterval(() => { void tick() }, 2_000); void tick() },
798
+ start() { pendingMessageJournals = null; timer = setInterval(() => { void tick() }, 2_000); void tick() },
443
799
  stop() {
444
800
  stopped = true
445
801
  clearReadiness()
@@ -605,12 +961,20 @@ function onIfSupported(api, name, handler) {
605
961
  ${openclawContinuationServiceSource()}
606
962
 
607
963
  function register(api) {
964
+ try {
965
+ const stateDir = api.runtime?.state?.resolveStateDir?.()
966
+ if (typeof stateDir === "string" && path.isAbsolute(stateDir)) {
967
+ JOURNAL_DIR = path.join(stateDir, "notifai", "continuation-journal")
968
+ MESSAGE_JOURNAL_DIR = path.join(stateDir, "notifai", "message-journal")
969
+ }
970
+ } catch { /* No private journal is available in this plugin instance. */ }
608
971
  api.registerService?.({
609
972
  id: "notifai-continuation",
610
973
  start(ctx) {
611
974
  if (typeof ctx.stateDir !== "string" || !path.isAbsolute(ctx.stateDir)) return
612
975
  JOURNAL_DIR = path.join(ctx.stateDir, "notifai", "continuation-journal")
613
- continuationService = makeContinuationService(ctx.config, ctx.logger)
976
+ MESSAGE_JOURNAL_DIR = path.join(ctx.stateDir, "notifai", "message-journal")
977
+ continuationService = makeContinuationService(ctx.config, ctx.logger, api)
614
978
  continuationService.start()
615
979
  },
616
980
  stop() {
@@ -627,25 +991,32 @@ function register(api) {
627
991
  onIfSupported(api, "before_reset", async (event, ctx) => {
628
992
  const sessionKey = sessionKeyOf(event, ctx)
629
993
  if (sessionKey === "") return
630
- await runHook("openclaw-lifecycle", envelopeFor(sessionKey, event, ctx, "BeforeReset"))
994
+ const nativeRevision = nativeSessionRevision(api, sessionKey, sessionIdOf(event, ctx))
995
+ await runHook("openclaw-lifecycle", { ...envelopeFor(sessionKey, event, ctx, "BeforeReset"),
996
+ ...(nativeRevision === null ? {} : { openclaw_lifecycle_revision: nativeRevision }) })
631
997
  })
632
998
 
633
999
  api.on("before_prompt_build", async (event, ctx) => {
634
1000
  const sessionKey = sessionKeyOf(event, ctx)
635
1001
  if (sessionKey === "") return { prependContext: WORKER_ACTIVATION_CONTEXT }
636
1002
  const worker = isWorkerSession(sessionKey, ctx)
1003
+ const nativeRevision = nativeSessionRevision(api, sessionKey, sessionIdOf(event, ctx))
1004
+ const envelope = { ...envelopeFor(sessionKey, event, ctx, "BeforePromptBuild"),
1005
+ ...(nativeRevision === null ? {} : { openclaw_lifecycle_revision: nativeRevision }) }
637
1006
  const resolved = await runHook(worker ? "subagent-start" : "session-start",
638
- envelopeFor(sessionKey, event, ctx, worker ? "SubagentStart" : "SessionStart"))
1007
+ { ...envelope, hook_event_name: worker ? "SubagentStart" : "SessionStart" })
639
1008
  // chat.send does not emit message_received on this supported Gateway path.
640
1009
  // The prompt build is the exact session's authoritative turn-start seam.
641
- await runHook("openclaw-turn-start", envelopeFor(sessionKey, event, ctx, "BeforePromptBuild"))
1010
+ await runHook("openclaw-turn-start", envelope)
1011
+ const messageContext = worker ? null :
1012
+ await messageContextForPointer(api, event, ctx, sessionKey, nativeRevision)
642
1013
  // Successful empty output means this Project is disabled or this
643
1014
  // generation was already activated. A later prompt rechecks enablement.
644
- if (resolved !== null && resolved.trim().length === 0) return
1015
+ if (resolved !== null && resolved.trim().length === 0 && messageContext === null) return
645
1016
  const context = typeof resolved === "string" && resolved.trim().length > 0
646
1017
  ? resolved.trim()
647
- : worker ? WORKER_ACTIVATION_CONTEXT : MISSING_LIFECYCLE_GUIDANCE_CONTEXT
648
- return { prependContext: context }
1018
+ : resolved === null ? worker ? WORKER_ACTIVATION_CONTEXT : MISSING_LIFECYCLE_GUIDANCE_CONTEXT : ""
1019
+ return { prependContext: [context, messageContext].filter(Boolean).join("\\n\\n") }
649
1020
  })
650
1021
 
651
1022
  api.on("message_received", async (event, ctx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-plugin.js","sourceRoot":"","sources":["../src/openclaw-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openclaw-plugin.js","sourceRoot":"","sources":["../src/openclaw-plugin.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,7 @@
6
6
  export declare function activeOpenclawGeneration(sessionKey: string, env: NodeJS.ProcessEnv, cwd?: string): string | null;
7
7
  /** A pointer may reveal User text only to the active generation that owns it. */
8
8
  export declare function openclawOwnsReply(sessionKey: string, requestId: string, env: NodeJS.ProcessEnv, cwd?: string): boolean;
9
+ /** A Session Message belongs to the generation that accepted its acknowledgement debt. */
10
+ export declare function openclawOwnsMessage(sessionKey: string, messageId: string, env: NodeJS.ProcessEnv, cwd?: string): boolean;
9
11
  /** Record ownership as soon as a foreground submission returns its request ID. */
10
12
  export declare function recordOpenclawForegroundReply(sessionKey: string, requestId: string, generation: string, env: NodeJS.ProcessEnv, cwd: string): boolean;
@@ -48,6 +48,16 @@ export function openclawOwnsReply(sessionKey, requestId, env, cwd) {
48
48
  (state.openclaw_foreground_replies ?? []).some((entry) => entry.request_id === requestId && entry.generation === generation);
49
49
  });
50
50
  }
51
+ /** A Session Message belongs to the generation that accepted its acknowledgement debt. */
52
+ export function openclawOwnsMessage(sessionKey, messageId, env, cwd) {
53
+ return withFileLock(openclawGenerationLockPath(sessionKey, env), () => {
54
+ const generation = activeOpenclawGeneration(sessionKey, env, cwd);
55
+ if (generation === null)
56
+ return false;
57
+ return (readSessionState(sessionKey, env).message_acknowledgement_due ?? [])
58
+ .some((entry) => entry.message_id === messageId && entry.openclaw_generation === generation);
59
+ });
60
+ }
51
61
  /** Record ownership as soon as a foreground submission returns its request ID. */
52
62
  export function recordOpenclawForegroundReply(sessionKey, requestId, generation, env, cwd) {
53
63
  return withFileLock(openclawGenerationLockPath(sessionKey, env), () => {