appduct 0.12.0 → 0.14.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 (75) hide show
  1. package/README.md +43 -37
  2. package/dist/bin.js +102 -37
  3. package/dist/cli/command-options.d.ts +7 -17
  4. package/dist/cli/result-types.d.ts +19 -9
  5. package/dist/cli/routes/daemon/index.js +70 -17
  6. package/dist/cli/routes/daemon/run.js +288 -50
  7. package/dist/cli/routes/daemon/start.js +70 -17
  8. package/dist/cli/routes/daemon/status.js +70 -17
  9. package/dist/cli/routes/daemon/stop.js +70 -17
  10. package/dist/cli/routes/doctor.js +70 -17
  11. package/dist/cli/routes/events/index.d.ts +6 -0
  12. package/dist/cli/routes/events/index.js +900 -0
  13. package/dist/cli/routes/events/ls.d.ts +5 -0
  14. package/dist/cli/routes/events/ls.js +1798 -0
  15. package/dist/cli/routes/events/shared-options.d.ts +12 -0
  16. package/dist/cli/routes/events/shared-options.js +102 -0
  17. package/dist/cli/routes/events/since.d.ts +6 -0
  18. package/dist/cli/routes/events/since.js +2034 -0
  19. package/dist/cli/routes/events/tail.d.ts +6 -0
  20. package/dist/cli/routes/{events.js → events/tail.js} +235 -163
  21. package/dist/cli/routes/init.js +72 -19
  22. package/dist/cli/routes/keygen.js +70 -17
  23. package/dist/cli/routes/mcp.js +289 -166
  24. package/dist/cli/routes/sessions/index.d.ts +7 -0
  25. package/dist/cli/routes/sessions/index.js +900 -0
  26. package/dist/cli/routes/sessions/link.d.ts +4 -0
  27. package/dist/cli/routes/{link.js → sessions/link.js} +71 -18
  28. package/dist/cli/routes/sessions/ls.d.ts +4 -0
  29. package/dist/cli/routes/{ls.js → sessions/ls.js} +71 -18
  30. package/dist/cli/routes/sessions/revoke.d.ts +4 -0
  31. package/dist/cli/routes/{revoke.js → sessions/revoke.js} +72 -19
  32. package/dist/cli/routes/tools/call.d.ts +4 -0
  33. package/dist/cli/routes/{invoke.js → tools/call.js} +73 -20
  34. package/dist/cli/routes/tools/describe.d.ts +6 -0
  35. package/dist/cli/routes/tools/describe.js +1894 -0
  36. package/dist/cli/routes/tools/index.d.ts +6 -0
  37. package/dist/cli/routes/tools/index.js +900 -0
  38. package/dist/cli/routes/tools/ls.d.ts +4 -0
  39. package/dist/cli/routes/{tools.js → tools/ls.js} +98 -74
  40. package/dist/cli/routes/tools/shared-options.d.ts +16 -0
  41. package/dist/cli/routes/tools/shared-options.js +122 -0
  42. package/dist/client/app-client.d.ts +96 -37
  43. package/dist/client/index.d.ts +3 -2
  44. package/dist/client/index.js +178 -138
  45. package/dist/commands/events-ls.d.ts +21 -0
  46. package/dist/commands/events.d.ts +31 -14
  47. package/dist/commands/invoke.d.ts +1 -1
  48. package/dist/commands/link.d.ts +1 -1
  49. package/dist/commands/ls.d.ts +1 -1
  50. package/dist/commands/revoke.d.ts +1 -1
  51. package/dist/commands/tools.d.ts +12 -13
  52. package/dist/daemon/calls.d.ts +3 -1
  53. package/dist/daemon/config.d.ts +1 -1
  54. package/dist/daemon/event-bus.d.ts +42 -0
  55. package/dist/daemon/registry.d.ts +20 -12
  56. package/dist/daemon/rpc-errors.d.ts +4 -1
  57. package/dist/daemon/sessions.d.ts +4 -2
  58. package/dist/errors.d.ts +1 -1
  59. package/dist/events/index.d.ts +60 -0
  60. package/dist/index.js +114 -40
  61. package/dist/link.d.ts +1 -1
  62. package/dist/mcp/app-tools.d.ts +22 -2
  63. package/dist/mcp/connect-tool.d.ts +1 -1
  64. package/dist/mcp/events-tool.d.ts +67 -27
  65. package/dist/native-scheme.d.ts +1 -1
  66. package/dist/output.d.ts +29 -6
  67. package/dist/rpc/client.d.ts +1 -1
  68. package/dist/scheme.d.ts +4 -4
  69. package/package.json +2 -2
  70. package/dist/cli/routes/events.d.ts +0 -3
  71. package/dist/cli/routes/invoke.d.ts +0 -3
  72. package/dist/cli/routes/link.d.ts +0 -3
  73. package/dist/cli/routes/ls.d.ts +0 -3
  74. package/dist/cli/routes/revoke.d.ts +0 -3
  75. package/dist/cli/routes/tools.d.ts +0 -3
@@ -310,6 +310,7 @@ var formatJson = (value, flags) => {
310
310
  import pc from "picocolors";
311
311
  import {
312
312
  formatAgentWebSocketUrl,
313
+ renderEventSignature,
313
314
  renderToolSignature,
314
315
  summarizeToolDescription
315
316
  } from "@appduct/shared";
@@ -405,6 +406,13 @@ var formatDevice = (device) => {
405
406
  const label = parts.length > 0 ? parts.join(" ") : "unknown device";
406
407
  return device.os ? `${label} (${device.os})` : label;
407
408
  };
409
+ var SUSPEND_REASON_LABELS = {
410
+ app_backgrounded: "app in background",
411
+ connection_lost: "connection lost"
412
+ };
413
+ var formatSessionState = (session) => {
414
+ return session.suspendReason ? `${session.state} (${SUSPEND_REASON_LABELS[session.suspendReason]})` : session.state;
415
+ };
408
416
  var renderLsData = (colors, data, now) => {
409
417
  if (data.length === 0) {
410
418
  return [colors.dim("Sessions"), " No Appduct sessions are registered."];
@@ -413,7 +421,7 @@ var renderLsData = (colors, data, now) => {
413
421
  const headers = ["Alias", "State", "Device", "Tools", "Age"];
414
422
  const rows = data.map((session) => [
415
423
  session.alias,
416
- session.state,
424
+ formatSessionState(session),
417
425
  formatDevice(session.device),
418
426
  String(session.toolCount),
419
427
  formatAge(session.claimedAt ?? session.createdAt, nowIso)
@@ -427,9 +435,6 @@ var renderLsData = (colors, data, now) => {
427
435
  ...rows.map((row) => ` ${row.map((cell, index) => cell.padEnd(widths[index])).join(" ")}`)
428
436
  ];
429
437
  };
430
- var isToolsListing = (data) => {
431
- return typeof data === "object" && data !== null && Array.isArray(data.tools);
432
- };
433
438
  var isToolGroupsListing = (data) => {
434
439
  return typeof data === "object" && data !== null && Array.isArray(data.groups) && !Array.isArray(data.tools);
435
440
  };
@@ -447,7 +452,7 @@ var renderEmptyToolsLine = (data) => {
447
452
  }
448
453
  if (data.group !== void 0) {
449
454
  const match = data.filter === void 0 ? "" : ` match ${JSON.stringify(data.filter)}`;
450
- return ` No tools in group ${JSON.stringify(data.group)}${match}. Run \`appduct tools --groups\` to see the session's groups.`;
455
+ return ` No tools in group ${JSON.stringify(data.group)}${match}. Run \`appduct tools ls --groups\` to see the session's groups.`;
451
456
  }
452
457
  return data.filter === void 0 ? " No tools registered." : ` No tools match ${JSON.stringify(data.filter)}.`;
453
458
  };
@@ -529,7 +534,7 @@ var renderToolSummaryTable = (colors, data) => {
529
534
  ...grouped ? renderGroupedToolLines(colors, data.tools) : data.tools.flatMap((tool) => renderToolSummaryLines(tool, " ")),
530
535
  ...renderTruncationLine(data),
531
536
  "",
532
- "Run `appduct tools <name>` for a tool's full schema."
537
+ "Run `appduct tools describe <name>` for a tool's full schema."
533
538
  ];
534
539
  };
535
540
  var renderToolDetail = (colors, tool, flags) => {
@@ -581,18 +586,62 @@ var renderToolGroups = (colors, data) => {
581
586
  colors.green("Groups"),
582
587
  ...data.groups.map((entry) => ` ${label(entry).padEnd(width)} ${String(entry.total).padStart(countWidth)}`),
583
588
  "",
584
- `${data.total} tool${data.total === 1 ? "" : "s"} in total. ` + (hasAnyGroup(data.groups) ? "Run `appduct tools --group <name>` to list one group's tools." : "No tool declares a group.")
589
+ `${data.total} tool${data.total === 1 ? "" : "s"} in total. ` + (hasAnyGroup(data.groups) ? "Run `appduct tools ls --group <name>` to list one group's tools." : "No tool declares a group.")
585
590
  ];
586
591
  };
587
- var renderToolsData = (colors, data, flags, full) => {
592
+ var renderToolsListData = (colors, data, flags, full) => {
588
593
  if (isToolGroupsListing(data)) {
589
594
  return renderToolGroups(colors, data);
590
595
  }
591
- if (!isToolsListing(data)) {
592
- return renderToolDetail(colors, data, flags);
593
- }
594
596
  return full ? renderToolsFullListing(colors, data, flags) : renderToolSummaryTable(colors, data);
595
597
  };
598
+ var renderEventsTruncationLine = (data) => {
599
+ const offset = data.offset ?? 0;
600
+ if (data.events.length >= data.total) {
601
+ return [];
602
+ }
603
+ return [
604
+ "",
605
+ `Showing ${data.events.length} of ${data.total} events (offset ${offset}). Narrow with --name <glob> or page with --offset <n>.`
606
+ ];
607
+ };
608
+ var renderEventsListData = (colors, data, flags) => {
609
+ const [only] = data.events;
610
+ if (data.name !== void 0 && !data.name.includes("*") && only !== void 0) {
611
+ return renderFields(
612
+ colors.green(`Event: ${only.name}`),
613
+ [
614
+ ["Signature", renderEventSignature(only)],
615
+ ["Description", only.description],
616
+ ["Payload schema", only.payload_schema]
617
+ ],
618
+ flags
619
+ );
620
+ }
621
+ if (data.events.length === 0 && data.total > 0) {
622
+ return [
623
+ colors.green("Events"),
624
+ ` No events at offset ${data.offset ?? 0}; ${data.total} matching event${data.total === 1 ? "" : "s"} in total.`
625
+ ];
626
+ }
627
+ if (data.events.length === 0) {
628
+ return [
629
+ colors.green("Events"),
630
+ data.name === void 0 ? " No events declared." : ` No events match ${JSON.stringify(data.name)}.`
631
+ ];
632
+ }
633
+ const lines = data.events.flatMap((event) => [
634
+ ` ${renderEventSignature(event)}`,
635
+ ` ${summarizeToolDescription(event.description)}`
636
+ ]);
637
+ return [
638
+ colors.green("Events"),
639
+ ...lines,
640
+ ...renderEventsTruncationLine(data),
641
+ "",
642
+ "Run `appduct events ls --name <name>` for an event's full payload schema."
643
+ ];
644
+ };
596
645
  var renderInvokeData = (colors, data, flags) => {
597
646
  return [colors.green("Result"), formatScalar(data, flags)];
598
647
  };
@@ -776,15 +825,19 @@ var renderSuccessData = (colors, command, data, options) => {
776
825
  return renderInitData(colors, data, flags);
777
826
  case "keygen":
778
827
  return renderKeygenData(colors, data, flags);
779
- case "link":
828
+ case "sessions link":
780
829
  return renderLinkData(colors, data, flags, options.qr);
781
- case "ls":
830
+ case "sessions ls":
782
831
  return renderLsData(colors, data, options.now ?? /* @__PURE__ */ new Date());
783
- case "tools":
784
- return renderToolsData(colors, data, flags, options.full);
785
- case "invoke":
832
+ case "tools ls":
833
+ return renderToolsListData(colors, data, flags, options.full);
834
+ case "tools describe":
835
+ return renderToolDetail(colors, data, flags);
836
+ case "events ls":
837
+ return renderEventsListData(colors, data, flags);
838
+ case "tools call":
786
839
  return renderInvokeData(colors, data, flags);
787
- case "revoke":
840
+ case "sessions revoke":
788
841
  return renderRevokeData(colors, data);
789
842
  case "daemon run":
790
843
  return renderDaemonRunData(colors, data, flags);