@staff0rd/assist 0.329.3 → 0.330.1
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/sessions/web/bundle.js +92 -92
- package/dist/index.js +111 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from "commander";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "@staff0rd/assist",
|
|
9
|
-
version: "0.
|
|
9
|
+
version: "0.330.1",
|
|
10
10
|
type: "module",
|
|
11
11
|
main: "dist/index.js",
|
|
12
12
|
bin: {
|
|
@@ -6226,6 +6226,74 @@ async function openInCode(req, res) {
|
|
|
6226
6226
|
}
|
|
6227
6227
|
}
|
|
6228
6228
|
|
|
6229
|
+
// src/commands/sessions/web/createCachedGhJson.ts
|
|
6230
|
+
import { execFile as execFile2 } from "child_process";
|
|
6231
|
+
import { promisify as promisify3 } from "util";
|
|
6232
|
+
var execFileAsync2 = promisify3(execFile2);
|
|
6233
|
+
var CACHE_TTL_MS = 3e4;
|
|
6234
|
+
function createCachedGhJson(args, parse3, fallback) {
|
|
6235
|
+
const cache = /* @__PURE__ */ new Map();
|
|
6236
|
+
return async (cwd) => {
|
|
6237
|
+
const now = Date.now();
|
|
6238
|
+
const cached = cache.get(cwd);
|
|
6239
|
+
if (cached && cached.expires > now) return cached.value;
|
|
6240
|
+
let value = fallback;
|
|
6241
|
+
try {
|
|
6242
|
+
const { stdout } = await execFileAsync2("gh", args, {
|
|
6243
|
+
encoding: "utf8",
|
|
6244
|
+
cwd: windowsCwdToWslPath(cwd)
|
|
6245
|
+
});
|
|
6246
|
+
value = parse3(stdout);
|
|
6247
|
+
} catch {
|
|
6248
|
+
value = fallback;
|
|
6249
|
+
}
|
|
6250
|
+
cache.set(cwd, { value, expires: now + CACHE_TTL_MS });
|
|
6251
|
+
return value;
|
|
6252
|
+
};
|
|
6253
|
+
}
|
|
6254
|
+
|
|
6255
|
+
// src/commands/sessions/web/prList.ts
|
|
6256
|
+
var getOpenPrs = createCachedGhJson(
|
|
6257
|
+
["pr", "list", "--state", "open", "--json", "number,title,author,createdAt"],
|
|
6258
|
+
(stdout) => {
|
|
6259
|
+
const parsed = JSON.parse(stdout);
|
|
6260
|
+
if (!Array.isArray(parsed)) return [];
|
|
6261
|
+
return parsed.map((pr) => ({
|
|
6262
|
+
number: pr.number,
|
|
6263
|
+
title: pr.title,
|
|
6264
|
+
author: pr.author?.name || pr.author?.login || "unknown",
|
|
6265
|
+
createdAt: pr.createdAt
|
|
6266
|
+
}));
|
|
6267
|
+
},
|
|
6268
|
+
[]
|
|
6269
|
+
);
|
|
6270
|
+
async function prList(req, res) {
|
|
6271
|
+
const cwd = getCwdParam(req, res);
|
|
6272
|
+
if (!cwd) return;
|
|
6273
|
+
respondJson(res, 200, { prs: await getOpenPrs(cwd) });
|
|
6274
|
+
}
|
|
6275
|
+
|
|
6276
|
+
// src/commands/sessions/web/prStatus.ts
|
|
6277
|
+
var getPr = createCachedGhJson(
|
|
6278
|
+
["pr", "view", "--json", "number,title,author,createdAt"],
|
|
6279
|
+
(stdout) => {
|
|
6280
|
+
const parsed = JSON.parse(stdout);
|
|
6281
|
+
if (typeof parsed.number !== "number") return null;
|
|
6282
|
+
return {
|
|
6283
|
+
number: parsed.number,
|
|
6284
|
+
title: parsed.title ?? "",
|
|
6285
|
+
author: parsed.author?.name || parsed.author?.login || "unknown",
|
|
6286
|
+
createdAt: parsed.createdAt ?? ""
|
|
6287
|
+
};
|
|
6288
|
+
},
|
|
6289
|
+
null
|
|
6290
|
+
);
|
|
6291
|
+
async function prStatus(req, res) {
|
|
6292
|
+
const cwd = getCwdParam(req, res);
|
|
6293
|
+
if (!cwd) return;
|
|
6294
|
+
respondJson(res, 200, { pr: await getPr(cwd) });
|
|
6295
|
+
}
|
|
6296
|
+
|
|
6229
6297
|
// src/commands/sessions/daemon/stopDaemon.ts
|
|
6230
6298
|
var STOP_TIMEOUT_MS = 5e3;
|
|
6231
6299
|
async function stopDaemon() {
|
|
@@ -6357,6 +6425,8 @@ var routes2 = {
|
|
|
6357
6425
|
"POST /api/restart": restartWeb,
|
|
6358
6426
|
"GET /api/github-url": githubUrl,
|
|
6359
6427
|
"GET /api/git-status": gitStatus,
|
|
6428
|
+
"GET /api/pr-status": prStatus,
|
|
6429
|
+
"GET /api/pr-list": prList,
|
|
6360
6430
|
"GET /api/news/items": listNewsItems,
|
|
6361
6431
|
"GET /api/usage/history": listUsageHistory,
|
|
6362
6432
|
"GET /api/backups/list": getBackups
|
|
@@ -20596,6 +20666,8 @@ function broadcast(clients, msg) {
|
|
|
20596
20666
|
function toSessionInfo({
|
|
20597
20667
|
id: id2,
|
|
20598
20668
|
name,
|
|
20669
|
+
title,
|
|
20670
|
+
subtitle,
|
|
20599
20671
|
commandType,
|
|
20600
20672
|
status: status2,
|
|
20601
20673
|
startedAt,
|
|
@@ -20614,6 +20686,8 @@ function toSessionInfo({
|
|
|
20614
20686
|
return {
|
|
20615
20687
|
id: id2,
|
|
20616
20688
|
name,
|
|
20689
|
+
title,
|
|
20690
|
+
subtitle,
|
|
20617
20691
|
commandType,
|
|
20618
20692
|
status: status2,
|
|
20619
20693
|
startedAt,
|
|
@@ -20752,11 +20826,13 @@ function shellEscape(s) {
|
|
|
20752
20826
|
}
|
|
20753
20827
|
|
|
20754
20828
|
// src/commands/sessions/daemon/createAssistSession.ts
|
|
20755
|
-
function createAssistSession(id2, assistArgs, cwd) {
|
|
20829
|
+
function createAssistSession(id2, assistArgs, cwd, meta) {
|
|
20756
20830
|
const startedAt = Date.now();
|
|
20757
20831
|
return {
|
|
20758
20832
|
id: id2,
|
|
20759
20833
|
name: `assist ${assistArgs.join(" ")}`,
|
|
20834
|
+
title: meta?.title,
|
|
20835
|
+
subtitle: meta?.subtitle,
|
|
20760
20836
|
commandType: "assist",
|
|
20761
20837
|
status: "running",
|
|
20762
20838
|
startedAt,
|
|
@@ -21187,7 +21263,7 @@ function watchActivity(session, notify2) {
|
|
|
21187
21263
|
} catch {
|
|
21188
21264
|
return;
|
|
21189
21265
|
}
|
|
21190
|
-
|
|
21266
|
+
reconcileActivity(session.id, session.activity);
|
|
21191
21267
|
let timer = null;
|
|
21192
21268
|
const read = () => {
|
|
21193
21269
|
timer = null;
|
|
@@ -21984,8 +22060,10 @@ var SessionManager = class {
|
|
|
21984
22060
|
spawnRun(runName, runArgs, cwd) {
|
|
21985
22061
|
return this.spawnWith((id2) => createRunSession(id2, runName, runArgs, cwd));
|
|
21986
22062
|
}
|
|
21987
|
-
spawnAssist(assistArgs, cwd) {
|
|
21988
|
-
return this.spawnWith(
|
|
22063
|
+
spawnAssist(assistArgs, cwd, meta) {
|
|
22064
|
+
return this.spawnWith(
|
|
22065
|
+
(id2) => createAssistSession(id2, assistArgs, cwd, meta)
|
|
22066
|
+
);
|
|
21989
22067
|
}
|
|
21990
22068
|
resume(sessionId, cwd, name) {
|
|
21991
22069
|
return this.spawnWith((id2) => resumeSession(id2, sessionId, cwd, name));
|
|
@@ -22052,7 +22130,14 @@ import * as fs30 from "fs";
|
|
|
22052
22130
|
import * as path50 from "path";
|
|
22053
22131
|
|
|
22054
22132
|
// src/commands/sessions/shared/deriveHistoryFields.ts
|
|
22055
|
-
var KNOWN = [
|
|
22133
|
+
var KNOWN = [
|
|
22134
|
+
"draft",
|
|
22135
|
+
"next",
|
|
22136
|
+
"bug",
|
|
22137
|
+
"refine",
|
|
22138
|
+
"review",
|
|
22139
|
+
"run"
|
|
22140
|
+
];
|
|
22056
22141
|
function deriveHistoryFields(commandName, commandArgs, name) {
|
|
22057
22142
|
const fields = {};
|
|
22058
22143
|
const sessionType = deriveSessionType(commandName, name);
|
|
@@ -22319,13 +22404,7 @@ function safeParse2(line) {
|
|
|
22319
22404
|
}
|
|
22320
22405
|
}
|
|
22321
22406
|
|
|
22322
|
-
// src/commands/sessions/daemon/
|
|
22323
|
-
function creator(isNew, spawn12) {
|
|
22324
|
-
return (client, m, d) => {
|
|
22325
|
-
if (m.windowsProxy.route(client, d)) return;
|
|
22326
|
-
sendTo(client, { type: "created", sessionId: spawn12(m, d), isNew });
|
|
22327
|
-
};
|
|
22328
|
-
}
|
|
22407
|
+
// src/commands/sessions/daemon/lifecycleHandlers.ts
|
|
22329
22408
|
function handleHistory(client) {
|
|
22330
22409
|
discoverSessions().then(
|
|
22331
22410
|
(sessions) => sendTo(client, { type: "history", sessions })
|
|
@@ -22342,6 +22421,19 @@ function handleShutdown(client, manager) {
|
|
|
22342
22421
|
sendTo(client, { type: "shutting-down" });
|
|
22343
22422
|
setImmediate(() => process.exit(0));
|
|
22344
22423
|
}
|
|
22424
|
+
var lifecycleHandlers = {
|
|
22425
|
+
history: handleHistory,
|
|
22426
|
+
"fetch-transcript": handleFetchTranscript,
|
|
22427
|
+
shutdown: handleShutdown
|
|
22428
|
+
};
|
|
22429
|
+
|
|
22430
|
+
// src/commands/sessions/daemon/messageHandlers.ts
|
|
22431
|
+
function creator(isNew, spawn12) {
|
|
22432
|
+
return (client, m, d) => {
|
|
22433
|
+
if (m.windowsProxy.route(client, d)) return;
|
|
22434
|
+
sendTo(client, { type: "created", sessionId: spawn12(m, d), isNew });
|
|
22435
|
+
};
|
|
22436
|
+
}
|
|
22345
22437
|
function routed(local) {
|
|
22346
22438
|
return (client, m, d) => {
|
|
22347
22439
|
if (!m.windowsProxy.route(client, d)) local(client, m, d);
|
|
@@ -22367,7 +22459,11 @@ var messageHandlers = {
|
|
|
22367
22459
|
true,
|
|
22368
22460
|
(m, d) => m.spawnAssist(
|
|
22369
22461
|
d.assistArgs ?? [],
|
|
22370
|
-
d.cwd
|
|
22462
|
+
d.cwd,
|
|
22463
|
+
{
|
|
22464
|
+
title: d.title,
|
|
22465
|
+
subtitle: d.subtitle
|
|
22466
|
+
}
|
|
22371
22467
|
)
|
|
22372
22468
|
),
|
|
22373
22469
|
resume: creator(
|
|
@@ -22378,9 +22474,7 @@ var messageHandlers = {
|
|
|
22378
22474
|
d.name
|
|
22379
22475
|
)
|
|
22380
22476
|
),
|
|
22381
|
-
|
|
22382
|
-
"fetch-transcript": handleFetchTranscript,
|
|
22383
|
-
shutdown: handleShutdown,
|
|
22477
|
+
...lifecycleHandlers,
|
|
22384
22478
|
drain: (client, m) => sendTo(client, { type: "drained", count: m.drain() }),
|
|
22385
22479
|
limits: (_client, m, d) => m.clients.updateLimits(d.rateLimits),
|
|
22386
22480
|
input: routed(
|