@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/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.329.3",
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
- if (session.restored) reconcileActivity(session.id, session.activity);
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((id2) => createAssistSession(id2, assistArgs, cwd));
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 = ["draft", "next", "bug", "refine", "run"];
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/messageHandlers.ts
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
- history: handleHistory,
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(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@staff0rd/assist",
3
- "version": "0.329.3",
3
+ "version": "0.330.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {