@lucid-agents/taskmarket 1.8.0 → 1.10.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.
Files changed (2) hide show
  1. package/dist/index.js +139 -49
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ var __export = (target, all) => {
6
6
  };
7
7
 
8
8
  // src/index.ts
9
- import { Command as Command67 } from "commander";
9
+ import { Command as Command68 } from "commander";
10
10
  import { createRequire } from "module";
11
11
 
12
12
  // src/commands/init.ts
@@ -4499,6 +4499,57 @@ var TaskInboxResponseSchema = external_exports.object({
4499
4499
  // than a separate notification-center feature.
4500
4500
  invitedPrivateTasks: external_exports.array(TaskResponseSchema).optional().default([])
4501
4501
  });
4502
+ var TaskActionIntent = external_exports.enum([
4503
+ "review_work",
4504
+ "select_worker",
4505
+ "submit_work",
4506
+ "settle_expired",
4507
+ "evaluate_work",
4508
+ "appeal_verdict",
4509
+ "resolve_dispute",
4510
+ "finalize_verdict",
4511
+ "rate_workers",
4512
+ "select_auction_winner"
4513
+ ]);
4514
+ var TaskActionPriority = external_exports.enum(["urgent", "required", "follow_up"]);
4515
+ var TaskActionProgressSchema = external_exports.object({
4516
+ completed: external_exports.number().int().nonnegative(),
4517
+ total: external_exports.number().int().positive()
4518
+ }).refine(({ completed, total }) => completed <= total, {
4519
+ message: "Completed progress cannot exceed the target total",
4520
+ path: ["completed"]
4521
+ });
4522
+ var TaskActionQueueItemSchema = external_exports.object({
4523
+ id: external_exports.string(),
4524
+ task: TaskResponseSchema,
4525
+ role: PendingActionSchema.shape.role,
4526
+ intent: TaskActionIntent,
4527
+ actions: PendingActionSchema.array().min(1),
4528
+ priority: TaskActionPriority,
4529
+ dueAt: external_exports.string().nullable(),
4530
+ progress: TaskActionProgressSchema.nullable().optional()
4531
+ });
4532
+ var TaskActionWaitingReason = external_exports.enum([
4533
+ "waiting_for_submissions",
4534
+ "waiting_for_worker",
4535
+ "waiting_for_review",
4536
+ "waiting_for_evaluator",
4537
+ "waiting_for_appeal_window",
4538
+ "waiting_for_settlement"
4539
+ ]);
4540
+ var TaskActionWaitingItemSchema = external_exports.object({
4541
+ id: external_exports.string(),
4542
+ task: TaskResponseSchema,
4543
+ role: PendingActionSchema.shape.role,
4544
+ reason: TaskActionWaitingReason,
4545
+ dueAt: external_exports.string().nullable()
4546
+ });
4547
+ var TaskActionQueueResponseSchema = external_exports.object({
4548
+ items: TaskActionQueueItemSchema.array(),
4549
+ total: external_exports.number().int().nonnegative(),
4550
+ urgentTotal: external_exports.number().int().nonnegative(),
4551
+ waiting: TaskActionWaitingItemSchema.array()
4552
+ });
4502
4553
  var TaskDetailResponseSchema = TaskResponseSchema.extend({
4503
4554
  pendingActions: PendingActionSchema.array(),
4504
4555
  awards: TaskAwardSchema.array().optional(),
@@ -4740,6 +4791,20 @@ var HealthResponseSchema = external_exports.object({
4740
4791
  status: external_exports.literal("ok"),
4741
4792
  timestamp: external_exports.string(),
4742
4793
  environment: external_exports.string(),
4794
+ /**
4795
+ * The commit this process was built from, when the deploy stamped one.
4796
+ *
4797
+ * Reported so a deploy can prove it actually replaced what was running. The production
4798
+ * deploy workflow uploads with `railway up` and previously did so with `--detach`, which
4799
+ * returns as soon as the upload is accepted -- so the job went green whether the build
4800
+ * succeeded, failed, or never started, and a failed build left the previous version
4801
+ * serving with nothing to say so. A health check cannot distinguish that either: the old
4802
+ * version answers `ok` perfectly happily.
4803
+ *
4804
+ * Absent rather than a placeholder when unstamped, so a local or unstamped process cannot
4805
+ * be mistaken for a verified one.
4806
+ */
4807
+ commitSha: external_exports.string().optional(),
4743
4808
  /**
4744
4809
  * The submission limits this process is actually enforcing, after any environment
4745
4810
  * override. Reported because a limit a caller cannot observe is a limit a test can only
@@ -8529,9 +8594,24 @@ var inboxCommand = new Command43("inbox").description("Show tasks you created an
8529
8594
  printResult({ ...taskResult, pendingBids });
8530
8595
  });
8531
8596
 
8532
- // src/commands/deposit.ts
8597
+ // src/commands/actions.ts
8533
8598
  import { Command as Command44 } from "commander";
8534
- var depositCommand = new Command44("deposit").description("Show wallet address and network info for funding").action(async () => {
8599
+ var actionsCommand = new Command44("actions").description("Show lifecycle actions awaiting you, grouped and prioritized by the server").action(async () => {
8600
+ const auth = await signReadAuth();
8601
+ if (!auth) {
8602
+ printError("No keystore found. Run `taskmarket init` first.");
8603
+ return;
8604
+ }
8605
+ const params = new URLSearchParams({ address: auth.walletAddress });
8606
+ const queue = await apiGet(`/api/agents/action-queue?${params.toString()}`, {
8607
+ headers: auth.headers
8608
+ });
8609
+ printResult(queue);
8610
+ });
8611
+
8612
+ // src/commands/deposit.ts
8613
+ import { Command as Command45 } from "commander";
8614
+ var depositCommand = new Command45("deposit").description("Show wallet address and network info for funding").action(async () => {
8535
8615
  let address;
8536
8616
  try {
8537
8617
  address = await getWalletAddress();
@@ -8558,11 +8638,11 @@ var depositCommand = new Command44("deposit").description("Show wallet address a
8558
8638
  });
8559
8639
 
8560
8640
  // src/commands/wallet/index.ts
8561
- import { Command as Command50 } from "commander";
8641
+ import { Command as Command51 } from "commander";
8562
8642
 
8563
8643
  // src/commands/wallet/balance.ts
8564
- import { Command as Command45 } from "commander";
8565
- var walletBalanceCommand = new Command45("balance").description("Show USDC balance").option("--address <addr>", "Address to check (defaults to own wallet)").action(async (opts) => {
8644
+ import { Command as Command46 } from "commander";
8645
+ var walletBalanceCommand = new Command46("balance").description("Show USDC balance").option("--address <addr>", "Address to check (defaults to own wallet)").action(async (opts) => {
8566
8646
  let address = opts.address;
8567
8647
  if (!address) {
8568
8648
  const keystore = await loadKeystore();
@@ -8573,7 +8653,7 @@ var walletBalanceCommand = new Command45("balance").description("Show USDC balan
8573
8653
  });
8574
8654
 
8575
8655
  // src/commands/wallet/import.ts
8576
- import { Command as Command46 } from "commander";
8656
+ import { Command as Command47 } from "commander";
8577
8657
  import { createInterface as createInterface2 } from "readline";
8578
8658
  import { privateKeyToAccount as privateKeyToAccount4 } from "viem/accounts";
8579
8659
  function normalizePrivateKey(raw) {
@@ -8608,7 +8688,7 @@ function promptHiddenInput(prompt) {
8608
8688
  });
8609
8689
  });
8610
8690
  }
8611
- var walletImportCommand = new Command46("import").description("Import an existing private key as the agent wallet").option("--key <privateKey>", "Private key to import (64 hex chars, with or without 0x prefix)").option(
8691
+ var walletImportCommand = new Command47("import").description("Import an existing private key as the agent wallet").option("--key <privateKey>", "Private key to import (64 hex chars, with or without 0x prefix)").option(
8612
8692
  "--yes",
8613
8693
  "Confirm legal acceptance non-interactively after reviewing every current policy"
8614
8694
  ).action(async (opts) => {
@@ -8687,11 +8767,11 @@ var walletImportCommand = new Command46("import").description("Import an existin
8687
8767
  });
8688
8768
 
8689
8769
  // src/commands/wallet/set-withdrawal-address.ts
8690
- import { Command as Command47 } from "commander";
8770
+ import { Command as Command48 } from "commander";
8691
8771
  function isValidAddress(addr) {
8692
8772
  return /^0x[a-fA-F0-9]{40}$/.test(addr);
8693
8773
  }
8694
- var setWithdrawalAddressCommand = new Command47("set-withdrawal-address").description("Set a withdrawal address for USDC withdrawals (one-time, free)").argument("<address>", "Ethereum address to receive withdrawals").action(async (address) => {
8774
+ var setWithdrawalAddressCommand = new Command48("set-withdrawal-address").description("Set a withdrawal address for USDC withdrawals (one-time, free)").argument("<address>", "Ethereum address to receive withdrawals").action(async (address) => {
8695
8775
  if (!isValidAddress(address)) {
8696
8776
  printError("Invalid Ethereum address: must be 0x followed by 40 hex characters");
8697
8777
  return;
@@ -8718,8 +8798,8 @@ var setWithdrawalAddressCommand = new Command47("set-withdrawal-address").descri
8718
8798
  });
8719
8799
 
8720
8800
  // src/commands/wallet/publish-key.ts
8721
- import { Command as Command48 } from "commander";
8722
- var publishKeyCommand = new Command48("publish-key").description("Publish your secp256k1 public key so others can encrypt files for you").action(async () => {
8801
+ import { Command as Command49 } from "commander";
8802
+ var publishKeyCommand = new Command49("publish-key").description("Publish your secp256k1 public key so others can encrypt files for you").action(async () => {
8723
8803
  let keystore;
8724
8804
  try {
8725
8805
  keystore = await loadKeystore();
@@ -8739,13 +8819,13 @@ var publishKeyCommand = new Command48("publish-key").description("Publish your s
8739
8819
  });
8740
8820
 
8741
8821
  // src/commands/wallet/withdraw-dreams.ts
8742
- import { Command as Command49 } from "commander";
8822
+ import { Command as Command50 } from "commander";
8743
8823
  import { toHex as toHex2 } from "viem";
8744
8824
  var AUTHORIZATION_VALIDITY_SECONDS = 300;
8745
8825
  function isValidAddress2(addr) {
8746
8826
  return /^0x[a-fA-F0-9]{40}$/.test(addr);
8747
8827
  }
8748
- var withdrawDreamsCommand = new Command49("withdraw-dreams").description("Withdraw accumulated DREAMS rewards to the withdrawal address").option("--destination <addr>", "Destination address (defaults to registered withdrawal address)").action(async (opts) => {
8828
+ var withdrawDreamsCommand = new Command50("withdraw-dreams").description("Withdraw accumulated DREAMS rewards to the withdrawal address").option("--destination <addr>", "Destination address (defaults to registered withdrawal address)").action(async (opts) => {
8749
8829
  let keystore;
8750
8830
  try {
8751
8831
  keystore = await loadKeystore();
@@ -8799,7 +8879,7 @@ var withdrawDreamsCommand = new Command49("withdraw-dreams").description("Withdr
8799
8879
  });
8800
8880
 
8801
8881
  // src/commands/wallet/index.ts
8802
- var walletCommand = new Command50("wallet").description("Wallet management commands");
8882
+ var walletCommand = new Command51("wallet").description("Wallet management commands");
8803
8883
  walletCommand.addCommand(walletBalanceCommand);
8804
8884
  walletCommand.addCommand(walletImportCommand);
8805
8885
  walletCommand.addCommand(setWithdrawalAddressCommand);
@@ -8807,7 +8887,7 @@ walletCommand.addCommand(publishKeyCommand);
8807
8887
  walletCommand.addCommand(withdrawDreamsCommand);
8808
8888
 
8809
8889
  // src/commands/withdraw.ts
8810
- import { Command as Command51 } from "commander";
8890
+ import { Command as Command52 } from "commander";
8811
8891
  import { toHex as toHex3 } from "viem";
8812
8892
  var USDC_TYPES = {
8813
8893
  TransferWithAuthorization: [
@@ -8819,7 +8899,7 @@ var USDC_TYPES = {
8819
8899
  { name: "nonce", type: "bytes32" }
8820
8900
  ]
8821
8901
  };
8822
- var withdrawCommand = new Command51("withdraw").description("Withdraw USDC to the registered withdrawal address").argument("<amount>", "Amount in USDC (e.g. 5 for 5 USDC)").action(async (amount) => {
8902
+ var withdrawCommand = new Command52("withdraw").description("Withdraw USDC to the registered withdrawal address").argument("<amount>", "Amount in USDC (e.g. 5 for 5 USDC)").action(async (amount) => {
8823
8903
  const parsed = parseFloat(amount);
8824
8904
  if (isNaN(parsed) || parsed <= 0) {
8825
8905
  printError("Invalid amount: must be a positive number (e.g. 5 for 5 USDC)");
@@ -8878,9 +8958,9 @@ var withdrawCommand = new Command51("withdraw").description("Withdraw USDC to th
8878
8958
  });
8879
8959
 
8880
8960
  // src/commands/encrypt.ts
8881
- import { Command as Command52 } from "commander";
8961
+ import { Command as Command53 } from "commander";
8882
8962
  import { promises as fs3 } from "fs";
8883
- var encryptCommand = new Command52("encrypt").description("Encrypt a file with ECIES using wallet keys").argument("<file>", "Path to the file to encrypt").option("--recipient <address>", "Recipient wallet address (default: self)").option("--output <path>", "Output path (default: <file>.enc)").action(async (file, opts) => {
8963
+ var encryptCommand = new Command53("encrypt").description("Encrypt a file with ECIES using wallet keys").argument("<file>", "Path to the file to encrypt").option("--recipient <address>", "Recipient wallet address (default: self)").option("--output <path>", "Output path (default: <file>.enc)").action(async (file, opts) => {
8884
8964
  let plaintext;
8885
8965
  try {
8886
8966
  plaintext = await fs3.readFile(file);
@@ -8928,9 +9008,9 @@ var encryptCommand = new Command52("encrypt").description("Encrypt a file with E
8928
9008
  });
8929
9009
 
8930
9010
  // src/commands/decrypt.ts
8931
- import { Command as Command53 } from "commander";
9011
+ import { Command as Command54 } from "commander";
8932
9012
  import { promises as fs4 } from "fs";
8933
- var decryptCommand = new Command53("decrypt").description("Decrypt a file using your wallet key").argument("<file>", "Path to the encrypted file").option("--output <path>", "Output path (default: strips .enc, otherwise appends .dec)").action(async (file, opts) => {
9013
+ var decryptCommand = new Command54("decrypt").description("Decrypt a file using your wallet key").argument("<file>", "Path to the encrypted file").option("--output <path>", "Output path (default: strips .enc, otherwise appends .dec)").action(async (file, opts) => {
8934
9014
  let ciphertext;
8935
9015
  try {
8936
9016
  ciphertext = await fs4.readFile(file);
@@ -8970,7 +9050,7 @@ var decryptCommand = new Command53("decrypt").description("Decrypt a file using
8970
9050
  });
8971
9051
 
8972
9052
  // src/commands/xmtp.ts
8973
- import { Command as Command54 } from "commander";
9053
+ import { Command as Command55 } from "commander";
8974
9054
 
8975
9055
  // src/lib/xmtp-client.ts
8976
9056
  import os3 from "os";
@@ -9734,7 +9814,7 @@ function getDefaultQueryTimeoutMs() {
9734
9814
  }
9735
9815
  return Math.floor(parsed);
9736
9816
  }
9737
- var xmtpCommand = new Command54("xmtp").description("Manage XMTP messaging for this agent");
9817
+ var xmtpCommand = new Command55("xmtp").description("Manage XMTP messaging for this agent");
9738
9818
  xmtpCommand.command("init").description("Initialize XMTP client and register installation metadata with backend").action(async () => {
9739
9819
  const keystore = await loadKeystore();
9740
9820
  const client = await createXmtpClient({
@@ -9971,7 +10051,7 @@ xmtpCommand.command("purge").description("Revoke stale XMTP installations that h
9971
10051
  });
9972
10052
 
9973
10053
  // src/commands/daemon.ts
9974
- import { Command as Command55 } from "commander";
10054
+ import { Command as Command56 } from "commander";
9975
10055
  function diffTaskStatuses(prev, next) {
9976
10056
  const changes = [];
9977
10057
  for (const [taskId, newStatus] of next) {
@@ -9999,7 +10079,7 @@ function sleepOrAbort(ms, signal) {
9999
10079
  });
10000
10080
  }
10001
10081
  var MAX_SEEN_TASK_IDS = 2e3;
10002
- var daemonCommand = new Command55("daemon").description("Long-running agent daemon: XMTP stream, heartbeats, and task polling").option("--heartbeat-interval <ms>", "Heartbeat interval in milliseconds", "1800000").option("--inbox-interval <ms>", "Inbox poll interval in milliseconds", "15000").option("--task-interval <ms>", "New task poll interval in milliseconds", "15000").option(
10082
+ var daemonCommand = new Command56("daemon").description("Long-running agent daemon: XMTP stream, heartbeats, and task polling").option("--heartbeat-interval <ms>", "Heartbeat interval in milliseconds", "1800000").option("--inbox-interval <ms>", "Inbox poll interval in milliseconds", "15000").option("--task-interval <ms>", "New task poll interval in milliseconds", "15000").option(
10003
10083
  "--auction-poll-interval <ms>",
10004
10084
  "Poll interval for clock-based auction tasks (dutch/reverse_dutch) in milliseconds",
10005
10085
  "15000"
@@ -10281,7 +10361,16 @@ var daemonCommand = new Command55("daemon").description("Long-running agent daem
10281
10361
  fromAddress: email.fromAddress,
10282
10362
  subject: email.subject,
10283
10363
  bodyText: email.bodyText,
10284
- receivedAt: email.receivedAt
10364
+ receivedAt: email.receivedAt,
10365
+ // Carried onto the event, not left in the API response. This stdout stream
10366
+ // is the documented machine-readable interface an agent framework consumes,
10367
+ // so it is the last boundary where anything can say what this content is:
10368
+ // text written by an unauthenticated sender, whose `fromAddress` is a claim
10369
+ // rather than an identity unless senderVerification says 'pass'. Defaulted
10370
+ // rather than omitted so a consumer never has to distinguish "old backend"
10371
+ // from "verified".
10372
+ source: email.source ?? "external_email",
10373
+ senderVerification: email.senderVerification ?? "unverified"
10285
10374
  });
10286
10375
  try {
10287
10376
  await apiPost("/api/emails/mark-read", {
@@ -10323,11 +10412,11 @@ var daemonCommand = new Command55("daemon").description("Long-running agent daem
10323
10412
  );
10324
10413
 
10325
10414
  // src/commands/email/index.ts
10326
- import { Command as Command64 } from "commander";
10415
+ import { Command as Command65 } from "commander";
10327
10416
 
10328
10417
  // src/commands/email/register.ts
10329
- import { Command as Command56 } from "commander";
10330
- var registerCommand = new Command56("register").description("Register an email address for this agent").requiredOption("--username <name>", "Desired username (e.g. myagent)").action(async (opts) => {
10418
+ import { Command as Command57 } from "commander";
10419
+ var registerCommand = new Command57("register").description("Register an email address for this agent").requiredOption("--username <name>", "Desired username (e.g. myagent)").action(async (opts) => {
10331
10420
  const check = await apiGet(
10332
10421
  `/api/emails/check-username?username=${encodeURIComponent(opts.username)}`
10333
10422
  );
@@ -10348,8 +10437,8 @@ var registerCommand = new Command56("register").description("Register an email a
10348
10437
  });
10349
10438
 
10350
10439
  // src/commands/email/inbox.ts
10351
- import { Command as Command57 } from "commander";
10352
- var inboxCommand2 = new Command57("inbox").description("List emails in your inbox").option("--limit <n>", "Number of emails to return", "20").option("--unread", "Show only unread emails").action(async (opts) => {
10440
+ import { Command as Command58 } from "commander";
10441
+ var inboxCommand2 = new Command58("inbox").description("List emails in your inbox").option("--limit <n>", "Number of emails to return", "20").option("--unread", "Show only unread emails").action(async (opts) => {
10353
10442
  const keystore = await loadKeystore();
10354
10443
  const params = new URLSearchParams({
10355
10444
  deviceId: keystore.deviceId,
@@ -10364,8 +10453,8 @@ var inboxCommand2 = new Command57("inbox").description("List emails in your inbo
10364
10453
  });
10365
10454
 
10366
10455
  // src/commands/email/read.ts
10367
- import { Command as Command58 } from "commander";
10368
- var readCommand = new Command58("read").description("Read an email by ID (marks it as read)").argument("<id>", "Email ID").action(async (id) => {
10456
+ import { Command as Command59 } from "commander";
10457
+ var readCommand = new Command59("read").description("Read an email by ID (marks it as read)").argument("<id>", "Email ID").action(async (id) => {
10369
10458
  const keystore = await loadKeystore();
10370
10459
  const params = new URLSearchParams({
10371
10460
  deviceId: keystore.deviceId,
@@ -10377,8 +10466,8 @@ var readCommand = new Command58("read").description("Read an email by ID (marks
10377
10466
  });
10378
10467
 
10379
10468
  // src/commands/email/send.ts
10380
- import { Command as Command59 } from "commander";
10381
- var sendCommand = new Command59("send").description("Send an email").requiredOption("--to <address>", "Recipient email address").requiredOption("--subject <subject>", "Email subject").requiredOption("--body <text>", "Email body text").action(async (opts) => {
10469
+ import { Command as Command60 } from "commander";
10470
+ var sendCommand = new Command60("send").description("Send an email").requiredOption("--to <address>", "Recipient email address").requiredOption("--subject <subject>", "Email subject").requiredOption("--body <text>", "Email body text").action(async (opts) => {
10382
10471
  const keystore = await loadKeystore();
10383
10472
  const { data: result, idempotencyKey } = await apiPost("/api/emails/send", {
10384
10473
  deviceId: keystore.deviceId,
@@ -10391,8 +10480,8 @@ var sendCommand = new Command59("send").description("Send an email").requiredOpt
10391
10480
  });
10392
10481
 
10393
10482
  // src/commands/email/reply.ts
10394
- import { Command as Command60 } from "commander";
10395
- var replyCommand = new Command60("reply").description("Reply to an email").argument("<id>", "Email ID to reply to").requiredOption("--body <text>", "Reply body text").action(async (id, opts) => {
10483
+ import { Command as Command61 } from "commander";
10484
+ var replyCommand = new Command61("reply").description("Reply to an email").argument("<id>", "Email ID to reply to").requiredOption("--body <text>", "Reply body text").action(async (id, opts) => {
10396
10485
  const keystore = await loadKeystore();
10397
10486
  const params = new URLSearchParams({
10398
10487
  deviceId: keystore.deviceId,
@@ -10414,8 +10503,8 @@ var replyCommand = new Command60("reply").description("Reply to an email").argum
10414
10503
  });
10415
10504
 
10416
10505
  // src/commands/email/delete.ts
10417
- import { Command as Command61 } from "commander";
10418
- var deleteCommand = new Command61("delete").description("Delete an email by ID").argument("<id>", "Email ID").action(async (id) => {
10506
+ import { Command as Command62 } from "commander";
10507
+ var deleteCommand = new Command62("delete").description("Delete an email by ID").argument("<id>", "Email ID").action(async (id) => {
10419
10508
  const keystore = await loadKeystore();
10420
10509
  const { data: result, idempotencyKey } = await apiPost(
10421
10510
  "/api/emails/delete",
@@ -10429,15 +10518,15 @@ var deleteCommand = new Command61("delete").description("Delete an email by ID")
10429
10518
  });
10430
10519
 
10431
10520
  // src/commands/email/address.ts
10432
- import { Command as Command62 } from "commander";
10433
- var addressCommand2 = new Command62("address").description("Show your registered email address").action(async () => {
10521
+ import { Command as Command63 } from "commander";
10522
+ var addressCommand2 = new Command63("address").description("Show your registered email address").action(async () => {
10434
10523
  const keystore = await loadKeystore();
10435
10524
  const result = await apiGet(`/api/agents/stats?address=${keystore.walletAddress}`);
10436
10525
  printResult({ emailAddress: result.emailAddress ?? null });
10437
10526
  });
10438
10527
 
10439
10528
  // src/commands/email/mark-read.ts
10440
- import { Command as Command63 } from "commander";
10529
+ import { Command as Command64 } from "commander";
10441
10530
  async function setReadStatus(id, read) {
10442
10531
  const keystore = await loadKeystore();
10443
10532
  const { data: result, idempotencyKey } = await apiPost(
@@ -10451,12 +10540,12 @@ async function setReadStatus(id, read) {
10451
10540
  );
10452
10541
  printResult({ id: result.id, isRead: result.isRead }, { idempotencyKey });
10453
10542
  }
10454
- var markReadCommand = new Command63("mark-read").description("Mark an email as read or unread").argument("<id>", "Email ID").option("--unread", "Mark as unread instead of read").action(async (id, opts) => {
10543
+ var markReadCommand = new Command64("mark-read").description("Mark an email as read or unread").argument("<id>", "Email ID").option("--unread", "Mark as unread instead of read").action(async (id, opts) => {
10455
10544
  await setReadStatus(id, !opts.unread);
10456
10545
  });
10457
10546
 
10458
10547
  // src/commands/email/index.ts
10459
- var emailCommand = new Command64("email").description("Email management commands");
10548
+ var emailCommand = new Command65("email").description("Email management commands");
10460
10549
  emailCommand.addCommand(registerCommand);
10461
10550
  emailCommand.addCommand(inboxCommand2);
10462
10551
  emailCommand.addCommand(readCommand);
@@ -10467,11 +10556,11 @@ emailCommand.addCommand(addressCommand2);
10467
10556
  emailCommand.addCommand(markReadCommand);
10468
10557
 
10469
10558
  // src/commands/requester/index.ts
10470
- import { Command as Command66 } from "commander";
10559
+ import { Command as Command67 } from "commander";
10471
10560
 
10472
10561
  // src/commands/requester/stats.ts
10473
- import { Command as Command65 } from "commander";
10474
- var requesterStatsCmd = new Command65("stats").description("Get requester reputation stats for an address").argument("<address>", "Wallet address of the requester").action(async (address) => {
10562
+ import { Command as Command66 } from "commander";
10563
+ var requesterStatsCmd = new Command66("stats").description("Get requester reputation stats for an address").argument("<address>", "Wallet address of the requester").action(async (address) => {
10475
10564
  if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
10476
10565
  printError("Address must be a 0x-prefixed 20-byte hex string");
10477
10566
  return;
@@ -10485,12 +10574,12 @@ var requesterStatsCmd = new Command65("stats").description("Get requester reputa
10485
10574
  });
10486
10575
 
10487
10576
  // src/commands/requester/index.ts
10488
- var requesterCmd = new Command66("requester").description("Requester reputation commands").addCommand(requesterStatsCmd);
10577
+ var requesterCmd = new Command67("requester").description("Requester reputation commands").addCommand(requesterStatsCmd);
10489
10578
 
10490
10579
  // src/index.ts
10491
10580
  var require2 = createRequire(import.meta.url);
10492
10581
  var { version } = require2("../package.json");
10493
- var program = new Command67();
10582
+ var program = new Command68();
10494
10583
  program.name("taskmarket").description("Taskmarket CLI for AI agents").version(version);
10495
10584
  program.addCommand(initCommand);
10496
10585
  program.addCommand(walletCommand);
@@ -10500,6 +10589,7 @@ program.addCommand(statsCommand);
10500
10589
  program.addCommand(taskCommand);
10501
10590
  program.addCommand(agentsCommand);
10502
10591
  program.addCommand(inboxCommand);
10592
+ program.addCommand(actionsCommand);
10503
10593
  program.addCommand(depositCommand);
10504
10594
  program.addCommand(withdrawCommand);
10505
10595
  program.addCommand(encryptCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucid-agents/taskmarket",
3
- "version": "1.8.0",
3
+ "version": "1.10.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "taskmarket": "./dist/index.js"
@@ -17,8 +17,8 @@
17
17
  "tsx": "^4.7.0",
18
18
  "typescript": "^5.3.3",
19
19
  "vitest": "^2.0.0",
20
- "@taskmarket/prettier-config": "0.0.0",
21
20
  "@taskmarket/eslint-config": "0.0.0",
21
+ "@taskmarket/prettier-config": "0.0.0",
22
22
  "@taskmarket/shared": "2.0.0"
23
23
  },
24
24
  "files": [