@procedures/peer 0.0.0-stage → 0.1.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +21 -0
  3. package/README.md +725 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/connection/index.d.ts +45 -0
  6. package/dist/connection/index.d.ts.map +1 -0
  7. package/dist/connection/index.js +148 -0
  8. package/dist/connection/index.js.map +1 -0
  9. package/dist/discovery/index.d.ts +30 -0
  10. package/dist/discovery/index.d.ts.map +1 -0
  11. package/dist/discovery/index.js +101 -0
  12. package/dist/discovery/index.js.map +1 -0
  13. package/dist/expose.d.ts +14 -0
  14. package/dist/expose.d.ts.map +1 -0
  15. package/dist/expose.js +16 -0
  16. package/dist/expose.js.map +1 -0
  17. package/dist/index.d.ts +15 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +20 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/input-schemas.d.ts +21 -0
  22. package/dist/input-schemas.d.ts.map +1 -0
  23. package/dist/input-schemas.js +80 -0
  24. package/dist/input-schemas.js.map +1 -0
  25. package/dist/lockfile.d.ts +48 -0
  26. package/dist/lockfile.d.ts.map +1 -0
  27. package/dist/lockfile.js +115 -0
  28. package/dist/lockfile.js.map +1 -0
  29. package/dist/manifest/index.d.ts +8 -0
  30. package/dist/manifest/index.d.ts.map +1 -0
  31. package/dist/manifest/index.js +8 -0
  32. package/dist/manifest/index.js.map +1 -0
  33. package/dist/manifest/json.d.ts +27 -0
  34. package/dist/manifest/json.d.ts.map +1 -0
  35. package/dist/manifest/json.js +24 -0
  36. package/dist/manifest/json.js.map +1 -0
  37. package/dist/manifest/typescript.d.ts +17 -0
  38. package/dist/manifest/typescript.d.ts.map +1 -0
  39. package/dist/manifest/typescript.js +123 -0
  40. package/dist/manifest/typescript.js.map +1 -0
  41. package/dist/module.d.ts +20 -0
  42. package/dist/module.d.ts.map +1 -0
  43. package/dist/module.js +42 -0
  44. package/dist/module.js.map +1 -0
  45. package/dist/output-schemas.d.ts +21 -0
  46. package/dist/output-schemas.d.ts.map +1 -0
  47. package/dist/output-schemas.js +85 -0
  48. package/dist/output-schemas.js.map +1 -0
  49. package/dist/peer/index.d.ts +47 -0
  50. package/dist/peer/index.d.ts.map +1 -0
  51. package/dist/peer/index.js +234 -0
  52. package/dist/peer/index.js.map +1 -0
  53. package/dist/peer/security.d.ts +25 -0
  54. package/dist/peer/security.d.ts.map +1 -0
  55. package/dist/peer/security.js +58 -0
  56. package/dist/peer/security.js.map +1 -0
  57. package/dist/procedures/index.d.ts +24 -0
  58. package/dist/procedures/index.d.ts.map +1 -0
  59. package/dist/procedures/index.js +15 -0
  60. package/dist/procedures/index.js.map +1 -0
  61. package/dist/procedures/manifest.generate.d.ts +11 -0
  62. package/dist/procedures/manifest.generate.d.ts.map +1 -0
  63. package/dist/procedures/manifest.generate.js +97 -0
  64. package/dist/procedures/manifest.generate.js.map +1 -0
  65. package/dist/procedures/server.call.d.ts +30 -0
  66. package/dist/procedures/server.call.d.ts.map +1 -0
  67. package/dist/procedures/server.call.js +60 -0
  68. package/dist/procedures/server.call.js.map +1 -0
  69. package/dist/procedures/server.connect.d.ts +11 -0
  70. package/dist/procedures/server.connect.d.ts.map +1 -0
  71. package/dist/procedures/server.connect.js +35 -0
  72. package/dist/procedures/server.connect.js.map +1 -0
  73. package/dist/procedures/server.connections.d.ts +22 -0
  74. package/dist/procedures/server.connections.d.ts.map +1 -0
  75. package/dist/procedures/server.connections.js +38 -0
  76. package/dist/procedures/server.connections.js.map +1 -0
  77. package/dist/procedures/server.create.d.ts +20 -0
  78. package/dist/procedures/server.create.d.ts.map +1 -0
  79. package/dist/procedures/server.create.js +64 -0
  80. package/dist/procedures/server.create.js.map +1 -0
  81. package/dist/procedures/server.disconnect.d.ts +11 -0
  82. package/dist/procedures/server.disconnect.d.ts.map +1 -0
  83. package/dist/procedures/server.disconnect.js +22 -0
  84. package/dist/procedures/server.disconnect.js.map +1 -0
  85. package/dist/procedures/server.start.d.ts +13 -0
  86. package/dist/procedures/server.start.d.ts.map +1 -0
  87. package/dist/procedures/server.start.js +179 -0
  88. package/dist/procedures/server.start.js.map +1 -0
  89. package/dist/procedures/server.status.d.ts +12 -0
  90. package/dist/procedures/server.status.d.ts.map +1 -0
  91. package/dist/procedures/server.status.js +116 -0
  92. package/dist/procedures/server.status.js.map +1 -0
  93. package/dist/procedures/server.stop.d.ts +11 -0
  94. package/dist/procedures/server.stop.d.ts.map +1 -0
  95. package/dist/procedures/server.stop.js +96 -0
  96. package/dist/procedures/server.stop.js.map +1 -0
  97. package/dist/register.d.ts +8 -0
  98. package/dist/register.d.ts.map +1 -0
  99. package/dist/register.js +14 -0
  100. package/dist/register.js.map +1 -0
  101. package/dist/schema.d.ts +14 -0
  102. package/dist/schema.d.ts.map +1 -0
  103. package/dist/schema.js +14 -0
  104. package/dist/schema.js.map +1 -0
  105. package/dist/types.d.ts +192 -0
  106. package/dist/types.d.ts.map +1 -0
  107. package/dist/types.js +5 -0
  108. package/dist/types.js.map +1 -0
  109. package/package.json +87 -3
  110. package/src/connection/index.ts +219 -0
  111. package/src/discovery/index.ts +137 -0
  112. package/src/expose.ts +17 -0
  113. package/src/index.ts +69 -0
  114. package/src/input-schemas.ts +121 -0
  115. package/src/lockfile.ts +129 -0
  116. package/src/manifest/index.ts +8 -0
  117. package/src/manifest/json.ts +39 -0
  118. package/src/manifest/typescript.ts +148 -0
  119. package/src/module.ts +46 -0
  120. package/src/output-schemas.ts +110 -0
  121. package/src/peer/index.ts +325 -0
  122. package/src/peer/security.ts +58 -0
  123. package/src/procedures/index.ts +32 -0
  124. package/src/procedures/manifest.generate.ts +113 -0
  125. package/src/procedures/server.call.ts +96 -0
  126. package/src/procedures/server.connect.ts +45 -0
  127. package/src/procedures/server.connections.ts +64 -0
  128. package/src/procedures/server.create.ts +84 -0
  129. package/src/procedures/server.disconnect.ts +31 -0
  130. package/src/procedures/server.start.ts +209 -0
  131. package/src/procedures/server.status.ts +139 -0
  132. package/src/procedures/server.stop.ts +121 -0
  133. package/src/register.ts +17 -0
  134. package/src/schema.ts +15 -0
  135. package/src/types.ts +257 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.disconnect.js","sourceRoot":"","sources":["../../src/procedures/server.disconnect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,2BAA2B;AAC3B,MAAM,4BAA4B,GAAG,UAAU,CAAyB,4BAA4B,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,yBAAyB,GAIlC,eAAe,EAAE;KAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;KAC9B,KAAK,CAAC,2BAA2B,CAAC;KAClC,MAAM,CAAC,4BAA4B,CAAC;KACpC,IAAI,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;KAC9E,OAAO,CAAC,KAAK,EAAE,KAA4B,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;KACD,KAAK,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Procedure: server.start
3
+ * Starts the CLI server as a background daemon
4
+ */
5
+ import { type Procedure } from "@procedures/client";
6
+ import type { ServerStartInput, ServerStartOutput } from "../types.js";
7
+ export declare const serverStartProcedure: Procedure<ServerStartInput, ServerStartOutput, {
8
+ description: string;
9
+ args: string[];
10
+ shorts: Record<string, string>;
11
+ }>;
12
+ export type { ServerStartInput, ServerStartOutput };
13
+ //# sourceMappingURL=server.start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.start.d.ts","sourceRoot":"","sources":["../../src/procedures/server.start.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAyEvE,eAAO,MAAM,oBAAoB,EAAE,SAAS,CAC1C,gBAAgB,EAChB,iBAAiB,EACjB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAoH/D,CAAC;AAEX,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Procedure: server.start
3
+ * Starts the CLI server as a background daemon
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ import * as os from "node:os";
9
+ import { createProcedure } from "@procedures/client";
10
+ import { wrapSchema } from "../schema.js";
11
+ import { ServerStartOutputSchema } from "../output-schemas.js";
12
+ import { serverStartInputSchema } from "../input-schemas.js";
13
+ import { checkServer, readLockfileForPort } from "../lockfile.js";
14
+ const MARK_DIR = path.join(os.homedir(), ".mark");
15
+ const SERVERS_DIR = path.join(MARK_DIR, "servers");
16
+ const LOG_PATH = path.join(MARK_DIR, "server.log");
17
+ const LOG_PREV_PATH = path.join(MARK_DIR, "server.log.1");
18
+ const serverStartOutputSchema = wrapSchema(ServerStartOutputSchema);
19
+ /**
20
+ * Check if process is alive
21
+ */
22
+ function isProcessAlive(pid) {
23
+ try {
24
+ process.kill(pid, 0);
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ /**
32
+ * Rotate log file
33
+ */
34
+ function rotateLog() {
35
+ try {
36
+ fs.mkdirSync(MARK_DIR, { recursive: true });
37
+ if (fs.existsSync(LOG_PATH)) {
38
+ fs.renameSync(LOG_PATH, LOG_PREV_PATH);
39
+ }
40
+ }
41
+ catch {
42
+ // Ignore rotation errors
43
+ }
44
+ }
45
+ /**
46
+ * Find the CLI entry point
47
+ */
48
+ function findCliPath() {
49
+ // First, try to use the currently running script if it's the CLI
50
+ const currentScript = process.argv[1];
51
+ if (currentScript) {
52
+ // Normalize path for cross-platform check
53
+ const normalized = currentScript.replace(/\\/g, "/");
54
+ // mark runs as dist/bin.js (its bin) or dist/cli.js
55
+ if (normalized.endsWith("/dist/bin.js") || normalized.endsWith("cli.js") || normalized.includes("cli/dist")) {
56
+ // Return absolute path
57
+ return path.resolve(currentScript);
58
+ }
59
+ }
60
+ // Try to find the mark CLI in node_modules or as a direct path
61
+ const candidates = [
62
+ path.join(process.cwd(), "node_modules", "@procedures", "mark", "dist", "cli.js"),
63
+ path.join(process.cwd(), "node_modules", ".bin", "mark"),
64
+ // Check parent directories for monorepo setups
65
+ path.join(process.cwd(), "..", "cli", "dist", "cli.js"),
66
+ // Direct check in current directory
67
+ path.join(process.cwd(), "dist", "cli.js"),
68
+ ];
69
+ // Check which candidate exists
70
+ for (const candidate of candidates) {
71
+ if (fs.existsSync(candidate)) {
72
+ return candidate;
73
+ }
74
+ }
75
+ // Fallback: try mark in PATH (will fail if not installed globally)
76
+ return "mark";
77
+ }
78
+ export const serverStartProcedure = createProcedure()
79
+ .path(["server", "start"])
80
+ .input(serverStartInputSchema)
81
+ .output(serverStartOutputSchema)
82
+ .meta({
83
+ description: "Start CLI server as background daemon",
84
+ args: [],
85
+ shorts: { port: "p", host: "h" },
86
+ })
87
+ .handler(async (input) => {
88
+ const port = input.port ?? 3000;
89
+ // Loopback by default; pass host: "0.0.0.0" to expose on the LAN deliberately.
90
+ // See documentation/BUGS-2026-07.md (H19).
91
+ const host = input.host ?? "127.0.0.1";
92
+ const transport = input.transport ?? "http";
93
+ // Check if server is already running on this port
94
+ const existing = readLockfileForPort(port);
95
+ if (existing && (await checkServer(existing)) === "alive") {
96
+ return {
97
+ success: false,
98
+ message: `Server already running on port ${port} (PID ${existing.pid})`,
99
+ };
100
+ }
101
+ // Rotate log file
102
+ rotateLog();
103
+ // Ensure directories exist
104
+ fs.mkdirSync(SERVERS_DIR, { recursive: true });
105
+ // Open log file for writing
106
+ const logFd = fs.openSync(LOG_PATH, "a");
107
+ // Find CLI path
108
+ const cliPath = findCliPath();
109
+ // Build arguments
110
+ const args = ["--server", "--port", String(port), "--host", host];
111
+ if (transport !== "http") {
112
+ args.push("--transport", transport);
113
+ }
114
+ // Determine how to spawn
115
+ let spawnCmd;
116
+ let spawnArgs;
117
+ if (cliPath === "mark" || cliPath.endsWith(".bin/mark") || cliPath.endsWith(".bin\\mark")) {
118
+ // Use mark command directly
119
+ spawnCmd = cliPath;
120
+ spawnArgs = args;
121
+ }
122
+ else {
123
+ // Use node to run the JS file
124
+ spawnCmd = process.execPath;
125
+ spawnArgs = [cliPath, ...args];
126
+ }
127
+ // Spawn daemon process
128
+ const child = spawn(spawnCmd, spawnArgs, {
129
+ detached: true,
130
+ stdio: ["ignore", logFd, logFd],
131
+ env: { ...process.env },
132
+ cwd: process.cwd(),
133
+ // No console window on Windows (deep dive CLI-16)
134
+ windowsHide: true,
135
+ });
136
+ // Unref so parent can exit
137
+ child.unref();
138
+ fs.closeSync(logFd);
139
+ // Poll for lockfile (server takes ~4-8s to load ecosystem)
140
+ const maxWait = 15000;
141
+ const pollInterval = 500;
142
+ const startTime = Date.now();
143
+ while (Date.now() - startTime < maxWait) {
144
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
145
+ // Check if child died
146
+ if (child.pid && !isProcessAlive(child.pid)) {
147
+ break;
148
+ }
149
+ // Check for lockfile
150
+ const lockfile = readLockfileForPort(port);
151
+ if (lockfile && (await checkServer(lockfile)) === "alive") {
152
+ return {
153
+ success: true,
154
+ pid: lockfile.pid,
155
+ port: lockfile.port,
156
+ endpoint: lockfile.endpoint,
157
+ logFile: LOG_PATH,
158
+ message: `Server started (PID ${lockfile.pid})`,
159
+ };
160
+ }
161
+ }
162
+ // Timed out waiting for lockfile, but child may still be alive
163
+ if (child.pid && isProcessAlive(child.pid)) {
164
+ return {
165
+ success: true,
166
+ pid: child.pid,
167
+ port,
168
+ endpoint: `http://${host === "0.0.0.0" ? "localhost" : host}:${port}/api`,
169
+ logFile: LOG_PATH,
170
+ message: `Server starting (PID ${child.pid}, still loading...)`,
171
+ };
172
+ }
173
+ return {
174
+ success: false,
175
+ message: `Failed to start server. Check ${LOG_PATH} for details.`,
176
+ };
177
+ })
178
+ .build();
179
+ //# sourceMappingURL=server.start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.start.js","sourceRoot":"","sources":["../../src/procedures/server.start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Procedure: server.status
3
+ * Gets the current CLI server status
4
+ */
5
+ import { type Procedure } from "@procedures/client";
6
+ import type { ServerStatusInput, ServerStatusOutput } from "../types.js";
7
+ export declare const serverStatusProcedure: Procedure<ServerStatusInput, ServerStatusOutput, {
8
+ description: string;
9
+ output: string;
10
+ }>;
11
+ export type { ServerStatusInput, ServerStatusOutput };
12
+ //# sourceMappingURL=server.status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.status.d.ts","sourceRoot":"","sources":["../../src/procedures/server.status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAqCzE,eAAO,MAAM,qBAAqB,EAAE,SAAS,CAC3C,iBAAiB,EACjB,kBAAkB,EAClB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAoF/B,CAAC;AAEX,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Procedure: server.status
3
+ * Gets the current CLI server status
4
+ */
5
+ import * as path from "node:path";
6
+ import * as os from "node:os";
7
+ import { createProcedure } from "@procedures/client";
8
+ import { wrapSchema } from "../schema.js";
9
+ import { ServerStatusOutputSchema } from "../output-schemas.js";
10
+ import { serverStatusInputSchema } from "../input-schemas.js";
11
+ import { checkServer, readAllLockfiles, readLockfileForPort, removeLockfileForPort } from "../lockfile.js";
12
+ const MARK_DIR = path.join(os.homedir(), ".mark");
13
+ const LOG_PATH = path.join(MARK_DIR, "server.log");
14
+ const serverStatusOutputSchema = wrapSchema(ServerStatusOutputSchema);
15
+ /**
16
+ * Format uptime as human-readable string
17
+ */
18
+ function formatUptime(startedAt) {
19
+ const start = new Date(startedAt).getTime();
20
+ const now = Date.now();
21
+ const diff = Math.floor((now - start) / 1000);
22
+ if (diff < 60) {
23
+ return `${diff}s`;
24
+ }
25
+ if (diff < 3600) {
26
+ const mins = Math.floor(diff / 60);
27
+ const secs = diff % 60;
28
+ return `${mins}m ${secs}s`;
29
+ }
30
+ if (diff < 86400) {
31
+ const hours = Math.floor(diff / 3600);
32
+ const mins = Math.floor((diff % 3600) / 60);
33
+ return `${hours}h ${mins}m`;
34
+ }
35
+ const days = Math.floor(diff / 86400);
36
+ const hours = Math.floor((diff % 86400) / 3600);
37
+ return `${days}d ${hours}h`;
38
+ }
39
+ export const serverStatusProcedure = createProcedure()
40
+ .path(["server", "status"])
41
+ .input(serverStatusInputSchema)
42
+ .output(serverStatusOutputSchema)
43
+ .meta({
44
+ description: "Get CLI server status",
45
+ args: [],
46
+ shorts: { port: "p" },
47
+ output: "text",
48
+ })
49
+ .handler(async (input) => {
50
+ // Get target servers
51
+ let targets;
52
+ if (input.port !== undefined) {
53
+ const lockfile = readLockfileForPort(input.port);
54
+ targets = lockfile ? [lockfile] : [];
55
+ }
56
+ else {
57
+ targets = readAllLockfiles();
58
+ }
59
+ if (targets.length === 0) {
60
+ return {
61
+ running: false,
62
+ message: input.port
63
+ ? `No server found on port ${input.port}`
64
+ : "No servers running",
65
+ };
66
+ }
67
+ // For single server, return detailed info
68
+ if (targets.length === 1) {
69
+ const lockfile = targets[0];
70
+ const { pid, port, endpoint, startedAt, transport } = lockfile;
71
+ if ((await checkServer(lockfile)) !== "alive") {
72
+ removeLockfileForPort(port);
73
+ return {
74
+ running: false,
75
+ message: "Server is not running (cleaned up stale lockfile)",
76
+ };
77
+ }
78
+ const uptime = formatUptime(startedAt);
79
+ return {
80
+ running: true,
81
+ pid,
82
+ port,
83
+ endpoint,
84
+ transport,
85
+ startedAt,
86
+ uptime,
87
+ logFile: LOG_PATH,
88
+ message: `Server running (PID ${pid}, port ${port}, uptime ${uptime})`,
89
+ };
90
+ }
91
+ // Multiple servers - summarize
92
+ const lines = [];
93
+ let anyRunning = false;
94
+ for (const lockfile of targets) {
95
+ const { pid, port, endpoint, startedAt } = lockfile;
96
+ if ((await checkServer(lockfile)) !== "alive") {
97
+ removeLockfileForPort(port);
98
+ continue;
99
+ }
100
+ anyRunning = true;
101
+ const uptime = formatUptime(startedAt);
102
+ lines.push(` Port ${port}: PID ${pid}, uptime ${uptime}, ${endpoint}`);
103
+ }
104
+ if (!anyRunning) {
105
+ return {
106
+ running: false,
107
+ message: "No servers running (cleaned up stale lockfiles)",
108
+ };
109
+ }
110
+ return {
111
+ running: true,
112
+ message: `${lines.length} server(s) running:\n${lines.join("\n")}`,
113
+ };
114
+ })
115
+ .build();
116
+ //# sourceMappingURL=server.status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.status.js","sourceRoot":"","sources":["../../src/procedures/server.status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Procedure: server.stop
3
+ * Stops the running CLI server daemon
4
+ */
5
+ import { type Procedure } from "@procedures/client";
6
+ import type { ServerStopInput, ServerStopOutput } from "../types.js";
7
+ export declare const serverStopProcedure: Procedure<ServerStopInput, ServerStopOutput, {
8
+ description: string;
9
+ }>;
10
+ export type { ServerStopInput, ServerStopOutput };
11
+ //# sourceMappingURL=server.stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.stop.d.ts","sourceRoot":"","sources":["../../src/procedures/server.stop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKrE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqBrE,eAAO,MAAM,mBAAmB,EAAE,SAAS,CACzC,eAAe,EACf,gBAAgB,EAChB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAoFf,CAAC;AAEX,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Procedure: server.stop
3
+ * Stops the running CLI server daemon
4
+ */
5
+ import { createProcedure } from "@procedures/client";
6
+ import { wrapSchema } from "../schema.js";
7
+ import { ServerStopOutputSchema } from "../output-schemas.js";
8
+ import { serverStopInputSchema } from "../input-schemas.js";
9
+ import { checkServer, readAllLockfiles, readLockfileForPort, removeLockfileForPort } from "../lockfile.js";
10
+ const serverStopOutputSchema = wrapSchema(ServerStopOutputSchema);
11
+ /**
12
+ * Kill process by PID
13
+ */
14
+ function killProcess(pid, signal = "SIGTERM") {
15
+ try {
16
+ process.kill(pid, signal);
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ export const serverStopProcedure = createProcedure()
24
+ .path(["server", "stop"])
25
+ .input(serverStopInputSchema)
26
+ .output(serverStopOutputSchema)
27
+ .meta({
28
+ description: "Stop running CLI server",
29
+ args: [],
30
+ shorts: { port: "p" },
31
+ })
32
+ .handler(async (input) => {
33
+ const force = input.force ?? false;
34
+ const signal = force ? "SIGKILL" : "SIGTERM";
35
+ // Get target servers
36
+ let targets;
37
+ if (input.port !== undefined) {
38
+ const lockfile = readLockfileForPort(input.port);
39
+ targets = lockfile ? [lockfile] : [];
40
+ }
41
+ else {
42
+ targets = readAllLockfiles();
43
+ }
44
+ if (targets.length === 0) {
45
+ return {
46
+ success: false,
47
+ message: input.port
48
+ ? `No server found on port ${input.port}`
49
+ : "No servers running",
50
+ };
51
+ }
52
+ const results = [];
53
+ let allSuccess = true;
54
+ for (const lockfile of targets) {
55
+ const { pid, port } = lockfile;
56
+ // Signal the PID only when the server answers as the peer of this lockfile: Windows reuses
57
+ // PIDs, and before, a stale lockfile made this kill an unrelated process (deep dive CLI-4)
58
+ const state = await checkServer(lockfile);
59
+ if (state !== "alive") {
60
+ removeLockfileForPort(port);
61
+ results.push(state === "dead"
62
+ ? `Port ${port}: cleaned up stale lockfile`
63
+ : `Port ${port}: another process answers on this port; nothing stopped (stale lockfile removed)`);
64
+ continue;
65
+ }
66
+ const sent = killProcess(pid, signal);
67
+ if (!sent) {
68
+ allSuccess = false;
69
+ results.push(`Port ${port}: failed to send ${signal} to PID ${pid}`);
70
+ continue;
71
+ }
72
+ // Wait for process to die
73
+ const maxWait = force ? 500 : 5000;
74
+ const startTime = Date.now();
75
+ let stopped = false;
76
+ while (Date.now() - startTime < maxWait) {
77
+ if ((await checkServer(lockfile, 300)) === "dead") {
78
+ removeLockfileForPort(port);
79
+ results.push(`Port ${port}: stopped (PID ${pid})`);
80
+ stopped = true;
81
+ break;
82
+ }
83
+ await new Promise((resolve) => setTimeout(resolve, 100));
84
+ }
85
+ if (!stopped) {
86
+ allSuccess = false;
87
+ results.push(`Port ${port}: PID ${pid} did not stop${force ? "" : " (try --force)"}`);
88
+ }
89
+ }
90
+ return {
91
+ success: allSuccess,
92
+ message: results.join("\n"),
93
+ };
94
+ })
95
+ .build();
96
+ //# sourceMappingURL=server.stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.stop.js","sourceRoot":"","sources":["../../src/procedures/server.stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Importing this file registers the procedures of @procedures/peer in the global registry
3
+ * (DECISIONS-2026-10, "Every package root registers its procedures"). The procedures as data
4
+ * are in `module.ts`, which registers nothing: a host with its own registry uses that one.
5
+ */
6
+ export * from "./module.js";
7
+ export declare function registerServerProcedures(): void;
8
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,cAAc,aAAa,CAAC;AAE5B,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Importing this file registers the procedures of @procedures/peer in the global registry
3
+ * (DECISIONS-2026-10, "Every package root registers its procedures"). The procedures as data
4
+ * are in `module.ts`, which registers nothing: a host with its own registry uses that one.
5
+ */
6
+ import { registerProcedures } from "@procedures/client";
7
+ import { serverModule } from "./module.js";
8
+ export * from "./module.js";
9
+ export function registerServerProcedures() {
10
+ registerProcedures(serverModule.procedures);
11
+ }
12
+ // Auto-register when this module is loaded
13
+ registerServerProcedures();
14
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,aAAa,CAAC;AAE5B,MAAM,UAAU,wBAAwB;IACtC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,2CAA2C;AAC3C,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Schema Helpers
3
+ *
4
+ * Wraps Zod schemas for the client procedure system.
5
+ */
6
+ /**
7
+ * Wrap a Zod schema for use with client procedures
8
+ */
9
+ export { zodAdapter as wrapSchema } from "@procedures/client";
10
+ /**
11
+ * Create a pass-through schema for type T (no validation)
12
+ */
13
+ export { outputSchema as schema } from "@procedures/client";
14
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EAAE,UAAU,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/schema.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Schema Helpers
3
+ *
4
+ * Wraps Zod schemas for the client procedure system.
5
+ */
6
+ /**
7
+ * Wrap a Zod schema for use with client procedures
8
+ */
9
+ export { zodAdapter as wrapSchema } from "@procedures/client";
10
+ /**
11
+ * Create a pass-through schema for type T (no validation)
12
+ */
13
+ export { outputSchema as schema } from "@procedures/client";
14
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EAAE,UAAU,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,OAAO,EAAE,YAAY,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC"}