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.
- package/config/hooks/agent-status/report.sh +5 -5
- package/dist/backend/backend/src/constants.d.ts +80 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +80 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +9 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +161 -2
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts +17 -0
- package/dist/backend/backend/src/services/board/board-activity.normalizer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board-activity.normalizer.js +8 -5
- package/dist/backend/backend/src/services/board/board-activity.normalizer.js.map +1 -1
- package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts +5 -0
- package/dist/backend/backend/src/services/board/board-activity.tracker.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board-activity.tracker.js +25 -1
- package/dist/backend/backend/src/services/board/board-activity.tracker.js.map +1 -1
- package/dist/backend/backend/src/services/board/board-interaction-hooks.d.ts +34 -0
- package/dist/backend/backend/src/services/board/board-interaction-hooks.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/board-interaction-hooks.js +60 -0
- package/dist/backend/backend/src/services/board/board-interaction-hooks.js.map +1 -0
- package/dist/backend/backend/src/services/board/board-interactions.d.ts +54 -0
- package/dist/backend/backend/src/services/board/board-interactions.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/board-interactions.js +92 -0
- package/dist/backend/backend/src/services/board/board-interactions.js.map +1 -0
- package/dist/backend/backend/src/services/board/board-links.d.ts +51 -0
- package/dist/backend/backend/src/services/board/board-links.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/board-links.js +168 -0
- package/dist/backend/backend/src/services/board/board-links.js.map +1 -0
- package/dist/backend/backend/src/services/board/board-push.service.d.ts +28 -3
- package/dist/backend/backend/src/services/board/board-push.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board-push.service.js +108 -9
- package/dist/backend/backend/src/services/board/board-push.service.js.map +1 -1
- package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts +39 -2
- package/dist/backend/backend/src/services/board/board-snapshot.builder.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board-snapshot.builder.js +85 -8
- package/dist/backend/backend/src/services/board/board-snapshot.builder.js.map +1 -1
- package/dist/backend/backend/src/services/board/board.sources.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board.sources.js +27 -1
- package/dist/backend/backend/src/services/board/board.sources.js.map +1 -1
- package/dist/backend/backend/src/services/board/board.types.d.ts +48 -0
- package/dist/backend/backend/src/services/board/board.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/board/board.types.js +9 -1
- package/dist/backend/backend/src/services/board/board.types.js.map +1 -1
- package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts +122 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js +339 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-inbound.service.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts +44 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-redact.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-redact.js +161 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-redact.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts +57 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js +164 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.normalizer.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts +140 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js +300 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-step.stream.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts +99 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js +223 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-terminal.service.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts +126 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js +385 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-transcript.tail.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts +103 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js +124 -0
- package/dist/backend/backend/src/services/board/canvas/canvas-wiring.js.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts +88 -0
- package/dist/backend/backend/src/services/board/canvas/canvas.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/board/canvas/canvas.types.js +8 -0
- package/dist/backend/backend/src/services/board/canvas/canvas.types.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +80 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +80 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- 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
|
|
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
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"board-push.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/board/board-push.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKhG,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IACjC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC3E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,CAAC;IAC/D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mEAAmE;IACnE,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAED,yBAAyB;AACzB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAGjF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAmBlE;AAED,mCAAmC;AACnC,qBAAa,gBAAgB;IA4BhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IA3BjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0D;IACpF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;IACzF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkD;IAE7E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,iEAAiE;IACjE,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAuC;gBAE1B,IAAI,EAAE,aAAa;IAchD;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAIjB;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB,2DAA2D;IAC3D,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAkBb,wCAAwC;IACxC,IAAI,IAAI,IAAI;IAWZ;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUhC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAMrB,gGAAgG;IAChG,OAAO,CAAC,MAAM;IAcd;;;;;OAKG;IACH,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;YAMvB,MAAM;IAoBpB;;;;;OAKG;IACH,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;YAQzB,OAAO;IAwDrB,kHAAkH;IAClH,OAAO,CAAC,cAAc;YAaR,IAAI;CAwDlB"}
|
|
@@ -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
|
|
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
|
-
|
|
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.
|
|
198
|
-
await this.doDelta(
|
|
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
|
-
|
|
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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"}
|