@wrongstack/tools 0.308.1 → 0.308.4
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/dist/builtin.js +13 -3
- package/dist/index.js +9 -3
- package/dist/pack.js +13 -3
- package/dist/plan.js +13 -3
- package/dist/session-kanban-sync.d.ts +4 -1
- package/dist/session-kanban.js +9 -3
- package/dist/task.js +13 -3
- package/dist/todo.js +13 -3
- package/dist/tool-tier.js +13 -3
- package/package.json +4 -4
package/dist/builtin.js
CHANGED
|
@@ -25422,7 +25422,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
25422
25422
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
25423
25423
|
void mailbox.send({
|
|
25424
25424
|
from: context.agentId,
|
|
25425
|
-
to:
|
|
25425
|
+
to: `@session:${sessionId}`,
|
|
25426
25426
|
type: "status",
|
|
25427
25427
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
25428
25428
|
body: JSON.stringify({
|
|
@@ -25451,13 +25451,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
25451
25451
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
25452
25452
|
}
|
|
25453
25453
|
}
|
|
25454
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
25454
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
25455
25455
|
const metaKanban = context.meta["kanban"];
|
|
25456
25456
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
25457
25457
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
25458
25458
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
25459
25459
|
return [...context.todos];
|
|
25460
25460
|
}
|
|
25461
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
25462
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
25463
|
+
return [...context.todos];
|
|
25464
|
+
}
|
|
25461
25465
|
const projectedTodos = orderTasksForTodos(
|
|
25462
25466
|
board,
|
|
25463
25467
|
board.tasks.filter(
|
|
@@ -25531,6 +25535,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
25531
25535
|
function sessionBoardTags(sessionId) {
|
|
25532
25536
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
25533
25537
|
}
|
|
25538
|
+
function sessionIdFromTags(tags) {
|
|
25539
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
25540
|
+
return tag?.slice("session:".length) || null;
|
|
25541
|
+
}
|
|
25534
25542
|
function sameColumns(columns) {
|
|
25535
25543
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
25536
25544
|
}
|
|
@@ -25718,7 +25726,9 @@ function mirrorSessionTasksToKanban(projectRoot, tasks, sessionId) {
|
|
|
25718
25726
|
);
|
|
25719
25727
|
}
|
|
25720
25728
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
25721
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
25729
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
25730
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
25731
|
+
});
|
|
25722
25732
|
}
|
|
25723
25733
|
|
|
25724
25734
|
// src/kanban-board-actions.ts
|
package/dist/index.js
CHANGED
|
@@ -25591,7 +25591,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
25591
25591
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
25592
25592
|
void mailbox.send({
|
|
25593
25593
|
from: context.agentId,
|
|
25594
|
-
to:
|
|
25594
|
+
to: `@session:${sessionId}`,
|
|
25595
25595
|
type: "status",
|
|
25596
25596
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
25597
25597
|
body: JSON.stringify({
|
|
@@ -25649,13 +25649,17 @@ function applySessionKanbanBoardToTodos(context, board, options) {
|
|
|
25649
25649
|
broadcastTodoUpdate(context, context.todos);
|
|
25650
25650
|
return [...context.todos];
|
|
25651
25651
|
}
|
|
25652
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
25652
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
25653
25653
|
const metaKanban = context.meta["kanban"];
|
|
25654
25654
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
25655
25655
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
25656
25656
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
25657
25657
|
return [...context.todos];
|
|
25658
25658
|
}
|
|
25659
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
25660
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
25661
|
+
return [...context.todos];
|
|
25662
|
+
}
|
|
25659
25663
|
const projectedTodos = orderTasksForTodos(
|
|
25660
25664
|
board,
|
|
25661
25665
|
board.tasks.filter(
|
|
@@ -26322,7 +26326,9 @@ function applySessionKanbanBoardToTodos2(context, board) {
|
|
|
26322
26326
|
});
|
|
26323
26327
|
}
|
|
26324
26328
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
26325
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
26329
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
26330
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
26331
|
+
});
|
|
26326
26332
|
}
|
|
26327
26333
|
function applySessionKanbanTaskToSource2(context, task, options = {}) {
|
|
26328
26334
|
return applySessionKanbanTaskToSource(context, task, suppressedTodoMirrors, options);
|
package/dist/pack.js
CHANGED
|
@@ -25422,7 +25422,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
25422
25422
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
25423
25423
|
void mailbox.send({
|
|
25424
25424
|
from: context.agentId,
|
|
25425
|
-
to:
|
|
25425
|
+
to: `@session:${sessionId}`,
|
|
25426
25426
|
type: "status",
|
|
25427
25427
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
25428
25428
|
body: JSON.stringify({
|
|
@@ -25451,13 +25451,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
25451
25451
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
25452
25452
|
}
|
|
25453
25453
|
}
|
|
25454
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
25454
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
25455
25455
|
const metaKanban = context.meta["kanban"];
|
|
25456
25456
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
25457
25457
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
25458
25458
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
25459
25459
|
return [...context.todos];
|
|
25460
25460
|
}
|
|
25461
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
25462
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
25463
|
+
return [...context.todos];
|
|
25464
|
+
}
|
|
25461
25465
|
const projectedTodos = orderTasksForTodos(
|
|
25462
25466
|
board,
|
|
25463
25467
|
board.tasks.filter(
|
|
@@ -25531,6 +25535,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
25531
25535
|
function sessionBoardTags(sessionId) {
|
|
25532
25536
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
25533
25537
|
}
|
|
25538
|
+
function sessionIdFromTags(tags) {
|
|
25539
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
25540
|
+
return tag?.slice("session:".length) || null;
|
|
25541
|
+
}
|
|
25534
25542
|
function sameColumns(columns) {
|
|
25535
25543
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
25536
25544
|
}
|
|
@@ -25718,7 +25726,9 @@ function mirrorSessionTasksToKanban(projectRoot, tasks, sessionId) {
|
|
|
25718
25726
|
);
|
|
25719
25727
|
}
|
|
25720
25728
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
25721
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
25729
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
25730
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
25731
|
+
});
|
|
25722
25732
|
}
|
|
25723
25733
|
|
|
25724
25734
|
// src/kanban-board-actions.ts
|
package/dist/plan.js
CHANGED
|
@@ -223,7 +223,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
223
223
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
224
224
|
void mailbox.send({
|
|
225
225
|
from: context.agentId,
|
|
226
|
-
to:
|
|
226
|
+
to: `@session:${sessionId}`,
|
|
227
227
|
type: "status",
|
|
228
228
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
229
229
|
body: JSON.stringify({
|
|
@@ -252,13 +252,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
252
252
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
255
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
256
256
|
const metaKanban = context.meta["kanban"];
|
|
257
257
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
258
258
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
259
259
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
260
260
|
return [...context.todos];
|
|
261
261
|
}
|
|
262
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
263
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
264
|
+
return [...context.todos];
|
|
265
|
+
}
|
|
262
266
|
const projectedTodos = orderTasksForTodos(
|
|
263
267
|
board,
|
|
264
268
|
board.tasks.filter(
|
|
@@ -332,6 +336,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
332
336
|
function sessionBoardTags(sessionId) {
|
|
333
337
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
334
338
|
}
|
|
339
|
+
function sessionIdFromTags(tags) {
|
|
340
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
341
|
+
return tag?.slice("session:".length) || null;
|
|
342
|
+
}
|
|
335
343
|
function sameColumns(columns) {
|
|
336
344
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
337
345
|
}
|
|
@@ -511,7 +519,9 @@ function mirrorSessionTodosToKanban(projectRoot, todos, sessionId) {
|
|
|
511
519
|
);
|
|
512
520
|
}
|
|
513
521
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
514
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
522
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
523
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
524
|
+
});
|
|
515
525
|
}
|
|
516
526
|
|
|
517
527
|
// src/todo.ts
|
|
@@ -24,7 +24,10 @@ export declare function applySessionKanbanBoardToTodos(context: Context, board:
|
|
|
24
24
|
hasInFlightTodoMirror: (projectRoot: string | undefined, sessionId: string) => boolean;
|
|
25
25
|
suppressedTodoMirrors: WeakSet<Context>;
|
|
26
26
|
}): TodoItem[];
|
|
27
|
-
export declare function applyManagedKanbanBoardToTodos(context: Context, board: KanbanBoard, suppressedTodoMirrors: WeakSet<Context
|
|
27
|
+
export declare function applyManagedKanbanBoardToTodos(context: Context, board: KanbanBoard, suppressedTodoMirrors: WeakSet<Context>, options?: {
|
|
28
|
+
/** Extracts the owning session id from board tags (`session:<id>`). */
|
|
29
|
+
sessionOwnerFromTags?: ((tags: readonly string[] | undefined) => string | null) | undefined;
|
|
30
|
+
}): TodoItem[];
|
|
28
31
|
export declare function applySessionKanbanTaskToSource(context: Context, task: KanbanTask, suppressedTodoMirrors: WeakSet<Context>, options?: {
|
|
29
32
|
remove?: boolean | undefined;
|
|
30
33
|
}): Promise<SessionKanbanSourceUpdate>;
|
package/dist/session-kanban.js
CHANGED
|
@@ -210,7 +210,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
210
210
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
211
211
|
void mailbox.send({
|
|
212
212
|
from: context.agentId,
|
|
213
|
-
to:
|
|
213
|
+
to: `@session:${sessionId}`,
|
|
214
214
|
type: "status",
|
|
215
215
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
216
216
|
body: JSON.stringify({
|
|
@@ -268,13 +268,17 @@ function applySessionKanbanBoardToTodos(context, board, options) {
|
|
|
268
268
|
broadcastTodoUpdate(context, context.todos);
|
|
269
269
|
return [...context.todos];
|
|
270
270
|
}
|
|
271
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
271
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
272
272
|
const metaKanban = context.meta["kanban"];
|
|
273
273
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
274
274
|
const activeBoardId = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
275
275
|
if (!activeBoardId || board.id !== activeBoardId || board.lifecycle?.mode !== "managed") {
|
|
276
276
|
return [...context.todos];
|
|
277
277
|
}
|
|
278
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
279
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
280
|
+
return [...context.todos];
|
|
281
|
+
}
|
|
278
282
|
const projectedTodos = orderTasksForTodos(
|
|
279
283
|
board,
|
|
280
284
|
board.tasks.filter(
|
|
@@ -955,7 +959,9 @@ function applySessionKanbanBoardToTodos2(context, board) {
|
|
|
955
959
|
});
|
|
956
960
|
}
|
|
957
961
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
958
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
962
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
963
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
964
|
+
});
|
|
959
965
|
}
|
|
960
966
|
function applySessionKanbanTaskToSource2(context, task, options = {}) {
|
|
961
967
|
return applySessionKanbanTaskToSource(context, task, suppressedTodoMirrors, options);
|
package/dist/task.js
CHANGED
|
@@ -183,7 +183,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
183
183
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
184
184
|
void mailbox.send({
|
|
185
185
|
from: context.agentId,
|
|
186
|
-
to:
|
|
186
|
+
to: `@session:${sessionId}`,
|
|
187
187
|
type: "status",
|
|
188
188
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
189
189
|
body: JSON.stringify({
|
|
@@ -212,13 +212,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
212
212
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
215
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
216
216
|
const metaKanban = context.meta["kanban"];
|
|
217
217
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
218
218
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
219
219
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
220
220
|
return [...context.todos];
|
|
221
221
|
}
|
|
222
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
223
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
224
|
+
return [...context.todos];
|
|
225
|
+
}
|
|
222
226
|
const projectedTodos = orderTasksForTodos(
|
|
223
227
|
board,
|
|
224
228
|
board.tasks.filter(
|
|
@@ -292,6 +296,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
292
296
|
function sessionBoardTags(sessionId) {
|
|
293
297
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
294
298
|
}
|
|
299
|
+
function sessionIdFromTags(tags) {
|
|
300
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
301
|
+
return tag?.slice("session:".length) || null;
|
|
302
|
+
}
|
|
295
303
|
function sameColumns(columns) {
|
|
296
304
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
297
305
|
}
|
|
@@ -471,7 +479,9 @@ function mirrorSessionTasksToKanban(projectRoot, tasks, sessionId) {
|
|
|
471
479
|
);
|
|
472
480
|
}
|
|
473
481
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
474
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
482
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
483
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
484
|
+
});
|
|
475
485
|
}
|
|
476
486
|
|
|
477
487
|
// src/todo.ts
|
package/dist/todo.js
CHANGED
|
@@ -332,7 +332,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
332
332
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
333
333
|
void mailbox.send({
|
|
334
334
|
from: context.agentId,
|
|
335
|
-
to:
|
|
335
|
+
to: `@session:${sessionId}`,
|
|
336
336
|
type: "status",
|
|
337
337
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
338
338
|
body: JSON.stringify({
|
|
@@ -361,13 +361,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
361
361
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
362
362
|
}
|
|
363
363
|
}
|
|
364
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
364
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
365
365
|
const metaKanban = context.meta["kanban"];
|
|
366
366
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
367
367
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
368
368
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
369
369
|
return [...context.todos];
|
|
370
370
|
}
|
|
371
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
372
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
373
|
+
return [...context.todos];
|
|
374
|
+
}
|
|
371
375
|
const projectedTodos = orderTasksForTodos(
|
|
372
376
|
board,
|
|
373
377
|
board.tasks.filter(
|
|
@@ -441,6 +445,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
441
445
|
function sessionBoardTags(sessionId) {
|
|
442
446
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
443
447
|
}
|
|
448
|
+
function sessionIdFromTags(tags) {
|
|
449
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
450
|
+
return tag?.slice("session:".length) || null;
|
|
451
|
+
}
|
|
444
452
|
function sameColumns(columns) {
|
|
445
453
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
446
454
|
}
|
|
@@ -612,7 +620,9 @@ function mirrorSessionTodosToKanban(projectRoot, todos, sessionId) {
|
|
|
612
620
|
);
|
|
613
621
|
}
|
|
614
622
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
615
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
623
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
624
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
625
|
+
});
|
|
616
626
|
}
|
|
617
627
|
|
|
618
628
|
// src/kanban-board-actions.ts
|
package/dist/tool-tier.js
CHANGED
|
@@ -25422,7 +25422,7 @@ function broadcastTodoUpdate(context, todos) {
|
|
|
25422
25422
|
const mailbox = getSharedProjectMailbox(projectDir);
|
|
25423
25423
|
void mailbox.send({
|
|
25424
25424
|
from: context.agentId,
|
|
25425
|
-
to:
|
|
25425
|
+
to: `@session:${sessionId}`,
|
|
25426
25426
|
type: "status",
|
|
25427
25427
|
subject: `Kanban todo list updated (${todos.length} item${todos.length === 1 ? "" : "s"})`,
|
|
25428
25428
|
body: JSON.stringify({
|
|
@@ -25451,13 +25451,17 @@ Reassess your current plan before continuing; do not rely on the initial todo sn
|
|
|
25451
25451
|
state.appendMessage({ role: "user", content: [{ type: "text", text }] });
|
|
25452
25452
|
}
|
|
25453
25453
|
}
|
|
25454
|
-
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2) {
|
|
25454
|
+
function applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors2, options = {}) {
|
|
25455
25455
|
const metaKanban = context.meta["kanban"];
|
|
25456
25456
|
const metaBoardId = metaKanban && typeof metaKanban === "object" ? metaKanban["boardId"] : void 0;
|
|
25457
25457
|
const activeBoardId2 = context.currentKanbanBoardId ?? (typeof metaBoardId === "string" ? metaBoardId : void 0);
|
|
25458
25458
|
if (!activeBoardId2 || board.id !== activeBoardId2 || board.lifecycle?.mode !== "managed") {
|
|
25459
25459
|
return [...context.todos];
|
|
25460
25460
|
}
|
|
25461
|
+
const ownerSessionId = options.sessionOwnerFromTags?.(board.tags);
|
|
25462
|
+
if (ownerSessionId && ownerSessionId !== (context.session?.id ?? "")) {
|
|
25463
|
+
return [...context.todos];
|
|
25464
|
+
}
|
|
25461
25465
|
const projectedTodos = orderTasksForTodos(
|
|
25462
25466
|
board,
|
|
25463
25467
|
board.tasks.filter(
|
|
@@ -25531,6 +25535,10 @@ function sessionBoardTitle(sessionId) {
|
|
|
25531
25535
|
function sessionBoardTags(sessionId) {
|
|
25532
25536
|
return ["session", SESSION_BOARD_TAG, sessionTag(sessionId)];
|
|
25533
25537
|
}
|
|
25538
|
+
function sessionIdFromTags(tags) {
|
|
25539
|
+
const tag = tags?.find((candidate) => candidate.startsWith("session:"));
|
|
25540
|
+
return tag?.slice("session:".length) || null;
|
|
25541
|
+
}
|
|
25534
25542
|
function sameColumns(columns) {
|
|
25535
25543
|
return columns.length === SESSION_KANBAN_COLUMNS.length && columns.every((column, index) => column.id === SESSION_KANBAN_COLUMNS[index]?.id);
|
|
25536
25544
|
}
|
|
@@ -25718,7 +25726,9 @@ function mirrorSessionTasksToKanban(projectRoot, tasks, sessionId) {
|
|
|
25718
25726
|
);
|
|
25719
25727
|
}
|
|
25720
25728
|
function applyManagedKanbanBoardToTodos2(context, board) {
|
|
25721
|
-
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors
|
|
25729
|
+
return applyManagedKanbanBoardToTodos(context, board, suppressedTodoMirrors, {
|
|
25730
|
+
sessionOwnerFromTags: sessionIdFromTags
|
|
25731
|
+
});
|
|
25722
25732
|
}
|
|
25723
25733
|
|
|
25724
25734
|
// src/kanban-board-actions.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/tools",
|
|
3
|
-
"version": "0.308.
|
|
3
|
+
"version": "0.308.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack built-in tools: read/write/edit, bash/exec, grep/glob, git, fetch, test, lint, and more.",
|
|
6
6
|
"repository": {
|
|
@@ -253,9 +253,9 @@
|
|
|
253
253
|
"turndown": "^7.2.4",
|
|
254
254
|
"undici": "^8.10.0",
|
|
255
255
|
"web-tree-sitter": "0.26.12",
|
|
256
|
-
"@wrongstack/
|
|
257
|
-
"@wrongstack/
|
|
258
|
-
"@wrongstack/kanban": "0.308.
|
|
256
|
+
"@wrongstack/persistence": "0.308.4",
|
|
257
|
+
"@wrongstack/core": "0.308.4",
|
|
258
|
+
"@wrongstack/kanban": "0.308.4"
|
|
259
259
|
},
|
|
260
260
|
"devDependencies": {
|
|
261
261
|
"@types/node": "^26.2.0",
|