crewly 1.20.172 → 1.20.174

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 (78) hide show
  1. package/dist/backend/backend/src/constants.d.ts +38 -1
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +41 -1
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/index.d.ts.map +1 -1
  6. package/dist/backend/backend/src/index.js +34 -2
  7. package/dist/backend/backend/src/index.js.map +1 -1
  8. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  9. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -2
  10. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  11. package/dist/backend/backend/src/services/harness/harness-exec.utils.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/harness/harness-exec.utils.js +1 -0
  13. package/dist/backend/backend/src/services/harness/harness-exec.utils.js.map +1 -1
  14. package/dist/backend/backend/src/services/harness/harness-login-probe.d.ts +65 -0
  15. package/dist/backend/backend/src/services/harness/harness-login-probe.d.ts.map +1 -0
  16. package/dist/backend/backend/src/services/harness/harness-login-probe.js +99 -0
  17. package/dist/backend/backend/src/services/harness/harness-login-probe.js.map +1 -0
  18. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +349 -113
  19. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +792 -278
  21. package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
  23. package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +6 -0
  25. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/harness/login-broker.service.js +32 -1
  27. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  28. package/dist/backend/backend/src/services/harness/relogin-state.store.d.ts +61 -0
  29. package/dist/backend/backend/src/services/harness/relogin-state.store.d.ts.map +1 -0
  30. package/dist/backend/backend/src/services/harness/relogin-state.store.js +92 -0
  31. package/dist/backend/backend/src/services/harness/relogin-state.store.js.map +1 -0
  32. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +26 -1
  33. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +77 -2
  35. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  36. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +42 -19
  37. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js +69 -31
  39. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js.map +1 -1
  40. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts +1 -1
  41. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +15 -15
  42. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  43. package/dist/backend/build-info.json +2 -2
  44. package/dist/cli/backend/src/constants.d.ts +38 -1
  45. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  46. package/dist/cli/backend/src/constants.js +41 -1
  47. package/dist/cli/backend/src/constants.js.map +1 -1
  48. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  49. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -2
  50. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  51. package/dist/cli/backend/src/services/harness/harness-exec.utils.d.ts.map +1 -1
  52. package/dist/cli/backend/src/services/harness/harness-exec.utils.js +1 -0
  53. package/dist/cli/backend/src/services/harness/harness-exec.utils.js.map +1 -1
  54. package/dist/cli/backend/src/services/harness/harness-login-probe.d.ts +65 -0
  55. package/dist/cli/backend/src/services/harness/harness-login-probe.d.ts.map +1 -0
  56. package/dist/cli/backend/src/services/harness/harness-login-probe.js +99 -0
  57. package/dist/cli/backend/src/services/harness/harness-login-probe.js.map +1 -0
  58. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +349 -113
  59. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  60. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +792 -278
  61. package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  62. package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
  63. package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
  64. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +6 -0
  65. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  66. package/dist/cli/backend/src/services/harness/login-broker.service.js +32 -1
  67. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  68. package/dist/cli/backend/src/services/harness/relogin-state.store.d.ts +61 -0
  69. package/dist/cli/backend/src/services/harness/relogin-state.store.d.ts.map +1 -0
  70. package/dist/cli/backend/src/services/harness/relogin-state.store.js +92 -0
  71. package/dist/cli/backend/src/services/harness/relogin-state.store.js.map +1 -0
  72. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +26 -1
  73. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  74. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +77 -2
  75. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  76. package/frontend/dist/assets/{index-cb23748e.js → index-36e85ac8.js} +258 -258
  77. package/frontend/dist/index.html +1 -1
  78. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -106,7 +106,8 @@ import { ContextWindowMonitorService } from './services/agent/context-window-mon
106
106
  import { OAuthReloginMonitorService } from './services/agent/oauth-relogin-monitor.service.js';
107
107
  import { OrcReplyRouteService } from './services/orc/orc-reply-route.service.js';
108
108
  import { ReloginAgentResumerService } from './services/agent/relogin-agent-resumer.service.js';
109
- import { getHarnessReloginService } from './services/harness/harness-relogin.service.js';
109
+ import { getHarnessReloginService, harnessCommandWord } from './services/harness/harness-relogin.service.js';
110
+ import { getHarnessService } from './services/harness/harness.service.js';
110
111
  import { SlackReloginDmService, createReloginReplyInterceptor } from './services/slack/slack-relogin-dm.service.js';
111
112
  import { getSlackAgentIdentityService } from './services/slack/slack-agent-identity.service.js';
112
113
  import { getChatV2Service } from './services/chat-v2/chat-v2.singleton.js';
@@ -1864,6 +1865,28 @@ export class CrewlyServer {
1864
1865
  clearActivity: (sessionName) => PtyActivityTrackerService.getInstance().clearSession(sessionName),
1865
1866
  }));
1866
1867
  OAuthReloginMonitorService.getInstance().setHarnessExpiryHandler((report) => relogin.reportExpiry(report));
1868
+ // Agent-free re-login: every configured agent (running or not)
1869
+ // counts, so a machine whose agents are all stopped or stuck is
1870
+ // still checked; agents flagged at a sign-in screen are resumed
1871
+ // after a dashboard sign-in; what waited is re-delivered.
1872
+ relogin.setAgentLister(async () => {
1873
+ const agents = [];
1874
+ const orcHarness = await getHarnessService().orc.get().catch(() => null);
1875
+ if (orcHarness)
1876
+ agents.push({ sessionName: ORCHESTRATOR_SESSION_NAME, harnessId: orcHarness, displayName: 'Crewly Orc' });
1877
+ for (const team of await this.storageService.getTeams()) {
1878
+ for (const m of team.members ?? []) {
1879
+ if (m.sessionName && m.runtimeType)
1880
+ agents.push({ sessionName: m.sessionName, harnessId: m.runtimeType, displayName: m.name });
1881
+ }
1882
+ }
1883
+ return agents;
1884
+ });
1885
+ relogin.setSessionNeedsLogin((sessionName) => Boolean(OAuthReloginMonitorService.getInstance().getLoginRequired(sessionName)));
1886
+ relogin.setLoginRestoredHandler(async (harnessId, resumed) => {
1887
+ const { getOwnerMessageWatchdog } = await import('./services/messaging/owner-message-watchdog.service.js');
1888
+ return (await getOwnerMessageWatchdog()?.resumeAfterLogin({ runtimeCmd: harnessCommandWord(harnessId), sessions: resumed })) ?? 0;
1889
+ });
1867
1890
  getSlackOrchestratorBridge().setInboundInterceptor(createReloginReplyInterceptor(reloginDm, relogin));
1868
1891
  relogin.start();
1869
1892
  this.logger.info('Harness re-login over Slack wired');
@@ -4450,7 +4473,16 @@ export class CrewlyServer {
4450
4473
  this.messageQueueService.enqueue(input);
4451
4474
  },
4452
4475
  isBusy: (session) => activity.getObservedWorkingStatus(session) === 'in_progress',
4453
- loginRequired: (session) => OAuthReloginMonitorService.getInstance().getLoginRequired(session) ?? null,
4476
+ // A live session at a sign-in screen, or any agent (even a stopped
4477
+ // one) whose harness is confirmed signed out: waking it would only
4478
+ // park it on the same dead login.
4479
+ loginRequired: (session) => {
4480
+ const flagged = OAuthReloginMonitorService.getInstance().getLoginRequired(session);
4481
+ if (flagged)
4482
+ return flagged;
4483
+ const harnessId = getHarnessReloginService().signedOutHarnessOf(session);
4484
+ return harnessId ? { runtimeType: harnessId } : null;
4485
+ },
4454
4486
  displayNameOf: (session) => (session === ORCHESTRATOR_SESSION_NAME ? 'Orc' : names.get(session) ?? session),
4455
4487
  slack: () => getSlackService(),
4456
4488
  owesThread: (slackChannelId, threadTs) => getSlackTypingPlaceholderService()?.owesThread(slackChannelId, threadTs) ?? false,