@jungjaehoon/mama-os 0.28.0 → 0.28.2

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 (32) hide show
  1. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  2. package/dist/agent/code-act/host-bridge.js +30 -2
  3. package/dist/agent/code-act/host-bridge.js.map +1 -1
  4. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  5. package/dist/agent/gateway-tool-executor.js +50 -7
  6. package/dist/agent/gateway-tool-executor.js.map +1 -1
  7. package/dist/agent/gateway-tools.md +3 -1
  8. package/dist/agent/tool-registry.d.ts.map +1 -1
  9. package/dist/agent/tool-registry.js +14 -2
  10. package/dist/agent/tool-registry.js.map +1 -1
  11. package/dist/agent/types.d.ts +1 -1
  12. package/dist/agent/types.d.ts.map +1 -1
  13. package/dist/agent/types.js.map +1 -1
  14. package/dist/cli/commands/start.d.ts.map +1 -1
  15. package/dist/cli/commands/start.js +2 -0
  16. package/dist/cli/commands/start.js.map +1 -1
  17. package/dist/cli/config/types.d.ts.map +1 -1
  18. package/dist/cli/config/types.js +2 -0
  19. package/dist/cli/config/types.js.map +1 -1
  20. package/dist/connectors/trello/index.d.ts +13 -2
  21. package/dist/connectors/trello/index.d.ts.map +1 -1
  22. package/dist/connectors/trello/index.js +104 -20
  23. package/dist/connectors/trello/index.js.map +1 -1
  24. package/dist/connectors/trello/query-tools.d.ts +65 -0
  25. package/dist/connectors/trello/query-tools.d.ts.map +1 -0
  26. package/dist/connectors/trello/query-tools.js +131 -0
  27. package/dist/connectors/trello/query-tools.js.map +1 -0
  28. package/dist/operator/console-brief.d.ts +14 -4
  29. package/dist/operator/console-brief.d.ts.map +1 -1
  30. package/dist/operator/console-brief.js +42 -14
  31. package/dist/operator/console-brief.js.map +1 -1
  32. package/package.json +1 -1
@@ -1,7 +1,14 @@
1
1
  /**
2
2
  * TrelloConnector — polls Trello boards via native fetch.
3
3
  * Auth token format: "apiKey:token" stored in config.auth.token or TRELLO_TOKEN env var.
4
- * Emits kanban_card NormalizedItems for moved/new cards.
4
+ * Emits kanban_card NormalizedItems for new/moved/updated cards.
5
+ *
6
+ * A card's operational state is more than its list: production boards track the
7
+ * assignee and the revision round (e.g. a "初稿" / "1回修正" label) on the card
8
+ * itself. The poller therefore ingests labels and resolved member names, and a
9
+ * label/member change on an unmoved card is a change worth emitting - owner
10
+ * question "who owns this and which revision round is it in" must be answerable
11
+ * from the raw store.
5
12
  */
6
13
  import type { AuthRequirement, ConnectorConfig, ConnectorHealth, IConnector, NormalizedItem } from '../framework/types.js';
7
14
  export declare class TrelloConnector implements IConnector {
@@ -14,7 +21,7 @@ export declare class TrelloConnector implements IConnector {
14
21
  private lastPollTime;
15
22
  private lastPollCount;
16
23
  private lastError;
17
- /** boardId → (cardId → listName) */
24
+ /** boardId → (cardId → encoded card state) */
18
25
  private lastCardStates;
19
26
  private readonly stateFilePath;
20
27
  constructor(config: ConnectorConfig);
@@ -25,6 +32,10 @@ export declare class TrelloConnector implements IConnector {
25
32
  healthCheck(): Promise<ConnectorHealth>;
26
33
  getAuthRequirements(): AuthRequirement[];
27
34
  authenticate(): Promise<boolean>;
35
+ private fetchWithTimeout;
36
+ /** id → display name for a board's members. Failure degrades to raw ids
37
+ * (name resolution is enrichment, never a reason to drop a poll). */
38
+ private fetchMemberNames;
28
39
  poll(_since: Date): Promise<NormalizedItem[]>;
29
40
  }
30
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connectors/trello/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACf,MAAM,uBAAuB,CAAC;AAe/B,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAE/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAiC;IAElD,oCAAoC;IACpC,OAAO,CAAC,cAAc,CAA+C;IAErE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM5B;gBAEU,MAAM,EAAE,eAAe;IAInC,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAUX,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAS7C,mBAAmB,IAAI,eAAe,EAAE;IAWlC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAWhC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAgGpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connectors/trello/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACf,MAAM,uBAAuB,CAAC;AA4D/B,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAE/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAiC;IAElD,8CAA8C;IAC9C,OAAO,CAAC,cAAc,CAA+C;IAErE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM5B;gBAEU,MAAM,EAAE,eAAe;IAInC,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAUX,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAS7C,mBAAmB,IAAI,eAAe,EAAE;IAWlC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAWxB,gBAAgB;IAU9B;0EACsE;YACxD,gBAAgB;IAkBxB,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CA8HpD"}
@@ -2,13 +2,39 @@
2
2
  /**
3
3
  * TrelloConnector — polls Trello boards via native fetch.
4
4
  * Auth token format: "apiKey:token" stored in config.auth.token or TRELLO_TOKEN env var.
5
- * Emits kanban_card NormalizedItems for moved/new cards.
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.
6
13
  */
7
14
  Object.defineProperty(exports, "__esModule", { value: true });
8
15
  exports.TrelloConnector = void 0;
9
16
  const fs_1 = require("fs");
10
17
  const path_1 = require("path");
11
18
  const os_1 = require("os");
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
+ }
12
38
  class TrelloConnector {
13
39
  name = 'trello';
14
40
  type = 'api';
@@ -19,7 +45,7 @@ class TrelloConnector {
19
45
  lastPollTime = null;
20
46
  lastPollCount = 0;
21
47
  lastError = undefined;
22
- /** boardId → (cardId → listName) */
48
+ /** boardId → (cardId → encoded card state) */
23
49
  lastCardStates = new Map();
24
50
  stateFilePath = (0, path_1.join)((0, os_1.homedir)(), '.mama', 'connectors', 'trello', 'trello-state.json');
25
51
  constructor(config) {
@@ -94,6 +120,36 @@ class TrelloConnector {
94
120
  return false;
95
121
  }
96
122
  }
123
+ async fetchWithTimeout(url) {
124
+ const controller = new AbortController();
125
+ const timeout = setTimeout(() => controller.abort(), 30_000);
126
+ try {
127
+ return await fetch(url, { signal: controller.signal });
128
+ }
129
+ finally {
130
+ clearTimeout(timeout);
131
+ }
132
+ }
133
+ /** id → display name for a board's members. Failure degrades to raw ids
134
+ * (name resolution is enrichment, never a reason to drop a poll). */
135
+ async fetchMemberNames(boardId) {
136
+ const names = new Map();
137
+ try {
138
+ const res = await this.fetchWithTimeout(`${this.baseUrl}/boards/${boardId}/members?fields=fullName,username&key=${this.apiKey}&token=${this.token}`);
139
+ if (!res.ok)
140
+ return names;
141
+ const members = (await res.json());
142
+ for (const m of members) {
143
+ const name = m.fullName || m.username;
144
+ if (name)
145
+ names.set(m.id, name);
146
+ }
147
+ }
148
+ catch {
149
+ /* degrade to ids */
150
+ }
151
+ return names;
152
+ }
97
153
  async poll(_since) {
98
154
  if (!this.apiKey || !this.token)
99
155
  throw new Error('TrelloConnector not initialized');
@@ -108,23 +164,18 @@ class TrelloConnector {
108
164
  const boardId = channelCfg.boardId;
109
165
  try {
110
166
  const url = `${this.baseUrl}/boards/${boardId}/lists` +
111
- `?cards=open&card_fields=name,idMembers,dateLastActivity` +
167
+ `?cards=open&card_fields=name,idMembers,labels,dateLastActivity` +
112
168
  `&key=${this.apiKey}&token=${this.token}`;
113
- const controller = new AbortController();
114
- const timeout = setTimeout(() => controller.abort(), 30_000);
115
- let res;
116
- try {
117
- res = await fetch(url, { signal: controller.signal });
118
- }
119
- finally {
120
- clearTimeout(timeout);
121
- }
169
+ const res = await this.fetchWithTimeout(url);
122
170
  if (!res.ok) {
123
171
  hadError = true;
124
172
  this.lastError = `Board ${boardId}: HTTP ${res.status}`;
125
173
  continue;
126
174
  }
127
175
  const lists = (await res.json());
176
+ // Lazy: boards whose open cards carry no members need no roster call.
177
+ const anyMembers = lists.some((l) => l.cards.some((c) => c.idMembers.length > 0));
178
+ const memberNames = anyMembers ? await this.fetchMemberNames(boardId) : new Map();
128
179
  // Get or init previous card states for this board
129
180
  if (!this.lastCardStates.has(boardId)) {
130
181
  this.lastCardStates.set(boardId, new Map());
@@ -133,14 +184,38 @@ class TrelloConnector {
133
184
  const newCardState = new Map();
134
185
  for (const list of lists) {
135
186
  for (const card of list.cards) {
136
- newCardState.set(card.id, list.name);
137
- const prevList = prevCardState.get(card.id);
138
- const isNew = prevList === undefined;
139
- const isMoved = prevList !== undefined && prevList !== list.name;
140
- if (isNew || isMoved) {
187
+ const labels = (card.labels ?? []).map((l) => l.name).filter(Boolean);
188
+ const assignees = card.idMembers.map((id) => memberNames.get(id) ?? id);
189
+ const current = { list: list.name, labels, members: assignees };
190
+ newCardState.set(card.id, encodeCardState(current));
191
+ const prevRaw = prevCardState.get(card.id);
192
+ const isNew = prevRaw === undefined;
193
+ const prev = prevRaw !== undefined ? decodeCardState(prevRaw) : undefined;
194
+ const isMoved = prev !== undefined && prev.state.list !== list.name;
195
+ // Label/assignee deltas only fire against v2 state: a legacy entry
196
+ // carries no labels/members, so comparing against it would emit a
197
+ // one-time "changed" flood across every open card on upgrade.
198
+ const isUpdated = prev !== undefined &&
199
+ !prev.legacy &&
200
+ !isMoved &&
201
+ (prev.state.labels.join('') !== labels.join('') ||
202
+ prev.state.members.join('') !== assignees.join(''));
203
+ if (isNew || isMoved || isUpdated) {
141
204
  let content = `${card.name} | ${list.name}`;
142
205
  if (isMoved) {
143
- content += ` (from: ${prevList})`;
206
+ content += ` (from: ${prev.state.list})`;
207
+ }
208
+ if (isUpdated && prev.state.labels.join('') !== labels.join('')) {
209
+ content += ` (labels: ${prev.state.labels.join(', ') || 'none'} -> ${labels.join(', ') || 'none'})`;
210
+ }
211
+ if (isUpdated && prev.state.members.join('') !== assignees.join('')) {
212
+ content += ` (assignees changed)`;
213
+ }
214
+ if (labels.length > 0) {
215
+ content += ` | labels: ${labels.join(', ')}`;
216
+ }
217
+ if (assignees.length > 0) {
218
+ content += ` | assignees: ${assignees.join(', ')}`;
144
219
  }
145
220
  items.push({
146
221
  source: 'trello',
@@ -148,17 +223,26 @@ class TrelloConnector {
148
223
  channel: channelName,
149
224
  author: 'trello',
150
225
  content,
151
- timestamp: new Date(card.dateLastActivity),
226
+ // First sight is an OBSERVATION, stamped now: on install (or a
227
+ // state reset) dateLastActivity can be years old, which parks
228
+ // the card's only enriched item below every since-window and
229
+ // makes it invisible to retrieval (live incident 2026-07-24).
230
+ // Moves/updates keep the card's own activity time - the change
231
+ // just happened, so it is both fresh and semantically exact.
232
+ timestamp: isNew ? new Date() : new Date(card.dateLastActivity),
152
233
  type: 'kanban_card',
153
234
  metadata: {
235
+ lastActivityAt: card.dateLastActivity,
154
236
  boardId,
155
237
  cardId: card.id,
156
238
  listName: list.name,
157
239
  // Omit when absent: the canonical raw-ref serializer rejects
158
240
  // undefined values ("undefined is not serializable at $.prevListName").
159
- ...(prevList !== undefined ? { prevListName: prevList } : {}),
241
+ ...(prev !== undefined ? { prevListName: prev.state.list } : {}),
160
242
  cardName: card.name,
161
243
  members: card.idMembers,
244
+ memberNames: assignees,
245
+ labels,
162
246
  },
163
247
  });
164
248
  }
@@ -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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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Trello live query tools — the READ answer path for current-state questions.
3
+ *
4
+ * Ported from Kagemusha's mechanism (trello_search / trello_card_detail):
5
+ * state questions are answered by reading the LIVE board at question time,
6
+ * never by projecting the connector change log. The 2026-07-24 incident chain
7
+ * (missing labels/assignees, first-sight timestamps burying enriched items,
8
+ * per-character card collapse) was one architecture mistake surfacing three
9
+ * ways: a log projection serving state queries. The connector log remains the
10
+ * delta/trigger source; these tools are the truth reads, the same pattern as
11
+ * kagemusha_* for the kagemusha DB.
12
+ *
13
+ * Read-only: no mutation endpoint is ever called. Card text is untrusted
14
+ * external data — tool descriptions instruct the model to treat it as data.
15
+ */
16
+ export interface TrelloQueryDeps {
17
+ /** Injected for tests; defaults to global fetch. */
18
+ fetchFn?: typeof fetch;
19
+ env?: NodeJS.ProcessEnv;
20
+ /** Injected for tests; defaults to ~/.mama/connectors.json. */
21
+ configPath?: string;
22
+ }
23
+ interface TrelloAuth {
24
+ apiKey: string;
25
+ token: string;
26
+ /** boardId → display name for enabled trello channels ('' = unscoped). */
27
+ boardNames: Map<string, string>;
28
+ }
29
+ /** Loud, no-fallback auth resolution via the connector contract:
30
+ * config.auth.token ?? env[tokenName ?? 'TRELLO_TOKEN'], "apiKey:token". */
31
+ export declare function resolveTrelloQueryAuth(deps?: TrelloQueryDeps): TrelloAuth;
32
+ export interface TrelloCardSummary {
33
+ cardId: string;
34
+ name: string;
35
+ board: string;
36
+ list: string;
37
+ labels: string[];
38
+ assignees: string[];
39
+ due: string | null;
40
+ lastActivity: string;
41
+ }
42
+ /**
43
+ * Search cards across the configured boards, LIVE. Returns current list,
44
+ * labels (revision round / artist), and assignee names per card.
45
+ */
46
+ export declare function searchTrelloCards(input: {
47
+ query: string;
48
+ limit?: number;
49
+ }, deps?: TrelloQueryDeps): Promise<TrelloCardSummary[]>;
50
+ export interface TrelloCardDetail extends TrelloCardSummary {
51
+ description: string;
52
+ checklists: Array<{
53
+ name: string;
54
+ items: Array<{
55
+ name: string;
56
+ complete: boolean;
57
+ }>;
58
+ }>;
59
+ }
60
+ /** Full card detail, LIVE: description head, members, labels, checklists. */
61
+ export declare function getTrelloCard(input: {
62
+ cardId: string;
63
+ }, deps?: TrelloQueryDeps): Promise<TrelloCardDetail>;
64
+ export {};
65
+ //# sourceMappingURL=query-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-tools.d.ts","sourceRoot":"","sources":["../../../src/connectors/trello/query-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;6EAC6E;AAC7E,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,eAAoB,GAAG,UAAU,CAqC7E;AAkCD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAgBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwB9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACxF;AAED,6EAA6E;AAC7E,wBAAsB,aAAa,CACjC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EACzB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAuC3B"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Trello live query tools — the READ answer path for current-state questions.
4
+ *
5
+ * Ported from Kagemusha's mechanism (trello_search / trello_card_detail):
6
+ * state questions are answered by reading the LIVE board at question time,
7
+ * never by projecting the connector change log. The 2026-07-24 incident chain
8
+ * (missing labels/assignees, first-sight timestamps burying enriched items,
9
+ * per-character card collapse) was one architecture mistake surfacing three
10
+ * ways: a log projection serving state queries. The connector log remains the
11
+ * delta/trigger source; these tools are the truth reads, the same pattern as
12
+ * kagemusha_* for the kagemusha DB.
13
+ *
14
+ * Read-only: no mutation endpoint is ever called. Card text is untrusted
15
+ * external data — tool descriptions instruct the model to treat it as data.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.resolveTrelloQueryAuth = resolveTrelloQueryAuth;
19
+ exports.searchTrelloCards = searchTrelloCards;
20
+ exports.getTrelloCard = getTrelloCard;
21
+ const config_loader_js_1 = require("../config-loader.js");
22
+ const BASE_URL = 'https://api.trello.com/1';
23
+ const FETCH_TIMEOUT_MS = 15_000;
24
+ /** Loud, no-fallback auth resolution via the connector contract:
25
+ * config.auth.token ?? env[tokenName ?? 'TRELLO_TOKEN'], "apiKey:token". */
26
+ function resolveTrelloQueryAuth(deps = {}) {
27
+ const env = deps.env ?? process.env;
28
+ const loaded = (0, config_loader_js_1.loadConnectorConfig)(deps.configPath);
29
+ if (!loaded.ok) {
30
+ throw new Error(`trello query tools: connector configuration unreadable (${loaded.error.code})`);
31
+ }
32
+ const trello = loaded.config['trello'];
33
+ if (!trello?.enabled) {
34
+ throw new Error('trello query tools: the trello connector is not enabled in connectors.json');
35
+ }
36
+ const rawToken = trello.auth?.token ?? env[trello.auth?.tokenName ?? 'TRELLO_TOKEN'];
37
+ if (!rawToken) {
38
+ throw new Error('trello query tools: no credentials (set the connector token, format "apiKey:token")');
39
+ }
40
+ const sep = rawToken.indexOf(':');
41
+ if (sep <= 0) {
42
+ throw new Error('trello query tools: credential format invalid, expected "apiKey:token"');
43
+ }
44
+ const boardNames = new Map();
45
+ for (const [key, ch] of Object.entries(trello.channels ?? {})) {
46
+ if (ch?.role !== 'ignore' && ch?.boardId)
47
+ boardNames.set(ch.boardId, ch.name ?? key);
48
+ }
49
+ return { apiKey: rawToken.slice(0, sep), token: rawToken.slice(sep + 1), boardNames };
50
+ }
51
+ async function trelloGet(path, params, auth, fetchFn) {
52
+ const search = new URLSearchParams({ ...params, key: auth.apiKey, token: auth.token });
53
+ const controller = new AbortController();
54
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
55
+ let res;
56
+ try {
57
+ res = await fetchFn(`${BASE_URL}${path}?${search.toString()}`, { signal: controller.signal });
58
+ }
59
+ finally {
60
+ clearTimeout(timeout);
61
+ }
62
+ if (!res.ok) {
63
+ throw new Error(`trello API ${path}: HTTP ${res.status}`);
64
+ }
65
+ return (await res.json());
66
+ }
67
+ function summarize(card, boardNames) {
68
+ return {
69
+ cardId: card.id,
70
+ name: card.name,
71
+ board: card.board?.name ?? (card.board?.id ? (boardNames.get(card.board.id) ?? card.board.id) : ''),
72
+ list: card.list?.name ?? '',
73
+ labels: (card.labels ?? []).map((l) => l.name).filter(Boolean),
74
+ assignees: (card.members ?? []).map((m) => m.fullName || m.username || '').filter(Boolean),
75
+ due: card.due,
76
+ lastActivity: card.dateLastActivity,
77
+ };
78
+ }
79
+ /**
80
+ * Search cards across the configured boards, LIVE. Returns current list,
81
+ * labels (revision round / artist), and assignee names per card.
82
+ */
83
+ async function searchTrelloCards(input, deps = {}) {
84
+ const query = (input.query ?? '').trim();
85
+ if (!query) {
86
+ throw new Error('trello_search requires a non-empty query');
87
+ }
88
+ const limit = Math.max(1, Math.min(20, Math.floor(input.limit ?? 10)));
89
+ const auth = resolveTrelloQueryAuth(deps);
90
+ const fetchFn = deps.fetchFn ?? fetch;
91
+ const result = await trelloGet('/search', {
92
+ query,
93
+ modelTypes: 'cards',
94
+ cards_limit: String(limit),
95
+ card_fields: 'name,due,dateLastActivity,labels',
96
+ card_list: 'true',
97
+ card_members: 'true',
98
+ card_board: 'true',
99
+ ...(auth.boardNames.size > 0 ? { idBoards: [...auth.boardNames.keys()].join(',') } : {}),
100
+ }, auth, fetchFn);
101
+ return (result.cards ?? []).map((card) => summarize(card, auth.boardNames));
102
+ }
103
+ /** Full card detail, LIVE: description head, members, labels, checklists. */
104
+ async function getTrelloCard(input, deps = {}) {
105
+ const cardId = (input.cardId ?? '').trim();
106
+ if (!cardId || !/^[A-Za-z0-9]+$/.test(cardId)) {
107
+ throw new Error('trello_card requires a cardId (from trello_search results)');
108
+ }
109
+ const auth = resolveTrelloQueryAuth(deps);
110
+ const fetchFn = deps.fetchFn ?? fetch;
111
+ const card = await trelloGet(`/cards/${cardId}`, {
112
+ fields: 'name,desc,due,dateLastActivity,labels',
113
+ members: 'true',
114
+ member_fields: 'fullName,username',
115
+ list: 'true',
116
+ board: 'true',
117
+ checklists: 'all',
118
+ checkItem_fields: 'name,state',
119
+ }, auth, fetchFn);
120
+ return {
121
+ ...summarize(card, auth.boardNames),
122
+ description: (card.desc ?? '').slice(0, 1000),
123
+ checklists: (card.checklists ?? []).slice(0, 10).map((cl) => ({
124
+ name: cl.name,
125
+ items: (cl.checkItems ?? [])
126
+ .slice(0, 30)
127
+ .map((it) => ({ name: it.name, complete: it.state === 'complete' })),
128
+ })),
129
+ };
130
+ }
131
+ //# sourceMappingURL=query-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-tools.js","sourceRoot":"","sources":["../../../src/connectors/trello/query-tools.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,24 @@
1
1
  /** Full-replace ceiling. Kagemusha's mature manual is ~24KB; leave headroom
2
2
  * while keeping a runaway self-edit from bloating every future prompt. */
3
3
  export declare const CONSOLE_BRIEF_MAX_CHARS = 32000;
4
- export declare const CONSOLE_BRIEF_DEFAULT = "# Owner Console Operating Brief\n\nThis file is YOURS. It is seeded once and never overwritten by upgrades.\nWhen the owner corrects how you work, or a procedure fails and you learn the\nfix, record the lesson here with console_brief_update - one durable line per\nlesson, dated. This is how your operating manual grows; losing a lesson means\nrepeating the failure.\n\n## Reporting philosophy\n\n- A report is analysis, not a listing. Cross-check at least two sources\n (board/tasks vs channel messages) before stating a situation.\n- Cite where each claim came from, with the source timestamp. An uncited\n claim is a guess.\n- Quote the key channel line when it drives a conclusion; name the room and\n sender exactly as the source shows them.\n- Lead with what changed and what needs the owner; keep the quiet parts to\n one line.\n\n## Procedure recipes (grow this section from experience)\n\n- Status questions: artifacts first (board_read, workorder_status,\n audit_findings_read), then live queries; memory recall last and cited.\n- Business data: progressive exploration - kagemusha_overview() then\n kagemusha_entities({activeOnly:true}) then kagemusha_tasks({...}) then\n kagemusha_messages({channelId, since}) on the busiest channels. Never\n widen a since window you were given.\n- Cross-channel synthesis: anchor items on their task id (relatedTaskId)\n so the same work seen in two rooms stays one item.\n\n## Situational awareness\n\n- Delta events name what changed since your last look; answer against the\n delta first, then the wider window.\n- After a context gap (compaction, restart), rebuild from storage - recall\n and artifacts - never from what you assume you remember.\n\n## Self-update rule\n\n- When the owner corrects your working style, or a recipe above proves\n wrong, update this brief in the same turn and say you did. Keep edits\n small and dated; never delete the owner's own edits.\n";
4
+ export declare const CONSOLE_BRIEF_DEFAULT = "# Owner Console Operating Brief\n\nThis file is YOURS. It is seeded once and never overwritten by upgrades.\nWhen the owner corrects how you work, or a procedure fails and you learn the\nfix, record it with console_brief_update({lesson}) - one durable lesson per\ncall, appended below with today's date while everything above is preserved.\nThis is how your operating manual grows; losing a lesson means repeating the\nfailure.\n\n## Reporting philosophy\n\n- A report is analysis, not a listing. Cross-check at least two sources\n (board/tasks vs channel messages) before stating a situation.\n- Cite where each claim came from, with the source timestamp. An uncited\n claim is a guess.\n- Quote the key channel line when it drives a conclusion; name the room and\n sender exactly as the source shows them.\n- Lead with what changed and what needs the owner; keep the quiet parts to\n one line.\n\n## Procedure recipes (grow this section from experience)\n\n- Status questions: artifacts first (board_read, workorder_status,\n audit_findings_read), then live queries; memory recall last and cited.\n- Business data: progressive exploration - kagemusha_overview() then\n kagemusha_entities({activeOnly:true}) then kagemusha_tasks({...}) then\n kagemusha_messages({channelId, since}) on the busiest channels. Never\n widen a since window you were given.\n- Cross-channel synthesis: anchor items on their task id (relatedTaskId)\n so the same work seen in two rooms stays one item.\n\n## Situational awareness\n\n- Delta events name what changed since your last look; answer against the\n delta first, then the wider window.\n- After a context gap (compaction, restart), rebuild from storage - recall\n and artifacts - never from what you assume you remember.\n\n## Self-update rule\n\n- When the owner corrects your working style, or a recipe above proves\n wrong, call console_brief_update({lesson}) in the same turn and say you\n did. One concrete lesson per call; the file itself is curated by the\n owner - you only ever add.\n\n## Lessons\n";
5
5
  export declare function consoleBriefPath(homeDir?: string): string;
6
6
  /** Boot seeding - write the packaged default ONLY when missing (agent/user
7
7
  * edits always win; deliberate no-auto-upgrade, mirroring ensureBriefs). */
8
8
  export declare function ensureConsoleBrief(homeDir?: string): boolean;
9
9
  /** Read the current brief; empty string when absent (caller seeds on boot). */
10
10
  export declare function loadConsoleBrief(homeDir?: string): string;
11
- /** Full-replace write for the agent's self-update tool. Loud validation, no
12
- * fallback: an empty or oversized brief is refused, never truncated. */
13
- export declare function updateConsoleBrief(content: string, homeDir?: string): void;
11
+ /**
12
+ * Append one dated lesson for the agent's self-update tool. APPEND, never
13
+ * replace: on the loop's first live fire (2026-07-24) the model answered a
14
+ * full-replace contract with just its new lesson, wiping the seeded manual
15
+ * including the self-update rule itself. Accretion is the mechanism Kagemusha
16
+ * actually validated - the agent only ever adds; reorganizing the file is the
17
+ * owner's (or an owner-directed session's) manual edit.
18
+ *
19
+ * Loud validation, no fallback: an empty lesson is refused, and a brief that
20
+ * would exceed the ceiling is refused (the manual needs owner curation),
21
+ * never truncated.
22
+ */
23
+ export declare function appendConsoleBriefLesson(lesson: string, homeDir?: string): string;
14
24
  //# sourceMappingURL=console-brief.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-brief.d.ts","sourceRoot":"","sources":["../../src/operator/console-brief.ts"],"names":[],"mappings":"AAqBA;2EAC2E;AAC3E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,eAAO,MAAM,qBAAqB,o5DA0CjC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,MAAM,CAEpE;AAED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAkB,GAAG,OAAO,CAQvE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,MAAM,CAIpE;AAED;yEACyE;AACzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,IAAI,CAcrF"}
1
+ {"version":3,"file":"console-brief.d.ts","sourceRoot":"","sources":["../../src/operator/console-brief.ts"],"names":[],"mappings":"AAqBA;2EAC2E;AAC3E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,eAAO,MAAM,qBAAqB,+gEA8CjC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,MAAM,CAEpE;AAED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAkB,GAAG,OAAO,CAQvE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAkB,GAAG,MAAM,CAIpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,MAAM,CA4B5F"}
@@ -4,7 +4,7 @@ exports.CONSOLE_BRIEF_DEFAULT = exports.CONSOLE_BRIEF_MAX_CHARS = void 0;
4
4
  exports.consoleBriefPath = consoleBriefPath;
5
5
  exports.ensureConsoleBrief = ensureConsoleBrief;
6
6
  exports.loadConsoleBrief = loadConsoleBrief;
7
- exports.updateConsoleBrief = updateConsoleBrief;
7
+ exports.appendConsoleBriefLesson = appendConsoleBriefLesson;
8
8
  /**
9
9
  * Owner-console operating brief - the agent-owned operations manual.
10
10
  *
@@ -32,9 +32,10 @@ exports.CONSOLE_BRIEF_DEFAULT = `# Owner Console Operating Brief
32
32
 
33
33
  This file is YOURS. It is seeded once and never overwritten by upgrades.
34
34
  When the owner corrects how you work, or a procedure fails and you learn the
35
- fix, record the lesson here with console_brief_update - one durable line per
36
- lesson, dated. This is how your operating manual grows; losing a lesson means
37
- repeating the failure.
35
+ fix, record it with console_brief_update({lesson}) - one durable lesson per
36
+ call, appended below with today's date while everything above is preserved.
37
+ This is how your operating manual grows; losing a lesson means repeating the
38
+ failure.
38
39
 
39
40
  ## Reporting philosophy
40
41
 
@@ -68,8 +69,11 @@ repeating the failure.
68
69
  ## Self-update rule
69
70
 
70
71
  - When the owner corrects your working style, or a recipe above proves
71
- wrong, update this brief in the same turn and say you did. Keep edits
72
- small and dated; never delete the owner's own edits.
72
+ wrong, call console_brief_update({lesson}) in the same turn and say you
73
+ did. One concrete lesson per call; the file itself is curated by the
74
+ owner - you only ever add.
75
+
76
+ ## Lessons
73
77
  `;
74
78
  function consoleBriefPath(homeDir = (0, node_os_1.homedir)()) {
75
79
  return (0, node_path_1.join)(homeDir, '.mama', 'briefs', 'brief-owner-console.md');
@@ -93,19 +97,43 @@ function loadConsoleBrief(homeDir = (0, node_os_1.homedir)()) {
93
97
  return '';
94
98
  return (0, node_fs_1.readFileSync)(path, 'utf-8');
95
99
  }
96
- /** Full-replace write for the agent's self-update tool. Loud validation, no
97
- * fallback: an empty or oversized brief is refused, never truncated. */
98
- function updateConsoleBrief(content, homeDir = (0, node_os_1.homedir)()) {
99
- if (!content.trim()) {
100
- throw new Error('console brief update refused: empty content');
100
+ /**
101
+ * Append one dated lesson for the agent's self-update tool. APPEND, never
102
+ * replace: on the loop's first live fire (2026-07-24) the model answered a
103
+ * full-replace contract with just its new lesson, wiping the seeded manual
104
+ * including the self-update rule itself. Accretion is the mechanism Kagemusha
105
+ * actually validated - the agent only ever adds; reorganizing the file is the
106
+ * owner's (or an owner-directed session's) manual edit.
107
+ *
108
+ * Loud validation, no fallback: an empty lesson is refused, and a brief that
109
+ * would exceed the ceiling is refused (the manual needs owner curation),
110
+ * never truncated.
111
+ */
112
+ function appendConsoleBriefLesson(lesson, homeDir = (0, node_os_1.homedir)()) {
113
+ const trimmed = lesson.trim();
114
+ if (!trimmed) {
115
+ throw new Error('console brief update refused: empty lesson');
116
+ }
117
+ // A brief absent at call time (deleted, first run) is re-seeded so the
118
+ // lesson lands inside the full manual, not alone in an empty file.
119
+ let existing = loadConsoleBrief(homeDir);
120
+ if (!existing.trim()) {
121
+ ensureConsoleBrief(homeDir);
122
+ existing = loadConsoleBrief(homeDir);
101
123
  }
102
- if (content.length > exports.CONSOLE_BRIEF_MAX_CHARS) {
103
- throw new Error(`console brief update refused: ${content.length} chars exceeds ${exports.CONSOLE_BRIEF_MAX_CHARS}`);
124
+ const date = new Date().toISOString().slice(0, 10);
125
+ const entry = `- ${date}: ${trimmed.replace(/\s*\n\s*/g, ' ')}`;
126
+ const base = existing.replace(/\s+$/, '');
127
+ const next = `${base}\n${base.includes('\n## Lessons') ? '' : '\n## Lessons\n'}${entry}\n`;
128
+ if (next.length > exports.CONSOLE_BRIEF_MAX_CHARS) {
129
+ throw new Error(`console brief update refused: ${next.length} chars exceeds ${exports.CONSOLE_BRIEF_MAX_CHARS} - ` +
130
+ 'ask the owner to curate the brief before recording more lessons');
104
131
  }
105
132
  const path = consoleBriefPath(homeDir);
106
133
  (0, node_fs_1.mkdirSync)((0, node_path_1.join)(homeDir, '.mama', 'briefs'), { recursive: true });
107
134
  const tmpPath = `${path}.tmp`;
108
- (0, node_fs_1.writeFileSync)(tmpPath, content, 'utf-8');
135
+ (0, node_fs_1.writeFileSync)(tmpPath, next, 'utf-8');
109
136
  (0, node_fs_1.renameSync)(tmpPath, path);
137
+ return next;
110
138
  }
111
139
  //# sourceMappingURL=console-brief.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-brief.js","sourceRoot":"","sources":["../../src/operator/console-brief.ts"],"names":[],"mappings":";;;AAqEA,4CAEC;AAID,gDAQC;AAGD,4CAIC;AAID,gDAcC;AA5GD;;;;;;;;;;;;;;;;GAgBG;AACH,qCAAyF;AACzF,qCAAkC;AAClC,yCAAiC;AAEjC;2EAC2E;AAC9D,QAAA,uBAAuB,GAAG,MAAM,CAAC;AAEjC,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CpC,CAAC;AAEF,SAAgB,gBAAgB,CAAC,UAAkB,IAAA,iBAAO,GAAE;IAC1D,OAAO,IAAA,gBAAI,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACpE,CAAC;AAED;6EAC6E;AAC7E,SAAgB,kBAAkB,CAAC,UAAkB,IAAA,iBAAO,GAAE;IAC5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAA,mBAAS,EAAC,IAAA,gBAAI,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC;IAC9B,IAAA,uBAAa,EAAC,OAAO,EAAE,6BAAqB,EAAE,OAAO,CAAC,CAAC;IACvD,IAAA,oBAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,SAAgB,gBAAgB,CAAC,UAAkB,IAAA,iBAAO,GAAE;IAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,IAAA,sBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;yEACyE;AACzE,SAAgB,kBAAkB,CAAC,OAAe,EAAE,UAAkB,IAAA,iBAAO,GAAE;IAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,+BAAuB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,CAAC,MAAM,kBAAkB,+BAAuB,EAAE,CAC3F,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,IAAA,mBAAS,EAAC,IAAA,gBAAI,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC;IAC9B,IAAA,uBAAa,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,IAAA,oBAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"console-brief.js","sourceRoot":"","sources":["../../src/operator/console-brief.ts"],"names":[],"mappings":"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"}