@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.
Files changed (145) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +1 -1
  3. package/dist/api/drive-actions.d.ts +12 -0
  4. package/dist/api/drive-actions.d.ts.map +1 -0
  5. package/dist/api/drive-actions.js +322 -0
  6. package/dist/api/drive-actions.js.map +1 -0
  7. package/dist/api/report-source-actions.d.ts.map +1 -1
  8. package/dist/api/report-source-actions.js +15 -7
  9. package/dist/api/report-source-actions.js.map +1 -1
  10. package/dist/api/security-events.d.ts +26 -0
  11. package/dist/api/security-events.d.ts.map +1 -1
  12. package/dist/api/security-events.js +107 -24
  13. package/dist/api/security-events.js.map +1 -1
  14. package/dist/api/source-actions.d.ts.map +1 -1
  15. package/dist/api/source-actions.js +7 -7
  16. package/dist/api/source-actions.js.map +1 -1
  17. package/dist/api/stored-source-reader.d.ts.map +1 -1
  18. package/dist/api/stored-source-reader.js +3 -0
  19. package/dist/api/stored-source-reader.js.map +1 -1
  20. package/dist/api/trello-actions.d.ts +15 -0
  21. package/dist/api/trello-actions.d.ts.map +1 -0
  22. package/dist/api/trello-actions.js +130 -0
  23. package/dist/api/trello-actions.js.map +1 -0
  24. package/dist/api/work-actions.d.ts +1 -0
  25. package/dist/api/work-actions.d.ts.map +1 -1
  26. package/dist/api/work-actions.js +20 -11
  27. package/dist/api/work-actions.js.map +1 -1
  28. package/dist/backfill/format.d.ts +105 -0
  29. package/dist/backfill/format.d.ts.map +1 -0
  30. package/dist/backfill/format.js +314 -0
  31. package/dist/backfill/format.js.map +1 -0
  32. package/dist/backfill/push.d.ts +63 -0
  33. package/dist/backfill/push.d.ts.map +1 -0
  34. package/dist/backfill/push.js +221 -0
  35. package/dist/backfill/push.js.map +1 -0
  36. package/dist/cli/commands/backfill.d.ts +12 -0
  37. package/dist/cli/commands/backfill.d.ts.map +1 -0
  38. package/dist/cli/commands/backfill.js +67 -0
  39. package/dist/cli/commands/backfill.js.map +1 -0
  40. package/dist/cli/commands/daemon.d.ts +2 -1
  41. package/dist/cli/commands/daemon.d.ts.map +1 -1
  42. package/dist/cli/commands/daemon.js +55 -14
  43. package/dist/cli/commands/daemon.js.map +1 -1
  44. package/dist/cli/commands/init.d.ts.map +1 -1
  45. package/dist/cli/commands/init.js +4 -2
  46. package/dist/cli/commands/init.js.map +1 -1
  47. package/dist/cli/index.js +18 -1
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/runtime/claude-caller-config.d.ts +6 -1
  50. package/dist/cli/runtime/claude-caller-config.d.ts.map +1 -1
  51. package/dist/cli/runtime/claude-caller-config.js +3 -1
  52. package/dist/cli/runtime/claude-caller-config.js.map +1 -1
  53. package/dist/connectors/framework/gws-utils.d.ts +6 -3
  54. package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
  55. package/dist/connectors/framework/gws-utils.js +35 -6
  56. package/dist/connectors/framework/gws-utils.js.map +1 -1
  57. package/dist/connectors/index.d.ts +0 -1
  58. package/dist/connectors/index.d.ts.map +1 -1
  59. package/dist/connectors/index.js +1 -5
  60. package/dist/connectors/index.js.map +1 -1
  61. package/dist/connectors/slack/index.d.ts +2 -0
  62. package/dist/connectors/slack/index.d.ts.map +1 -1
  63. package/dist/connectors/slack/index.js +83 -39
  64. package/dist/connectors/slack/index.js.map +1 -1
  65. package/dist/connectors/trello/action-line.d.ts +13 -0
  66. package/dist/connectors/trello/action-line.d.ts.map +1 -0
  67. package/dist/connectors/trello/action-line.js +118 -0
  68. package/dist/connectors/trello/action-line.js.map +1 -0
  69. package/dist/connectors/trello/actions.d.ts +27 -0
  70. package/dist/connectors/trello/actions.d.ts.map +1 -0
  71. package/dist/connectors/trello/actions.js +35 -0
  72. package/dist/connectors/trello/actions.js.map +1 -0
  73. package/dist/connectors/trello/api.d.ts +23 -0
  74. package/dist/connectors/trello/api.d.ts.map +1 -0
  75. package/dist/connectors/trello/api.js +102 -0
  76. package/dist/connectors/trello/api.js.map +1 -0
  77. package/dist/connectors/trello/index.d.ts +63 -31
  78. package/dist/connectors/trello/index.d.ts.map +1 -1
  79. package/dist/connectors/trello/index.js +165 -246
  80. package/dist/connectors/trello/index.js.map +1 -1
  81. package/dist/gateways/discord.d.ts +4 -0
  82. package/dist/gateways/discord.d.ts.map +1 -1
  83. package/dist/gateways/discord.js +7 -3
  84. package/dist/gateways/discord.js.map +1 -1
  85. package/dist/gateways/slack.d.ts +4 -0
  86. package/dist/gateways/slack.d.ts.map +1 -1
  87. package/dist/gateways/slack.js +7 -3
  88. package/dist/gateways/slack.js.map +1 -1
  89. package/dist/gateways/telegram-message-ledger.d.ts +5 -0
  90. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  91. package/dist/gateways/telegram-message-ledger.js +8 -1
  92. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  93. package/dist/gateways/telegram.d.ts +4 -0
  94. package/dist/gateways/telegram.d.ts.map +1 -1
  95. package/dist/gateways/telegram.js +7 -5
  96. package/dist/gateways/telegram.js.map +1 -1
  97. package/dist/replay/replay-source-catalog.d.ts.map +1 -1
  98. package/dist/replay/replay-source-catalog.js +5 -45
  99. package/dist/replay/replay-source-catalog.js.map +1 -1
  100. package/dist/replay/trello-import.d.ts +1 -8
  101. package/dist/replay/trello-import.d.ts.map +1 -1
  102. package/dist/replay/trello-import.js +16 -103
  103. package/dist/replay/trello-import.js.map +1 -1
  104. package/dist/runtime/action-surface.d.ts +4 -1
  105. package/dist/runtime/action-surface.d.ts.map +1 -1
  106. package/dist/runtime/action-surface.js +27 -1
  107. package/dist/runtime/action-surface.js.map +1 -1
  108. package/dist/runtime/config.d.ts +5 -0
  109. package/dist/runtime/config.d.ts.map +1 -1
  110. package/dist/runtime/config.js +10 -1
  111. package/dist/runtime/config.js.map +1 -1
  112. package/dist/runtime/connectors.d.ts +0 -1
  113. package/dist/runtime/connectors.d.ts.map +1 -1
  114. package/dist/runtime/connectors.js +0 -1
  115. package/dist/runtime/connectors.js.map +1 -1
  116. package/dist/runtime/egress-proxy.d.ts +15 -0
  117. package/dist/runtime/egress-proxy.d.ts.map +1 -0
  118. package/dist/runtime/egress-proxy.js +176 -0
  119. package/dist/runtime/egress-proxy.js.map +1 -0
  120. package/dist/runtime/native-session.d.ts +7 -0
  121. package/dist/runtime/native-session.d.ts.map +1 -1
  122. package/dist/runtime/native-session.js +8 -1
  123. package/dist/runtime/native-session.js.map +1 -1
  124. package/dist/runtime/outbound-attempts.d.ts +18 -0
  125. package/dist/runtime/outbound-attempts.d.ts.map +1 -0
  126. package/dist/runtime/outbound-attempts.js +98 -0
  127. package/dist/runtime/outbound-attempts.js.map +1 -0
  128. package/dist/runtime/owner-runtime.d.ts +9 -0
  129. package/dist/runtime/owner-runtime.d.ts.map +1 -1
  130. package/dist/runtime/owner-runtime.js +8 -0
  131. package/dist/runtime/owner-runtime.js.map +1 -1
  132. package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
  133. package/dist/runtime/owner-system-prompt.js +6 -1
  134. package/dist/runtime/owner-system-prompt.js.map +1 -1
  135. package/dist/runtime/record-orders.d.ts.map +1 -1
  136. package/dist/runtime/record-orders.js +33 -13
  137. package/dist/runtime/record-orders.js.map +1 -1
  138. package/dist/runtime/stimulus-delivery.d.ts +15 -0
  139. package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
  140. package/dist/runtime/stimulus-delivery.js +29 -2
  141. package/dist/runtime/stimulus-delivery.js.map +1 -1
  142. package/package.json +2 -2
  143. package/public/viewer/log-viewer.html +7 -3
  144. package/public/viewer/operator/operator.css +1 -1
  145. package/public/viewer/operator/operator.js +5428 -5685
@@ -1,84 +1,46 @@
1
1
  "use strict";
2
2
  /**
3
- * TrelloConnector — polls Trello boards via native fetch.
4
- * API key and token are separate values read from the daemon environment.
5
- * Emits kanban_card NormalizedItems for new/moved/updated cards.
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 STATE_V2_PREFIX = 'v2:';
20
- function encodeCardState(state) {
21
- return `${STATE_V2_PREFIX}${JSON.stringify([state.list, state.labels, state.members])}`;
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
- config;
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
- /** boardId → (cardId → encoded card state) */
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
- const stateFilePath = typeof options === 'string' ? options : options?.stateFilePath;
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
- loadState() {
62
- if ((0, fs_1.existsSync)(this.stateFilePath)) {
63
- try {
64
- const data = JSON.parse((0, fs_1.readFileSync)(this.stateFilePath, 'utf-8'));
65
- for (const [board, cards] of Object.entries(data.lastCardStates ?? {})) {
66
- this.lastCardStates.set(board, new Map(Object.entries(cards)));
67
- }
68
- }
69
- catch {
70
- /* ignore corrupt state */
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
- saveState(states = this.lastCardStates) {
75
- const dir = (0, path_1.dirname)(this.stateFilePath);
76
- (0, fs_1.mkdirSync)(dir, { recursive: true });
77
- const obj = {};
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.apiKey = apiKey;
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.apiKey = null;
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.token !== null && this.lastError === undefined,
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
- if (!this.apiKey || !this.token)
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 url = `${this.baseUrl}/members/me?key=${this.apiKey}&token=${this.token}`;
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
- async fetchWithTimeout(url) {
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
- if (!this.apiKey || !this.token)
166
- throw new Error('TrelloConnector not initialized');
93
+ const api = this.api();
94
+ const boards = this.boards();
167
95
  const items = [];
168
- const failedBoards = new Set();
169
- let polledBoards = 0;
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 url = `${this.baseUrl}/boards/${boardId}/lists` +
181
- `?cards=open&card_fields=name,idMembers,labels,dateLastActivity` +
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
- failedBoards.add(boardId);
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 (failedBoards.size > 0) {
286
- this.pendingCardStates = null;
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
- commitPoll() {
300
- if (this.pendingCardStates === null) {
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
- beginPollHandoff() {
309
- if (this.pollCommitDeferred || this.pendingCardStates !== null) {
310
- throw new Error('Trello poll handoff is already active');
311
- }
312
- this.pollCommitDeferred = true;
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
- abortPollHandoff() {
315
- this.pendingCardStates = null;
316
- this.pollCommitDeferred = false;
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,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,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;CAC9B;AAED,6FAA6F;AAC7F,qBAAa,cAAe,SAAQ,WAAW;IAQjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,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,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;gBAErC,OAAO,EAAE,qBAAqB;IA2BrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,0BAA0B,IAAI,MAAM,EAAE;IAGhC,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"}
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"}
@@ -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, INTERRUPTED_RESPONSE);
88
- await this.deliverResponse(entry.key, INTERRUPTED_RESPONSE);
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
  }