trekoon 0.4.1 → 0.4.3
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/.agents/skills/trekoon/SKILL.md +97 -765
- package/.agents/skills/trekoon/reference/execution-with-team.md +91 -141
- package/.agents/skills/trekoon/reference/execution.md +188 -159
- package/.agents/skills/trekoon/reference/harness-primitives.md +77 -0
- package/.agents/skills/trekoon/reference/planning.md +213 -213
- package/.agents/skills/trekoon/reference/status-machine.md +21 -0
- package/.agents/skills/trekoon/reference/sync.md +82 -0
- package/README.md +29 -8
- package/docs/ai-agents.md +65 -6
- package/docs/commands.md +149 -5
- package/docs/machine-contracts.md +123 -0
- package/docs/quickstart.md +55 -3
- package/package.json +1 -1
- package/src/board/assets/app.js +47 -13
- package/src/board/assets/components/Component.js +20 -8
- package/src/board/assets/components/Workspace.js +9 -3
- package/src/board/assets/components/helpers.js +4 -0
- package/src/board/assets/runtime/delegation.js +8 -0
- package/src/board/assets/runtime/focus-trap.js +48 -0
- package/src/board/assets/state/actions.js +45 -4
- package/src/board/assets/state/api.js +304 -17
- package/src/board/assets/state/store.js +82 -11
- package/src/board/assets/state/url.js +10 -0
- package/src/board/assets/state/utils.js +2 -1
- package/src/board/event-bus.ts +81 -0
- package/src/board/routes.ts +430 -40
- package/src/board/server.ts +86 -10
- package/src/board/snapshot.ts +6 -0
- package/src/board/wal-watcher.ts +313 -0
- package/src/commands/board.ts +52 -17
- package/src/commands/epic.ts +7 -9
- package/src/commands/error-utils.ts +54 -1
- package/src/commands/help.ts +75 -10
- package/src/commands/migrate.ts +153 -24
- package/src/commands/quickstart.ts +7 -0
- package/src/commands/skills.ts +17 -5
- package/src/commands/subtask.ts +71 -10
- package/src/commands/suggest.ts +6 -13
- package/src/commands/task.ts +137 -88
- package/src/domain/batch-validation.ts +329 -0
- package/src/domain/cascade-planner.ts +412 -0
- package/src/domain/dependency-rules.ts +15 -0
- package/src/domain/mutation-service.ts +842 -187
- package/src/domain/search.ts +113 -0
- package/src/domain/tracker-domain.ts +167 -693
- package/src/domain/types.ts +56 -2
- package/src/export/render-markdown.ts +1 -2
- package/src/index.ts +37 -0
- package/src/runtime/cli-shell.ts +44 -0
- package/src/runtime/daemon.ts +700 -0
- package/src/storage/backup.ts +166 -0
- package/src/storage/database.ts +268 -4
- package/src/storage/migrations.ts +441 -22
- package/src/storage/path.ts +8 -0
- package/src/storage/schema.ts +5 -1
- package/src/sync/event-writes.ts +38 -11
- package/src/sync/git-context.ts +226 -8
- package/src/sync/service.ts +679 -156
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board event bus.
|
|
3
|
+
*
|
|
4
|
+
* Per-server-instance pub/sub used to broadcast snapshot deltas to SSE
|
|
5
|
+
* subscribers (browser tabs). Publishers (board route handlers, future WAL
|
|
6
|
+
* watcher) call publish; subscribers receive the JSON-serializable payload.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface BoardDeltaEvent {
|
|
10
|
+
readonly type: "snapshotDelta";
|
|
11
|
+
readonly id: number;
|
|
12
|
+
readonly snapshotDelta: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type BoardEvent = BoardDeltaEvent;
|
|
16
|
+
|
|
17
|
+
export type BoardEventListener = (event: BoardEvent) => void;
|
|
18
|
+
|
|
19
|
+
export interface BoardEventBus {
|
|
20
|
+
publishSnapshotDelta(snapshotDelta: Record<string, unknown>): BoardDeltaEvent;
|
|
21
|
+
markInProcessWrite(timestamp?: number): void;
|
|
22
|
+
subscribe(listener: BoardEventListener): () => void;
|
|
23
|
+
readonly lastInProcessWriteAt: number;
|
|
24
|
+
readonly subscriberCount: number;
|
|
25
|
+
close(): void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createBoardEventBus(): BoardEventBus {
|
|
29
|
+
const listeners = new Set<BoardEventListener>();
|
|
30
|
+
let nextId = 1;
|
|
31
|
+
let closed = false;
|
|
32
|
+
let lastInProcessWriteAt = 0;
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
publishSnapshotDelta(snapshotDelta: Record<string, unknown>): BoardDeltaEvent {
|
|
36
|
+
const event: BoardDeltaEvent = {
|
|
37
|
+
type: "snapshotDelta",
|
|
38
|
+
id: nextId++,
|
|
39
|
+
snapshotDelta,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
if (closed) {
|
|
43
|
+
return event;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Snapshot to allow listeners to unsubscribe during dispatch.
|
|
47
|
+
for (const listener of [...listeners]) {
|
|
48
|
+
try {
|
|
49
|
+
listener(event);
|
|
50
|
+
} catch {
|
|
51
|
+
// Listener errors must not block other subscribers.
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return event;
|
|
56
|
+
},
|
|
57
|
+
markInProcessWrite(timestamp = Date.now()): void {
|
|
58
|
+
lastInProcessWriteAt = timestamp;
|
|
59
|
+
},
|
|
60
|
+
subscribe(listener: BoardEventListener): () => void {
|
|
61
|
+
if (closed) {
|
|
62
|
+
return () => {};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
listeners.add(listener);
|
|
66
|
+
return () => {
|
|
67
|
+
listeners.delete(listener);
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
get subscriberCount(): number {
|
|
71
|
+
return listeners.size;
|
|
72
|
+
},
|
|
73
|
+
get lastInProcessWriteAt(): number {
|
|
74
|
+
return lastInProcessWriteAt;
|
|
75
|
+
},
|
|
76
|
+
close(): void {
|
|
77
|
+
closed = true;
|
|
78
|
+
listeners.clear();
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|