@staff0rd/assist 0.288.2 → 0.289.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.288.2",
9
+ version: "0.289.0",
10
10
  type: "module",
11
11
  main: "dist/index.js",
12
12
  bin: {
@@ -5215,6 +5215,101 @@ async function openInCode(req, res) {
5215
5215
  }
5216
5216
  }
5217
5217
 
5218
+ // src/commands/sessions/daemon/stopDaemon.ts
5219
+ var STOP_TIMEOUT_MS = 5e3;
5220
+ async function stopDaemon() {
5221
+ let socket;
5222
+ try {
5223
+ socket = await connectToDaemon();
5224
+ } catch {
5225
+ console.log("Sessions daemon is not running");
5226
+ return;
5227
+ }
5228
+ socket.write(`${JSON.stringify({ type: "shutdown" })}
5229
+ `);
5230
+ if (await closedBeforeTimeout(socket)) {
5231
+ console.log("Sessions daemon stopped");
5232
+ } else {
5233
+ console.error(
5234
+ `Sessions daemon did not stop within ${STOP_TIMEOUT_MS / 1e3}s`
5235
+ );
5236
+ process.exitCode = 1;
5237
+ }
5238
+ }
5239
+ function closedBeforeTimeout(socket) {
5240
+ return new Promise((resolve16) => {
5241
+ const timer = setTimeout(() => {
5242
+ socket.destroy();
5243
+ resolve16(false);
5244
+ }, STOP_TIMEOUT_MS);
5245
+ socket.resume();
5246
+ socket.on("error", () => {
5247
+ });
5248
+ socket.once("close", () => {
5249
+ clearTimeout(timer);
5250
+ resolve16(true);
5251
+ });
5252
+ });
5253
+ }
5254
+
5255
+ // src/commands/sessions/daemon/restartDaemon.ts
5256
+ async function restartDaemon() {
5257
+ await stopDaemon();
5258
+ await ensureDaemonRunning("daemon restart");
5259
+ console.log(
5260
+ "Sessions daemon restarted; previously running claude sessions will resume"
5261
+ );
5262
+ }
5263
+
5264
+ // src/commands/sessions/web/restartMenu/reExecWebServer.ts
5265
+ import { spawnSync } from "child_process";
5266
+ function resolveExecve() {
5267
+ return typeof process.execve === "function" ? process.execve.bind(process) : null;
5268
+ }
5269
+ function withNoOpen(args) {
5270
+ return args.includes("--no-open") ? args : [...args, "--no-open"];
5271
+ }
5272
+ function reExecWebServer(deps2 = {}) {
5273
+ const {
5274
+ beforeExec,
5275
+ execveFn = resolveExecve(),
5276
+ spawnSyncFn = spawnSync,
5277
+ exit = (code) => process.exit(code)
5278
+ } = deps2;
5279
+ beforeExec?.();
5280
+ if (execveFn) {
5281
+ execveFn(process.execPath, withNoOpen(process.argv), process.env);
5282
+ return;
5283
+ }
5284
+ const [, ...args] = process.argv;
5285
+ const result = spawnSyncFn(process.execPath, withNoOpen(args), {
5286
+ stdio: "inherit"
5287
+ });
5288
+ exit(result.status ?? 0);
5289
+ }
5290
+
5291
+ // src/commands/sessions/web/restartWeb.ts
5292
+ var TARGETS = ["daemon", "webserver", "both"];
5293
+ async function restartWeb(req, res, deps2 = {}) {
5294
+ const { restartDaemonFn = restartDaemon, reExecFn = reExecWebServer } = deps2;
5295
+ const url = new URL(req.url ?? "/", "http://localhost");
5296
+ const target = url.searchParams.get("target");
5297
+ if (!target || !TARGETS.includes(target)) {
5298
+ respondJson(res, 400, { error: "Invalid target" });
5299
+ return;
5300
+ }
5301
+ await new Promise((resolve16) => {
5302
+ res.once("finish", resolve16);
5303
+ respondJson(res, 200, { ok: true });
5304
+ });
5305
+ if (target === "daemon" || target === "both") {
5306
+ await restartDaemonFn();
5307
+ }
5308
+ if (target === "webserver" || target === "both") {
5309
+ reExecFn();
5310
+ }
5311
+ }
5312
+
5218
5313
  // src/commands/sessions/web/handleRequest.ts
5219
5314
  var require3 = createRequire2(import.meta.url);
5220
5315
  function createCssHandler(packageEntry) {
@@ -5241,6 +5336,7 @@ var routes = {
5241
5336
  "GET /api/backlog/exists": getBacklogExists,
5242
5337
  "POST /api/backlog/init": initBacklog,
5243
5338
  "POST /api/open-in-code": openInCode,
5339
+ "POST /api/restart": restartWeb,
5244
5340
  "GET /api/github-url": githubUrl,
5245
5341
  "GET /api/git-status": gitStatus,
5246
5342
  "GET /api/news/items": listNewsItems
@@ -5560,52 +5656,6 @@ function enableRawMode(stdin, onData) {
5560
5656
  };
5561
5657
  }
5562
5658
 
5563
- // src/commands/sessions/daemon/stopDaemon.ts
5564
- var STOP_TIMEOUT_MS = 5e3;
5565
- async function stopDaemon() {
5566
- let socket;
5567
- try {
5568
- socket = await connectToDaemon();
5569
- } catch {
5570
- console.log("Sessions daemon is not running");
5571
- return;
5572
- }
5573
- socket.write(`${JSON.stringify({ type: "shutdown" })}
5574
- `);
5575
- if (await closedBeforeTimeout(socket)) {
5576
- console.log("Sessions daemon stopped");
5577
- } else {
5578
- console.error(
5579
- `Sessions daemon did not stop within ${STOP_TIMEOUT_MS / 1e3}s`
5580
- );
5581
- process.exitCode = 1;
5582
- }
5583
- }
5584
- function closedBeforeTimeout(socket) {
5585
- return new Promise((resolve16) => {
5586
- const timer = setTimeout(() => {
5587
- socket.destroy();
5588
- resolve16(false);
5589
- }, STOP_TIMEOUT_MS);
5590
- socket.resume();
5591
- socket.on("error", () => {
5592
- });
5593
- socket.once("close", () => {
5594
- clearTimeout(timer);
5595
- resolve16(true);
5596
- });
5597
- });
5598
- }
5599
-
5600
- // src/commands/sessions/daemon/restartDaemon.ts
5601
- async function restartDaemon() {
5602
- await stopDaemon();
5603
- await ensureDaemonRunning("daemon restart");
5604
- console.log(
5605
- "Sessions daemon restarted; previously running claude sessions will resume"
5606
- );
5607
- }
5608
-
5609
5659
  // src/commands/sessions/web/restartMenu/menuItems.ts
5610
5660
  var menuItems = [
5611
5661
  { label: "Restart daemon", action: "restart-daemon" },
@@ -5613,33 +5663,6 @@ var menuItems = [
5613
5663
  { label: "Restart both", action: "restart-both" }
5614
5664
  ];
5615
5665
 
5616
- // src/commands/sessions/web/restartMenu/reExecWebServer.ts
5617
- import { spawnSync } from "child_process";
5618
- function resolveExecve() {
5619
- return typeof process.execve === "function" ? process.execve.bind(process) : null;
5620
- }
5621
- function withNoOpen(args) {
5622
- return args.includes("--no-open") ? args : [...args, "--no-open"];
5623
- }
5624
- function reExecWebServer(deps2 = {}) {
5625
- const {
5626
- beforeExec,
5627
- execveFn = resolveExecve(),
5628
- spawnSyncFn = spawnSync,
5629
- exit = (code) => process.exit(code)
5630
- } = deps2;
5631
- beforeExec?.();
5632
- if (execveFn) {
5633
- execveFn(process.execPath, withNoOpen(process.argv), process.env);
5634
- return;
5635
- }
5636
- const [, ...args] = process.argv;
5637
- const result = spawnSyncFn(process.execPath, withNoOpen(args), {
5638
- stdio: "inherit"
5639
- });
5640
- exit(result.status ?? 0);
5641
- }
5642
-
5643
5666
  // src/commands/sessions/web/restartMenu/resolveOptions.ts
5644
5667
  var CTRL_R = String.fromCharCode(18);
5645
5668
  function resolveOptions(options2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@staff0rd/assist",
3
- "version": "0.288.2",
3
+ "version": "0.289.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {