jinn-cli 0.5.3 → 0.6.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 (163) hide show
  1. package/dist/bin/jimmy.js +0 -0
  2. package/dist/src/cli/status.d.ts.map +1 -1
  3. package/dist/src/cli/status.js +10 -1
  4. package/dist/src/cli/status.js.map +1 -1
  5. package/dist/src/connectors/discord/format.d.ts +3 -0
  6. package/dist/src/connectors/discord/format.d.ts.map +1 -0
  7. package/dist/src/connectors/discord/format.js +33 -0
  8. package/dist/src/connectors/discord/format.js.map +1 -0
  9. package/dist/src/connectors/discord/index.d.ts +41 -0
  10. package/dist/src/connectors/discord/index.d.ts.map +1 -0
  11. package/dist/src/connectors/discord/index.js +302 -0
  12. package/dist/src/connectors/discord/index.js.map +1 -0
  13. package/dist/src/connectors/discord/remote.d.ts +33 -0
  14. package/dist/src/connectors/discord/remote.d.ts.map +1 -0
  15. package/dist/src/connectors/discord/remote.js +89 -0
  16. package/dist/src/connectors/discord/remote.js.map +1 -0
  17. package/dist/src/connectors/discord/threads.d.ts +5 -0
  18. package/dist/src/connectors/discord/threads.d.ts.map +1 -0
  19. package/dist/src/connectors/discord/threads.js +22 -0
  20. package/dist/src/connectors/discord/threads.js.map +1 -0
  21. package/dist/src/connectors/whatsapp/format.d.ts +2 -0
  22. package/dist/src/connectors/whatsapp/format.d.ts.map +1 -0
  23. package/dist/src/connectors/whatsapp/format.js +22 -0
  24. package/dist/src/connectors/whatsapp/format.js.map +1 -0
  25. package/dist/src/connectors/whatsapp/index.d.ts +42 -0
  26. package/dist/src/connectors/whatsapp/index.d.ts.map +1 -0
  27. package/dist/src/connectors/whatsapp/index.js +279 -0
  28. package/dist/src/connectors/whatsapp/index.js.map +1 -0
  29. package/dist/src/engines/claude.d.ts +5 -0
  30. package/dist/src/engines/claude.d.ts.map +1 -1
  31. package/dist/src/engines/claude.js +192 -22
  32. package/dist/src/engines/claude.js.map +1 -1
  33. package/dist/src/gateway/api.d.ts +1 -0
  34. package/dist/src/gateway/api.d.ts.map +1 -1
  35. package/dist/src/gateway/api.js +705 -18
  36. package/dist/src/gateway/api.js.map +1 -1
  37. package/dist/src/gateway/lifecycle.d.ts.map +1 -1
  38. package/dist/src/gateway/lifecycle.js +32 -15
  39. package/dist/src/gateway/lifecycle.js.map +1 -1
  40. package/dist/src/gateway/project-tagger.d.ts +20 -0
  41. package/dist/src/gateway/project-tagger.d.ts.map +1 -0
  42. package/dist/src/gateway/project-tagger.js +55 -0
  43. package/dist/src/gateway/project-tagger.js.map +1 -0
  44. package/dist/src/gateway/project-tagger.test.d.ts +2 -0
  45. package/dist/src/gateway/project-tagger.test.d.ts.map +1 -0
  46. package/dist/src/gateway/project-tagger.test.js +110 -0
  47. package/dist/src/gateway/project-tagger.test.js.map +1 -0
  48. package/dist/src/gateway/projects.d.ts +15 -0
  49. package/dist/src/gateway/projects.d.ts.map +1 -0
  50. package/dist/src/gateway/projects.js +48 -0
  51. package/dist/src/gateway/projects.js.map +1 -0
  52. package/dist/src/gateway/projects.test.d.ts +2 -0
  53. package/dist/src/gateway/projects.test.d.ts.map +1 -0
  54. package/dist/src/gateway/projects.test.js +85 -0
  55. package/dist/src/gateway/projects.test.js.map +1 -0
  56. package/dist/src/gateway/server.d.ts.map +1 -1
  57. package/dist/src/gateway/server.js +90 -2
  58. package/dist/src/gateway/server.js.map +1 -1
  59. package/dist/src/gateway/tasks.d.ts +14 -0
  60. package/dist/src/gateway/tasks.d.ts.map +1 -0
  61. package/dist/src/gateway/tasks.js +51 -0
  62. package/dist/src/gateway/tasks.js.map +1 -0
  63. package/dist/src/gateway/tasks.test.d.ts +2 -0
  64. package/dist/src/gateway/tasks.test.d.ts.map +1 -0
  65. package/dist/src/gateway/tasks.test.js +131 -0
  66. package/dist/src/gateway/tasks.test.js.map +1 -0
  67. package/dist/src/sessions/callbacks.d.ts +29 -0
  68. package/dist/src/sessions/callbacks.d.ts.map +1 -0
  69. package/dist/src/sessions/callbacks.js +110 -0
  70. package/dist/src/sessions/callbacks.js.map +1 -0
  71. package/dist/src/sessions/context.js +4 -3
  72. package/dist/src/sessions/context.js.map +1 -1
  73. package/dist/src/sessions/engine-override.d.ts +3 -0
  74. package/dist/src/sessions/engine-override.d.ts.map +1 -0
  75. package/dist/src/sessions/engine-override.js +42 -0
  76. package/dist/src/sessions/engine-override.js.map +1 -0
  77. package/dist/src/sessions/manager.d.ts.map +1 -1
  78. package/dist/src/sessions/manager.js +385 -40
  79. package/dist/src/sessions/manager.js.map +1 -1
  80. package/dist/src/sessions/queue.d.ts +19 -2
  81. package/dist/src/sessions/queue.d.ts.map +1 -1
  82. package/dist/src/sessions/queue.js +44 -13
  83. package/dist/src/sessions/queue.js.map +1 -1
  84. package/dist/src/sessions/registry.d.ts +21 -1
  85. package/dist/src/sessions/registry.d.ts.map +1 -1
  86. package/dist/src/sessions/registry.js +62 -0
  87. package/dist/src/sessions/registry.js.map +1 -1
  88. package/dist/src/shared/rateLimit.d.ts +13 -0
  89. package/dist/src/shared/rateLimit.d.ts.map +1 -0
  90. package/dist/src/shared/rateLimit.js +30 -0
  91. package/dist/src/shared/rateLimit.js.map +1 -0
  92. package/dist/src/shared/types.d.ts +46 -3
  93. package/dist/src/shared/types.d.ts.map +1 -1
  94. package/dist/src/shared/usageAwareness.d.ts +10 -0
  95. package/dist/src/shared/usageAwareness.d.ts.map +1 -0
  96. package/dist/src/shared/usageAwareness.js +62 -0
  97. package/dist/src/shared/usageAwareness.js.map +1 -0
  98. package/dist/web/404.html +1 -1
  99. package/dist/web/_next/static/chunks/184-5a617386af9a1dd3.js +1 -0
  100. package/dist/web/_next/static/chunks/700-ad04a2a5b3c8880f.js +1 -0
  101. package/dist/web/_next/static/chunks/app/chat/page-36edb6fc1d1e880b.js +1 -0
  102. package/dist/web/_next/static/chunks/app/costs/{page-7940c2fe7e3dace1.js → page-6c5cd46a6b3cde21.js} +1 -1
  103. package/dist/web/_next/static/chunks/app/cron/{page-f81a986689712af7.js → page-210d9d333a7eed94.js} +1 -1
  104. package/dist/web/_next/static/chunks/app/kanban/page-c32370bcd6a7c841.js +1 -0
  105. package/dist/web/_next/static/chunks/app/layout-3ad6b73a0904c24b.js +1 -0
  106. package/dist/web/_next/static/chunks/app/logs/page-7322a6789e16dca4.js +1 -0
  107. package/dist/web/_next/static/chunks/app/org/{page-3d44d51e94edb85e.js → page-02263c5702e0fd3e.js} +1 -1
  108. package/dist/web/_next/static/chunks/app/{page-7ac43789d477a51f.js → page-b68dcf7b8802c704.js} +1 -1
  109. package/dist/web/_next/static/chunks/app/sessions/page-bf7ad2fac281c7d6.js +1 -0
  110. package/dist/web/_next/static/chunks/app/settings/page-d3b89563c42be2e5.js +1 -0
  111. package/dist/web/_next/static/chunks/app/skills/{page-26b727333df9db45.js → page-194f4e97f29ab581.js} +1 -1
  112. package/dist/web/_next/static/css/b809b6af2d241fc8.css +1 -0
  113. package/dist/web/chat.html +1 -1
  114. package/dist/web/chat.txt +4 -4
  115. package/dist/web/costs.html +2 -2
  116. package/dist/web/costs.txt +4 -4
  117. package/dist/web/cron.html +1 -1
  118. package/dist/web/cron.txt +4 -4
  119. package/dist/web/index.html +1 -1
  120. package/dist/web/index.txt +4 -4
  121. package/dist/web/kanban.html +1 -1
  122. package/dist/web/kanban.txt +4 -4
  123. package/dist/web/logs.html +2 -2
  124. package/dist/web/logs.txt +4 -4
  125. package/dist/web/org.html +1 -1
  126. package/dist/web/org.txt +4 -4
  127. package/dist/web/sessions.html +1 -1
  128. package/dist/web/sessions.txt +14 -17
  129. package/dist/web/settings.html +1 -1
  130. package/dist/web/settings.txt +4 -4
  131. package/dist/web/skills.html +1 -1
  132. package/dist/web/skills.txt +4 -4
  133. package/package.json +6 -1
  134. package/dist/web/_next/static/chunks/282-4e9c26e9a600c58e.js +0 -1
  135. package/dist/web/_next/static/chunks/700-a7cbf54fe1fbf4bc.js +0 -1
  136. package/dist/web/_next/static/chunks/app/chat/page-757fcd211d059cb7.js +0 -1
  137. package/dist/web/_next/static/chunks/app/kanban/page-6ab8586b063ca3ac.js +0 -1
  138. package/dist/web/_next/static/chunks/app/layout-c24e2d25774ff71a.js +0 -1
  139. package/dist/web/_next/static/chunks/app/logs/page-388b787cb847ca97.js +0 -1
  140. package/dist/web/_next/static/chunks/app/sessions/page-18757fcd067b7e9d.js +0 -1
  141. package/dist/web/_next/static/chunks/app/settings/page-f62176848534f90a.js +0 -1
  142. package/dist/web/_next/static/css/bd612b1ca9b40306.css +0 -1
  143. package/dist/web/app-build-manifest.json +0 -3
  144. package/dist/web/build-manifest.json +0 -17
  145. package/dist/web/react-loadable-manifest.json +0 -1
  146. package/dist/web/server/app-paths-manifest.json +0 -1
  147. package/dist/web/server/interception-route-rewrite-manifest.js +0 -1
  148. package/dist/web/server/middleware-build-manifest.js +0 -19
  149. package/dist/web/server/middleware-manifest.json +0 -6
  150. package/dist/web/server/middleware-react-loadable-manifest.js +0 -1
  151. package/dist/web/server/next-font-manifest.js +0 -1
  152. package/dist/web/server/next-font-manifest.json +0 -1
  153. package/dist/web/server/pages-manifest.json +0 -1
  154. package/dist/web/server/server-reference-manifest.js +0 -1
  155. package/dist/web/server/server-reference-manifest.json +0 -5
  156. package/dist/web/static/development/_buildManifest.js +0 -1
  157. package/dist/web/static/development/_ssgManifest.js +0 -1
  158. package/dist/web/types/cache-life.d.ts +0 -141
  159. package/dist/web/types/package.json +0 -1
  160. package/dist/web/types/routes.d.ts +0 -66
  161. package/dist/web/types/validator.ts +0 -142
  162. /package/dist/web/_next/static/{J4YFiPdzNcFHieP2FIPPe → QrKxazgwMrykF2yLwDvUM}/_buildManifest.js +0 -0
  163. /package/dist/web/_next/static/{J4YFiPdzNcFHieP2FIPPe → QrKxazgwMrykF2yLwDvUM}/_ssgManifest.js +0 -0
@@ -1,13 +1,71 @@
1
1
  import fs from "node:fs";
2
- import { accumulateSessionCost, createSession, deleteSession, getSessionBySessionKey, insertMessage, updateSession, } from "./registry.js";
2
+ import { accumulateSessionCost, createSession, deleteSession, getSessionBySessionKey, getMessages, insertMessage, updateSession, } from "./registry.js";
3
+ import { notifyParentSession, notifyRateLimited, notifyRateLimitResumed, notifyDiscordChannel } from "./callbacks.js";
3
4
  import { buildContext } from "./context.js";
4
5
  import { SessionQueue } from "./queue.js";
5
6
  import { JINN_HOME } from "../shared/paths.js";
6
7
  import { logger } from "../shared/logger.js";
7
8
  import { resolveEffort } from "../shared/effort.js";
9
+ import { computeNextRetryDelayMs, computeRateLimitDeadlineMs, detectRateLimit } from "../shared/rateLimit.js";
10
+ import { getClaudeExpectedResetAt, isLikelyNearClaudeUsageLimit, recordClaudeRateLimit } from "../shared/usageAwareness.js";
8
11
  import { loadJobs } from "../cron/jobs.js";
9
12
  import { setCronJobEnabled, triggerCronJob } from "../cron/scheduler.js";
10
13
  import { resolveMcpServers, writeMcpConfigFile, cleanupMcpConfigFile } from "../mcp/resolver.js";
14
+ function maybeRevertEngineOverride(session) {
15
+ const meta = (session.transportMeta || {});
16
+ const override = meta["engineOverride"];
17
+ if (!override)
18
+ return session;
19
+ const originalEngine = typeof override.originalEngine === "string" ? override.originalEngine : null;
20
+ const originalEngineSessionId = typeof override.originalEngineSessionId === "string"
21
+ ? override.originalEngineSessionId
22
+ : null;
23
+ const syncSince = typeof override.syncSince === "string" ? override.syncSince : null;
24
+ const untilIso = typeof override.until === "string" ? override.until : null;
25
+ if (!originalEngine || !untilIso)
26
+ return session;
27
+ const until = new Date(untilIso);
28
+ if (Number.isNaN(until.getTime()))
29
+ return session;
30
+ if (until.getTime() > Date.now())
31
+ return session;
32
+ const engineSessionsRaw = meta["engineSessions"];
33
+ const engineSessions = (engineSessionsRaw && typeof engineSessionsRaw === "object" && !Array.isArray(engineSessionsRaw))
34
+ ? { ...engineSessionsRaw }
35
+ : {};
36
+ // Preserve the current engine session ID under its engine key
37
+ if (session.engine && session.engineSessionId) {
38
+ engineSessions[String(session.engine)] = session.engineSessionId;
39
+ }
40
+ const restoredSessionId = originalEngineSessionId
41
+ ?? (typeof engineSessions[originalEngine] === "string" ? engineSessions[originalEngine] : null);
42
+ const nextMeta = { ...meta, engineSessions };
43
+ if (originalEngine === "claude" && syncSince && session.engine !== "claude") {
44
+ nextMeta["claudeSyncSince"] = syncSince;
45
+ }
46
+ delete nextMeta["engineOverride"];
47
+ return updateSession(session.id, {
48
+ engine: originalEngine,
49
+ engineSessionId: restoredSessionId,
50
+ transportMeta: nextMeta,
51
+ lastError: null,
52
+ }) ?? session;
53
+ }
54
+ function mergeTransportMeta(existing, incoming) {
55
+ const baseExisting = (existing && typeof existing === "object" && !Array.isArray(existing))
56
+ ? existing
57
+ : {};
58
+ const baseIncoming = (incoming && typeof incoming === "object" && !Array.isArray(incoming))
59
+ ? incoming
60
+ : {};
61
+ const merged = { ...baseExisting, ...baseIncoming };
62
+ // Preserve Jinn internal keys from being overwritten by transport adapters.
63
+ for (const key of ["engineOverride", "engineSessions", "claudeSyncSince"]) {
64
+ if (baseExisting[key] !== undefined)
65
+ merged[key] = baseExisting[key];
66
+ }
67
+ return merged;
68
+ }
11
69
  export class SessionManager {
12
70
  config;
13
71
  engines;
@@ -52,18 +110,27 @@ export class SessionManager {
52
110
  (opts.employee ? ` (employee: ${opts.employee.name})` : ""));
53
111
  }
54
112
  else {
113
+ const mergedMeta = mergeTransportMeta(session.transportMeta, msg.transportMeta);
55
114
  session = updateSession(session.id, {
56
115
  replyContext: msg.replyContext,
57
116
  messageId: msg.messageId ?? null,
58
- transportMeta: msg.transportMeta ?? null,
117
+ transportMeta: mergedMeta,
59
118
  ...(opts.model ? { model: opts.model } : {}),
60
119
  }) ?? session;
61
120
  }
121
+ session = maybeRevertEngineOverride(session);
62
122
  const target = connector.reconstructTarget(msg.replyContext);
63
123
  target.messageTs ??= msg.messageId;
64
124
  const attachmentPaths = msg.attachments
65
125
  .map((attachment) => attachment.localPath)
66
126
  .filter((filePath) => !!filePath);
127
+ if (session.status === "waiting") {
128
+ const expectedResetAt = getClaudeExpectedResetAt();
129
+ const resumeText = expectedResetAt
130
+ ? expectedResetAt.toLocaleString("en-GB", { weekday: "short", day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" })
131
+ : null;
132
+ await connector.replyMessage(target, `⏳ Still paused due to Claude usage limit${resumeText ? ` (resets ${resumeText})` : ""}. I queued this message and will respond automatically.`).catch(() => { });
133
+ }
67
134
  if (session.status === "running" && this.queue.isRunning(msg.sessionKey) && connector.getCapabilities().reactions) {
68
135
  await connector.addReaction(target, "clock1").catch(() => { });
69
136
  }
@@ -93,7 +160,7 @@ export class SessionManager {
93
160
  status: "running",
94
161
  replyContext: msg.replyContext,
95
162
  messageId: msg.messageId ?? null,
96
- transportMeta: msg.transportMeta ?? null,
163
+ transportMeta: mergeTransportMeta(session.transportMeta, msg.transportMeta),
97
164
  lastActivity: new Date().toISOString(),
98
165
  });
99
166
  // Resolve MCP config before try block so it's accessible in catch for cleanup
@@ -120,75 +187,339 @@ export class SessionManager {
120
187
  }
121
188
  }
122
189
  const effortLevel = resolveEffort(engineConfig, session, employee);
123
- let result;
124
- try {
125
- result = await engine.run({
126
- prompt: msg.text,
127
- resumeSessionId: session.engineSessionId ?? undefined,
128
- systemPrompt,
129
- cwd: JINN_HOME,
130
- bin: engineConfig.bin,
131
- model: session.model ?? engineConfig.model,
132
- effortLevel,
133
- cliFlags: employee?.cliFlags,
134
- mcpConfigPath,
135
- attachments: attachments.length > 0 ? attachments : undefined,
136
- sessionId: session.id,
137
- });
190
+ // If we previously switched to GPT while Claude was rate-limited, inject a sync transcript
191
+ // so Claude can resume with full context when it comes back online.
192
+ const syncSinceIso = session.transportMeta?.claudeSyncSince;
193
+ let promptToRun = msg.text;
194
+ const syncSinceMs = typeof syncSinceIso === "string" ? new Date(syncSinceIso).getTime() : NaN;
195
+ const syncRequested = session.engine === "claude" && typeof syncSinceIso === "string" && Number.isFinite(syncSinceMs);
196
+ if (syncRequested) {
197
+ const sinceMessages = getMessages(session.id)
198
+ .filter((m) => (m.role === "user" || m.role === "assistant") && m.timestamp >= syncSinceMs)
199
+ .map((m) => `${m.role.toUpperCase()}: ${m.content}`);
200
+ const transcript = sinceMessages.slice(-20).join("\n\n");
201
+ promptToRun =
202
+ `We temporarily switched to GPT due to a Claude usage limit. Sync your context with this transcript (most recent last), then respond to the last USER message.\n\n${transcript}`;
203
+ }
204
+ // Heuristic preflight warning: Claude usage limits don't expose a precise "remaining" budget.
205
+ // If we've hit the limit recently and this looks like a heavy turn, warn before we spend time.
206
+ if (decorateMessages && session.engine === "claude" && isLikelyNearClaudeUsageLimit()) {
207
+ const modelName = (session.model ?? engineConfig.model ?? "").toLowerCase();
208
+ const heavyEffort = ["high", "xhigh", "max"].includes((effortLevel || "").toLowerCase());
209
+ const heavyModel = modelName.includes("opus");
210
+ const looksBig = attachments.length > 0 || msg.text.length > 6000;
211
+ if ((heavyEffort || heavyModel) && looksBig) {
212
+ const expectedResetAt = getClaudeExpectedResetAt();
213
+ const resumeText = expectedResetAt
214
+ ? expectedResetAt.toLocaleString("en-GB", { weekday: "short", day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" })
215
+ : null;
216
+ await connector.replyMessage(target, `⚠️ Heads up: Claude usage limits were hit recently, and this looks like a bigger task. If you're near the limit, it may pause${resumeText ? ` until ~${resumeText}` : ""}.`).catch(() => { });
217
+ }
138
218
  }
139
- finally {
140
- // Clean up temp attachment files downloaded from Slack
141
- for (const filePath of attachments) {
142
- try {
143
- fs.rmSync(filePath, { force: true });
219
+ const result = await engine.run({
220
+ prompt: promptToRun,
221
+ resumeSessionId: session.engineSessionId ?? undefined,
222
+ systemPrompt,
223
+ cwd: JINN_HOME,
224
+ bin: engineConfig.bin,
225
+ model: session.model ?? engineConfig.model,
226
+ effortLevel,
227
+ cliFlags: employee?.cliFlags,
228
+ mcpConfigPath,
229
+ attachments: attachments.length > 0 ? attachments : undefined,
230
+ sessionId: session.id,
231
+ });
232
+ const wasInterrupted = result.error?.startsWith("Interrupted");
233
+ // Detect rate limit / usage limit errors and auto-retry
234
+ const rateLimit = !wasInterrupted ? detectRateLimit(result) : { limited: false };
235
+ if (rateLimit.limited) {
236
+ recordClaudeRateLimit(rateLimit.resetsAt);
237
+ const strategy = this.config.sessions?.rateLimitStrategy ?? "fallback";
238
+ // Optional fallback: switch to GPT (Codex) while Claude resets
239
+ if (session.engine === "claude" && strategy === "fallback") {
240
+ const fallbackName = this.config.sessions?.fallbackEngine ?? "codex";
241
+ const fallbackEngine = this.engines.get(fallbackName);
242
+ if (fallbackEngine) {
243
+ const { resumeAt } = computeNextRetryDelayMs(rateLimit.resetsAt);
244
+ const until = resumeAt ?? new Date(Date.now() + 6 * 60 * 60_000);
245
+ const syncSince = new Date().toISOString();
246
+ const resumeText = resumeAt
247
+ ? resumeAt.toLocaleString("en-GB", { weekday: "short", day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" })
248
+ : null;
249
+ notifyDiscordChannel(`⚠️ Claude usage limit reached. Session ${session.id}${session.employee ? ` (${session.employee})` : ""} switching to GPT.`);
250
+ await connector.replyMessage(target, `⚠️ Claude usage limit reached${resumeText ? `. Resets ${resumeText}` : ""}. Switching to GPT for now.`).catch(() => { });
251
+ const nextMeta = { ...(session.transportMeta || {}) };
252
+ const engineSessionsRaw = nextMeta.engineSessions;
253
+ const engineSessions = (engineSessionsRaw && typeof engineSessionsRaw === "object" && !Array.isArray(engineSessionsRaw))
254
+ ? { ...engineSessionsRaw }
255
+ : {};
256
+ if (session.engineSessionId) {
257
+ engineSessions.claude = session.engineSessionId;
258
+ }
259
+ nextMeta.engineSessions = engineSessions;
260
+ nextMeta.engineOverride = { originalEngine: "claude", originalEngineSessionId: session.engineSessionId, until: until.toISOString(), syncSince };
261
+ updateSession(session.id, {
262
+ engine: fallbackName,
263
+ // Keep Claude engine_session_id intact for later restore; Codex will return its own thread id.
264
+ transportMeta: nextMeta,
265
+ status: "running",
266
+ lastActivity: new Date().toISOString(),
267
+ lastError: resumeAt
268
+ ? `Claude usage limit — using GPT until ${resumeAt.toISOString()}`
269
+ : "Claude usage limit — using GPT temporarily",
270
+ });
271
+ const fallbackConfig = this.config.engines.codex;
272
+ const fallbackEffort = resolveEffort(fallbackConfig, session, employee);
273
+ const codexResume = typeof engineSessions.codex === "string" ? engineSessions.codex : undefined;
274
+ const history = getMessages(session.id)
275
+ .filter((m) => m.role === "user" || m.role === "assistant")
276
+ .map((m) => `${m.role.toUpperCase()}: ${m.content}`);
277
+ const historyText = history.slice(-12).join("\n\n");
278
+ const fallbackPrompt = codexResume
279
+ ? msg.text
280
+ : `Continue this conversation and respond to the last USER message.\n\nConversation so far:\n\n${historyText}`;
281
+ const fallbackResult = await fallbackEngine.run({
282
+ prompt: fallbackPrompt,
283
+ resumeSessionId: codexResume,
284
+ systemPrompt,
285
+ cwd: JINN_HOME,
286
+ bin: fallbackConfig.bin,
287
+ model: session.model ?? fallbackConfig.model,
288
+ effortLevel: fallbackEffort,
289
+ cliFlags: employee?.cliFlags,
290
+ attachments: attachments.length > 0 ? attachments : undefined,
291
+ sessionId: session.id,
292
+ });
293
+ const fallbackText = fallbackResult.result?.trim()
294
+ ? fallbackResult.result
295
+ : fallbackResult.error || "(No response from engine)";
296
+ insertMessage(session.id, "assistant", fallbackText);
297
+ if (fallbackResult.cost || fallbackResult.numTurns) {
298
+ accumulateSessionCost(session.id, fallbackResult.cost ?? 0, fallbackResult.numTurns ?? 1);
299
+ }
300
+ // Persist Codex thread id so future fallbacks can resume it
301
+ const nextEngineSessions = { ...engineSessions };
302
+ if (fallbackResult.sessionId) {
303
+ nextEngineSessions.codex = fallbackResult.sessionId;
304
+ }
305
+ const metaAfter = { ...(getSessionBySessionKey(msg.sessionKey)?.transportMeta || nextMeta) };
306
+ metaAfter.engineSessions = nextEngineSessions;
307
+ updateSession(session.id, { transportMeta: metaAfter });
308
+ if (decorateMessages && connector.setTypingStatus) {
309
+ await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
310
+ }
311
+ await connector.replyMessage(target, fallbackText).catch(() => { });
312
+ if (decorateMessages && capabilities.reactions) {
313
+ await connector.removeReaction(target, "eyes").catch(() => { });
314
+ }
315
+ const updated = updateSession(session.id, {
316
+ engineSessionId: fallbackResult.sessionId,
317
+ status: fallbackResult.error ? "error" : "idle",
318
+ replyContext: msg.replyContext,
319
+ messageId: msg.messageId ?? null,
320
+ transportMeta: mergeTransportMeta(getSessionBySessionKey(msg.sessionKey)?.transportMeta ?? session.transportMeta, msg.transportMeta),
321
+ lastActivity: new Date().toISOString(),
322
+ lastError: fallbackResult.error ?? null,
323
+ });
324
+ if (updated) {
325
+ notifyParentSession(updated, { result: fallbackResult.result, error: fallbackResult.error ?? null, cost: fallbackResult.cost, durationMs: fallbackResult.durationMs });
326
+ }
327
+ return;
328
+ }
329
+ }
330
+ const waitEmoji = "hourglass_flowing_sand";
331
+ const { delayMs, resumeAt } = computeNextRetryDelayMs(rateLimit.resetsAt);
332
+ const deadlineMs = computeRateLimitDeadlineMs(rateLimit.resetsAt, rateLimit.resetsAt ? 30 * 60_000 : 6 * 60 * 60_000);
333
+ const resumeText = resumeAt
334
+ ? resumeAt.toLocaleString("en-GB", { weekday: "short", day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" })
335
+ : null;
336
+ logger.info(`Session ${session.id} hit Claude usage limit — will auto-retry ${resumeAt ? `at ${resumeAt.toISOString()}` : `in ${Math.round(delayMs / 1000)}s`}`);
337
+ // Send hardcoded Discord notification — does not depend on LLM
338
+ notifyDiscordChannel(`⚠️ Claude usage limit reached. Session ${session.id}${session.employee ? ` (${session.employee})` : ""} paused${resumeText ? ` until ${resumeText}` : ""}.`);
339
+ // Clear "thinking" UI and show waiting state
340
+ if (decorateMessages && connector.setTypingStatus) {
341
+ await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
342
+ }
343
+ if (decorateMessages && capabilities.reactions) {
344
+ await connector.removeReaction(target, "eyes").catch(() => { });
345
+ await connector.addReaction(target, waitEmoji).catch(() => { });
346
+ }
347
+ const waitingSession = updateSession(session.id, {
348
+ ...(result.sessionId?.trim() ? { engineSessionId: result.sessionId } : {}),
349
+ status: "waiting",
350
+ lastActivity: new Date().toISOString(),
351
+ lastError: resumeAt
352
+ ? `Claude usage limit — resumes ${resumeAt.toISOString()}`
353
+ : "Claude usage limit — waiting for reset",
354
+ }) ?? session;
355
+ notifyRateLimited(waitingSession, resumeAt
356
+ ? resumeAt.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" })
357
+ : undefined);
358
+ await connector.replyMessage(target, `⏳ Claude usage limit reached${resumeText ? `. Resets ${resumeText}` : ""} — I'll continue automatically.`).catch(() => { });
359
+ // Keep lastActivity fresh while waiting (UI / status endpoints)
360
+ const heartbeat = setInterval(() => {
361
+ updateSession(session.id, { status: "waiting", lastActivity: new Date().toISOString() });
362
+ }, 60_000);
363
+ try {
364
+ let attempt = 0;
365
+ let nextDelayMs = delayMs;
366
+ while (Date.now() < deadlineMs) {
367
+ await new Promise(r => setTimeout(r, nextDelayMs));
368
+ attempt++;
369
+ // Check if session was stopped while waiting
370
+ const currentSession = getSessionBySessionKey(msg.sessionKey);
371
+ if (!currentSession || currentSession.status === "error") {
372
+ logger.info(`Session ${session.id} stopped while waiting for usage reset`);
373
+ return;
374
+ }
375
+ // Show active processing again
376
+ if (decorateMessages && connector.setTypingStatus) {
377
+ await connector.setTypingStatus(target.channel, threadTs, "is thinking...").catch(() => { });
378
+ }
379
+ if (decorateMessages && capabilities.reactions) {
380
+ await connector.removeReaction(target, waitEmoji).catch(() => { });
381
+ await connector.addReaction(target, "eyes").catch(() => { });
382
+ }
383
+ logger.info(`Session ${session.id} retrying after usage limit (attempt ${attempt})`);
384
+ const retryResult = await engine.run({
385
+ prompt: msg.text,
386
+ resumeSessionId: currentSession.engineSessionId ?? undefined,
387
+ systemPrompt,
388
+ cwd: JINN_HOME,
389
+ bin: engineConfig.bin,
390
+ model: currentSession.model ?? engineConfig.model,
391
+ effortLevel,
392
+ cliFlags: employee?.cliFlags,
393
+ mcpConfigPath,
394
+ attachments: attachments.length > 0 ? attachments : undefined,
395
+ sessionId: session.id,
396
+ });
397
+ const retryInterrupted = retryResult.error?.startsWith("Interrupted");
398
+ const retryRateLimit = !retryInterrupted ? detectRateLimit(retryResult) : { limited: false };
399
+ if (retryRateLimit.limited) {
400
+ recordClaudeRateLimit(retryRateLimit.resetsAt);
401
+ logger.info(`Session ${session.id} still rate limited (attempt ${attempt})`);
402
+ const next = computeNextRetryDelayMs(retryRateLimit.resetsAt);
403
+ nextDelayMs = next.delayMs;
404
+ // Return to waiting UI state
405
+ if (decorateMessages && connector.setTypingStatus) {
406
+ await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
407
+ }
408
+ if (decorateMessages && capabilities.reactions) {
409
+ await connector.removeReaction(target, "eyes").catch(() => { });
410
+ await connector.addReaction(target, waitEmoji).catch(() => { });
411
+ }
412
+ updateSession(session.id, {
413
+ ...(retryResult.sessionId?.trim() ? { engineSessionId: retryResult.sessionId } : {}),
414
+ status: "waiting",
415
+ lastActivity: new Date().toISOString(),
416
+ lastError: next.resumeAt
417
+ ? `Claude usage limit — resumes ${next.resumeAt.toISOString()}`
418
+ : "Claude usage limit — waiting for reset",
419
+ });
420
+ continue;
421
+ }
422
+ // Success or different error — handle normally
423
+ const retryText = retryResult.result?.trim()
424
+ ? retryResult.result
425
+ : retryResult.error || "(No response from engine)";
426
+ insertMessage(session.id, "assistant", retryText);
427
+ if (retryResult.cost || retryResult.numTurns) {
428
+ accumulateSessionCost(session.id, retryResult.cost ?? 0, retryResult.numTurns ?? 1);
429
+ }
430
+ // Clear typing indicator & reactions
431
+ if (decorateMessages && connector.setTypingStatus) {
432
+ await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
433
+ }
434
+ if (decorateMessages && capabilities.reactions) {
435
+ await connector.removeReaction(target, "eyes").catch(() => { });
436
+ await connector.removeReaction(target, waitEmoji).catch(() => { });
437
+ }
438
+ await connector.replyMessage(target, retryText).catch(() => { });
439
+ const retryUpdated = updateSession(session.id, {
440
+ ...(retryResult.sessionId?.trim() ? { engineSessionId: retryResult.sessionId } : {}),
441
+ status: retryResult.error ? "error" : "idle",
442
+ replyContext: msg.replyContext,
443
+ messageId: msg.messageId ?? null,
444
+ transportMeta: msg.transportMeta ?? null,
445
+ lastActivity: new Date().toISOString(),
446
+ lastError: retryResult.error ?? null,
447
+ });
448
+ if (retryUpdated) {
449
+ notifyRateLimitResumed(retryUpdated);
450
+ notifyDiscordChannel(`✅ Claude usage limit cleared. Session ${session.id}${session.employee ? ` (${session.employee})` : ""} resumed.`);
451
+ notifyParentSession(retryUpdated, { result: retryResult.result, error: retryResult.error ?? null, cost: retryResult.cost, durationMs: retryResult.durationMs });
452
+ }
453
+ logger.info(`Session ${session.id} resumed after usage reset`);
454
+ return;
144
455
  }
145
- catch {
146
- // Ignore cleanup errors best effort
456
+ // Exhausted waiting window
457
+ notifyDiscordChannel(`❌ Claude usage limit did not clear in time. Session ${session.id}${session.employee ? ` (${session.employee})` : ""} has been stopped.`);
458
+ await connector.replyMessage(target, "Usage limit didn't reset in time. Please try again later.").catch(() => { });
459
+ updateSession(session.id, {
460
+ status: "error",
461
+ lastActivity: new Date().toISOString(),
462
+ lastError: "Claude usage limit did not clear in time",
463
+ });
464
+ // Clear reactions on failure
465
+ if (decorateMessages && capabilities.reactions) {
466
+ await connector.removeReaction(target, "eyes").catch(() => { });
467
+ await connector.removeReaction(target, waitEmoji).catch(() => { });
147
468
  }
469
+ return;
470
+ }
471
+ finally {
472
+ clearInterval(heartbeat);
148
473
  }
149
474
  }
150
475
  const responseText = result.result?.trim()
151
476
  ? result.result
152
477
  : result.error || "(No response from engine)";
153
478
  insertMessage(session.id, "assistant", responseText);
154
- // Clean up temp MCP config
155
- if (mcpConfigPath)
156
- cleanupMcpConfigFile(session.id);
157
- // Track cost
158
479
  if (result.cost || result.numTurns) {
159
480
  accumulateSessionCost(session.id, result.cost ?? 0, result.numTurns ?? 1);
160
481
  }
161
- // Clear typing indicator before sending response
162
482
  if (decorateMessages && connector.setTypingStatus) {
163
483
  await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
164
484
  }
165
- await connector.replyMessage(target, responseText);
485
+ if (!wasInterrupted) {
486
+ await connector.replyMessage(target, responseText);
487
+ }
166
488
  if (decorateMessages && capabilities.reactions) {
167
489
  await connector.removeReaction(target, "eyes").catch(() => { });
168
490
  }
169
- updateSession(session.id, {
170
- engineSessionId: result.sessionId,
171
- status: result.error ? "error" : "idle",
491
+ const updatedSession = updateSession(session.id, {
492
+ ...(result.sessionId?.trim() ? { engineSessionId: result.sessionId } : {}),
493
+ status: wasInterrupted ? "idle" : (result.error ? "error" : "idle"),
172
494
  replyContext: msg.replyContext,
173
495
  messageId: msg.messageId ?? null,
174
- transportMeta: msg.transportMeta ?? null,
496
+ transportMeta: (() => {
497
+ const merged = mergeTransportMeta(getSessionBySessionKey(msg.sessionKey)?.transportMeta ?? session.transportMeta, msg.transportMeta);
498
+ if (syncRequested && !rateLimit.limited && !wasInterrupted) {
499
+ delete merged["claudeSyncSince"];
500
+ }
501
+ return merged;
502
+ })(),
175
503
  lastActivity: new Date().toISOString(),
176
- lastError: result.error ?? null,
504
+ lastError: wasInterrupted ? null : (result.error ?? null),
177
505
  });
506
+ if (updatedSession) {
507
+ notifyParentSession(updatedSession, { result: result.result, error: wasInterrupted ? null : (result.error ?? null), cost: result.cost, durationMs: result.durationMs });
508
+ }
178
509
  logger.info(`Session ${session.id} completed in ${result.durationMs ?? 0}ms` +
179
510
  (result.cost ? ` ($${result.cost.toFixed(4)})` : ""));
180
511
  }
181
512
  catch (err) {
182
513
  const errMsg = err instanceof Error ? err.message : String(err);
183
514
  logger.error(`Session ${session.id} error: ${errMsg}`);
184
- // Clean up temp MCP config on error
185
- if (mcpConfigPath)
186
- cleanupMcpConfigFile(session.id);
187
- updateSession(session.id, {
515
+ const erroredSession = updateSession(session.id, {
188
516
  status: "error",
189
517
  lastActivity: new Date().toISOString(),
190
518
  lastError: errMsg,
191
519
  });
520
+ if (erroredSession) {
521
+ notifyParentSession(erroredSession, { error: errMsg });
522
+ }
192
523
  // Clear typing indicator on error
193
524
  if (decorateMessages && connector.setTypingStatus) {
194
525
  await connector.setTypingStatus(target.channel, threadTs, "").catch(() => { });
@@ -196,8 +527,22 @@ export class SessionManager {
196
527
  await connector.replyMessage(target, `Error: ${errMsg}`).catch(() => { });
197
528
  if (decorateMessages && capabilities.reactions) {
198
529
  await connector.removeReaction(target, "eyes").catch(() => { });
530
+ await connector.removeReaction(target, "hourglass_flowing_sand").catch(() => { });
199
531
  }
200
532
  }
533
+ finally {
534
+ // Clean up temp attachment files downloaded from Slack
535
+ for (const filePath of attachments) {
536
+ try {
537
+ fs.rmSync(filePath, { force: true });
538
+ }
539
+ catch {
540
+ // Ignore cleanup errors — best effort
541
+ }
542
+ }
543
+ if (mcpConfigPath)
544
+ cleanupMcpConfigFile(session.id);
545
+ }
201
546
  }
202
547
  async handleCommand(msg, connector) {
203
548
  const text = msg.text.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/sessions/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAUzB,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AASjG,MAAM,OAAO,cAAc;IACjB,MAAM,CAAa;IACnB,OAAO,CAAsB;IAC7B,cAAc,CAAW;IACzB,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;IAC3B,iBAAiB,GAAiC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;IAE1E,YACE,MAAkB,EAClB,OAA4B,EAC5B,iBAA2B,EAAE;QAE7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,oBAAoB,CAAC,QAAsC;QACzD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAoB,EAAE,SAAoB,EAAE,OAAqB,EAAE;QAC7E,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;YAAE,OAAO;QAErD,IAAI,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,aAAa,CAAC;gBACtB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;gBAC3E,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS;gBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS;gBACtD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,GAAG,CAAC,IAAI;gBAChB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CACT,uBAAuB,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,UAAU,EAAE;gBACzD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;gBAClC,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;gBAChC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;gBACxC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,IAAI,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC;QAEnC,MAAM,eAAe,GAAG,GAAG,CAAC,WAAW;aACpC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;aACzC,MAAM,CAAC,CAAC,QAAQ,EAAsB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,CAAC;YAClH,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAE7B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAC5C,IAAI,CAAC,UAAU,CAAC,OAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAClF,CAAC;QAEF,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,OAAgB,EAChB,GAAoB,EACpB,WAAqB,EACrB,SAAoB,EACpB,MAAc,EACd,QAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,2BAA2B,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/E,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QAED,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;QACjD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;QAEnD,IAAI,gBAAgB,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;QACnD,IAAI,gBAAgB,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAClD,MAAM,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;YACxB,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;YAChC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;YACxC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC,CAAC;QAEH,8EAA8E;QAC9E,IAAI,aAAiC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,YAAY,CAAC;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ;gBACR,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAG,GAAG,CAAC,aAAa,EAAE,WAAsB,IAAI,SAAS;aACrE,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO;gBAC7C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;gBAC3B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjD,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEnE,IAAI,MAA0C,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;oBACxB,MAAM,EAAE,GAAG,CAAC,IAAI;oBAChB,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,SAAS;oBACrD,YAAY;oBACZ,GAAG,EAAE,SAAS;oBACd,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK;oBAC1C,WAAW;oBACX,QAAQ,EAAE,QAAQ,EAAE,QAAQ;oBAC5B,aAAa;oBACb,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;oBAC7D,SAAS,EAAE,OAAO,CAAC,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,uDAAuD;gBACvD,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvC,CAAC;oBAAC,MAAM,CAAC;wBACP,sCAAsC;oBACxC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;gBACxC,CAAC,CAAC,MAAM,CAAC,MAAM;gBACf,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,2BAA2B,CAAC;YAEhD,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAErD,2BAA2B;YAC3B,IAAI,aAAa;gBAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEpD,aAAa;YACb,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,qBAAqB,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC5E,CAAC;YAED,iDAAiD;YACjD,IAAI,gBAAgB,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAClD,MAAM,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAEnD,IAAI,gBAAgB,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YAED,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;gBACxB,eAAe,EAAE,MAAM,CAAC,SAAS;gBACjC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACvC,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;gBAChC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;gBACxC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,SAAS,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;aAChC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CACT,WAAW,OAAO,CAAC,EAAE,iBAAiB,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI;gBAChE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACrD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;YAEvD,oCAAoC;YACpC,IAAI,aAAa;gBAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEpD,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;gBACxB,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,SAAS,EAAE,MAAM;aAClB,CAAC,CAAC;YAEH,kCAAkC;YAClC,IAAI,gBAAgB,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAClD,MAAM,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,gBAAgB,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC/C,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAoB,EAAE,SAAoB;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC;QAEnC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;gBACjF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxF,MAAM,IAAI,GAAG;gBACX,YAAY,OAAO,CAAC,EAAE,EAAE;gBACxB,WAAW,OAAO,CAAC,MAAM,EAAE;gBAC3B,cAAc,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE;gBACnD,UAAU,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAA4B,CAAC,EAAE,KAAK,IAAI,SAAS,EAAE;gBAC1G,UAAU,cAAc,EAAE;gBAC1B,gBAAgB,UAAU,EAAE;gBAC5B,YAAY,OAAO,CAAC,SAAS,EAAE;gBAC/B,kBAAkB,OAAO,CAAC,YAAY,EAAE;gBACxC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;aAC9D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;gBACjF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;gBACxB,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,sBAAsB,SAAS,sBAAsB,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC1C,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;oBAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;oBACrC,OAAO,KAAK,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC9F,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACf,MAAM,IAAI,GAAG;gBACX,mBAAmB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChD,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC7C,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC3C,aAAa;gBACb,GAAG,cAAc;aAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAY,EAAE,SAAoB,EAAE,MAAc;QAChF,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC7B,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,GAAG,CAAC,QAAQ,EAAE,CACxF,CAAC;YACF,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;gBAC1E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,YAAY,CAC1B,MAAM,EACN,GAAG,CAAC,CAAC,CAAC,uBAAuB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,GAAG,cAAc,CAC3E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,UAAU,mBAAmB,CAAC,CAAC;gBACpF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,YAAY,CAC1B,MAAM,EACN,GAAG;gBACD,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG;gBACnE,CAAC,CAAC,aAAa,GAAG,cAAc,CACnC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,yDAAyD,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/sessions/manager.ts"],"names":[],"mappings":"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"}