@exaudeus/workrail 3.24.2 → 3.24.4

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.
@@ -670,12 +670,12 @@
670
670
  "bytes": 6002
671
671
  },
672
672
  "mcp-server.d.ts": {
673
- "sha256": "4ef3c55720fc5deb6fff14a1be5958d9cddd94ce4037af0cb842e3f3ce0cfac0",
674
- "bytes": 295
673
+ "sha256": "01d30540da2d1fbada4da5cb54fc287b13a53940d5cd6e9ccb0fd29fc3a71720",
674
+ "bytes": 409
675
675
  },
676
676
  "mcp-server.js": {
677
- "sha256": "ef9c98e49ea95d556e8e8328ff235d7b631a6ef72d1480c22b9409ae4b1c9b5b",
678
- "bytes": 2687
677
+ "sha256": "1ab44bb05d75fe445fce6ea819c489e93e1d39ffedcd7a80c566e7085a0dd796",
678
+ "bytes": 3577
679
679
  },
680
680
  "mcp/assert-output.d.ts": {
681
681
  "sha256": "f1b821c3652423b15a09d2d1c5a042ee565a503c3d7196bd8220fbe697e0dc75",
@@ -1098,7 +1098,7 @@
1098
1098
  "bytes": 70
1099
1099
  },
1100
1100
  "mcp/transports/http-entry.js": {
1101
- "sha256": "fdebcd58e111f3051081003599e8608fa1becf20abf97a666a957f8048c95334",
1101
+ "sha256": "29de54000abc8c0f5aae334c1866bf4ac4198ba29e8ce5a3f0e61a7f0128eb40",
1102
1102
  "bytes": 3314
1103
1103
  },
1104
1104
  "mcp/transports/http-listener.d.ts": {
@@ -56,10 +56,10 @@ async function startHttpServer(port) {
56
56
  listener.app.post('/mcp', (req, res) => transport.handleRequest(req, res, req.body));
57
57
  listener.app.get('/mcp', (req, res) => transport.handleRequest(req, res));
58
58
  listener.app.delete('/mcp', (req, res) => transport.handleRequest(req, res));
59
+ await server.connect(transport);
59
60
  listener.app.get('/workrail-health', (_req, res) => {
60
61
  res.json({ service: 'workrail' });
61
62
  });
62
- await server.connect(transport);
63
63
  const boundPort = listener.getBoundPort();
64
64
  console.error('[Transport] WorkRail MCP Server running on HTTP');
65
65
  console.error(`[Transport] MCP endpoint: http://localhost:${boundPort}/mcp`);
@@ -3,3 +3,4 @@ export { startStdioServer } from './mcp/transports/stdio-entry.js';
3
3
  export { startHttpServer } from './mcp/transports/http-entry.js';
4
4
  export { startBridgeServer, detectHealthyPrimary } from './mcp/transports/bridge-entry.js';
5
5
  export { composeServer } from './mcp/server.js';
6
+ export declare function waitForStdinReadable(timeoutMs: number, stdin?: NodeJS.ReadableStream): Promise<boolean>;
@@ -2,6 +2,7 @@
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.composeServer = exports.detectHealthyPrimary = exports.startBridgeServer = exports.startHttpServer = exports.startStdioServer = void 0;
5
+ exports.waitForStdinReadable = waitForStdinReadable;
5
6
  const transport_mode_js_1 = require("./mcp/transports/transport-mode.js");
6
7
  const stdio_entry_js_1 = require("./mcp/transports/stdio-entry.js");
7
8
  const http_entry_js_1 = require("./mcp/transports/http-entry.js");
@@ -17,11 +18,32 @@ Object.defineProperty(exports, "detectHealthyPrimary", { enumerable: true, get:
17
18
  var server_js_1 = require("./mcp/server.js");
18
19
  Object.defineProperty(exports, "composeServer", { enumerable: true, get: function () { return server_js_1.composeServer; } });
19
20
  const DEFAULT_MCP_PORT = 3100;
21
+ const STDIO_CLIENT_PROBE_MS = 150;
22
+ function waitForStdinReadable(timeoutMs, stdin = process.stdin) {
23
+ return new Promise((resolve) => {
24
+ stdin.pause();
25
+ const timer = setTimeout(() => {
26
+ stdin.removeListener('readable', onReadable);
27
+ resolve(false);
28
+ }, timeoutMs);
29
+ const onReadable = () => {
30
+ clearTimeout(timer);
31
+ stdin.removeListener('readable', onReadable);
32
+ resolve(true);
33
+ };
34
+ stdin.once('readable', onReadable);
35
+ });
36
+ }
20
37
  async function main() {
21
38
  const mode = (0, transport_mode_js_1.resolveTransportMode)(process.env);
22
39
  if (mode.kind === 'stdio') {
23
40
  const primaryPort = await (0, bridge_entry_js_1.detectHealthyPrimary)(DEFAULT_MCP_PORT);
24
41
  if (primaryPort != null) {
42
+ const hasClient = await waitForStdinReadable(STDIO_CLIENT_PROBE_MS, process.stdin);
43
+ if (!hasClient) {
44
+ console.error(`[Startup] Primary on :${primaryPort}, no stdio client within ${STDIO_CLIENT_PROBE_MS}ms — exiting`);
45
+ process.exit(0);
46
+ }
25
47
  console.error(`[Startup] Primary detected on :${primaryPort} — starting in bridge mode`);
26
48
  try {
27
49
  await (0, bridge_entry_js_1.startBridgeServer)(primaryPort);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exaudeus/workrail",
3
- "version": "3.24.2",
3
+ "version": "3.24.4",
4
4
  "description": "Step-by-step workflow enforcement for AI agents via MCP",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -47,8 +47,8 @@
47
47
  "validate:workflow-discovery": "node scripts/validate-workflow-discovery.js",
48
48
  "precommit": "npm run validate:registry",
49
49
  "preinstall": "node -e \"const v=parseInt(process.versions.node.split('.')[0],10); if(v<20){console.error('WorkRail requires Node.js >=20. Current: '+process.versions.node+'\\nPlease upgrade: https://nodejs.org/'); process.exit(1);}\"",
50
- "dev:mcp": "pkill -f 'dist/mcp-server.js' 2>/dev/null; sleep 0.5; WORKRAIL_TRANSPORT=http WORKRAIL_ENABLE_SESSION_TOOLS=true node dist/mcp-server.js",
51
- "dev:mcp:watch": "WORKRAIL_TRANSPORT=http WORKRAIL_ENABLE_SESSION_TOOLS=true nodemon --watch dist --ext js --delay 2 --exec 'node dist/mcp-server.js'",
50
+ "dev:mcp": "pkill -f \"$(pwd)/dist/mcp-server.js\" 2>/dev/null; sleep 0.5; WORKRAIL_TRANSPORT=http WORKRAIL_ENABLE_SESSION_TOOLS=true node dist/mcp-server.js",
51
+ "dev:mcp:watch": "pkill -f \"$(pwd)/dist/mcp-server.js\" 2>/dev/null; sleep 0.5; WORKRAIL_TRANSPORT=http WORKRAIL_ENABLE_SESSION_TOOLS=true nodemon --watch dist --ext js --delay 2 --exec 'node dist/mcp-server.js'",
52
52
  "web:dev": "npm run build && WORKRAIL_ENABLE_SESSION_TOOLS=true node dist/mcp-server.js",
53
53
  "web:ci": "WORKRAIL_ENABLE_SESSION_TOOLS=true node dist/mcp-server.js",
54
54
  "web:typecheck": "tsc -p tsconfig.web.json",