jfl 0.2.2 → 0.2.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.
Files changed (70) hide show
  1. package/clawdbot-plugin/clawdbot.plugin.json +12 -1
  2. package/clawdbot-plugin/index.js +5 -5
  3. package/clawdbot-plugin/index.ts +5 -5
  4. package/dist/commands/context-hub.d.ts +4 -0
  5. package/dist/commands/context-hub.d.ts.map +1 -1
  6. package/dist/commands/context-hub.js +570 -81
  7. package/dist/commands/context-hub.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +42 -11
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/peter.d.ts +15 -0
  12. package/dist/commands/peter.d.ts.map +1 -0
  13. package/dist/commands/peter.js +198 -0
  14. package/dist/commands/peter.js.map +1 -0
  15. package/dist/commands/ralph.d.ts +3 -1
  16. package/dist/commands/ralph.d.ts.map +1 -1
  17. package/dist/commands/ralph.js +40 -5
  18. package/dist/commands/ralph.js.map +1 -1
  19. package/dist/commands/session.d.ts +2 -1
  20. package/dist/commands/session.d.ts.map +1 -1
  21. package/dist/commands/session.js +496 -49
  22. package/dist/commands/session.js.map +1 -1
  23. package/dist/commands/update.d.ts.map +1 -1
  24. package/dist/commands/update.js +25 -6
  25. package/dist/commands/update.js.map +1 -1
  26. package/dist/dashboard/components.d.ts +7 -0
  27. package/dist/dashboard/components.d.ts.map +1 -0
  28. package/dist/dashboard/components.js +163 -0
  29. package/dist/dashboard/components.js.map +1 -0
  30. package/dist/dashboard/index.d.ts +12 -0
  31. package/dist/dashboard/index.d.ts.map +1 -0
  32. package/dist/dashboard/index.js +132 -0
  33. package/dist/dashboard/index.js.map +1 -0
  34. package/dist/dashboard/pages.d.ts +7 -0
  35. package/dist/dashboard/pages.d.ts.map +1 -0
  36. package/dist/dashboard/pages.js +742 -0
  37. package/dist/dashboard/pages.js.map +1 -0
  38. package/dist/dashboard/styles.d.ts +7 -0
  39. package/dist/dashboard/styles.d.ts.map +1 -0
  40. package/dist/dashboard/styles.js +497 -0
  41. package/dist/dashboard/styles.js.map +1 -0
  42. package/dist/index.js +30 -3
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/map-event-bus.d.ts +48 -0
  45. package/dist/lib/map-event-bus.d.ts.map +1 -0
  46. package/dist/lib/map-event-bus.js +326 -0
  47. package/dist/lib/map-event-bus.js.map +1 -0
  48. package/dist/lib/peter-parker-bridge.d.ts +33 -0
  49. package/dist/lib/peter-parker-bridge.d.ts.map +1 -0
  50. package/dist/lib/peter-parker-bridge.js +116 -0
  51. package/dist/lib/peter-parker-bridge.js.map +1 -0
  52. package/dist/lib/peter-parker-config.d.ts +13 -0
  53. package/dist/lib/peter-parker-config.d.ts.map +1 -0
  54. package/dist/lib/peter-parker-config.js +86 -0
  55. package/dist/lib/peter-parker-config.js.map +1 -0
  56. package/dist/lib/service-utils.d.ts.map +1 -1
  57. package/dist/lib/service-utils.js +33 -17
  58. package/dist/lib/service-utils.js.map +1 -1
  59. package/dist/mcp/context-hub-mcp.js +122 -22
  60. package/dist/mcp/context-hub-mcp.js.map +1 -1
  61. package/dist/types/map.d.ts +33 -0
  62. package/dist/types/map.d.ts.map +1 -0
  63. package/dist/types/map.js +39 -0
  64. package/dist/types/map.js.map +1 -0
  65. package/dist/ui/event-dashboard.d.ts +12 -0
  66. package/dist/ui/event-dashboard.d.ts.map +1 -0
  67. package/dist/ui/event-dashboard.js +342 -0
  68. package/dist/ui/event-dashboard.js.map +1 -0
  69. package/package.json +1 -1
  70. package/scripts/test-map-eventbus.sh +357 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * MAP (Memory Access Protocol) Types
3
+ *
4
+ * Event schema, subscription, and model routing types for the MAP event bus.
5
+ * Everything else imports from here.
6
+ *
7
+ * @purpose Core type definitions for MAP event bus and Peter Parker orchestrator
8
+ */
9
+ export type MAPEventType = "session:started" | "session:ended" | "task:started" | "task:completed" | "task:failed" | "service:healthy" | "service:unhealthy" | "peter:started" | "peter:task-selected" | "peter:task-completed" | "peter:all-complete" | "openclaw:tag" | "journal:entry" | "decision:made" | "build:completed" | "deploy:completed" | "custom";
10
+ export interface MAPEvent {
11
+ id: string;
12
+ ts: string;
13
+ type: MAPEventType;
14
+ source: string;
15
+ target?: string;
16
+ session?: string;
17
+ data: Record<string, unknown>;
18
+ ttl?: number;
19
+ }
20
+ export interface MAPSubscription {
21
+ id: string;
22
+ clientId: string;
23
+ patterns: string[];
24
+ transport: "sse" | "websocket" | "poll";
25
+ createdAt: string;
26
+ lastEventId?: string;
27
+ }
28
+ export type ModelTier = "haiku" | "sonnet" | "opus";
29
+ export type AgentRole = "scout" | "planner" | "builder" | "reviewer" | "tester";
30
+ export type CostProfile = "cost-optimized" | "balanced" | "quality-first";
31
+ export declare const MODEL_ROUTING_TABLE: Record<CostProfile, Record<AgentRole, ModelTier>>;
32
+ export declare const FALLBACK_ROUTING: Record<AgentRole, ModelTier>;
33
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/types/map.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GACpB,iBAAiB,GAAG,eAAe,GACnC,cAAc,GAAG,gBAAgB,GAAG,aAAa,GACjD,iBAAiB,GAAG,mBAAmB,GACvC,eAAe,GAAG,qBAAqB,GAAG,sBAAsB,GAAG,oBAAoB,GACvF,cAAc,GACd,eAAe,GAAG,eAAe,GACjC,iBAAiB,GAAG,kBAAkB,GACtC,QAAQ,CAAA;AAEZ,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,CAAA;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEnD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAA;AAE/E,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,UAAU,GAAG,eAAe,CAAA;AAEzE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAsBjF,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAMzD,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * MAP (Memory Access Protocol) Types
3
+ *
4
+ * Event schema, subscription, and model routing types for the MAP event bus.
5
+ * Everything else imports from here.
6
+ *
7
+ * @purpose Core type definitions for MAP event bus and Peter Parker orchestrator
8
+ */
9
+ export const MODEL_ROUTING_TABLE = {
10
+ "cost-optimized": {
11
+ scout: "haiku",
12
+ planner: "sonnet",
13
+ builder: "sonnet",
14
+ reviewer: "sonnet",
15
+ tester: "haiku",
16
+ },
17
+ "balanced": {
18
+ scout: "haiku",
19
+ planner: "sonnet",
20
+ builder: "sonnet",
21
+ reviewer: "opus",
22
+ tester: "sonnet",
23
+ },
24
+ "quality-first": {
25
+ scout: "sonnet",
26
+ planner: "opus",
27
+ builder: "sonnet",
28
+ reviewer: "opus",
29
+ tester: "sonnet",
30
+ },
31
+ };
32
+ export const FALLBACK_ROUTING = {
33
+ scout: "sonnet",
34
+ planner: "opus",
35
+ builder: "opus",
36
+ reviewer: "opus",
37
+ tester: "sonnet",
38
+ };
39
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/types/map.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsCH,MAAM,CAAC,MAAM,mBAAmB,GAAsD;IACpF,gBAAgB,EAAE;QAChB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,OAAO;KAChB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,QAAQ;KACjB;IACD,eAAe,EAAE;QACf,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,QAAQ;KACjB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAiC;IAC5D,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MAP Event Bus Dashboard
3
+ *
4
+ * Real-time TUI showing live event stream, agent status, and event breakdown.
5
+ * Connects to Context Hub via SSE for instant updates.
6
+ *
7
+ * @purpose Live MAP event bus monitoring dashboard with SSE streaming
8
+ */
9
+ export declare function startEventDashboard(options?: {
10
+ pattern?: string;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=event-dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-dashboard.d.ts","sourceRoot":"","sources":["../../src/ui/event-dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0FH,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoSvF"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * MAP Event Bus Dashboard
3
+ *
4
+ * Real-time TUI showing live event stream, agent status, and event breakdown.
5
+ * Connects to Context Hub via SSE for instant updates.
6
+ *
7
+ * @purpose Live MAP event bus monitoring dashboard with SSE streaming
8
+ */
9
+ import blessed from "blessed";
10
+ import contrib from "blessed-contrib";
11
+ import * as fs from "fs";
12
+ import * as path from "path";
13
+ import { getProjectHubUrl } from "../utils/context-hub-port.js";
14
+ const FILTER_PATTERNS = ["*", "peter:*", "task:*", "session:*"];
15
+ const AGENT_TIMEOUT_MS = 60_000;
16
+ function getAuthToken(projectRoot) {
17
+ const tokenPath = path.join(projectRoot, ".jfl", "context-hub.token");
18
+ if (fs.existsSync(tokenPath)) {
19
+ return fs.readFileSync(tokenPath, "utf-8").trim();
20
+ }
21
+ return null;
22
+ }
23
+ function loadAgents(projectRoot) {
24
+ const agents = [];
25
+ const configPath = path.join(projectRoot, ".ralph-tui", "config.toml");
26
+ if (fs.existsSync(configPath)) {
27
+ const content = fs.readFileSync(configPath, "utf-8");
28
+ const agentMatches = content.matchAll(/\[\[agents\]\]\nname = "([^"]+)"[\s\S]*?model = "([^"]+)"/g);
29
+ for (const match of agentMatches) {
30
+ const name = match[1];
31
+ if (name.endsWith("-fallback"))
32
+ continue;
33
+ agents.push({ name, model: match[2], source: "peter", lastSeen: 0 });
34
+ }
35
+ }
36
+ const servicesPath = path.join(projectRoot, ".jfl", "services.json");
37
+ if (fs.existsSync(servicesPath)) {
38
+ try {
39
+ const config = JSON.parse(fs.readFileSync(servicesPath, "utf-8"));
40
+ const services = config.services || {};
41
+ for (const [name, svc] of Object.entries(services)) {
42
+ if (!agents.find((a) => a.name === name)) {
43
+ agents.push({ name, model: svc.type || "svc", source: "fly", lastSeen: 0 });
44
+ }
45
+ }
46
+ }
47
+ catch { }
48
+ }
49
+ return agents;
50
+ }
51
+ function colorForType(type) {
52
+ if (type.startsWith("peter:"))
53
+ return "{cyan-fg}";
54
+ if (type.startsWith("task:"))
55
+ return "{green-fg}";
56
+ if (type.startsWith("session:"))
57
+ return "{yellow-fg}";
58
+ if (type.startsWith("decision:"))
59
+ return "{magenta-fg}";
60
+ if (type === "discovery" || type === "custom")
61
+ return "{red-fg}";
62
+ return "{white-fg}";
63
+ }
64
+ function formatTime(ts) {
65
+ const d = new Date(ts);
66
+ return d.toTimeString().slice(0, 8);
67
+ }
68
+ function formatEventLine(event) {
69
+ const time = formatTime(event.ts);
70
+ const color = colorForType(event.type);
71
+ let detail = "";
72
+ if (event.data) {
73
+ if (event.data.title)
74
+ detail = ` ${event.data.title}`;
75
+ else if (event.data.file)
76
+ detail = ` ${event.data.file}`;
77
+ else if (event.data.profile)
78
+ detail = ` ${event.data.profile}`;
79
+ }
80
+ return `{gray-fg}${time}{/} ${color}[${event.type}]{/} ${event.source}${detail}`;
81
+ }
82
+ export async function startEventDashboard(options) {
83
+ const projectRoot = process.cwd();
84
+ const hubUrl = getProjectHubUrl(projectRoot);
85
+ const token = getAuthToken(projectRoot);
86
+ if (!token) {
87
+ console.error("No auth token found at .jfl/context-hub.token");
88
+ console.error("Start Context Hub first: jfl context-hub ensure");
89
+ process.exit(1);
90
+ }
91
+ const screen = blessed.screen({
92
+ smartCSR: true,
93
+ title: "MAP Event Bus Dashboard",
94
+ });
95
+ const grid = new contrib.grid({ rows: 12, cols: 12, screen });
96
+ const eventStream = grid.set(0, 0, 8, 8, blessed.log, {
97
+ label: " Event Stream ",
98
+ tags: true,
99
+ mouse: true,
100
+ keys: true,
101
+ vi: true,
102
+ scrollable: true,
103
+ scrollbar: { ch: "█", inverse: true },
104
+ style: { border: { fg: "cyan" } },
105
+ border: { type: "line" },
106
+ });
107
+ const agentsBox = grid.set(0, 8, 8, 4, blessed.box, {
108
+ label: " Agents ",
109
+ tags: true,
110
+ content: "{gray-fg}Loading...{/}",
111
+ scrollable: true,
112
+ mouse: true,
113
+ style: { border: { fg: "cyan" } },
114
+ border: { type: "line" },
115
+ });
116
+ const breakdownBox = grid.set(8, 0, 4, 8, blessed.box, {
117
+ label: " Event Breakdown ",
118
+ tags: true,
119
+ content: "{gray-fg}No events yet{/}",
120
+ style: { border: { fg: "cyan" } },
121
+ border: { type: "line" },
122
+ });
123
+ const commandsBox = grid.set(8, 8, 4, 4, blessed.box, {
124
+ label: " Commands ",
125
+ tags: true,
126
+ content: "{cyan-fg}[p]{/} Publish test {cyan-fg}[f]{/} Filter\n" +
127
+ "{cyan-fg}[c]{/} Clear {cyan-fg}[q]{/} Quit\n\n" +
128
+ `Pattern: {cyan-fg}${options?.pattern || "*"}{/}`,
129
+ style: { border: { fg: "cyan" } },
130
+ border: { type: "line" },
131
+ });
132
+ let agents = loadAgents(projectRoot);
133
+ const agentLastSeen = new Map();
134
+ const typeCounts = new Map();
135
+ let currentFilterIndex = FILTER_PATTERNS.indexOf(options?.pattern || "*");
136
+ if (currentFilterIndex === -1)
137
+ currentFilterIndex = 0;
138
+ let currentPattern = FILTER_PATTERNS[currentFilterIndex];
139
+ let sseAbort = null;
140
+ function updateAgentsPanel() {
141
+ const now = Date.now();
142
+ const lines = agents.map((agent) => {
143
+ const seen = agentLastSeen.get(agent.name) || 0;
144
+ const alive = now - seen < AGENT_TIMEOUT_MS && seen > 0;
145
+ const indicator = alive ? "{green-fg}●{/}" : "{gray-fg}○{/}";
146
+ const model = agent.model.padEnd(6);
147
+ return ` ${agent.name.padEnd(12)} ${model} ${indicator}`;
148
+ });
149
+ if (lines.length === 0) {
150
+ agentsBox.setContent("{gray-fg}No agents configured{/}");
151
+ }
152
+ else {
153
+ agentsBox.setContent(lines.join("\n"));
154
+ }
155
+ screen.render();
156
+ }
157
+ function updateBreakdown() {
158
+ if (typeCounts.size === 0) {
159
+ breakdownBox.setContent("{gray-fg}No events yet{/}");
160
+ screen.render();
161
+ return;
162
+ }
163
+ const sorted = [...typeCounts.entries()].sort((a, b) => b[1] - a[1]);
164
+ const maxCount = sorted[0][1];
165
+ const barWidth = 40;
166
+ const lines = sorted.slice(0, 6).map(([type, count]) => {
167
+ const filled = Math.max(1, Math.round((count / maxCount) * barWidth));
168
+ const empty = barWidth - filled;
169
+ const prefix = typePrefix(type);
170
+ const color = colorForType(type).replace("{", "").replace("}", "");
171
+ return ` {${color}}${"█".repeat(filled)}{/}{gray-fg}${"░".repeat(empty)}{/} ${prefix.padEnd(14)} ${count}`;
172
+ });
173
+ breakdownBox.setContent(lines.join("\n"));
174
+ screen.render();
175
+ }
176
+ function typePrefix(type) {
177
+ const colon = type.indexOf(":");
178
+ if (colon > 0)
179
+ return type.slice(0, colon) + ":*";
180
+ return type;
181
+ }
182
+ function handleEvent(event) {
183
+ eventStream.log(formatEventLine(event));
184
+ agentLastSeen.set(event.source, Date.now());
185
+ if (!agents.find((a) => a.name === event.source)) {
186
+ agents.push({ name: event.source, model: "?", source: "local", lastSeen: Date.now() });
187
+ }
188
+ const prefix = typePrefix(event.type);
189
+ typeCounts.set(prefix, (typeCounts.get(prefix) || 0) + 1);
190
+ updateAgentsPanel();
191
+ updateBreakdown();
192
+ }
193
+ async function fetchInitialEvents() {
194
+ try {
195
+ const params = new URLSearchParams({ limit: "50" });
196
+ if (currentPattern !== "*")
197
+ params.set("pattern", currentPattern);
198
+ const response = await fetch(`${hubUrl}/api/events?${params}`, {
199
+ headers: { Authorization: `Bearer ${token}` },
200
+ signal: AbortSignal.timeout(5000),
201
+ });
202
+ if (!response.ok) {
203
+ eventStream.log(`{red-fg}Failed to fetch events: HTTP ${response.status}{/}`);
204
+ return;
205
+ }
206
+ const data = (await response.json());
207
+ if (data.events && data.events.length > 0) {
208
+ const reversed = [...data.events].reverse();
209
+ for (const event of reversed) {
210
+ handleEvent(event);
211
+ }
212
+ eventStream.log(`{gray-fg}── loaded ${data.events.length} historical events ──{/}`);
213
+ }
214
+ }
215
+ catch (err) {
216
+ eventStream.log(`{red-fg}Event fetch failed: ${err.message}{/}`);
217
+ }
218
+ }
219
+ async function connectSSE() {
220
+ if (sseAbort)
221
+ sseAbort.abort();
222
+ sseAbort = new AbortController();
223
+ const params = new URLSearchParams();
224
+ if (currentPattern !== "*")
225
+ params.set("patterns", currentPattern);
226
+ const url = `${hubUrl}/api/events/stream?${params}`;
227
+ try {
228
+ const response = await fetch(url, {
229
+ headers: {
230
+ Authorization: `Bearer ${token}`,
231
+ Accept: "text/event-stream",
232
+ },
233
+ signal: sseAbort.signal,
234
+ });
235
+ if (!response.ok || !response.body) {
236
+ eventStream.log(`{red-fg}SSE connection failed: HTTP ${response.status}{/}`);
237
+ setTimeout(connectSSE, 5000);
238
+ return;
239
+ }
240
+ eventStream.log("{green-fg}Connected to event stream{/}");
241
+ screen.render();
242
+ const reader = response.body.getReader();
243
+ const decoder = new TextDecoder();
244
+ let buffer = "";
245
+ while (true) {
246
+ const { done, value } = await reader.read();
247
+ if (done)
248
+ break;
249
+ buffer += decoder.decode(value, { stream: true });
250
+ const blocks = buffer.split("\n\n");
251
+ buffer = blocks.pop() || "";
252
+ for (const block of blocks) {
253
+ const lines = block.split("\n");
254
+ let data = "";
255
+ for (const line of lines) {
256
+ if (line.startsWith("data:")) {
257
+ data += line.slice(5).trim();
258
+ }
259
+ }
260
+ if (!data)
261
+ continue;
262
+ try {
263
+ const event = JSON.parse(data);
264
+ if (event.type && event.source) {
265
+ handleEvent(event);
266
+ }
267
+ }
268
+ catch { }
269
+ }
270
+ }
271
+ eventStream.log("{yellow-fg}Stream disconnected, reconnecting...{/}");
272
+ screen.render();
273
+ setTimeout(connectSSE, 3000);
274
+ }
275
+ catch (err) {
276
+ if (err.name === "AbortError")
277
+ return;
278
+ eventStream.log(`{red-fg}SSE error: ${err.message}{/}`);
279
+ screen.render();
280
+ setTimeout(connectSSE, 5000);
281
+ }
282
+ }
283
+ screen.key(["p"], async () => {
284
+ try {
285
+ await fetch(`${hubUrl}/api/events`, {
286
+ method: "POST",
287
+ headers: {
288
+ Authorization: `Bearer ${token}`,
289
+ "Content-Type": "application/json",
290
+ },
291
+ body: JSON.stringify({
292
+ type: "dashboard:test",
293
+ source: "event-dashboard",
294
+ data: { message: "Test event from dashboard" },
295
+ }),
296
+ });
297
+ }
298
+ catch (err) {
299
+ eventStream.log(`{red-fg}Publish failed: ${err.message}{/}`);
300
+ screen.render();
301
+ }
302
+ });
303
+ screen.key(["f"], () => {
304
+ currentFilterIndex = (currentFilterIndex + 1) % FILTER_PATTERNS.length;
305
+ currentPattern = FILTER_PATTERNS[currentFilterIndex];
306
+ commandsBox.setContent("{cyan-fg}[p]{/} Publish test {cyan-fg}[f]{/} Filter\n" +
307
+ "{cyan-fg}[c]{/} Clear {cyan-fg}[q]{/} Quit\n\n" +
308
+ `Pattern: {cyan-fg}${currentPattern}{/}`);
309
+ screen.render();
310
+ eventStream.log(`{yellow-fg}Filter changed to: ${currentPattern}{/}`);
311
+ typeCounts.clear();
312
+ connectSSE();
313
+ });
314
+ screen.key(["c"], () => {
315
+ eventStream.setContent("");
316
+ typeCounts.clear();
317
+ updateBreakdown();
318
+ screen.render();
319
+ });
320
+ screen.key(["q", "escape", "C-c"], () => {
321
+ if (sseAbort)
322
+ sseAbort.abort();
323
+ process.exit(0);
324
+ });
325
+ eventStream.log("{cyan-fg}MAP Event Bus Dashboard{/}");
326
+ eventStream.log(`{gray-fg}Hub: ${hubUrl}{/}`);
327
+ eventStream.log(`{gray-fg}Pattern: ${currentPattern}{/}`);
328
+ eventStream.log("");
329
+ updateAgentsPanel();
330
+ screen.render();
331
+ await fetchInitialEvents();
332
+ connectSSE();
333
+ const agentRefresh = setInterval(() => {
334
+ updateAgentsPanel();
335
+ }, 10_000);
336
+ screen.on("destroy", () => {
337
+ clearInterval(agentRefresh);
338
+ if (sseAbort)
339
+ sseAbort.abort();
340
+ });
341
+ }
342
+ //# sourceMappingURL=event-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-dashboard.js","sourceRoot":"","sources":["../../src/ui/event-dashboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jfl",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Just Fucking Launch - CLI for AI-powered GTM and development",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",