@fml-inc/fml 0.8.0 → 0.8.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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/cli.js +4 -4
- package/dist/hook-handler.js +250 -5
- package/dist/observer-server.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -124,7 +124,7 @@ var POLL_INTERVAL_MS = 50;
|
|
|
124
124
|
var LOG_ROTATE_BYTES = 10 * 1024 * 1024;
|
|
125
125
|
var LOG_ROTATE_FILES = 3;
|
|
126
126
|
function expectedObserverVersion() {
|
|
127
|
-
return true ? "0.8.
|
|
127
|
+
return true ? "0.8.1+532464ef" : "dev";
|
|
128
128
|
}
|
|
129
129
|
function delay(ms) {
|
|
130
130
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -7895,7 +7895,7 @@ async function handleUninstall(opts) {
|
|
|
7895
7895
|
// src/commands/update.ts
|
|
7896
7896
|
var SEMVER_PATTERN = /^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
7897
7897
|
function getCurrentVersion() {
|
|
7898
|
-
return true ? "0.8.
|
|
7898
|
+
return true ? "0.8.1+532464ef" : "unknown";
|
|
7899
7899
|
}
|
|
7900
7900
|
function resolveUpdateChannel(version) {
|
|
7901
7901
|
const match = SEMVER_PATTERN.exec(version);
|
|
@@ -8929,7 +8929,7 @@ async function handleConfigDetail(opts) {
|
|
|
8929
8929
|
// src/commands/tools.ts
|
|
8930
8930
|
import { readFileSync } from "fs";
|
|
8931
8931
|
import path29 from "path";
|
|
8932
|
-
var pluginVersion = true ? "0.8.
|
|
8932
|
+
var pluginVersion = true ? "0.8.1+532464ef" : void 0;
|
|
8933
8933
|
async function getApi() {
|
|
8934
8934
|
const api = await getAuthenticatedClient();
|
|
8935
8935
|
if (!api) {
|
|
@@ -9086,7 +9086,7 @@ if (process.argv.length <= 2 || process.argv.includes("--help") || process.argv.
|
|
|
9086
9086
|
printBanner();
|
|
9087
9087
|
}
|
|
9088
9088
|
var program = new Command().name("fml").description("FML CLI and agent tools").version(
|
|
9089
|
-
true ? "0.8.
|
|
9089
|
+
true ? "0.8.1+532464ef" : "dev"
|
|
9090
9090
|
);
|
|
9091
9091
|
function formatCommandInventory(cmd, prefix = "") {
|
|
9092
9092
|
const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();
|
package/dist/hook-handler.js
CHANGED
|
@@ -35,7 +35,15 @@ import fs from "fs";
|
|
|
35
35
|
import path from "path";
|
|
36
36
|
var HOOK_CONTEXT_ENDPOINT = "/v1/panopticon/hook-context";
|
|
37
37
|
var HOOK_CONTEXT_TIMEOUT_MS = 2e3;
|
|
38
|
-
var MAX_ADDITIONAL_CONTEXT_CHARS =
|
|
38
|
+
var MAX_ADDITIONAL_CONTEXT_CHARS = 3700;
|
|
39
|
+
var MAX_RECEIPT_ITEMS = 5;
|
|
40
|
+
var MAX_RECEIPT_LABEL_CHARS = 48;
|
|
41
|
+
var MAX_RECEIPT_SUMMARY_CHARS = 240;
|
|
42
|
+
var MAX_RECEIPT_PRIORITY = 100;
|
|
43
|
+
var MAX_RECEIPT_TIMESTAMP_MS = 864e13;
|
|
44
|
+
var MAX_RENDERED_RECEIPT_ITEMS = 3;
|
|
45
|
+
var MODEL_CONTEXT_GUIDANCE = "If this FML context materially informs your work, naturally mention FML, the specific context used, and how it informed your work in the final response. Otherwise, do not mention it. Do not claim causal impact or time savings.";
|
|
46
|
+
var CONTEXT_GUIDANCE_SEPARATOR = "\n\n";
|
|
39
47
|
var MAX_PROMPT_CHARS = 2e4;
|
|
40
48
|
var STATE_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
41
49
|
var EDIT_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -184,11 +192,246 @@ function buildServerHookContextRequest(target2, event, stateDir = FML_HOOK_CONTE
|
|
|
184
192
|
}
|
|
185
193
|
return { ...base, eventType: "PreToolUse", filePath, fileOperation };
|
|
186
194
|
}
|
|
187
|
-
|
|
195
|
+
var RECEIPT_LABELS = /* @__PURE__ */ new Set([
|
|
196
|
+
"Recent work",
|
|
197
|
+
"Relevant history",
|
|
198
|
+
"File history",
|
|
199
|
+
"Related files"
|
|
200
|
+
]);
|
|
201
|
+
function isSanitizedInlineText(value, maxChars) {
|
|
202
|
+
return value.length > 0 && value.length <= maxChars && !/[\u0000-\u001F\u007F-\u009F\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/u.test(
|
|
203
|
+
value
|
|
204
|
+
) && value === value.replace(/\s+/g, " ").trim();
|
|
205
|
+
}
|
|
206
|
+
function isReceiptItem(value) {
|
|
207
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
208
|
+
const item = value;
|
|
209
|
+
return typeof item.label === "string" && RECEIPT_LABELS.has(item.label) && isSanitizedInlineText(item.label, MAX_RECEIPT_LABEL_CHARS) && typeof item.summary === "string" && isSanitizedInlineText(item.summary, MAX_RECEIPT_SUMMARY_CHARS) && typeof item.priority === "number" && Number.isSafeInteger(item.priority) && item.priority >= 0 && item.priority <= MAX_RECEIPT_PRIORITY && (item.occurredAtMs === void 0 || typeof item.occurredAtMs === "number" && Number.isSafeInteger(item.occurredAtMs) && item.occurredAtMs >= 0 && item.occurredAtMs <= MAX_RECEIPT_TIMESTAMP_MS);
|
|
210
|
+
}
|
|
211
|
+
function receiptItemsFromResponse(value) {
|
|
212
|
+
if (value === void 0) return [];
|
|
213
|
+
if (!Array.isArray(value) || value.length > MAX_RECEIPT_ITEMS) return null;
|
|
214
|
+
if (!value.every(isReceiptItem)) return null;
|
|
215
|
+
return value;
|
|
216
|
+
}
|
|
217
|
+
var RECEIPT_LINE_WIDTH = 88;
|
|
218
|
+
var RECEIPT_SEGMENTER = new Intl.Segmenter(void 0, {
|
|
219
|
+
granularity: "grapheme"
|
|
220
|
+
});
|
|
221
|
+
function isFullWidthCodePoint(codePoint) {
|
|
222
|
+
return codePoint >= 4352 && (codePoint <= 4447 || codePoint === 9001 || codePoint === 9002 || codePoint >= 11904 && codePoint <= 42191 && codePoint !== 12351 || codePoint >= 44032 && codePoint <= 55203 || codePoint >= 63744 && codePoint <= 64255 || codePoint >= 65040 && codePoint <= 65049 || codePoint >= 65072 && codePoint <= 65135 || codePoint >= 65280 && codePoint <= 65376 || codePoint >= 65504 && codePoint <= 65510 || // Supplementary CJK-adjacent scripts and Japanese kana are rendered
|
|
223
|
+
// double-width by terminals. Keep these deliberately conservative:
|
|
224
|
+
// wrapping early is safer than emitting a line beyond the receipt bound.
|
|
225
|
+
codePoint >= 94176 && codePoint <= 94207 || codePoint >= 94208 && codePoint <= 100351 || codePoint >= 100352 && codePoint <= 101887 || codePoint >= 110592 && codePoint <= 111359 || codePoint >= 127488 && codePoint <= 127569 || codePoint >= 131072 && codePoint <= 262141);
|
|
226
|
+
}
|
|
227
|
+
function isDefaultIgnorableOrMark(value) {
|
|
228
|
+
return /^[\p{Mark}\p{Default_Ignorable_Code_Point}]+$/u.test(value);
|
|
229
|
+
}
|
|
230
|
+
function isEmojiGrapheme(value) {
|
|
231
|
+
return new RegExp("\\p{Extended_Pictographic}", "u").test(value) || /[\u{1F1E6}-\u{1F1FF}]/u.test(value) || value.includes("\u20E3");
|
|
232
|
+
}
|
|
233
|
+
function receiptDisplayWidth(value) {
|
|
234
|
+
let width = 0;
|
|
235
|
+
for (const { segment } of RECEIPT_SEGMENTER.segment(value)) {
|
|
236
|
+
if (isDefaultIgnorableOrMark(segment)) continue;
|
|
237
|
+
if (isEmojiGrapheme(segment)) {
|
|
238
|
+
width += 2;
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
const codePoints = [...segment].map(
|
|
242
|
+
(character) => character.codePointAt(0)
|
|
243
|
+
);
|
|
244
|
+
width += codePoints.some(
|
|
245
|
+
(codePoint) => codePoint !== void 0 && isFullWidthCodePoint(codePoint)
|
|
246
|
+
) ? 2 : 1;
|
|
247
|
+
}
|
|
248
|
+
return width;
|
|
249
|
+
}
|
|
250
|
+
function takeGraphemesToWidth(value, maxWidth) {
|
|
251
|
+
let rendered = "";
|
|
252
|
+
let renderedWidth = 0;
|
|
253
|
+
for (const { segment } of RECEIPT_SEGMENTER.segment(value)) {
|
|
254
|
+
const segmentWidth = receiptDisplayWidth(segment);
|
|
255
|
+
if (renderedWidth + segmentWidth > maxWidth) break;
|
|
256
|
+
rendered += segment;
|
|
257
|
+
renderedWidth += segmentWidth;
|
|
258
|
+
}
|
|
259
|
+
return rendered;
|
|
260
|
+
}
|
|
261
|
+
function splitAtDisplayWidth(value, maxWidth) {
|
|
262
|
+
let renderedWidth = 0;
|
|
263
|
+
let end = 0;
|
|
264
|
+
let lastWhitespaceEnd = 0;
|
|
265
|
+
for (const { segment, index } of RECEIPT_SEGMENTER.segment(value)) {
|
|
266
|
+
const segmentWidth = receiptDisplayWidth(segment);
|
|
267
|
+
if (renderedWidth + segmentWidth > maxWidth) break;
|
|
268
|
+
renderedWidth += segmentWidth;
|
|
269
|
+
end = index + segment.length;
|
|
270
|
+
if (/^\s$/u.test(segment)) lastWhitespaceEnd = end;
|
|
271
|
+
}
|
|
272
|
+
if (end === value.length) return { head: value, tail: "" };
|
|
273
|
+
if (lastWhitespaceEnd > 0) {
|
|
274
|
+
return {
|
|
275
|
+
head: value.slice(0, lastWhitespaceEnd).trimEnd(),
|
|
276
|
+
tail: value.slice(lastWhitespaceEnd).trimStart()
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
return { head: value.slice(0, end), tail: value.slice(end) };
|
|
280
|
+
}
|
|
281
|
+
function isSafeInlineCode(value) {
|
|
282
|
+
if (!/^[A-Za-z0-9@._/$-]+$/u.test(value)) return false;
|
|
283
|
+
const segments = value.split("/");
|
|
284
|
+
if (segments.some(
|
|
285
|
+
(segment) => segment === "" || segment === "." || segment === ".."
|
|
286
|
+
)) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
return value.includes("/") || /^[^.]+\.[A-Za-z0-9_-]+$/u.test(value) || /^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(value);
|
|
290
|
+
}
|
|
291
|
+
function removeMarkdownEmphasis(value) {
|
|
292
|
+
return value.replace(/(\*\*|__)(.+?)\1/gu, "$2").replace(/~~(.+?)~~/gu, "$1").replace(/(?<!\w)\*([^*]+)\*(?!\w)/gu, "$1").replace(/(?<!\w)_([^_]+)_(?!\w)/gu, "$1");
|
|
293
|
+
}
|
|
294
|
+
var UNSAFE_RECEIPT_CHARACTERS = /[\u0000-\u001F\u007F-\u009F\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/gu;
|
|
295
|
+
var HTML_CHARACTER_REFERENCE = /&(?:#(?:[xX][0-9A-Fa-f]+|\d+)|[A-Za-z][A-Za-z0-9]+);/gu;
|
|
296
|
+
function renderReceiptPlainText(value) {
|
|
297
|
+
return removeMarkdownEmphasis(value).replace(HTML_CHARACTER_REFERENCE, "character reference").replace(/\\([\\`*_{}\[\]<>()[\]#+\-=!|])/gu, "$1").replace(/`/gu, "");
|
|
298
|
+
}
|
|
299
|
+
function renderReceiptSummary(summary) {
|
|
300
|
+
const withoutLinks = summary.replace(UNSAFE_RECEIPT_CHARACTERS, "").replace(/!?\[([^\]]*)\]\([^)]*\)/gu, "$1").replace(/!?\[([^\]]*)\]\[[^\]]*\]/gu, "$1").replace(/<https?:\/\/[^>\s]+>/gu, "link").replace(/https?:\/\/[^\s<>()]+/gu, "link").replace(/<[^>]*>/gu, "");
|
|
301
|
+
let rendered = "";
|
|
302
|
+
let cursor = 0;
|
|
303
|
+
for (const match of withoutLinks.matchAll(/`([^`\r\n]+)`/gu)) {
|
|
304
|
+
const matchIndex = match.index ?? 0;
|
|
305
|
+
rendered += renderReceiptPlainText(withoutLinks.slice(cursor, matchIndex));
|
|
306
|
+
const content = match[1] ?? "";
|
|
307
|
+
rendered += isSafeInlineCode(content) ? `\`${content}\`` : renderReceiptPlainText(content);
|
|
308
|
+
cursor = matchIndex + match[0].length;
|
|
309
|
+
}
|
|
310
|
+
return `${rendered}${renderReceiptPlainText(withoutLinks.slice(cursor))}`.replace(/\s+/gu, " ").trim();
|
|
311
|
+
}
|
|
312
|
+
function truncateInlineCodeToken(token, maxWidth) {
|
|
313
|
+
const content = token.slice(1, -1);
|
|
314
|
+
const ellipsisWidth = receiptDisplayWidth("\u2026");
|
|
315
|
+
const contentWidth = maxWidth - 2 - ellipsisWidth;
|
|
316
|
+
if (contentWidth < 1) return "";
|
|
317
|
+
return `\`${takeGraphemesToWidth(content, contentWidth)}\u2026\``;
|
|
318
|
+
}
|
|
319
|
+
function splitInlineCodeToken(token) {
|
|
320
|
+
const match = /^(`[^`]+`)([.,;:!?)}\]]*)$/u.exec(token);
|
|
321
|
+
if (!match) return null;
|
|
322
|
+
return {
|
|
323
|
+
inlineCode: match[1] ?? "",
|
|
324
|
+
trailingPunctuation: match[2] ?? ""
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function wrapReceiptDetail(label, detail) {
|
|
328
|
+
const firstPrefix = `\u2502 ${label}: `;
|
|
329
|
+
const continuationPrefix = "\u2502 ";
|
|
330
|
+
const lines = [];
|
|
331
|
+
let remaining = detail;
|
|
332
|
+
let prefix = firstPrefix;
|
|
333
|
+
while (remaining) {
|
|
334
|
+
const available = RECEIPT_LINE_WIDTH - receiptDisplayWidth(prefix);
|
|
335
|
+
if (receiptDisplayWidth(remaining) <= available) {
|
|
336
|
+
lines.push(`${prefix}${remaining}`);
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
const tokenEnd = remaining.search(/\s/u);
|
|
340
|
+
const token = tokenEnd === -1 ? remaining : remaining.slice(0, tokenEnd);
|
|
341
|
+
const inlineCodeToken = splitInlineCodeToken(token);
|
|
342
|
+
const inlineCodeWidth = inlineCodeToken ? receiptDisplayWidth(inlineCodeToken.inlineCode) + receiptDisplayWidth(inlineCodeToken.trailingPunctuation) : 0;
|
|
343
|
+
if (inlineCodeToken && inlineCodeWidth > available) {
|
|
344
|
+
const codeWidth = available - receiptDisplayWidth(inlineCodeToken.trailingPunctuation);
|
|
345
|
+
if (codeWidth >= 3) {
|
|
346
|
+
lines.push(
|
|
347
|
+
`${prefix}${truncateInlineCodeToken(
|
|
348
|
+
inlineCodeToken.inlineCode,
|
|
349
|
+
codeWidth
|
|
350
|
+
)}${inlineCodeToken.trailingPunctuation}`
|
|
351
|
+
);
|
|
352
|
+
remaining = tokenEnd === -1 ? "" : remaining.slice(tokenEnd).trimStart();
|
|
353
|
+
} else {
|
|
354
|
+
lines.push(
|
|
355
|
+
`${prefix}${truncateInlineCodeToken(
|
|
356
|
+
inlineCodeToken.inlineCode,
|
|
357
|
+
available
|
|
358
|
+
)}`
|
|
359
|
+
);
|
|
360
|
+
remaining = `${inlineCodeToken.trailingPunctuation}${tokenEnd === -1 ? "" : ` ${remaining.slice(tokenEnd).trimStart()}`}`;
|
|
361
|
+
}
|
|
362
|
+
} else {
|
|
363
|
+
const { head, tail } = splitAtDisplayWidth(remaining, available);
|
|
364
|
+
if (!head) return [];
|
|
365
|
+
lines.push(`${prefix}${head}`);
|
|
366
|
+
remaining = tail;
|
|
367
|
+
}
|
|
368
|
+
prefix = continuationPrefix;
|
|
369
|
+
}
|
|
370
|
+
return lines;
|
|
371
|
+
}
|
|
372
|
+
function formatReceiptTime(occurredAtMs, nowMs) {
|
|
373
|
+
const elapsedMs = nowMs - occurredAtMs;
|
|
374
|
+
const dayMs = 24 * 60 * 60 * 1e3;
|
|
375
|
+
if (elapsedMs >= 0 && elapsedMs < 30 * dayMs) {
|
|
376
|
+
const days = Math.floor(elapsedMs / dayMs);
|
|
377
|
+
if (days === 0) return "today";
|
|
378
|
+
if (days === 1) return "yesterday";
|
|
379
|
+
if (days < 7) return `${days} days ago`;
|
|
380
|
+
const weeks = Math.floor(days / 7);
|
|
381
|
+
return `${weeks} week${weeks === 1 ? "" : "s"} ago`;
|
|
382
|
+
}
|
|
383
|
+
try {
|
|
384
|
+
return new Intl.DateTimeFormat(void 0, {
|
|
385
|
+
month: "short",
|
|
386
|
+
day: "numeric",
|
|
387
|
+
year: "numeric"
|
|
388
|
+
}).format(new Date(occurredAtMs));
|
|
389
|
+
} catch {
|
|
390
|
+
return "";
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
function renderHookContextReceipt(receiptItems, nowMs) {
|
|
394
|
+
try {
|
|
395
|
+
const displayedDetails = [];
|
|
396
|
+
for (const { item } of receiptItems.map((item2, index) => ({ item: item2, index })).sort(
|
|
397
|
+
(left, right) => right.item.priority - left.item.priority || left.index - right.index
|
|
398
|
+
)) {
|
|
399
|
+
const summary = renderReceiptSummary(item.summary);
|
|
400
|
+
if (!summary) continue;
|
|
401
|
+
const time = item.occurredAtMs === void 0 ? "" : formatReceiptTime(item.occurredAtMs, nowMs);
|
|
402
|
+
const detailLines = wrapReceiptDetail(
|
|
403
|
+
item.label,
|
|
404
|
+
`${summary}${time ? ` (${time})` : ""}`
|
|
405
|
+
);
|
|
406
|
+
if (detailLines.length === 0) continue;
|
|
407
|
+
displayedDetails.push(detailLines);
|
|
408
|
+
if (displayedDetails.length === MAX_RENDERED_RECEIPT_ITEMS) break;
|
|
409
|
+
}
|
|
410
|
+
const displayedItemCount = displayedDetails.length;
|
|
411
|
+
const remainingItemCount = receiptItems.length - displayedItemCount;
|
|
412
|
+
return receiptItems.length > 0 ? [
|
|
413
|
+
"",
|
|
414
|
+
"\u256D\u2500 FML provided context:",
|
|
415
|
+
...displayedDetails.flat(),
|
|
416
|
+
...remainingItemCount > 0 ? [
|
|
417
|
+
`\u2502 +${remainingItemCount} more context item${remainingItemCount === 1 ? "" : "s"}`
|
|
418
|
+
] : [],
|
|
419
|
+
"\u2570\u2500"
|
|
420
|
+
].join("\n") : null;
|
|
421
|
+
} catch {
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
function appendModelContextGuidance(additionalContext) {
|
|
426
|
+
return `${additionalContext}${CONTEXT_GUIDANCE_SEPARATOR}${MODEL_CONTEXT_GUIDANCE}`;
|
|
427
|
+
}
|
|
428
|
+
function hookOutput(request, additionalContext, receiptItems) {
|
|
429
|
+
const receipt = renderHookContextReceipt(receiptItems, request.nowMs);
|
|
188
430
|
return {
|
|
431
|
+
...receipt ? { systemMessage: receipt } : {},
|
|
189
432
|
hookSpecificOutput: {
|
|
190
433
|
hookEventName: request.eventType,
|
|
191
|
-
additionalContext
|
|
434
|
+
additionalContext: appendModelContextGuidance(additionalContext)
|
|
192
435
|
}
|
|
193
436
|
};
|
|
194
437
|
}
|
|
@@ -231,7 +474,8 @@ async function requestServerHookContext(target2, event, destination, opts = {})
|
|
|
231
474
|
if (!response.ok) return {};
|
|
232
475
|
const body = await response.json();
|
|
233
476
|
if (!body || typeof body !== "object" || Array.isArray(body)) return {};
|
|
234
|
-
const
|
|
477
|
+
const responseBody = body;
|
|
478
|
+
const additionalContext = responseBody.additionalContext;
|
|
235
479
|
if (request.eventType === "PreToolUse" && request.filePath && additionalContext === null) {
|
|
236
480
|
claimPathContext(
|
|
237
481
|
`${target2}:${request.sessionId}`,
|
|
@@ -243,6 +487,7 @@ async function requestServerHookContext(target2, event, destination, opts = {})
|
|
|
243
487
|
if (typeof additionalContext !== "string" || additionalContext.length === 0 || additionalContext.length > MAX_ADDITIONAL_CONTEXT_CHARS) {
|
|
244
488
|
return {};
|
|
245
489
|
}
|
|
490
|
+
const receiptItems = receiptItemsFromResponse(responseBody.receiptItems);
|
|
246
491
|
if (request.eventType === "PreToolUse" && request.filePath && !claimPathContext(
|
|
247
492
|
`${target2}:${request.sessionId}`,
|
|
248
493
|
`${request.repository}:${request.filePath}`,
|
|
@@ -250,7 +495,7 @@ async function requestServerHookContext(target2, event, destination, opts = {})
|
|
|
250
495
|
)) {
|
|
251
496
|
return {};
|
|
252
497
|
}
|
|
253
|
-
return hookOutput(request, additionalContext);
|
|
498
|
+
return hookOutput(request, additionalContext, receiptItems ?? []);
|
|
254
499
|
} catch {
|
|
255
500
|
return {};
|
|
256
501
|
}
|
package/dist/observer-server.js
CHANGED
|
@@ -1239,7 +1239,7 @@ var hookRejectionStatus = () => ({
|
|
|
1239
1239
|
...lastRejectedReason !== void 0 ? { lastRejectedReason } : {},
|
|
1240
1240
|
...lastRejectedTarget !== void 0 ? { lastRejectedTarget } : {}
|
|
1241
1241
|
});
|
|
1242
|
-
var packageVersion = true ? "0.8.
|
|
1242
|
+
var packageVersion = true ? "0.8.1+532464ef" : "dev";
|
|
1243
1243
|
var health = () => ({
|
|
1244
1244
|
status: "ok",
|
|
1245
1245
|
service: OBSERVER_SERVICE_NAME,
|