@raidiant/notifai 10.1.7 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +23 -13
  3. package/dist/claude-wake.d.ts +1 -2
  4. package/dist/claude-wake.js +15 -61
  5. package/dist/claude-wake.js.map +1 -1
  6. package/dist/cli-bin.js +3 -14
  7. package/dist/cli-bin.js.map +1 -1
  8. package/dist/cli-contract.d.ts +12 -0
  9. package/dist/cli-contract.js +19 -0
  10. package/dist/cli-contract.js.map +1 -0
  11. package/dist/cli-release.d.ts +0 -1
  12. package/dist/cli-release.js +5 -21
  13. package/dist/cli-release.js.map +1 -1
  14. package/dist/client.d.ts +2 -2
  15. package/dist/codex-wake.d.ts +1 -1
  16. package/dist/codex-wake.js +8 -36
  17. package/dist/codex-wake.js.map +1 -1
  18. package/dist/command-session.js +2 -1
  19. package/dist/command-session.js.map +1 -1
  20. package/dist/commands-acknowledge.d.ts +13 -0
  21. package/dist/commands-acknowledge.js +67 -0
  22. package/dist/commands-acknowledge.js.map +1 -0
  23. package/dist/commands-ask.d.ts +63 -0
  24. package/dist/commands-ask.js +407 -0
  25. package/dist/commands-ask.js.map +1 -0
  26. package/dist/commands-close.d.ts +6 -0
  27. package/dist/commands-close.js +197 -0
  28. package/dist/commands-close.js.map +1 -0
  29. package/dist/commands-config.js +2 -2
  30. package/dist/commands-config.js.map +1 -1
  31. package/dist/commands-core.js +2 -2
  32. package/dist/commands-core.js.map +1 -1
  33. package/dist/commands-doctor.js +61 -120
  34. package/dist/commands-doctor.js.map +1 -1
  35. package/dist/commands-harness-context.d.ts +0 -1
  36. package/dist/commands-harness-context.js +2 -4
  37. package/dist/commands-harness-context.js.map +1 -1
  38. package/dist/commands-hook-diagnostics.d.ts +27 -0
  39. package/dist/commands-hook-diagnostics.js +97 -0
  40. package/dist/commands-hook-diagnostics.js.map +1 -0
  41. package/dist/commands-hook-install.d.ts +26 -0
  42. package/dist/commands-hook-install.js +549 -0
  43. package/dist/commands-hook-install.js.map +1 -0
  44. package/dist/commands-hook-run.d.ts +29 -0
  45. package/dist/commands-hook-run.js +517 -0
  46. package/dist/commands-hook-run.js.map +1 -0
  47. package/dist/commands-init.d.ts +2 -7
  48. package/dist/commands-init.js +59 -92
  49. package/dist/commands-init.js.map +1 -1
  50. package/dist/commands-send.js +35 -3
  51. package/dist/commands-send.js.map +1 -1
  52. package/dist/commands-skill.js +5 -5
  53. package/dist/commands-skill.js.map +1 -1
  54. package/dist/commands-update.js +17 -31
  55. package/dist/commands-update.js.map +1 -1
  56. package/dist/commands.d.ts +11 -6
  57. package/dist/commands.js +9 -4
  58. package/dist/commands.js.map +1 -1
  59. package/dist/config.d.ts +14 -4
  60. package/dist/config.js +35 -9
  61. package/dist/config.js.map +1 -1
  62. package/dist/file-lock.d.ts +3 -0
  63. package/dist/file-lock.js +33 -17
  64. package/dist/file-lock.js.map +1 -1
  65. package/dist/guidance-content.js +30 -15
  66. package/dist/guidance-content.js.map +1 -1
  67. package/dist/hook-acknowledgements.d.ts +42 -0
  68. package/dist/hook-acknowledgements.js +316 -0
  69. package/dist/hook-acknowledgements.js.map +1 -0
  70. package/dist/hook-events.d.ts +6 -0
  71. package/dist/hook-events.js +22 -0
  72. package/dist/hook-events.js.map +1 -0
  73. package/dist/hook-gates.d.ts +7 -0
  74. package/dist/hook-gates.js +21 -0
  75. package/dist/hook-gates.js.map +1 -0
  76. package/dist/hook-lifecycle.d.ts +93 -0
  77. package/dist/{hooks.js → hook-lifecycle.js} +61 -1359
  78. package/dist/hook-lifecycle.js.map +1 -0
  79. package/dist/hook-project-sessions.d.ts +28 -0
  80. package/dist/hook-project-sessions.js +141 -0
  81. package/dist/hook-project-sessions.js.map +1 -0
  82. package/dist/hook-question-lock.d.ts +7 -0
  83. package/dist/hook-question-lock.js +173 -0
  84. package/dist/hook-question-lock.js.map +1 -0
  85. package/dist/hook-question-retirement.d.ts +57 -0
  86. package/dist/hook-question-retirement.js +261 -0
  87. package/dist/hook-question-retirement.js.map +1 -0
  88. package/dist/hook-question-state.d.ts +45 -0
  89. package/dist/hook-question-state.js +196 -0
  90. package/dist/hook-question-state.js.map +1 -0
  91. package/dist/hook-session-state.d.ts +31 -0
  92. package/dist/hook-session-state.js +249 -0
  93. package/dist/hook-session-state.js.map +1 -0
  94. package/dist/{hooks.d.ts → hook-types.d.ts} +17 -236
  95. package/dist/hook-types.js +4 -0
  96. package/dist/hook-types.js.map +1 -0
  97. package/dist/install-hooks.d.ts +72 -60
  98. package/dist/install-hooks.js +292 -211
  99. package/dist/install-hooks.js.map +1 -1
  100. package/dist/interactive.d.ts +3 -16
  101. package/dist/interactive.js +19 -95
  102. package/dist/interactive.js.map +1 -1
  103. package/dist/local-path.d.ts +7 -0
  104. package/dist/local-path.js +27 -0
  105. package/dist/local-path.js.map +1 -0
  106. package/dist/node-floor.js +3 -10
  107. package/dist/node-floor.js.map +1 -1
  108. package/dist/npm-invocation.d.ts +34 -0
  109. package/dist/npm-invocation.js +53 -0
  110. package/dist/npm-invocation.js.map +1 -0
  111. package/dist/openclaw-plugin.d.ts +12 -3
  112. package/dist/openclaw-plugin.js +42 -16
  113. package/dist/openclaw-plugin.js.map +1 -1
  114. package/dist/opencode-plugin.d.ts +2 -2
  115. package/dist/opencode-plugin.js +4 -6
  116. package/dist/opencode-plugin.js.map +1 -1
  117. package/dist/program.js +11 -13
  118. package/dist/program.js.map +1 -1
  119. package/dist/project-enablement.d.ts +6 -0
  120. package/dist/project-enablement.js +11 -27
  121. package/dist/project-enablement.js.map +1 -1
  122. package/dist/question-settlement-process.d.ts +1 -1
  123. package/dist/readiness.d.ts +0 -2
  124. package/dist/readiness.js +0 -4
  125. package/dist/readiness.js.map +1 -1
  126. package/dist/send.d.ts +8 -4
  127. package/dist/send.js +145 -26
  128. package/dist/send.js.map +1 -1
  129. package/dist/session-activation.d.ts +3 -1
  130. package/dist/session-activation.js +16 -0
  131. package/dist/session-activation.js.map +1 -1
  132. package/dist/skill-source/manifest.json +4 -4
  133. package/dist/skill-source/notifai/SKILL.md +60 -60
  134. package/dist/skill-source/notifai/references/harness-setup.md +41 -16
  135. package/dist/ui/config-view.d.ts +0 -2
  136. package/dist/ui/config-view.js +1 -5
  137. package/dist/ui/config-view.js.map +1 -1
  138. package/dist/ui/theme.d.ts +0 -3
  139. package/dist/ui/theme.js +0 -1
  140. package/dist/ui/theme.js.map +1 -1
  141. package/dist/version.d.ts +22 -0
  142. package/dist/version.js +51 -0
  143. package/dist/version.js.map +1 -0
  144. package/dist/wake-support.d.ts +8 -0
  145. package/dist/wake-support.js +38 -0
  146. package/dist/wake-support.js.map +1 -0
  147. package/package.json +2 -2
  148. package/dist/cli-update-contract.d.ts +0 -7
  149. package/dist/cli-update-contract.js +0 -10
  150. package/dist/cli-update-contract.js.map +0 -1
  151. package/dist/commands-hooks.d.ts +0 -160
  152. package/dist/commands-hooks.js +0 -1800
  153. package/dist/commands-hooks.js.map +0 -1
  154. package/dist/hooks.js.map +0 -1
package/dist/file-lock.js CHANGED
@@ -115,23 +115,39 @@ function sameEntryIdentity(file, expected) {
115
115
  }
116
116
  }
117
117
  /** Live protocol entries, pruning only unique paths whose process is gone. */
118
- function liveEntries(directory, directoryIdentity, observe) {
118
+ function liveEntryStat(entryPath, lstatEntry, deadline) {
119
+ for (;;) {
120
+ try {
121
+ return lstatEntry(entryPath);
122
+ }
123
+ catch (err) {
124
+ const code = err.code;
125
+ if (code === 'ENOENT')
126
+ return null;
127
+ if (code !== 'EPERM')
128
+ throw err;
129
+ // Windows can report EPERM while another contender's just-renamed or
130
+ // just-unlinked entry is still leaving the directory. Retry only within
131
+ // the lock's existing acquisition budget; a persistently inaccessible
132
+ // entry remains a hard failure rather than disappearing from ordering.
133
+ if (Date.now() >= deadline)
134
+ throw err;
135
+ Atomics.wait(lockSleep, 0, 0, Math.min(FILE_LOCK_POLL_MS, Math.max(1, deadline - Date.now())));
136
+ }
137
+ }
138
+ }
139
+ function liveEntries(directory, directoryIdentity, options, deadline) {
119
140
  assertSameDirectory(directory, directoryIdentity);
120
141
  const live = [];
142
+ const lstatEntry = options.lstatEntry ?? ((file) => lstatSync(file));
121
143
  for (const name of readdirSync(directory)) {
122
144
  const entry = parseEntry(name);
123
145
  if (entry === null)
124
146
  continue;
125
147
  const entryPath = path.join(directory, name);
126
- let stat;
127
- try {
128
- stat = lstatSync(entryPath);
129
- }
130
- catch (err) {
131
- if (err.code === 'ENOENT')
132
- continue;
133
- throw err;
134
- }
148
+ const stat = liveEntryStat(entryPath, lstatEntry, deadline);
149
+ if (stat === null)
150
+ continue;
135
151
  const uid = currentUid();
136
152
  if (stat.isSymbolicLink() || !stat.isFile() || (uid !== undefined && stat.uid !== uid)) {
137
153
  throw new Error(`${entryPath} is not a current-user-owned regular file-lock entry.`);
@@ -140,7 +156,7 @@ function liveEntries(directory, directoryIdentity, observe) {
140
156
  live.push(entry);
141
157
  continue;
142
158
  }
143
- observe?.({ phase: 'stale-entry', entry: name });
159
+ options.observe?.({ phase: 'stale-entry', entry: name });
144
160
  try {
145
161
  // Recheck the unique dead owner's inode so delayed recovery cannot reap
146
162
  // a replacement published at the same path by external interference.
@@ -181,7 +197,7 @@ function lostTheRendezvous(err) {
181
197
  const code = err.code;
182
198
  return code === 'ENOENT' || code === 'EINVAL';
183
199
  }
184
- function publishChoosing(directory, name, deadline, observe) {
200
+ function publishChoosing(directory, name, deadline, options) {
185
201
  const file = path.join(directory, name);
186
202
  for (;;) {
187
203
  try {
@@ -190,8 +206,8 @@ function publishChoosing(directory, name, deadline, observe) {
190
206
  chmodSync(directory, 0o700);
191
207
  // Recover before registration so a delayed stale cleanup can only name an
192
208
  // old owner's unique path, never this contender's future one.
193
- liveEntries(directory, registrar, observe);
194
- observe?.({ phase: 'registering', entry: name });
209
+ liveEntries(directory, registrar, options, deadline);
210
+ options.observe?.({ phase: 'registering', entry: name });
195
211
  const fileIdentity = publishEmpty(file);
196
212
  // Pin the rendezvous that holds the entry, not the one scanned before it
197
213
  // existed. `open` resolves the path atomically, so the entry lands in
@@ -236,13 +252,13 @@ export function withFileLock(file, action, options = {}) {
236
252
  let directoryIdentity = null;
237
253
  let operationFailed = false;
238
254
  try {
239
- const published = publishChoosing(file, choosingName, deadline, options.observe);
255
+ const published = publishChoosing(file, choosingName, deadline, options);
240
256
  ownedPath = published.file;
241
257
  ownedIdentity = published.fileIdentity;
242
258
  directoryIdentity = published.directoryIdentity;
243
259
  options.observe?.({ phase: 'choosing-published', entry: choosingName });
244
260
  let highest = 0n;
245
- for (const entry of liveEntries(file, directoryIdentity, options.observe)) {
261
+ for (const entry of liveEntries(file, directoryIdentity, options, deadline)) {
246
262
  if (entry.kind === 'ticket' && entry.ticket > highest)
247
263
  highest = entry.ticket;
248
264
  }
@@ -256,7 +272,7 @@ export function withFileLock(file, action, options = {}) {
256
272
  ownedIdentity = entryIdentity(lstatSync(ticketPath, { bigint: true }));
257
273
  for (;;) {
258
274
  const blockers = [];
259
- for (const entry of liveEntries(file, directoryIdentity, options.observe)) {
275
+ for (const entry of liveEntries(file, directoryIdentity, options, deadline)) {
260
276
  if (entry.pid === pid && entry.token === token)
261
277
  continue;
262
278
  if (entry.kind === 'choosing' || comesBefore(entry, ticket, pid, token)) {
@@ -1 +1 @@
1
- {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
@@ -85,12 +85,31 @@ Bad:
85
85
  kind restated
86
86
  - \`Exit code 1\` — mechanics, not meaning
87
87
  `;
88
- const BODIES = `# Bodies
88
+ const CONTENT = `# Content
89
89
 
90
- The first sentence is what the lock screen shows — make it say what this means
91
- for the user. The rest is what changes for them and what is needed from them,
92
- never how many tests ran, how long a step took, or which internal stage
93
- produced it. Keep wording channel-neutral: no device names, no gestures.
90
+ Every Notification Request has two distinct content roles:
91
+
92
+ - **Summary** is required one-line plain text for native banners and notification
93
+ lists. Write it specifically for that constrained surface: short, high-level,
94
+ immediately understandable, and useful without Markdown. It has a hard limit
95
+ of 240 Unicode characters; aim for one short sentence rather than filling it.
96
+ - **Body** is optional standalone Markdown for focused detail. Use it when the
97
+ User needs more than the Summary. It must communicate everything the Summary
98
+ communicates, information-wise, then add the useful detail. It need not repeat
99
+ the Summary literally.
100
+
101
+ The focused view shows the Body when one exists, otherwise the Summary. It never
102
+ shows both together, so do not write a Body that depends on the Summary sitting
103
+ above it. Never put partial Markdown in Summary.
104
+
105
+ Use Markdown proportionately to make a Body easy to scan: paragraphs for simple
106
+ prose; headings, lists, links, tables, code, and media references when those
107
+ structures genuinely clarify the content. All attached media may be referenced
108
+ from the Body. Summary contains no media markup.
109
+
110
+ Keep both fields about what changes for the User and what is needed from them,
111
+ never how many tests ran, how long a step took, or which internal stage produced
112
+ it. Keep wording channel-neutral: no device names, no gestures.
94
113
 
95
114
  Work finished:
96
115
 
@@ -114,15 +133,10 @@ Blocked:
114
133
  >
115
134
  > There is nothing for you to answer; I will confirm when it is live.
116
135
 
117
- Bad bodies: a build report (\`42/42 green, coverage 87%, rebased onto main\`)
136
+ Bad content: a build report (\`42/42 green, coverage 87%, rebased onto main\`)
118
137
  where the news is "users can now create accounts"; the journey ("first I
119
138
  tried…") instead of the result; a log with the conclusion at the bottom; "see
120
139
  terminal for details".
121
-
122
- Add a summary line only when the body is long enough that its first line is
123
- not a fair summary of what is inside: one short line answering what the title
124
- raises, such as \`Rolled back cleanly; production is untouched\` over a long
125
- failure report.
126
140
  `;
127
141
  const QUESTIONS = `# Questions
128
142
 
@@ -132,7 +146,8 @@ reply would resume. If the User must act and then tell you it is ready, that
132
146
  readiness is an answer — ask for it.
133
147
 
134
148
  A question is answerable from the notification alone, in the user's terms, not
135
- the machinery's. One askable sentence; reasoning and stakes follow as context.
149
+ the machinery's. Its one askable sentence is the Summary. Put reasoning and
150
+ stakes in an optional standalone Markdown Body when they are needed.
136
151
  Offer closed choices whose wording carries its own consequence.
137
152
 
138
153
  Good:
@@ -188,9 +203,9 @@ export const SHIPPED_GUIDANCE = [
188
203
  content: TITLES,
189
204
  },
190
205
  {
191
- name: 'bodies',
192
- summary: 'What a body and its summary line carry, with examples',
193
- content: BODIES,
206
+ name: 'content',
207
+ summary: 'How the required Summary and optional Markdown Body differ',
208
+ content: CONTENT,
194
209
  },
195
210
  {
196
211
  name: 'questions',
@@ -1 +1 @@
1
- {"version":3,"file":"guidance-content.js","sourceRoot":"","sources":["../src/guidance-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;4DAawB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;gEAI4B,CAAA;AAEhE,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBtB,CAAA;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,CAAA;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCd,CAAA;AAED,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BjB,CAAA;AAED,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;CAiBxB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,cAAc;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,uDAAuD;QAChE,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,2CAA2C;QACpD,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,gBAAgB;KAC1B;CACF,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA+BJ,CAAA"}
1
+ {"version":3,"file":"guidance-content.js","sourceRoot":"","sources":["../src/guidance-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;4DAawB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;gEAI4B,CAAA;AAEhE,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBtB,CAAA;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,CAAA;AAED,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDf,CAAA;AAED,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BjB,CAAA;AAED,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;CAiBxB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,cAAc;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,4DAA4D;QACrE,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,2CAA2C;QACpD,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,gBAAgB;KAC1B;CACF,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA+BJ,CAAA"}
@@ -0,0 +1,42 @@
1
+ import type { AcceptedAnswerDelivery, AcknowledgementDue, AnsweredPending, HookContext, HookOutcome } from './hook-types.js';
2
+ export declare function answersContext(answered: AnsweredPending[], remaining: number): string;
3
+ export declare function stopAnswerOutput(context: string): string;
4
+ /**
5
+ * Close, truthfully retire, and forget every answered pending question in one
6
+ * state write, without dropping any other retirement debt or any question
7
+ * still waiting. Stop answers also open one bounded continuation generation;
8
+ * UserPromptSubmit answers ride the user's new turn.
9
+ */
10
+ export declare function stageAcceptedAnswers(ctx: HookContext, sessionId: string, answered: AnsweredPending[], remaining: number): AcceptedAnswerDelivery;
11
+ /** Amend the live accepted record in place, without resurrecting a settled one. */
12
+ export declare function amendAcceptedAnswers(ctx: HookContext, sessionId: string, amend: (accepted: AcceptedAnswerDelivery) => AcceptedAnswerDelivery): void;
13
+ /**
14
+ * Finish a route write that linearized before SessionEnd.
15
+ *
16
+ * Ordinary state writers stop at the ended marker. This one narrow completion
17
+ * is allowed through because the journal's own `delivery_committed_at` proves
18
+ * the irreversible write won the ordering first; without the matching finish,
19
+ * a later SessionStart would replay a write that already reached the harness.
20
+ */
21
+ export declare function finishCommittedDelivery(ctx: HookContext, sessionId: string, accepted: AcceptedAnswerDelivery, deliveredRoute: string): void;
22
+ export declare function clearAcknowledgementObligation(sessionId: string, env: NodeJS.ProcessEnv, requestId: string): boolean;
23
+ export declare function acknowledgementBlockContext(due: readonly AcknowledgementDue[]): string;
24
+ /**
25
+ * Hold the turn for an outstanding acknowledgement, or give up and let it
26
+ * through once holding has stopped being worth its cost.
27
+ *
28
+ * Returns the outcome that blocks the turn, or `null` to carry on.
29
+ */
30
+ export declare function holdForAcknowledgement(ctx: HookContext, sessionId: string, due: readonly AcknowledgementDue[], notes: string[]): HookOutcome | null;
31
+ /** A turn that was not held resets the streak; only consecutive holds count. */
32
+ export declare function resetAcknowledgementBlocks(sessionId: string, env: NodeJS.ProcessEnv): void;
33
+ export declare function reconcileAcknowledgementObligations(ctx: HookContext, sessionId: string, due: readonly AcknowledgementDue[]): Promise<AcknowledgementDue[]>;
34
+ /**
35
+ * Retire the answered questions and close the journal.
36
+ *
37
+ * Called once an answer's delivery is acknowledged — by the route's own write,
38
+ * or by the successor Stop of a blocking continuation. The continuation counter
39
+ * grows with each settled generation, so the cap that bounds chained
40
+ * answer-to-question loops is a real count rather than a constant 1.
41
+ */
42
+ export declare function settleAcceptedAnswers(ctx: HookContext, sessionId: string, accepted: AcceptedAnswerDelivery, cwd?: string): void;
@@ -0,0 +1,316 @@
1
+ /** Accepted-answer delivery and required Agent Acknowledgement obligations. */
2
+ import { withFileLock } from './file-lock.js';
3
+ import { gate } from './hook-gates.js';
4
+ import { retiringQuestion } from './hook-question-retirement.js';
5
+ import { isSamePending, pendingHasChoices, rememberQuestionState } from './hook-question-state.js';
6
+ import { pendingList, readSessionState, sessionStatePath, updateSessionState, writeSessionStateUnlocked, } from './hook-session-state.js';
7
+ /**
8
+ * The answer as the agent should read it. For a question with choices the
9
+ * latest reply IS the answer — an earlier conflicting one was corrected by
10
+ * it. Free-text answers can arrive in parts, and every part reaches the
11
+ * agent in the order it was written, so it can tell expansion from
12
+ * correction itself.
13
+ *
14
+ * The continuation repeats only identity the agent actually registered and
15
+ * the answer the server accepted. It never invents trust, urgency, permission,
16
+ * or approval claims for the transport to assert.
17
+ */
18
+ function answerContext(answered) {
19
+ const { pending, replies } = answered;
20
+ const latest = replies.at(-1);
21
+ if (latest === undefined)
22
+ return 'Notifai — no answer was recorded.';
23
+ const answeredQuestionIds = [...new Set(latest.answers.map((answer) => answer.question_id))];
24
+ const identity = answeredQuestionIds.length === 0
25
+ ? ''
26
+ : `question_id${answeredQuestionIds.length === 1 ? '' : 's'} ${answeredQuestionIds.join(', ')}, `;
27
+ const question = `question ${JSON.stringify(pending.question)}`;
28
+ if (replies.length === 1 || pendingHasChoices(pending)) {
29
+ return `Notifai — ${identity}${question}; the user answered ${JSON.stringify(latest.text)}.`;
30
+ }
31
+ const parts = replies.map((reply) => JSON.stringify(reply.text)).join(', then ');
32
+ return (`Notifai — ${identity}${question}; the user answered in ${replies.length} parts, ` +
33
+ `in the order written: ${parts}. Later parts extend or correct earlier ones.`);
34
+ }
35
+ /**
36
+ * Every answer that has arrived, as one message. Several registered questions
37
+ * may resolve in one hook pass; the agent reads them together, each answer
38
+ * tied to the question that asked it, with a truthful note about anything
39
+ * still waiting.
40
+ */
41
+ function acknowledgementCommand(requestId, textRequired = true) {
42
+ return textRequired
43
+ ? `notifai acknowledge ${requestId} --text <text>`
44
+ : `notifai acknowledge ${requestId}`;
45
+ }
46
+ /**
47
+ * The acknowledgement is owed either way; only its text is conditional. So the
48
+ * instruction never says "you may skip this" — it says what to run.
49
+ */
50
+ function acknowledgementDemand(textRequired) {
51
+ return textRequired
52
+ ? ' with non-empty text saying what concrete work you will do because of the reply; a bare acknowledgement is insufficient'
53
+ : ' exactly as shown; this account turned acknowledgement text off, so the receipt carries no words';
54
+ }
55
+ function acknowledgementContext(answered) {
56
+ const due = answered.filter((entry) => entry.agent_acknowledgement_required === true && entry.pending.request_id !== undefined);
57
+ if (due.length === 0) {
58
+ return ' Agent Acknowledgement is not required for the answered request(s).';
59
+ }
60
+ if (due.length === 1) {
61
+ const entry = due[0];
62
+ const requestId = entry.pending.request_id;
63
+ const textRequired = entry.agent_acknowledgement_text_required !== false;
64
+ return (` Agent Acknowledgement is required for request ${requestId}. Immediately, before doing the resumed work or ending this turn, run ` +
65
+ `\`${acknowledgementCommand(requestId, textRequired)}\`${acknowledgementDemand(textRequired)}.`);
66
+ }
67
+ const anyTextRequired = due.some((entry) => entry.agent_acknowledgement_text_required !== false);
68
+ const commands = due
69
+ .map((entry) => {
70
+ const requestId = entry.pending.request_id;
71
+ return `- ${requestId}: \`${acknowledgementCommand(requestId, entry.agent_acknowledgement_text_required !== false)}\``;
72
+ })
73
+ .join('\n');
74
+ return (` Agent Acknowledgement is required for ${due.length} requests. Immediately, before doing the resumed work or ending this turn, run every command below${acknowledgementDemand(anyTextRequired)}:\n` +
75
+ commands);
76
+ }
77
+ export function answersContext(answered, remaining) {
78
+ const tail = remaining > 0
79
+ ? ` (${remaining} more registered question${remaining === 1 ? ' is' : 's are'} still waiting for an answer.)`
80
+ : '';
81
+ const guidance = acknowledgementContext(answered);
82
+ if (answered.length === 1) {
83
+ return answerContext(answered[0]) + tail + guidance;
84
+ }
85
+ const lines = answered.map(({ pending, replies }) => {
86
+ const latest = replies.at(-1);
87
+ const answer = replies.length === 1 || pendingHasChoices(pending)
88
+ ? JSON.stringify(latest.text)
89
+ : `${replies.map((reply) => JSON.stringify(reply.text)).join(', then ')} (parts in the order written; later parts extend or correct earlier ones)`;
90
+ const ids = [...new Set(latest.answers.map((entry) => entry.question_id))];
91
+ const identity = ids.length === 0 ? '' : `question_id${ids.length === 1 ? '' : 's'} ${ids.join(', ')}: `;
92
+ return `- ${identity}${JSON.stringify(pending.question)} → ${answer}`;
93
+ });
94
+ return `Notifai — the user answered ${answered.length} questions:\n${lines.join('\n')}${tail}${guidance}`;
95
+ }
96
+ export function stopAnswerOutput(context) {
97
+ return JSON.stringify({
98
+ decision: 'block',
99
+ reason: context,
100
+ });
101
+ }
102
+ /**
103
+ * Close, truthfully retire, and forget every answered pending question in one
104
+ * state write, without dropping any other retirement debt or any question
105
+ * still waiting. Stop answers also open one bounded continuation generation;
106
+ * UserPromptSubmit answers ride the user's new turn.
107
+ */
108
+ export function stageAcceptedAnswers(ctx, sessionId, answered, remaining) {
109
+ const accepted = {
110
+ answers: answered,
111
+ remaining,
112
+ recorded_at: ctx.now(),
113
+ };
114
+ updateSessionState(sessionId, ctx.env, (current) => {
115
+ const pendingRemaining = pendingList(current).filter((entry) => !answered.some(({ pending }) => isSamePending(entry, pending)));
116
+ const acknowledgementDue = [...(current.acknowledgement_due ?? [])];
117
+ for (const answer of answered) {
118
+ const requestId = answer.pending.request_id;
119
+ if (answer.agent_acknowledgement_required === true &&
120
+ requestId !== undefined &&
121
+ !acknowledgementDue.some((entry) => entry.request_id === requestId)) {
122
+ acknowledgementDue.push({
123
+ request_id: requestId,
124
+ recorded_at: accepted.recorded_at,
125
+ text_required: answer.agent_acknowledgement_text_required !== false,
126
+ });
127
+ }
128
+ }
129
+ const next = {
130
+ ...current,
131
+ accepted,
132
+ };
133
+ if (pendingRemaining.length > 0)
134
+ next.pending = pendingRemaining;
135
+ else
136
+ delete next.pending;
137
+ if (acknowledgementDue.length > 0)
138
+ next.acknowledgement_due = acknowledgementDue;
139
+ else
140
+ delete next.acknowledgement_due;
141
+ return answered.reduce((remembered, answer) => rememberQuestionState(remembered, answer.pending, 'answered'), next);
142
+ });
143
+ return accepted;
144
+ }
145
+ /** Amend the live accepted record in place, without resurrecting a settled one. */
146
+ export function amendAcceptedAnswers(ctx, sessionId, amend) {
147
+ updateSessionState(sessionId, ctx.env, (current) => current.accepted === undefined ? current : { ...current, accepted: amend(current.accepted) });
148
+ }
149
+ /**
150
+ * Finish a route write that linearized before SessionEnd.
151
+ *
152
+ * Ordinary state writers stop at the ended marker. This one narrow completion
153
+ * is allowed through because the journal's own `delivery_committed_at` proves
154
+ * the irreversible write won the ordering first; without the matching finish,
155
+ * a later SessionStart would replay a write that already reached the harness.
156
+ */
157
+ export function finishCommittedDelivery(ctx, sessionId, accepted, deliveredRoute) {
158
+ const file = sessionStatePath(sessionId, ctx.env);
159
+ withFileLock(`${file}.lock`, () => {
160
+ const current = readSessionState(sessionId, ctx.env);
161
+ if (current.accepted?.recorded_at !== accepted.recorded_at ||
162
+ current.accepted.delivery_committed_at === undefined) {
163
+ return;
164
+ }
165
+ writeSessionStateUnlocked(file, sessionId, {
166
+ ...current,
167
+ accepted: {
168
+ ...current.accepted,
169
+ delivered_at: ctx.now(),
170
+ delivered_route: deliveredRoute,
171
+ },
172
+ });
173
+ });
174
+ }
175
+ export function clearAcknowledgementObligation(sessionId, env, requestId) {
176
+ let cleared = false;
177
+ updateSessionState(sessionId, env, (current) => {
178
+ const due = current.acknowledgement_due ?? [];
179
+ const remaining = due.filter((entry) => entry.request_id !== requestId);
180
+ cleared = remaining.length !== due.length;
181
+ if (!cleared)
182
+ return current;
183
+ const next = { ...current };
184
+ if (remaining.length > 0)
185
+ next.acknowledgement_due = remaining;
186
+ else
187
+ delete next.acknowledgement_due;
188
+ return next;
189
+ });
190
+ return cleared;
191
+ }
192
+ export function acknowledgementBlockContext(due) {
193
+ const commands = due
194
+ .map((entry) => `- ${entry.request_id}: \`${acknowledgementCommand(entry.request_id, entry.text_required !== false)}\``)
195
+ .join('\n');
196
+ const anyTextRequired = due.some((entry) => entry.text_required !== false);
197
+ return (`Notifai — required Agent Acknowledgement${due.length === 1 ? '' : 's'} still missing for request${due.length === 1 ? '' : 's'} ${due.map((entry) => entry.request_id).join(', ')}. ` +
198
+ `Before doing more resumed work or ending this turn, run ${due.length === 1 ? 'this command' : 'every command'}${acknowledgementDemand(anyTextRequired)}:\n${commands}`);
199
+ }
200
+ /**
201
+ * How many turns in a row a session may be held waiting for an acknowledgement.
202
+ *
203
+ * The gate is the one place hooks deliberately break the fail-open rule, and it
204
+ * had no bound at all: an agent that could not or would not acknowledge — or a
205
+ * server that stayed unreachable, since an error here counts as unresolved —
206
+ * held every turn of that session for ever. Blocking a user's agent
207
+ * indefinitely does not get them an acknowledgement; it costs them the agent as
208
+ * well as the acknowledgement.
209
+ */
210
+ const MAX_ACKNOWLEDGEMENT_BLOCKS = 3;
211
+ /**
212
+ * Hold the turn for an outstanding acknowledgement, or give up and let it
213
+ * through once holding has stopped being worth its cost.
214
+ *
215
+ * Returns the outcome that blocks the turn, or `null` to carry on.
216
+ */
217
+ export function holdForAcknowledgement(ctx, sessionId, due, notes) {
218
+ if (due.length === 0)
219
+ return null;
220
+ const requestIds = due.map((entry) => entry.request_id);
221
+ const blocks = (readSessionState(sessionId, ctx.env).acknowledgement_blocks ?? 0) + 1;
222
+ if (blocks > MAX_ACKNOWLEDGEMENT_BLOCKS) {
223
+ // Drop the obligation with the reason recorded. The answer was already
224
+ // delivered; what is lost is the agent's receipt for it, and the log is
225
+ // where that loss stays visible.
226
+ for (const requestId of requestIds)
227
+ clearAcknowledgementObligation(sessionId, ctx.env, requestId);
228
+ resetAcknowledgementBlocks(sessionId, ctx.env);
229
+ gate(ctx, 'proceeding', 'acknowledgement-abandoned', {
230
+ request_ids: requestIds,
231
+ blocks: blocks - 1,
232
+ limit: MAX_ACKNOWLEDGEMENT_BLOCKS,
233
+ });
234
+ notes.push(`no acknowledgement after ${MAX_ACKNOWLEDGEMENT_BLOCKS} turns; continuing without one rather than holding this session for ever`);
235
+ return null;
236
+ }
237
+ updateSessionState(sessionId, ctx.env, (current) => ({
238
+ ...current,
239
+ acknowledgement_blocks: blocks,
240
+ }));
241
+ gate(ctx, 'held', 'acknowledgement-required', { request_ids: requestIds, blocks });
242
+ return {
243
+ stdout: stopAnswerOutput(acknowledgementBlockContext(due)),
244
+ notes,
245
+ log: { stage: 'acknowledgement-required', request_ids: requestIds },
246
+ };
247
+ }
248
+ /** A turn that was not held resets the streak; only consecutive holds count. */
249
+ export function resetAcknowledgementBlocks(sessionId, env) {
250
+ updateSessionState(sessionId, env, (current) => {
251
+ if (current.acknowledgement_blocks === undefined)
252
+ return current;
253
+ const next = { ...current };
254
+ delete next.acknowledgement_blocks;
255
+ return next;
256
+ });
257
+ }
258
+ export async function reconcileAcknowledgementObligations(ctx, sessionId, due) {
259
+ const unresolved = [];
260
+ for (const obligation of due) {
261
+ try {
262
+ const snapshot = await ctx.client.agentAcknowledgement(obligation.request_id, {
263
+ waitSeconds: 0,
264
+ });
265
+ if (snapshot.agent_acknowledgement_required === false ||
266
+ snapshot.agent_acknowledgement !== null) {
267
+ clearAcknowledgementObligation(sessionId, ctx.env, obligation.request_id);
268
+ }
269
+ else {
270
+ unresolved.push(obligation);
271
+ }
272
+ }
273
+ catch (err) {
274
+ unresolved.push(obligation);
275
+ ctx.log?.error('hook.gate', {
276
+ verdict: 'held',
277
+ reason: 'acknowledgement-required',
278
+ stage: 'reconcile-failed',
279
+ request_id: obligation.request_id,
280
+ message: err instanceof Error ? err.message : String(err),
281
+ });
282
+ }
283
+ }
284
+ return unresolved;
285
+ }
286
+ /**
287
+ * Retire the answered questions and close the journal.
288
+ *
289
+ * Called once an answer's delivery is acknowledged — by the route's own write,
290
+ * or by the successor Stop of a blocking continuation. The continuation counter
291
+ * grows with each settled generation, so the cap that bounds chained
292
+ * answer-to-question loops is a real count rather than a constant 1.
293
+ */
294
+ export function settleAcceptedAnswers(ctx, sessionId, accepted, cwd) {
295
+ const retirements = accepted.answers
296
+ .map(({ pending }) => retiringQuestion(pending, 'answered', cwd))
297
+ .filter((entry) => entry !== null);
298
+ updateSessionState(sessionId, ctx.env, (current) => {
299
+ const retiring = [...(current.retiring ?? [])];
300
+ for (const retirement of retirements) {
301
+ const existing = retiring.findIndex((entry) => entry.request_id === retirement.request_id);
302
+ if (existing < 0)
303
+ retiring.push(retirement);
304
+ else
305
+ retiring[existing] = retirement;
306
+ }
307
+ const next = { ...current, retiring };
308
+ delete next.accepted;
309
+ next.continuation = {
310
+ answered_at: accepted.recorded_at,
311
+ count: (current.continuation?.count ?? 0) + 1,
312
+ };
313
+ return next;
314
+ });
315
+ }
316
+ //# sourceMappingURL=hook-acknowledgements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-acknowledgements.js","sourceRoot":"","sources":["../src/hook-acknowledgements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Canonical lifecycle event vocabulary shared by installation and execution. */
2
+ import { type HookInstallableHarness } from './harnesses.js';
3
+ export declare const HOOK_EVENTS: readonly ["session-start", "subagent-start", "activation-stop", "user-prompt-submit", "stop", "session-end"];
4
+ export type HookEvent = (typeof HOOK_EVENTS)[number];
5
+ /** Lifecycle handlers one installed harness must carry in this CLI build. */
6
+ export declare function requiredHookEvents(harness: HookInstallableHarness): readonly HookEvent[];