crewly 1.20.306 → 1.20.307

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 (83) hide show
  1. package/config/hooks/agent-status/report.sh +39 -1
  2. package/dist/backend/backend/src/constants.d.ts +54 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +54 -0
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +2 -1
  7. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  8. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +18 -1
  9. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  10. package/dist/backend/backend/src/controllers/board/board.controller.d.ts +23 -0
  11. package/dist/backend/backend/src/controllers/board/board.controller.d.ts.map +1 -0
  12. package/dist/backend/backend/src/controllers/board/board.controller.js +48 -0
  13. package/dist/backend/backend/src/controllers/board/board.controller.js.map +1 -0
  14. package/dist/backend/backend/src/controllers/board/board.routes.d.ts +15 -0
  15. package/dist/backend/backend/src/controllers/board/board.routes.d.ts.map +1 -0
  16. package/dist/backend/backend/src/controllers/board/board.routes.js +21 -0
  17. package/dist/backend/backend/src/controllers/board/board.routes.js.map +1 -0
  18. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/browser/browser.controller.js +2 -0
  20. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat/chat.controller.js +5 -0
  23. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  24. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  25. package/dist/backend/backend/src/controllers/slack/slack.controller.js +3 -0
  26. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  27. package/dist/backend/backend/src/index.d.ts +9 -0
  28. package/dist/backend/backend/src/index.d.ts.map +1 -1
  29. package/dist/backend/backend/src/index.js +46 -0
  30. package/dist/backend/backend/src/index.js.map +1 -1
  31. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  32. package/dist/backend/backend/src/routes/api.routes.js +3 -0
  33. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  34. package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts +85 -0
  35. package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/board/board-activity.normalizer.js +241 -0
  37. package/dist/backend/backend/src/services/board/board-activity.normalizer.js.map +1 -0
  38. package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts +154 -0
  39. package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts.map +1 -0
  40. package/dist/backend/backend/src/services/board/board-activity.tracker.js +322 -0
  41. package/dist/backend/backend/src/services/board/board-activity.tracker.js.map +1 -0
  42. package/dist/backend/backend/src/services/board/board-outcome-phrases.d.ts +43 -0
  43. package/dist/backend/backend/src/services/board/board-outcome-phrases.d.ts.map +1 -0
  44. package/dist/backend/backend/src/services/board/board-outcome-phrases.js +76 -0
  45. package/dist/backend/backend/src/services/board/board-outcome-phrases.js.map +1 -0
  46. package/dist/backend/backend/src/services/board/board-push.service.d.ts +114 -0
  47. package/dist/backend/backend/src/services/board/board-push.service.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/board/board-push.service.js +312 -0
  49. package/dist/backend/backend/src/services/board/board-push.service.js.map +1 -0
  50. package/dist/backend/backend/src/services/board/board-redact.d.ts +90 -0
  51. package/dist/backend/backend/src/services/board/board-redact.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/board/board-redact.js +359 -0
  53. package/dist/backend/backend/src/services/board/board-redact.js.map +1 -0
  54. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts +176 -0
  55. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts.map +1 -0
  56. package/dist/backend/backend/src/services/board/board-snapshot.builder.js +342 -0
  57. package/dist/backend/backend/src/services/board/board-snapshot.builder.js.map +1 -0
  58. package/dist/backend/backend/src/services/board/board-usage.d.ts +20 -0
  59. package/dist/backend/backend/src/services/board/board-usage.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/board/board-usage.js +82 -0
  61. package/dist/backend/backend/src/services/board/board-usage.js.map +1 -0
  62. package/dist/backend/backend/src/services/board/board.service.d.ts +60 -0
  63. package/dist/backend/backend/src/services/board/board.service.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/board/board.service.js +82 -0
  65. package/dist/backend/backend/src/services/board/board.service.js.map +1 -0
  66. package/dist/backend/backend/src/services/board/board.sources.d.ts +25 -0
  67. package/dist/backend/backend/src/services/board/board.sources.d.ts.map +1 -0
  68. package/dist/backend/backend/src/services/board/board.sources.js +293 -0
  69. package/dist/backend/backend/src/services/board/board.sources.js.map +1 -0
  70. package/dist/backend/backend/src/services/board/board.types.d.ts +117 -0
  71. package/dist/backend/backend/src/services/board/board.types.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/board/board.types.js +8 -0
  73. package/dist/backend/backend/src/services/board/board.types.js.map +1 -0
  74. package/dist/backend/backend/src/services/google/google-reauth-notifier.service.d.ts +13 -0
  75. package/dist/backend/backend/src/services/google/google-reauth-notifier.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/google/google-reauth-notifier.service.js +15 -0
  77. package/dist/backend/backend/src/services/google/google-reauth-notifier.service.js.map +1 -1
  78. package/dist/backend/build-info.json +2 -2
  79. package/dist/cli/backend/src/constants.d.ts +54 -0
  80. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  81. package/dist/cli/backend/src/constants.js +54 -0
  82. package/dist/cli/backend/src/constants.js.map +1 -1
  83. package/package.json +1 -1
@@ -335,6 +335,7 @@ export class CrewlyServer {
335
335
  /** Gaps in this backend's life are told to the owner (crewly#1015 §12) */
336
336
  livenessMonitor = null;
337
337
  waitingItemsSync = null;
338
+ ownerBoard = null;
338
339
  /** Epoch ms of the last shutdown signal acted on (dedups process-group delivery) */
339
340
  lastShutdownSignalAt = 0;
340
341
  /** Interrupted turns loaded at boot, resumed once their agents are back */
@@ -3872,6 +3873,9 @@ export class CrewlyServer {
3872
3873
  // "Waiting on you" (§F): tickets in 待验收 go to Crewly Cloud as text
3873
3874
  // snapshots, so the portal lists them for every machine.
3874
3875
  void this.startWaitingItemsSync();
3876
+ // Owner board (crewly#1247): outcomes + live activity, pushed to Cloud
3877
+ // every 60 s and on change. CREWLY_BOARD_PUSH=0 turns the push off.
3878
+ void this.startOwnerBoard();
3875
3879
  // V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
3876
3880
  // The legacy `TaskTrackingService.startAutoSync()` is gone — V3
3877
3881
  // task-pool reconciler owns lifecycle cleanup now.
@@ -5454,6 +5458,47 @@ export class CrewlyServer {
5454
5458
  });
5455
5459
  }
5456
5460
  }
5461
+ /**
5462
+ * Start the owner board: the local `GET /api/board` always works; the push
5463
+ * to Crewly Cloud runs while the machine is signed in. Never throws.
5464
+ */
5465
+ async startOwnerBoard() {
5466
+ try {
5467
+ const [{ BoardService, setBoardService }, { createProductionBoardSources }, { CloudClientService }, { getBoardActivity }] = await Promise.all([
5468
+ import('./services/board/board.service.js'),
5469
+ import('./services/board/board.sources.js'),
5470
+ import('./services/cloud/cloud-client.service.js'),
5471
+ import('./services/board/board-activity.tracker.js'),
5472
+ ]);
5473
+ const cloud = CloudClientService.getInstance();
5474
+ // Project roots turn file paths into repo-relative ones
5475
+ getBoardActivity().setRootsResolver((session) => this.boardProjectRoots(session));
5476
+ const service = new BoardService({
5477
+ sources: createProductionBoardSources({ storage: this.storageService }),
5478
+ cloud: { getToken: () => cloud.getToken(), getCloudUrl: () => cloud.getCloudUrl(), tryRefreshToken: () => cloud.tryRefreshToken() },
5479
+ });
5480
+ setBoardService(service);
5481
+ service.start();
5482
+ this.ownerBoard = service;
5483
+ }
5484
+ catch (error) {
5485
+ this.logger.warn('Owner board not started (non-fatal)', { error: error instanceof Error ? error.message : String(error) });
5486
+ }
5487
+ }
5488
+ /** Cached project paths for the board's relative file paths. */
5489
+ boardRootsCache = { at: 0, roots: [] };
5490
+ boardProjectRoots(_session) {
5491
+ if (Date.now() - this.boardRootsCache.at > 60_000) {
5492
+ this.boardRootsCache.at = Date.now();
5493
+ void this.storageService
5494
+ .getProjects()
5495
+ .then((projects) => {
5496
+ this.boardRootsCache.roots = projects.map((p) => p.path).filter(Boolean);
5497
+ })
5498
+ .catch(() => undefined);
5499
+ }
5500
+ return this.boardRootsCache.roots;
5501
+ }
5457
5502
  /**
5458
5503
  * Load interrupted turns left by the previous shutdown (fresh ones only).
5459
5504
  */
@@ -6761,6 +6806,7 @@ export class CrewlyServer {
6761
6806
  this.cloudDisconnectNotice?.stop();
6762
6807
  this.conversationCloudSync?.stop();
6763
6808
  this.waitingItemsSync?.stop();
6809
+ this.ownerBoard?.stop();
6764
6810
  // Safe restart: stop delivering, wait for agents mid-turn, persist the rest.
6765
6811
  // Runs before the force-exit timer below, which only bounds the teardown.
6766
6812
  await this.drainInFlightTurns(options.reason ?? 'shutdown', options.drain !== false);