@staff0rd/assist 0.329.3 → 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/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.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,
@@ -20752,11 +20820,13 @@ function shellEscape(s) {
20752
20820
  }
20753
20821
 
20754
20822
  // src/commands/sessions/daemon/createAssistSession.ts
20755
- function createAssistSession(id2, assistArgs, cwd) {
20823
+ function createAssistSession(id2, assistArgs, cwd, meta) {
20756
20824
  const startedAt = Date.now();
20757
20825
  return {
20758
20826
  id: id2,
20759
20827
  name: `assist ${assistArgs.join(" ")}`,
20828
+ title: meta?.title,
20829
+ subtitle: meta?.subtitle,
20760
20830
  commandType: "assist",
20761
20831
  status: "running",
20762
20832
  startedAt,
@@ -21984,8 +22054,10 @@ var SessionManager = class {
21984
22054
  spawnRun(runName, runArgs, cwd) {
21985
22055
  return this.spawnWith((id2) => createRunSession(id2, runName, runArgs, cwd));
21986
22056
  }
21987
- spawnAssist(assistArgs, cwd) {
21988
- return this.spawnWith((id2) => createAssistSession(id2, assistArgs, cwd));
22057
+ spawnAssist(assistArgs, cwd, meta) {
22058
+ return this.spawnWith(
22059
+ (id2) => createAssistSession(id2, assistArgs, cwd, meta)
22060
+ );
21989
22061
  }
21990
22062
  resume(sessionId, cwd, name) {
21991
22063
  return this.spawnWith((id2) => resumeSession(id2, sessionId, cwd, name));
@@ -22052,7 +22124,14 @@ import * as fs30 from "fs";
22052
22124
  import * as path50 from "path";
22053
22125
 
22054
22126
  // src/commands/sessions/shared/deriveHistoryFields.ts
22055
- var KNOWN = ["draft", "next", "bug", "refine", "run"];
22127
+ var KNOWN = [
22128
+ "draft",
22129
+ "next",
22130
+ "bug",
22131
+ "refine",
22132
+ "review",
22133
+ "run"
22134
+ ];
22056
22135
  function deriveHistoryFields(commandName, commandArgs, name) {
22057
22136
  const fields = {};
22058
22137
  const sessionType = deriveSessionType(commandName, name);
@@ -22319,13 +22398,7 @@ function safeParse2(line) {
22319
22398
  }
22320
22399
  }
22321
22400
 
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
- }
22401
+ // src/commands/sessions/daemon/lifecycleHandlers.ts
22329
22402
  function handleHistory(client) {
22330
22403
  discoverSessions().then(
22331
22404
  (sessions) => sendTo(client, { type: "history", sessions })
@@ -22342,6 +22415,19 @@ function handleShutdown(client, manager) {
22342
22415
  sendTo(client, { type: "shutting-down" });
22343
22416
  setImmediate(() => process.exit(0));
22344
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
+ }
22345
22431
  function routed(local) {
22346
22432
  return (client, m, d) => {
22347
22433
  if (!m.windowsProxy.route(client, d)) local(client, m, d);
@@ -22367,7 +22453,11 @@ var messageHandlers = {
22367
22453
  true,
22368
22454
  (m, d) => m.spawnAssist(
22369
22455
  d.assistArgs ?? [],
22370
- d.cwd
22456
+ d.cwd,
22457
+ {
22458
+ title: d.title,
22459
+ subtitle: d.subtitle
22460
+ }
22371
22461
  )
22372
22462
  ),
22373
22463
  resume: creator(
@@ -22378,9 +22468,7 @@ var messageHandlers = {
22378
22468
  d.name
22379
22469
  )
22380
22470
  ),
22381
- history: handleHistory,
22382
- "fetch-transcript": handleFetchTranscript,
22383
- shutdown: handleShutdown,
22471
+ ...lifecycleHandlers,
22384
22472
  drain: (client, m) => sendTo(client, { type: "drained", count: m.drain() }),
22385
22473
  limits: (_client, m, d) => m.clients.updateLimits(d.rateLimits),
22386
22474
  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.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {