@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,389 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { tryConnectToDaemon } from '../../utils/client.js';
3
+ import { resolveLocalDaemonState, resolveAllLocalDaemonStates, resolveTcpHostFromListen, } from './local-daemon.js';
4
+ import { formatNpmInvocation, resolveNpmInvocationFromNode, resolvePreferredNodePath, } from './runtime-toolchain.js';
5
+ import { resolveDaemonPackageContext, } from './package-context.js';
6
+ const CLI_UPDATE_CHECK_TIMEOUT_MS = 3000;
7
+ function normalizeError(error) {
8
+ if (error instanceof Error) {
9
+ return error.message;
10
+ }
11
+ return String(error);
12
+ }
13
+ function shortenMessage(message, max = 120) {
14
+ const normalized = message.replace(/\s+/g, ' ').trim();
15
+ if (normalized.length <= max) {
16
+ return normalized;
17
+ }
18
+ return `${normalized.slice(0, max - 3)}...`;
19
+ }
20
+ function appendNote(current, next) {
21
+ if (!next)
22
+ return current;
23
+ if (!current)
24
+ return next;
25
+ return `${current}; ${next}`;
26
+ }
27
+ function parseVersionFromNpmOutput(raw) {
28
+ const trimmed = raw.trim();
29
+ if (!trimmed) {
30
+ return null;
31
+ }
32
+ try {
33
+ const parsed = JSON.parse(trimmed);
34
+ if (typeof parsed === 'string' && parsed.trim().length > 0) {
35
+ return parsed.trim();
36
+ }
37
+ }
38
+ catch {
39
+ // Fall back to plain output.
40
+ }
41
+ return trimmed.replace(/^"+|"+$/g, '').trim() || null;
42
+ }
43
+ function parseSemver(version) {
44
+ const match = version.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
45
+ if (!match) {
46
+ return null;
47
+ }
48
+ const major = Number(match[1]);
49
+ const minor = Number(match[2]);
50
+ const patch = Number(match[3]);
51
+ if (![major, minor, patch].every((part) => Number.isInteger(part) && part >= 0)) {
52
+ return null;
53
+ }
54
+ return [major, minor, patch];
55
+ }
56
+ function compareSemver(left, right) {
57
+ const leftParts = parseSemver(left);
58
+ const rightParts = parseSemver(right);
59
+ if (!leftParts || !rightParts) {
60
+ return null;
61
+ }
62
+ for (let index = 0; index < leftParts.length; index += 1) {
63
+ if (leftParts[index] < rightParts[index])
64
+ return -1;
65
+ if (leftParts[index] > rightParts[index])
66
+ return 1;
67
+ }
68
+ return 0;
69
+ }
70
+ function fetchLatestPackageVersion(npm, packageName) {
71
+ const result = spawnSync(npm.command, [...npm.argsPrefix, 'view', packageName, 'version', '--json'], {
72
+ encoding: 'utf8',
73
+ stdio: ['ignore', 'pipe', 'pipe'],
74
+ env: process.env,
75
+ timeout: CLI_UPDATE_CHECK_TIMEOUT_MS,
76
+ });
77
+ if (result.error) {
78
+ return {
79
+ version: null,
80
+ note: `update check failed: ${shortenMessage(normalizeError(result.error))}`,
81
+ };
82
+ }
83
+ if ((result.status ?? 1) !== 0) {
84
+ const stderr = result.stderr?.trim();
85
+ return {
86
+ version: null,
87
+ note: stderr
88
+ ? `update check failed: ${shortenMessage(stderr)}`
89
+ : `update check failed: npm exited with code ${result.status ?? 1}`,
90
+ };
91
+ }
92
+ const version = parseVersionFromNpmOutput(result.stdout);
93
+ if (!version) {
94
+ return {
95
+ version: null,
96
+ note: 'update check failed: empty npm response',
97
+ };
98
+ }
99
+ return { version };
100
+ }
101
+ function createStatusSchema(status) {
102
+ return {
103
+ idField: 'key',
104
+ columns: [
105
+ { header: 'KEY', field: 'key' },
106
+ {
107
+ header: 'VALUE',
108
+ field: 'value',
109
+ color: (_, item) => {
110
+ if (item.key !== 'Status') {
111
+ return undefined;
112
+ }
113
+ if (item.value === 'running') {
114
+ return 'green';
115
+ }
116
+ if (item.value === 'unresponsive') {
117
+ return 'yellow';
118
+ }
119
+ return 'red';
120
+ },
121
+ },
122
+ ],
123
+ serialize: () => status,
124
+ };
125
+ }
126
+ function toStatusRows(status) {
127
+ const rows = [
128
+ { key: 'Status', value: status.status },
129
+ { key: 'Home', value: status.home },
130
+ { key: 'Listen', value: status.listen },
131
+ { key: 'PID', value: status.pid === null ? '-' : String(status.pid) },
132
+ { key: 'Started', value: status.startedAt ?? '-' },
133
+ { key: 'Owner', value: status.owner ?? '-' },
134
+ { key: 'Logs', value: status.logPath },
135
+ { key: 'Node', value: status.runtimeNode },
136
+ { key: 'npm', value: status.runtimeNpm },
137
+ { key: 'Package', value: status.packageVersion },
138
+ { key: 'Latest Package', value: status.latestPackageVersion },
139
+ { key: 'Update', value: status.updateStatus },
140
+ ];
141
+ if (status.runningAgents !== null && status.idleAgents !== null) {
142
+ rows.push({
143
+ key: 'Agents',
144
+ value: `${status.runningAgents} running, ${status.idleAgents} idle`,
145
+ });
146
+ }
147
+ else {
148
+ rows.push({
149
+ key: 'Agents',
150
+ value: 'Unavailable (daemon API not reachable)',
151
+ });
152
+ }
153
+ if (status.note) {
154
+ rows.push({ key: 'Note', value: status.note });
155
+ }
156
+ return rows;
157
+ }
158
+ function resolveOwnerLabel(uid, hostname) {
159
+ if (uid === undefined && !hostname) {
160
+ return null;
161
+ }
162
+ const uidPart = uid === undefined ? '?' : String(uid);
163
+ const hostPart = hostname ?? 'unknown-host';
164
+ return `${uidPart}@${hostPart}`;
165
+ }
166
+ function createAllStatusSchema(statuses) {
167
+ return {
168
+ idField: 'key',
169
+ columns: [
170
+ { header: 'KEY', field: 'key' },
171
+ {
172
+ header: 'VALUE',
173
+ field: 'value',
174
+ color: (_, item) => {
175
+ if (item.key !== 'Status')
176
+ return undefined;
177
+ if (item.value === 'running')
178
+ return 'green';
179
+ if (item.value === 'unresponsive')
180
+ return 'yellow';
181
+ return 'red';
182
+ },
183
+ },
184
+ ],
185
+ serialize: () => statuses,
186
+ };
187
+ }
188
+ async function probeDaemonState(state) {
189
+ if (!state.running) {
190
+ return {
191
+ status: 'stopped',
192
+ runningAgents: null,
193
+ idleAgents: null,
194
+ note: state.stalePidFile && state.pidInfo
195
+ ? `Stale PID file found for PID ${state.pidInfo.pid}`
196
+ : undefined,
197
+ };
198
+ }
199
+ const host = resolveTcpHostFromListen(state.listen);
200
+ if (!host) {
201
+ return {
202
+ status: 'running',
203
+ runningAgents: null,
204
+ idleAgents: null,
205
+ note: 'Daemon is configured for unix socket listen; API probe skipped',
206
+ };
207
+ }
208
+ const client = await tryConnectToDaemon({ host, timeout: 1500 });
209
+ if (!client) {
210
+ return {
211
+ status: 'unresponsive',
212
+ runningAgents: null,
213
+ idleAgents: null,
214
+ note: `Daemon PID is running but websocket at ${host} is not reachable`,
215
+ };
216
+ }
217
+ try {
218
+ const agentsPayload = await client.fetchAgents({ filter: { includeArchived: true } });
219
+ const agents = agentsPayload.entries.map((entry) => entry.agent);
220
+ return {
221
+ status: 'running',
222
+ runningAgents: agents.filter(a => a.status === 'running').length,
223
+ idleAgents: agents.filter(a => a.status === 'idle').length,
224
+ };
225
+ }
226
+ catch {
227
+ return {
228
+ status: 'unresponsive',
229
+ runningAgents: null,
230
+ idleAgents: null,
231
+ note: `Daemon PID is running but API requests to ${host} failed`,
232
+ };
233
+ }
234
+ finally {
235
+ await client.close().catch(() => { });
236
+ }
237
+ }
238
+ export async function runStatusCommand(options, _command, packageContext = {}) {
239
+ const resolvedPackageContext = resolveDaemonPackageContext(packageContext);
240
+ const home = typeof options.home === 'string' ? options.home : undefined;
241
+ const port = typeof options.port === 'string' ? options.port : undefined;
242
+ if (options.all) {
243
+ const allStates = resolveAllLocalDaemonStates({ home });
244
+ const statuses = [];
245
+ const rows = [];
246
+ for (let i = 0; i < allStates.length; i++) {
247
+ const state = allStates[i];
248
+ const probe = await probeDaemonState(state);
249
+ const daemonStatus = {
250
+ status: probe.status,
251
+ home: state.home,
252
+ listen: state.listen,
253
+ pid: state.pidInfo?.pid ?? null,
254
+ startedAt: state.pidInfo?.startedAt ?? null,
255
+ owner: resolveOwnerLabel(state.pidInfo?.uid, state.pidInfo?.hostname),
256
+ logPath: state.logPath,
257
+ runningAgents: probe.runningAgents,
258
+ idleAgents: probe.idleAgents,
259
+ runtimeNode: '-',
260
+ runtimeNpm: '-',
261
+ packageVersion: '-',
262
+ latestPackageVersion: '-',
263
+ updateStatus: '-',
264
+ note: probe.note,
265
+ };
266
+ statuses.push(daemonStatus);
267
+ if (i > 0) {
268
+ rows.push({ key: '---', value: '---' });
269
+ }
270
+ rows.push({ key: 'Listen', value: state.listen }, { key: 'Status', value: probe.status }, { key: 'PID', value: state.pidInfo?.pid == null ? '-' : String(state.pidInfo.pid) }, { key: 'Started', value: state.pidInfo?.startedAt ?? '-' });
271
+ if (probe.note) {
272
+ rows.push({ key: 'Note', value: probe.note });
273
+ }
274
+ }
275
+ if (rows.length === 0) {
276
+ rows.push({ key: 'Status', value: 'No daemons found' });
277
+ }
278
+ return {
279
+ type: 'list',
280
+ data: rows,
281
+ schema: createAllStatusSchema(statuses),
282
+ };
283
+ }
284
+ const state = resolveLocalDaemonState({ home, port });
285
+ const owner = resolveOwnerLabel(state.pidInfo?.uid, state.pidInfo?.hostname);
286
+ const resolvedNode = resolvePreferredNodePath({
287
+ daemonPid: state.running ? state.pidInfo?.pid : null,
288
+ fallbackNodePath: process.execPath,
289
+ });
290
+ let status = state.running ? 'running' : 'stopped';
291
+ let runningAgents = null;
292
+ let idleAgents = null;
293
+ let note;
294
+ let runtimeNpm = '-';
295
+ let latestPackageVersion = 'unknown';
296
+ let updateStatus = 'unknown';
297
+ if (!state.running && state.stalePidFile && state.pidInfo) {
298
+ note = `Stale PID file found for PID ${state.pidInfo.pid}`;
299
+ }
300
+ note = appendNote(note, resolvedNode.note);
301
+ if (state.running) {
302
+ const host = resolveTcpHostFromListen(state.listen);
303
+ if (host) {
304
+ const client = await tryConnectToDaemon({ host, timeout: 1500 });
305
+ if (client) {
306
+ try {
307
+ const agentsPayload = await client.fetchAgents({ filter: { includeArchived: true } });
308
+ const agents = agentsPayload.entries.map((entry) => entry.agent);
309
+ runningAgents = agents.filter(a => a.status === 'running').length;
310
+ idleAgents = agents.filter(a => a.status === 'idle').length;
311
+ }
312
+ catch {
313
+ status = 'unresponsive';
314
+ note = appendNote(note, `Daemon PID is running but API requests to ${host} failed`);
315
+ }
316
+ finally {
317
+ await client.close().catch(() => { });
318
+ }
319
+ }
320
+ else {
321
+ status = 'unresponsive';
322
+ note = appendNote(note, `Daemon PID is running but websocket at ${host} is not reachable`);
323
+ }
324
+ }
325
+ else {
326
+ note = appendNote(note, 'Daemon is configured for unix socket listen; API probe skipped');
327
+ }
328
+ }
329
+ let npmInvocation = null;
330
+ try {
331
+ npmInvocation = resolveNpmInvocationFromNode(resolvedNode.nodePath);
332
+ runtimeNpm = formatNpmInvocation(npmInvocation);
333
+ }
334
+ catch (err) {
335
+ runtimeNpm = `unresolved (${shortenMessage(normalizeError(err))})`;
336
+ }
337
+ const packageVersion = resolvedPackageContext.packageVersion;
338
+ if (npmInvocation) {
339
+ const latest = fetchLatestPackageVersion(npmInvocation, resolvedPackageContext.packageName);
340
+ if (latest.version) {
341
+ latestPackageVersion = latest.version;
342
+ if (packageVersion === 'unknown') {
343
+ updateStatus = 'unknown (local package version unavailable)';
344
+ }
345
+ else {
346
+ const comparison = compareSemver(packageVersion, latest.version);
347
+ if (comparison === null) {
348
+ updateStatus = 'unknown (version format not comparable)';
349
+ }
350
+ else if (comparison < 0) {
351
+ updateStatus = `update available (${packageVersion} -> ${latest.version})`;
352
+ }
353
+ else {
354
+ updateStatus = 'up to date';
355
+ }
356
+ }
357
+ }
358
+ else {
359
+ latestPackageVersion = 'unknown';
360
+ updateStatus = latest.note ?? 'unknown';
361
+ }
362
+ }
363
+ else {
364
+ updateStatus = 'unknown (npm unresolved)';
365
+ }
366
+ const daemonStatus = {
367
+ status,
368
+ home: state.home,
369
+ listen: state.listen,
370
+ pid: state.pidInfo?.pid ?? null,
371
+ startedAt: state.pidInfo?.startedAt ?? null,
372
+ owner,
373
+ logPath: state.logPath,
374
+ runningAgents,
375
+ idleAgents,
376
+ runtimeNode: `${resolvedNode.nodePath} (${resolvedNode.source})`,
377
+ runtimeNpm,
378
+ packageVersion,
379
+ latestPackageVersion,
380
+ updateStatus,
381
+ note,
382
+ };
383
+ return {
384
+ type: 'list',
385
+ data: toStatusRows(daemonStatus),
386
+ schema: createStatusSchema(daemonStatus),
387
+ };
388
+ }
389
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, SingleResult, ListResult } from '../../output/index.js';
3
+ interface StopResult {
4
+ action: 'stopped' | 'not_running';
5
+ home: string;
6
+ pid: string;
7
+ message: string;
8
+ }
9
+ export type StopCommandResult = SingleResult<StopResult> | ListResult<StopResult>;
10
+ export declare function runStopCommand(options: CommandOptions, _command: Command): Promise<StopCommandResult>;
11
+ export {};
12
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAA8B,MAAM,uBAAuB,CAAA;AAEjH,UAAU,UAAU;IAClB,MAAM,EAAE,SAAS,GAAG,aAAa,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAgBD,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AA6BjF,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
@@ -0,0 +1,69 @@
1
+ import { stopLocalDaemon, DEFAULT_STOP_TIMEOUT_MS } from './local-daemon.js';
2
+ const stopResultSchema = {
3
+ idField: 'action',
4
+ columns: [
5
+ {
6
+ header: 'STATUS',
7
+ field: 'action',
8
+ color: (value) => (value === 'stopped' ? 'green' : 'yellow'),
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 toStopResult(result) {
31
+ return {
32
+ action: result.action,
33
+ home: result.home,
34
+ pid: result.pid === null ? '-' : String(result.pid),
35
+ message: result.message,
36
+ };
37
+ }
38
+ export async function runStopCommand(options, _command) {
39
+ const home = typeof options.home === 'string' ? options.home : undefined;
40
+ const force = options.force === true;
41
+ const timeoutMs = parseTimeoutMs(options.timeout);
42
+ const all = options.all === true;
43
+ const listen = typeof options.listen === 'string' ? options.listen : undefined;
44
+ const port = typeof options.port === 'string' ? options.port : undefined;
45
+ try {
46
+ const result = await stopLocalDaemon({ home, force, timeoutMs, all, listen, port });
47
+ if (Array.isArray(result)) {
48
+ return {
49
+ type: 'list',
50
+ data: result.map(toStopResult),
51
+ schema: stopResultSchema,
52
+ };
53
+ }
54
+ return {
55
+ type: 'single',
56
+ data: toStopResult(result),
57
+ schema: stopResultSchema,
58
+ };
59
+ }
60
+ catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ const error = {
63
+ code: 'STOP_FAILED',
64
+ message: `Failed to stop local daemon: ${message}`,
65
+ };
66
+ throw error;
67
+ }
68
+ }
69
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAA8B,MAAM,mBAAmB,CAAA;AAUxG,MAAM,gBAAgB,GAA6B;IACjD,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE;QACP;YACE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC7D;QACD,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QACjC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC/B,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KACxC;CACF,CAAA;AAID,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,0BAA0B,GAAG,EAAE;YACxC,OAAO,EAAE,8CAA8C;SACxD,CAAA;QACD,MAAM,KAAK,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,MAA6B;IACjD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,QAAiB;IAEjB,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAA;IACpC,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAA;IAChC,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAExE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAEnF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC9B,MAAM,EAAE,gBAAgB;aACzB,CAAA;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;YAC1B,MAAM,EAAE,gBAAgB;SACzB,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,gCAAgC,OAAO,EAAE;SACnD,CAAA;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ import { type DaemonPackageContext } from './package-context.js';
3
+ export interface DaemonUpdateOptions {
4
+ home?: string;
5
+ yes?: boolean;
6
+ }
7
+ export declare function runDaemonUpdateCommand(options: DaemonUpdateOptions): Promise<void>;
8
+ export declare function runDaemonUpdateCommandForPackage(options: DaemonUpdateOptions, packageContext: DaemonPackageContext): Promise<void>;
9
+ export declare function runDaemonUpdateCommandOrExit(options: DaemonUpdateOptions, packageContext?: Partial<DaemonPackageContext>): Promise<void>;
10
+ export declare function updateCommand(packageContext?: Partial<DaemonPackageContext>): Command;
11
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAQ7B,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAoBD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF;AAED,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,mBAAmB,EAC5B,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,mBAAmB,EAC5B,cAAc,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACjD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,aAAa,CAAC,cAAc,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAAG,OAAO,CASzF"}
@@ -0,0 +1,88 @@
1
+ import { confirm, isCancel } from '@clack/prompts';
2
+ import { spawn } from 'node:child_process';
3
+ import { Command } from 'commander';
4
+ import chalk from 'chalk';
5
+ import { runRestartCommand } from './restart.js';
6
+ import { resolveLocalDaemonState } from './local-daemon.js';
7
+ import { resolveDaemonPackageContext, } from './package-context.js';
8
+ import { resolveNpmInvocationFromNode, resolvePreferredNodePath, } from './runtime-toolchain.js';
9
+ import { getErrorMessage } from '../../utils/errors.js';
10
+ function runCommand(command, args) {
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn(command, args, {
13
+ stdio: 'inherit',
14
+ env: process.env,
15
+ });
16
+ child.once('error', reject);
17
+ child.once('exit', (code, signal) => {
18
+ if (signal) {
19
+ reject(new Error(`Command exited via signal ${signal}`));
20
+ return;
21
+ }
22
+ resolve(code ?? 1);
23
+ });
24
+ });
25
+ }
26
+ export async function runDaemonUpdateCommand(options) {
27
+ await runDaemonUpdateCommandForPackage(options, resolveDaemonPackageContext());
28
+ }
29
+ export async function runDaemonUpdateCommandForPackage(options, packageContext) {
30
+ const daemonState = resolveLocalDaemonState({ home: options.home });
31
+ const resolvedNode = resolvePreferredNodePath({
32
+ daemonPid: daemonState.running ? daemonState.pidInfo?.pid : null,
33
+ fallbackNodePath: process.execPath,
34
+ });
35
+ const npm = resolveNpmInvocationFromNode(resolvedNode.nodePath);
36
+ const args = [...npm.argsPrefix, 'install', '-g', `${packageContext.packageName}@latest`];
37
+ const exitCode = await runCommand(npm.command, args);
38
+ if (exitCode !== 0) {
39
+ throw new Error(`Update command failed with exit code ${exitCode}`);
40
+ }
41
+ let shouldRestart = options.yes === true;
42
+ if (!shouldRestart) {
43
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
44
+ console.log(chalk.yellow('Update complete. Restart skipped (non-interactive terminal).'));
45
+ console.log(chalk.dim('Run `junction daemon restart` when ready.'));
46
+ return;
47
+ }
48
+ console.log(chalk.yellow('Restart will stop running agents, but they can continue from persisted state after restart.'));
49
+ const answer = await confirm({
50
+ message: 'Restart daemon now?',
51
+ active: 'Restart now',
52
+ inactive: 'Later',
53
+ initialValue: true,
54
+ });
55
+ if (isCancel(answer)) {
56
+ console.log(chalk.yellow('Update complete. Restart skipped.'));
57
+ return;
58
+ }
59
+ shouldRestart = answer;
60
+ }
61
+ if (!shouldRestart) {
62
+ console.log(chalk.yellow('Update complete. Restart skipped.'));
63
+ return;
64
+ }
65
+ const restartResult = await runRestartCommand({ home: options.home }, new Command());
66
+ console.log(chalk.green(restartResult.data.message));
67
+ }
68
+ export async function runDaemonUpdateCommandOrExit(options, packageContext = {}) {
69
+ const resolvedContext = resolveDaemonPackageContext(packageContext);
70
+ try {
71
+ await runDaemonUpdateCommandForPackage(options, resolvedContext);
72
+ }
73
+ catch (err) {
74
+ console.error(chalk.red(`Failed to update daemon: ${getErrorMessage(err)}`));
75
+ process.exit(1);
76
+ }
77
+ }
78
+ export function updateCommand(packageContext = {}) {
79
+ const resolvedContext = resolveDaemonPackageContext(packageContext);
80
+ return new Command('update')
81
+ .description('Update local daemon package')
82
+ .option('--home <path>', 'Junction home directory (default: ~/.junction)')
83
+ .option('-y, --yes', 'Restart automatically after update')
84
+ .action(async (options) => {
85
+ await runDaemonUpdateCommandOrExit(options, resolvedContext);
86
+ });
87
+ }
88
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/daemon/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EACL,2BAA2B,GAE5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GAEzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAOvD,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC,CAAA;gBACxD,OAAM;YACR,CAAC;YACD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAA4B;IACvE,MAAM,gCAAgC,CAAC,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,OAA4B,EAC5B,cAAoC;IAEpC,MAAM,WAAW,GAAG,uBAAuB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,wBAAwB,CAAC;QAC5C,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI;QAChE,gBAAgB,EAAE,OAAO,CAAC,QAAQ;KACnC,CAAC,CAAA;IACF,MAAM,GAAG,GAAkB,4BAA4B,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC9E,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,WAAW,SAAS,CAAC,CAAA;IAEzF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACpD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAA;IACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC,CAAA;YACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,6FAA6F,CAC9F,CACF,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAA;YAC9D,OAAM;QACR,CAAC;QAED,aAAa,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAA;QAC9D,OAAM;IACR,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAA;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAA4B,EAC5B,iBAAgD,EAAE;IAElD,MAAM,eAAe,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAA;IACnE,IAAI,CAAC;QACH,MAAM,gCAAgC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,iBAAgD,EAAE;IAC9E,MAAM,eAAe,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAA;IACnE,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,4BAA4B,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from 'commander';
2
+ import { type DaemonStartOptions } from './daemon/local-daemon.js';
3
+ interface OnboardOptions extends DaemonStartOptions {
4
+ timeout?: string;
5
+ }
6
+ export declare function onboardCommand(): Command;
7
+ export declare function runOnboard(options: OnboardOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=onboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AAGjC,UAAU,cAAe,SAAQ,kBAAkB;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA4MD,wBAAgB,cAAc,IAAI,OAAO,CAgBxC;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GvE"}