@panal/sdk 0.8.0 → 0.9.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/dist/abis.d.ts CHANGED
@@ -240,6 +240,15 @@ export declare const escrowAbi: readonly [{
240
240
  readonly type: "uint256";
241
241
  }];
242
242
  readonly outputs: readonly [];
243
+ }, {
244
+ readonly type: "function";
245
+ readonly name: "openDispute";
246
+ readonly stateMutability: "nonpayable";
247
+ readonly inputs: readonly [{
248
+ readonly name: "taskId";
249
+ readonly type: "uint256";
250
+ }];
251
+ readonly outputs: readonly [];
243
252
  }];
244
253
  export declare const erc20Abi: readonly [{
245
254
  readonly type: "function";
package/dist/abis.js CHANGED
@@ -172,6 +172,16 @@ export const escrowAbi = [
172
172
  inputs: [{ name: 'taskId', type: 'uint256' }],
173
173
  outputs: [],
174
174
  },
175
+ // Lo unico que detiene el autoRelease de 3 dias. Faltaba en este ABI, asi
176
+ // que desde el SDK no habia forma de disputar una entrega: tocaba ir al
177
+ // contrato a mano justo cuando corre el reloj.
178
+ {
179
+ type: 'function',
180
+ name: 'openDispute',
181
+ stateMutability: 'nonpayable',
182
+ inputs: [{ name: 'taskId', type: 'uint256' }],
183
+ outputs: [],
184
+ },
175
185
  ];
176
186
  export const erc20Abi = [
177
187
  {
package/dist/client.d.ts CHANGED
@@ -130,6 +130,35 @@ export declare class PanalClient {
130
130
  * registrada: sin ella el agente no construye reputación.
131
131
  */
132
132
  approveTask(taskId: bigint, rating: number): Promise<Hex>;
133
+ /**
134
+ * Cancela una tarea que nunca arrancó y recupera lo bloqueado.
135
+ *
136
+ * El escrow solo lo permite al cliente, con la tarea todavía `Open` —o sea
137
+ * sin entrega— y además vencido el plazo o sin worker asignado. Con worker
138
+ * asignado hay que esperar al deadline: si no, el cliente podría retirarle
139
+ * el encargo a alguien que ya está trabajando.
140
+ *
141
+ * Hace falta cuando el encargo no llegó a su destino y el pago sí: el brief
142
+ * se entrega después de crear la tarea, así que un endpoint caído o un texto
143
+ * que el agente rechaza dejan dinero parado hasta el plazo. Sin esto, la
144
+ * única salida era llamar al contrato a mano.
145
+ *
146
+ * OJO: el escrow es pull payment. Esto ACREDITA el reembolso, no lo envía.
147
+ * Para tenerlo en la wallet hay que llamar después a `withdraw()`.
148
+ */
149
+ cancelTask(taskId: bigint): Promise<Hex>;
150
+ /**
151
+ * Abre una disputa sobre una entrega, y con ello para el reloj.
152
+ *
153
+ * Urge más de lo que parece: si no apruebas ni disputas, el escrow libera el
154
+ * pago solo a los 3 días de la entrega, con un 5/5 implícito. O sea que ante
155
+ * una entrega mala, no hacer nada NO es neutral: es pagar y además regalar la
156
+ * mejor valoración. Disputar es lo único que detiene esa cuenta atrás.
157
+ *
158
+ * La resuelve el arbitrator repartiendo el importe. Si no lo hace en 14 días,
159
+ * cualquiera puede llamar a `resolveStuckDispute` y el cliente recupera todo.
160
+ */
161
+ openDispute(taskId: bigint): Promise<Hex>;
133
162
  /**
134
163
  * Registra tu agente en el marketplace. Lo llama la wallet que trabajará y
135
164
  * cobrará: en Panal el agente ES una dirección, no una fila en una base de
package/dist/client.js CHANGED
@@ -341,6 +341,67 @@ export class PanalClient {
341
341
  await this.publicClient.waitForTransactionReceipt({ hash });
342
342
  return hash;
343
343
  }
344
+ /**
345
+ * Cancela una tarea que nunca arrancó y recupera lo bloqueado.
346
+ *
347
+ * El escrow solo lo permite al cliente, con la tarea todavía `Open` —o sea
348
+ * sin entrega— y además vencido el plazo o sin worker asignado. Con worker
349
+ * asignado hay que esperar al deadline: si no, el cliente podría retirarle
350
+ * el encargo a alguien que ya está trabajando.
351
+ *
352
+ * Hace falta cuando el encargo no llegó a su destino y el pago sí: el brief
353
+ * se entrega después de crear la tarea, así que un endpoint caído o un texto
354
+ * que el agente rechaza dejan dinero parado hasta el plazo. Sin esto, la
355
+ * única salida era llamar al contrato a mano.
356
+ *
357
+ * OJO: el escrow es pull payment. Esto ACREDITA el reembolso, no lo envía.
358
+ * Para tenerlo en la wallet hay que llamar después a `withdraw()`.
359
+ */
360
+ async cancelTask(taskId) {
361
+ const wallet = this.wallet();
362
+ const task = await this.getTask(taskId);
363
+ if (task.status !== TaskStatus.Open) {
364
+ throw new Error(`La tarea #${taskId} está "${TaskStatus[task.status]}": solo se cancela lo que sigue abierto.`);
365
+ }
366
+ const hash = await wallet.writeContract({
367
+ address: this.addresses.escrow,
368
+ abi: escrowAbi,
369
+ functionName: 'cancelTask',
370
+ args: [taskId],
371
+ chain: chainFor(this.network),
372
+ account: this.account,
373
+ });
374
+ await this.publicClient.waitForTransactionReceipt({ hash });
375
+ return hash;
376
+ }
377
+ /**
378
+ * Abre una disputa sobre una entrega, y con ello para el reloj.
379
+ *
380
+ * Urge más de lo que parece: si no apruebas ni disputas, el escrow libera el
381
+ * pago solo a los 3 días de la entrega, con un 5/5 implícito. O sea que ante
382
+ * una entrega mala, no hacer nada NO es neutral: es pagar y además regalar la
383
+ * mejor valoración. Disputar es lo único que detiene esa cuenta atrás.
384
+ *
385
+ * La resuelve el arbitrator repartiendo el importe. Si no lo hace en 14 días,
386
+ * cualquiera puede llamar a `resolveStuckDispute` y el cliente recupera todo.
387
+ */
388
+ async openDispute(taskId) {
389
+ const wallet = this.wallet();
390
+ const task = await this.getTask(taskId);
391
+ if (task.status !== TaskStatus.Delivered) {
392
+ throw new Error(`La tarea #${taskId} está "${TaskStatus[task.status]}": solo se disputa lo entregado.`);
393
+ }
394
+ const hash = await wallet.writeContract({
395
+ address: this.addresses.escrow,
396
+ abi: escrowAbi,
397
+ functionName: 'openDispute',
398
+ args: [taskId],
399
+ chain: chainFor(this.network),
400
+ account: this.account,
401
+ });
402
+ await this.publicClient.waitForTransactionReceipt({ hash });
403
+ return hash;
404
+ }
344
405
  // -------------------------------------------------------------------------
345
406
  // Lado del AGENTE — darse de alta, trabajar y entregar.
346
407
  // -------------------------------------------------------------------------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panal/sdk",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "SDK de Panal: contrata agentes de IA autonomos on-chain en Monad",
5
5
  "type": "module",
6
6
  "license": "MIT",