@junctionpanel/cli 0.1.16

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 (196) hide show
  1. package/LICENSE +671 -0
  2. package/bin/junction +2 -0
  3. package/bin/junction-daemon +5 -0
  4. package/dist/cli.d.ts +13 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +211 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/agent/archive.d.ts +17 -0
  9. package/dist/commands/agent/archive.d.ts.map +1 -0
  10. package/dist/commands/agent/archive.js +92 -0
  11. package/dist/commands/agent/archive.js.map +1 -0
  12. package/dist/commands/agent/attach.d.ts +10 -0
  13. package/dist/commands/agent/attach.d.ts.map +1 -0
  14. package/dist/commands/agent/attach.js +153 -0
  15. package/dist/commands/agent/attach.js.map +1 -0
  16. package/dist/commands/agent/index.d.ts +3 -0
  17. package/dist/commands/agent/index.d.ts.map +1 -0
  18. package/dist/commands/agent/index.js +125 -0
  19. package/dist/commands/agent/index.js.map +1 -0
  20. package/dist/commands/agent/inspect.d.ts +14 -0
  21. package/dist/commands/agent/inspect.d.ts.map +1 -0
  22. package/dist/commands/agent/inspect.js +198 -0
  23. package/dist/commands/agent/inspect.js.map +1 -0
  24. package/dist/commands/agent/logs.d.ts +15 -0
  25. package/dist/commands/agent/logs.d.ts.map +1 -0
  26. package/dist/commands/agent/logs.js +163 -0
  27. package/dist/commands/agent/logs.js.map +1 -0
  28. package/dist/commands/agent/ls.d.ts +37 -0
  29. package/dist/commands/agent/ls.d.ts.map +1 -0
  30. package/dist/commands/agent/ls.js +185 -0
  31. package/dist/commands/agent/ls.js.map +1 -0
  32. package/dist/commands/agent/mode.d.ts +18 -0
  33. package/dist/commands/agent/mode.d.ts.map +1 -0
  34. package/dist/commands/agent/mode.js +100 -0
  35. package/dist/commands/agent/mode.js.map +1 -0
  36. package/dist/commands/agent/run.d.ts +40 -0
  37. package/dist/commands/agent/run.d.ts.map +1 -0
  38. package/dist/commands/agent/run.js +354 -0
  39. package/dist/commands/agent/run.js.map +1 -0
  40. package/dist/commands/agent/send.d.ts +16 -0
  41. package/dist/commands/agent/send.d.ts.map +1 -0
  42. package/dist/commands/agent/send.js +172 -0
  43. package/dist/commands/agent/send.js.map +1 -0
  44. package/dist/commands/agent/stop.d.ts +16 -0
  45. package/dist/commands/agent/stop.d.ts.map +1 -0
  46. package/dist/commands/agent/stop.js +105 -0
  47. package/dist/commands/agent/stop.js.map +1 -0
  48. package/dist/commands/agent/update.d.ts +18 -0
  49. package/dist/commands/agent/update.d.ts.map +1 -0
  50. package/dist/commands/agent/update.js +139 -0
  51. package/dist/commands/agent/update.js.map +1 -0
  52. package/dist/commands/agent/wait.d.ts +16 -0
  53. package/dist/commands/agent/wait.d.ts.map +1 -0
  54. package/dist/commands/agent/wait.js +194 -0
  55. package/dist/commands/agent/wait.js.map +1 -0
  56. package/dist/commands/daemon/index.d.ts +4 -0
  57. package/dist/commands/daemon/index.d.ts.map +1 -0
  58. package/dist/commands/daemon/index.js +50 -0
  59. package/dist/commands/daemon/index.js.map +1 -0
  60. package/dist/commands/daemon/local-daemon.d.ts +60 -0
  61. package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
  62. package/dist/commands/daemon/local-daemon.js +501 -0
  63. package/dist/commands/daemon/local-daemon.js.map +1 -0
  64. package/dist/commands/daemon/package-context.d.ts +7 -0
  65. package/dist/commands/daemon/package-context.d.ts.map +1 -0
  66. package/dist/commands/daemon/package-context.js +41 -0
  67. package/dist/commands/daemon/package-context.js.map +1 -0
  68. package/dist/commands/daemon/pair.d.ts +3 -0
  69. package/dist/commands/daemon/pair.d.ts.map +1 -0
  70. package/dist/commands/daemon/pair.js +11 -0
  71. package/dist/commands/daemon/pair.js.map +1 -0
  72. package/dist/commands/daemon/restart.d.ts +12 -0
  73. package/dist/commands/daemon/restart.d.ts.map +1 -0
  74. package/dist/commands/daemon/restart.js +102 -0
  75. package/dist/commands/daemon/restart.js.map +1 -0
  76. package/dist/commands/daemon/runtime-toolchain.d.ts +24 -0
  77. package/dist/commands/daemon/runtime-toolchain.d.ts.map +1 -0
  78. package/dist/commands/daemon/runtime-toolchain.js +93 -0
  79. package/dist/commands/daemon/runtime-toolchain.js.map +1 -0
  80. package/dist/commands/daemon/start.d.ts +6 -0
  81. package/dist/commands/daemon/start.d.ts.map +1 -0
  82. package/dist/commands/daemon/start.js +48 -0
  83. package/dist/commands/daemon/start.js.map +1 -0
  84. package/dist/commands/daemon/status.d.ts +11 -0
  85. package/dist/commands/daemon/status.d.ts.map +1 -0
  86. package/dist/commands/daemon/status.js +389 -0
  87. package/dist/commands/daemon/status.js.map +1 -0
  88. package/dist/commands/daemon/stop.d.ts +12 -0
  89. package/dist/commands/daemon/stop.d.ts.map +1 -0
  90. package/dist/commands/daemon/stop.js +69 -0
  91. package/dist/commands/daemon/stop.js.map +1 -0
  92. package/dist/commands/daemon/update.d.ts +11 -0
  93. package/dist/commands/daemon/update.d.ts.map +1 -0
  94. package/dist/commands/daemon/update.js +88 -0
  95. package/dist/commands/daemon/update.js.map +1 -0
  96. package/dist/commands/onboard.d.ts +9 -0
  97. package/dist/commands/onboard.d.ts.map +1 -0
  98. package/dist/commands/onboard.js +299 -0
  99. package/dist/commands/onboard.js.map +1 -0
  100. package/dist/commands/permit/allow.d.ts +20 -0
  101. package/dist/commands/permit/allow.d.ts.map +1 -0
  102. package/dist/commands/permit/allow.js +134 -0
  103. package/dist/commands/permit/allow.js.map +1 -0
  104. package/dist/commands/permit/deny.d.ts +12 -0
  105. package/dist/commands/permit/deny.d.ts.map +1 -0
  106. package/dist/commands/permit/deny.js +106 -0
  107. package/dist/commands/permit/deny.js.map +1 -0
  108. package/dist/commands/permit/index.d.ts +3 -0
  109. package/dist/commands/permit/index.d.ts.map +1 -0
  110. package/dist/commands/permit/index.js +37 -0
  111. package/dist/commands/permit/index.js.map +1 -0
  112. package/dist/commands/permit/ls.d.ts +18 -0
  113. package/dist/commands/permit/ls.d.ts.map +1 -0
  114. package/dist/commands/permit/ls.js +66 -0
  115. package/dist/commands/permit/ls.js.map +1 -0
  116. package/dist/commands/provider/index.d.ts +3 -0
  117. package/dist/commands/provider/index.d.ts.map +1 -0
  118. package/dist/commands/provider/index.js +23 -0
  119. package/dist/commands/provider/index.js.map +1 -0
  120. package/dist/commands/provider/ls.d.ts +17 -0
  121. package/dist/commands/provider/ls.d.ts.map +1 -0
  122. package/dist/commands/provider/ls.js +51 -0
  123. package/dist/commands/provider/ls.js.map +1 -0
  124. package/dist/commands/provider/models.d.ts +20 -0
  125. package/dist/commands/provider/models.d.ts.map +1 -0
  126. package/dist/commands/provider/models.js +53 -0
  127. package/dist/commands/provider/models.js.map +1 -0
  128. package/dist/commands/worktree/archive.d.ts +16 -0
  129. package/dist/commands/worktree/archive.d.ts.map +1 -0
  130. package/dist/commands/worktree/archive.js +98 -0
  131. package/dist/commands/worktree/archive.js.map +1 -0
  132. package/dist/commands/worktree/index.d.ts +3 -0
  133. package/dist/commands/worktree/index.d.ts.map +1 -0
  134. package/dist/commands/worktree/index.js +22 -0
  135. package/dist/commands/worktree/index.js.map +1 -0
  136. package/dist/commands/worktree/ls.d.ts +19 -0
  137. package/dist/commands/worktree/ls.d.ts.map +1 -0
  138. package/dist/commands/worktree/ls.js +97 -0
  139. package/dist/commands/worktree/ls.js.map +1 -0
  140. package/dist/daemon-only-cli.d.ts +4 -0
  141. package/dist/daemon-only-cli.d.ts.map +1 -0
  142. package/dist/daemon-only-cli.js +5 -0
  143. package/dist/daemon-only-cli.js.map +1 -0
  144. package/dist/index.d.ts +2 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +7 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/output/index.d.ts +45 -0
  149. package/dist/output/index.d.ts.map +1 -0
  150. package/dist/output/index.js +47 -0
  151. package/dist/output/index.js.map +1 -0
  152. package/dist/output/json.d.ts +11 -0
  153. package/dist/output/json.d.ts.map +1 -0
  154. package/dist/output/json.js +37 -0
  155. package/dist/output/json.js.map +1 -0
  156. package/dist/output/quiet.d.ts +9 -0
  157. package/dist/output/quiet.d.ts.map +1 -0
  158. package/dist/output/quiet.js +22 -0
  159. package/dist/output/quiet.js.map +1 -0
  160. package/dist/output/render.d.ts +15 -0
  161. package/dist/output/render.d.ts.map +1 -0
  162. package/dist/output/render.js +80 -0
  163. package/dist/output/render.js.map +1 -0
  164. package/dist/output/table.d.ts +13 -0
  165. package/dist/output/table.d.ts.map +1 -0
  166. package/dist/output/table.js +135 -0
  167. package/dist/output/table.js.map +1 -0
  168. package/dist/output/types.d.ts +71 -0
  169. package/dist/output/types.d.ts.map +1 -0
  170. package/dist/output/types.js +8 -0
  171. package/dist/output/types.js.map +1 -0
  172. package/dist/output/with-output.d.ts +37 -0
  173. package/dist/output/with-output.d.ts.map +1 -0
  174. package/dist/output/with-output.js +87 -0
  175. package/dist/output/with-output.js.map +1 -0
  176. package/dist/output/yaml.d.ts +11 -0
  177. package/dist/output/yaml.d.ts.map +1 -0
  178. package/dist/output/yaml.js +38 -0
  179. package/dist/output/yaml.js.map +1 -0
  180. package/dist/utils/client-id.d.ts +2 -0
  181. package/dist/utils/client-id.d.ts.map +1 -0
  182. package/dist/utils/client-id.js +37 -0
  183. package/dist/utils/client-id.js.map +1 -0
  184. package/dist/utils/client.d.ts +35 -0
  185. package/dist/utils/client.d.ts.map +1 -0
  186. package/dist/utils/client.js +113 -0
  187. package/dist/utils/client.js.map +1 -0
  188. package/dist/utils/errors.d.ts +5 -0
  189. package/dist/utils/errors.d.ts.map +1 -0
  190. package/dist/utils/errors.js +10 -0
  191. package/dist/utils/errors.js.map +1 -0
  192. package/dist/utils/timeline.d.ts +8 -0
  193. package/dist/utils/timeline.d.ts.map +1 -0
  194. package/dist/utils/timeline.js +9 -0
  195. package/dist/utils/timeline.js.map +1 -0
  196. package/package.json +66 -0
@@ -0,0 +1,102 @@
1
+ import { startLocalDaemonDetached, stopLocalDaemon, DEFAULT_STOP_TIMEOUT_MS, } from './local-daemon.js';
2
+ const restartResultSchema = {
3
+ idField: 'action',
4
+ columns: [
5
+ {
6
+ header: 'STATUS',
7
+ field: 'action',
8
+ color: () => 'green',
9
+ },
10
+ { header: 'HOME', field: 'home' },
11
+ { header: 'PID', field: 'pid' },
12
+ { header: 'MESSAGE', field: 'message' },
13
+ ],
14
+ };
15
+ function parseTimeoutMs(raw) {
16
+ if (typeof raw !== 'string' || raw.trim().length === 0) {
17
+ return DEFAULT_STOP_TIMEOUT_MS;
18
+ }
19
+ const seconds = Number(raw);
20
+ if (!Number.isFinite(seconds) || seconds <= 0) {
21
+ const error = {
22
+ code: 'INVALID_TIMEOUT',
23
+ message: `Invalid timeout value: ${raw}`,
24
+ details: 'Timeout must be a positive number of seconds',
25
+ };
26
+ throw error;
27
+ }
28
+ return Math.ceil(seconds * 1000);
29
+ }
30
+ function toStartOptions(options) {
31
+ const startOptions = {
32
+ home: typeof options.home === 'string' ? options.home : undefined,
33
+ listen: typeof options.listen === 'string' ? options.listen : undefined,
34
+ port: typeof options.port === 'string' ? options.port : undefined,
35
+ relay: typeof options.relay === 'boolean' ? options.relay : undefined,
36
+ mcp: typeof options.mcp === 'boolean' ? options.mcp : undefined,
37
+ allowedHosts: typeof options.allowedHosts === 'string' ? options.allowedHosts : undefined,
38
+ };
39
+ if (startOptions.listen && startOptions.port) {
40
+ const error = {
41
+ code: 'INVALID_OPTIONS',
42
+ message: 'Cannot use --listen and --port together',
43
+ };
44
+ throw error;
45
+ }
46
+ return startOptions;
47
+ }
48
+ export async function runRestartCommand(options, _command) {
49
+ const timeoutMs = parseTimeoutMs(options.timeout);
50
+ const force = options.force === true;
51
+ const startOptions = toStartOptions(options);
52
+ try {
53
+ let rawStopResult;
54
+ try {
55
+ rawStopResult = await stopLocalDaemon({
56
+ home: startOptions.home,
57
+ listen: startOptions.listen,
58
+ port: startOptions.port,
59
+ timeoutMs,
60
+ force,
61
+ });
62
+ }
63
+ catch (err) {
64
+ const isTimeout = err instanceof Error && err.message.includes('Timed out waiting for daemon PID');
65
+ if (!force && isTimeout) {
66
+ rawStopResult = await stopLocalDaemon({
67
+ home: startOptions.home,
68
+ listen: startOptions.listen,
69
+ port: startOptions.port,
70
+ timeoutMs,
71
+ force: true,
72
+ });
73
+ }
74
+ else {
75
+ throw err;
76
+ }
77
+ }
78
+ const stopResult = Array.isArray(rawStopResult) ? rawStopResult[0] : rawStopResult;
79
+ const startup = await startLocalDaemonDetached(startOptions);
80
+ const before = stopResult.pid === null ? 'not running' : `PID ${stopResult.pid}`;
81
+ const after = startup.pid === null ? 'unknown PID' : `PID ${startup.pid}`;
82
+ return {
83
+ type: 'single',
84
+ data: {
85
+ action: 'restarted',
86
+ home: stopResult.home,
87
+ pid: startup.pid === null ? '-' : String(startup.pid),
88
+ message: `Local daemon restarted (${before} -> ${after})`,
89
+ },
90
+ schema: restartResultSchema,
91
+ };
92
+ }
93
+ catch (err) {
94
+ const message = err instanceof Error ? err.message : String(err);
95
+ const error = {
96
+ code: 'RESTART_FAILED',
97
+ message: `Failed to restart local daemon: ${message}`,
98
+ };
99
+ throw error;
100
+ }
101
+ }
102
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../src/commands/daemon/restart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type NodePathSource = 'daemon_pid' | 'current_process';
2
+ export interface NodePathResolution {
3
+ nodePath: string;
4
+ source: NodePathSource;
5
+ note?: string;
6
+ }
7
+ export interface NodePathFromPidResult {
8
+ nodePath: string | null;
9
+ error?: string;
10
+ }
11
+ export interface NpmInvocation {
12
+ nodePath: string;
13
+ npmPath: string;
14
+ command: string;
15
+ argsPrefix: string[];
16
+ }
17
+ export declare function resolveNodePathFromPid(pid: number): NodePathFromPidResult;
18
+ export declare function resolvePreferredNodePath(args: {
19
+ daemonPid?: number | null;
20
+ fallbackNodePath?: string;
21
+ }): NodePathResolution;
22
+ export declare function resolveNpmInvocationFromNode(nodePath: string): NpmInvocation;
23
+ export declare function formatNpmInvocation(invocation: NpmInvocation): string;
24
+ //# sourceMappingURL=runtime-toolchain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-toolchain.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/runtime-toolchain.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,CAAA;AAE7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AASD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CA8BzE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,GAAG,kBAAkB,CAwBrB;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CA+B5E;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAKrE"}
@@ -0,0 +1,93 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ function normalizeError(error) {
5
+ if (error instanceof Error) {
6
+ return error.message;
7
+ }
8
+ return String(error);
9
+ }
10
+ export function resolveNodePathFromPid(pid) {
11
+ const result = spawnSync('ps', ['-o', 'comm=', '-p', String(pid)], {
12
+ encoding: 'utf8',
13
+ stdio: ['ignore', 'pipe', 'pipe'],
14
+ });
15
+ if (result.error) {
16
+ return {
17
+ nodePath: null,
18
+ error: `ps failed: ${normalizeError(result.error)}`,
19
+ };
20
+ }
21
+ if ((result.status ?? 1) !== 0) {
22
+ const details = result.stderr?.trim();
23
+ return {
24
+ nodePath: null,
25
+ error: details ? `ps failed: ${details}` : `ps exited with code ${result.status ?? 1}`,
26
+ };
27
+ }
28
+ const resolved = result.stdout.trim();
29
+ if (!resolved) {
30
+ return {
31
+ nodePath: null,
32
+ error: 'ps returned an empty command path',
33
+ };
34
+ }
35
+ return { nodePath: resolved };
36
+ }
37
+ export function resolvePreferredNodePath(args) {
38
+ const fallback = args.fallbackNodePath ?? process.execPath;
39
+ const daemonPid = args.daemonPid;
40
+ if (typeof daemonPid === 'number' && Number.isInteger(daemonPid) && daemonPid > 0) {
41
+ const fromPid = resolveNodePathFromPid(daemonPid);
42
+ if (fromPid.nodePath) {
43
+ return {
44
+ nodePath: fromPid.nodePath,
45
+ source: 'daemon_pid',
46
+ };
47
+ }
48
+ return {
49
+ nodePath: fallback,
50
+ source: 'current_process',
51
+ note: `Could not resolve node from daemon PID ${daemonPid}; using current process node (${fromPid.error ?? 'unknown error'})`,
52
+ };
53
+ }
54
+ return {
55
+ nodePath: fallback,
56
+ source: 'current_process',
57
+ };
58
+ }
59
+ export function resolveNpmInvocationFromNode(nodePath) {
60
+ const binDir = path.dirname(nodePath);
61
+ const prefix = path.dirname(binDir);
62
+ const npmBinary = path.join(binDir, process.platform === 'win32' ? 'npm.cmd' : 'npm');
63
+ if (existsSync(npmBinary)) {
64
+ return {
65
+ nodePath,
66
+ npmPath: npmBinary,
67
+ command: npmBinary,
68
+ argsPrefix: [],
69
+ };
70
+ }
71
+ const npmCliCandidates = [
72
+ path.join(prefix, 'lib', 'node_modules', 'npm', 'bin', 'npm-cli.js'),
73
+ path.join(prefix, 'node_modules', 'npm', 'bin', 'npm-cli.js'),
74
+ ];
75
+ for (const candidate of npmCliCandidates) {
76
+ if (existsSync(candidate)) {
77
+ return {
78
+ nodePath,
79
+ npmPath: candidate,
80
+ command: nodePath,
81
+ argsPrefix: [candidate],
82
+ };
83
+ }
84
+ }
85
+ throw new Error(`Unable to resolve npm for node executable: ${nodePath}`);
86
+ }
87
+ export function formatNpmInvocation(invocation) {
88
+ if (invocation.argsPrefix.length === 0) {
89
+ return invocation.command;
90
+ }
91
+ return `${invocation.command} ${invocation.argsPrefix.join(' ')}`;
92
+ }
93
+ //# sourceMappingURL=runtime-toolchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-toolchain.js","sourceRoot":"","sources":["../../../src/commands/daemon/runtime-toolchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ import { type DaemonStartOptions as StartOptions } from './local-daemon.js';
3
+ export type { DaemonStartOptions as StartOptions } from './local-daemon.js';
4
+ export declare function startCommand(): Command;
5
+ export declare function runStart(options: StartOptions): Promise<void>;
6
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAGL,KAAK,kBAAkB,IAAI,YAAY,EACxC,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE3E,wBAAgB,YAAY,IAAI,OAAO,CAgBtC;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBnE"}
@@ -0,0 +1,48 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { startLocalDaemonForeground, startLocalDaemonDetached, } from './local-daemon.js';
4
+ import { getErrorMessage } from '../../utils/errors.js';
5
+ export function startCommand() {
6
+ return new Command('start')
7
+ .description('Start the local Junction daemon')
8
+ .option('--listen <listen>', 'Listen target (host:port, port, or unix socket path)')
9
+ .option('--port <port>', 'Port to listen on (default: 6767)')
10
+ .option('--home <path>', 'Junction home directory (default: ~/.junction)')
11
+ .option('--foreground', 'Run in foreground (don\'t daemonize)')
12
+ .option('--no-relay', 'Disable relay connection')
13
+ .option('--no-mcp', 'Disable the Agent MCP HTTP endpoint')
14
+ .option('--allowed-hosts <hosts>', 'Comma-separated Host allowlist values (example: "localhost,.example.com" or "true")')
15
+ .action(async (options) => {
16
+ await runStart(options);
17
+ });
18
+ }
19
+ export async function runStart(options) {
20
+ if (options.listen && options.port) {
21
+ console.error(chalk.red('Cannot use --listen and --port together'));
22
+ process.exit(1);
23
+ }
24
+ if (!options.foreground) {
25
+ try {
26
+ const startup = await startLocalDaemonDetached(options);
27
+ console.log(chalk.green(`Daemon starting in background (PID ${startup.pid ?? 'unknown'}).`));
28
+ console.log(chalk.dim(`Logs: ${startup.logPath}`));
29
+ }
30
+ catch (err) {
31
+ exitWithError(getErrorMessage(err));
32
+ }
33
+ return;
34
+ }
35
+ try {
36
+ const status = startLocalDaemonForeground(options);
37
+ process.exit(status);
38
+ }
39
+ catch (err) {
40
+ const message = getErrorMessage(err);
41
+ exitWithError(`Failed to start daemon: ${message}`);
42
+ }
43
+ }
44
+ function exitWithError(message) {
45
+ console.error(chalk.red(message));
46
+ process.exit(1);
47
+ }
48
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/daemon/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GAEzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAIvD,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;SAC5D,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;SAC9D,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC;SAChD,MAAM,CAAC,UAAU,EAAE,qCAAqC,CAAC;SACzD,MAAM,CACL,yBAAyB,EACzB,qFAAqF,CACtF;SACA,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,OAAO,CAAC,GAAG,IAAI,SAAS,IAAI,CAAC,CAAC,CAAA;YAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,CAAC;QACD,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;QACpC,aAAa,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, ListResult } from '../../output/index.js';
3
+ import { type DaemonPackageContext } from './package-context.js';
4
+ interface StatusRow {
5
+ key: string;
6
+ value: string;
7
+ }
8
+ export type StatusResult = ListResult<StatusRow>;
9
+ export declare function runStatusCommand(options: CommandOptions, _command: Command, packageContext?: Partial<DaemonPackageContext>): Promise<StatusResult>;
10
+ export {};
11
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAgB,MAAM,uBAAuB,CAAA;AAarF,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAoB7B,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAyQD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAEhD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,OAAO,EACjB,cAAc,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACjD,OAAO,CAAC,YAAY,CAAC,CA8JvB"}