@staff0rd/assist 0.329.2 → 0.330.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/dist/commands/sessions/web/bundle.js +92 -92
- package/dist/index.js +106 -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.0",
|
|
10
10
|
type: "module",
|
|
11
11
|
main: "dist/index.js",
|
|
12
12
|
bin: {
|
|
@@ -6226,6 +6226,68 @@ 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 getPrNumber = createCachedGhJson(
|
|
6278
|
+
["pr", "view", "--json", "number"],
|
|
6279
|
+
(stdout) => {
|
|
6280
|
+
const parsed = JSON.parse(stdout);
|
|
6281
|
+
return typeof parsed.number === "number" ? parsed.number : null;
|
|
6282
|
+
},
|
|
6283
|
+
null
|
|
6284
|
+
);
|
|
6285
|
+
async function prStatus(req, res) {
|
|
6286
|
+
const cwd = getCwdParam(req, res);
|
|
6287
|
+
if (!cwd) return;
|
|
6288
|
+
respondJson(res, 200, { number: await getPrNumber(cwd) });
|
|
6289
|
+
}
|
|
6290
|
+
|
|
6229
6291
|
// src/commands/sessions/daemon/stopDaemon.ts
|
|
6230
6292
|
var STOP_TIMEOUT_MS = 5e3;
|
|
6231
6293
|
async function stopDaemon() {
|
|
@@ -6357,6 +6419,8 @@ var routes2 = {
|
|
|
6357
6419
|
"POST /api/restart": restartWeb,
|
|
6358
6420
|
"GET /api/github-url": githubUrl,
|
|
6359
6421
|
"GET /api/git-status": gitStatus,
|
|
6422
|
+
"GET /api/pr-status": prStatus,
|
|
6423
|
+
"GET /api/pr-list": prList,
|
|
6360
6424
|
"GET /api/news/items": listNewsItems,
|
|
6361
6425
|
"GET /api/usage/history": listUsageHistory,
|
|
6362
6426
|
"GET /api/backups/list": getBackups
|
|
@@ -20596,6 +20660,8 @@ function broadcast(clients, msg) {
|
|
|
20596
20660
|
function toSessionInfo({
|
|
20597
20661
|
id: id2,
|
|
20598
20662
|
name,
|
|
20663
|
+
title,
|
|
20664
|
+
subtitle,
|
|
20599
20665
|
commandType,
|
|
20600
20666
|
status: status2,
|
|
20601
20667
|
startedAt,
|
|
@@ -20614,6 +20680,8 @@ function toSessionInfo({
|
|
|
20614
20680
|
return {
|
|
20615
20681
|
id: id2,
|
|
20616
20682
|
name,
|
|
20683
|
+
title,
|
|
20684
|
+
subtitle,
|
|
20617
20685
|
commandType,
|
|
20618
20686
|
status: status2,
|
|
20619
20687
|
startedAt,
|
|
@@ -20730,7 +20798,7 @@ function ensureSpawnHelperExecutable() {
|
|
|
20730
20798
|
function spawnPty(args, cwd, sessionId) {
|
|
20731
20799
|
ensureSpawnHelperExecutable();
|
|
20732
20800
|
const shell = process.platform === "win32" ? "cmd.exe" : process.env.SHELL ?? "bash";
|
|
20733
|
-
const shellArgs = process.platform === "win32" ? ["/c", ...args] : ["-c", `exec ${args.map(shellEscape).join(" ")}`];
|
|
20801
|
+
const shellArgs = process.platform === "win32" ? ["/c", ...args] : ["-l", "-c", `exec ${args.map(shellEscape).join(" ")}`];
|
|
20734
20802
|
const { CLAUDE_CODE_CHILD_SESSION: _childSession, ...parentEnv } = process.env;
|
|
20735
20803
|
return pty.spawn(shell, shellArgs, {
|
|
20736
20804
|
name: "xterm-256color",
|
|
@@ -20739,6 +20807,7 @@ function spawnPty(args, cwd, sessionId) {
|
|
|
20739
20807
|
cwd: cwd ?? process.cwd(),
|
|
20740
20808
|
env: {
|
|
20741
20809
|
...parentEnv,
|
|
20810
|
+
ASSIST_SESSION: "1",
|
|
20742
20811
|
...sessionId && {
|
|
20743
20812
|
ASSIST_SESSION_ID: sessionId,
|
|
20744
20813
|
ASSIST_ACTIVITY_ID: sessionId
|
|
@@ -20751,11 +20820,13 @@ function shellEscape(s) {
|
|
|
20751
20820
|
}
|
|
20752
20821
|
|
|
20753
20822
|
// src/commands/sessions/daemon/createAssistSession.ts
|
|
20754
|
-
function createAssistSession(id2, assistArgs, cwd) {
|
|
20823
|
+
function createAssistSession(id2, assistArgs, cwd, meta) {
|
|
20755
20824
|
const startedAt = Date.now();
|
|
20756
20825
|
return {
|
|
20757
20826
|
id: id2,
|
|
20758
20827
|
name: `assist ${assistArgs.join(" ")}`,
|
|
20828
|
+
title: meta?.title,
|
|
20829
|
+
subtitle: meta?.subtitle,
|
|
20759
20830
|
commandType: "assist",
|
|
20760
20831
|
status: "running",
|
|
20761
20832
|
startedAt,
|
|
@@ -21983,8 +22054,10 @@ var SessionManager = class {
|
|
|
21983
22054
|
spawnRun(runName, runArgs, cwd) {
|
|
21984
22055
|
return this.spawnWith((id2) => createRunSession(id2, runName, runArgs, cwd));
|
|
21985
22056
|
}
|
|
21986
|
-
spawnAssist(assistArgs, cwd) {
|
|
21987
|
-
return this.spawnWith(
|
|
22057
|
+
spawnAssist(assistArgs, cwd, meta) {
|
|
22058
|
+
return this.spawnWith(
|
|
22059
|
+
(id2) => createAssistSession(id2, assistArgs, cwd, meta)
|
|
22060
|
+
);
|
|
21988
22061
|
}
|
|
21989
22062
|
resume(sessionId, cwd, name) {
|
|
21990
22063
|
return this.spawnWith((id2) => resumeSession(id2, sessionId, cwd, name));
|
|
@@ -22051,7 +22124,14 @@ import * as fs30 from "fs";
|
|
|
22051
22124
|
import * as path50 from "path";
|
|
22052
22125
|
|
|
22053
22126
|
// src/commands/sessions/shared/deriveHistoryFields.ts
|
|
22054
|
-
var KNOWN = [
|
|
22127
|
+
var KNOWN = [
|
|
22128
|
+
"draft",
|
|
22129
|
+
"next",
|
|
22130
|
+
"bug",
|
|
22131
|
+
"refine",
|
|
22132
|
+
"review",
|
|
22133
|
+
"run"
|
|
22134
|
+
];
|
|
22055
22135
|
function deriveHistoryFields(commandName, commandArgs, name) {
|
|
22056
22136
|
const fields = {};
|
|
22057
22137
|
const sessionType = deriveSessionType(commandName, name);
|
|
@@ -22318,13 +22398,7 @@ function safeParse2(line) {
|
|
|
22318
22398
|
}
|
|
22319
22399
|
}
|
|
22320
22400
|
|
|
22321
|
-
// src/commands/sessions/daemon/
|
|
22322
|
-
function creator(isNew, spawn12) {
|
|
22323
|
-
return (client, m, d) => {
|
|
22324
|
-
if (m.windowsProxy.route(client, d)) return;
|
|
22325
|
-
sendTo(client, { type: "created", sessionId: spawn12(m, d), isNew });
|
|
22326
|
-
};
|
|
22327
|
-
}
|
|
22401
|
+
// src/commands/sessions/daemon/lifecycleHandlers.ts
|
|
22328
22402
|
function handleHistory(client) {
|
|
22329
22403
|
discoverSessions().then(
|
|
22330
22404
|
(sessions) => sendTo(client, { type: "history", sessions })
|
|
@@ -22341,6 +22415,19 @@ function handleShutdown(client, manager) {
|
|
|
22341
22415
|
sendTo(client, { type: "shutting-down" });
|
|
22342
22416
|
setImmediate(() => process.exit(0));
|
|
22343
22417
|
}
|
|
22418
|
+
var lifecycleHandlers = {
|
|
22419
|
+
history: handleHistory,
|
|
22420
|
+
"fetch-transcript": handleFetchTranscript,
|
|
22421
|
+
shutdown: handleShutdown
|
|
22422
|
+
};
|
|
22423
|
+
|
|
22424
|
+
// src/commands/sessions/daemon/messageHandlers.ts
|
|
22425
|
+
function creator(isNew, spawn12) {
|
|
22426
|
+
return (client, m, d) => {
|
|
22427
|
+
if (m.windowsProxy.route(client, d)) return;
|
|
22428
|
+
sendTo(client, { type: "created", sessionId: spawn12(m, d), isNew });
|
|
22429
|
+
};
|
|
22430
|
+
}
|
|
22344
22431
|
function routed(local) {
|
|
22345
22432
|
return (client, m, d) => {
|
|
22346
22433
|
if (!m.windowsProxy.route(client, d)) local(client, m, d);
|
|
@@ -22366,7 +22453,11 @@ var messageHandlers = {
|
|
|
22366
22453
|
true,
|
|
22367
22454
|
(m, d) => m.spawnAssist(
|
|
22368
22455
|
d.assistArgs ?? [],
|
|
22369
|
-
d.cwd
|
|
22456
|
+
d.cwd,
|
|
22457
|
+
{
|
|
22458
|
+
title: d.title,
|
|
22459
|
+
subtitle: d.subtitle
|
|
22460
|
+
}
|
|
22370
22461
|
)
|
|
22371
22462
|
),
|
|
22372
22463
|
resume: creator(
|
|
@@ -22377,9 +22468,7 @@ var messageHandlers = {
|
|
|
22377
22468
|
d.name
|
|
22378
22469
|
)
|
|
22379
22470
|
),
|
|
22380
|
-
|
|
22381
|
-
"fetch-transcript": handleFetchTranscript,
|
|
22382
|
-
shutdown: handleShutdown,
|
|
22471
|
+
...lifecycleHandlers,
|
|
22383
22472
|
drain: (client, m) => sendTo(client, { type: "drained", count: m.drain() }),
|
|
22384
22473
|
limits: (_client, m, d) => m.clients.updateLimits(d.rateLimits),
|
|
22385
22474
|
input: routed(
|