@cursor/july 0.1.27 → 0.1.29

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 (180) hide show
  1. package/dist/bin/agent-serve.js +32 -5
  2. package/dist/channels/slack/auth.d.ts +13 -13
  3. package/dist/channels/slack/auth.d.ts.map +1 -1
  4. package/dist/channels/slack/auth.js +19 -10
  5. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  6. package/dist/channels/slack/cursor-account.js +3 -1
  7. package/dist/channels/slack/defaults.d.ts +7 -4
  8. package/dist/channels/slack/defaults.d.ts.map +1 -1
  9. package/dist/channels/slack/defaults.js +14 -4
  10. package/dist/channels/slack/dispatch.d.ts +6 -0
  11. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  12. package/dist/channels/slack/dispatch.js +59 -21
  13. package/dist/channels/slack/external-policy.d.ts +27 -0
  14. package/dist/channels/slack/external-policy.d.ts.map +1 -0
  15. package/dist/channels/slack/external-policy.js +53 -0
  16. package/dist/channels/slack/index.d.ts +1 -0
  17. package/dist/channels/slack/index.d.ts.map +1 -1
  18. package/dist/channels/slack/index.js +1 -0
  19. package/dist/channels/slack/interactive.d.ts +6 -0
  20. package/dist/channels/slack/interactive.d.ts.map +1 -1
  21. package/dist/channels/slack/interactive.js +42 -15
  22. package/dist/channels/slack/slack-channel.d.ts +19 -1
  23. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  24. package/dist/channels/slack/slack-channel.js +48 -6
  25. package/dist/channels/slack/types.d.ts +10 -0
  26. package/dist/channels/slack/types.d.ts.map +1 -1
  27. package/dist/docs/404.html +2 -2
  28. package/dist/docs/ab.html +3 -3
  29. package/dist/docs/assets/{app.BICLoJYF.js → app.QdunVQKg.js} +1 -1
  30. package/dist/docs/assets/chunks/@localSearchIndexroot.DGe61XHA.js +1 -0
  31. package/dist/docs/assets/chunks/{VPLocalSearchBox.wN4Ko9dT.js → VPLocalSearchBox.B6EpUXYf.js} +1 -1
  32. package/dist/docs/assets/chunks/{theme.dnnTE-Co.js → theme.BOTJVqh7.js} +2 -2
  33. package/dist/docs/assets/{guides_slack.md.D_xFKlnF.js → guides_slack.md.CjmJSvZS.js} +8 -4
  34. package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +1 -0
  35. package/dist/docs/assets/guides_webhooks.md.wSOYas3X.js +183 -0
  36. package/dist/docs/assets/{guides_webhooks.md.B1EswtUu.lean.js → guides_webhooks.md.wSOYas3X.lean.js} +1 -1
  37. package/dist/docs/assets/{index.md.Dfv5ic9t.js → index.md.CH_s5uZe.js} +1 -1
  38. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.js → reference_channels.md.CDhTRfUz.js} +2 -2
  39. package/dist/docs/assets/{reference_channels.md.DdmiKgqf.lean.js → reference_channels.md.CDhTRfUz.lean.js} +1 -1
  40. package/dist/docs/building-with-agents.html +3 -3
  41. package/dist/docs/concepts.html +3 -3
  42. package/dist/docs/deployment.html +3 -3
  43. package/dist/docs/evals.html +3 -3
  44. package/dist/docs/example-agents/approval-buddy.html +3 -3
  45. package/dist/docs/example-agents/benny.html +3 -3
  46. package/dist/docs/example-agents/bugbot.html +3 -3
  47. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  48. package/dist/docs/example-agents/codeowners-review.html +3 -3
  49. package/dist/docs/example-agents/concierge.html +3 -3
  50. package/dist/docs/example-agents/fsd.html +3 -3
  51. package/dist/docs/example-agents/index.html +3 -3
  52. package/dist/docs/example-agents/knowledge-base.html +3 -3
  53. package/dist/docs/example-agents/oncall.html +3 -3
  54. package/dist/docs/example-agents/security-reviewer.html +3 -3
  55. package/dist/docs/example-agents/slack-agent.html +3 -3
  56. package/dist/docs/example-agents/weather-agent.html +3 -3
  57. package/dist/docs/guides/agent-to-agent.html +3 -3
  58. package/dist/docs/guides/cloud-runtime.html +3 -3
  59. package/dist/docs/guides/github.html +3 -3
  60. package/dist/docs/guides/human-in-the-loop.html +3 -3
  61. package/dist/docs/guides/mcp-oauth.html +3 -3
  62. package/dist/docs/guides/slack.html +11 -7
  63. package/dist/docs/guides/webhooks.html +138 -5
  64. package/dist/docs/hashmap.json +1 -1
  65. package/dist/docs/hillclimbing.html +3 -3
  66. package/dist/docs/index.html +5 -5
  67. package/dist/docs/quickstart.html +3 -3
  68. package/dist/docs/reference/agent-config.html +3 -3
  69. package/dist/docs/reference/channels.html +5 -5
  70. package/dist/docs/reference/cli.html +3 -3
  71. package/dist/docs/reference/connections.html +3 -3
  72. package/dist/docs/reference/hooks.html +3 -3
  73. package/dist/docs/reference/http-api.html +3 -3
  74. package/dist/docs/reference/instructions.html +3 -3
  75. package/dist/docs/reference/playground.html +3 -3
  76. package/dist/docs/reference/project-layout.html +3 -3
  77. package/dist/docs/reference/prompt.html +3 -3
  78. package/dist/docs/reference/schedules.html +3 -3
  79. package/dist/docs/reference/sessions.html +3 -3
  80. package/dist/docs/reference/skills.html +3 -3
  81. package/dist/docs/reference/subagents.html +3 -3
  82. package/dist/docs/reference/tools.html +3 -3
  83. package/dist/docs/scaffolding-agents.html +3 -3
  84. package/dist/docs/storage.html +3 -3
  85. package/dist/docs/troubleshooting.html +3 -3
  86. package/dist/internal/cli-ax.d.ts +8 -0
  87. package/dist/internal/cli-ax.d.ts.map +1 -1
  88. package/dist/internal/cli-ax.js +116 -57
  89. package/dist/internal/cloud-turn-cost.d.ts +34 -0
  90. package/dist/internal/cloud-turn-cost.d.ts.map +1 -0
  91. package/dist/internal/cloud-turn-cost.js +106 -0
  92. package/dist/internal/cursor-slack-relay.d.ts +2 -0
  93. package/dist/internal/cursor-slack-relay.d.ts.map +1 -1
  94. package/dist/internal/cursor-slack-relay.js +1 -0
  95. package/dist/internal/deploy-client.d.ts +2 -0
  96. package/dist/internal/deploy-client.d.ts.map +1 -1
  97. package/dist/internal/deploy-client.js +1 -0
  98. package/dist/internal/discovery.d.ts.map +1 -1
  99. package/dist/internal/discovery.js +9 -2
  100. package/dist/internal/event-log.d.ts +6 -0
  101. package/dist/internal/event-log.d.ts.map +1 -1
  102. package/dist/internal/event-log.js +16 -0
  103. package/dist/internal/host-platforms.d.ts +13 -0
  104. package/dist/internal/host-platforms.d.ts.map +1 -1
  105. package/dist/internal/host-platforms.js +25 -16
  106. package/dist/internal/http-channel.d.ts.map +1 -1
  107. package/dist/internal/http-channel.js +3 -1
  108. package/dist/internal/local-control-plane.d.ts +25 -0
  109. package/dist/internal/local-control-plane.d.ts.map +1 -0
  110. package/dist/internal/local-control-plane.js +172 -0
  111. package/dist/internal/platform-schedule-sync.d.ts +17 -0
  112. package/dist/internal/platform-schedule-sync.d.ts.map +1 -0
  113. package/dist/internal/platform-schedule-sync.js +72 -0
  114. package/dist/internal/platform-timers.d.ts +28 -0
  115. package/dist/internal/platform-timers.d.ts.map +1 -0
  116. package/dist/internal/platform-timers.js +120 -0
  117. package/dist/internal/reminder-runner.d.ts +16 -12
  118. package/dist/internal/reminder-runner.d.ts.map +1 -1
  119. package/dist/internal/reminder-runner.js +112 -61
  120. package/dist/internal/reminder-store.d.ts +5 -4
  121. package/dist/internal/reminder-store.d.ts.map +1 -1
  122. package/dist/internal/reminder-store.js +5 -4
  123. package/dist/internal/sdk-runner.d.ts.map +1 -1
  124. package/dist/internal/sdk-runner.js +44 -1
  125. package/dist/internal/server.d.ts.map +1 -1
  126. package/dist/internal/server.js +115 -16
  127. package/dist/internal/session-engine.d.ts +22 -1
  128. package/dist/internal/session-engine.d.ts.map +1 -1
  129. package/dist/internal/session-engine.js +110 -4
  130. package/dist/internal/storage-coordinator.d.ts +4 -15
  131. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  132. package/dist/internal/storage-coordinator.js +4 -30
  133. package/dist/playground/assets/index-CquRB-l0.js +85 -0
  134. package/dist/playground/assets/{index-Bul1WfrB.css → index-Dj0bWpkn.css} +1 -1
  135. package/dist/playground/index.html +2 -2
  136. package/dist/storage.d.ts +0 -3
  137. package/dist/storage.d.ts.map +1 -1
  138. package/dist/storage.js +0 -3
  139. package/dist/types.d.ts +11 -2
  140. package/dist/types.d.ts.map +1 -1
  141. package/docs/README.md +1 -0
  142. package/docs/guides/slack.md +32 -7
  143. package/docs/guides/webhooks.md +183 -0
  144. package/docs/reference/channels.md +2 -1
  145. package/package.json +1 -1
  146. package/skills/setup-slack/SKILL.md +3 -0
  147. package/src/bin/agent-serve.ts +33 -5
  148. package/src/channels/slack/auth.ts +29 -22
  149. package/src/channels/slack/cursor-account.ts +2 -0
  150. package/src/channels/slack/defaults.ts +24 -4
  151. package/src/channels/slack/dispatch.ts +42 -1
  152. package/src/channels/slack/external-policy.ts +62 -0
  153. package/src/channels/slack/index.ts +1 -0
  154. package/src/channels/slack/interactive.ts +42 -10
  155. package/src/channels/slack/slack-channel.ts +66 -3
  156. package/src/channels/slack/types.ts +12 -0
  157. package/src/internal/cli-ax.ts +110 -34
  158. package/src/internal/cloud-turn-cost.ts +158 -0
  159. package/src/internal/cursor-slack-relay.ts +3 -0
  160. package/src/internal/deploy-client.ts +3 -0
  161. package/src/internal/discovery.ts +9 -1
  162. package/src/internal/event-log.ts +17 -0
  163. package/src/internal/host-platforms.ts +40 -18
  164. package/src/internal/http-channel.ts +3 -1
  165. package/src/internal/local-control-plane.ts +188 -0
  166. package/src/internal/platform-schedule-sync.ts +81 -0
  167. package/src/internal/platform-timers.ts +173 -0
  168. package/src/internal/reminder-runner.ts +131 -67
  169. package/src/internal/reminder-store.ts +5 -4
  170. package/src/internal/sdk-runner.ts +49 -1
  171. package/src/internal/server.ts +130 -11
  172. package/src/internal/session-engine.ts +138 -3
  173. package/src/internal/storage-coordinator.ts +4 -41
  174. package/src/storage.ts +0 -5
  175. package/src/types.ts +11 -2
  176. package/dist/docs/assets/chunks/@localSearchIndexroot.CQJytDwU.js +0 -1
  177. package/dist/docs/assets/guides_slack.md.D_xFKlnF.lean.js +0 -1
  178. package/dist/docs/assets/guides_webhooks.md.B1EswtUu.js +0 -50
  179. package/dist/playground/assets/index-BDCeW4uc.js +0 -86
  180. /package/dist/docs/assets/{index.md.Dfv5ic9t.lean.js → index.md.CH_s5uZe.lean.js} +0 -0
@@ -14,7 +14,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
14
14
  import { WebClient } from "@slack/web-api";
15
15
  import { createGitHubOctokit } from "../channels/github/api.js";
16
16
  import { ensureGhCliTokenEnv, hasGitHubAppCredentials, resolveCredentialValue, resolveGitHubInstallationId, tryResolveGhAuthToken, } from "../channels/github/auth.js";
17
- import { tryResolveBotToken } from "../channels/slack/credentials.js";
17
+ import { slackEnvKeys, tryResolveBotToken, } from "../channels/slack/credentials.js";
18
+ /** Bot-token Slack client. Pass channel credentials so `envPrefix` is honored. */
19
+ export function createHostSlackClient(options = {}) {
20
+ let slackPromise;
21
+ return {
22
+ getClient: () => __awaiter(this, void 0, void 0, function* () {
23
+ slackPromise !== null && slackPromise !== void 0 ? slackPromise : (slackPromise = (() => __awaiter(this, void 0, void 0, function* () {
24
+ const token = yield tryResolveBotToken(options.credentials);
25
+ if (token === undefined) {
26
+ const botKey = slackEnvKeys(options.envPrefix).bot;
27
+ const hint = options.envPrefix === undefined || options.envPrefix.trim() === ""
28
+ ? `${botKey} or a channel envPrefix`
29
+ : botKey;
30
+ throw new Error(`No Slack bot token available (set ${hint}).`);
31
+ }
32
+ return new WebClient(token);
33
+ }))());
34
+ return slackPromise;
35
+ }),
36
+ };
37
+ }
18
38
  /**
19
39
  * Build host platforms from ambient credentials. Prefer App installation
20
40
  * auth when configured; otherwise fall back to PAT / `gh auth` for local
@@ -22,7 +42,6 @@ import { tryResolveBotToken } from "../channels/slack/credentials.js";
22
42
  */
23
43
  export function createHostPlatforms(options = {}) {
24
44
  let octokitPromise;
25
- let slackPromise;
26
45
  return {
27
46
  github: {
28
47
  getOctokit: () => {
@@ -32,20 +51,10 @@ export function createHostPlatforms(options = {}) {
32
51
  return octokitPromise;
33
52
  },
34
53
  },
35
- slack: {
36
- getClient: () => __awaiter(this, void 0, void 0, function* () {
37
- if (slackPromise === undefined) {
38
- slackPromise = (() => __awaiter(this, void 0, void 0, function* () {
39
- const token = yield tryResolveBotToken(undefined);
40
- if (token === undefined) {
41
- throw new Error("No Slack bot token available (set SLACK_BOT_TOKEN or a channel envPrefix).");
42
- }
43
- return new WebClient(token);
44
- }))();
45
- }
46
- return slackPromise;
47
- }),
48
- },
54
+ slack: createHostSlackClient({
55
+ credentials: options.slackCredentials,
56
+ envPrefix: options.slackEnvPrefix,
57
+ }),
49
58
  };
50
59
  }
51
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,CAwYhB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,QAAQ,GAAG,SAAS,CAiBtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAC/D,QAAQ,CAQV;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,QAAQ,CAEV;AAoGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAc9C"}
1
+ {"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../src/internal/http-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAQ7B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,WAAW,EAAE,CA0YhB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,QAAQ,GAAG,SAAS,CAiBtB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GAC/D,QAAQ,CAQV;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,QAAQ,CAEV;AAoGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAc9C"}
@@ -194,7 +194,9 @@ export function buildHttpChannelRoutes(args) {
194
194
  }
195
195
  const url = new URL(request.url);
196
196
  const asJson = url.searchParams.get("format") === "json";
197
- const snapshot = yield engine.listEvents(sessionId, 0);
197
+ const snapshot = yield engine.listEvents(sessionId, 0, {
198
+ backfillCloudCost: true,
199
+ });
198
200
  if (asJson) {
199
201
  return jsonResponse({
200
202
  sessionId,
@@ -0,0 +1,25 @@
1
+ /**
2
+ * In-process control plane started with local `serve`. Owns schedule clocks
3
+ * and reminder documents + clocks, then fires into the kit the same way the
4
+ * Cursor backend does over HTTP when `--no-control-plane` is set.
5
+ */
6
+ import type { PlatformTimers } from "./platform-timers.js";
7
+ export interface LocalControlPlane extends PlatformTimers {
8
+ /** Arm persisted reminder clocks after the kit fire callback is live. */
9
+ startClocks(): void;
10
+ stop(): void;
11
+ }
12
+ export declare function createLocalControlPlane(opts: {
13
+ fireSchedule: (name: string) => Promise<unknown>;
14
+ fireReminder: (id: string, fireCount: number) => Promise<unknown>;
15
+ /**
16
+ * Persist reminder documents under `<stateDir>/reminders`. Local serve
17
+ * passes `<stateRoot>/control-plane`; records previously stored at
18
+ * `<stateRoot>/reminders` are migrated in on first boot.
19
+ */
20
+ stateDir?: string;
21
+ /** Arm deadline timers. Off in `--dev`. Defaults to true. */
22
+ armReminderClocks?: boolean;
23
+ logger?: (line: string) => void;
24
+ }): Promise<LocalControlPlane>;
25
+ //# sourceMappingURL=local-control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-control-plane.d.ts","sourceRoot":"","sources":["../../src/internal/local-control-plane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,yEAAyE;IACzE,WAAW,IAAI,IAAI,CAAC;IACpB,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6J7B"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * In-process control plane started with local `serve`. Owns schedule clocks
3
+ * and reminder documents + clocks, then fires into the kit the same way the
4
+ * Cursor backend does over HTTP when `--no-control-plane` is set.
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ import { dirname, join } from "node:path";
16
+ import { parseCron } from "./cron.js";
17
+ import { MAX_TIMER_MS } from "./reminder-schedule.js";
18
+ import { ReminderStore } from "./reminder-store.js";
19
+ export function createLocalControlPlane(opts) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ var _a;
22
+ const logger = (_a = opts.logger) !== null && _a !== void 0 ? _a : (() => { });
23
+ const armReminderClocks = opts.armReminderClocks !== false;
24
+ const store = opts.stateDir === undefined
25
+ ? undefined
26
+ : new ReminderStore(join(opts.stateDir, "reminders"));
27
+ const schedules = new Map();
28
+ const reminderTimers = new Map();
29
+ const reminders = new Map();
30
+ let scheduleTimer;
31
+ let lastFiredMinute = -1;
32
+ if (store !== undefined) {
33
+ for (const record of yield store.list()) {
34
+ reminders.set(record.id, record);
35
+ }
36
+ if (opts.stateDir !== undefined) {
37
+ const legacyStore = new ReminderStore(join(dirname(opts.stateDir), "reminders"));
38
+ for (const record of yield legacyStore.list()) {
39
+ if (reminders.has(record.id)) {
40
+ yield legacyStore.delete(record.id);
41
+ continue;
42
+ }
43
+ reminders.set(record.id, record);
44
+ yield store.save(record);
45
+ yield legacyStore.delete(record.id);
46
+ }
47
+ }
48
+ }
49
+ function armScheduleTicker() {
50
+ var _a;
51
+ if (scheduleTimer !== undefined || schedules.size === 0) {
52
+ return;
53
+ }
54
+ const now = Date.now();
55
+ const nextMinute = (Math.floor(now / 60000) + 1) * 60000;
56
+ scheduleTimer = setTimeout(() => tickSchedules(), nextMinute - now + 250);
57
+ (_a = scheduleTimer.unref) === null || _a === void 0 ? void 0 : _a.call(scheduleTimer);
58
+ }
59
+ function stopScheduleTicker() {
60
+ if (scheduleTimer === undefined) {
61
+ return;
62
+ }
63
+ clearTimeout(scheduleTimer);
64
+ scheduleTimer = undefined;
65
+ }
66
+ function tickSchedules() {
67
+ scheduleTimer = undefined;
68
+ const now = new Date();
69
+ const minute = Math.floor(now.getTime() / 60000);
70
+ if (minute !== lastFiredMinute) {
71
+ lastFiredMinute = minute;
72
+ for (const [name, cron] of schedules) {
73
+ if (!cron.matches(now)) {
74
+ continue;
75
+ }
76
+ void opts.fireSchedule(name).catch((error) => {
77
+ logger(`[agentkit] schedule "${name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
78
+ });
79
+ }
80
+ }
81
+ armScheduleTicker();
82
+ }
83
+ function clearReminderTimer(id) {
84
+ const timer = reminderTimers.get(id);
85
+ if (timer !== undefined) {
86
+ clearTimeout(timer);
87
+ reminderTimers.delete(id);
88
+ }
89
+ }
90
+ function armReminder(record) {
91
+ var _a;
92
+ clearReminderTimer(record.id);
93
+ const delay = Math.min(MAX_TIMER_MS, Math.max(0, record.nextFireAtMs - Date.now()));
94
+ const timer = setTimeout(() => {
95
+ reminderTimers.delete(record.id);
96
+ const current = reminders.get(record.id);
97
+ if (current === undefined || current.status !== "armed") {
98
+ return;
99
+ }
100
+ if (current.nextFireAtMs > Date.now() + 50) {
101
+ armReminder(current);
102
+ return;
103
+ }
104
+ void opts.fireReminder(current.id, current.fireCount).catch((error) => {
105
+ logger(`[agentkit] reminder "${current.id}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
106
+ });
107
+ }, delay);
108
+ (_a = timer.unref) === null || _a === void 0 ? void 0 : _a.call(timer);
109
+ reminderTimers.set(record.id, timer);
110
+ }
111
+ return {
112
+ upsertSchedule(input) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ schedules.set(input.name, parseCron(input.cron));
115
+ armScheduleTicker();
116
+ });
117
+ },
118
+ deleteSchedule(name) {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ schedules.delete(name);
121
+ if (schedules.size === 0) {
122
+ stopScheduleTicker();
123
+ }
124
+ });
125
+ },
126
+ putReminder(record) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ reminders.set(record.id, record);
129
+ yield store === null || store === void 0 ? void 0 : store.save(record);
130
+ if (armReminderClocks && record.status === "armed") {
131
+ armReminder(record);
132
+ return;
133
+ }
134
+ clearReminderTimer(record.id);
135
+ });
136
+ },
137
+ getReminder(id) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ return reminders.get(id);
140
+ });
141
+ },
142
+ listReminders() {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ return [...reminders.values()];
145
+ });
146
+ },
147
+ deleteReminder(id) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ clearReminderTimer(id);
150
+ reminders.delete(id);
151
+ yield store === null || store === void 0 ? void 0 : store.delete(id);
152
+ });
153
+ },
154
+ startClocks() {
155
+ if (!armReminderClocks) {
156
+ return;
157
+ }
158
+ for (const record of reminders.values()) {
159
+ if (record.status === "armed") {
160
+ armReminder(record);
161
+ }
162
+ }
163
+ },
164
+ stop() {
165
+ stopScheduleTicker();
166
+ for (const id of [...reminderTimers.keys()]) {
167
+ clearReminderTimer(id);
168
+ }
169
+ },
170
+ };
171
+ });
172
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Keep control-plane Temporal calendars aligned with authored
3
+ * `agent/schedules/*`. Upsert current names and delete ones that disappeared
4
+ * since the last successful sync (persisted under the engine state root).
5
+ */
6
+ import type { PlatformTimers } from "./platform-timers.js";
7
+ export declare const PLATFORM_SCHEDULE_CATALOG_FILENAME = "platform-schedule-names.json";
8
+ export declare function syncHostedPlatformSchedules(args: {
9
+ timers: PlatformTimers;
10
+ schedules: ReadonlyArray<{
11
+ name: string;
12
+ cron: string;
13
+ }>;
14
+ catalogPath: string;
15
+ logger: (line: string) => void;
16
+ }): Promise<void>;
17
+ //# sourceMappingURL=platform-schedule-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-schedule-sync.d.ts","sourceRoot":"","sources":["../../src/internal/platform-schedule-sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,kCAAkC,iCACf,CAAC;AAEjC,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Keep control-plane Temporal calendars aligned with authored
3
+ * `agent/schedules/*`. Upsert current names and delete ones that disappeared
4
+ * since the last successful sync (persisted under the engine state root).
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
16
+ import { dirname } from "node:path";
17
+ export const PLATFORM_SCHEDULE_CATALOG_FILENAME = "platform-schedule-names.json";
18
+ export function syncHostedPlatformSchedules(args) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const previous = yield readScheduleCatalog(args.catalogPath);
21
+ const currentNames = args.schedules.map((schedule) => schedule.name);
22
+ const currentSet = new Set(currentNames);
23
+ const failedDeletes = [];
24
+ for (const name of previous) {
25
+ if (currentSet.has(name)) {
26
+ continue;
27
+ }
28
+ try {
29
+ yield args.timers.deleteSchedule(name);
30
+ }
31
+ catch (error) {
32
+ failedDeletes.push(name);
33
+ args.logger(`[agentkit] platform timer delete failed for schedule "${name}": ${error instanceof Error ? error.message : String(error)}`);
34
+ }
35
+ }
36
+ for (const schedule of args.schedules) {
37
+ try {
38
+ yield args.timers.upsertSchedule({
39
+ name: schedule.name,
40
+ cron: schedule.cron,
41
+ });
42
+ }
43
+ catch (error) {
44
+ args.logger(`[agentkit] platform timer upsert failed for schedule "${schedule.name}": ${error instanceof Error ? error.message : String(error)}`);
45
+ }
46
+ }
47
+ // Keep failed removals in the catalog so the next boot retries them.
48
+ yield writeScheduleCatalog(args.catalogPath, [
49
+ ...new Set([...currentNames, ...failedDeletes]),
50
+ ]);
51
+ });
52
+ }
53
+ function readScheduleCatalog(catalogPath) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ try {
56
+ const parsed = JSON.parse(yield readFile(catalogPath, "utf8"));
57
+ if (!Array.isArray(parsed)) {
58
+ return [];
59
+ }
60
+ return parsed.filter((entry) => typeof entry === "string");
61
+ }
62
+ catch (_a) {
63
+ return [];
64
+ }
65
+ });
66
+ }
67
+ function writeScheduleCatalog(catalogPath, names) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ yield mkdir(dirname(catalogPath), { recursive: true });
70
+ yield writeFile(catalogPath, `${JSON.stringify(names)}\n`, "utf8");
71
+ });
72
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Timed-work client used by the kit. Local serve implements this in-process
3
+ * (`createLocalControlPlane`). Cursor hosting (`--no-control-plane`) uses
4
+ * the HTTP client below against the Cursor backend. Authors never see this
5
+ * surface.
6
+ *
7
+ * The control plane owns reminder *documents* and clocks. The kit only
8
+ * executes fires.
9
+ */
10
+ import { type ReminderRecord } from "./reminder-store.js";
11
+ export interface PlatformTimers {
12
+ upsertSchedule(input: {
13
+ name: string;
14
+ cron: string;
15
+ }): Promise<void>;
16
+ deleteSchedule(name: string): Promise<void>;
17
+ putReminder(record: ReminderRecord): Promise<void>;
18
+ getReminder(id: string): Promise<ReminderRecord | undefined>;
19
+ listReminders(): Promise<ReminderRecord[]>;
20
+ deleteReminder(id: string): Promise<void>;
21
+ }
22
+ export interface CursorHostedPlatformTimersOptions {
23
+ baseUrl?: string;
24
+ apiKey?: string;
25
+ fetch?: typeof fetch;
26
+ }
27
+ export declare function createCursorHostedPlatformTimers(options?: CursorHostedPlatformTimersOptions): PlatformTimers;
28
+ //# sourceMappingURL=platform-timers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-timers.d.ts","sourceRoot":"","sources":["../../src/internal/platform-timers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI5E,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC7D,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAqED,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,iCAAsC,GAC9C,cAAc,CA0EhB"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Timed-work client used by the kit. Local serve implements this in-process
3
+ * (`createLocalControlPlane`). Cursor hosting (`--no-control-plane`) uses
4
+ * the HTTP client below against the Cursor backend. Authors never see this
5
+ * surface.
6
+ *
7
+ * The control plane owns reminder *documents* and clocks. The kit only
8
+ * executes fires.
9
+ */
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ import { isReminderRecord } from "./reminder-store.js";
20
+ const DEFAULT_CURSOR_EXTERNAL_API_URL = "https://api.cursor.com";
21
+ function resolveApiKey(options) {
22
+ var _a;
23
+ var _b;
24
+ const key = (_a = ((_b = options.apiKey) !== null && _b !== void 0 ? _b : process.env.CURSOR_API_KEY)) === null || _a === void 0 ? void 0 : _a.trim();
25
+ if (key === undefined || key === "") {
26
+ throw new Error("platform timers require CURSOR_API_KEY (deployment pod credential on Cursor hosting)");
27
+ }
28
+ return key;
29
+ }
30
+ function resolveBaseUrl(options) {
31
+ var _a, _b;
32
+ const raw = ((_b = (_a = options.baseUrl) !== null && _a !== void 0 ? _a : process.env.CURSOR_API_BASE_URL) !== null && _b !== void 0 ? _b : DEFAULT_CURSOR_EXTERNAL_API_URL).trim();
33
+ return raw.endsWith("/") ? raw.slice(0, -1) : raw;
34
+ }
35
+ function timedWorkFetch(options, method, path, body) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ var _a;
38
+ const fetchImpl = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
39
+ if (typeof fetchImpl !== "function") {
40
+ throw new Error("platform timers require fetch");
41
+ }
42
+ return fetchImpl(`${resolveBaseUrl(options)}${path}`, Object.assign({ method, headers: Object.assign({ Authorization: `Bearer ${resolveApiKey(options)}` }, (body === undefined ? {} : { "Content-Type": "application/json" })) }, (body === undefined ? {} : { body: JSON.stringify(body) })));
43
+ });
44
+ }
45
+ function timedWorkRpc(options, method, path, body) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const response = yield timedWorkFetch(options, method, path, body);
48
+ if (response.ok) {
49
+ return;
50
+ }
51
+ const text = yield response.text();
52
+ let detail = `HTTP ${response.status}`;
53
+ try {
54
+ const parsed = text.length === 0 ? {} : JSON.parse(text);
55
+ if (parsed !== null &&
56
+ typeof parsed === "object" &&
57
+ "error" in parsed &&
58
+ typeof parsed.error === "string") {
59
+ detail = parsed.error;
60
+ }
61
+ }
62
+ catch (_a) {
63
+ // Keep the status-only detail.
64
+ }
65
+ throw new Error(`platform timers ${method} ${path}: ${detail}`);
66
+ });
67
+ }
68
+ export function createCursorHostedPlatformTimers(options = {}) {
69
+ return {
70
+ upsertSchedule(input) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ yield timedWorkRpc(options, "PUT", `/internal/agent-serve/timed-work/schedules/${encodeURIComponent(input.name)}`, { cron: input.cron });
73
+ });
74
+ },
75
+ deleteSchedule(name) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ yield timedWorkRpc(options, "DELETE", `/internal/agent-serve/timed-work/schedules/${encodeURIComponent(name)}`);
78
+ });
79
+ },
80
+ putReminder(record) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ yield timedWorkRpc(options, "PUT", `/internal/agent-serve/timed-work/reminders/${encodeURIComponent(record.id)}`, record);
83
+ });
84
+ },
85
+ getReminder(id) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ const response = yield timedWorkFetch(options, "GET", `/internal/agent-serve/timed-work/reminders/${encodeURIComponent(id)}`);
88
+ if (response.status === 404) {
89
+ return undefined;
90
+ }
91
+ if (!response.ok) {
92
+ throw new Error(`platform timers GET /reminders/${id}: HTTP ${response.status}`);
93
+ }
94
+ const parsed = yield response.json();
95
+ return isReminderRecord(parsed) ? parsed : undefined;
96
+ });
97
+ },
98
+ listReminders() {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const response = yield timedWorkFetch(options, "GET", "/internal/agent-serve/timed-work/reminders");
101
+ if (!response.ok) {
102
+ throw new Error(`platform timers GET /reminders: HTTP ${response.status}`);
103
+ }
104
+ const parsed = yield response.json();
105
+ if (parsed === null ||
106
+ typeof parsed !== "object" ||
107
+ !("reminders" in parsed) ||
108
+ !Array.isArray(parsed.reminders)) {
109
+ return [];
110
+ }
111
+ return parsed.reminders.filter(isReminderRecord);
112
+ });
113
+ },
114
+ deleteReminder(id) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ yield timedWorkRpc(options, "DELETE", `/internal/agent-serve/timed-work/reminders/${encodeURIComponent(id)}`);
117
+ });
118
+ },
119
+ };
120
+ }
@@ -4,7 +4,8 @@
4
4
  * function XOR prompt.
5
5
  */
6
6
  import type { ReminderCreateInput, ReminderInfo } from "../types.js";
7
- import { type ReminderRecord } from "./reminder-store.js";
7
+ import type { PlatformTimers } from "./platform-timers.js";
8
+ import type { ReminderRecord } from "./reminder-store.js";
8
9
  import { type SessionEngine } from "./session-engine.js";
9
10
  export { ReminderValidationError } from "./reminder-schedule.js";
10
11
  export declare class UnknownReminderError extends Error {
@@ -14,24 +15,25 @@ export declare class UnknownReminderError extends Error {
14
15
  export declare class ReminderRunner {
15
16
  private readonly engine;
16
17
  private readonly logger;
17
- private readonly store;
18
+ private readonly platformTimers?;
19
+ private readonly records;
18
20
  private readonly handlers;
19
21
  private readonly timers;
20
22
  private readonly firing;
21
23
  /** Single-flight idle gates keyed by `channelId:continuationToken`. */
22
24
  private readonly idleGates;
23
25
  private started;
24
- constructor(engine: SessionEngine, logger?: (line: string) => void);
25
- get storeRoot(): string;
26
- /** Start deadline timers for armed reminders (call after restore). */
27
- start(): Promise<void>;
26
+ constructor(engine: SessionEngine, logger?: (line: string) => void, platformTimers?: PlatformTimers | undefined);
28
27
  /**
29
- * Pull reminder records from `defineStorage` into `<stateRoot>/reminders`
30
- * when local disk is empty for that id. Failures are logged and skipped.
28
+ * Load reminder documents from the control plane into memory. Does not
29
+ * arm in-process timers the CP owns clocks.
31
30
  */
32
- private hydrateFromStorage;
33
- /** Persist locally and mirror into the authored storage sink when present. */
31
+ hydrate(): Promise<void>;
32
+ /** Start deadline timers for armed reminders (tests / no control plane). */
33
+ start(): Promise<void>;
34
34
  private persist;
35
+ private getRecord;
36
+ private allRecords;
35
37
  stop(): void;
36
38
  create(input: ReminderCreateInput): Promise<ReminderInfo>;
37
39
  list(filter?: {
@@ -49,8 +51,10 @@ export declare class ReminderRunner {
49
51
  * time and disarms as `session_gone`.
50
52
  */
51
53
  rekeyContinuation(channelId: string, oldToken: string, newToken: string): Promise<number>;
52
- /** Fire one reminder immediately (dev / hillclimb). */
53
- dispatch(reminderId: string): Promise<{
54
+ /** Fire one reminder immediately (dev / hillclimb / control plane). */
55
+ dispatch(reminderId: string, opts?: {
56
+ expectedFireCount?: number;
57
+ }): Promise<{
54
58
  reminderId: string;
55
59
  outcome: "fired" | "noop";
56
60
  reason?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED;;;;;OAKG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAkBjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IA0DxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}