crewly 1.20.307 → 1.20.308

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 (79) hide show
  1. package/config/hooks/agent-status/report.sh +5 -5
  2. package/dist/backend/backend/src/constants.d.ts +66 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +66 -0
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/index.d.ts +9 -0
  7. package/dist/backend/backend/src/index.d.ts.map +1 -1
  8. package/dist/backend/backend/src/index.js +126 -2
  9. package/dist/backend/backend/src/index.js.map +1 -1
  10. package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts +17 -0
  11. package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/board/board-activity.normalizer.js +8 -5
  13. package/dist/backend/backend/src/services/board/board-activity.normalizer.js.map +1 -1
  14. package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts +5 -0
  15. package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/board/board-activity.tracker.js +25 -1
  17. package/dist/backend/backend/src/services/board/board-activity.tracker.js.map +1 -1
  18. package/dist/backend/backend/src/services/board/board-push.service.d.ts +20 -2
  19. package/dist/backend/backend/src/services/board/board-push.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/board/board-push.service.js +71 -9
  21. package/dist/backend/backend/src/services/board/board-push.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts +7 -0
  23. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/board/board-snapshot.builder.js +2 -0
  25. package/dist/backend/backend/src/services/board/board-snapshot.builder.js.map +1 -1
  26. package/dist/backend/backend/src/services/board/board.sources.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/board/board.sources.js +7 -0
  28. package/dist/backend/backend/src/services/board/board.sources.js.map +1 -1
  29. package/dist/backend/backend/src/services/board/board.types.d.ts +5 -0
  30. package/dist/backend/backend/src/services/board/board.types.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts +122 -0
  32. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts.map +1 -0
  33. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js +339 -0
  34. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js.map +1 -0
  35. package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts +44 -0
  36. package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts.map +1 -0
  37. package/dist/backend/backend/src/services/board/canvas/canvas-redact.js +161 -0
  38. package/dist/backend/backend/src/services/board/canvas/canvas-redact.js.map +1 -0
  39. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts +57 -0
  40. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts.map +1 -0
  41. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js +164 -0
  42. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js.map +1 -0
  43. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts +140 -0
  44. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts.map +1 -0
  45. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js +300 -0
  46. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js.map +1 -0
  47. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts +99 -0
  48. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts.map +1 -0
  49. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js +223 -0
  50. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js.map +1 -0
  51. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts +126 -0
  52. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts.map +1 -0
  53. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js +385 -0
  54. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js.map +1 -0
  55. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts +103 -0
  56. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts.map +1 -0
  57. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js +124 -0
  58. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js.map +1 -0
  59. package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts +88 -0
  60. package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/board/canvas/canvas.types.js +8 -0
  62. package/dist/backend/backend/src/services/board/canvas/canvas.types.js.map +1 -0
  63. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  64. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
  66. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  67. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
  69. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  70. package/dist/backend/build-info.json +2 -2
  71. package/dist/cli/backend/src/constants.d.ts +66 -0
  72. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  73. package/dist/cli/backend/src/constants.js +66 -0
  74. package/dist/cli/backend/src/constants.js.map +1 -1
  75. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  76. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  77. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
  78. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  79. package/package.json +1 -1
@@ -54,6 +54,10 @@ export declare class CrewlyServer {
54
54
  private livenessMonitor;
55
55
  private waitingItemsSync;
56
56
  private ownerBoard;
57
+ /** Canvas: follows the agents' transcripts for their own text lines (crewly#1247 v2) */
58
+ private canvasTail;
59
+ /** Canvas: masked terminal streams the owner opened in the portal */
60
+ private canvasTerminal;
57
61
  /** Epoch ms of the last shutdown signal acted on (dedups process-group delivery) */
58
62
  private lastShutdownSignalAt;
59
63
  /** Interrupted turns loaded at boot, resumed once their agents are back */
@@ -246,6 +250,11 @@ export declare class CrewlyServer {
246
250
  * to Crewly Cloud runs while the machine is signed in. Never throws.
247
251
  */
248
252
  private startOwnerBoard;
253
+ /**
254
+ * Canvas (crewly#1247 v2): follow the agents' transcripts for their own
255
+ * short text lines (and Codex's tool calls). Off with the board push.
256
+ */
257
+ private startCanvasTail;
249
258
  /** Cached project paths for the board's relative file paths. */
250
259
  private boardRootsCache;
251
260
  private boardProjectRoots;
@@ -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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"}
@@ -77,6 +77,8 @@ import { parseSlackThreadKey } from './services/slack/slack-thread-key.js';
77
77
  import { LIVENESS_MONITOR_CONSTANTS, INPUT_CIRCUIT_CONSTANTS, INPUT_BLOCKED_RETRY_CONSTANTS } from './constants.js';
78
78
  import { InputBlockedRetryService } from './services/messaging/input-blocked-retry.service.js';
79
79
  import { driveCapabilities } from './services/drive/drive-agent.service.js';
80
+ import { canvasCapabilities } from './services/board/canvas/canvas-inbound.service.js';
81
+ import { isBoardPushDisabled } from './services/board/board-push.service.js';
80
82
  import { teamMoveCapabilities } from './services/team-move/team-move-driver.service.js';
81
83
  import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, TICKET_HYGIENE_CONSTANTS, EXPERIMENT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS, OWNER_AUTH_CONSTANTS, CREWLY_APPS_CONSTANTS, SLACK_AGENT_DM_CONSTANTS, BRIEFING_CONSTANTS, DRIVE_CONSTANTS, POOL_PRUNE_CONSTANTS } from './constants.js';
82
84
  import { randomUUID } from 'crypto';
@@ -336,6 +338,10 @@ export class CrewlyServer {
336
338
  livenessMonitor = null;
337
339
  waitingItemsSync = null;
338
340
  ownerBoard = null;
341
+ /** Canvas: follows the agents' transcripts for their own text lines (crewly#1247 v2) */
342
+ canvasTail = null;
343
+ /** Canvas: masked terminal streams the owner opened in the portal */
344
+ canvasTerminal = null;
339
345
  /** Epoch ms of the last shutdown signal acted on (dedups process-group delivery) */
340
346
  lastShutdownSignalAt = 0;
341
347
  /** Interrupted turns loaded at boot, resumed once their agents are back */
@@ -2959,6 +2965,78 @@ export class CrewlyServer {
2959
2965
  error: waitingErr instanceof Error ? waitingErr.message : String(waitingErr),
2960
2966
  });
2961
2967
  }
2968
+ // Crewly Canvas (crewly#1247 v2): the owner's actions from the portal
2969
+ // canvas (message an agent, stop it, open its masked terminal) arrive as
2970
+ // `canvas_action` pushes; the handler fetches each with this machine's
2971
+ // token and runs it. Starting it advertises `canvas_actions` to Cloud.
2972
+ try {
2973
+ // The board's kill switch also keeps the canvas actions off this machine
2974
+ if (isBoardPushDisabled())
2975
+ throw new Error('CREWLY_BOARD_PUSH=0');
2976
+ const [{ CanvasInboundService }, { CanvasTerminalService }, { createStopAgent, createSecretsProvider }, { CloudClientService }, { buildAgentRoster }, { intakeChatV2OwnerMessage }, { getTicketIntakeService }, { getBoardService }, { getApiToken }, { internalCredentialHeaders },] = await Promise.all([
2977
+ import('./services/board/canvas/canvas-inbound.service.js'),
2978
+ import('./services/board/canvas/canvas-terminal.service.js'),
2979
+ import('./services/board/canvas/canvas-wiring.js'),
2980
+ import('./services/cloud/cloud-client.service.js'),
2981
+ import('./services/cloud/agent-roster.utils.js'),
2982
+ import('./services/v3/ticket-channel-hooks.js'),
2983
+ import('./services/v3/ticket-intake.service.js'),
2984
+ import('./services/board/board.service.js'),
2985
+ import('./services/core/api-token.service.js'),
2986
+ import('./services/core/owner-auth.service.js'),
2987
+ ]);
2988
+ const cloudClient = CloudClientService.getInstance();
2989
+ const cloud = {
2990
+ getToken: () => cloudClient.getToken(),
2991
+ getCloudUrl: () => cloudClient.getCloudUrl(),
2992
+ tryRefreshToken: () => cloudClient.tryRefreshToken(),
2993
+ };
2994
+ const identity = async () => {
2995
+ const id = await DeviceIdentityService.getInstance().getOrCreateIdentity();
2996
+ return { instanceId: id.deviceId, deviceName: id.deviceName };
2997
+ };
2998
+ const terminal = new CanvasTerminalService({
2999
+ cloud,
3000
+ identity,
3001
+ capture: (session, lines) => getSessionBackendSync()?.captureOutput(session, lines) ?? null,
3002
+ exists: (session) => getSessionBackendSync()?.sessionExists(session) === true,
3003
+ secrets: createSecretsProvider(),
3004
+ });
3005
+ this.canvasTerminal = terminal;
3006
+ new CanvasInboundService({
3007
+ source: sync,
3008
+ cloud,
3009
+ chat: chatService,
3010
+ identity,
3011
+ deliver: async (channel, message) => {
3012
+ const toDispatch = await intakeChatV2OwnerMessage(getTicketIntakeService(), channel, message, CLOUD_TALK_CONSTANTS.INTAKE_ORIGIN);
3013
+ await chatDispatcher.dispatchMessage(channel, toDispatch);
3014
+ },
3015
+ agentExists: async (session) => buildAgentRoster(await this.storageService.getTeams()).some((a) => a.agentSession === session),
3016
+ stopAgent: createStopAgent({
3017
+ webPort: this.config.webPort,
3018
+ teams: () => this.storageService.getTeams(),
3019
+ headers: () => {
3020
+ let token = null;
3021
+ try {
3022
+ token = getApiToken();
3023
+ }
3024
+ catch {
3025
+ token = null;
3026
+ }
3027
+ return { ...(token ? { [API_SECURITY_CONSTANTS.TOKEN_HEADER]: token } : {}), ...internalCredentialHeaders('relay') };
3028
+ },
3029
+ }),
3030
+ terminal,
3031
+ // Someone is at the canvas: push live for a while
3032
+ onAction: () => getBoardService()?.push.noteViewer(),
3033
+ }).start();
3034
+ }
3035
+ catch (canvasErr) {
3036
+ this.logger.warn('Canvas action handler wiring skipped', {
3037
+ error: canvasErr instanceof Error ? canvasErr.message : String(canvasErr),
3038
+ });
3039
+ }
2962
3040
  // Mobile app: generic allowlisted REST passthrough over the same
2963
3041
  // relay (api_request → local HTTP → api_response). Non-fatal.
2964
3042
  try {
@@ -5373,7 +5451,7 @@ export class CrewlyServer {
5373
5451
  // whether this machine takes `talk_message` — also for machines
5374
5452
  // without Slack, which never send the registry heartbeat.
5375
5453
  roster: async () => buildAgentRoster(await this.storageService.getTeams()),
5376
- capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5454
+ capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...canvasCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5377
5455
  onNewMessage: (listener) => {
5378
5456
  chat.on('chat_message', listener);
5379
5457
  return () => chat.off('chat_message', listener);
@@ -5445,7 +5523,7 @@ export class CrewlyServer {
5445
5523
  agentNames: async () => new Map(buildAgentRoster(await this.storageService.getTeams())
5446
5524
  .filter((a) => a.displayName)
5447
5525
  .map((a) => [a.agentSession, a.displayName])),
5448
- capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5526
+ capabilities: () => [...cloudTalkCapabilities(), ...waitingActionCapabilities(), ...canvasCapabilities(), ...talkTranscribeCapabilities(), ...driveCapabilities(), ...teamMoveCapabilities()],
5449
5527
  onTicketChange: (listener) => RequestService.getInstance().onChange(() => listener()),
5450
5528
  });
5451
5529
  setWaitingItemsSyncService(service);
@@ -5480,11 +5558,55 @@ export class CrewlyServer {
5480
5558
  setBoardService(service);
5481
5559
  service.start();
5482
5560
  this.ownerBoard = service;
5561
+ await this.startCanvasTail(service);
5483
5562
  }
5484
5563
  catch (error) {
5485
5564
  this.logger.warn('Owner board not started (non-fatal)', { error: error instanceof Error ? error.message : String(error) });
5486
5565
  }
5487
5566
  }
5567
+ /**
5568
+ * Canvas (crewly#1247 v2): follow the agents' transcripts for their own
5569
+ * short text lines (and Codex's tool calls). Off with the board push.
5570
+ */
5571
+ async startCanvasTail(service) {
5572
+ try {
5573
+ if (service.push.disabled)
5574
+ return;
5575
+ const [{ TranscriptTailService }, { createTranscriptLocator, createSecretsProvider }, recovery] = await Promise.all([
5576
+ import('./services/board/canvas/canvas-transcript.tail.js'),
5577
+ import('./services/board/canvas/canvas-wiring.js'),
5578
+ import('./services/agent/runtime-session-recovery.js'),
5579
+ ]);
5580
+ const { findCodexRollout } = await import('./services/monitoring/codex-rollout-sync.service.js');
5581
+ const persistence = getSessionStatePersistence();
5582
+ const locate = createTranscriptLocator({
5583
+ meta: (session) => {
5584
+ try {
5585
+ return persistence.getSessionMetadata(session);
5586
+ }
5587
+ catch {
5588
+ return undefined;
5589
+ }
5590
+ },
5591
+ claudeHomes: (meta) => [meta.env?.CLAUDE_CONFIG_DIR, recovery.defaultClaudeHome()].filter((h) => typeof h === 'string' && h.length > 0),
5592
+ findClaude: recovery.findClaudeTranscript,
5593
+ codexHome: recovery.defaultCodexHome,
5594
+ findCodex: findCodexRollout,
5595
+ });
5596
+ this.canvasTail = new TranscriptTailService({
5597
+ steps: service.tracker.steps,
5598
+ sessions: () => service.builder.knownSessions(),
5599
+ locate,
5600
+ roots: (session) => this.boardProjectRoots(session),
5601
+ secrets: createSecretsProvider(),
5602
+ isLive: () => service.push.isLive(),
5603
+ });
5604
+ this.canvasTail.start();
5605
+ }
5606
+ catch (error) {
5607
+ this.logger.warn('Canvas transcript tail not started (non-fatal)', { error: error instanceof Error ? error.message : String(error) });
5608
+ }
5609
+ }
5488
5610
  /** Cached project paths for the board's relative file paths. */
5489
5611
  boardRootsCache = { at: 0, roots: [] };
5490
5612
  boardProjectRoots(_session) {
@@ -6807,6 +6929,8 @@ export class CrewlyServer {
6807
6929
  this.conversationCloudSync?.stop();
6808
6930
  this.waitingItemsSync?.stop();
6809
6931
  this.ownerBoard?.stop();
6932
+ this.canvasTail?.stop();
6933
+ this.canvasTerminal?.closeAll();
6810
6934
  // Safe restart: stop delivering, wait for agents mid-turn, persist the rest.
6811
6935
  // Runs before the force-exit timer below, which only bounds the teardown.
6812
6936
  await this.drainInFlightTurns(options.reason ?? 'shutdown', options.drain !== false);