jfl 0.6.2 → 0.7.0
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/README.md +127 -951
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +96 -0
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/kanban.d.ts +34 -0
- package/dist/commands/kanban.d.ts.map +1 -0
- package/dist/commands/kanban.js +216 -0
- package/dist/commands/kanban.js.map +1 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +37 -0
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +62 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +28 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/dashboard-static/assets/index-CW8oWAdr.css +1 -0
- package/dist/dashboard-static/assets/index-Ck8f9dcM.js +121 -0
- package/dist/dashboard-static/index.html +2 -2
- package/dist/index.js +62 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +38 -8
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/kanban-github.d.ts +81 -0
- package/dist/lib/kanban-github.d.ts.map +1 -0
- package/dist/lib/kanban-github.js +318 -0
- package/dist/lib/kanban-github.js.map +1 -0
- package/dist/lib/kanban.d.ts +131 -0
- package/dist/lib/kanban.d.ts.map +1 -0
- package/dist/lib/kanban.js +340 -0
- package/dist/lib/kanban.js.map +1 -0
- package/dist/lib/service-gtm.d.ts.map +1 -1
- package/dist/lib/service-gtm.js +11 -0
- package/dist/lib/service-gtm.js.map +1 -1
- package/package.json +1 -1
- package/packages/pi/extensions/hud-tool.ts +32 -22
- package/packages/pi/extensions/index.ts +19 -17
- package/packages/pi/extensions/tool-renderers.ts +30 -36
- package/dist/dashboard-static/assets/index-CW9ZxqX8.css +0 -1
- package/dist/dashboard-static/assets/index-DNN__p4K.js +0 -121
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-hub.d.ts","sourceRoot":"","sources":["../../src/commands/context-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"context-hub.d.ts","sourceRoot":"","sources":["../../src/commands/context-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0jFH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBjF;AAkMD,wBAAsB,qBAAqB,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAiHxF;AAMD,wBAAsB,iBAAiB,CACrC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,iBA8lBzF"}
|
|
@@ -1335,6 +1335,102 @@ function createServer(projectRoot, port, eventBus, flowEngine) {
|
|
|
1335
1335
|
}
|
|
1336
1336
|
return;
|
|
1337
1337
|
}
|
|
1338
|
+
// Kanban board
|
|
1339
|
+
// ── Kanban API (GitHub Issues-backed) ──────────────────────
|
|
1340
|
+
if (url.pathname === "/api/kanban" && req.method === "GET") {
|
|
1341
|
+
try {
|
|
1342
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
1343
|
+
const scope = url.searchParams.get("scope") ?? undefined;
|
|
1344
|
+
const source = url.searchParams.get("source") ?? undefined;
|
|
1345
|
+
const filter = (scope || source) ? { scope, source } : undefined;
|
|
1346
|
+
const kb = new GitHubKanban(projectRoot);
|
|
1347
|
+
const board = await kb.getBoard(filter);
|
|
1348
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1349
|
+
res.end(JSON.stringify(board));
|
|
1350
|
+
}
|
|
1351
|
+
catch (err) {
|
|
1352
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
1353
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
1354
|
+
}
|
|
1355
|
+
return;
|
|
1356
|
+
}
|
|
1357
|
+
if (url.pathname === "/api/kanban/cards" && req.method === "GET") {
|
|
1358
|
+
try {
|
|
1359
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
1360
|
+
const scope = url.searchParams.get("scope") ?? undefined;
|
|
1361
|
+
const source = url.searchParams.get("source") ?? undefined;
|
|
1362
|
+
const filter = (scope || source) ? { scope, source } : undefined;
|
|
1363
|
+
const kb = new GitHubKanban(projectRoot);
|
|
1364
|
+
const cards = await kb.getCards(filter);
|
|
1365
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1366
|
+
res.end(JSON.stringify(cards));
|
|
1367
|
+
}
|
|
1368
|
+
catch (err) {
|
|
1369
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
1370
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
1371
|
+
}
|
|
1372
|
+
return;
|
|
1373
|
+
}
|
|
1374
|
+
if (url.pathname === "/api/kanban/scopes" && req.method === "GET") {
|
|
1375
|
+
try {
|
|
1376
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
1377
|
+
const kb = new GitHubKanban(projectRoot);
|
|
1378
|
+
const workspace = kb.getWorkspaceInfo();
|
|
1379
|
+
const services = kb.getRegisteredServices();
|
|
1380
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1381
|
+
res.end(JSON.stringify({ workspace, services }));
|
|
1382
|
+
}
|
|
1383
|
+
catch (err) {
|
|
1384
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
1385
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
1386
|
+
}
|
|
1387
|
+
return;
|
|
1388
|
+
}
|
|
1389
|
+
if (url.pathname === "/api/kanban" && req.method === "POST") {
|
|
1390
|
+
let body = "";
|
|
1391
|
+
req.on("data", (chunk) => { body += chunk; });
|
|
1392
|
+
req.on("end", async () => {
|
|
1393
|
+
try {
|
|
1394
|
+
const data = JSON.parse(body || "{}");
|
|
1395
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
1396
|
+
const kb = new GitHubKanban(projectRoot);
|
|
1397
|
+
if (data.action === "create") {
|
|
1398
|
+
const number = kb.create({
|
|
1399
|
+
title: data.title,
|
|
1400
|
+
description: data.description,
|
|
1401
|
+
source: data.source ?? "human",
|
|
1402
|
+
priority: data.priority ?? 0,
|
|
1403
|
+
scope: data.scope,
|
|
1404
|
+
labels: data.labels,
|
|
1405
|
+
});
|
|
1406
|
+
res.writeHead(201, { "Content-Type": "application/json" });
|
|
1407
|
+
res.end(JSON.stringify({ id: `#${number}`, number }));
|
|
1408
|
+
}
|
|
1409
|
+
else if (data.action === "move") {
|
|
1410
|
+
// Accept both #8 and 8 format
|
|
1411
|
+
const num = typeof data.id === "string" ? parseInt(data.id.replace("#", "")) : data.id;
|
|
1412
|
+
kb.move(num, data.column);
|
|
1413
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1414
|
+
res.end(JSON.stringify({ ok: true }));
|
|
1415
|
+
}
|
|
1416
|
+
else if (data.action === "pick") {
|
|
1417
|
+
const num = typeof data.id === "string" ? parseInt(data.id.replace("#", "")) : data.id;
|
|
1418
|
+
kb.pick(num, data.agent);
|
|
1419
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1420
|
+
res.end(JSON.stringify({ ok: true }));
|
|
1421
|
+
}
|
|
1422
|
+
else {
|
|
1423
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1424
|
+
res.end(JSON.stringify({ error: "Unknown action" }));
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
catch (err) {
|
|
1428
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
1429
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
1430
|
+
}
|
|
1431
|
+
});
|
|
1432
|
+
return;
|
|
1433
|
+
}
|
|
1338
1434
|
// Flow definitions
|
|
1339
1435
|
if (url.pathname === "/api/flows" && req.method === "GET") {
|
|
1340
1436
|
if (!flowEngine) {
|