@zhin.js/plugin-ledger 1.0.1 → 1.0.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.
- package/README.md +24 -0
- package/commands/ledger-add/index.js +6 -4
- package/commands/ledger-add/index.ts +6 -4
- package/commands/ledger-delete/index.js +6 -4
- package/commands/ledger-delete/index.ts +6 -4
- package/commands/ledger-list/index.js +8 -6
- package/commands/ledger-list/index.ts +8 -6
- package/commands/ledger-month/index.js +5 -3
- package/commands/ledger-month/index.ts +5 -3
- package/commands/ledger-report/index.js +11 -11
- package/commands/ledger-report/index.ts +10 -12
- package/commands/ledger-stats/index.js +8 -6
- package/commands/ledger-stats/index.ts +8 -6
- package/commands/ledger-today/index.js +5 -3
- package/commands/ledger-today/index.ts +5 -3
- package/commands/ledger-week/index.js +5 -3
- package/commands/ledger-week/index.ts +5 -3
- package/lib/config.d.ts +11 -5
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +3 -3
- package/lib/config.js.map +1 -1
- package/lib/console.d.ts +4 -0
- package/lib/console.d.ts.map +1 -0
- package/lib/console.js +39 -0
- package/lib/console.js.map +1 -0
- package/lib/entry-input.d.ts +3 -2
- package/lib/entry-input.d.ts.map +1 -1
- package/lib/entry-input.js +11 -9
- package/lib/entry-input.js.map +1 -1
- package/lib/i18n.d.ts +2 -0
- package/lib/i18n.d.ts.map +1 -0
- package/lib/i18n.js +200 -0
- package/lib/i18n.js.map +1 -0
- package/lib/identity.d.ts +3 -1
- package/lib/identity.d.ts.map +1 -1
- package/lib/identity.js +5 -2
- package/lib/identity.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/money.d.ts +2 -1
- package/lib/money.d.ts.map +1 -1
- package/lib/money.js +6 -5
- package/lib/money.js.map +1 -1
- package/lib/period.d.ts +4 -3
- package/lib/period.d.ts.map +1 -1
- package/lib/period.js +8 -16
- package/lib/period.js.map +1 -1
- package/lib/report-format.d.ts +5 -4
- package/lib/report-format.d.ts.map +1 -1
- package/lib/report-format.js +25 -24
- package/lib/report-format.js.map +1 -1
- package/lib/service.d.ts +14 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +41 -24
- package/lib/service.js.map +1 -1
- package/lib/store.d.ts +3 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +8 -4
- package/lib/store.js.map +1 -1
- package/lib/tool-caller.d.ts +32 -0
- package/lib/tool-caller.d.ts.map +1 -0
- package/lib/tool-caller.js +74 -0
- package/lib/tool-caller.js.map +1 -0
- package/package.json +36 -7
- package/pages/index/index.js +63 -0
- package/pages/index/index.ts +65 -0
- package/plugin.js +3 -1
- package/schema.json +15 -0
- package/skills/ledger/SKILL.md +41 -0
- package/skills/ledger/tools/ledger_add/index.js +25 -0
- package/skills/ledger/tools/ledger_add/index.ts +26 -0
- package/skills/ledger/tools/ledger_delete/index.js +22 -0
- package/skills/ledger/tools/ledger_delete/index.ts +23 -0
- package/skills/ledger/tools/ledger_list/index.js +23 -0
- package/skills/ledger/tools/ledger_list/index.ts +24 -0
- package/skills/ledger/tools/ledger_summary/index.js +27 -0
- package/skills/ledger/tools/ledger_summary/index.ts +28 -0
- package/src/config.ts +3 -3
- package/src/console.ts +47 -0
- package/src/entry-input.ts +12 -9
- package/src/i18n.ts +200 -0
- package/src/identity.ts +6 -2
- package/src/index.ts +9 -1
- package/src/money.ts +7 -5
- package/src/period.ts +7 -13
- package/src/report-format.ts +26 -24
- package/src/service.ts +56 -24
- package/src/store.ts +9 -4
- package/src/tool-caller.ts +101 -0
package/lib/report-format.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { messages as t } from './i18n.js';
|
|
1
2
|
import { formatCents, MASKED_AMOUNT } from './money.js';
|
|
2
3
|
import { describePeriodRange, localDateKey, periodLabel } from './period.js';
|
|
3
4
|
/** Groups entries by category, largest total first (ties by name for a stable order). */
|
|
@@ -14,13 +15,13 @@ export function totalsByCategory(entries) {
|
|
|
14
15
|
totals.sort((left, right) => right.totalCents - left.totalCents || left.category.localeCompare(right.category));
|
|
15
16
|
return totals;
|
|
16
17
|
}
|
|
17
|
-
export function summarize(entries, period, nowMs, timeZone) {
|
|
18
|
+
export function summarize(entries, period, nowMs, timeZone, locale) {
|
|
18
19
|
let totalCents = 0;
|
|
19
20
|
for (const entry of entries)
|
|
20
21
|
totalCents += entry.amountCents;
|
|
21
22
|
return {
|
|
22
23
|
period,
|
|
23
|
-
range: describePeriodRange(nowMs, period, timeZone),
|
|
24
|
+
range: describePeriodRange(nowMs, period, timeZone, locale),
|
|
24
25
|
totalCents,
|
|
25
26
|
count: entries.length,
|
|
26
27
|
categories: totalsByCategory(entries),
|
|
@@ -33,53 +34,53 @@ function sharePercent(partCents, totalCents) {
|
|
|
33
34
|
const tenths = Math.round((partCents * 1000) / totalCents);
|
|
34
35
|
return `${Math.floor(tenths / 10)}.${tenths % 10}`;
|
|
35
36
|
}
|
|
36
|
-
export function formatPeriodSummary(summary) {
|
|
37
|
-
const label = periodLabel(summary.period);
|
|
37
|
+
export function formatPeriodSummary(summary, locale) {
|
|
38
|
+
const label = periodLabel(summary.period, locale);
|
|
38
39
|
if (summary.count === 0) {
|
|
39
|
-
const empty =
|
|
40
|
+
const empty = t(locale, 'emptySummary', { period: label, range: summary.range });
|
|
40
41
|
return { full: empty, masked: empty };
|
|
41
42
|
}
|
|
42
|
-
const header =
|
|
43
|
-
const fullLines = [header,
|
|
44
|
-
const maskedLines = [header,
|
|
43
|
+
const header = t(locale, 'summaryHeader', { period: label, range: summary.range });
|
|
44
|
+
const fullLines = [header, t(locale, 'total', { amount: formatCents(summary.totalCents), count: summary.count })];
|
|
45
|
+
const maskedLines = [header, t(locale, 'total', { amount: MASKED_AMOUNT, count: summary.count })];
|
|
45
46
|
for (const category of summary.categories) {
|
|
46
47
|
const share = sharePercent(category.totalCents, summary.totalCents);
|
|
47
|
-
fullLines.push(
|
|
48
|
-
maskedLines.push(
|
|
48
|
+
fullLines.push(t(locale, 'categoryFull', { category: category.category, amount: formatCents(category.totalCents), count: category.count, share }));
|
|
49
|
+
maskedLines.push(t(locale, 'categoryMasked', { category: category.category, amount: MASKED_AMOUNT, count: category.count }));
|
|
49
50
|
}
|
|
50
51
|
return { full: fullLines.join('\n'), masked: maskedLines.join('\n') };
|
|
51
52
|
}
|
|
52
|
-
export function formatCategoryStatistics(summary) {
|
|
53
|
-
const label = periodLabel(summary.period);
|
|
53
|
+
export function formatCategoryStatistics(summary, locale) {
|
|
54
|
+
const label = periodLabel(summary.period, locale);
|
|
54
55
|
if (summary.count === 0) {
|
|
55
|
-
const empty =
|
|
56
|
+
const empty = t(locale, 'emptyStats', { period: label, range: summary.range });
|
|
56
57
|
return { full: empty, masked: empty };
|
|
57
58
|
}
|
|
58
|
-
const header =
|
|
59
|
+
const header = t(locale, 'statsHeader', { period: label, range: summary.range });
|
|
59
60
|
const fullLines = [header];
|
|
60
61
|
const maskedLines = [header];
|
|
61
62
|
for (const category of summary.categories) {
|
|
62
63
|
const averageCents = Math.round(category.totalCents / category.count);
|
|
63
64
|
const share = sharePercent(category.totalCents, summary.totalCents);
|
|
64
|
-
fullLines.push(
|
|
65
|
-
maskedLines.push(
|
|
65
|
+
fullLines.push(t(locale, 'statsFull', { category: category.category, amount: formatCents(category.totalCents), count: category.count, average: formatCents(averageCents), max: formatCents(category.largestCents), share }));
|
|
66
|
+
maskedLines.push(t(locale, 'statsMasked', { category: category.category, count: category.count }));
|
|
66
67
|
}
|
|
67
|
-
fullLines.push(
|
|
68
|
-
maskedLines.push(
|
|
68
|
+
fullLines.push(t(locale, 'categoryCountTotal', { count: summary.categories.length, amount: formatCents(summary.totalCents) }));
|
|
69
|
+
maskedLines.push(t(locale, 'categoryCount', { count: summary.categories.length }));
|
|
69
70
|
return { full: fullLines.join('\n'), masked: maskedLines.join('\n') };
|
|
70
71
|
}
|
|
71
72
|
export const MAX_LISTED_ENTRIES = 20;
|
|
72
73
|
/** Newest first, with `#id` so users can find what to delete. */
|
|
73
|
-
export function formatEntryList(entries, period, nowMs, timeZone) {
|
|
74
|
-
const label = periodLabel(period);
|
|
75
|
-
const range = describePeriodRange(nowMs, period, timeZone);
|
|
74
|
+
export function formatEntryList(entries, period, nowMs, timeZone, locale) {
|
|
75
|
+
const label = periodLabel(period, locale);
|
|
76
|
+
const range = describePeriodRange(nowMs, period, timeZone, locale);
|
|
76
77
|
if (entries.length === 0) {
|
|
77
|
-
const empty =
|
|
78
|
+
const empty = t(locale, 'emptyList', { period: label, range });
|
|
78
79
|
return { full: empty, masked: empty };
|
|
79
80
|
}
|
|
80
81
|
const newestFirst = [...entries].sort((left, right) => right.createdAt - left.createdAt || right.seq - left.seq);
|
|
81
82
|
const shown = newestFirst.slice(0, MAX_LISTED_ENTRIES);
|
|
82
|
-
const header =
|
|
83
|
+
const header = t(locale, 'listHeader', { period: label, range });
|
|
83
84
|
const fullLines = [header];
|
|
84
85
|
const maskedLines = [header];
|
|
85
86
|
for (const entry of shown) {
|
|
@@ -89,7 +90,7 @@ export function formatEntryList(entries, period, nowMs, timeZone) {
|
|
|
89
90
|
maskedLines.push(`#${entry.seq} ${date} ${entry.category} ${MASKED_AMOUNT}`);
|
|
90
91
|
}
|
|
91
92
|
if (newestFirst.length > shown.length) {
|
|
92
|
-
const more =
|
|
93
|
+
const more = t(locale, 'more', { count: newestFirst.length - shown.length });
|
|
93
94
|
fullLines.push(more);
|
|
94
95
|
maskedLines.push(more);
|
|
95
96
|
}
|
package/lib/report-format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-format.js","sourceRoot":"","sources":["../src/report-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report-format.js","sourceRoot":"","sources":["../src/report-format.ts"],"names":[],"mappings":"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"}
|
package/lib/service.d.ts
CHANGED
|
@@ -3,6 +3,18 @@ import type { ResolvedLedgerConfig } from './config.js';
|
|
|
3
3
|
import type { LedgerCaller } from './identity.js';
|
|
4
4
|
import { type LedgerPeriod } from './period.js';
|
|
5
5
|
export type DailyReportAction = 'on' | 'off' | 'status';
|
|
6
|
+
export type LedgerConsoleSubscriber = {
|
|
7
|
+
readonly ownerKey: string;
|
|
8
|
+
readonly reportLocale: string;
|
|
9
|
+
readonly lastReportDate: string;
|
|
10
|
+
};
|
|
11
|
+
export type LedgerConsoleSnapshot = {
|
|
12
|
+
readonly timezone: string;
|
|
13
|
+
readonly reportTime: string;
|
|
14
|
+
readonly reportWhenEmpty: boolean;
|
|
15
|
+
readonly subscriberCount: number;
|
|
16
|
+
readonly subscribers: readonly LedgerConsoleSubscriber[];
|
|
17
|
+
};
|
|
6
18
|
export interface LedgerServiceOptions {
|
|
7
19
|
/** Wall clock; tests pass a fake. */
|
|
8
20
|
readonly now?: () => number;
|
|
@@ -22,12 +34,13 @@ export declare class LedgerService {
|
|
|
22
34
|
periodSummary(caller: LedgerCaller, period: LedgerPeriod): Promise<string>;
|
|
23
35
|
categoryStatistics(caller: LedgerCaller, period: LedgerPeriod): Promise<string>;
|
|
24
36
|
listEntries(caller: LedgerCaller, period: LedgerPeriod): Promise<string>;
|
|
25
|
-
dailyReport(caller: LedgerCaller, action: DailyReportAction): Promise<string>;
|
|
37
|
+
dailyReport(caller: LedgerCaller, action: DailyReportAction, commandHead?: string): Promise<string>;
|
|
26
38
|
/**
|
|
27
39
|
* Called every minute by the schedule. Once the local time reaches `reportTime`, each subscriber
|
|
28
40
|
* who has not had today's report gets it in their private chat. A failed delivery is logged and
|
|
29
41
|
* not retried that day, so an unreachable user is not messaged every minute.
|
|
30
42
|
*/
|
|
31
43
|
runDailyReports(): Promise<number>;
|
|
44
|
+
getConsoleSnapshot(): Promise<LedgerConsoleSnapshot>;
|
|
32
45
|
}
|
|
33
46
|
//# sourceMappingURL=service.d.ts.map
|
package/lib/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAuD,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAYrG,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC1D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;;gBAUZ,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,oBAAyB;IAwCxI,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB7D,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB/D,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1E,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/E,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BxE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BzG;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAwBlC,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAc3D"}
|
package/lib/service.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolveLocale } from 'zhin.js/i18n';
|
|
2
|
+
import { messages as t } from './i18n.js';
|
|
1
3
|
import { getLogger } from 'zhin.js';
|
|
2
4
|
import { parseEntryInput } from './entry-input.js';
|
|
3
5
|
import { formatCents, MASKED_AMOUNT } from './money.js';
|
|
@@ -64,7 +66,7 @@ export class LedgerService {
|
|
|
64
66
|
}
|
|
65
67
|
async addEntry(caller, text) {
|
|
66
68
|
await this.#rememberPrivate(caller);
|
|
67
|
-
const parsed = parseEntryInput(text);
|
|
69
|
+
const parsed = parseEntryInput(text, caller.locale);
|
|
68
70
|
if (!parsed.ok)
|
|
69
71
|
return parsed.reason;
|
|
70
72
|
const { category, amountCents, note } = parsed.entry;
|
|
@@ -82,17 +84,17 @@ export class LedgerService {
|
|
|
82
84
|
});
|
|
83
85
|
const amount = caller.isPrivate ? formatCents(amountCents) : MASKED_AMOUNT;
|
|
84
86
|
const noteText = note ? ` · ${note}` : '';
|
|
85
|
-
return
|
|
87
|
+
return t(caller.locale, 'added', { seq, category, amount, note: noteText });
|
|
86
88
|
}
|
|
87
89
|
async deleteEntry(caller, seq) {
|
|
88
90
|
await this.#rememberPrivate(caller);
|
|
89
91
|
return this.#withUserLock(caller.ownerKey, async () => {
|
|
90
92
|
const entry = await this.#store.findEntry(caller.ownerKey, seq);
|
|
91
93
|
if (!entry)
|
|
92
|
-
return
|
|
94
|
+
return t(caller.locale, 'notFound', { seq });
|
|
93
95
|
await this.#store.deleteEntry(caller.ownerKey, seq);
|
|
94
96
|
const amount = caller.isPrivate ? formatCents(entry.amountCents) : MASKED_AMOUNT;
|
|
95
|
-
return
|
|
97
|
+
return t(caller.locale, 'deleted', { seq, category: entry.category, amount });
|
|
96
98
|
});
|
|
97
99
|
}
|
|
98
100
|
async #entriesIn(ownerKey, period) {
|
|
@@ -102,18 +104,18 @@ export class LedgerService {
|
|
|
102
104
|
}
|
|
103
105
|
async periodSummary(caller, period) {
|
|
104
106
|
const entries = await this.#entriesIn(caller.ownerKey, period);
|
|
105
|
-
const reply = formatPeriodSummary(summarize(entries, period, this.#now(), this.#config.timezone));
|
|
106
|
-
return this.#deliver(caller, reply,
|
|
107
|
+
const reply = formatPeriodSummary(summarize(entries, period, this.#now(), this.#config.timezone, caller.locale), caller.locale);
|
|
108
|
+
return this.#deliver(caller, reply, t(caller.locale, 'spending', { period: periodLabel(period, caller.locale) }));
|
|
107
109
|
}
|
|
108
110
|
async categoryStatistics(caller, period) {
|
|
109
111
|
const entries = await this.#entriesIn(caller.ownerKey, period);
|
|
110
|
-
const reply = formatCategoryStatistics(summarize(entries, period, this.#now(), this.#config.timezone));
|
|
111
|
-
return this.#deliver(caller, reply, '
|
|
112
|
+
const reply = formatCategoryStatistics(summarize(entries, period, this.#now(), this.#config.timezone, caller.locale), caller.locale);
|
|
113
|
+
return this.#deliver(caller, reply, t(caller.locale, 'statistics'));
|
|
112
114
|
}
|
|
113
115
|
async listEntries(caller, period) {
|
|
114
116
|
const entries = await this.#entriesIn(caller.ownerKey, period);
|
|
115
|
-
const reply = formatEntryList(entries, period, this.#now(), this.#config.timezone);
|
|
116
|
-
return this.#deliver(caller, reply,
|
|
117
|
+
const reply = formatEntryList(entries, period, this.#now(), this.#config.timezone, caller.locale);
|
|
118
|
+
return this.#deliver(caller, reply, t(caller.locale, 'entryList', { period: periodLabel(period, caller.locale) }));
|
|
117
119
|
}
|
|
118
120
|
/** Private chat: full reply. Group/channel: try a private message, else the masked reply. */
|
|
119
121
|
async #deliver(caller, reply, title) {
|
|
@@ -125,15 +127,15 @@ export class LedgerService {
|
|
|
125
127
|
return reply.full;
|
|
126
128
|
const delivered = await this.#sendPrivately(caller, reply.full);
|
|
127
129
|
if (delivered)
|
|
128
|
-
return
|
|
129
|
-
return
|
|
130
|
+
return t(caller.locale, 'privateSent', { title });
|
|
131
|
+
return t(caller.locale, 'privateFallback', { text: reply.masked });
|
|
130
132
|
}
|
|
131
133
|
async #sendPrivately(caller, content) {
|
|
132
134
|
const sendTarget = this.#outbound?.sendTarget;
|
|
133
135
|
if (!sendTarget)
|
|
134
136
|
return false;
|
|
135
137
|
try {
|
|
136
|
-
await sendTarget.call(this.#outbound, await this.#privateTargetOf(caller), content);
|
|
138
|
+
await sendTarget.call(this.#outbound, await this.#privateTargetOf(caller), content, { locale: resolveLocale(caller.locale) });
|
|
137
139
|
return true;
|
|
138
140
|
}
|
|
139
141
|
catch (error) {
|
|
@@ -141,33 +143,34 @@ export class LedgerService {
|
|
|
141
143
|
return false;
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
|
-
async dailyReport(caller, action) {
|
|
146
|
+
async dailyReport(caller, action, commandHead) {
|
|
145
147
|
await this.#rememberPrivate(caller);
|
|
148
|
+
const hint = (action) => commandHead ? t(caller.locale, 'commandHint', { command: `${commandHead} ${resolveLocale(caller.locale) === 'en' ? action : action === 'on' ? '开启' : '关闭'}` }) : '';
|
|
146
149
|
const reportTime = this.#config.reportTime;
|
|
147
150
|
const user = await this.#store.getUser(caller.ownerKey);
|
|
148
151
|
if (action === 'status') {
|
|
149
152
|
if (user?.reportEnabled)
|
|
150
|
-
return
|
|
151
|
-
return '
|
|
153
|
+
return t(caller.locale, 'reportEnabled', { time: reportTime, timezone: this.#config.timezone });
|
|
154
|
+
return [t(caller.locale, 'reportDisabled'), hint('on')].filter(Boolean).join(' ');
|
|
152
155
|
}
|
|
153
156
|
if (action === 'off') {
|
|
154
157
|
await this.#store.setReport(caller.ownerKey, false, undefined, user?.lastReportDate ?? '');
|
|
155
|
-
return '
|
|
158
|
+
return t(caller.locale, 'reportOff');
|
|
156
159
|
}
|
|
157
160
|
if (!this.#outbound?.sendTarget)
|
|
158
|
-
return '
|
|
159
|
-
const confirmation =
|
|
161
|
+
return t(caller.locale, 'noPrivate');
|
|
162
|
+
const confirmation = [t(caller.locale, 'reportOn', { time: reportTime, timezone: this.#config.timezone }), hint('off')].filter(Boolean).join(' ');
|
|
160
163
|
if (!caller.isPrivate) {
|
|
161
164
|
const reachable = await this.#sendPrivately(caller, confirmation);
|
|
162
165
|
if (!reachable)
|
|
163
|
-
return '
|
|
166
|
+
return [t(caller.locale, 'cannotPrivate'), hint('on')].filter(Boolean).join(' ');
|
|
164
167
|
}
|
|
165
168
|
const nowMs = this.#now();
|
|
166
169
|
const today = localDateKey(nowMs, this.#config.timezone);
|
|
167
170
|
const alreadyPastReportTime = localTimeKey(nowMs, this.#config.timezone) >= reportTime;
|
|
168
171
|
const lastReportDate = alreadyPastReportTime ? today : '';
|
|
169
|
-
await this.#store.setReport(caller.ownerKey, true, await this.#privateTargetOf(caller), lastReportDate);
|
|
170
|
-
return caller.isPrivate ? confirmation :
|
|
172
|
+
await this.#store.setReport(caller.ownerKey, true, await this.#privateTargetOf(caller), lastReportDate, resolveLocale(caller.locale));
|
|
173
|
+
return caller.isPrivate ? confirmation : t(caller.locale, 'reportOnPrivate');
|
|
171
174
|
}
|
|
172
175
|
/**
|
|
173
176
|
* Called every minute by the schedule. Once the local time reaches `reportTime`, each subscriber
|
|
@@ -191,9 +194,9 @@ export class LedgerService {
|
|
|
191
194
|
const entries = await this.#entriesIn(subscriber.ownerKey, 'today');
|
|
192
195
|
if (entries.length === 0 && !this.#config.reportWhenEmpty)
|
|
193
196
|
continue;
|
|
194
|
-
const summary = formatPeriodSummary(summarize(entries, 'today', nowMs, timezone));
|
|
197
|
+
const summary = formatPeriodSummary(summarize(entries, 'today', nowMs, timezone, subscriber.reportLocale), subscriber.reportLocale);
|
|
195
198
|
try {
|
|
196
|
-
await this.#outbound.sendTarget(subscriber.reportTarget,
|
|
199
|
+
await this.#outbound.sendTarget(subscriber.reportTarget, t(subscriber.reportLocale, 'report', { text: summary.full }), { locale: resolveLocale(subscriber.reportLocale) });
|
|
197
200
|
sent += 1;
|
|
198
201
|
}
|
|
199
202
|
catch (error) {
|
|
@@ -202,5 +205,19 @@ export class LedgerService {
|
|
|
202
205
|
}
|
|
203
206
|
return sent;
|
|
204
207
|
}
|
|
208
|
+
async getConsoleSnapshot() {
|
|
209
|
+
const subscribers = await this.#store.listReportSubscribers();
|
|
210
|
+
return {
|
|
211
|
+
timezone: this.#config.timezone,
|
|
212
|
+
reportTime: this.#config.reportTime,
|
|
213
|
+
reportWhenEmpty: this.#config.reportWhenEmpty,
|
|
214
|
+
subscriberCount: subscribers.length,
|
|
215
|
+
subscribers: subscribers.map((subscriber) => ({
|
|
216
|
+
ownerKey: subscriber.ownerKey,
|
|
217
|
+
reportLocale: resolveLocale(subscriber.reportLocale),
|
|
218
|
+
lastReportDate: subscriber.lastReportDate,
|
|
219
|
+
})),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
205
222
|
}
|
|
206
223
|
//# sourceMappingURL=service.js.map
|
package/lib/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/lib/store.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Locale } from 'zhin.js/i18n';
|
|
1
2
|
import type { DeliveryTarget, PluginDatabaseHost } from 'zhin.js';
|
|
2
3
|
export declare const ENTRY_TABLE = "ledger_entries";
|
|
3
4
|
export declare const USER_TABLE = "ledger_users";
|
|
@@ -17,6 +18,7 @@ export interface LedgerUserRecord {
|
|
|
17
18
|
readonly ownerKey: string;
|
|
18
19
|
readonly nextSeq: number;
|
|
19
20
|
readonly reportEnabled: boolean;
|
|
21
|
+
readonly reportLocale?: Locale;
|
|
20
22
|
readonly reportTarget: DeliveryTarget | undefined;
|
|
21
23
|
readonly lastReportDate: string;
|
|
22
24
|
}
|
|
@@ -37,7 +39,7 @@ export declare class LedgerStore {
|
|
|
37
39
|
listEntries(ownerKey: string): Promise<LedgerEntry[]>;
|
|
38
40
|
findEntry(ownerKey: string, seq: number): Promise<LedgerEntry | undefined>;
|
|
39
41
|
deleteEntry(ownerKey: string, seq: number): Promise<void>;
|
|
40
|
-
setReport(ownerKey: string, enabled: boolean, target: DeliveryTarget | undefined, lastReportDate: string): Promise<void>;
|
|
42
|
+
setReport(ownerKey: string, enabled: boolean, target: DeliveryTarget | undefined, lastReportDate: string, locale?: Locale): Promise<void>;
|
|
41
43
|
/** The real private conversation saved when the user talked to the bot in private. */
|
|
42
44
|
getPrivateTarget(ownerKey: string): Promise<DeliveryTarget | undefined>;
|
|
43
45
|
/** Saves the real private conversation; an enabled daily report follows it. */
|
package/lib/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAErF,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAC5C,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,mIAAmI;AACnI,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAqB,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAErF,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAC5C,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,mIAAmI;AACnI,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,IAAI,CAqBrF;AAiCD;;;;GAIG;AACH,qBAAa,WAAW;;gBAGV,QAAQ,EAAE,kBAAkB;IAUlC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAqBtE,+FAA+F;IACzF,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOrD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAQ1E,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/I,sFAAsF;IAChF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAK7E,+EAA+E;IACzE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzE,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOpD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrE"}
|
package/lib/store.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveLocale } from 'zhin.js/i18n';
|
|
1
2
|
export const ENTRY_TABLE = 'ledger_entries';
|
|
2
3
|
export const USER_TABLE = 'ledger_users';
|
|
3
4
|
/** Separate table: existing databases only run CREATE TABLE IF NOT EXISTS, so new columns on `ledger_users` would never appear. */
|
|
@@ -16,9 +17,10 @@ export function defineLedgerTables(database) {
|
|
|
16
17
|
owner_key: { type: 'text', nullable: false },
|
|
17
18
|
next_seq: { type: 'integer', default: 1 },
|
|
18
19
|
report_enabled: { type: 'integer', default: 0 },
|
|
20
|
+
report_locale: { type: 'text', length: 16, nullable: true },
|
|
19
21
|
report_target: { type: 'text', default: '' },
|
|
20
22
|
last_report_date: { type: 'text', default: '' },
|
|
21
|
-
});
|
|
23
|
+
}, { addColumns: ['report_locale'] });
|
|
22
24
|
database.define(PRIVATE_TARGET_TABLE, {
|
|
23
25
|
owner_key: { type: 'text', nullable: false },
|
|
24
26
|
target: { type: 'text', nullable: false },
|
|
@@ -49,6 +51,7 @@ function toUser(row) {
|
|
|
49
51
|
ownerKey: String(row.owner_key),
|
|
50
52
|
nextSeq: Number(row.next_seq ?? 1),
|
|
51
53
|
reportEnabled: Number(row.report_enabled ?? 0) === 1,
|
|
54
|
+
reportLocale: resolveLocale(row.report_locale),
|
|
52
55
|
reportTarget: parseTarget(row.report_target),
|
|
53
56
|
lastReportDate: String(row.last_report_date ?? ''),
|
|
54
57
|
};
|
|
@@ -71,7 +74,7 @@ export class LedgerStore {
|
|
|
71
74
|
}
|
|
72
75
|
async getUser(ownerKey) {
|
|
73
76
|
const rows = await this.#model(USER_TABLE)
|
|
74
|
-
.select('owner_key', 'next_seq', 'report_enabled', 'report_target', 'last_report_date')
|
|
77
|
+
.select('owner_key', 'next_seq', 'report_enabled', 'report_locale', 'report_target', 'last_report_date')
|
|
75
78
|
.where({ owner_key: ownerKey });
|
|
76
79
|
const first = rows[0];
|
|
77
80
|
return first ? toUser(first) : undefined;
|
|
@@ -122,10 +125,11 @@ export class LedgerStore {
|
|
|
122
125
|
async deleteEntry(ownerKey, seq) {
|
|
123
126
|
await this.#model(ENTRY_TABLE).delete().where({ owner_key: ownerKey, seq });
|
|
124
127
|
}
|
|
125
|
-
async setReport(ownerKey, enabled, target, lastReportDate) {
|
|
128
|
+
async setReport(ownerKey, enabled, target, lastReportDate, locale) {
|
|
126
129
|
await this.#ensureUser(ownerKey);
|
|
127
130
|
await this.#model(USER_TABLE).update({
|
|
128
131
|
report_enabled: enabled ? 1 : 0,
|
|
132
|
+
...(enabled ? { report_locale: resolveLocale(locale) } : {}),
|
|
129
133
|
report_target: target ? JSON.stringify(target) : '',
|
|
130
134
|
last_report_date: lastReportDate,
|
|
131
135
|
}).where({ owner_key: ownerKey });
|
|
@@ -151,7 +155,7 @@ export class LedgerStore {
|
|
|
151
155
|
}
|
|
152
156
|
async listReportSubscribers() {
|
|
153
157
|
const rows = await this.#model(USER_TABLE)
|
|
154
|
-
.select('owner_key', 'next_seq', 'report_enabled', 'report_target', 'last_report_date')
|
|
158
|
+
.select('owner_key', 'next_seq', 'report_enabled', 'report_locale', 'report_target', 'last_report_date')
|
|
155
159
|
.where({ report_enabled: 1 });
|
|
156
160
|
return rows.map(toUser);
|
|
157
161
|
}
|
package/lib/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Locale } from 'zhin.js/i18n';
|
|
2
|
+
import { type DeliveryTarget } from 'zhin.js';
|
|
3
|
+
import { adapterFeatureId } from 'zhin.js/adapter';
|
|
4
|
+
import { type LedgerCaller } from './identity.js';
|
|
5
|
+
export type LedgerToolOrigin = Readonly<{
|
|
6
|
+
kind: 'im';
|
|
7
|
+
platform: string;
|
|
8
|
+
endpoint: string;
|
|
9
|
+
scope: 'private' | 'group' | 'channel';
|
|
10
|
+
sceneId: string;
|
|
11
|
+
messageId?: string;
|
|
12
|
+
threadId?: string;
|
|
13
|
+
conversation?: DeliveryTarget & Readonly<{
|
|
14
|
+
name?: string;
|
|
15
|
+
}>;
|
|
16
|
+
}> | Readonly<{
|
|
17
|
+
kind: Exclude<string, 'im'>;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}>;
|
|
20
|
+
export interface LedgerToolCallerContext {
|
|
21
|
+
readonly origin: LedgerToolOrigin;
|
|
22
|
+
readonly locale?: Locale;
|
|
23
|
+
readonly senderId?: string;
|
|
24
|
+
readonly principal?: Readonly<{
|
|
25
|
+
subjectId: string;
|
|
26
|
+
roles: readonly string[];
|
|
27
|
+
}>;
|
|
28
|
+
project?<T>(feature: typeof adapterFeatureId): T;
|
|
29
|
+
}
|
|
30
|
+
/** Builds a LedgerCaller from an Agent Tool execution context. */
|
|
31
|
+
export declare function ledgerCallerFromTool(context: LedgerToolCallerContext): LedgerCaller;
|
|
32
|
+
//# sourceMappingURL=tool-caller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-caller.d.ts","sourceRoot":"","sources":["../src/tool-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpF,MAAM,MAAM,gBAAgB,GACxB,QAAQ,CAAC;IACP,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,CAAC,GACF,QAAQ,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,gBAAgB,GAAG,CAAC,CAAC;CAClD;AAsDD,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAoBnF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { resolveLocale } from 'zhin.js/i18n';
|
|
2
|
+
import { createDeliveryTarget } from 'zhin.js';
|
|
3
|
+
import { adapterFeatureId } from 'zhin.js/adapter';
|
|
4
|
+
import { messages as t } from './i18n.js';
|
|
5
|
+
import { LedgerInputError, ledgerOwnerKey } from './identity.js';
|
|
6
|
+
function isImOrigin(origin) {
|
|
7
|
+
return origin.kind === 'im';
|
|
8
|
+
}
|
|
9
|
+
function resolveToolConversation(context, locale) {
|
|
10
|
+
const origin = context.origin;
|
|
11
|
+
if (!isImOrigin(origin)) {
|
|
12
|
+
throw new LedgerInputError(t(locale, 'actor'));
|
|
13
|
+
}
|
|
14
|
+
let endpointId = origin.conversation?.endpoint.id ?? origin.endpoint;
|
|
15
|
+
if (typeof context.project === 'function') {
|
|
16
|
+
try {
|
|
17
|
+
const index = context.project(adapterFeatureId);
|
|
18
|
+
if (index && typeof index.describe === 'function') {
|
|
19
|
+
const matches = index
|
|
20
|
+
.describe()
|
|
21
|
+
.filter((endpoint) => (String(endpoint.id) === origin.endpoint || endpoint.name === origin.endpoint) &&
|
|
22
|
+
index.clientAdapter(endpoint.id) === origin.platform);
|
|
23
|
+
if (matches.length === 1) {
|
|
24
|
+
endpointId = String(matches[0].id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Fall back to origin endpoint when AdapterIndex projection is unavailable in lightweight contexts.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!endpointId) {
|
|
33
|
+
throw new LedgerInputError(t(locale, 'actor'));
|
|
34
|
+
}
|
|
35
|
+
if (origin.conversation) {
|
|
36
|
+
return createDeliveryTarget({
|
|
37
|
+
conversation: {
|
|
38
|
+
...origin.conversation,
|
|
39
|
+
endpoint: { id: endpointId, adapter: origin.platform },
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return createDeliveryTarget({
|
|
44
|
+
conversation: {
|
|
45
|
+
endpoint: { id: endpointId, adapter: origin.platform },
|
|
46
|
+
kind: origin.scope,
|
|
47
|
+
id: origin.sceneId,
|
|
48
|
+
...(origin.threadId !== undefined ? { threadId: origin.threadId } : {}),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** Builds a LedgerCaller from an Agent Tool execution context. */
|
|
53
|
+
export function ledgerCallerFromTool(context) {
|
|
54
|
+
const locale = resolveLocale(context.locale);
|
|
55
|
+
const senderId = (context.principal?.subjectId ?? context.senderId)?.trim();
|
|
56
|
+
if (!senderId) {
|
|
57
|
+
throw new LedgerInputError(t(locale, 'actor'));
|
|
58
|
+
}
|
|
59
|
+
const conversation = resolveToolConversation(context, locale);
|
|
60
|
+
const endpoint = conversation.endpoint;
|
|
61
|
+
const isPrivate = conversation.kind === 'private';
|
|
62
|
+
const privateTarget = isPrivate
|
|
63
|
+
? conversation
|
|
64
|
+
: Object.freeze({ endpoint, kind: 'private', id: senderId });
|
|
65
|
+
return {
|
|
66
|
+
ownerKey: ledgerOwnerKey(endpoint.adapter, endpoint.id, senderId),
|
|
67
|
+
senderId,
|
|
68
|
+
locale,
|
|
69
|
+
conversation,
|
|
70
|
+
privateTarget,
|
|
71
|
+
isPrivate,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=tool-caller.js.map
|