jfl 0.9.6 → 0.9.7
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/commands/agents.js +1 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +77 -18
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/deploy.js +1 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/feedback.js +1 -1
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/hud.js +1 -1
- package/dist/commands/hud.js.map +1 -1
- package/dist/commands/init-from-service.js +1 -1
- package/dist/commands/init-from-service.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +2 -13
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +6 -44
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/organize.d.ts +16 -0
- package/dist/commands/organize.d.ts.map +1 -0
- package/dist/commands/organize.js +334 -0
- package/dist/commands/organize.js.map +1 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +273 -0
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/pi.d.ts.map +1 -1
- package/dist/commands/pi.js +8 -2
- package/dist/commands/pi.js.map +1 -1
- package/dist/commands/repair.js +1 -1
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +113 -45
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +4 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -19
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-config.d.ts.map +1 -1
- package/dist/lib/agent-config.js +24 -2
- package/dist/lib/agent-config.js.map +1 -1
- package/dist/lib/hub-health.d.ts.map +1 -1
- package/dist/lib/hub-health.js +14 -2
- package/dist/lib/hub-health.js.map +1 -1
- package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -1
- package/dist/lib/resource-optimizer-middleware.js +8 -2
- package/dist/lib/resource-optimizer-middleware.js.map +1 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +13 -12
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/utils/auth-status.d.ts +21 -0
- package/dist/utils/auth-status.d.ts.map +1 -0
- package/dist/utils/auth-status.js +53 -0
- package/dist/utils/auth-status.js.map +1 -0
- package/package.json +3 -2
- package/packages/pi/dist/agent-grid.d.ts +24 -0
- package/packages/pi/dist/agent-grid.d.ts.map +1 -0
- package/packages/pi/dist/agent-grid.js +162 -0
- package/packages/pi/dist/agent-grid.js.map +1 -0
- package/packages/pi/dist/agent-names.d.ts +43 -0
- package/packages/pi/dist/agent-names.d.ts.map +1 -0
- package/packages/pi/dist/agent-names.js +156 -0
- package/packages/pi/dist/agent-names.js.map +1 -0
- package/packages/pi/dist/autoresearch.d.ts +15 -0
- package/packages/pi/dist/autoresearch.d.ts.map +1 -0
- package/packages/pi/dist/autoresearch.js +372 -0
- package/packages/pi/dist/autoresearch.js.map +1 -0
- package/packages/pi/dist/bookmarks.d.ts +15 -0
- package/packages/pi/dist/bookmarks.d.ts.map +1 -0
- package/packages/pi/dist/bookmarks.js +77 -0
- package/packages/pi/dist/bookmarks.js.map +1 -0
- package/packages/pi/dist/context.d.ts +17 -0
- package/packages/pi/dist/context.d.ts.map +1 -0
- package/packages/pi/dist/context.js +152 -0
- package/packages/pi/dist/context.js.map +1 -0
- package/packages/pi/dist/crm-tool.d.ts +12 -0
- package/packages/pi/dist/crm-tool.d.ts.map +1 -0
- package/packages/pi/dist/crm-tool.js +58 -0
- package/packages/pi/dist/crm-tool.js.map +1 -0
- package/packages/pi/dist/eval-tool.d.ts +11 -0
- package/packages/pi/dist/eval-tool.d.ts.map +1 -0
- package/packages/pi/dist/eval-tool.js +188 -0
- package/packages/pi/dist/eval-tool.js.map +1 -0
- package/packages/pi/dist/eval.d.ts +12 -0
- package/packages/pi/dist/eval.d.ts.map +1 -0
- package/packages/pi/dist/eval.js +43 -0
- package/packages/pi/dist/eval.js.map +1 -0
- package/packages/pi/dist/footer.d.ts +20 -0
- package/packages/pi/dist/footer.d.ts.map +1 -0
- package/packages/pi/dist/footer.js +222 -0
- package/packages/pi/dist/footer.js.map +1 -0
- package/packages/pi/dist/header.d.ts +17 -0
- package/packages/pi/dist/header.d.ts.map +1 -0
- package/packages/pi/dist/header.js +156 -0
- package/packages/pi/dist/header.js.map +1 -0
- package/packages/pi/dist/hub-resolver.d.ts +11 -0
- package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
- package/packages/pi/dist/hub-resolver.js +58 -0
- package/packages/pi/dist/hub-resolver.js.map +1 -0
- package/packages/pi/dist/hub-tools.d.ts +14 -0
- package/packages/pi/dist/hub-tools.d.ts.map +1 -0
- package/packages/pi/dist/hub-tools.js +266 -0
- package/packages/pi/dist/hub-tools.js.map +1 -0
- package/packages/pi/dist/hud-tool.d.ts +17 -0
- package/packages/pi/dist/hud-tool.d.ts.map +1 -0
- package/packages/pi/dist/hud-tool.js +297 -0
- package/packages/pi/dist/hud-tool.js.map +1 -0
- package/packages/pi/dist/index.d.ts +12 -0
- package/packages/pi/dist/index.d.ts.map +1 -0
- package/packages/pi/dist/index.js +436 -0
- package/packages/pi/dist/index.js.map +1 -0
- package/packages/pi/dist/jfl-resolve.d.ts +29 -0
- package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
- package/packages/pi/dist/jfl-resolve.js +89 -0
- package/packages/pi/dist/jfl-resolve.js.map +1 -0
- package/packages/pi/dist/journal.d.ts +23 -0
- package/packages/pi/dist/journal.d.ts.map +1 -0
- package/packages/pi/dist/journal.js +250 -0
- package/packages/pi/dist/journal.js.map +1 -0
- package/packages/pi/dist/map-bridge.d.ts +20 -0
- package/packages/pi/dist/map-bridge.d.ts.map +1 -0
- package/packages/pi/dist/map-bridge.js +181 -0
- package/packages/pi/dist/map-bridge.js.map +1 -0
- package/packages/pi/dist/memory-tool.d.ts +11 -0
- package/packages/pi/dist/memory-tool.d.ts.map +1 -0
- package/packages/pi/dist/memory-tool.js +148 -0
- package/packages/pi/dist/memory-tool.js.map +1 -0
- package/packages/pi/dist/notifications.d.ts +15 -0
- package/packages/pi/dist/notifications.d.ts.map +1 -0
- package/packages/pi/dist/notifications.js +65 -0
- package/packages/pi/dist/notifications.js.map +1 -0
- package/packages/pi/dist/onboarding-v1.d.ts +15 -0
- package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v1.js +417 -0
- package/packages/pi/dist/onboarding-v1.js.map +1 -0
- package/packages/pi/dist/onboarding-v2.d.ts +18 -0
- package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v2.js +402 -0
- package/packages/pi/dist/onboarding-v2.js.map +1 -0
- package/packages/pi/dist/onboarding-v3.d.ts +13 -0
- package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
- package/packages/pi/dist/onboarding-v3.js +581 -0
- package/packages/pi/dist/onboarding-v3.js.map +1 -0
- package/packages/pi/dist/peter-parker.d.ts +12 -0
- package/packages/pi/dist/peter-parker.d.ts.map +1 -0
- package/packages/pi/dist/peter-parker.js +162 -0
- package/packages/pi/dist/peter-parker.js.map +1 -0
- package/packages/pi/dist/pivot-tool.d.ts +11 -0
- package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
- package/packages/pi/dist/pivot-tool.js +56 -0
- package/packages/pi/dist/pivot-tool.js.map +1 -0
- package/packages/pi/dist/policy-head-tool.d.ts +15 -0
- package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
- package/packages/pi/dist/policy-head-tool.js +220 -0
- package/packages/pi/dist/policy-head-tool.js.map +1 -0
- package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
- package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
- package/packages/pi/dist/portfolio-bridge.js +81 -0
- package/packages/pi/dist/portfolio-bridge.js.map +1 -0
- package/packages/pi/dist/service-skills.d.ts +15 -0
- package/packages/pi/dist/service-skills.d.ts.map +1 -0
- package/packages/pi/dist/service-skills.js +198 -0
- package/packages/pi/dist/service-skills.js.map +1 -0
- package/packages/pi/dist/session.d.ts +24 -0
- package/packages/pi/dist/session.d.ts.map +1 -0
- package/packages/pi/dist/session.js +394 -0
- package/packages/pi/dist/session.js.map +1 -0
- package/packages/pi/dist/shortcuts.d.ts +11 -0
- package/packages/pi/dist/shortcuts.d.ts.map +1 -0
- package/packages/pi/dist/shortcuts.js +231 -0
- package/packages/pi/dist/shortcuts.js.map +1 -0
- package/packages/pi/dist/startup-briefing.d.ts +13 -0
- package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
- package/packages/pi/dist/startup-briefing.js +271 -0
- package/packages/pi/dist/startup-briefing.js.map +1 -0
- package/packages/pi/dist/stratus-bridge.d.ts +14 -0
- package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
- package/packages/pi/dist/stratus-bridge.js +104 -0
- package/packages/pi/dist/stratus-bridge.js.map +1 -0
- package/packages/pi/dist/subway-mesh.d.ts +88 -0
- package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
- package/packages/pi/dist/subway-mesh.js +813 -0
- package/packages/pi/dist/subway-mesh.js.map +1 -0
- package/packages/pi/dist/synopsis-tool.d.ts +12 -0
- package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
- package/packages/pi/dist/synopsis-tool.js +84 -0
- package/packages/pi/dist/synopsis-tool.js.map +1 -0
- package/packages/pi/dist/tool-renderers.d.ts +55 -0
- package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
- package/packages/pi/dist/tool-renderers.js +349 -0
- package/packages/pi/dist/tool-renderers.js.map +1 -0
- package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
- package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
- package/packages/pi/dist/training-buffer-tool.js +319 -0
- package/packages/pi/dist/training-buffer-tool.js.map +1 -0
- package/packages/pi/dist/types.d.ts +195 -0
- package/packages/pi/dist/types.d.ts.map +1 -0
- package/packages/pi/dist/types.js +11 -0
- package/packages/pi/dist/types.js.map +1 -0
- package/packages/pi/extensions/session.ts +115 -8
- package/packages/pi/extensions/training-buffer-tool.ts +15 -8
- package/packages/pi/extensions/types.ts +1 -0
- package/packages/pi/package.json +2 -3
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub Tools Extension
|
|
3
|
+
*
|
|
4
|
+
* Registers tools for direct Context Hub interaction that were previously
|
|
5
|
+
* only available via MCP: events_publish, events_recent, context_status,
|
|
6
|
+
* context_sessions, query_experiment_history.
|
|
7
|
+
*
|
|
8
|
+
* Closes the parity gap between Claude Code (MCP) and Pi (extensions).
|
|
9
|
+
*
|
|
10
|
+
* @purpose Hub API tools — events, status, sessions, experiments (MCP parity)
|
|
11
|
+
*/
|
|
12
|
+
import { hubUrl, authToken } from "./map-bridge.js";
|
|
13
|
+
import { readHubUrl, readToken } from "./hub-resolver.js";
|
|
14
|
+
let projectRoot = "";
|
|
15
|
+
async function hubFetch(path, method = "GET", body) {
|
|
16
|
+
// Try current hubUrl, then fall back to fresh port file read
|
|
17
|
+
const urls = [hubUrl];
|
|
18
|
+
if (projectRoot) {
|
|
19
|
+
const fresh = readHubUrl(projectRoot);
|
|
20
|
+
if (fresh && fresh !== hubUrl)
|
|
21
|
+
urls.push(fresh);
|
|
22
|
+
}
|
|
23
|
+
let lastErr = null;
|
|
24
|
+
for (const url of urls) {
|
|
25
|
+
const token = url === hubUrl ? authToken : (projectRoot ? readToken(projectRoot) : authToken);
|
|
26
|
+
try {
|
|
27
|
+
const resp = await fetch(`${url}${path}`, {
|
|
28
|
+
method,
|
|
29
|
+
headers: {
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
32
|
+
},
|
|
33
|
+
...(body ? { body: JSON.stringify(body) } : {}),
|
|
34
|
+
signal: AbortSignal.timeout(5000),
|
|
35
|
+
});
|
|
36
|
+
if (!resp.ok)
|
|
37
|
+
throw new Error(`Hub ${path}: ${resp.status}`);
|
|
38
|
+
return await resp.json();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
lastErr = err;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw lastErr ?? new Error(`Hub ${path}: unreachable`);
|
|
45
|
+
}
|
|
46
|
+
export async function setupHubTools(ctx, _config) {
|
|
47
|
+
projectRoot = ctx.session.projectRoot;
|
|
48
|
+
// ─── jfl_events_publish ──────────────────────────────────────────────────
|
|
49
|
+
ctx.registerTool({
|
|
50
|
+
name: "jfl_events_publish",
|
|
51
|
+
description: "Publish an event to the MAP event bus. Use to signal state changes, completions, or trigger flows.",
|
|
52
|
+
promptSnippet: "Publish event to MAP bus",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
type: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Event type (e.g. 'task:completed', 'eval:scored', 'custom:my-event')",
|
|
59
|
+
},
|
|
60
|
+
data: {
|
|
61
|
+
type: "string",
|
|
62
|
+
description: "Event data as JSON string",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ["type"],
|
|
66
|
+
},
|
|
67
|
+
async handler(input) {
|
|
68
|
+
const { type, data } = input;
|
|
69
|
+
try {
|
|
70
|
+
let eventData = {};
|
|
71
|
+
if (data) {
|
|
72
|
+
try {
|
|
73
|
+
eventData = JSON.parse(data);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
eventData = { message: data };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
await hubFetch("/api/events", "POST", {
|
|
80
|
+
type,
|
|
81
|
+
source: `pi:${ctx.session.id}`,
|
|
82
|
+
data: eventData,
|
|
83
|
+
ts: new Date().toISOString(),
|
|
84
|
+
});
|
|
85
|
+
return `Event published: ${type}`;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return "Event publish failed — Context Hub may not be running.";
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
// ─── jfl_events_recent ──────────────────────────────────────────────────
|
|
93
|
+
ctx.registerTool({
|
|
94
|
+
name: "jfl_events_recent",
|
|
95
|
+
description: "Get recent events from the MAP event bus. Check what happened in the system — agent actions, eval results, flow triggers.",
|
|
96
|
+
promptSnippet: "View recent MAP events",
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: "object",
|
|
99
|
+
properties: {
|
|
100
|
+
limit: {
|
|
101
|
+
type: "number",
|
|
102
|
+
description: "Number of events to return (default: 20)",
|
|
103
|
+
},
|
|
104
|
+
type: {
|
|
105
|
+
type: "string",
|
|
106
|
+
description: "Filter by event type prefix (e.g. 'eval:', 'hook:', 'task:')",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
async handler(input) {
|
|
111
|
+
const { limit, type } = input;
|
|
112
|
+
try {
|
|
113
|
+
const params = new URLSearchParams();
|
|
114
|
+
if (limit)
|
|
115
|
+
params.set("limit", String(limit));
|
|
116
|
+
if (type)
|
|
117
|
+
params.set("type", type);
|
|
118
|
+
const data = await hubFetch(`/api/events?${params}`);
|
|
119
|
+
const events = data.events ?? data ?? [];
|
|
120
|
+
if (!Array.isArray(events) || events.length === 0)
|
|
121
|
+
return "No recent events.";
|
|
122
|
+
return events
|
|
123
|
+
.slice(0, limit ?? 20)
|
|
124
|
+
.map((e) => {
|
|
125
|
+
const ts = e.ts ? new Date(e.ts).toLocaleTimeString() : "?";
|
|
126
|
+
const src = e.source ?? "?";
|
|
127
|
+
return `[${ts}] ${e.type} (${src})${e.data ? " — " + JSON.stringify(e.data).slice(0, 100) : ""}`;
|
|
128
|
+
})
|
|
129
|
+
.join("\n");
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return "Events unavailable — Context Hub may not be running.";
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
// ─── jfl_context_status ─────────────────────────────────────────────────
|
|
137
|
+
ctx.registerTool({
|
|
138
|
+
name: "jfl_context_status",
|
|
139
|
+
description: "Check Context Hub status — available sources, memory index health, connected services.",
|
|
140
|
+
promptSnippet: "Check Context Hub health",
|
|
141
|
+
inputSchema: {
|
|
142
|
+
type: "object",
|
|
143
|
+
properties: {},
|
|
144
|
+
},
|
|
145
|
+
async handler() {
|
|
146
|
+
try {
|
|
147
|
+
const data = await hubFetch("/api/context/status");
|
|
148
|
+
const lines = ["Context Hub Status:"];
|
|
149
|
+
for (const [k, v] of Object.entries(data)) {
|
|
150
|
+
if (typeof v === "object" && v !== null) {
|
|
151
|
+
lines.push(` ${k}: ${JSON.stringify(v)}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
lines.push(` ${k}: ${v}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return lines.join("\n");
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return "Context Hub status unavailable.";
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
// ─── jfl_context_sessions ────────────────────────────────────────────────
|
|
165
|
+
ctx.registerTool({
|
|
166
|
+
name: "jfl_context_sessions",
|
|
167
|
+
description: "See activity from other sessions — what other agents/users are working on. Informational only.",
|
|
168
|
+
promptSnippet: "View other session activity",
|
|
169
|
+
inputSchema: {
|
|
170
|
+
type: "object",
|
|
171
|
+
properties: {
|
|
172
|
+
limit: {
|
|
173
|
+
type: "number",
|
|
174
|
+
description: "Number of sessions to return (default: 5)",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
async handler(input) {
|
|
179
|
+
const { limit } = input;
|
|
180
|
+
try {
|
|
181
|
+
// Try the sessions endpoint
|
|
182
|
+
const data = await hubFetch(`/api/context/sessions?limit=${limit ?? 5}`);
|
|
183
|
+
const sessions = data.sessions ?? data ?? [];
|
|
184
|
+
if (!Array.isArray(sessions) || sessions.length === 0)
|
|
185
|
+
return "No other sessions found.";
|
|
186
|
+
return sessions
|
|
187
|
+
.map((s) => {
|
|
188
|
+
const age = s.lastSeen ? `(${new Date(s.lastSeen).toLocaleString()})` : "";
|
|
189
|
+
return `${s.branch ?? s.id ?? "?"} ${age} — ${s.summary ?? s.status ?? "active"}`;
|
|
190
|
+
})
|
|
191
|
+
.join("\n");
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Fallback: read journal files to find other sessions
|
|
195
|
+
try {
|
|
196
|
+
const { execSync } = await import("child_process");
|
|
197
|
+
const journalDir = `${ctx.session.projectRoot}/.jfl/journal`;
|
|
198
|
+
const files = execSync(`ls -t ${journalDir}/*.jsonl 2>/dev/null | head -5`, {
|
|
199
|
+
encoding: "utf-8",
|
|
200
|
+
}).trim();
|
|
201
|
+
if (!files)
|
|
202
|
+
return "No other sessions found.";
|
|
203
|
+
return files.split("\n")
|
|
204
|
+
.map(f => {
|
|
205
|
+
const branch = f.split("/").pop()?.replace(".jsonl", "") ?? "?";
|
|
206
|
+
return `Session: ${branch}`;
|
|
207
|
+
})
|
|
208
|
+
.join("\n");
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return "Sessions unavailable.";
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
// ─── jfl_experiment_history ─────────────────────────────────────────────
|
|
217
|
+
ctx.registerTool({
|
|
218
|
+
name: "jfl_experiment_history",
|
|
219
|
+
description: "Search past experiments, their outcomes, and what was learned. Useful for avoiding repeat experiments.",
|
|
220
|
+
promptSnippet: "Search experiment history",
|
|
221
|
+
inputSchema: {
|
|
222
|
+
type: "object",
|
|
223
|
+
properties: {
|
|
224
|
+
query: {
|
|
225
|
+
type: "string",
|
|
226
|
+
description: "Search query for experiment history",
|
|
227
|
+
},
|
|
228
|
+
limit: {
|
|
229
|
+
type: "number",
|
|
230
|
+
description: "Max results (default: 10)",
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
required: ["query"],
|
|
234
|
+
},
|
|
235
|
+
async handler(input) {
|
|
236
|
+
const { query, limit } = input;
|
|
237
|
+
try {
|
|
238
|
+
const data = await hubFetch("/api/eval/trajectory", "GET");
|
|
239
|
+
const entries = data.entries ?? data ?? [];
|
|
240
|
+
if (!Array.isArray(entries) || entries.length === 0)
|
|
241
|
+
return "No experiment history found.";
|
|
242
|
+
// Filter by query (simple text match)
|
|
243
|
+
const queryLower = query.toLowerCase();
|
|
244
|
+
const filtered = entries
|
|
245
|
+
.filter((e) => {
|
|
246
|
+
const text = JSON.stringify(e).toLowerCase();
|
|
247
|
+
return text.includes(queryLower);
|
|
248
|
+
})
|
|
249
|
+
.slice(0, limit ?? 10);
|
|
250
|
+
if (filtered.length === 0)
|
|
251
|
+
return `No experiments matching "${query}".`;
|
|
252
|
+
return filtered
|
|
253
|
+
.map((e) => {
|
|
254
|
+
const ts = e.ts ? new Date(e.ts).toLocaleDateString() : "?";
|
|
255
|
+
const score = e.composite != null ? ` (score: ${e.composite})` : "";
|
|
256
|
+
return `[${ts}]${score} ${e.label ?? e.summary ?? JSON.stringify(e).slice(0, 100)}`;
|
|
257
|
+
})
|
|
258
|
+
.join("\n");
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return "Experiment history unavailable — Context Hub may not be running.";
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=hub-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-tools.js","sourceRoot":"","sources":["../extensions/hub-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEzD,IAAI,WAAW,GAAG,EAAE,CAAA;AAEpB,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAyB,KAAK,EAAE,IAAc;IAClF,6DAA6D;IAC7D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IACrB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;QACrC,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,OAAO,GAAiB,IAAI,CAAA;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC7F,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE;gBACxC,MAAM;gBACN,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5D,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAY,CAAA;QACxB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAc,EAAE,OAAkB;IACpE,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAA;IAErC,4EAA4E;IAC5E,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oGAAoG;QACjH,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sEAAsE;iBACpF;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAwC,CAAA;YAC/D,IAAI,CAAC;gBACH,IAAI,SAAS,GAAY,EAAE,CAAA;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC;wBAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,SAAS,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;oBAAC,CAAC;gBAC9E,CAAC;gBAED,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE;oBACpC,IAAI;oBACJ,MAAM,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;oBAC9B,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBAC7B,CAAC,CAAA;gBACF,OAAO,oBAAoB,IAAI,EAAE,CAAA;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,wDAAwD,CAAA;YACjE,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,2EAA2E;IAC3E,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,2HAA2H;QACxI,aAAa,EAAE,wBAAwB;QACvC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;iBACxD;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;aACF;SACF;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAA0C,CAAA;YAClE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;gBACpC,IAAI,KAAK;oBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC7C,IAAI,IAAI;oBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBAElC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,MAAM,EAAE,CAAC,CAAA;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,CAAA;gBAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,mBAAmB,CAAA;gBAE7E,OAAO,MAAM;qBACV,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;qBACrB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;oBACd,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;oBAC3D,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAA;oBAC3B,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;gBAClG,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,sDAAsD,CAAA;YAC/D,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,2EAA2E;IAC3E,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,wFAAwF;QACrG,aAAa,EAAE,0BAA0B;QACzC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;QACD,KAAK,CAAC,OAAO;YACX,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,CAAA;gBAElD,MAAM,KAAK,GAAa,CAAC,qBAAqB,CAAC,CAAA;gBAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;wBACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;oBAC5C,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;oBAC5B,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,iCAAiC,CAAA;YAC1C,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,4EAA4E;IAC5E,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,gGAAgG;QAC7G,aAAa,EAAE,6BAA6B;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2CAA2C;iBACzD;aACF;SACF;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,EAAE,KAAK,EAAE,GAAG,KAA2B,CAAA;YAC7C,IAAI,CAAC;gBACH,4BAA4B;gBAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,+BAA+B,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAA;gBAE5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,0BAA0B,CAAA;gBAExF,OAAO,QAAQ;qBACZ,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;oBACd,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC1E,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAA;gBACnF,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;gBACtD,IAAI,CAAC;oBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;oBAClD,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,eAAe,CAAA;oBAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,UAAU,gCAAgC,EAAE;wBAC1E,QAAQ,EAAE,OAAO;qBAClB,CAAC,CAAC,IAAI,EAAE,CAAA;oBAET,IAAI,CAAC,KAAK;wBAAE,OAAO,0BAA0B,CAAA;oBAE7C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;yBACrB,GAAG,CAAC,CAAC,CAAC,EAAE;wBACP,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;wBAC/D,OAAO,YAAY,MAAM,EAAE,CAAA;oBAC7B,CAAC,CAAC;yBACD,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,uBAAuB,CAAA;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,2EAA2E;IAC3E,GAAG,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,wGAAwG;QACrH,aAAa,EAAE,2BAA2B;QAC1C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qCAAqC;iBACnD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAA0C,CAAA;YACnE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAA;gBAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,8BAA8B,CAAA;gBAE1F,sCAAsC;gBACtC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;gBACtC,MAAM,QAAQ,GAAG,OAAO;qBACrB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;oBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;oBAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAClC,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAA;gBAExB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,4BAA4B,KAAK,IAAI,CAAA;gBAEvE,OAAO,QAAQ;qBACZ,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;oBACd,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;oBAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;oBACnE,OAAO,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;gBACrF,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,kEAAkE,CAAA;YAC3E,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HUD Tool Extension
|
|
3
|
+
*
|
|
4
|
+
* Registers jfl_hud tool and /hud command with a real project dashboard.
|
|
5
|
+
* Shows: system health, recent work, eval scores, branch, phase.
|
|
6
|
+
* Fast — reads local files, one hub health check, no heavy API calls.
|
|
7
|
+
*
|
|
8
|
+
* @purpose jfl_hud tool + /hud command — real dashboard, not a stub
|
|
9
|
+
*/
|
|
10
|
+
import type { PiContext } from "./types.js";
|
|
11
|
+
export declare function setupHudTool(ctx: PiContext): void;
|
|
12
|
+
/** Build HUD output for embedding in session init steer message */
|
|
13
|
+
export declare function getHudForSteer(): string;
|
|
14
|
+
/** Compact HUD for status bars / footers */
|
|
15
|
+
export declare function getHudCompact(): string;
|
|
16
|
+
export declare function updateHudWidget(_ctx: PiContext): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=hud-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hud-tool.d.ts","sourceRoot":"","sources":["../extensions/hud-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,YAAY,CAAA;AA0OpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CA0BjD;AAED,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HUD Tool Extension
|
|
3
|
+
*
|
|
4
|
+
* Registers jfl_hud tool and /hud command with a real project dashboard.
|
|
5
|
+
* Shows: system health, recent work, eval scores, branch, phase.
|
|
6
|
+
* Fast — reads local files, one hub health check, no heavy API calls.
|
|
7
|
+
*
|
|
8
|
+
* @purpose jfl_hud tool + /hud command — real dashboard, not a stub
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
11
|
+
import { join } from "path";
|
|
12
|
+
import { execSync } from "child_process";
|
|
13
|
+
import { hudRenderCall, hudRenderResult } from "./tool-renderers.js";
|
|
14
|
+
let projectRoot = "";
|
|
15
|
+
// ─── Data gathering (all fast, local reads) ─────────────────────────────────
|
|
16
|
+
function getConfig(root) {
|
|
17
|
+
const configPath = join(root, ".jfl", "config.json");
|
|
18
|
+
let name = root.split("/").pop() ?? "JFL";
|
|
19
|
+
let type = "gtm";
|
|
20
|
+
if (existsSync(configPath)) {
|
|
21
|
+
try {
|
|
22
|
+
const c = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
23
|
+
if (c.name)
|
|
24
|
+
name = c.name;
|
|
25
|
+
if (c.type)
|
|
26
|
+
type = c.type;
|
|
27
|
+
}
|
|
28
|
+
catch { }
|
|
29
|
+
}
|
|
30
|
+
return { name, type };
|
|
31
|
+
}
|
|
32
|
+
function getBranch(root) {
|
|
33
|
+
try {
|
|
34
|
+
return execSync("git branch --show-current", { cwd: root, timeout: 2000, stdio: ["pipe", "pipe", "ignore"] }).toString().trim();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return "unknown";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function getDaysToLaunch(root) {
|
|
41
|
+
const roadmapPath = join(root, "knowledge", "ROADMAP.md");
|
|
42
|
+
if (!existsSync(roadmapPath))
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
const content = readFileSync(roadmapPath, "utf-8");
|
|
46
|
+
const dateMatch = content.match(/(\d{4}-\d{2}-\d{2})/m);
|
|
47
|
+
if (!dateMatch)
|
|
48
|
+
return null;
|
|
49
|
+
const diff = Math.ceil((new Date(dateMatch[1]).getTime() - Date.now()) / 86400000);
|
|
50
|
+
return diff > 0 ? `${diff}d to launch` : `${Math.abs(diff)}d past launch`;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function getPhase(root) {
|
|
57
|
+
const roadmapPath = join(root, "knowledge", "ROADMAP.md");
|
|
58
|
+
if (!existsSync(roadmapPath))
|
|
59
|
+
return "";
|
|
60
|
+
try {
|
|
61
|
+
const content = readFileSync(roadmapPath, "utf-8");
|
|
62
|
+
const match = content.match(/## (?:Phase|Current Phase)[:\t ]*([^\n]+)/i);
|
|
63
|
+
if (match && match[1].trim() && !match[1].trim().startsWith("```"))
|
|
64
|
+
return match[1].trim();
|
|
65
|
+
}
|
|
66
|
+
catch { }
|
|
67
|
+
return "";
|
|
68
|
+
}
|
|
69
|
+
function getRecentJournal(root, count = 5) {
|
|
70
|
+
const journalDir = join(root, ".jfl", "journal");
|
|
71
|
+
if (!existsSync(journalDir))
|
|
72
|
+
return [];
|
|
73
|
+
try {
|
|
74
|
+
const files = readdirSync(journalDir).filter(f => f.endsWith(".jsonl")).sort();
|
|
75
|
+
const entries = [];
|
|
76
|
+
// Read from newest files first
|
|
77
|
+
for (let i = files.length - 1; i >= 0 && entries.length < count * 2; i--) {
|
|
78
|
+
try {
|
|
79
|
+
const lines = readFileSync(join(journalDir, files[i]), "utf-8").trim().split("\n").filter(Boolean);
|
|
80
|
+
for (let j = lines.length - 1; j >= 0 && entries.length < count * 2; j--) {
|
|
81
|
+
try {
|
|
82
|
+
const e = JSON.parse(lines[j]);
|
|
83
|
+
if (e.title && e.type !== "pivot") {
|
|
84
|
+
entries.push({ title: e.title, type: e.type ?? "note", ts: e.ts ?? "", status: e.status });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch { }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch { }
|
|
91
|
+
}
|
|
92
|
+
return entries.slice(0, count);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function getJournalStats(root) {
|
|
99
|
+
const journalDir = join(root, ".jfl", "journal");
|
|
100
|
+
if (!existsSync(journalDir))
|
|
101
|
+
return { files: 0, entries: 0 };
|
|
102
|
+
try {
|
|
103
|
+
const files = readdirSync(journalDir).filter(f => f.endsWith(".jsonl"));
|
|
104
|
+
let entries = 0;
|
|
105
|
+
for (const f of files) {
|
|
106
|
+
try {
|
|
107
|
+
entries += readFileSync(join(journalDir, f), "utf-8").trim().split("\n").filter(Boolean).length;
|
|
108
|
+
}
|
|
109
|
+
catch { }
|
|
110
|
+
}
|
|
111
|
+
return { files: files.length, entries };
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return { files: 0, entries: 0 };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function checkSystemHealth(root) {
|
|
118
|
+
const portFile = join(root, ".jfl", "context-hub.port");
|
|
119
|
+
const port = existsSync(portFile)
|
|
120
|
+
? parseInt(readFileSync(portFile, "utf-8").trim()) || 4360
|
|
121
|
+
: 4360;
|
|
122
|
+
let hubUp = "down";
|
|
123
|
+
try {
|
|
124
|
+
const resp = execSync(`curl -sf http://localhost:${port}/health`, { timeout: 2000, stdio: ["pipe", "pipe", "ignore"] }).toString();
|
|
125
|
+
if (resp.includes("ok"))
|
|
126
|
+
hubUp = "up";
|
|
127
|
+
}
|
|
128
|
+
catch { }
|
|
129
|
+
let autoCommit = false;
|
|
130
|
+
try {
|
|
131
|
+
const ps = execSync("ps aux", { timeout: 2000, encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] });
|
|
132
|
+
autoCommit = ps.includes("auto-commit.sh");
|
|
133
|
+
}
|
|
134
|
+
catch { }
|
|
135
|
+
let watchdog = false;
|
|
136
|
+
try {
|
|
137
|
+
const pidFile = join(root, ".jfl", "hub-watchdog.pid");
|
|
138
|
+
if (existsSync(pidFile)) {
|
|
139
|
+
const pid = readFileSync(pidFile, "utf-8").trim();
|
|
140
|
+
execSync(`kill -0 ${pid}`, { stdio: "ignore" });
|
|
141
|
+
watchdog = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch { }
|
|
145
|
+
return { hub: hubUp, hubPort: port, autoCommit, watchdog };
|
|
146
|
+
}
|
|
147
|
+
function getEvalSummary(root) {
|
|
148
|
+
const evalPath = join(root, ".jfl", "eval.jsonl");
|
|
149
|
+
if (!existsSync(evalPath))
|
|
150
|
+
return null;
|
|
151
|
+
try {
|
|
152
|
+
const lines = readFileSync(evalPath, "utf-8").trim().split("\n").filter(Boolean);
|
|
153
|
+
if (lines.length === 0)
|
|
154
|
+
return null;
|
|
155
|
+
// Scan backwards for most recent entry with a composite/score
|
|
156
|
+
for (let i = lines.length - 1; i >= Math.max(0, lines.length - 20); i--) {
|
|
157
|
+
try {
|
|
158
|
+
const entry = JSON.parse(lines[i]);
|
|
159
|
+
const score = entry.composite ?? entry.score ?? null;
|
|
160
|
+
if (score !== null && score !== undefined) {
|
|
161
|
+
const tests = entry.metrics?.tests_passed !== undefined
|
|
162
|
+
? `${entry.metrics.tests_passed}/${entry.metrics.tests_total} tests`
|
|
163
|
+
: "";
|
|
164
|
+
return `${Number(score).toFixed(2)}${tests ? ` (${tests})` : ""}`;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function getTrainingStats(root) {
|
|
176
|
+
const bufferPath = join(root, ".jfl", "training-buffer.jsonl");
|
|
177
|
+
if (!existsSync(bufferPath))
|
|
178
|
+
return null;
|
|
179
|
+
try {
|
|
180
|
+
const lines = readFileSync(bufferPath, "utf-8").trim().split("\n").filter(Boolean).length;
|
|
181
|
+
return `${lines} tuples`;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// ─── Build the dashboard ────────────────────────────────────────────────────
|
|
188
|
+
function buildHud(root) {
|
|
189
|
+
const config = getConfig(root);
|
|
190
|
+
const branch = getBranch(root);
|
|
191
|
+
const phase = getPhase(root);
|
|
192
|
+
const days = getDaysToLaunch(root);
|
|
193
|
+
const health = checkSystemHealth(root);
|
|
194
|
+
const journalStats = getJournalStats(root);
|
|
195
|
+
const recentWork = getRecentJournal(root, 5);
|
|
196
|
+
const evalScore = getEvalSummary(root);
|
|
197
|
+
const trainingStats = getTrainingStats(root);
|
|
198
|
+
const lines = [];
|
|
199
|
+
// Header
|
|
200
|
+
lines.push(`◆ ${config.name}`);
|
|
201
|
+
lines.push(` Branch: ${branch}`);
|
|
202
|
+
if (phase)
|
|
203
|
+
lines.push(` Phase: ${phase}`);
|
|
204
|
+
if (days)
|
|
205
|
+
lines.push(` ${days}`);
|
|
206
|
+
lines.push("");
|
|
207
|
+
// System health
|
|
208
|
+
const hubIcon = health.hub === "up" ? "✓" : "✗";
|
|
209
|
+
const acIcon = health.autoCommit ? "✓" : "–";
|
|
210
|
+
const wdIcon = health.watchdog ? "✓" : "–";
|
|
211
|
+
lines.push(` Systems`);
|
|
212
|
+
lines.push(` ${hubIcon} Hub (:${health.hubPort}) ${acIcon} Auto-commit ${wdIcon} Watchdog`);
|
|
213
|
+
if (evalScore)
|
|
214
|
+
lines.push(` Eval: ${evalScore}`);
|
|
215
|
+
if (trainingStats)
|
|
216
|
+
lines.push(` Training: ${trainingStats}`);
|
|
217
|
+
lines.push(` Journal: ${journalStats.entries} entries across ${journalStats.files} sessions`);
|
|
218
|
+
lines.push("");
|
|
219
|
+
// Recent work
|
|
220
|
+
if (recentWork.length > 0) {
|
|
221
|
+
lines.push(" Recent");
|
|
222
|
+
for (const entry of recentWork) {
|
|
223
|
+
const typeTag = `[${entry.type}]`.padEnd(12);
|
|
224
|
+
const title = entry.title.length > 70 ? entry.title.slice(0, 67) + "…" : entry.title;
|
|
225
|
+
lines.push(` ${typeTag} ${title}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return lines.join("\n");
|
|
229
|
+
}
|
|
230
|
+
// Also export a one-line version for the steer message
|
|
231
|
+
function buildHudCompact(root) {
|
|
232
|
+
const config = getConfig(root);
|
|
233
|
+
const health = checkSystemHealth(root);
|
|
234
|
+
const journalStats = getJournalStats(root);
|
|
235
|
+
const recentWork = getRecentJournal(root, 1);
|
|
236
|
+
const evalScore = getEvalSummary(root);
|
|
237
|
+
const parts = [`◆ ${config.name}`];
|
|
238
|
+
parts.push(`Hub ${health.hub === "up" ? "✓" : "✗"}`);
|
|
239
|
+
if (evalScore)
|
|
240
|
+
parts.push(`Eval ${evalScore}`);
|
|
241
|
+
parts.push(`${journalStats.entries} journal entries`);
|
|
242
|
+
if (recentWork.length > 0)
|
|
243
|
+
parts.push(`Last: ${recentWork[0].title.slice(0, 50)}`);
|
|
244
|
+
return parts.join(" | ");
|
|
245
|
+
}
|
|
246
|
+
// ─── Tool + Command registration ───────────────────────────────────────────
|
|
247
|
+
export function setupHudTool(ctx) {
|
|
248
|
+
projectRoot = ctx.session.projectRoot;
|
|
249
|
+
ctx.registerTool({
|
|
250
|
+
name: "jfl_hud",
|
|
251
|
+
description: "Get the current JFL project dashboard — timeline, phase, pipeline status, and next action",
|
|
252
|
+
promptSnippet: "Show project dashboard with timeline, phase, and pipeline",
|
|
253
|
+
inputSchema: {
|
|
254
|
+
type: "object",
|
|
255
|
+
properties: {},
|
|
256
|
+
},
|
|
257
|
+
async handler() {
|
|
258
|
+
return buildHud(projectRoot);
|
|
259
|
+
},
|
|
260
|
+
renderCall: hudRenderCall,
|
|
261
|
+
renderResult: hudRenderResult,
|
|
262
|
+
});
|
|
263
|
+
ctx.registerCommand({
|
|
264
|
+
name: "hud",
|
|
265
|
+
description: "Show project dashboard",
|
|
266
|
+
async handler(_args, _cmdCtx) {
|
|
267
|
+
const output = buildHud(projectRoot);
|
|
268
|
+
ctx.ui.notify(output, { level: "info" });
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
/** Build HUD output for embedding in session init steer message */
|
|
273
|
+
export function getHudForSteer() {
|
|
274
|
+
if (!projectRoot)
|
|
275
|
+
return "";
|
|
276
|
+
try {
|
|
277
|
+
return buildHud(projectRoot);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return "";
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/** Compact HUD for status bars / footers */
|
|
284
|
+
export function getHudCompact() {
|
|
285
|
+
if (!projectRoot)
|
|
286
|
+
return "";
|
|
287
|
+
try {
|
|
288
|
+
return buildHudCompact(projectRoot);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return "";
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
export async function updateHudWidget(_ctx) {
|
|
295
|
+
// Widget rendering handled by subway-mesh.ts
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=hud-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hud-tool.js","sourceRoot":"","sources":["../extensions/hud-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JFL Pi Extension — Master Entry (Factory Function)
|
|
3
|
+
*
|
|
4
|
+
* Pi loads this as a factory: export default async function(pi: ExtensionAPI).
|
|
5
|
+
* We construct a PiContext shim exposing full Pi TUI capabilities to all
|
|
6
|
+
* JFL sub-extensions: overlays, custom footer, shortcuts, tool rendering,
|
|
7
|
+
* interactive dialogs, notifications, state persistence, and more.
|
|
8
|
+
*
|
|
9
|
+
* @purpose Master entry point for @jfl/pi — full TUI-powered extension
|
|
10
|
+
*/
|
|
11
|
+
export default function jflExtension(pi: any): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyFH,wBAA8B,YAAY,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA2XjE"}
|