crewly 1.20.307 → 1.20.309

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 (93) hide show
  1. package/config/hooks/agent-status/report.sh +5 -5
  2. package/dist/backend/backend/src/constants.d.ts +80 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +80 -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 +161 -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-interaction-hooks.d.ts +34 -0
  19. package/dist/backend/backend/src/services/board/board-interaction-hooks.d.ts.map +1 -0
  20. package/dist/backend/backend/src/services/board/board-interaction-hooks.js +60 -0
  21. package/dist/backend/backend/src/services/board/board-interaction-hooks.js.map +1 -0
  22. package/dist/backend/backend/src/services/board/board-interactions.d.ts +54 -0
  23. package/dist/backend/backend/src/services/board/board-interactions.d.ts.map +1 -0
  24. package/dist/backend/backend/src/services/board/board-interactions.js +92 -0
  25. package/dist/backend/backend/src/services/board/board-interactions.js.map +1 -0
  26. package/dist/backend/backend/src/services/board/board-links.d.ts +51 -0
  27. package/dist/backend/backend/src/services/board/board-links.d.ts.map +1 -0
  28. package/dist/backend/backend/src/services/board/board-links.js +168 -0
  29. package/dist/backend/backend/src/services/board/board-links.js.map +1 -0
  30. package/dist/backend/backend/src/services/board/board-push.service.d.ts +28 -3
  31. package/dist/backend/backend/src/services/board/board-push.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/board/board-push.service.js +108 -9
  33. package/dist/backend/backend/src/services/board/board-push.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts +39 -2
  35. package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/board/board-snapshot.builder.js +85 -8
  37. package/dist/backend/backend/src/services/board/board-snapshot.builder.js.map +1 -1
  38. package/dist/backend/backend/src/services/board/board.sources.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/board/board.sources.js +27 -1
  40. package/dist/backend/backend/src/services/board/board.sources.js.map +1 -1
  41. package/dist/backend/backend/src/services/board/board.types.d.ts +48 -0
  42. package/dist/backend/backend/src/services/board/board.types.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/board/board.types.js +9 -1
  44. package/dist/backend/backend/src/services/board/board.types.js.map +1 -1
  45. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts +122 -0
  46. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js +339 -0
  48. package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts +44 -0
  50. package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts.map +1 -0
  51. package/dist/backend/backend/src/services/board/canvas/canvas-redact.js +161 -0
  52. package/dist/backend/backend/src/services/board/canvas/canvas-redact.js.map +1 -0
  53. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts +57 -0
  54. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts.map +1 -0
  55. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js +164 -0
  56. package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js.map +1 -0
  57. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts +140 -0
  58. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts.map +1 -0
  59. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js +300 -0
  60. package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js.map +1 -0
  61. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts +99 -0
  62. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts.map +1 -0
  63. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js +223 -0
  64. package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js.map +1 -0
  65. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts +126 -0
  66. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js +385 -0
  68. package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js.map +1 -0
  69. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts +103 -0
  70. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts.map +1 -0
  71. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js +124 -0
  72. package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js.map +1 -0
  73. package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts +88 -0
  74. package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts.map +1 -0
  75. package/dist/backend/backend/src/services/board/canvas/canvas.types.js +8 -0
  76. package/dist/backend/backend/src/services/board/canvas/canvas.types.js.map +1 -0
  77. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  78. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
  80. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  81. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
  83. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  84. package/dist/backend/build-info.json +2 -2
  85. package/dist/cli/backend/src/constants.d.ts +80 -0
  86. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  87. package/dist/cli/backend/src/constants.js +80 -0
  88. package/dist/cli/backend/src/constants.js.map +1 -1
  89. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  90. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  91. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
  92. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Canvas links (crewly#1247, CANVAS-V2-CONTRACT.md): who reports to whom and
3
+ * who works with whom. Pure functions of what the board already read, so a
4
+ * delta never touches the disk.
5
+ *
6
+ * @module services/board/board-links
7
+ */
8
+ import type { InteractionPair } from './board-interactions.js';
9
+ import type { BoardTeamInfo, BoardTicket, BoardWorkItem } from './board-snapshot.builder.js';
10
+ import { type BoardLink } from './board.types.js';
11
+ /** What the structural links read. */
12
+ export interface StructuralLinkInput {
13
+ now: number;
14
+ orchestrator: string;
15
+ teams: BoardTeamInfo[];
16
+ workItems: BoardWorkItem[];
17
+ tickets: BoardTicket[];
18
+ /** Each agent's current task (a WorkItem id or a ticket id) */
19
+ tasks: Map<string, {
20
+ id?: string;
21
+ title: string;
22
+ since: string;
23
+ }>;
24
+ /** Sessions that are stopped (their reporting line is not active) */
25
+ stopped: ReadonlySet<string>;
26
+ }
27
+ /**
28
+ * Reporting, delegation and shared-ticket links.
29
+ *
30
+ * @param input - Teams, work and tickets
31
+ * @returns Links, one per identity
32
+ */
33
+ export declare function structuralLinks(input: StructuralLinkInput): BoardLink[];
34
+ /**
35
+ * Messaging links from the recorder.
36
+ *
37
+ * @param pairs - Sender/receiver pairs in the last two hours
38
+ * @param now - Clock
39
+ * @param isKnown - Whether an endpoint is an agent of this machine or qualified
40
+ * @returns Links
41
+ */
42
+ export declare function messagingLinks(pairs: readonly InteractionPair[], now: number, isKnown: (session: string) => boolean): BoardLink[];
43
+ /**
44
+ * Cap a link list: messaging, then same_task, are dropped first.
45
+ *
46
+ * @param links - Links
47
+ * @param max - Most links to keep
48
+ * @returns At most `max` links
49
+ */
50
+ export declare function capLinks(links: BoardLink[], max?: number): BoardLink[];
51
+ //# sourceMappingURL=board-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-links.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-links.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAkB3D,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,qEAAqE;IACrE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,CA6FvE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,EAAE,CAOjI;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,GAAE,MAAoB,GAAG,SAAS,EAAE,CAMnF"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Canvas links (crewly#1247, CANVAS-V2-CONTRACT.md): who reports to whom and
3
+ * who works with whom. Pure functions of what the board already read, so a
4
+ * delta never touches the disk.
5
+ *
6
+ * @module services/board/board-links
7
+ */
8
+ import { BOARD_CONSTANTS } from '../../constants.js';
9
+ import { scrubText } from './board-redact.js';
10
+ import { linkKey } from './board.types.js';
11
+ const C = BOARD_CONSTANTS;
12
+ /** Work states that no longer count as open. */
13
+ const CLOSED = new Set(['done', 'verified', 'cancelled', 'rejected', 'failed']);
14
+ /** Closed states that still show as finished delegations. */
15
+ const FINISHED_OK = new Set(['done', 'verified']);
16
+ const iso = (ms) => new Date(ms).toISOString();
17
+ const msOf = (s) => (s ? Date.parse(s) : NaN);
18
+ /** The label of a link: scrubbed, short. */
19
+ function label(text) {
20
+ const t = text ? scrubText(text, C.LINK_LABEL_MAX) : '';
21
+ return t ? t.slice(0, C.LINK_LABEL_MAX) : undefined;
22
+ }
23
+ /**
24
+ * Reporting, delegation and shared-ticket links.
25
+ *
26
+ * @param input - Teams, work and tickets
27
+ * @returns Links, one per identity
28
+ */
29
+ export function structuralLinks(input) {
30
+ const { now, orchestrator, teams, workItems, tickets, tasks, stopped } = input;
31
+ const out = new Map();
32
+ const put = (l) => {
33
+ if (l.from === l.to)
34
+ return;
35
+ out.set(linkKey(l), l);
36
+ };
37
+ const known = new Set([orchestrator]);
38
+ const teamOf = new Map();
39
+ for (const t of teams)
40
+ for (const m of t.members) {
41
+ known.add(m.session);
42
+ teamOf.set(m.session, t);
43
+ }
44
+ const isKnown = (s) => known.has(s) || s.includes('@');
45
+ // --- reports_to: members -> their leaders, leaders -> the orchestrator
46
+ for (const t of teams) {
47
+ if (t.teamId === 'orchestrator')
48
+ continue;
49
+ const leaders = (t.leaders ?? []).filter((s) => t.members.some((m) => m.session === s));
50
+ const since = t.createdAt ?? iso(now);
51
+ for (const m of t.members) {
52
+ if (leaders.includes(m.session)) {
53
+ put({ from: m.session, to: orchestrator, kind: 'reports_to', active: !stopped.has(m.session), since });
54
+ }
55
+ else {
56
+ for (const lead of leaders)
57
+ put({ from: m.session, to: lead, kind: 'reports_to', active: !stopped.has(m.session), since });
58
+ }
59
+ }
60
+ }
61
+ // --- delegated: delegator -> worker, per pair
62
+ const windowStart = now - C.LINK_DELEGATION_WINDOW_MS;
63
+ const delegations = new Map();
64
+ for (const w of workItems) {
65
+ const to = w.target;
66
+ if (!to || !isKnown(to))
67
+ continue;
68
+ let from = w.delegatedBy;
69
+ if (!from) {
70
+ if (w.owner === 'orchestrator')
71
+ from = orchestrator;
72
+ else if (w.owner === 'team_lead')
73
+ from = teamOf.get(to)?.leaders?.find((s) => s !== to);
74
+ }
75
+ if (!from || from === to || !isKnown(from))
76
+ continue;
77
+ const open = !CLOSED.has(w.status);
78
+ const created = msOf(w.createdAt);
79
+ if (!open) {
80
+ const done = msOf(w.completedAt) || msOf(w.statusChangedAt) || created;
81
+ if (!FINISHED_OK.has(w.status) || !(done >= windowStart))
82
+ continue;
83
+ }
84
+ const key = `${from}\u0000${to}`;
85
+ const entry = delegations.get(key) ?? { from, to, items: [] };
86
+ entry.items.push({ w, open, at: Number.isFinite(created) ? created : now });
87
+ delegations.set(key, entry);
88
+ }
89
+ for (const { from, to, items } of delegations.values()) {
90
+ const open = items.filter((i) => i.open);
91
+ const pool = open.length > 0 ? open : items;
92
+ const newest = pool.reduce((a, b) => (b.at > a.at ? b : a));
93
+ put({ from, to, kind: 'delegated', active: open.length > 0, since: iso(newest.at), ...(label(newest.w.title) ? { label: label(newest.w.title) } : {}), weight: items.length });
94
+ }
95
+ // --- same_task: two agents on one ticket right now
96
+ const ticketTitle = new Map();
97
+ for (const t of tickets) {
98
+ ticketTitle.set(t.id, t.label ? `${t.label} ${t.title}` : t.title);
99
+ if (t.label)
100
+ ticketTitle.set(t.label, `${t.label} ${t.title}`);
101
+ }
102
+ const groups = new Map();
103
+ const join = (key, session, since) => {
104
+ const g = groups.get(key) ?? new Map();
105
+ g.set(session, Math.max(g.get(session) ?? 0, Number.isFinite(since) ? since : now));
106
+ groups.set(key, g);
107
+ };
108
+ for (const w of workItems) {
109
+ if (w.status !== 'running' || !w.target || !isKnown(w.target))
110
+ continue;
111
+ const key = w.projectTaskId ?? w.requestId;
112
+ if (key)
113
+ join(key, w.target, msOf(w.startedAt) || msOf(w.createdAt));
114
+ }
115
+ for (const [session, task] of tasks) {
116
+ if (task.id && ticketTitle.has(task.id) && isKnown(session))
117
+ join(task.id, session, msOf(task.since));
118
+ }
119
+ for (const [key, members] of groups) {
120
+ if (members.size < 2)
121
+ continue;
122
+ const sessions = [...members.keys()].sort().slice(0, C.LINK_SAME_TASK_MAX_GROUP);
123
+ const text = label(ticketTitle.get(key) ?? workItems.find((w) => w.projectTaskId === key || w.requestId === key)?.title);
124
+ for (let i = 0; i < sessions.length; i += 1) {
125
+ for (let j = i + 1; j < sessions.length; j += 1) {
126
+ const since = Math.max(members.get(sessions[i]) ?? now, members.get(sessions[j]) ?? now);
127
+ const link = { from: sessions[i], to: sessions[j], kind: 'same_task', active: true, since: iso(since), ...(text ? { label: text } : {}) };
128
+ // Two tickets shared by one pair: the earlier key keeps the pair
129
+ if (!out.has(linkKey(link)))
130
+ put(link);
131
+ }
132
+ }
133
+ }
134
+ return [...out.values()];
135
+ }
136
+ /**
137
+ * Messaging links from the recorder.
138
+ *
139
+ * @param pairs - Sender/receiver pairs in the last two hours
140
+ * @param now - Clock
141
+ * @param isKnown - Whether an endpoint is an agent of this machine or qualified
142
+ * @returns Links
143
+ */
144
+ export function messagingLinks(pairs, now, isKnown) {
145
+ const out = [];
146
+ for (const p of pairs) {
147
+ if (!isKnown(p.from) || !isKnown(p.to))
148
+ continue;
149
+ out.push({ from: p.from, to: p.to, kind: 'messaging', active: now - p.lastAt <= C.LINK_MESSAGING_ACTIVE_MS, since: iso(p.firstAt), weight: p.count });
150
+ }
151
+ return out;
152
+ }
153
+ /**
154
+ * Cap a link list: messaging, then same_task, are dropped first.
155
+ *
156
+ * @param links - Links
157
+ * @param max - Most links to keep
158
+ * @returns At most `max` links
159
+ */
160
+ export function capLinks(links, max = C.LINKS_MAX) {
161
+ if (links.length <= max)
162
+ return links;
163
+ const rank = { reports_to: 0, delegated: 1, same_task: 2, messaging: 3 };
164
+ return [...links]
165
+ .sort((a, b) => rank[a.kind] - rank[b.kind] || Number(b.active) - Number(a.active) || Date.parse(b.since) - Date.parse(a.since))
166
+ .slice(0, max);
167
+ }
168
+ //# sourceMappingURL=board-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-links.js","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-links.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@
2
2
  * Pushes the owner board to Crewly Cloud (crewly#1247).
3
3
  *
4
4
  * - a full snapshot every 60 s (Cloud may ask for another cadence);
5
- * - a delta (only the agent rows that changed, plus new timeline events)
6
- * within {@link BOARD_CONSTANTS.DELTA_DELAY_MS} of an activity change;
5
+ * - a delta (only the agent rows that changed, plus new timeline events and
6
+ * canvas steps) within {@link BOARD_CONSTANTS.DELTA_DELAY_MS} of an activity
7
+ * change, or within {@link CANVAS_CONSTANTS.LIVE_DELTA_DELAY_MS} while Cloud
8
+ * says someone is watching the canvas (`live: true` / `viewers > 0` in its
9
+ * answer, believed for {@link CANVAS_CONSTANTS.LIVE_TTL_MS});
7
10
  * - gzip bodies, exponential backoff on failure, an hour's pause when Cloud
8
11
  * does not take board pushes (not deployed / refusing);
9
12
  * - nothing is sent when the machine is not signed in to Cloud, or when
@@ -18,7 +21,8 @@
18
21
  import { type ComponentLogger } from '../core/logger.service.js';
19
22
  import type { BoardActivityTracker } from './board-activity.tracker.js';
20
23
  import type { BoardSnapshotBuilder } from './board-snapshot.builder.js';
21
- import type { BoardSnapshot } from './board.types.js';
24
+ import { type AgentInteractionRecorder } from './board-interactions.js';
25
+ import { type BoardSnapshot } from './board.types.js';
22
26
  /** The Cloud session (CloudClientService). */
23
27
  export interface BoardCloudSession {
24
28
  getToken(): string | null;
@@ -36,6 +40,8 @@ export interface BoardPushDeps {
36
40
  setTimeout?: (fn: () => void, ms: number) => ReturnType<typeof setTimeout>;
37
41
  clearTimeout?: (handle: ReturnType<typeof setTimeout>) => void;
38
42
  logger?: ComponentLogger;
43
+ /** Agent-to-agent messages (default: the process-wide recorder) */
44
+ interactions?: AgentInteractionRecorder;
39
45
  }
40
46
  /** What one push did. */
41
47
  export type BoardPushOutcome = 'sent' | 'nothing' | 'skipped' | 'paused' | 'failed';
@@ -69,14 +75,31 @@ export declare class BoardPushService {
69
75
  private readonly dirty;
70
76
  /** Rows Cloud has, as JSON, by session */
71
77
  private readonly lastSent;
78
+ /** Links Cloud has, as JSON, by identity */
79
+ private readonly lastLinks;
80
+ /** A message was recorded since the last delta: the links may differ */
81
+ private linksDirty;
72
82
  private lastToken;
73
83
  private fullOk;
74
84
  private fullAfterMs;
75
85
  private failures;
76
86
  private pausedUntil;
77
87
  private pauseLogged;
88
+ /** Cloud said viewers are watching until this time (epoch ms) */
89
+ private liveUntil;
78
90
  private inFlight;
79
91
  constructor(deps: BoardPushDeps);
92
+ /**
93
+ * Whether Cloud recently said someone is watching the canvas.
94
+ *
95
+ * @returns True while the live answer is believed
96
+ */
97
+ isLive(): boolean;
98
+ /**
99
+ * Treat the canvas as watched for a while (an owner action just arrived, so
100
+ * someone is there).
101
+ */
102
+ noteViewer(): void;
80
103
  /** Whether the push is switched off in the environment. */
81
104
  get disabled(): boolean;
82
105
  /** Start pushing. Idempotent; a no-op when switched off. Never throws. */
@@ -109,6 +132,8 @@ export declare class BoardPushService {
109
132
  */
110
133
  flushDelta(): Promise<BoardPushOutcome>;
111
134
  private doDelta;
135
+ /** Cloud's answer says whether anyone is watching (`live: true` or `viewers > 0`, at the top or under `next`). */
136
+ private noteLiveAnswer;
112
137
  private post;
113
138
  }
114
139
  //# sourceMappingURL=board-push.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"board-push.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-push.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-push.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-push.service.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@
2
2
  * Pushes the owner board to Crewly Cloud (crewly#1247).
3
3
  *
4
4
  * - a full snapshot every 60 s (Cloud may ask for another cadence);
5
- * - a delta (only the agent rows that changed, plus new timeline events)
6
- * within {@link BOARD_CONSTANTS.DELTA_DELAY_MS} of an activity change;
5
+ * - a delta (only the agent rows that changed, plus new timeline events and
6
+ * canvas steps) within {@link BOARD_CONSTANTS.DELTA_DELAY_MS} of an activity
7
+ * change, or within {@link CANVAS_CONSTANTS.LIVE_DELTA_DELAY_MS} while Cloud
8
+ * says someone is watching the canvas (`live: true` / `viewers > 0` in its
9
+ * answer, believed for {@link CANVAS_CONSTANTS.LIVE_TTL_MS});
7
10
  * - gzip bodies, exponential backoff on failure, an hour's pause when Cloud
8
11
  * does not take board pushes (not deployed / refusing);
9
12
  * - nothing is sent when the machine is not signed in to Cloud, or when
@@ -16,9 +19,12 @@
16
19
  * @module services/board/board-push.service
17
20
  */
18
21
  import { gzipSync } from 'zlib';
19
- import { BOARD_CONSTANTS } from '../../constants.js';
22
+ import { BOARD_CONSTANTS, CANVAS_CONSTANTS } from '../../constants.js';
20
23
  import { LoggerService } from '../core/logger.service.js';
24
+ import { getAgentInteractions } from './board-interactions.js';
25
+ import { linkKey } from './board.types.js';
21
26
  const C = BOARD_CONSTANTS;
27
+ const CV = CANVAS_CONSTANTS;
22
28
  /**
23
29
  * Whether the board push is switched off.
24
30
  *
@@ -38,6 +44,9 @@ export function isBoardPushDisabled(env = process.env) {
38
44
  */
39
45
  export function fitSnapshot(snapshot) {
40
46
  const size = () => Buffer.byteLength(JSON.stringify(snapshot));
47
+ // Links go first: a map of lines is the least important part of the body
48
+ while (snapshot.links && snapshot.links.length > 0 && size() > C.MAX_BODY_BYTES)
49
+ snapshot.links.length = Math.floor(snapshot.links.length / 2);
41
50
  const lists = [snapshot.outcomes.doneToday, snapshot.outcomes.stuck, snapshot.outcomes.waitingOnOwner];
42
51
  let guard = 0;
43
52
  while (size() > C.MAX_BODY_BYTES && guard < 500) {
@@ -70,12 +79,18 @@ export class BoardPushService {
70
79
  dirty = new Set();
71
80
  /** Rows Cloud has, as JSON, by session */
72
81
  lastSent = new Map();
82
+ /** Links Cloud has, as JSON, by identity */
83
+ lastLinks = new Map();
84
+ /** A message was recorded since the last delta: the links may differ */
85
+ linksDirty = false;
73
86
  lastToken = null;
74
87
  fullOk = false;
75
88
  fullAfterMs = C.FULL_INTERVAL_MS;
76
89
  failures = 0;
77
90
  pausedUntil = 0;
78
91
  pauseLogged = false;
92
+ /** Cloud said viewers are watching until this time (epoch ms) */
93
+ liveUntil = 0;
79
94
  inFlight = Promise.resolve();
80
95
  constructor(deps) {
81
96
  this.deps = deps;
@@ -91,6 +106,21 @@ export class BoardPushService {
91
106
  });
92
107
  this.clearTimer = deps.clearTimeout ?? ((h) => clearTimeout(h));
93
108
  }
109
+ /**
110
+ * Whether Cloud recently said someone is watching the canvas.
111
+ *
112
+ * @returns True while the live answer is believed
113
+ */
114
+ isLive() {
115
+ return this.now() < this.liveUntil;
116
+ }
117
+ /**
118
+ * Treat the canvas as watched for a while (an owner action just arrived, so
119
+ * someone is there).
120
+ */
121
+ noteViewer() {
122
+ this.liveUntil = Math.max(this.liveUntil, this.now() + CV.LIVE_TTL_MS);
123
+ }
94
124
  /** Whether the push is switched off in the environment. */
95
125
  get disabled() {
96
126
  return isBoardPushDisabled(this.deps.env ?? process.env);
@@ -100,7 +130,18 @@ export class BoardPushService {
100
130
  if (this.started || this.disabled)
101
131
  return;
102
132
  this.started = true;
103
- this.unsubscribe = this.deps.tracker.onChange((session) => this.markDirty(session));
133
+ // A step changed: the agent's row did not necessarily, but a delta is due
134
+ const offRows = this.deps.tracker.onChange((session) => this.markDirty(session));
135
+ const offSteps = this.deps.tracker.steps.onChange((session) => this.markDirty(session));
136
+ const offMessages = (this.deps.interactions ?? getAgentInteractions()).onRecord((from) => {
137
+ this.linksDirty = true;
138
+ this.markDirty(from);
139
+ });
140
+ this.unsubscribe = () => {
141
+ offRows();
142
+ offSteps();
143
+ offMessages();
144
+ };
104
145
  this.scheduleFull(0);
105
146
  }
106
147
  /** Stop timers and the subscription. */
@@ -130,7 +171,7 @@ export class BoardPushService {
130
171
  this.deltaTimer = this.setTimer(() => {
131
172
  this.deltaTimer = null;
132
173
  void this.flushDelta();
133
- }, C.DELTA_DELAY_MS);
174
+ }, this.isLive() ? CV.LIVE_DELTA_DELAY_MS : C.DELTA_DELAY_MS);
134
175
  }
135
176
  scheduleFull(delayMs) {
136
177
  if (!this.started)
@@ -191,11 +232,15 @@ export class BoardPushService {
191
232
  for (const team of snapshot.teams)
192
233
  for (const a of team.agents)
193
234
  this.lastSent.set(a.session, JSON.stringify(a));
235
+ this.lastLinks.clear();
236
+ for (const l of snapshot.links ?? [])
237
+ this.lastLinks.set(linkKey(l), JSON.stringify(l));
238
+ this.linksDirty = false;
194
239
  this.dirty.clear();
195
240
  // Timeline events ride in deltas
196
- const pending = this.deps.tracker.sessionsWithUnsent();
197
- if (pending.length > 0)
198
- await this.doDelta(new Set(pending));
241
+ const pending = new Set([...this.deps.tracker.sessionsWithUnsent(), ...this.deps.tracker.steps.sessionsWithUnsent()]);
242
+ if (pending.size > 0)
243
+ await this.doDelta(pending);
199
244
  return 'sent';
200
245
  }
201
246
  /**
@@ -221,7 +266,19 @@ export class BoardPushService {
221
266
  const rows = this.deps.builder.rows(sessions);
222
267
  const changed = rows.filter((r) => this.lastSent.get(r.session) !== JSON.stringify(stripTeam(r)));
223
268
  const timeline = this.deps.tracker.peekUnsent(sessions);
224
- if (changed.length === 0 && timeline.length === 0)
269
+ let steps = this.deps.tracker.steps.peekUnsent(sessions);
270
+ // Links are recomputed only after a message (the rest comes with the full build)
271
+ let links = [];
272
+ let removedLinks = [];
273
+ const linksWereDirty = this.linksDirty;
274
+ if (linksWereDirty) {
275
+ this.linksDirty = false;
276
+ const now = this.deps.builder.links();
277
+ links = now.filter((l) => this.lastLinks.get(linkKey(l)) !== JSON.stringify(l));
278
+ const keys = new Set(now.map(linkKey));
279
+ removedLinks = [...this.lastLinks.keys()].filter((k) => !keys.has(k));
280
+ }
281
+ if (changed.length === 0 && timeline.length === 0 && steps.length === 0 && links.length === 0 && removedLinks.length === 0)
225
282
  return 'nothing';
226
283
  const instanceId = (await this.deps.builder.identity()).instanceId;
227
284
  const body = {
@@ -230,20 +287,61 @@ export class BoardPushService {
230
287
  generatedAt: new Date(this.now()).toISOString(),
231
288
  agents: changed,
232
289
  ...(timeline.length > 0 ? { timeline } : {}),
290
+ ...(steps.length > 0 ? { steps } : {}),
291
+ ...(links.length > 0 ? { links } : {}),
292
+ ...(removedLinks.length > 0 ? { removedLinks } : {}),
233
293
  };
294
+ // The body limit is on the uncompressed JSON: the newest steps go first when it does not fit
295
+ for (let guard = 0; guard < 20 && body.steps && Buffer.byteLength(JSON.stringify(body)) > C.MAX_BODY_BYTES; guard += 1) {
296
+ steps = steps.slice(Math.ceil(steps.length / 2));
297
+ if (steps.length > 0)
298
+ body.steps = steps;
299
+ else
300
+ delete body.steps;
301
+ }
234
302
  const outcome = await this.post(target, C.DELTA_PATH, body, instanceId);
235
303
  if (outcome === 'sent') {
236
304
  for (const r of changed)
237
305
  this.lastSent.set(r.session, JSON.stringify(stripTeam(r)));
306
+ for (const l of links)
307
+ this.lastLinks.set(linkKey(l), JSON.stringify(l));
308
+ for (const k of removedLinks)
309
+ this.lastLinks.delete(k);
238
310
  this.deps.tracker.ackUnsent(timeline);
311
+ this.deps.tracker.steps.ackUnsent(steps);
312
+ // Steps the per-delta limit held back go in the next one
313
+ const left = this.deps.tracker.steps.sessionsWithUnsent();
314
+ for (const session of left)
315
+ this.markDirty(session);
239
316
  }
240
317
  else if (outcome === 'failed') {
241
318
  // keep them dirty for the next try (the full push also repairs everything)
319
+ if (linksWereDirty)
320
+ this.linksDirty = true;
242
321
  for (const s of sessions)
243
322
  this.dirty.add(s);
244
323
  }
245
324
  return outcome;
246
325
  }
326
+ /** Cloud's answer says whether anyone is watching (`live: true` or `viewers > 0`, at the top or under `next`). */
327
+ noteLiveAnswer(data) {
328
+ if (!data)
329
+ return;
330
+ const live = (o) => {
331
+ if (!o)
332
+ return null;
333
+ if (typeof o.live === 'boolean')
334
+ return o.live;
335
+ if (typeof o.viewers === 'number' && Number.isFinite(o.viewers))
336
+ return o.viewers > 0;
337
+ return null;
338
+ };
339
+ const answer = live(data) ?? live(data.next);
340
+ if (answer === true)
341
+ this.liveUntil = this.now() + CV.LIVE_TTL_MS;
342
+ else if (answer === false)
343
+ this.liveUntil = 0;
344
+ }
247
345
  async post(target, path, body, instanceId) {
248
346
  const json = JSON.stringify(body);
249
347
  const gz = gzipSync(Buffer.from(json));
@@ -267,6 +365,7 @@ export class BoardPushService {
267
365
  const sec = parsed?.data?.next?.fullAfterSec;
268
366
  if (typeof sec === 'number' && Number.isFinite(sec))
269
367
  this.fullAfterMs = Math.min(600, Math.max(15, sec)) * 1000;
368
+ this.noteLiveAnswer(parsed?.data);
270
369
  this.failures = 0;
271
370
  if (this.pauseLogged) {
272
371
  this.pauseLogged = false;
@@ -1 +1 @@
1
- {"version":3,"file":"board-push.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-push.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-push.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-push.service.ts"],"names":[],"mappings":"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"}