@a5c-ai/adapters-gateway 5.1.1-staging.00ceebd28cf2

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 (202) hide show
  1. package/README.md +20 -0
  2. package/dist/auth/bootstrap.d.ts +89 -0
  3. package/dist/auth/bootstrap.d.ts.map +1 -0
  4. package/dist/auth/bootstrap.js +222 -0
  5. package/dist/auth/bootstrap.js.map +1 -0
  6. package/dist/auth/hashing.d.ts +4 -0
  7. package/dist/auth/hashing.d.ts.map +1 -0
  8. package/dist/auth/hashing.js +27 -0
  9. package/dist/auth/hashing.js.map +1 -0
  10. package/dist/auth/middleware.d.ts +3 -0
  11. package/dist/auth/middleware.d.ts.map +1 -0
  12. package/dist/auth/middleware.js +17 -0
  13. package/dist/auth/middleware.js.map +1 -0
  14. package/dist/auth/tokens.d.ts +45 -0
  15. package/dist/auth/tokens.d.ts.map +1 -0
  16. package/dist/auth/tokens.js +186 -0
  17. package/dist/auth/tokens.js.map +1 -0
  18. package/dist/builtin-adapters.d.ts +17 -0
  19. package/dist/builtin-adapters.d.ts.map +1 -0
  20. package/dist/builtin-adapters.js +119 -0
  21. package/dist/builtin-adapters.js.map +1 -0
  22. package/dist/config.d.ts +37 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +97 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/fanout/client-conn.d.ts +20 -0
  27. package/dist/fanout/client-conn.d.ts.map +1 -0
  28. package/dist/fanout/client-conn.js +53 -0
  29. package/dist/fanout/client-conn.js.map +1 -0
  30. package/dist/fanout/subscriber.d.ts +12 -0
  31. package/dist/fanout/subscriber.d.ts.map +1 -0
  32. package/dist/fanout/subscriber.js +40 -0
  33. package/dist/fanout/subscriber.js.map +1 -0
  34. package/dist/index.d.ts +30 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +52 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/kanban/lib/config-loader.d.ts +29 -0
  39. package/dist/kanban/lib/config-loader.d.ts.map +1 -0
  40. package/dist/kanban/lib/config-loader.js +166 -0
  41. package/dist/kanban/lib/config-loader.js.map +1 -0
  42. package/dist/kanban/lib/config.d.ts +3 -0
  43. package/dist/kanban/lib/config.d.ts.map +1 -0
  44. package/dist/kanban/lib/config.js +6 -0
  45. package/dist/kanban/lib/config.js.map +1 -0
  46. package/dist/kanban/lib/create-global-registry.d.ts +28 -0
  47. package/dist/kanban/lib/create-global-registry.d.ts.map +1 -0
  48. package/dist/kanban/lib/create-global-registry.js +53 -0
  49. package/dist/kanban/lib/create-global-registry.js.map +1 -0
  50. package/dist/kanban/lib/dispatch-context-audit.d.ts +12 -0
  51. package/dist/kanban/lib/dispatch-context-audit.d.ts.map +1 -0
  52. package/dist/kanban/lib/dispatch-context-audit.js +44 -0
  53. package/dist/kanban/lib/dispatch-context-audit.js.map +1 -0
  54. package/dist/kanban/lib/error-handler.d.ts +28 -0
  55. package/dist/kanban/lib/error-handler.d.ts.map +1 -0
  56. package/dist/kanban/lib/error-handler.js +61 -0
  57. package/dist/kanban/lib/error-handler.js.map +1 -0
  58. package/dist/kanban/lib/global-registry.d.ts +49 -0
  59. package/dist/kanban/lib/global-registry.d.ts.map +1 -0
  60. package/dist/kanban/lib/global-registry.js +18 -0
  61. package/dist/kanban/lib/global-registry.js.map +1 -0
  62. package/dist/kanban/lib/parser.d.ts +36 -0
  63. package/dist/kanban/lib/parser.d.ts.map +1 -0
  64. package/dist/kanban/lib/parser.js +585 -0
  65. package/dist/kanban/lib/parser.js.map +1 -0
  66. package/dist/kanban/lib/path-resolver.d.ts +2 -0
  67. package/dist/kanban/lib/path-resolver.d.ts.map +1 -0
  68. package/dist/kanban/lib/path-resolver.js +16 -0
  69. package/dist/kanban/lib/path-resolver.js.map +1 -0
  70. package/dist/kanban/lib/review-service.d.ts +63 -0
  71. package/dist/kanban/lib/review-service.d.ts.map +1 -0
  72. package/dist/kanban/lib/review-service.js +571 -0
  73. package/dist/kanban/lib/review-service.js.map +1 -0
  74. package/dist/kanban/lib/run-cache.d.ts +36 -0
  75. package/dist/kanban/lib/run-cache.d.ts.map +1 -0
  76. package/dist/kanban/lib/run-cache.js +313 -0
  77. package/dist/kanban/lib/run-cache.js.map +1 -0
  78. package/dist/kanban/lib/server-init.d.ts +26 -0
  79. package/dist/kanban/lib/server-init.d.ts.map +1 -0
  80. package/dist/kanban/lib/server-init.js +179 -0
  81. package/dist/kanban/lib/server-init.js.map +1 -0
  82. package/dist/kanban/lib/services/automation-rule-service.d.ts +97 -0
  83. package/dist/kanban/lib/services/automation-rule-service.d.ts.map +1 -0
  84. package/dist/kanban/lib/services/automation-rule-service.js +806 -0
  85. package/dist/kanban/lib/services/automation-rule-service.js.map +1 -0
  86. package/dist/kanban/lib/services/automation-webhook-service.d.ts +44 -0
  87. package/dist/kanban/lib/services/automation-webhook-service.d.ts.map +1 -0
  88. package/dist/kanban/lib/services/automation-webhook-service.js +405 -0
  89. package/dist/kanban/lib/services/automation-webhook-service.js.map +1 -0
  90. package/dist/kanban/lib/services/backlog-query-service.d.ts +130 -0
  91. package/dist/kanban/lib/services/backlog-query-service.d.ts.map +1 -0
  92. package/dist/kanban/lib/services/backlog-query-service.js +1972 -0
  93. package/dist/kanban/lib/services/backlog-query-service.js.map +1 -0
  94. package/dist/kanban/lib/services/dispatch-context-label-service.d.ts +39 -0
  95. package/dist/kanban/lib/services/dispatch-context-label-service.d.ts.map +1 -0
  96. package/dist/kanban/lib/services/dispatch-context-label-service.js +160 -0
  97. package/dist/kanban/lib/services/dispatch-context-label-service.js.map +1 -0
  98. package/dist/kanban/lib/services/kanban-storage.d.ts +36 -0
  99. package/dist/kanban/lib/services/kanban-storage.d.ts.map +1 -0
  100. package/dist/kanban/lib/services/kanban-storage.js +26 -0
  101. package/dist/kanban/lib/services/kanban-storage.js.map +1 -0
  102. package/dist/kanban/lib/services/run-query-service.d.ts +79 -0
  103. package/dist/kanban/lib/services/run-query-service.d.ts.map +1 -0
  104. package/dist/kanban/lib/services/run-query-service.js +202 -0
  105. package/dist/kanban/lib/services/run-query-service.js.map +1 -0
  106. package/dist/kanban/lib/services/task-tag-service.d.ts +39 -0
  107. package/dist/kanban/lib/services/task-tag-service.d.ts.map +1 -0
  108. package/dist/kanban/lib/services/task-tag-service.js +145 -0
  109. package/dist/kanban/lib/services/task-tag-service.js.map +1 -0
  110. package/dist/kanban/lib/settings-section-storage.d.ts +13 -0
  111. package/dist/kanban/lib/settings-section-storage.d.ts.map +1 -0
  112. package/dist/kanban/lib/settings-section-storage.js +38 -0
  113. package/dist/kanban/lib/settings-section-storage.js.map +1 -0
  114. package/dist/kanban/lib/source-discovery.d.ts +10 -0
  115. package/dist/kanban/lib/source-discovery.d.ts.map +1 -0
  116. package/dist/kanban/lib/source-discovery.js +201 -0
  117. package/dist/kanban/lib/source-discovery.js.map +1 -0
  118. package/dist/kanban/lib/utils.d.ts +8 -0
  119. package/dist/kanban/lib/utils.d.ts.map +1 -0
  120. package/dist/kanban/lib/utils.js +116 -0
  121. package/dist/kanban/lib/utils.js.map +1 -0
  122. package/dist/kanban/lib/watcher.d.ts +14 -0
  123. package/dist/kanban/lib/watcher.d.ts.map +1 -0
  124. package/dist/kanban/lib/watcher.js +221 -0
  125. package/dist/kanban/lib/watcher.js.map +1 -0
  126. package/dist/kanban/lib/workspace-lifecycle.d.ts +68 -0
  127. package/dist/kanban/lib/workspace-lifecycle.d.ts.map +1 -0
  128. package/dist/kanban/lib/workspace-lifecycle.js +1085 -0
  129. package/dist/kanban/lib/workspace-lifecycle.js.map +1 -0
  130. package/dist/kanban/routes.d.ts +2 -0
  131. package/dist/kanban/routes.d.ts.map +1 -0
  132. package/dist/kanban/routes.js +1358 -0
  133. package/dist/kanban/routes.js.map +1 -0
  134. package/dist/kanban/types/breakpoint.d.ts +13 -0
  135. package/dist/kanban/types/breakpoint.d.ts.map +1 -0
  136. package/dist/kanban/types/breakpoint.js +3 -0
  137. package/dist/kanban/types/breakpoint.js.map +1 -0
  138. package/dist/kanban/types/index.d.ts +173 -0
  139. package/dist/kanban/types/index.d.ts.map +1 -0
  140. package/dist/kanban/types/index.js +3 -0
  141. package/dist/kanban/types/index.js.map +1 -0
  142. package/dist/logging.d.ts +7 -0
  143. package/dist/logging.d.ts.map +1 -0
  144. package/dist/logging.js +22 -0
  145. package/dist/logging.js.map +1 -0
  146. package/dist/notifications/types.d.ts +18 -0
  147. package/dist/notifications/types.d.ts.map +1 -0
  148. package/dist/notifications/types.js +2 -0
  149. package/dist/notifications/types.js.map +1 -0
  150. package/dist/notifications/webhook-out.d.ts +3 -0
  151. package/dist/notifications/webhook-out.d.ts.map +1 -0
  152. package/dist/notifications/webhook-out.js +55 -0
  153. package/dist/notifications/webhook-out.js.map +1 -0
  154. package/dist/pairing/short-code.d.ts +20 -0
  155. package/dist/pairing/short-code.d.ts.map +1 -0
  156. package/dist/pairing/short-code.js +50 -0
  157. package/dist/pairing/short-code.js.map +1 -0
  158. package/dist/protocol/errors.d.ts +10 -0
  159. package/dist/protocol/errors.d.ts.map +1 -0
  160. package/dist/protocol/errors.js +15 -0
  161. package/dist/protocol/errors.js.map +1 -0
  162. package/dist/protocol/frames.d.ts +107 -0
  163. package/dist/protocol/frames.d.ts.map +1 -0
  164. package/dist/protocol/frames.js +146 -0
  165. package/dist/protocol/frames.js.map +1 -0
  166. package/dist/protocol/v1.d.ts +111 -0
  167. package/dist/protocol/v1.d.ts.map +1 -0
  168. package/dist/protocol/v1.js +2 -0
  169. package/dist/protocol/v1.js.map +1 -0
  170. package/dist/runs/event-log-index.d.ts +29 -0
  171. package/dist/runs/event-log-index.d.ts.map +1 -0
  172. package/dist/runs/event-log-index.js +210 -0
  173. package/dist/runs/event-log-index.js.map +1 -0
  174. package/dist/runs/event-log.d.ts +25 -0
  175. package/dist/runs/event-log.d.ts.map +1 -0
  176. package/dist/runs/event-log.js +104 -0
  177. package/dist/runs/event-log.js.map +1 -0
  178. package/dist/runs/hook-broker.d.ts +18 -0
  179. package/dist/runs/hook-broker.d.ts.map +1 -0
  180. package/dist/runs/hook-broker.js +110 -0
  181. package/dist/runs/hook-broker.js.map +1 -0
  182. package/dist/runs/manager.d.ts +57 -0
  183. package/dist/runs/manager.d.ts.map +1 -0
  184. package/dist/runs/manager.js +753 -0
  185. package/dist/runs/manager.js.map +1 -0
  186. package/dist/runs/session-runtime.d.ts +8 -0
  187. package/dist/runs/session-runtime.d.ts.map +1 -0
  188. package/dist/runs/session-runtime.js +291 -0
  189. package/dist/runs/session-runtime.js.map +1 -0
  190. package/dist/runs/types.d.ts +55 -0
  191. package/dist/runs/types.d.ts.map +1 -0
  192. package/dist/runs/types.js +2 -0
  193. package/dist/runs/types.js.map +1 -0
  194. package/dist/server.d.ts +15 -0
  195. package/dist/server.d.ts.map +1 -0
  196. package/dist/server.js +702 -0
  197. package/dist/server.js.map +1 -0
  198. package/dist/static/webui-server.d.ts +2 -0
  199. package/dist/static/webui-server.d.ts.map +1 -0
  200. package/dist/static/webui-server.js +97 -0
  201. package/dist/static/webui-server.js.map +1 -0
  202. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-service.js","sourceRoot":"","sources":["../../../src/kanban/lib/review-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { WatchSource } from "./config-loader.js";
2
+ import type { RunDigest, Run, ProjectSummary } from "../types/index.js";
3
+ export interface CachedRunDigest extends RunDigest {
4
+ processId: string;
5
+ sourceLabel?: string;
6
+ projectName?: string;
7
+ }
8
+ export declare function getDigestCached(runDir: string, source: WatchSource, projectName: string): Promise<CachedRunDigest>;
9
+ export declare function getRunCached(runDir: string, source: WatchSource, projectName: string): Promise<Run>;
10
+ export declare function invalidateRun(runDir: string): void;
11
+ /**
12
+ * Force-invalidate all cached entries that have pending breakpoints.
13
+ *
14
+ * Design note: this intentionally checks only `pendingBreakpoints > 0` without
15
+ * also requiring `waitingKind === "breakpoint"`. The broader condition is safer
16
+ * because it ensures *any* entry that might represent a breakpoint — even one
17
+ * whose waitingKind was not yet set by the parser — is evicted and refetched.
18
+ * `getProjectSummaries()` applies the stricter `waitingKind === "breakpoint"`
19
+ * filter when *counting* breakpoints for display, so the worst case of a
20
+ * broader eviction here is an extra cache miss, not a false positive in the UI.
21
+ */
22
+ export declare function forceRefreshBreakpointRuns(): void;
23
+ export declare function invalidateAll(): void;
24
+ export declare function getProjectSummaries(): ProjectSummary[];
25
+ export declare function requestDiscovery(): void;
26
+ export declare function discoverAndCacheAll(): Promise<void>;
27
+ export declare function getAllCachedDigests(): CachedRunDigest[];
28
+ export declare function getCacheStats(): {
29
+ size: number;
30
+ entries: {
31
+ runDir: string;
32
+ status: import("../types/index.js").RunStatus;
33
+ cachedAt: number;
34
+ hasFullRun: boolean;
35
+ }[];
36
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-cache.d.ts","sourceRoot":"","sources":["../../../src/kanban/lib/run-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAaxE,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiFD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAmC1B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC,CAoDd;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAOjD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAgFtD;AAQD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDzD;AAID,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAOvD;AAGD,wBAAgB,aAAa;;;;;;;;EAW5B"}
@@ -0,0 +1,313 @@
1
+ import { getRunDigest, parseRunDir } from "./parser.js";
2
+ import { discoverAllRunDirs } from "./source-discovery.js";
3
+ import { promises as fs } from "fs";
4
+ import path from "path";
5
+ import { getGlobal } from "./global-registry.js";
6
+ /** Return true when err represents a "file/directory not found" filesystem error. */
7
+ function isNotFoundError(err) {
8
+ if (!(err instanceof Error))
9
+ return false;
10
+ const code = err.code;
11
+ return code === "ENOENT" || code === "ENOTDIR" || err.message.includes("ENOENT");
12
+ }
13
+ // Persist cache across HMR reloads via typed global registry
14
+ function getCache() {
15
+ return getGlobal('__kanban_run_cache__', () => new Map());
16
+ }
17
+ // Cache size limit to prevent unbounded memory growth
18
+ const MAX_CACHE_SIZE = 1000;
19
+ // TTL constants
20
+ const TTL_COMPLETED = 30000; // 30s for completed runs
21
+ const TTL_ACTIVE = 5000; // 5s for active runs (waiting/pending)
22
+ // Note: TTL_BREAKPOINT was removed in v0.12.3 — the aggressive 3s eviction
23
+ // in getProjectSummaries() caused breakpoint banner flickering during active
24
+ // orchestration (race condition with forceRefreshBreakpointRuns + discovery
25
+ // debounce). The normal TTL_ACTIVE (5s) is sufficient for timely updates.
26
+ function getTTL(status) {
27
+ return status === "waiting" || status === "pending" ? TTL_ACTIVE : TTL_COMPLETED;
28
+ }
29
+ function isCacheValid(entry) {
30
+ const now = Date.now();
31
+ const ttl = getTTL(entry.digest.status);
32
+ return now - entry.cachedAt < ttl;
33
+ }
34
+ // Evict oldest entries when cache exceeds MAX_CACHE_SIZE.
35
+ // Evicts expired entries first, then oldest by cachedAt if still over limit.
36
+ function evictIfNeeded() {
37
+ const cache = getCache();
38
+ if (cache.size <= MAX_CACHE_SIZE)
39
+ return;
40
+ // First pass: remove expired entries
41
+ const now = Date.now();
42
+ for (const [key, entry] of cache) {
43
+ if (now - entry.cachedAt >= getTTL(entry.digest.status)) {
44
+ cache.delete(key);
45
+ }
46
+ }
47
+ if (cache.size <= MAX_CACHE_SIZE)
48
+ return;
49
+ // Second pass: evict oldest entries until under limit
50
+ const entries = Array.from(cache.entries()).sort(([, a], [, b]) => a.cachedAt - b.cachedAt);
51
+ const toRemove = cache.size - MAX_CACHE_SIZE;
52
+ for (let i = 0; i < toRemove; i++) {
53
+ cache.delete(entries[i][0]);
54
+ }
55
+ }
56
+ // Read processId and optional projectName from run.json
57
+ async function getRunJsonMeta(runDir) {
58
+ try {
59
+ const runJsonPath = path.join(runDir, "run.json");
60
+ const content = await fs.readFile(runJsonPath, "utf-8");
61
+ const json = JSON.parse(content);
62
+ return {
63
+ processId: json.processId || "unknown",
64
+ projectName: json.projectName || undefined,
65
+ };
66
+ }
67
+ catch (err) {
68
+ // ENOENT is expected for runs that haven't written run.json yet; warn on corruption or permission errors
69
+ if (!isNotFoundError(err)) {
70
+ console.warn(`[run-cache] Failed to read run.json metadata from ${runDir}:`, err);
71
+ }
72
+ return { processId: "unknown" };
73
+ }
74
+ }
75
+ export async function getDigestCached(runDir, source, projectName) {
76
+ const cache = getCache();
77
+ const entry = cache.get(runDir);
78
+ // Return cached if valid
79
+ if (entry && isCacheValid(entry)) {
80
+ return entry.digest;
81
+ }
82
+ // Cache miss — fetch fresh digest
83
+ const digest = await getRunDigest(runDir);
84
+ const meta = await getRunJsonMeta(runDir);
85
+ // Prefer projectName from run.json over discovery-provided name
86
+ const effectiveProjectName = meta.projectName || projectName;
87
+ const cachedDigest = {
88
+ ...digest,
89
+ processId: meta.processId,
90
+ sourceLabel: source.label,
91
+ projectName: effectiveProjectName,
92
+ };
93
+ // Update cache
94
+ cache.set(runDir, {
95
+ digest: cachedDigest,
96
+ cachedAt: Date.now(),
97
+ runDir,
98
+ fullRun: entry?.fullRun, // Preserve full run if present
99
+ journalFileCount: entry?.journalFileCount, // Preserve for incremental parsing
100
+ });
101
+ evictIfNeeded();
102
+ return cachedDigest;
103
+ }
104
+ export async function getRunCached(runDir, source, projectName) {
105
+ const cache = getCache();
106
+ const entry = cache.get(runDir);
107
+ // Return cached full run if valid and present
108
+ if (entry && isCacheValid(entry) && entry.fullRun) {
109
+ return entry.fullRun;
110
+ }
111
+ // Build incremental options from previous cache entry (if available).
112
+ // This avoids re-parsing all journal files when only new events have
113
+ // been appended since the last read.
114
+ const incremental = entry?.fullRun && entry.journalFileCount !== undefined
115
+ ? {
116
+ previousEvents: entry.fullRun.events,
117
+ previousFileCount: entry.journalFileCount,
118
+ }
119
+ : undefined;
120
+ // Fetch full run (incrementally when possible)
121
+ const run = await parseRunDir(runDir, incremental);
122
+ // Extract the journal file count before stripping it from the Run object
123
+ const journalFileCount = run._journalFileCount;
124
+ // Read run.json meta for accurate projectName
125
+ const meta = await getRunJsonMeta(runDir);
126
+ const effectiveProjectName = meta.projectName || projectName;
127
+ // Enrich with metadata
128
+ const enrichedRun = {
129
+ ...run,
130
+ sourceLabel: source.label,
131
+ projectName: effectiveProjectName,
132
+ };
133
+ // Remove internal field from the exposed Run object
134
+ delete enrichedRun._journalFileCount;
135
+ // Update cache with full run
136
+ const digest = await getDigestCached(runDir, source, projectName);
137
+ cache.set(runDir, {
138
+ digest,
139
+ cachedAt: Date.now(),
140
+ runDir,
141
+ fullRun: enrichedRun,
142
+ journalFileCount,
143
+ });
144
+ evictIfNeeded();
145
+ return enrichedRun;
146
+ }
147
+ export function invalidateRun(runDir) {
148
+ getCache().delete(runDir);
149
+ }
150
+ /**
151
+ * Force-invalidate all cached entries that have pending breakpoints.
152
+ *
153
+ * Design note: this intentionally checks only `pendingBreakpoints > 0` without
154
+ * also requiring `waitingKind === "breakpoint"`. The broader condition is safer
155
+ * because it ensures *any* entry that might represent a breakpoint — even one
156
+ * whose waitingKind was not yet set by the parser — is evicted and refetched.
157
+ * `getProjectSummaries()` applies the stricter `waitingKind === "breakpoint"`
158
+ * filter when *counting* breakpoints for display, so the worst case of a
159
+ * broader eviction here is an extra cache miss, not a false positive in the UI.
160
+ */
161
+ export function forceRefreshBreakpointRuns() {
162
+ const cache = getCache();
163
+ for (const [runDir, entry] of cache) {
164
+ if (entry.digest.pendingBreakpoints && entry.digest.pendingBreakpoints > 0) {
165
+ cache.delete(runDir);
166
+ }
167
+ }
168
+ }
169
+ export function invalidateAll() {
170
+ getCache().clear();
171
+ lastDiscoveryTime = 0;
172
+ discoveryNeeded = true; // Force re-discovery on next request
173
+ }
174
+ export function getProjectSummaries() {
175
+ const cache = getCache();
176
+ // Build project summaries from cache entries.
177
+ // Breakpoint entries are only included when isCacheValid() passes (TTL_ACTIVE = 5s),
178
+ // which ensures stale breakpoint data is not displayed without destructively
179
+ // deleting cache entries (which caused flickering — see v0.12.3 fix).
180
+ const projectMap = new Map();
181
+ for (const entry of cache.values()) {
182
+ const projectName = entry.digest.projectName || "Unknown";
183
+ const existing = projectMap.get(projectName) || {
184
+ totalRuns: 0,
185
+ activeRuns: 0,
186
+ completedRuns: 0,
187
+ failedRuns: 0,
188
+ staleRuns: 0,
189
+ totalTasks: 0,
190
+ completedTasksAggregate: 0,
191
+ latestUpdate: "",
192
+ pendingBreakpoints: 0,
193
+ breakpointRuns: [],
194
+ };
195
+ existing.totalRuns++;
196
+ existing.totalTasks += entry.digest.taskCount || 0;
197
+ existing.completedTasksAggregate += entry.digest.completedTasks || 0;
198
+ if ((entry.digest.status === "waiting" || entry.digest.status === "pending") && !entry.digest.isStale) {
199
+ existing.activeRuns++;
200
+ }
201
+ else if (entry.digest.status === "completed") {
202
+ existing.completedRuns++;
203
+ }
204
+ else if (entry.digest.status === "failed") {
205
+ existing.failedRuns++;
206
+ }
207
+ if (entry.digest.isStale) {
208
+ existing.staleRuns++;
209
+ }
210
+ // Track pending breakpoints. Breakpoint state only changes when explicitly
211
+ // approved (which calls invalidateRun), so we always count cached breakpoints
212
+ // regardless of cache TTL — the TTL controls when to re-fetch data from disk,
213
+ // not whether the data is valid for display. Removing the isCacheValid check
214
+ // prevents breakpoint banner flickering when discovery is debounced. (v0.12.3)
215
+ if (entry.digest.pendingBreakpoints && entry.digest.pendingBreakpoints > 0 &&
216
+ entry.digest.waitingKind === "breakpoint") {
217
+ existing.pendingBreakpoints += entry.digest.pendingBreakpoints;
218
+ existing.breakpointRuns.push({
219
+ runId: entry.digest.runId,
220
+ effectId: entry.digest.breakpointEffectId || "",
221
+ projectName,
222
+ processId: entry.digest.processId || "unknown",
223
+ breakpointQuestion: entry.digest.breakpointQuestion || "Approval required",
224
+ });
225
+ }
226
+ // Track latest update
227
+ if (!existing.latestUpdate || entry.digest.updatedAt > existing.latestUpdate) {
228
+ existing.latestUpdate = entry.digest.updatedAt;
229
+ }
230
+ projectMap.set(projectName, existing);
231
+ }
232
+ return Array.from(projectMap.entries()).map(([projectName, stats]) => ({
233
+ projectName,
234
+ ...stats,
235
+ }));
236
+ }
237
+ // Debounce discovery to avoid scanning filesystem on every poll
238
+ let lastDiscoveryTime = 0;
239
+ const DISCOVERY_DEBOUNCE_MS = 10000; // 10s — reduced from 60s to ensure new runs appear quickly
240
+ let discoveryNeeded = true; // Flag set by watcher when new runs detected
241
+ // Signal that new runs may exist (called by watcher)
242
+ export function requestDiscovery() {
243
+ discoveryNeeded = true;
244
+ }
245
+ export async function discoverAndCacheAll() {
246
+ const cache = getCache();
247
+ const now = Date.now();
248
+ // If cache is populated and no new runs detected, skip expensive filesystem scan
249
+ if (cache.size > 0 && !discoveryNeeded && now - lastDiscoveryTime < DISCOVERY_DEBOUNCE_MS) {
250
+ return;
251
+ }
252
+ lastDiscoveryTime = now;
253
+ discoveryNeeded = false;
254
+ const discovered = await discoverAllRunDirs();
255
+ // Deduplicate by run ID (basename) — discoverAllRunDirs already deduplicates
256
+ // by run ID preferring directories with run.json, but guard here too in case
257
+ // the same run ID somehow appears from different sources.
258
+ const seen = new Set();
259
+ const unique = discovered.filter((d) => {
260
+ const runId = path.basename(d.runDir);
261
+ if (seen.has(runId))
262
+ return false;
263
+ seen.add(runId);
264
+ return true;
265
+ });
266
+ // Build the set of valid runDir paths from discovery
267
+ const validRunDirs = new Set(unique.map((d) => d.runDir));
268
+ // Prune cache entries whose runDir is no longer in the discovered set.
269
+ // This removes ghost entries that were cached before dedup was applied
270
+ // (e.g. a duplicate run discovered at a different path).
271
+ for (const [runDir] of cache) {
272
+ if (!validRunDirs.has(runDir)) {
273
+ cache.delete(runDir);
274
+ }
275
+ }
276
+ // Pre-populate cache with digests in batches to avoid overwhelming filesystem
277
+ const BATCH_SIZE = 10;
278
+ for (let i = 0; i < unique.length; i += BATCH_SIZE) {
279
+ const batch = unique.slice(i, i + BATCH_SIZE);
280
+ await Promise.all(batch.map(async (discoveredRun) => {
281
+ try {
282
+ await getDigestCached(discoveredRun.runDir, discoveredRun.source, discoveredRun.projectName);
283
+ }
284
+ catch (err) {
285
+ console.error(`Failed to cache run ${discoveredRun.runDir}:`, err);
286
+ }
287
+ }));
288
+ }
289
+ }
290
+ // Return all cached digests without filesystem scanning.
291
+ // Used by the digest API for fast, non-blocking responses.
292
+ export function getAllCachedDigests() {
293
+ const cache = getCache();
294
+ const digests = [];
295
+ for (const entry of cache.values()) {
296
+ digests.push(entry.digest);
297
+ }
298
+ return digests;
299
+ }
300
+ // Export cache for debugging
301
+ export function getCacheStats() {
302
+ const cache = getCache();
303
+ return {
304
+ size: cache.size,
305
+ entries: Array.from(cache.entries()).map(([runDir, entry]) => ({
306
+ runDir,
307
+ status: entry.digest.status,
308
+ cachedAt: entry.cachedAt,
309
+ hasFullRun: !!entry.fullRun,
310
+ })),
311
+ };
312
+ }
313
+ //# sourceMappingURL=run-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-cache.js","sourceRoot":"","sources":["../../../src/kanban/lib/run-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAG/E,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,qFAAqF;AACrF,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;IACjD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnF,CAAC;AAkBD,6DAA6D;AAC7D,SAAS,QAAQ;IACf,OAAO,SAAS,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAsB,CAA4B,CAAC;AAC3G,CAAC;AAED,sDAAsD;AACtD,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,gBAAgB;AAChB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,yBAAyB;AACtD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAChE,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAE1E,SAAS,MAAM,CAAC,MAA2B;IACzC,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;AACpC,CAAC;AAED,0DAA0D;AAC1D,6EAA6E;AAC7E,SAAS,aAAa;IACpB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,KAAK,CAAC,IAAI,IAAI,cAAc;QAAE,OAAO;IAEzC,qCAAqC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,IAAI,cAAc;QAAE,OAAO;IAEzC,sDAAsD;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAC1C,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,cAAc,CAAC,MAAc;IAC1C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;YACtC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yGAAyG;QACzG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,qDAAqD,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,MAAmB,EACnB,WAAmB;IAEnB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEhC,yBAAyB;IACzB,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAE1C,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;IAE7D,MAAM,YAAY,GAAoB;QACpC,GAAG,MAAM;QACT,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,WAAW,EAAE,oBAAoB;KAClC,CAAC;IAEF,eAAe;IACf,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,MAAM;QACN,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B;QACxD,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,mCAAmC;KAC/E,CAAC,CAAC;IAEH,aAAa,EAAE,CAAC;IAEhB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,MAAmB,EACnB,WAAmB;IAEnB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEhC,8CAA8C;IAC9C,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,sEAAsE;IACtE,qEAAqE;IACrE,qCAAqC;IACrC,MAAM,WAAW,GACf,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS;QACpD,CAAC,CAAC;YACE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;YACpC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB;SAC1C;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,+CAA+C;IAC/C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,CAAmB,CAAC;IAErE,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAE/C,8CAA8C;IAC9C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;IAE7D,uBAAuB;IACvB,MAAM,WAAW,GAAQ;QACvB,GAAG,GAAG;QACN,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,WAAW,EAAE,oBAAoB;KAClC,CAAC;IACF,oDAAoD;IACpD,OAAQ,WAAkD,CAAC,iBAAiB,CAAC;IAE7E,6BAA6B;IAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAClE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;QAChB,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,MAAM;QACN,OAAO,EAAE,WAAW;QACpB,gBAAgB;KACjB,CAAC,CAAC;IAEH,aAAa,EAAE,CAAC;IAEhB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAC3E,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,iBAAiB,GAAG,CAAC,CAAC;IACtB,eAAe,GAAG,IAAI,CAAC,CAAC,qCAAqC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,8CAA8C;IAC9C,qFAAqF;IACrF,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,EAWtB,CAAC;IAEL,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC;QAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;YAC9C,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,uBAAuB,EAAE,CAAC;YAC1B,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,EAAE;SACnB,CAAC;QAEF,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrB,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QACnD,QAAQ,CAAC,uBAAuB,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;QAErE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtG,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,2EAA2E;QAC3E,8EAA8E;QAC9E,8EAA8E;QAC9E,6EAA6E;QAC7E,+EAA+E;QAC/E,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC;YACtE,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YAC9C,QAAQ,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC/D,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;gBACzB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE;gBAC/C,WAAW;gBACX,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS;gBAC9C,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,mBAAmB;aAC3E,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC7E,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACjD,CAAC;QAED,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,WAAW;QACX,GAAG,KAAK;KACT,CAAC,CAAC,CAAC;AACN,CAAC;AAED,gEAAgE;AAChE,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,MAAM,qBAAqB,GAAG,KAAK,CAAC,CAAC,2DAA2D;AAChG,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,6CAA6C;AAEzE,qDAAqD;AACrD,MAAM,UAAU,gBAAgB;IAC9B,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,iFAAiF;IACjF,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,GAAG,GAAG,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,iBAAiB,GAAG,GAAG,CAAC;IACxB,eAAe,GAAG,KAAK,CAAC;IAExB,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE9C,6EAA6E;IAC7E,6EAA6E;IAC7E,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzE,uEAAuE;IACvE,uEAAuE;IACvE,yDAAyD;IACzD,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,aAA4B,EAAE,EAAE;YAC/C,IAAI,CAAC;gBACH,MAAM,eAAe,CACnB,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,WAAW,CAC1B,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,aAAa,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,2DAA2D;AAC3D,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM;YACN,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO;SAC5B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { EventEmitter } from "events";
2
+ import { type WatcherEvent } from "./watcher.js";
3
+ export declare const serverEvents: EventEmitter<[never]>;
4
+ export declare const SSE_DEBOUNCE_MS = 500;
5
+ export interface BatchedRunChangedEvent {
6
+ type: "run-changed";
7
+ runIds: string[];
8
+ runDirs: string[];
9
+ }
10
+ export declare function resetDebounceState(): void;
11
+ /**
12
+ * Enqueue a run-changed event into the leading-edge debounce.
13
+ *
14
+ * Behaviour:
15
+ * 1. If no window is open, emit immediately (leading edge) and open window.
16
+ * 2. If window is already open, collect the runDir and reset the 500ms timer
17
+ * (trailing flush).
18
+ */
19
+ export declare function enqueueRunChanged(event: WatcherEvent): void;
20
+ export declare function ensureInitialized(): Promise<void>;
21
+ export declare function shutdownServer(): Promise<void>;
22
+ export declare function getInitStatus(): {
23
+ initialized: boolean;
24
+ hasCleanup: boolean;
25
+ serverEventListeners: number;
26
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-init.d.ts","sourceRoot":"","sources":["../../../src/kanban/lib/server-init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAS7E,eAAO,MAAM,YAAY,uBAAoB,CAAC;AAW9C,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAkBD,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAoBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA8B3D;AAiBD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmEvD;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBpD;AAGD,wBAAgB,aAAa;;;;EAO5B"}
@@ -0,0 +1,179 @@
1
+ import path from "path";
2
+ import { EventEmitter } from "events";
3
+ import { initWatcher, watcherEvents } from "./watcher.js";
4
+ import { discoverAndCacheAll } from "./run-cache.js";
5
+ import { getGlobal } from "./global-registry.js";
6
+ // Shared event bus for SSE endpoints — persist across HMR via typed global registry
7
+ function getServerEvents() {
8
+ return getGlobal('__kanban_server_events__', () => new EventEmitter());
9
+ }
10
+ export const serverEvents = getServerEvents();
11
+ // ---------------------------------------------------------------------------
12
+ // Leading-edge debounce for SSE broadcasts
13
+ // ---------------------------------------------------------------------------
14
+ // N clients x M rapid file changes = N*M redundant API requests. This
15
+ // debounce fires immediately on the *first* run-changed event (leading edge),
16
+ // then collects any subsequent events within a 500ms window and emits a
17
+ // single batched notification containing all affected runIds.
18
+ // ---------------------------------------------------------------------------
19
+ export const SSE_DEBOUNCE_MS = 500;
20
+ function getDebounceState() {
21
+ return getGlobal('__kanban_sse_debounce__', () => ({
22
+ pendingRunDirs: new Set(),
23
+ timer: null,
24
+ windowOpen: false,
25
+ }));
26
+ }
27
+ export function resetDebounceState() {
28
+ const ds = getDebounceState();
29
+ if (ds.timer)
30
+ clearTimeout(ds.timer);
31
+ ds.timer = null;
32
+ ds.pendingRunDirs.clear();
33
+ ds.windowOpen = false;
34
+ }
35
+ /** Flush the batch — emit a single event with all collected runIds. */
36
+ function flushBatch() {
37
+ const ds = getDebounceState();
38
+ const runDirs = Array.from(ds.pendingRunDirs);
39
+ ds.pendingRunDirs.clear();
40
+ ds.timer = null;
41
+ ds.windowOpen = false;
42
+ if (runDirs.length === 0)
43
+ return;
44
+ const runIds = runDirs.map((d) => path.basename(d));
45
+ serverEvents.emit("run-changed", {
46
+ type: "run-changed",
47
+ runIds,
48
+ runDirs,
49
+ });
50
+ }
51
+ /**
52
+ * Enqueue a run-changed event into the leading-edge debounce.
53
+ *
54
+ * Behaviour:
55
+ * 1. If no window is open, emit immediately (leading edge) and open window.
56
+ * 2. If window is already open, collect the runDir and reset the 500ms timer
57
+ * (trailing flush).
58
+ */
59
+ export function enqueueRunChanged(event) {
60
+ const ds = getDebounceState();
61
+ // Note: forceRefreshBreakpointRuns() was previously called here on every
62
+ // watcher event, but it deleted ALL breakpoint cache entries globally —
63
+ // causing banner flickering during active orchestration. The specific run
64
+ // is already invalidated by invalidateRun(runDir) in the watcher handlers,
65
+ // so broad cache clearing is unnecessary. (v0.12.3 fix)
66
+ if (!ds.windowOpen) {
67
+ // --- Leading edge: fire immediately for this single runDir ---
68
+ ds.windowOpen = true;
69
+ const runId = path.basename(event.runDir);
70
+ serverEvents.emit("run-changed", {
71
+ type: "run-changed",
72
+ runIds: [runId],
73
+ runDirs: [event.runDir],
74
+ });
75
+ // Open a 500ms collection window for subsequent events
76
+ ds.timer = setTimeout(flushBatch, SSE_DEBOUNCE_MS);
77
+ }
78
+ else {
79
+ // --- Inside window: collect and reset timer ---
80
+ ds.pendingRunDirs.add(event.runDir);
81
+ // Reset the trailing-edge timer so the window extends on each new event
82
+ if (ds.timer)
83
+ clearTimeout(ds.timer);
84
+ ds.timer = setTimeout(flushBatch, SSE_DEBOUNCE_MS);
85
+ }
86
+ }
87
+ function getInitState() {
88
+ return getGlobal('__kanban_init__', () => ({
89
+ initialized: false,
90
+ initPromise: null,
91
+ cleanup: null,
92
+ }));
93
+ }
94
+ export async function ensureInitialized() {
95
+ const state = getInitState();
96
+ // Already initialized
97
+ if (state.initialized) {
98
+ return;
99
+ }
100
+ // Initialization in progress
101
+ if (state.initPromise) {
102
+ return state.initPromise;
103
+ }
104
+ // Start initialization
105
+ state.initPromise = (async () => {
106
+ try {
107
+ console.log("Starting server initialization...");
108
+ // Step 1: Initialize watcher
109
+ console.log("Setting up filesystem watcher...");
110
+ state.cleanup = await initWatcher();
111
+ // Step 2: Initial cache population
112
+ console.log("Populating cache with discovered runs...");
113
+ await discoverAndCacheAll();
114
+ // Step 3: Listen to watcher events and broadcast via leading-edge debounce
115
+ // Watcher already invalidates the specific run cache in handleJournalChange.
116
+ // Additionally, when a journal change is detected, force-refresh all breakpoint
117
+ // cache entries. This ensures that EFFECT_RESOLVED events for breakpoints
118
+ // immediately clear stale breakpoint data across all cached runs — not just
119
+ // the specific run that changed.
120
+ //
121
+ // run-changed events are routed through enqueueRunChanged() which implements
122
+ // a 500ms leading-edge debounce: the first event fires immediately, then
123
+ // subsequent events within the window are batched and flushed once.
124
+ // Dedup window for transient watcher errors — suppress duplicates within 5s
125
+ // to prevent cascading SSE error events that trigger client-side flash
126
+ let lastWatcherErrorTime = 0;
127
+ const WATCHER_ERROR_DEDUP_MS = 5000;
128
+ watcherEvents.on("change", (event) => {
129
+ if (event.type === "run-changed") {
130
+ enqueueRunChanged(event);
131
+ }
132
+ else if (event.type === "new-run") {
133
+ serverEvents.emit("new-run", event);
134
+ }
135
+ else if (event.type === "error") {
136
+ // Suppress transient watcher errors within dedup window
137
+ const now = Date.now();
138
+ if (now - lastWatcherErrorTime >= WATCHER_ERROR_DEDUP_MS) {
139
+ lastWatcherErrorTime = now;
140
+ serverEvents.emit("watcher-error", event);
141
+ }
142
+ }
143
+ });
144
+ state.initialized = true;
145
+ console.log("Server initialization complete");
146
+ }
147
+ catch (err) {
148
+ console.error("Server initialization failed:", err);
149
+ state.initPromise = null;
150
+ throw err;
151
+ }
152
+ })();
153
+ return state.initPromise;
154
+ }
155
+ // Cleanup function for graceful shutdown
156
+ export async function shutdownServer() {
157
+ const state = getInitState();
158
+ if (state.cleanup) {
159
+ state.cleanup();
160
+ state.cleanup = null;
161
+ }
162
+ state.initialized = false;
163
+ state.initPromise = null;
164
+ // Clear SSE debounce timers
165
+ resetDebounceState();
166
+ // Remove all event listeners
167
+ serverEvents.removeAllListeners();
168
+ console.log("Server shutdown complete");
169
+ }
170
+ // Get initialization status for debugging
171
+ export function getInitStatus() {
172
+ const state = getInitState();
173
+ return {
174
+ initialized: state.initialized,
175
+ hasCleanup: !!state.cleanup,
176
+ serverEventListeners: serverEvents.eventNames().length,
177
+ };
178
+ }
179
+ //# sourceMappingURL=server-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-init.js","sourceRoot":"","sources":["../../../src/kanban/lib/server-init.ts"],"names":[],"mappings":"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"}