@jungjaehoon/mama-os 0.61.2 → 0.62.0
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/CHANGELOG.md +72 -0
- package/README.md +1 -1
- package/dist/api/drive-actions.d.ts +12 -0
- package/dist/api/drive-actions.d.ts.map +1 -0
- package/dist/api/drive-actions.js +322 -0
- package/dist/api/drive-actions.js.map +1 -0
- package/dist/api/report-source-actions.d.ts.map +1 -1
- package/dist/api/report-source-actions.js +15 -7
- package/dist/api/report-source-actions.js.map +1 -1
- package/dist/api/security-events.d.ts +26 -0
- package/dist/api/security-events.d.ts.map +1 -1
- package/dist/api/security-events.js +107 -24
- package/dist/api/security-events.js.map +1 -1
- package/dist/api/source-actions.d.ts.map +1 -1
- package/dist/api/source-actions.js +7 -7
- package/dist/api/source-actions.js.map +1 -1
- package/dist/api/stored-source-reader.d.ts.map +1 -1
- package/dist/api/stored-source-reader.js +3 -0
- package/dist/api/stored-source-reader.js.map +1 -1
- package/dist/api/trello-actions.d.ts +15 -0
- package/dist/api/trello-actions.d.ts.map +1 -0
- package/dist/api/trello-actions.js +130 -0
- package/dist/api/trello-actions.js.map +1 -0
- package/dist/api/work-actions.d.ts +1 -0
- package/dist/api/work-actions.d.ts.map +1 -1
- package/dist/api/work-actions.js +20 -11
- package/dist/api/work-actions.js.map +1 -1
- package/dist/backfill/format.d.ts +105 -0
- package/dist/backfill/format.d.ts.map +1 -0
- package/dist/backfill/format.js +314 -0
- package/dist/backfill/format.js.map +1 -0
- package/dist/backfill/push.d.ts +63 -0
- package/dist/backfill/push.d.ts.map +1 -0
- package/dist/backfill/push.js +221 -0
- package/dist/backfill/push.js.map +1 -0
- package/dist/cli/commands/backfill.d.ts +12 -0
- package/dist/cli/commands/backfill.d.ts.map +1 -0
- package/dist/cli/commands/backfill.js +67 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +2 -1
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +55 -14
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +18 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/runtime/claude-caller-config.d.ts +6 -1
- package/dist/cli/runtime/claude-caller-config.d.ts.map +1 -1
- package/dist/cli/runtime/claude-caller-config.js +3 -1
- package/dist/cli/runtime/claude-caller-config.js.map +1 -1
- package/dist/connectors/framework/gws-utils.d.ts +6 -3
- package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
- package/dist/connectors/framework/gws-utils.js +35 -6
- package/dist/connectors/framework/gws-utils.js.map +1 -1
- package/dist/connectors/index.d.ts +0 -1
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +1 -5
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/slack/index.d.ts +2 -0
- package/dist/connectors/slack/index.d.ts.map +1 -1
- package/dist/connectors/slack/index.js +83 -39
- package/dist/connectors/slack/index.js.map +1 -1
- package/dist/connectors/trello/action-line.d.ts +13 -0
- package/dist/connectors/trello/action-line.d.ts.map +1 -0
- package/dist/connectors/trello/action-line.js +118 -0
- package/dist/connectors/trello/action-line.js.map +1 -0
- package/dist/connectors/trello/actions.d.ts +27 -0
- package/dist/connectors/trello/actions.d.ts.map +1 -0
- package/dist/connectors/trello/actions.js +35 -0
- package/dist/connectors/trello/actions.js.map +1 -0
- package/dist/connectors/trello/api.d.ts +23 -0
- package/dist/connectors/trello/api.d.ts.map +1 -0
- package/dist/connectors/trello/api.js +102 -0
- package/dist/connectors/trello/api.js.map +1 -0
- package/dist/connectors/trello/index.d.ts +63 -31
- package/dist/connectors/trello/index.d.ts.map +1 -1
- package/dist/connectors/trello/index.js +165 -246
- package/dist/connectors/trello/index.js.map +1 -1
- package/dist/gateways/discord.d.ts +4 -0
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +7 -3
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/slack.d.ts +4 -0
- package/dist/gateways/slack.d.ts.map +1 -1
- package/dist/gateways/slack.js +7 -3
- package/dist/gateways/slack.js.map +1 -1
- package/dist/gateways/telegram-message-ledger.d.ts +5 -0
- package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
- package/dist/gateways/telegram-message-ledger.js +8 -1
- package/dist/gateways/telegram-message-ledger.js.map +1 -1
- package/dist/gateways/telegram.d.ts +4 -0
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +7 -5
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/replay/replay-source-catalog.d.ts.map +1 -1
- package/dist/replay/replay-source-catalog.js +5 -45
- package/dist/replay/replay-source-catalog.js.map +1 -1
- package/dist/replay/trello-import.d.ts +1 -8
- package/dist/replay/trello-import.d.ts.map +1 -1
- package/dist/replay/trello-import.js +16 -103
- package/dist/replay/trello-import.js.map +1 -1
- package/dist/runtime/action-surface.d.ts +4 -1
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +27 -1
- package/dist/runtime/action-surface.js.map +1 -1
- package/dist/runtime/config.d.ts +5 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +10 -1
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/connectors.d.ts +0 -1
- package/dist/runtime/connectors.d.ts.map +1 -1
- package/dist/runtime/connectors.js +0 -1
- package/dist/runtime/connectors.js.map +1 -1
- package/dist/runtime/egress-proxy.d.ts +15 -0
- package/dist/runtime/egress-proxy.d.ts.map +1 -0
- package/dist/runtime/egress-proxy.js +176 -0
- package/dist/runtime/egress-proxy.js.map +1 -0
- package/dist/runtime/native-session.d.ts +7 -0
- package/dist/runtime/native-session.d.ts.map +1 -1
- package/dist/runtime/native-session.js +8 -1
- package/dist/runtime/native-session.js.map +1 -1
- package/dist/runtime/outbound-attempts.d.ts +18 -0
- package/dist/runtime/outbound-attempts.d.ts.map +1 -0
- package/dist/runtime/outbound-attempts.js +98 -0
- package/dist/runtime/outbound-attempts.js.map +1 -0
- package/dist/runtime/owner-runtime.d.ts +9 -0
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +8 -0
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
- package/dist/runtime/owner-system-prompt.js +6 -1
- package/dist/runtime/owner-system-prompt.js.map +1 -1
- package/dist/runtime/record-orders.d.ts.map +1 -1
- package/dist/runtime/record-orders.js +33 -13
- package/dist/runtime/record-orders.js.map +1 -1
- package/dist/runtime/stimulus-delivery.d.ts +15 -0
- package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
- package/dist/runtime/stimulus-delivery.js +29 -2
- package/dist/runtime/stimulus-delivery.js.map +1 -1
- package/package.json +2 -2
- package/public/viewer/log-viewer.html +7 -3
- package/public/viewer/operator/operator.css +1 -1
- package/public/viewer/operator/operator.js +5428 -5685
|
@@ -1,84 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* TrelloConnector —
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* A card's operational state is more than its list: production boards track the
|
|
8
|
-
* assignee and the revision round (e.g. a "初稿" / "1回修正" label) on the card
|
|
9
|
-
* itself. The poller therefore ingests labels and resolved member names, and a
|
|
10
|
-
* label/member change on an unmoved card is a change worth emitting - owner
|
|
11
|
-
* question "who owns this and which revision round is it in" must be answerable
|
|
12
|
-
* from the raw store.
|
|
3
|
+
* TrelloConnector — stores every action of the configured boards. Each poll reads
|
|
4
|
+
* /boards/{id}/actions since the scheduler's cursor and returns the same item the history import
|
|
5
|
+
* stores (connectors/trello/actions.ts); the windows overlap and the raw store keeps an action
|
|
6
|
+
* once. The connector also serves trello.read, so the credentials stay here.
|
|
13
7
|
*/
|
|
14
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
9
|
exports.TrelloConnector = void 0;
|
|
16
|
-
const fs_1 = require("fs");
|
|
17
|
-
const path_1 = require("path");
|
|
18
10
|
const error_message_js_1 = require("../../utils/error-message.js");
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
function decodeCardState(raw) {
|
|
24
|
-
if (raw.startsWith(STATE_V2_PREFIX)) {
|
|
25
|
-
try {
|
|
26
|
-
const [list, labels, members] = JSON.parse(raw.slice(STATE_V2_PREFIX.length));
|
|
27
|
-
return { state: { list, labels: labels ?? [], members: members ?? [] }, legacy: false };
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
/* fall through to legacy interpretation */
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Legacy value: the bare list name (pre-label/member polling). Treated as
|
|
34
|
-
// list-only so the format upgrade never floods the raw store with a
|
|
35
|
-
// "changed" item for every open card.
|
|
36
|
-
return { state: { list: raw, labels: [], members: [] }, legacy: true };
|
|
37
|
-
}
|
|
11
|
+
const api_js_1 = require("./api.js");
|
|
12
|
+
const actions_js_1 = require("./actions.js");
|
|
13
|
+
const action_line_js_1 = require("./action-line.js");
|
|
14
|
+
const CARD_FIELDS = 'name,idBoard,idList,idMembers,labels,due,dueComplete,dateLastActivity,shortUrl';
|
|
38
15
|
class TrelloConnector {
|
|
16
|
+
config;
|
|
17
|
+
fetchImpl;
|
|
39
18
|
name = 'trello';
|
|
40
19
|
type = 'api';
|
|
41
|
-
|
|
42
|
-
apiKey = null;
|
|
43
|
-
token = null;
|
|
44
|
-
baseUrl = 'https://api.trello.com/1';
|
|
20
|
+
client = null;
|
|
45
21
|
lastPollTime = null;
|
|
46
22
|
lastPollCount = 0;
|
|
47
23
|
lastError = undefined;
|
|
48
|
-
|
|
49
|
-
lastCardStates = new Map();
|
|
50
|
-
pendingCardStates = null;
|
|
51
|
-
pollCommitDeferred = false;
|
|
52
|
-
stateFilePath;
|
|
53
|
-
constructor(config, options) {
|
|
24
|
+
constructor(config, fetchImpl = (input, init) => fetch(input, init)) {
|
|
54
25
|
this.config = config;
|
|
55
|
-
|
|
56
|
-
if (typeof stateFilePath !== 'string' || stateFilePath.trim() === '') {
|
|
57
|
-
throw new Error('Trello state file path is required');
|
|
58
|
-
}
|
|
59
|
-
this.stateFilePath = stateFilePath;
|
|
26
|
+
this.fetchImpl = fetchImpl;
|
|
60
27
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
28
|
+
/** The configured boards; an ignored channel or one without a board is left out. */
|
|
29
|
+
boards() {
|
|
30
|
+
return Object.entries(this.config.channels).flatMap(([key, channel]) => channel.role === 'ignore' || !channel.boardId
|
|
31
|
+
? []
|
|
32
|
+
: [
|
|
33
|
+
{
|
|
34
|
+
key,
|
|
35
|
+
boardId: channel.boardId,
|
|
36
|
+
...(channel.name === undefined ? {} : { name: channel.name }),
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
73
39
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
for (const [board, cards] of states) {
|
|
79
|
-
obj[board] = Object.fromEntries(cards);
|
|
80
|
-
}
|
|
81
|
-
(0, fs_1.writeFileSync)(this.stateFilePath, JSON.stringify({ lastCardStates: obj }));
|
|
40
|
+
api() {
|
|
41
|
+
if (!this.client)
|
|
42
|
+
throw new Error('TrelloConnector not initialized');
|
|
43
|
+
return this.client;
|
|
82
44
|
}
|
|
83
45
|
async init() {
|
|
84
46
|
const apiKey = process.env.MAMA_TRELLO_KEY;
|
|
@@ -86,20 +48,14 @@ class TrelloConnector {
|
|
|
86
48
|
if (!apiKey?.trim() || !token?.trim()) {
|
|
87
49
|
throw new Error('Trello credentials missing. Run mama secret set MAMA_TRELLO_KEY and mama secret set MAMA_TRELLO_TOKEN, then restart through ~/.mama/start.sh.');
|
|
88
50
|
}
|
|
89
|
-
this.
|
|
90
|
-
this.token = token;
|
|
91
|
-
this.loadState();
|
|
51
|
+
this.client = new api_js_1.TrelloApi({ apiKey, token }, this.fetchImpl);
|
|
92
52
|
}
|
|
93
53
|
async dispose() {
|
|
94
|
-
this.
|
|
95
|
-
this.token = null;
|
|
96
|
-
this.lastCardStates.clear();
|
|
97
|
-
this.pendingCardStates = null;
|
|
98
|
-
this.pollCommitDeferred = false;
|
|
54
|
+
this.client = null;
|
|
99
55
|
}
|
|
100
56
|
async healthCheck() {
|
|
101
57
|
return {
|
|
102
|
-
healthy: this.
|
|
58
|
+
healthy: this.client !== null && this.lastError === undefined,
|
|
103
59
|
lastPollTime: this.lastPollTime,
|
|
104
60
|
lastPollCount: this.lastPollCount,
|
|
105
61
|
error: this.lastError,
|
|
@@ -121,199 +77,162 @@ class TrelloConnector {
|
|
|
121
77
|
}
|
|
122
78
|
async authenticate() {
|
|
123
79
|
try {
|
|
124
|
-
|
|
80
|
+
const apiKey = process.env.MAMA_TRELLO_KEY;
|
|
81
|
+
const token = process.env[this.config.auth.tokenName ?? 'MAMA_TRELLO_TOKEN'];
|
|
82
|
+
if (!apiKey || !token)
|
|
125
83
|
return false;
|
|
126
|
-
const
|
|
127
|
-
const res = await fetch(url);
|
|
84
|
+
const res = await fetch(`https://api.trello.com/1/members/me?key=${apiKey}&token=${token}`);
|
|
128
85
|
return res.ok;
|
|
129
86
|
}
|
|
130
87
|
catch {
|
|
131
88
|
return false;
|
|
132
89
|
}
|
|
133
90
|
}
|
|
134
|
-
|
|
135
|
-
const controller = new AbortController();
|
|
136
|
-
const timeout = setTimeout(() => controller.abort(), 30_000);
|
|
137
|
-
try {
|
|
138
|
-
return await fetch(url, { signal: controller.signal });
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
clearTimeout(timeout);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
/** id → display name for a board's members. Failure degrades to raw ids
|
|
145
|
-
* (name resolution is enrichment, never a reason to drop a poll). */
|
|
146
|
-
async fetchMemberNames(boardId) {
|
|
147
|
-
const names = new Map();
|
|
148
|
-
try {
|
|
149
|
-
const res = await this.fetchWithTimeout(`${this.baseUrl}/boards/${boardId}/members?fields=fullName,username&key=${this.apiKey}&token=${this.token}`);
|
|
150
|
-
if (!res.ok)
|
|
151
|
-
return names;
|
|
152
|
-
const members = (await res.json());
|
|
153
|
-
for (const m of members) {
|
|
154
|
-
const name = m.fullName || m.username;
|
|
155
|
-
if (name)
|
|
156
|
-
names.set(m.id, name);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
/* degrade to ids */
|
|
161
|
-
}
|
|
162
|
-
return names;
|
|
163
|
-
}
|
|
91
|
+
/** One failing board fails the poll, so the scheduler keeps its cursor and retries the window. */
|
|
164
92
|
async poll(since) {
|
|
165
|
-
|
|
166
|
-
|
|
93
|
+
const api = this.api();
|
|
94
|
+
const boards = this.boards();
|
|
167
95
|
const items = [];
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const pendingCardStates = new Map([...this.lastCardStates].map(([boardId, states]) => [boardId, new Map(states)]));
|
|
171
|
-
for (const [channelKey, channelCfg] of Object.entries(this.config.channels)) {
|
|
172
|
-
if (channelCfg.role === 'ignore')
|
|
173
|
-
continue;
|
|
174
|
-
if (!channelCfg.boardId)
|
|
175
|
-
continue;
|
|
176
|
-
polledBoards += 1;
|
|
177
|
-
const channelName = channelCfg.name ?? channelKey;
|
|
178
|
-
const boardId = channelCfg.boardId;
|
|
96
|
+
let failed = 0;
|
|
97
|
+
for (const board of boards) {
|
|
179
98
|
try {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
`&key=${this.apiKey}&token=${this.token}`;
|
|
183
|
-
const res = await this.fetchWithTimeout(url);
|
|
184
|
-
if (!res.ok) {
|
|
185
|
-
failedBoards.add(boardId);
|
|
186
|
-
this.lastError = `Board ${boardId}: HTTP ${res.status}`;
|
|
187
|
-
continue;
|
|
188
|
-
}
|
|
189
|
-
const lists = (await res.json());
|
|
190
|
-
// Lazy: boards whose open cards carry no members need no roster call.
|
|
191
|
-
const anyMembers = lists.some((l) => l.cards.some((c) => c.idMembers.length > 0));
|
|
192
|
-
const memberNames = anyMembers ? await this.fetchMemberNames(boardId) : new Map();
|
|
193
|
-
// Get or init previous card states for this board
|
|
194
|
-
if (!this.lastCardStates.has(boardId)) {
|
|
195
|
-
this.lastCardStates.set(boardId, new Map());
|
|
196
|
-
}
|
|
197
|
-
const prevCardState = this.lastCardStates.get(boardId);
|
|
198
|
-
const newCardState = new Map();
|
|
199
|
-
for (const list of lists) {
|
|
200
|
-
for (const card of list.cards) {
|
|
201
|
-
const activityTime = Date.parse(card.dateLastActivity);
|
|
202
|
-
if (!Number.isFinite(activityTime)) {
|
|
203
|
-
failedBoards.add(boardId);
|
|
204
|
-
this.lastError = 'Trello board item has an invalid activity timestamp';
|
|
205
|
-
const previousState = prevCardState.get(card.id);
|
|
206
|
-
if (previousState !== undefined) {
|
|
207
|
-
newCardState.set(card.id, previousState);
|
|
208
|
-
}
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
const labels = (card.labels ?? []).map((l) => l.name).filter(Boolean);
|
|
212
|
-
const assignees = card.idMembers.map((id) => memberNames.get(id) ?? id);
|
|
213
|
-
const current = { list: list.name, labels, members: assignees };
|
|
214
|
-
newCardState.set(card.id, encodeCardState(current));
|
|
215
|
-
// The first snapshot is bounded by the frozen bootstrap window. Keep the
|
|
216
|
-
// state fingerprint for older cards so a later change is still observable,
|
|
217
|
-
// but do not emit an old open card as a new source item.
|
|
218
|
-
if (activityTime <= since.getTime())
|
|
219
|
-
continue;
|
|
220
|
-
const prevRaw = prevCardState.get(card.id);
|
|
221
|
-
const isNew = prevRaw === undefined;
|
|
222
|
-
const prev = prevRaw !== undefined ? decodeCardState(prevRaw) : undefined;
|
|
223
|
-
const isMoved = prev !== undefined && prev.state.list !== list.name;
|
|
224
|
-
// Label/assignee deltas only fire against v2 state: a legacy entry
|
|
225
|
-
// carries no labels/members, so comparing against it would emit a
|
|
226
|
-
// one-time "changed" flood across every open card on upgrade.
|
|
227
|
-
const isUpdated = prev !== undefined &&
|
|
228
|
-
!prev.legacy &&
|
|
229
|
-
!isMoved &&
|
|
230
|
-
(prev.state.labels.join('\u0000') !== labels.join('\u0000') ||
|
|
231
|
-
prev.state.members.join('\u0000') !== assignees.join('\u0000'));
|
|
232
|
-
if (isNew || isMoved || isUpdated) {
|
|
233
|
-
let content = `${card.name} | ${list.name}`;
|
|
234
|
-
if (isMoved) {
|
|
235
|
-
content += ` (from: ${prev.state.list})`;
|
|
236
|
-
}
|
|
237
|
-
if (isUpdated && prev.state.labels.join('\u0000') !== labels.join('\u0000')) {
|
|
238
|
-
content += ` (labels: ${prev.state.labels.join(', ') || 'none'} -> ${labels.join(', ') || 'none'})`;
|
|
239
|
-
}
|
|
240
|
-
if (isUpdated && prev.state.members.join('\u0000') !== assignees.join('\u0000')) {
|
|
241
|
-
content += ` (assignees changed)`;
|
|
242
|
-
}
|
|
243
|
-
if (labels.length > 0) {
|
|
244
|
-
content += ` | labels: ${labels.join(', ')}`;
|
|
245
|
-
}
|
|
246
|
-
if (assignees.length > 0) {
|
|
247
|
-
content += ` | assignees: ${assignees.join(', ')}`;
|
|
248
|
-
}
|
|
249
|
-
items.push({
|
|
250
|
-
source: 'trello',
|
|
251
|
-
sourceId: `${boardId}:${card.id}:${activityTime}`,
|
|
252
|
-
sourceEntityId: `${boardId}:${card.id}`,
|
|
253
|
-
channel: channelName,
|
|
254
|
-
author: 'trello',
|
|
255
|
-
content,
|
|
256
|
-
// Source time is the provider version's stable timestamp. Host capture
|
|
257
|
-
// freshness is recorded separately as observation observedAt by the scheduler.
|
|
258
|
-
timestamp: new Date(activityTime),
|
|
259
|
-
type: 'kanban_card',
|
|
260
|
-
metadata: {
|
|
261
|
-
lastActivityAt: card.dateLastActivity,
|
|
262
|
-
boardId,
|
|
263
|
-
cardId: card.id,
|
|
264
|
-
listName: list.name,
|
|
265
|
-
// Omit when absent: the canonical raw-ref serializer rejects
|
|
266
|
-
// undefined values ("undefined is not serializable at $.prevListName").
|
|
267
|
-
...(prev !== undefined ? { prevListName: prev.state.list } : {}),
|
|
268
|
-
cardName: card.name,
|
|
269
|
-
members: card.idMembers,
|
|
270
|
-
memberNames: assignees,
|
|
271
|
-
labels,
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
// Update card state snapshot for this board
|
|
278
|
-
pendingCardStates.set(boardId, newCardState);
|
|
99
|
+
const actions = await api.boardActions(board.boardId, { fromMs: since.getTime() });
|
|
100
|
+
items.push(...actions.map((action) => (0, actions_js_1.trelloActionItem)(board, action)));
|
|
279
101
|
}
|
|
280
102
|
catch (err) {
|
|
281
|
-
|
|
282
|
-
this.lastError = `Board ${boardId}: ${(0, error_message_js_1.messageWithCauses)(err)}`;
|
|
103
|
+
failed += 1;
|
|
104
|
+
this.lastError = `Board ${board.boardId}: ${(0, error_message_js_1.messageWithCauses)(err)}`;
|
|
283
105
|
}
|
|
284
106
|
}
|
|
285
|
-
if (
|
|
286
|
-
|
|
287
|
-
this.pollCommitDeferred = false;
|
|
288
|
-
throw new Error(`Trello poll failed for ${failedBoards.size} of ${polledBoards} configured boards; last error: ${this.lastError}`);
|
|
289
|
-
}
|
|
290
|
-
this.pendingCardStates = pendingCardStates;
|
|
291
|
-
if (!this.pollCommitDeferred) {
|
|
292
|
-
this.commitPoll();
|
|
107
|
+
if (failed > 0) {
|
|
108
|
+
throw new Error(`Trello poll failed for ${failed} of ${boards.length} configured boards; last error: ${this.lastError}`);
|
|
293
109
|
}
|
|
294
110
|
this.lastPollTime = new Date();
|
|
295
111
|
this.lastPollCount = items.length;
|
|
296
112
|
this.lastError = undefined;
|
|
297
113
|
return items;
|
|
298
114
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
throw new Error('Trello poll state is unavailable to commit');
|
|
302
|
-
}
|
|
303
|
-
this.saveState(this.pendingCardStates);
|
|
304
|
-
this.lastCardStates = this.pendingCardStates;
|
|
305
|
-
this.pendingCardStates = null;
|
|
306
|
-
this.pollCommitDeferred = false;
|
|
115
|
+
boardKey(boardId) {
|
|
116
|
+
return this.boards().find((board) => board.boardId === boardId)?.key;
|
|
307
117
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
118
|
+
cardView(card, lists, members) {
|
|
119
|
+
return {
|
|
120
|
+
id: card.id,
|
|
121
|
+
name: card.name,
|
|
122
|
+
board: this.boardKey(card.idBoard ?? '') ?? card.idBoard ?? '',
|
|
123
|
+
list: card.list?.name ?? lists.get(card.idList) ?? null,
|
|
124
|
+
labels: (card.labels ?? []).map((label) => label.name ?? '').filter(Boolean),
|
|
125
|
+
members: (card.idMembers ?? []).map((id) => members.get(id) ?? id),
|
|
126
|
+
due: card.due,
|
|
127
|
+
dueComplete: card.dueComplete === true,
|
|
128
|
+
lastActivity: card.dateLastActivity,
|
|
129
|
+
url: card.shortUrl ?? null,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Each board's open lists with their open card counts. */
|
|
133
|
+
async readBoards(boards) {
|
|
134
|
+
const api = this.api();
|
|
135
|
+
const views = [];
|
|
136
|
+
for (const board of boards) {
|
|
137
|
+
const lists = await api.get(`/boards/${encodeURIComponent(board.boardId)}/lists`, { filter: 'open', fields: 'name', cards: 'open', card_fields: 'id' });
|
|
138
|
+
views.push({
|
|
139
|
+
board: board.key,
|
|
140
|
+
name: board.name ?? null,
|
|
141
|
+
lists: lists.map((list) => ({
|
|
142
|
+
id: list.id,
|
|
143
|
+
name: list.name,
|
|
144
|
+
openCards: list.cards?.length ?? 0,
|
|
145
|
+
})),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return views;
|
|
149
|
+
}
|
|
150
|
+
/** The open cards of a board, or of one of its lists, with list, label and member names. */
|
|
151
|
+
async readCards(board, listId) {
|
|
152
|
+
const api = this.api();
|
|
153
|
+
const boardPath = `/boards/${encodeURIComponent(board.boardId)}`;
|
|
154
|
+
const lists = await api.get(`${boardPath}/lists`, {
|
|
155
|
+
filter: 'open',
|
|
156
|
+
fields: 'name',
|
|
157
|
+
});
|
|
158
|
+
const listNames = new Map(lists.map((list) => [list.id, list.name]));
|
|
159
|
+
// A list id names its own board's cards, so it is read only when it is on the granted board.
|
|
160
|
+
if (listId !== undefined && !listNames.has(listId)) {
|
|
161
|
+
const error = new Error(`List ${listId} is not an open list of board ${board.key}; lists: ${lists
|
|
162
|
+
.map((list) => `${list.id} ${list.name}`)
|
|
163
|
+
.join(', ')}`);
|
|
164
|
+
error.name = 'invalid_input';
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
const members = await api.get(`${boardPath}/members`, { fields: 'fullName,username' });
|
|
168
|
+
const cards = await api.get(listId === undefined
|
|
169
|
+
? `${boardPath}/cards/open`
|
|
170
|
+
: `/lists/${encodeURIComponent(listId)}/cards`, { fields: CARD_FIELDS });
|
|
171
|
+
if (cards.length > 100) {
|
|
172
|
+
const counts = new Map();
|
|
173
|
+
for (const card of cards)
|
|
174
|
+
counts.set(card.idList, (counts.get(card.idList) ?? 0) + 1);
|
|
175
|
+
const error = new Error(`${cards.length} open cards; read one list: ${[...counts]
|
|
176
|
+
.map(([id, count]) => `${id} ${listNames.get(id) ?? '?'} (${count})`)
|
|
177
|
+
.join(', ')}`);
|
|
178
|
+
error.name = 'invalid_input';
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
const memberNames = new Map(members.map((member) => [member.id, member.fullName || member.username || member.id]));
|
|
182
|
+
return cards.map((card) => this.cardView({ ...card, idBoard: card.idBoard ?? board.boardId }, listNames, memberNames));
|
|
183
|
+
}
|
|
184
|
+
/** One card with its description, checklists and latest actions; label changes are named. */
|
|
185
|
+
async readCard(cardId) {
|
|
186
|
+
const api = this.api();
|
|
187
|
+
const card = await api.get(`/cards/${encodeURIComponent(cardId)}`, {
|
|
188
|
+
fields: `${CARD_FIELDS},desc,closed`,
|
|
189
|
+
list: 'true',
|
|
190
|
+
list_fields: 'name',
|
|
191
|
+
members: 'true',
|
|
192
|
+
member_fields: 'fullName,username',
|
|
193
|
+
checklists: 'all',
|
|
194
|
+
checklist_fields: 'name',
|
|
195
|
+
actions: 'all',
|
|
196
|
+
actions_limit: '20',
|
|
197
|
+
action_memberCreator_fields: 'fullName,username',
|
|
198
|
+
});
|
|
199
|
+
const boardId = card.idBoard ?? '';
|
|
200
|
+
const labels = await api.boardLabels(boardId);
|
|
201
|
+
const members = new Map((card.members ?? []).map((member) => [
|
|
202
|
+
member.id,
|
|
203
|
+
member.fullName || member.username || member.id,
|
|
204
|
+
]));
|
|
205
|
+
return {
|
|
206
|
+
...this.cardView(card, new Map(), members),
|
|
207
|
+
boardId,
|
|
208
|
+
description: card.desc ?? '',
|
|
209
|
+
closed: card.closed === true,
|
|
210
|
+
checklists: (card.checklists ?? []).map((checklist) => ({
|
|
211
|
+
name: checklist.name ?? '',
|
|
212
|
+
items: (checklist.checkItems ?? []).map((item) => ({
|
|
213
|
+
name: item.name ?? '',
|
|
214
|
+
state: item.state ?? '',
|
|
215
|
+
})),
|
|
216
|
+
})),
|
|
217
|
+
actions: (card.actions ?? []).map((action) => ({
|
|
218
|
+
id: action.id,
|
|
219
|
+
time: action.date,
|
|
220
|
+
line: (0, action_line_js_1.trelloActionLine)(action, labels),
|
|
221
|
+
})),
|
|
222
|
+
};
|
|
313
223
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
this.
|
|
224
|
+
/** Cards matching a query on the given boards (Trello search, at most 20 terms). */
|
|
225
|
+
async searchCards(query, boards, limit) {
|
|
226
|
+
const result = await this.api().get('/search', {
|
|
227
|
+
query,
|
|
228
|
+
modelTypes: 'cards',
|
|
229
|
+
idBoards: boards.map((board) => board.boardId).join(','),
|
|
230
|
+
cards_limit: String(limit),
|
|
231
|
+
card_fields: CARD_FIELDS,
|
|
232
|
+
card_list: 'true',
|
|
233
|
+
partial: 'true',
|
|
234
|
+
});
|
|
235
|
+
return (result.cards ?? []).map((card) => this.cardView(card, new Map(), new Map()));
|
|
317
236
|
}
|
|
318
237
|
}
|
|
319
238
|
exports.TrelloConnector = TrelloConnector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connectors/trello/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connectors/trello/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,8 @@ export interface DiscordGatewayOptions {
|
|
|
16
16
|
downloadsDir?: string;
|
|
17
17
|
filesRoot?: string;
|
|
18
18
|
log?: (line: string) => void;
|
|
19
|
+
/** What the owner is told when a turn on their message was cut off. */
|
|
20
|
+
interruptedNotice?: string;
|
|
19
21
|
}
|
|
20
22
|
/** Owner-only Discord transport. It accepts messages into the shared owner turn contract. */
|
|
21
23
|
export declare class DiscordGateway extends BaseGateway {
|
|
@@ -24,12 +26,14 @@ export declare class DiscordGateway extends BaseGateway {
|
|
|
24
26
|
private readonly client;
|
|
25
27
|
private readonly ledger;
|
|
26
28
|
private readonly log;
|
|
29
|
+
private readonly interruptedNotice;
|
|
27
30
|
private readonly activeInputs;
|
|
28
31
|
private readonly deliveryTails;
|
|
29
32
|
constructor(options: DiscordGatewayOptions);
|
|
30
33
|
start(): Promise<void>;
|
|
31
34
|
stop(): Promise<void>;
|
|
32
35
|
recentDeliveredMessageRefs(): string[];
|
|
36
|
+
answered(sourceRef: string): boolean;
|
|
33
37
|
recoverPendingResponses(): Promise<void>;
|
|
34
38
|
deliverResponse(sourceRef: string, response: string): Promise<void>;
|
|
35
39
|
sendMessage(channelId: string, text: string, idempotencyKey?: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/gateways/discord.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/gateways/discord.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAA8B,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAG9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,6FAA6F;AAC7F,qBAAa,cAAe,SAAQ,WAAW;IASjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,QAAQ,CAAC,MAAM,EAAG,SAAS,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;gBAErC,OAAO,EAAE,qBAAqB;IA4BrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,0BAA0B,IAAI,MAAM,EAAE;IAItC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAG9B,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCxC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC;YA0CrB,MAAM;YA+EN,UAAU;YAyBV,gBAAgB;IAiB9B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;CAGzB"}
|
package/dist/gateways/discord.js
CHANGED
|
@@ -18,12 +18,14 @@ class DiscordGateway extends base_gateway_js_1.BaseGateway {
|
|
|
18
18
|
client;
|
|
19
19
|
ledger;
|
|
20
20
|
log;
|
|
21
|
+
interruptedNotice;
|
|
21
22
|
activeInputs = new Set();
|
|
22
23
|
deliveryTails = new Map();
|
|
23
24
|
constructor(options) {
|
|
24
25
|
super({ intake: options.intake });
|
|
25
26
|
this.options = options;
|
|
26
27
|
this.log = options.log ?? console.log;
|
|
28
|
+
this.interruptedNotice = options.interruptedNotice ?? telegram_message_ledger_js_1.DEFAULT_INTERRUPTED_NOTICE;
|
|
27
29
|
this.ledger =
|
|
28
30
|
options.messageLedger ?? new telegram_message_ledger_js_1.OwnerMessageLedger(options.messageLedgerPath, { log: this.log });
|
|
29
31
|
this.client = new discord_js_1.Client({
|
|
@@ -67,6 +69,9 @@ class DiscordGateway extends base_gateway_js_1.BaseGateway {
|
|
|
67
69
|
recentDeliveredMessageRefs() {
|
|
68
70
|
return this.ledger.recentDeliveredMessageRefs();
|
|
69
71
|
}
|
|
72
|
+
answered(sourceRef) {
|
|
73
|
+
return this.ledger.get(sourceRef)?.state === 'delivered';
|
|
74
|
+
}
|
|
70
75
|
async recoverPendingResponses() {
|
|
71
76
|
for (const entry of this.ledger.listUndelivered()) {
|
|
72
77
|
try {
|
|
@@ -84,8 +89,8 @@ class DiscordGateway extends base_gateway_js_1.BaseGateway {
|
|
|
84
89
|
continue;
|
|
85
90
|
}
|
|
86
91
|
if (source && entry.state === 'processing' && !this.intake.isPending?.(entry.key)) {
|
|
87
|
-
this.ledger.markReady(entry.key,
|
|
88
|
-
await this.deliverResponse(entry.key,
|
|
92
|
+
this.ledger.markReady(entry.key, this.interruptedNotice);
|
|
93
|
+
await this.deliverResponse(entry.key, this.interruptedNotice);
|
|
89
94
|
}
|
|
90
95
|
else if (entry.state === 'ready' && entry.response !== undefined) {
|
|
91
96
|
if (source)
|
|
@@ -307,7 +312,6 @@ class DiscordGateway extends base_gateway_js_1.BaseGateway {
|
|
|
307
312
|
}
|
|
308
313
|
}
|
|
309
314
|
exports.DiscordGateway = DiscordGateway;
|
|
310
|
-
const INTERRUPTED_RESPONSE = 'The previous processing attempt was interrupted. It was not rerun because its external side effects could not be proven safe to repeat. Please send a new message if you want to retry it.';
|
|
311
315
|
function hash(kind, value) {
|
|
312
316
|
return (0, node_crypto_1.createHash)('sha256').update(`${kind}\0${value}`).digest('hex');
|
|
313
317
|
}
|