@songsid/agend 2.2.0-alpha.2 → 2.2.0-alpha.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.
Files changed (239) hide show
  1. package/README.md +4 -4
  2. package/README.zh-TW.md +4 -4
  3. package/dist/agent-endpoint.d.ts +4 -1
  4. package/dist/agent-endpoint.js +14 -2
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/atomic-write.d.ts +21 -0
  7. package/dist/atomic-write.js +65 -0
  8. package/dist/atomic-write.js.map +1 -0
  9. package/dist/auth-api.js +2 -0
  10. package/dist/auth-api.js.map +1 -1
  11. package/dist/backend/codex.d.ts +7 -0
  12. package/dist/backend/codex.js +7 -0
  13. package/dist/backend/codex.js.map +1 -1
  14. package/dist/backend/muse.d.ts +7 -0
  15. package/dist/backend/muse.js +7 -0
  16. package/dist/backend/muse.js.map +1 -1
  17. package/dist/backend/types.d.ts +6 -0
  18. package/dist/backend/types.js.map +1 -1
  19. package/dist/binary-probe.d.ts +80 -0
  20. package/dist/binary-probe.js +182 -0
  21. package/dist/binary-probe.js.map +1 -0
  22. package/dist/cache-service.d.ts +17 -1
  23. package/dist/cache-service.js +39 -4
  24. package/dist/cache-service.js.map +1 -1
  25. package/dist/channel/adapters/discord.d.ts +5 -1
  26. package/dist/channel/adapters/discord.js +56 -11
  27. package/dist/channel/adapters/discord.js.map +1 -1
  28. package/dist/channel/adapters/telegram.d.ts +38 -1
  29. package/dist/channel/adapters/telegram.js +82 -0
  30. package/dist/channel/adapters/telegram.js.map +1 -1
  31. package/dist/channel/mcp-tools.js +1 -1
  32. package/dist/channel/mcp-tools.js.map +1 -1
  33. package/dist/channel/tool-router.d.ts +8 -1
  34. package/dist/channel/tool-router.js +4 -2
  35. package/dist/channel/tool-router.js.map +1 -1
  36. package/dist/channel/types.d.ts +21 -0
  37. package/dist/cli.js +133 -38
  38. package/dist/cli.js.map +1 -1
  39. package/dist/connection-secrets.d.ts +5 -0
  40. package/dist/connection-secrets.js.map +1 -1
  41. package/dist/cpu-profile.js +50 -0
  42. package/dist/cpu-profile.js.map +1 -1
  43. package/dist/daemon.d.ts +12 -0
  44. package/dist/daemon.js +166 -26
  45. package/dist/daemon.js.map +1 -1
  46. package/dist/delivery-outbox.d.ts +1 -0
  47. package/dist/delivery-outbox.js +12 -0
  48. package/dist/delivery-outbox.js.map +1 -1
  49. package/dist/discord-permissions.d.ts +33 -0
  50. package/dist/discord-permissions.js +42 -0
  51. package/dist/discord-permissions.js.map +1 -0
  52. package/dist/env-file.d.ts +11 -0
  53. package/dist/env-file.js +27 -0
  54. package/dist/env-file.js.map +1 -0
  55. package/dist/fleet-context.d.ts +5 -0
  56. package/dist/fleet-context.js.map +1 -1
  57. package/dist/fleet-level-config.d.ts +8 -1
  58. package/dist/fleet-level-config.js +31 -0
  59. package/dist/fleet-level-config.js.map +1 -1
  60. package/dist/fleet-manager.d.ts +76 -7
  61. package/dist/fleet-manager.js +599 -127
  62. package/dist/fleet-manager.js.map +1 -1
  63. package/dist/fleet-stop-budget.d.ts +22 -0
  64. package/dist/fleet-stop-budget.js +95 -0
  65. package/dist/fleet-stop-budget.js.map +1 -0
  66. package/dist/kiro-transcript-lane.d.ts +8 -4
  67. package/dist/kiro-transcript-lane.js +66 -44
  68. package/dist/kiro-transcript-lane.js.map +1 -1
  69. package/dist/locale.js +82 -0
  70. package/dist/locale.js.map +1 -1
  71. package/dist/next-steps.d.ts +5 -0
  72. package/dist/next-steps.js +26 -0
  73. package/dist/next-steps.js.map +1 -0
  74. package/dist/outbound-handlers.js +8 -0
  75. package/dist/outbound-handlers.js.map +1 -1
  76. package/dist/outbound-schemas.d.ts +4 -0
  77. package/dist/outbound-schemas.js +6 -1
  78. package/dist/outbound-schemas.js.map +1 -1
  79. package/dist/outbox-open-error.d.ts +7 -0
  80. package/dist/outbox-open-error.js +15 -0
  81. package/dist/outbox-open-error.js.map +1 -0
  82. package/dist/pane-context-cache.d.ts +25 -0
  83. package/dist/pane-context-cache.js +73 -0
  84. package/dist/pane-context-cache.js.map +1 -0
  85. package/dist/paths.d.ts +0 -7
  86. package/dist/paths.js +8 -2
  87. package/dist/paths.js.map +1 -1
  88. package/dist/provider-probe.d.ts +15 -0
  89. package/dist/provider-probe.js +20 -0
  90. package/dist/provider-probe.js.map +1 -1
  91. package/dist/public-link-progress.d.ts +73 -0
  92. package/dist/public-link-progress.js +190 -0
  93. package/dist/public-link-progress.js.map +1 -0
  94. package/dist/public-web-gateway.js +1 -1
  95. package/dist/public-web-gateway.js.map +1 -1
  96. package/dist/public-web-link.d.ts +6 -1
  97. package/dist/public-web-link.js +87 -15
  98. package/dist/public-web-link.js.map +1 -1
  99. package/dist/quickstart-api.d.ts +93 -20
  100. package/dist/quickstart-api.js +194 -62
  101. package/dist/quickstart-api.js.map +1 -1
  102. package/dist/quickstart.d.ts +15 -0
  103. package/dist/quickstart.js +100 -29
  104. package/dist/quickstart.js.map +1 -1
  105. package/dist/reply-buttons-controller.d.ts +98 -0
  106. package/dist/reply-buttons-controller.js +174 -0
  107. package/dist/reply-buttons-controller.js.map +1 -0
  108. package/dist/reply-buttons.d.ts +113 -0
  109. package/dist/reply-buttons.js +208 -0
  110. package/dist/reply-buttons.js.map +1 -0
  111. package/dist/reply-dedup.js +3 -1
  112. package/dist/reply-dedup.js.map +1 -1
  113. package/dist/restart-guard.d.ts +1 -0
  114. package/dist/restart-guard.js +8 -3
  115. package/dist/restart-guard.js.map +1 -1
  116. package/dist/service-activation.d.ts +15 -2
  117. package/dist/service-activation.js +81 -4
  118. package/dist/service-activation.js.map +1 -1
  119. package/dist/service-installer.js +19 -1
  120. package/dist/service-installer.js.map +1 -1
  121. package/dist/settings-api.js +53 -12
  122. package/dist/settings-api.js.map +1 -1
  123. package/dist/settings-authority.d.ts +11 -0
  124. package/dist/settings-authority.js +128 -0
  125. package/dist/settings-authority.js.map +1 -0
  126. package/dist/settings-change.d.ts +5 -0
  127. package/dist/settings-change.js +4 -3
  128. package/dist/settings-change.js.map +1 -1
  129. package/dist/settings-confirmation.d.ts +3 -0
  130. package/dist/settings-confirmation.js +7 -1
  131. package/dist/settings-confirmation.js.map +1 -1
  132. package/dist/settings-effect.js +19 -7
  133. package/dist/settings-effect.js.map +1 -1
  134. package/dist/settings-http-confirmation.js +1 -1
  135. package/dist/settings-http-confirmation.js.map +1 -1
  136. package/dist/settings-redaction.d.ts +18 -0
  137. package/dist/settings-redaction.js +58 -0
  138. package/dist/settings-redaction.js.map +1 -0
  139. package/dist/setup-form.d.ts +9 -1
  140. package/dist/setup-form.js +25 -1
  141. package/dist/setup-form.js.map +1 -1
  142. package/dist/setup-host.js +13 -3
  143. package/dist/setup-host.js.map +1 -1
  144. package/dist/setup-wizard.js +26 -19
  145. package/dist/setup-wizard.js.map +1 -1
  146. package/dist/systemd-runtime.d.ts +15 -0
  147. package/dist/systemd-runtime.js +41 -0
  148. package/dist/systemd-runtime.js.map +1 -0
  149. package/dist/tmux-control.d.ts +22 -0
  150. package/dist/tmux-control.js +82 -17
  151. package/dist/tmux-control.js.map +1 -1
  152. package/dist/token-env-name.d.ts +37 -0
  153. package/dist/token-env-name.js +93 -0
  154. package/dist/token-env-name.js.map +1 -0
  155. package/dist/tool-permissions.js +5 -3
  156. package/dist/tool-permissions.js.map +1 -1
  157. package/dist/topic-commands.d.ts +7 -16
  158. package/dist/topic-commands.js +45 -83
  159. package/dist/topic-commands.js.map +1 -1
  160. package/dist/transcript-monitor.js +3 -0
  161. package/dist/transcript-monitor.js.map +1 -1
  162. package/dist/transcript-sources.d.ts +68 -0
  163. package/dist/transcript-sources.js +336 -29
  164. package/dist/transcript-sources.js.map +1 -1
  165. package/dist/transcript-turns.d.ts +39 -0
  166. package/dist/transcript-turns.js +58 -0
  167. package/dist/transcript-turns.js.map +1 -0
  168. package/dist/tunnel/cloudflared-install.d.ts +18 -0
  169. package/dist/tunnel/cloudflared-install.js +15 -1
  170. package/dist/tunnel/cloudflared-install.js.map +1 -1
  171. package/dist/turn-reply-guard.d.ts +3 -0
  172. package/dist/turn-reply-guard.js.map +1 -1
  173. package/dist/ui/chat-render.js +32 -6
  174. package/dist/ui/chat-store.js +21 -1
  175. package/dist/ui/chat-strings.js +8 -0
  176. package/dist/ui/chat-thread.js +109 -52
  177. package/dist/ui/first-run.js +64 -0
  178. package/dist/ui/html-attachment.js +26 -0
  179. package/dist/ui/panel-chat.js +13 -5
  180. package/dist/ui/panel-fleet.js +5 -5
  181. package/dist/ui/panel-settings.js +18 -8
  182. package/dist/ui/preview-panel.js +38 -3
  183. package/dist/ui/settings-apply.js +3 -1
  184. package/dist/ui/settings-dialogs.js +95 -25
  185. package/dist/ui/settings-discord.js +130 -0
  186. package/dist/ui/settings-model.js +21 -0
  187. package/dist/ui/settings-strings.js +46 -6
  188. package/dist/ui/settings-token.js +54 -0
  189. package/dist/ui/settings-wizard.js +63 -29
  190. package/dist/ui/shared/app-shell.js +19 -33
  191. package/dist/ui/shared/app-store.js +5 -3
  192. package/dist/ui/shared/app-stream.js +2 -1
  193. package/dist/ui/shared/app.css +34 -2
  194. package/dist/ui/shared/app.js +2 -1
  195. package/dist/ui/shared/instance-nav.js +310 -0
  196. package/dist/ui/shared/panel-view.js +12 -190
  197. package/dist/ui/shared/view-roster-store.js +5 -0
  198. package/dist/ui/shared/view-strings.js +12 -0
  199. package/dist/update-dispatch.d.ts +1 -1
  200. package/dist/update-dispatch.js +1 -1
  201. package/dist/update-install.d.ts +15 -3
  202. package/dist/update-install.js +41 -13
  203. package/dist/update-install.js.map +1 -1
  204. package/dist/update-launch.d.ts +22 -0
  205. package/dist/update-launch.js +106 -0
  206. package/dist/update-launch.js.map +1 -0
  207. package/dist/update-marker.js +3 -8
  208. package/dist/update-marker.js.map +1 -1
  209. package/dist/usage/format-rich.js +7 -1
  210. package/dist/usage/format-rich.js.map +1 -1
  211. package/dist/usage/i18n-keys.d.ts +1 -1
  212. package/dist/usage/i18n-keys.js +1 -1
  213. package/dist/usage/i18n-keys.js.map +1 -1
  214. package/dist/usage/providers.d.ts +4 -0
  215. package/dist/usage/providers.js +2 -1
  216. package/dist/usage/providers.js.map +1 -1
  217. package/dist/usage/usage-api.js +48 -2
  218. package/dist/usage/usage-api.js.map +1 -1
  219. package/dist/view-api.d.ts +40 -0
  220. package/dist/view-api.js +28 -10
  221. package/dist/view-api.js.map +1 -1
  222. package/dist/web-api.d.ts +8 -0
  223. package/dist/web-api.js +50 -16
  224. package/dist/web-api.js.map +1 -1
  225. package/dist/web-auth.d.ts +8 -0
  226. package/dist/web-auth.js +34 -8
  227. package/dist/web-auth.js.map +1 -1
  228. package/dist/web-chat-history.d.ts +21 -0
  229. package/dist/web-chat-history.js +44 -0
  230. package/dist/web-chat-history.js.map +1 -1
  231. package/dist/web-host-guard.d.ts +18 -2
  232. package/dist/web-host-guard.js +30 -5
  233. package/dist/web-host-guard.js.map +1 -1
  234. package/dist/web-session.d.ts +7 -1
  235. package/dist/web-session.js +23 -2
  236. package/dist/web-session.js.map +1 -1
  237. package/launcher/postinstall.cjs +8 -4
  238. package/package.json +1 -1
  239. package/templates/systemd.service.ejs +3 -3
@@ -52,6 +52,7 @@ export declare function applyTaskListCap<T extends {
52
52
  hint: string;
53
53
  } | T[];
54
54
  import { WebChatHistory } from "./web-chat-history.js";
55
+ import { ReplyButtonsController } from "./reply-buttons-controller.js";
55
56
  import { WebFileLedger } from "./web-upload.js";
56
57
  import { type RawConfigPatch } from "./settings-api.js";
57
58
  import { type AgentEndpointContext } from "./agent-endpoint.js";
@@ -170,6 +171,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
170
171
  dataDir: string;
171
172
  private static signalTarget;
172
173
  private static sighupHandlerInstalled;
174
+ /** Test seam: inject a spy to verify saveFleetConfig calls fsync. Default: fsyncSync. */
175
+ fsyncForTest: ((fd: number) => void) | undefined;
173
176
  private children;
174
177
  readonly lifecycle: InstanceLifecycle;
175
178
  readonly stormWindow: StormWindow;
@@ -446,6 +449,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
446
449
  private classicSettingsOwners;
447
450
  private queueSettingsOperation;
448
451
  private settingsGate;
452
+ /** Exact configured effect owners; this does not depend on prompt location. */
453
+ private settingsChatAuthority;
449
454
  private promptSettingsChange;
450
455
  private handleSettingsChangeCallback;
451
456
  startSettingsConfirmationControl(): Promise<void>;
@@ -478,6 +483,25 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
478
483
  private fleetSignatureMismatch;
479
484
  private healthServerListening;
480
485
  constructor(dataDir: string);
486
+ /** #1266: a reply's buttons — the store (reply-buttons.db) and what a click does. Created on first use. */
487
+ private replyButtonsCtl;
488
+ /** The store could not be opened in this process: buttons are offered as text until the next start. */
489
+ private replyButtonsUnavailable;
490
+ /**
491
+ * The controller, or null when reply-buttons.db cannot be opened (#1500 review). That file holds only open choices,
492
+ * so it never stops AgEnD: the failure is logged and posted once, replies offer their choices as text, and a click on
493
+ * an older button is answered "closed". The file is left where it is — an open error is not proof of corruption.
494
+ */
495
+ replyButtons(): ReplyButtonsController | null;
496
+ private replyButtonsStore;
497
+ /**
498
+ * #1266: who may answer a reply's buttons on a platform — whoever may message that instance there: in a ClassicBot
499
+ * room anyone there (as a typed message), elsewhere someone the sending connection lets speak (#754/#1148), never a
500
+ * fleet bot.
501
+ */
502
+ private mayAnswerReplyButtons;
503
+ /** #1266: the choice, delivered as an ordinary inbound message from whoever made it, and shown in the web chat. */
504
+ private deliverReplyButtonChoice;
481
505
  private ensureDeliveryOutbox;
482
506
  /** Synchronous SQLite admission; the caller may acknowledge only after this returns. */
483
507
  admitDurableDelivery(input: {
@@ -543,6 +567,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
543
567
  * handled, so a rejection never escapes as an unhandled rejection.
544
568
  */
545
569
  private startExclusiveReconcile;
570
+ /** Pure cached admission for command continuations; no IO or update-progress lookup. */
571
+ isFleetStopping(): boolean;
546
572
  /**
547
573
  * Is the fleet going down (or coming back up) on purpose?
548
574
  *
@@ -555,6 +581,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
555
581
  isPlannedRestart(): boolean;
556
582
  private finishStartup;
557
583
  lastActivityMs(name: string): number;
584
+ /** Capture the current daemon and delivery owner for a background context read. */
585
+ getPaneContextSource(name: string): import("./pane-context-cache.js").PaneContextSource | null;
558
586
  /**
559
587
  * Is the instance between turns?
560
588
  *
@@ -966,10 +994,12 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
966
994
  /**
967
995
  * Probe the same executable set exposed by the web backend catalog.
968
996
  *
969
- * This deliberately has no cache: an install `/login` ran can add a
997
+ * This deliberately skips the cache: an install `/login` ran can add a
970
998
  * binary to PATH while the fleet process remains alive, and the next bare
971
999
  * `/login` must see it without requiring a restart or an explicit cache
972
- * invalidation call.
1000
+ * invalidation call. The fresh answers also refresh the shared cache that
1001
+ * `/ui/backends` reads. #1490: async and bounded, never `which` on the event loop; a probe with no answer in time
1002
+ * counts as not installed, as the old timeout did.
973
1003
  */
974
1004
  private probeInstalledBackends;
975
1005
  /**
@@ -1073,6 +1103,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1073
1103
  /** Telegram's typed command enters through the same strict owner and nonce path as Discord. */
1074
1104
  dashboardMenu(msg: InboundMessage): Promise<void>;
1075
1105
  private sendLocalDashboard;
1106
+ /** Why the DM did not go, for the log only (Discord 50007 = the user does not accept DMs from this server's members). */
1107
+ private logDashboardDmFailure;
1108
+ /** False when the menu was not shown (the caller still owes the user an answer). */
1076
1109
  private showDashboardMenu;
1077
1110
  private handleDashboardCallback;
1078
1111
  /** `/dashboard revoke`: sign out every browser and withdraw any unused code. */
@@ -1282,19 +1315,26 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1282
1315
  */
1283
1316
  private inboundRouteThreadId;
1284
1317
  /**
1285
- * #1085, defense in depth: a routed Telegram target must belong to the group
1286
- * the message came from — its own world's group_id. Two Telegram fleet
1287
- * worlds can number topics alike; a coincidence is dropped, never delivered.
1318
+ * A forum-root command has one configured General before any adapter claims
1319
+ * dedup. Bare commands prefer the primary adapter's General in this group;
1320
+ * explicit suffixes select their own bot. Runtime availability must not pick
1321
+ * another administrator, so stopped owners remain selected and every copy
1322
+ * silently refuses instead of falling back.
1323
+ * undefined = another ingress scope; null = root command with no proven target.
1288
1324
  */
1325
+ private telegramRootCommandTarget;
1289
1326
  /**
1290
1327
  * #1346: whether this copy may claim the shared dedup key for
1291
1328
  * command-like text. Fleet topics resolve an owning adapter and only its
1292
1329
  * copy proceeds. Classic targets and unknown routing keep their existing
1293
- * handling. At the receiving Telegram world's own forum root, an explicit
1294
- * suffix requires a known matching username before dedup; present-thread
1330
+ * handling. Telegram forum-root commands select a configured General before
1331
+ * dedup. An explicit suffix requires a known matching username; present-thread
1295
1332
  * copies retain their permissive handling when that identity is unknown.
1296
1333
  */
1297
1334
  private isOwnerCommandCopy;
1335
+ /**
1336
+ * #1085: coincident topic numbers must not route across Telegram groups.
1337
+ */
1298
1338
  private resolveInboundTarget;
1299
1339
  private handleInboundMessage;
1300
1340
  /** Handle outbound tool calls from a daemon instance */
@@ -1921,6 +1961,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1921
1961
  * The caller has passed the /ui gate (session, same origin, CSRF). Here: the prompt must be one offered
1922
1962
  * on the dashboard, about the instance the page named, and the action one of its own buttons.
1923
1963
  */
1964
+ /** #1266: a click on a reply's button in the web chat (the /ui gate is passed: a session, or the public link). */
1965
+ clickWebReplyButton(instance: string, id: string, index: number): Promise<{
1966
+ status: 200 | 400 | 403 | 409;
1967
+ error?: string;
1968
+ }>;
1924
1969
  clickWebPrompt(instance: string, nonce: string, action: string): Promise<{
1925
1970
  status: 200 | 400 | 403 | 409;
1926
1971
  error?: string;
@@ -1984,6 +2029,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1984
2029
  */
1985
2030
  private retirePendingNoncePrompts;
1986
2031
  clearNoncePromptsForInstance(instanceName: string): void;
2032
+ /** A lapsed prompt's buttons collapsed to its expired text — through its own interaction when it is private. */
2033
+ private collapseNoncePrompt;
1987
2034
  /** A clean exit is intentional from the CLI's perspective, but often not from
1988
2035
  * the operator's. Keep the instance notice passive and put the action in the
1989
2036
  * same-world General topic where an administrator can make the choice. */
@@ -2680,6 +2727,14 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
2680
2727
  get applyJobs(): ApplyJobStore;
2681
2728
  /** The only channel metadata exposed to the Settings secret UI. */
2682
2729
  listSecureConnections(): ConnectionMetadata[];
2730
+ /**
2731
+ * #1519 P6 (#1537 review): a connection's status from evidence, never from a start call that merely resolved. No
2732
+ * adapter object: not running (or retrying / failed, as recorded) — never "connected". An adapter that has not logged
2733
+ * in yet (no `started`: no bot id; for Telegram, polling not ready) is "starting". Named problems: the Message Content
2734
+ * intent refused (4014, P3), the token refused (an explicit auth error, or Telegram's own 401 flag) — the error text
2735
+ * itself is never passed on.
2736
+ */
2737
+ private connectionStatus;
2683
2738
  private secureConnectionChannel;
2684
2739
  private secureConnectionGeneration;
2685
2740
  /** Provider API-key rows exposed to Settings (never the env key or secret). */
@@ -2811,6 +2866,20 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
2811
2866
  * the reconcile reports as it works. A target the forecast missed (a Classic
2812
2867
  * instance inheriting a changed default) is added when it is first touched.
2813
2868
  */
2869
+ /**
2870
+ * #1519 P6: whether `next` differs from what this process started with only by connections appended to it, while it
2871
+ * runs connections already (a fleet's first connection becomes its primary: a fresh process sets that up).
2872
+ */
2873
+ private canHotAddConnections;
2874
+ /**
2875
+ * #1519 P6: start connections appended to a running fleet. Each token is read from .env (that key only, under the
2876
+ * file's lease — Settings wrote it there, and this process read .env once at start); a connection already running (a
2877
+ * token Replace started it) is left alone. True only when every one is running; one that failed to start is retried in
2878
+ * the background like any other, and the Apply row says a restart is still needed.
2879
+ */
2880
+ private hotAddConnections;
2881
+ /** Set the named keys of the data dir's .env into this process's environment (the file's lease held by `owner`). */
2882
+ private loadEnvKeys;
2814
2883
  planConfigApply(): Array<{
2815
2884
  target: string;
2816
2885
  kind: ApplyTargetKind;