@profullstack/agenticjobs 0.11.0 → 0.12.0
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 +66 -0
- package/dist/cli/args.js +3 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.js +149 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/jobfile.js +38 -2
- package/dist/cli/jobfile.js.map +1 -1
- package/dist/client/client.d.ts +113 -0
- package/dist/client/client.js +25 -0
- package/dist/client/client.js.map +1 -1
- package/dist/config.d.ts +35 -1
- package/dist/config.js +33 -1
- package/dist/config.js.map +1 -1
- package/dist/core/candidates.js +3 -5
- package/dist/core/candidates.js.map +1 -1
- package/dist/core/capacity.d.ts +1 -1
- package/dist/core/capacity.js +11 -19
- package/dist/core/capacity.js.map +1 -1
- package/dist/core/coinpay.d.ts +143 -0
- package/dist/core/coinpay.js +417 -0
- package/dist/core/coinpay.js.map +1 -0
- package/dist/core/import.js +9 -7
- package/dist/core/import.js.map +1 -1
- package/dist/core/inbox.d.ts +155 -0
- package/dist/core/inbox.js +353 -0
- package/dist/core/inbox.js.map +1 -0
- package/dist/core/invoices.d.ts +111 -0
- package/dist/core/invoices.js +292 -0
- package/dist/core/invoices.js.map +1 -0
- package/dist/core/mail.d.ts +16 -0
- package/dist/core/mail.js +22 -0
- package/dist/core/mail.js.map +1 -1
- package/dist/directory/fetch.d.ts +1 -1
- package/dist/markup/markdown.js +4 -1
- package/dist/markup/markdown.js.map +1 -1
- package/dist/mcp/tools.js +150 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/app.d.ts +4 -3
- package/dist/server/app.js +7 -4
- package/dist/server/app.js.map +1 -1
- package/dist/server/deps.d.ts +5 -0
- package/dist/server/middleware.js +9 -1
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/routes/api.js +284 -0
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +19 -0
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/inbox.d.ts +9 -0
- package/dist/server/routes/inbox.js +223 -0
- package/dist/server/routes/inbox.js.map +1 -0
- package/dist/server/routes/openapi.js +124 -0
- package/dist/server/routes/openapi.js.map +1 -1
- package/dist/server/routes/pages.d.ts +22 -0
- package/dist/server/routes/pages.js +91 -7
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/views/candidates.d.ts +1 -0
- package/dist/views/candidates.js +1 -1
- package/dist/views/candidates.js.map +1 -1
- package/dist/views/docs.js +10 -1
- package/dist/views/docs.js.map +1 -1
- package/dist/views/inbox.d.ts +90 -0
- package/dist/views/inbox.js +73 -0
- package/dist/views/inbox.js.map +1 -0
- package/dist/views/jobs.d.ts +9 -0
- package/dist/views/jobs.js +3 -2
- package/dist/views/jobs.js.map +1 -1
- package/dist/views/layout.d.ts +2 -0
- package/dist/views/layout.js +2 -2
- package/dist/views/layout.js.map +1 -1
- package/dist/views/me.d.ts +3 -3
- package/dist/views/me.js +2 -2
- package/dist/views/me.js.map +1 -1
- package/dist/views/updates.d.ts +13 -0
- package/dist/views/updates.js +2 -1
- package/dist/views/updates.js.map +1 -1
- package/migrations/0014_inbox_and_billing.sql +138 -0
- package/package.json +1 -1
- package/web/public/app.css +135 -0
- package/web/public/sw.js +1 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invoices: a message with money attached.
|
|
3
|
+
*
|
|
4
|
+
* The payee writes one in a conversation they are in. The other side sees it
|
|
5
|
+
* there, presses Pay, and is sent to CoinPay to settle it in the coin the
|
|
6
|
+
* payee chose, straight to the payee's wallet. The board mints the payment
|
|
7
|
+
* under its own business key and names the payee's address as the payout, so
|
|
8
|
+
* at no point does money sit anywhere the board controls.
|
|
9
|
+
*
|
|
10
|
+
* A CoinPay payment is a quote that expires. The invoice does not: when a
|
|
11
|
+
* quote lapses unpaid, Pay mints a fresh one under the same invoice, and
|
|
12
|
+
* `status` only ever moves sent -> paid or sent -> cancelled. Payment is
|
|
13
|
+
* confirmed by webhook, and by asking CoinPay when the page is opened, so a
|
|
14
|
+
* lost webhook delays the answer rather than losing it.
|
|
15
|
+
*/
|
|
16
|
+
import { clean } from "../schema/text.js";
|
|
17
|
+
import { CoinPayProblem, getAccount } from "./coinpay.js";
|
|
18
|
+
const SELECT = `
|
|
19
|
+
select i.*, u.name as payee_name, u.email as payee_email
|
|
20
|
+
from invoices i join users u on u.id = i.payee_id`;
|
|
21
|
+
function toInvoice(row, coinpay) {
|
|
22
|
+
const name = (row.payee_name ?? '').trim();
|
|
23
|
+
return {
|
|
24
|
+
id: row.id,
|
|
25
|
+
threadId: row.thread_id,
|
|
26
|
+
payee: { id: row.payee_id, name: name === '' ? row.payee_email : name },
|
|
27
|
+
amountUsd: Number(row.amount_usd).toFixed(2),
|
|
28
|
+
currency: row.currency,
|
|
29
|
+
walletAddress: row.wallet_address,
|
|
30
|
+
description: row.description,
|
|
31
|
+
status: row.status,
|
|
32
|
+
payment: row.coinpay_payment_id === null || coinpay === null
|
|
33
|
+
? null
|
|
34
|
+
: {
|
|
35
|
+
id: row.coinpay_payment_id,
|
|
36
|
+
address: row.payment_address,
|
|
37
|
+
amountCrypto: row.amount_crypto,
|
|
38
|
+
expiresAt: row.payment_expires_at,
|
|
39
|
+
url: coinpay.payUrl(row.coinpay_payment_id),
|
|
40
|
+
},
|
|
41
|
+
paidAt: row.paid_at,
|
|
42
|
+
paidBy: row.paid_by,
|
|
43
|
+
txHash: row.tx_hash,
|
|
44
|
+
createdAt: row.created_at,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** A dollar amount as typed: "120", "120.50", "$1,200". Null when it is not one. */
|
|
48
|
+
export function parseAmount(value) {
|
|
49
|
+
if (typeof value !== 'string' && typeof value !== 'number')
|
|
50
|
+
return null;
|
|
51
|
+
const raw = String(value).replace(/[$,\s]/g, '');
|
|
52
|
+
if (!/^\d+(\.\d{1,2})?$/.test(raw))
|
|
53
|
+
return null;
|
|
54
|
+
const amount = Number(raw);
|
|
55
|
+
if (!(amount > 0) || amount > 1_000_000)
|
|
56
|
+
return null;
|
|
57
|
+
return amount.toFixed(2);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Send one. Returns the invoice, or a sentence saying why not.
|
|
61
|
+
*
|
|
62
|
+
* The payee has to be in the conversation and has to have connected a CoinPay
|
|
63
|
+
* account with a wallet on the chain they chose; the address is copied onto
|
|
64
|
+
* the invoice at this moment and never read again, so what the payer pays to
|
|
65
|
+
* is what the payee had connected when they asked.
|
|
66
|
+
*/
|
|
67
|
+
export async function sendInvoice(pool, coinpay, input) {
|
|
68
|
+
if (coinpay === null)
|
|
69
|
+
return 'This board has no payment rail configured.';
|
|
70
|
+
const amount = parseAmount(input.amount);
|
|
71
|
+
if (amount === null)
|
|
72
|
+
return 'The amount has to be a number of dollars, like 1200 or 1200.50.';
|
|
73
|
+
const description = clean(input.description, 1000, { multiline: true });
|
|
74
|
+
const account = await getAccount(pool, input.payeeId);
|
|
75
|
+
if (account === null)
|
|
76
|
+
return 'Connect a CoinPay account first, so there is a wallet to be paid to.';
|
|
77
|
+
if (!account.usable)
|
|
78
|
+
return 'Your CoinPay connection has lapsed. Reconnect it, then send the invoice.';
|
|
79
|
+
if (account.wallets.length === 0) {
|
|
80
|
+
return 'Your CoinPay account has no wallet yet. Add one on CoinPay, refresh the connection here, then send the invoice.';
|
|
81
|
+
}
|
|
82
|
+
const wanted = clean(input.currency, 20).toUpperCase();
|
|
83
|
+
const wallet = wanted === ''
|
|
84
|
+
? account.wallets.length === 1
|
|
85
|
+
? account.wallets[0]
|
|
86
|
+
: undefined
|
|
87
|
+
: account.wallets.find((w) => w.chain === wanted);
|
|
88
|
+
if (wallet === undefined) {
|
|
89
|
+
return wanted === ''
|
|
90
|
+
? `Say which coin to be paid in: ${account.wallets.map((w) => w.chain).join(', ')}.`
|
|
91
|
+
: `You have no ${wanted} wallet connected. You can be paid in: ${account.wallets.map((w) => w.chain).join(', ')}.`;
|
|
92
|
+
}
|
|
93
|
+
const client = await pool.connect();
|
|
94
|
+
try {
|
|
95
|
+
await client.query('begin');
|
|
96
|
+
const member = await client.query(`select 1 from thread_participants where thread_id = $1 and user_id = $2`, [input.threadId, input.payeeId]);
|
|
97
|
+
if (member.rows.length === 0) {
|
|
98
|
+
await client.query('rollback');
|
|
99
|
+
return 'You are not in that conversation.';
|
|
100
|
+
}
|
|
101
|
+
const inserted = await client.query(`insert into invoices (thread_id, payee_id, amount_usd, currency, wallet_address, description)
|
|
102
|
+
values ($1, $2, $3, $4, $5, $6) returning id`, [input.threadId, input.payeeId, amount, wallet.chain, wallet.address, description]);
|
|
103
|
+
const invoiceId = inserted.rows[0].id;
|
|
104
|
+
const body = description === '' ? `Invoice for $${amount}` : description;
|
|
105
|
+
const message = await client.query(`insert into messages (thread_id, sender_id, kind, body, invoice_id)
|
|
106
|
+
values ($1, $2, 'invoice', $3, $4) returning created_at`, [input.threadId, input.payeeId, body, invoiceId]);
|
|
107
|
+
await client.query(`update threads set last_message_at = $2 where id = $1`, [
|
|
108
|
+
input.threadId,
|
|
109
|
+
message.rows[0].created_at,
|
|
110
|
+
]);
|
|
111
|
+
await client.query(`update thread_participants set last_read_at = $3 where thread_id = $1 and user_id = $2`, [input.threadId, input.payeeId, message.rows[0].created_at]);
|
|
112
|
+
await client.query('commit');
|
|
113
|
+
const row = await pool.query(`${SELECT} where i.id = $1`, [invoiceId]);
|
|
114
|
+
return toInvoice(row.rows[0], coinpay);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
await client.query('rollback');
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
client.release();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** The invoices in a conversation, oldest first, for rendering beside messages. */
|
|
125
|
+
export async function listInvoicesIn(pool, coinpay, threadId) {
|
|
126
|
+
const result = await pool.query(`${SELECT} where i.thread_id = $1 order by i.created_at asc`, [threadId]);
|
|
127
|
+
return result.rows.map((row) => toInvoice(row, coinpay));
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Everything the viewer sent or can pay: their invoices, and the invoices in
|
|
131
|
+
* conversations they are in. Newest first.
|
|
132
|
+
*/
|
|
133
|
+
export async function listInvoicesFor(pool, coinpay, viewerId) {
|
|
134
|
+
const result = await pool.query(`${SELECT}
|
|
135
|
+
where exists (select 1 from thread_participants tp
|
|
136
|
+
where tp.thread_id = i.thread_id and tp.user_id = $1)
|
|
137
|
+
order by i.created_at desc limit 200`, [viewerId]);
|
|
138
|
+
return result.rows.map((row) => toInvoice(row, coinpay));
|
|
139
|
+
}
|
|
140
|
+
/** One invoice, for a participant of its conversation. Null for anybody else. */
|
|
141
|
+
export async function getInvoice(pool, coinpay, invoiceId, viewerId) {
|
|
142
|
+
const result = await pool.query(`${SELECT}
|
|
143
|
+
where i.id = $1
|
|
144
|
+
and exists (select 1 from thread_participants tp
|
|
145
|
+
where tp.thread_id = i.thread_id and tp.user_id = $2)`, [invoiceId, viewerId]);
|
|
146
|
+
const row = result.rows[0];
|
|
147
|
+
return row === undefined ? null : toInvoice(row, coinpay);
|
|
148
|
+
}
|
|
149
|
+
/** The payee takes it back. Only while unpaid. */
|
|
150
|
+
export async function cancelInvoice(pool, invoiceId, payeeId) {
|
|
151
|
+
const result = await pool.query(`update invoices set status = 'cancelled', updated_at = now()
|
|
152
|
+
where id = $1 and payee_id = $2 and status = 'sent'`, [invoiceId, payeeId]);
|
|
153
|
+
return (result.rowCount ?? 0) > 0;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get somewhere to pay. Returns the invoice with a live payment on it, or a
|
|
157
|
+
* sentence.
|
|
158
|
+
*
|
|
159
|
+
* Anyone in the conversation but the payee may pay. A payment still inside its
|
|
160
|
+
* quote window is reused; otherwise a new one is minted for the same invoice,
|
|
161
|
+
* and the id is remembered so the webhook can find its way back.
|
|
162
|
+
*/
|
|
163
|
+
export async function requestPayment(pool, coinpay, input) {
|
|
164
|
+
if (coinpay === null)
|
|
165
|
+
return 'This board has no payment rail configured.';
|
|
166
|
+
const current = await getInvoice(pool, coinpay, input.invoiceId, input.payerId);
|
|
167
|
+
if (current === null)
|
|
168
|
+
return 'No such invoice.';
|
|
169
|
+
if (current.payee.id === input.payerId)
|
|
170
|
+
return 'You cannot pay your own invoice.';
|
|
171
|
+
if (current.status === 'paid')
|
|
172
|
+
return 'That invoice is already paid.';
|
|
173
|
+
if (current.status === 'cancelled')
|
|
174
|
+
return 'That invoice was cancelled.';
|
|
175
|
+
// Ask CoinPay about the payment we have before minting another: a payer who
|
|
176
|
+
// paid and came back should see "paid", not a second quote.
|
|
177
|
+
const synced = await syncInvoice(pool, coinpay, current);
|
|
178
|
+
if (synced.status === 'paid')
|
|
179
|
+
return synced;
|
|
180
|
+
if (synced.payment !== null &&
|
|
181
|
+
synced.payment.expiresAt !== null &&
|
|
182
|
+
new Date(synced.payment.expiresAt).getTime() > Date.now() + 60_000) {
|
|
183
|
+
return synced;
|
|
184
|
+
}
|
|
185
|
+
let minted;
|
|
186
|
+
try {
|
|
187
|
+
minted = await coinpay.createPayment({
|
|
188
|
+
amountUsd: current.amountUsd,
|
|
189
|
+
chain: current.currency,
|
|
190
|
+
payeeAddress: current.walletAddress,
|
|
191
|
+
description: current.description === '' ? `Invoice ${current.id.slice(0, 8)}` : current.description,
|
|
192
|
+
redirectUrl: `${input.publicUrl}/inbox/${current.threadId}`,
|
|
193
|
+
// One quote per invoice per minute: a double click is one payment.
|
|
194
|
+
idempotencyKey: `${current.id}:${Math.floor(Date.now() / 60_000)}`,
|
|
195
|
+
metadata: {
|
|
196
|
+
source: 'agenticjobs',
|
|
197
|
+
invoice_id: current.id,
|
|
198
|
+
thread_id: current.threadId,
|
|
199
|
+
payer_id: input.payerId,
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (error instanceof CoinPayProblem)
|
|
205
|
+
return error.message;
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
// Two statements, not one with a CTE: a data-modifying CTE is not visible to
|
|
209
|
+
// the SELECT beside it, which would read the row from before the update and
|
|
210
|
+
// hand back an invoice with no payment on it.
|
|
211
|
+
const updated = await pool.query(`update invoices set coinpay_payment_id = $2, payment_address = $3, amount_crypto = $4,
|
|
212
|
+
payment_expires_at = $5, updated_at = now()
|
|
213
|
+
where id = $1 and status = 'sent'`, [
|
|
214
|
+
current.id,
|
|
215
|
+
minted.id,
|
|
216
|
+
minted.address,
|
|
217
|
+
minted.amountCrypto,
|
|
218
|
+
minted.expiresAt ?? new Date(Date.now() + 15 * 60_000).toISOString(),
|
|
219
|
+
]);
|
|
220
|
+
if ((updated.rowCount ?? 0) === 0)
|
|
221
|
+
return 'That invoice changed while the payment was being created.';
|
|
222
|
+
const saved = await pool.query(`${SELECT} where i.id = $1`, [current.id]);
|
|
223
|
+
const row = saved.rows[0];
|
|
224
|
+
return row === undefined ? 'No such invoice.' : toInvoice(row, coinpay);
|
|
225
|
+
}
|
|
226
|
+
const PAID = new Set(['confirmed', 'forwarded', 'completed', 'paid']);
|
|
227
|
+
const DEAD = new Set(['expired', 'failed', 'cancelled']);
|
|
228
|
+
/**
|
|
229
|
+
* Ask CoinPay how the current payment is doing and record the answer.
|
|
230
|
+
*
|
|
231
|
+
* Paid is paid, whichever way the news arrives. A dead quote is cleared so the
|
|
232
|
+
* next Pay mints a fresh one. Anything in between, or CoinPay not answering,
|
|
233
|
+
* leaves the invoice as it was: this is a read that happens on page load, and
|
|
234
|
+
* a provider hiccup must not turn into a changed status.
|
|
235
|
+
*/
|
|
236
|
+
export async function syncInvoice(pool, coinpay, invoice) {
|
|
237
|
+
if (coinpay === null || invoice.status !== 'sent' || invoice.payment === null)
|
|
238
|
+
return invoice;
|
|
239
|
+
let payment;
|
|
240
|
+
try {
|
|
241
|
+
payment = await coinpay.getPayment(invoice.payment.id);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return invoice;
|
|
245
|
+
}
|
|
246
|
+
if (payment === null)
|
|
247
|
+
return invoice;
|
|
248
|
+
if (PAID.has(payment.status)) {
|
|
249
|
+
await markPaid(pool, { paymentId: payment.id, txHash: payment.txHash });
|
|
250
|
+
}
|
|
251
|
+
else if (DEAD.has(payment.status)) {
|
|
252
|
+
await pool.query(`update invoices set coinpay_payment_id = null, payment_address = null, amount_crypto = null,
|
|
253
|
+
payment_expires_at = null, updated_at = now()
|
|
254
|
+
where id = $1 and coinpay_payment_id = $2 and status = 'sent'`, [invoice.id, payment.id]);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
return invoice;
|
|
258
|
+
}
|
|
259
|
+
const fresh = await pool.query(`${SELECT} where i.id = $1`, [invoice.id]);
|
|
260
|
+
const row = fresh.rows[0];
|
|
261
|
+
return row === undefined ? invoice : toInvoice(row, coinpay);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Record a payment as settled. Idempotent: the webhook fires for `confirmed`
|
|
265
|
+
* and again for `forwarded`, and a poll may land between them.
|
|
266
|
+
*/
|
|
267
|
+
export async function markPaid(pool, input) {
|
|
268
|
+
const result = await pool.query(`update invoices
|
|
269
|
+
set status = 'paid', paid_at = coalesce(paid_at, now()),
|
|
270
|
+
tx_hash = coalesce($2, tx_hash), paid_by = coalesce(paid_by, $3), updated_at = now()
|
|
271
|
+
where coinpay_payment_id = $1 and status in ('sent', 'paid')`, [input.paymentId, input.txHash, input.paidBy ?? null]);
|
|
272
|
+
return (result.rowCount ?? 0) > 0;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* A webhook from CoinPay, already verified by the caller.
|
|
276
|
+
*
|
|
277
|
+
* Only the two settlement events change anything. An expired quote is left
|
|
278
|
+
* to the next page load, which clears it the same way and does not depend on
|
|
279
|
+
* a delivery that may never come.
|
|
280
|
+
*/
|
|
281
|
+
export async function applyWebhook(pool, payload) {
|
|
282
|
+
const event = typeof payload['event'] === 'string' ? payload['event'] : '';
|
|
283
|
+
const paymentId = typeof payload['payment_id'] === 'string' ? payload['payment_id'] : '';
|
|
284
|
+
if (paymentId === '')
|
|
285
|
+
return 'ignored';
|
|
286
|
+
if (event !== 'payment.confirmed' && event !== 'payment.forwarded')
|
|
287
|
+
return 'ignored';
|
|
288
|
+
const txHash = typeof payload['tx_hash'] === 'string' ? payload['tx_hash'] : null;
|
|
289
|
+
const paid = await markPaid(pool, { paymentId, txHash });
|
|
290
|
+
return paid ? 'paid' : 'unknown';
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=invoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/core/invoices.ts"],"names":[],"mappings":"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"}
|
package/dist/core/mail.d.ts
CHANGED
|
@@ -62,3 +62,19 @@ export declare function deliverMagicLink(options: {
|
|
|
62
62
|
url: string;
|
|
63
63
|
redirect: string | null;
|
|
64
64
|
}): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* "You have a message" — and only that.
|
|
67
|
+
*
|
|
68
|
+
* The body stays on the board. A conversation here is private to the people in
|
|
69
|
+
* it; the mail servers between here and somebody's phone are not, and a mail
|
|
70
|
+
* that carries an invoice amount is the kind of thing that gets forwarded.
|
|
71
|
+
*/
|
|
72
|
+
export declare function inboxMessage(options: {
|
|
73
|
+
to: string;
|
|
74
|
+
boardName: string;
|
|
75
|
+
/** Who wrote, as the recipient would know them. */
|
|
76
|
+
from: string;
|
|
77
|
+
subject: string;
|
|
78
|
+
url: string;
|
|
79
|
+
kind: 'text' | 'invoice';
|
|
80
|
+
}): Message;
|
package/dist/core/mail.js
CHANGED
|
@@ -122,4 +122,26 @@ export async function deliverMagicLink(options) {
|
|
|
122
122
|
console.log(`magic link for ${options.email}: ${options.url}`);
|
|
123
123
|
return false;
|
|
124
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* "You have a message" — and only that.
|
|
127
|
+
*
|
|
128
|
+
* The body stays on the board. A conversation here is private to the people in
|
|
129
|
+
* it; the mail servers between here and somebody's phone are not, and a mail
|
|
130
|
+
* that carries an invoice amount is the kind of thing that gets forwarded.
|
|
131
|
+
*/
|
|
132
|
+
export function inboxMessage(options) {
|
|
133
|
+
const what = options.kind === 'invoice' ? 'sent you an invoice' : 'sent you a message';
|
|
134
|
+
const subject = `${options.from} ${what} on ${options.boardName}`;
|
|
135
|
+
const lead = options.subject === ''
|
|
136
|
+
? `${options.from} ${what}.`
|
|
137
|
+
: `${options.from} ${what} in "${options.subject}".`;
|
|
138
|
+
const text = [lead, '', options.url, '', 'Open it on the board to read and reply.'].join('\n');
|
|
139
|
+
const url = escapeHtml(options.url);
|
|
140
|
+
const html = [
|
|
141
|
+
`<p>${escapeHtml(lead)}</p>`,
|
|
142
|
+
`<p><a href="${url}">${url}</a></p>`,
|
|
143
|
+
`<p style="color:#666;font-size:12px">Open it on the board to read and reply.</p>`,
|
|
144
|
+
].join('');
|
|
145
|
+
return { to: options.to, subject, html, text };
|
|
146
|
+
}
|
|
125
147
|
//# sourceMappingURL=mail.js.map
|
package/dist/core/mail.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/core/mail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/core/mail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;AAapE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,MAAiC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAEpE,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnG,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAChC,IAAI,EAAE,MAAM,CAAC,QAAQ;oBACrB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAC;gBACH,mEAAmE;gBACnE,gEAAgE;gBAChE,6DAA6D;gBAC7D,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,GAAG,CAAC,SAAS,OAAO,CAAC,EAAE,cAAc,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;gBAC1F,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oEAAoE;gBACpE,qEAAqE;gBACrE,mBAAmB;gBACnB,GAAG,CAAC,SAAS,OAAO,CAAC,EAAE,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,QAAuB;IAC3C,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxE,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAMhC;IACC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,4BAA4B,KAAK,EAAE,CAAC;IAE5F,MAAM,IAAI,GACR,IAAI,KAAK,IAAI;QACX,CAAC,CAAC,oCAAoC,KAAK,yBAAyB;QACpE,CAAC,CAAC,kCAAkC,KAAK,kBAAkB,IAAI,sCAAsC,CAAC;IAC1G,MAAM,OAAO,GACX,IAAI,KAAK,IAAI;QACX,CAAC,CAAC,oFAAoF;QACtF,CAAC,CAAC,6EAA6E,CAAC;IAEpF,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,EAAE;QACF,OAAO,CAAC,GAAG;QACX,EAAE;QACF,kBAAkB,OAAO,CAAC,OAAO,0BAA0B;QAC3D,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG;QACX,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM;QAC5B,eAAe,GAAG,KAAK,GAAG,UAAU;QACpC,uDAAuD,OAAO,CAAC,OAAO,4BAA4B,UAAU,CAAC,OAAO,CAAC,MAAM;KAC5H,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAMtC;IACC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CACpC,gBAAgB,CAAC;YACf,EAAE,EAAE,OAAO,CAAC,KAAK;YACjB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CACH,CAAC;QACF,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAQ5B;IACC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,CAAC;IACvF,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAClE,MAAM,IAAI,GACR,OAAO,CAAC,OAAO,KAAK,EAAE;QACpB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG;QAC5B,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,QAAQ,OAAO,CAAC,OAAO,IAAI,CAAC;IACzD,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,yCAAyC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG;QACX,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM;QAC5B,eAAe,GAAG,KAAK,GAAG,UAAU;QACpC,kFAAkF;KACnF,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* response says about where it came from.
|
|
9
9
|
*/
|
|
10
10
|
import { type InstanceDescriptor } from '../schema/instance.ts';
|
|
11
|
-
export declare const USER_AGENT = "agenticjobs/0.
|
|
11
|
+
export declare const USER_AGENT = "agenticjobs/0.12.0 (+https://agenticjobs.work)";
|
|
12
12
|
export declare class FetchProblem extends Error {
|
|
13
13
|
}
|
|
14
14
|
export interface FetchOptions {
|
package/dist/markup/markdown.js
CHANGED
|
@@ -83,7 +83,10 @@ export function renderMarkdown(source, options = {}) {
|
|
|
83
83
|
const paragraph = [];
|
|
84
84
|
while (index < lines.length) {
|
|
85
85
|
const current = lines[index] ?? '';
|
|
86
|
-
|
|
86
|
+
// Block probes also match syntax the individual parsers may not accept,
|
|
87
|
+
// such as a fence with extra info. Consume it as text when no parser took
|
|
88
|
+
// this line; stopping an empty paragraph would retry it forever.
|
|
89
|
+
if (current.trim() === '' || (paragraph.length > 0 && startsBlock(current)))
|
|
87
90
|
break;
|
|
88
91
|
paragraph.push(current);
|
|
89
92
|
index += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/markup/markdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/markup/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -202,6 +202,53 @@ export const TOOLS = [
|
|
|
202
202
|
limit: integer('1-100, default 25.'),
|
|
203
203
|
}),
|
|
204
204
|
},
|
|
205
|
+
{
|
|
206
|
+
name: 'read_inbox',
|
|
207
|
+
title: 'Read the inbox',
|
|
208
|
+
description: "This account's private conversations with candidates and employers, newest first, with unread counts. Pass a thread id to read one conversation in full, with the invoices in it; reading one marks it read. There is no public commenting on this board: the inbox is how people are reached.",
|
|
209
|
+
inputSchema: object({
|
|
210
|
+
thread: string('A conversation id. Omit for the list.'),
|
|
211
|
+
}),
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'send_message',
|
|
215
|
+
title: 'Send a message',
|
|
216
|
+
description: 'Write privately to a candidate (by candidate slug) or an employer (by employer slug), or reply in a conversation (by thread id). A first message to somebody about the same job continues the conversation you already have with them. Twenty new conversations a day. They are emailed that there is a message, never the message itself. Use this to ask about a role, follow up on an application, or agree terms; use send_invoice to bill.',
|
|
217
|
+
inputSchema: object({
|
|
218
|
+
thread: string('Reply in this conversation.'),
|
|
219
|
+
candidate: string("Or start one with this candidate's slug."),
|
|
220
|
+
employer: string("Or start one with this employer's slug."),
|
|
221
|
+
job: string('The job slug this is about, when starting one. Optional.'),
|
|
222
|
+
as: string('Write as this employer (slug) instead of as yourself. You must belong to it.'),
|
|
223
|
+
subject: string('One line, when starting one. Optional.'),
|
|
224
|
+
body: string('The message. Plain text, at most 4000 characters.'),
|
|
225
|
+
}, ['body']),
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: 'send_invoice',
|
|
229
|
+
title: 'Send an invoice',
|
|
230
|
+
description: 'Bill the other side of a conversation. You are the payee: the payment settles on CoinPay straight to a wallet on your connected CoinPay account, and the board never holds it. Needs that account connected with wallet:read, which is a browser step at /me/coinpay/connect; check_billing says whether it is. Amount is in US dollars; currency is a chain you hold a wallet for (BTC, ETH, SOL, USDC_POL ...), and can be omitted when you have one wallet.',
|
|
231
|
+
inputSchema: object({
|
|
232
|
+
thread: string('The conversation to bill in.'),
|
|
233
|
+
amount: string('US dollars, like "1200" or "1200.50".'),
|
|
234
|
+
currency: string('The chain to be paid on. Omit with one wallet.'),
|
|
235
|
+
description: string('What this is for. It is the message the other side reads.'),
|
|
236
|
+
}, ['thread', 'amount']),
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'pay_invoice',
|
|
240
|
+
title: 'Pay an invoice',
|
|
241
|
+
description: 'Get a live quote to pay an invoice you were sent: the CoinPay page to pay on, and the address and crypto amount for a wallet paying directly. A quote lasts a few minutes; call again for a fresh one. Paying needs a wallet, so hand the URL to the person. Without an id, lists every invoice this account sent or can pay.',
|
|
242
|
+
inputSchema: object({
|
|
243
|
+
invoice: string('The invoice id. Omit to list.'),
|
|
244
|
+
}),
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: 'check_billing',
|
|
248
|
+
title: 'Check billing',
|
|
249
|
+
description: "Whether this board has billing at all and whether this account's CoinPay connection can be paid to: connected, which wallets, or what to do. Connecting is a browser step; this tool tells you the URL.",
|
|
250
|
+
inputSchema: object({}),
|
|
251
|
+
},
|
|
205
252
|
{
|
|
206
253
|
name: 'list_instances',
|
|
207
254
|
title: 'List boards',
|
|
@@ -434,6 +481,109 @@ export async function callTool(caller, name, args) {
|
|
|
434
481
|
return toolError(`${caller.server} is not a directory.`);
|
|
435
482
|
return text(JSON.stringify(response.body, null, 2), response.body);
|
|
436
483
|
}
|
|
484
|
+
case 'read_inbox': {
|
|
485
|
+
const thread = typeof args['thread'] === 'string' ? args['thread'].trim() : '';
|
|
486
|
+
const path = thread === '' ? '/api/v1/inbox' : `/api/v1/inbox/${encodeURIComponent(thread)}`;
|
|
487
|
+
const response = await caller.call('GET', path);
|
|
488
|
+
if (response.status === 401)
|
|
489
|
+
return toolError(signInFirst(caller));
|
|
490
|
+
if (response.status !== 200)
|
|
491
|
+
return toolError(message(response.body, 'No such conversation.'));
|
|
492
|
+
if (thread === '') {
|
|
493
|
+
const page = response.body;
|
|
494
|
+
if ((page.items ?? []).length === 0)
|
|
495
|
+
return text('The inbox is empty.', response.body);
|
|
496
|
+
}
|
|
497
|
+
return text(JSON.stringify(response.body, null, 2), response.body);
|
|
498
|
+
}
|
|
499
|
+
case 'send_message': {
|
|
500
|
+
const body = String(args['body'] ?? '');
|
|
501
|
+
const thread = typeof args['thread'] === 'string' ? args['thread'].trim() : '';
|
|
502
|
+
if (thread !== '') {
|
|
503
|
+
const response = await caller.call('POST', `/api/v1/inbox/${encodeURIComponent(thread)}/messages`, {
|
|
504
|
+
body,
|
|
505
|
+
});
|
|
506
|
+
if (response.status === 401)
|
|
507
|
+
return toolError(signInFirst(caller));
|
|
508
|
+
if (response.status !== 201)
|
|
509
|
+
return toolError(message(response.body, 'Not sent.'));
|
|
510
|
+
return text('Sent.', response.body);
|
|
511
|
+
}
|
|
512
|
+
const payload = { body };
|
|
513
|
+
for (const key of ['candidate', 'employer', 'job', 'as', 'subject']) {
|
|
514
|
+
if (typeof args[key] === 'string' && args[key] !== '')
|
|
515
|
+
payload[key] = args[key];
|
|
516
|
+
}
|
|
517
|
+
if (payload['candidate'] === undefined && payload['employer'] === undefined) {
|
|
518
|
+
return toolError('Name who this is to: candidate, employer, or thread.');
|
|
519
|
+
}
|
|
520
|
+
const response = await caller.call('POST', '/api/v1/inbox', payload);
|
|
521
|
+
if (response.status === 401)
|
|
522
|
+
return toolError(signInFirst(caller));
|
|
523
|
+
if (response.status !== 201 && response.status !== 200) {
|
|
524
|
+
return toolError(message(response.body, 'Not sent.'));
|
|
525
|
+
}
|
|
526
|
+
const started = response.body;
|
|
527
|
+
return text(`${started.created === false ? 'Added to the conversation you already have' : 'Sent'}. Thread ${started.threadId ?? ''}: ${started.url ?? ''}`, response.body);
|
|
528
|
+
}
|
|
529
|
+
case 'send_invoice': {
|
|
530
|
+
const thread = String(args['thread'] ?? '').trim();
|
|
531
|
+
const response = await caller.call('POST', `/api/v1/inbox/${encodeURIComponent(thread)}/invoices`, {
|
|
532
|
+
amount: String(args['amount'] ?? ''),
|
|
533
|
+
...(typeof args['currency'] === 'string' && args['currency'] !== '' ? { currency: args['currency'] } : {}),
|
|
534
|
+
...(typeof args['description'] === 'string' ? { description: args['description'] } : {}),
|
|
535
|
+
});
|
|
536
|
+
if (response.status === 401)
|
|
537
|
+
return toolError(signInFirst(caller));
|
|
538
|
+
if (response.status !== 201)
|
|
539
|
+
return toolError(message(response.body, 'The invoice was not sent.'));
|
|
540
|
+
const sent = response.body;
|
|
541
|
+
return text(`Invoice sent for $${sent.invoice?.amountUsd ?? ''} in ${sent.invoice?.currency ?? ''}. The other side sees Pay in the conversation.`, response.body);
|
|
542
|
+
}
|
|
543
|
+
case 'pay_invoice': {
|
|
544
|
+
const invoice = typeof args['invoice'] === 'string' ? args['invoice'].trim() : '';
|
|
545
|
+
if (invoice === '') {
|
|
546
|
+
const response = await caller.call('GET', '/api/v1/invoices');
|
|
547
|
+
if (response.status === 401)
|
|
548
|
+
return toolError(signInFirst(caller));
|
|
549
|
+
if (response.status !== 200)
|
|
550
|
+
return toolError(message(response.body, 'Could not list invoices.'));
|
|
551
|
+
return text(JSON.stringify(response.body, null, 2), response.body);
|
|
552
|
+
}
|
|
553
|
+
const response = await caller.call('POST', `/api/v1/invoices/${encodeURIComponent(invoice)}/pay`);
|
|
554
|
+
if (response.status === 401)
|
|
555
|
+
return toolError(signInFirst(caller));
|
|
556
|
+
if (response.status !== 200)
|
|
557
|
+
return toolError(message(response.body, 'No quote.'));
|
|
558
|
+
const result = response.body;
|
|
559
|
+
const inv = result.invoice;
|
|
560
|
+
if (inv?.status === 'paid')
|
|
561
|
+
return text('That invoice is already paid.', response.body);
|
|
562
|
+
if (inv?.payment === null || inv?.payment === undefined) {
|
|
563
|
+
return text('No quote came back. Try again in a moment.', response.body);
|
|
564
|
+
}
|
|
565
|
+
return text(`Pay at ${inv.payment.url ?? ''}${inv.payment.amountCrypto !== undefined && inv.payment.amountCrypto !== null ? ` (${inv.payment.amountCrypto} ${inv.currency ?? ''} to ${inv.payment.address ?? ''})` : ''}. The quote lasts a few minutes.`, response.body);
|
|
566
|
+
}
|
|
567
|
+
case 'check_billing': {
|
|
568
|
+
const response = await caller.call('GET', '/api/v1/coinpay');
|
|
569
|
+
if (response.status === 401)
|
|
570
|
+
return toolError(signInFirst(caller));
|
|
571
|
+
if (response.status !== 200)
|
|
572
|
+
return toolError(message(response.body, 'Could not read billing.'));
|
|
573
|
+
const state = response.body;
|
|
574
|
+
if (state.configured !== true)
|
|
575
|
+
return text('This board has no billing configured.', response.body);
|
|
576
|
+
if (state.account === null || state.account === undefined) {
|
|
577
|
+
return text(`No CoinPay account connected. Connect one in a browser: ${state.connectUrl ?? ''}`, response.body);
|
|
578
|
+
}
|
|
579
|
+
if (state.account.usable !== true) {
|
|
580
|
+
return text(`The CoinPay connection has lapsed. Reconnect in a browser: ${state.connectUrl ?? ''}`, response.body);
|
|
581
|
+
}
|
|
582
|
+
const wallets = state.account.wallets ?? [];
|
|
583
|
+
return text(wallets.length === 0
|
|
584
|
+
? 'Connected, but the CoinPay account has no wallet yet. Add one on CoinPay and refresh on /me.'
|
|
585
|
+
: `Connected. Can be paid in: ${wallets.map((w) => w.chain).join(', ')}.`, response.body);
|
|
586
|
+
}
|
|
437
587
|
default:
|
|
438
588
|
return toolError(`No tool called ${name}.`);
|
|
439
589
|
}
|