spur-board 0.8.2 → 0.9.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/mcp.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { j as ERRORS, s as OPERATIONS, u as renderMcpError } from "./src-g7u1onIP.mjs";
2
- import { i as CliError, n as requestOperation } from "./client-D4cveOHQ.mjs";
3
- import { a as memoryVerdictCache, r as compareCatalogs, s as loadClientConfig, t as checkCatalog } from "./config-B1fVOLzp.mjs";
1
+ import { N as ERRORS, f as renderMcpError, l as OPERATIONS } from "./src-DyDmiehC.mjs";
2
+ import { i as CliError, n as requestOperation } from "./client-C4Ee3Gfs.mjs";
3
+ import { a as memoryVerdictCache, r as compareCatalogs, s as loadClientConfig, t as checkCatalog } from "./config-BmT8hPi8.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { readFileSync } from "node:fs";
6
6
  import { z } from "zod";
@@ -1638,7 +1638,14 @@ const OPERATIONS = [
1638
1638
  sources: z.array(sourceViewSchema).describe("Freshness and availability of each source."),
1639
1639
  warmingUp: z.boolean().describe("Whether required sources still need a complete poll."),
1640
1640
  spurUnavailable: z.string().nullable().describe("One combined Spur availability line, or null when available."),
1641
- hostLoad: z.string().nullable().describe("Host-load episode line, or null when absent.")
1641
+ hostLoad: z.string().nullable().describe("Host-load episode line, or null when absent."),
1642
+ transport: z.array(z.strictObject({
1643
+ gateway: z.string().min(1).describe("Chat gateway kind."),
1644
+ state: z.enum(["up", "down"]).describe("down while delivery to any space of the gateway is suspended."),
1645
+ since: z.iso.datetime().nullable().describe("When the earliest outage started, ISO 8601 UTC, or null when up."),
1646
+ reason: z.string().nullable().describe("Reason of the earliest outage, or null when up."),
1647
+ spaces: z.array(z.enum(SPACE_IDS)).describe("Spaces whose delivery is suspended.")
1648
+ }).describe("Transport health of one gateway.")).describe("Transport health of each chat gateway.")
1642
1649
  }),
1643
1650
  grants: operatorOrProjectAgent,
1644
1651
  errors: ["not_found"],
@@ -1667,7 +1674,8 @@ const OPERATIONS = [
1667
1674
  sources: [],
1668
1675
  warmingUp: true,
1669
1676
  spurUnavailable: null,
1670
- hostLoad: null
1677
+ hostLoad: null,
1678
+ transport: []
1671
1679
  }
1672
1680
  }]
1673
1681
  }),
@@ -2696,4 +2704,22 @@ var AdapterError = class extends Error {
2696
2704
  }
2697
2705
  };
2698
2706
  //#endregion
2699
- export { taskKeySchema as A, requiredSecretKeys as B, sessionFactsSchema as C, errorCodeOf as D, encodeActorId as E, DEFAULT_HTTP_PORT as F, DEFAULT_SLACK_APP_NAME as I, DEFAULT_SLACK_COMMAND as L, errorContextSchema as M, errorEnvelopeSchema as N, parseActorId as O, successEnvelopeSchema as P, RESERVED_PROJECT as R, prRefSchema as S, actorIdSchema as T, SLACK_BOT_SCOPES as V, EVENT_KINDS as _, buildCatalogSnapshot as a, SESSION_STATUSES as b, renderHttpProblem as c, SPACE_IDS as d, conversationRefSchema as f, userIdSchema as g, messageRefSchema as h, sourceCursorSchema as i, ERRORS as j, parseRef as k, renderJsonError as l, interactionRefSchema as m, batchSchema as n, roleCanUseOperation as o, inboundEventSchema as p, entityRefSchema as r, OPERATIONS as s, AdapterError as t, renderMcpError as u, eventPayloadSchemas as v, ticketFactsSchema as w, prFactsSchema as x, SESSION_HEALTH_STATES as y, configSchema as z };
2707
+ //#region ../contracts/src/systemd.ts
2708
+ /**
2709
+ * systemd user-unit policy shared by the CLI unit writer and the daemon's board tick.
2710
+ *
2711
+ * The daemon notifies systemd by spawning `systemd-notify`, so the notifying process is a child
2712
+ * of the main PID: the unit needs `NotifyAccess=all`. `WATCHDOG_MS` is three board ticks, so a
2713
+ * single slow or failed tick does not restart the daemon.
2714
+ */
2715
+ const BOARD_TICK_MS = 6e4;
2716
+ const SYSTEMD_SERVICE_SETTINGS = [
2717
+ "Type=notify",
2718
+ "NotifyAccess=all",
2719
+ `WatchdogSec=${String(3 * BOARD_TICK_MS)}ms`,
2720
+ "Restart=on-failure",
2721
+ "RestartSec=5s",
2722
+ "TimeoutStopSec=15s"
2723
+ ];
2724
+ //#endregion
2725
+ export { parseActorId as A, RESERVED_PROJECT as B, prFactsSchema as C, actorIdSchema as D, ticketFactsSchema as E, errorEnvelopeSchema as F, requiredSecretKeys as H, successEnvelopeSchema as I, DEFAULT_HTTP_PORT as L, taskKeySchema as M, ERRORS as N, encodeActorId as O, errorContextSchema as P, DEFAULT_SLACK_APP_NAME as R, SESSION_STATUSES as S, sessionFactsSchema as T, SLACK_BOT_SCOPES as U, configSchema as V, messageRefSchema as _, entityRefSchema as a, eventPayloadSchemas as b, roleCanUseOperation as c, renderJsonError as d, renderMcpError as f, interactionRefSchema as g, inboundEventSchema as h, batchSchema as i, parseRef as j, errorCodeOf as k, OPERATIONS as l, conversationRefSchema as m, SYSTEMD_SERVICE_SETTINGS as n, sourceCursorSchema as o, SPACE_IDS as p, AdapterError as r, buildCatalogSnapshot as s, BOARD_TICK_MS as t, renderHttpProblem as u, userIdSchema as v, prRefSchema as w, SESSION_HEALTH_STATES as x, EVENT_KINDS as y, DEFAULT_SLACK_COMMAND as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spur-board",
3
- "version": "0.8.2",
3
+ "version": "0.9.1",
4
4
  "license": "MIT",
5
5
  "engines": {
6
6
  "node": "^24.12.0 || ^26.0.0"
@@ -6,6 +6,6 @@ Use this when the installed package is older than the intended release. Keep com
6
6
  2. Install the newer package with the Node and user prefix visible to live Spur sessions. Verify `board --version` there. Do not reinstall a matching package.
7
7
  3. If skills are older, ask before writing agent skill folders, run `board skills install`, and verify both installed copies. Record the install time so older live sessions can be identified.
8
8
  For a local same-version trial, compare packed and installed bytes too; a matching stamp can hide old content.
9
- 4. Compare the unit's absolute Node and daemon paths with the newly selected Node and installed package. If either path changed, run the new package's `board service install`; it rewrites the unit, reloads systemd, and restarts an active service. If paths are unchanged but the daemon version changed, run `board service restart`. Do not restart twice or restart an unchanged service.
9
+ 4. Before installing, note whether `board service status` reports `active` as `active`. Then run the new package's `board service install`: it rewrites the unit only when it differs, reloads systemd, starts a stopped service, and restarts an active service only when the unit changed. Run `board service restart` only when the service was active before install, install reported `changed` as `false`, and the daemon version changed. Do not restart twice or restart an unchanged service.
10
10
  5. Run `board doctor --json` until no blocking check remains. Report live sessions that still use the older skill and ask the operator to restart those sessions. Do not assume an existing agent or MCP process reloaded updated files.
11
11
  6. Never rewrite settled config, reissue an operator token, uninstall the service, or revoke a token as part of an update.