@straiffi/archon 1.0.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 (124) hide show
  1. package/README.md +224 -0
  2. package/dist/cli.js +216 -0
  3. package/dist/client/assets/index-8_-boBBA.css +2 -0
  4. package/dist/client/assets/index-s_jjeqha.js +176 -0
  5. package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  6. package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  7. package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  8. package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  9. package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  10. package/dist/client/favicon.svg +62 -0
  11. package/dist/client/icons.svg +24 -0
  12. package/dist/client/index.html +14 -0
  13. package/dist/server/db.js +764 -0
  14. package/dist/server/db.js.map +1 -0
  15. package/dist/server/index.js +5134 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/lib/agent.js +1302 -0
  18. package/dist/server/lib/agent.js.map +1 -0
  19. package/dist/server/lib/buildChains.js +2 -0
  20. package/dist/server/lib/buildChains.js.map +1 -0
  21. package/dist/server/lib/buildFlow.js +59 -0
  22. package/dist/server/lib/buildFlow.js.map +1 -0
  23. package/dist/server/lib/buildSequences.js +599 -0
  24. package/dist/server/lib/buildSequences.js.map +1 -0
  25. package/dist/server/lib/bundleActivity.js +95 -0
  26. package/dist/server/lib/bundleActivity.js.map +1 -0
  27. package/dist/server/lib/bundlePullRequests.js +126 -0
  28. package/dist/server/lib/bundlePullRequests.js.map +1 -0
  29. package/dist/server/lib/chatMessages.js +60 -0
  30. package/dist/server/lib/chatMessages.js.map +1 -0
  31. package/dist/server/lib/chatTargets.js +123 -0
  32. package/dist/server/lib/chatTargets.js.map +1 -0
  33. package/dist/server/lib/chatTicketProposals.js +180 -0
  34. package/dist/server/lib/chatTicketProposals.js.map +1 -0
  35. package/dist/server/lib/chats.js +279 -0
  36. package/dist/server/lib/chats.js.map +1 -0
  37. package/dist/server/lib/config.js +3 -0
  38. package/dist/server/lib/config.js.map +1 -0
  39. package/dist/server/lib/cors.js +30 -0
  40. package/dist/server/lib/cors.js.map +1 -0
  41. package/dist/server/lib/directoryPicker.js +174 -0
  42. package/dist/server/lib/directoryPicker.js.map +1 -0
  43. package/dist/server/lib/git.js +1284 -0
  44. package/dist/server/lib/git.js.map +1 -0
  45. package/dist/server/lib/integrations/github.js +511 -0
  46. package/dist/server/lib/integrations/github.js.map +1 -0
  47. package/dist/server/lib/integrations/index.js +162 -0
  48. package/dist/server/lib/integrations/index.js.map +1 -0
  49. package/dist/server/lib/integrations/jira.js +283 -0
  50. package/dist/server/lib/integrations/jira.js.map +1 -0
  51. package/dist/server/lib/integrations/planning.js +27 -0
  52. package/dist/server/lib/integrations/planning.js.map +1 -0
  53. package/dist/server/lib/integrations/types.js +2 -0
  54. package/dist/server/lib/integrations/types.js.map +1 -0
  55. package/dist/server/lib/lightweightPrompt.js +88 -0
  56. package/dist/server/lib/lightweightPrompt.js.map +1 -0
  57. package/dist/server/lib/models.js +219 -0
  58. package/dist/server/lib/models.js.map +1 -0
  59. package/dist/server/lib/preview.js +377 -0
  60. package/dist/server/lib/preview.js.map +1 -0
  61. package/dist/server/lib/previewProxy.js +659 -0
  62. package/dist/server/lib/previewProxy.js.map +1 -0
  63. package/dist/server/lib/projectAutoConfig.js +682 -0
  64. package/dist/server/lib/projectAutoConfig.js.map +1 -0
  65. package/dist/server/lib/projectFileSuggestions.js +133 -0
  66. package/dist/server/lib/projectFileSuggestions.js.map +1 -0
  67. package/dist/server/lib/projectMemory.js +1519 -0
  68. package/dist/server/lib/projectMemory.js.map +1 -0
  69. package/dist/server/lib/projectMemoryPrompt.js +390 -0
  70. package/dist/server/lib/projectMemoryPrompt.js.map +1 -0
  71. package/dist/server/lib/projectMemoryScan.js +681 -0
  72. package/dist/server/lib/projectMemoryScan.js.map +1 -0
  73. package/dist/server/lib/projectMemorySuggestions.js +166 -0
  74. package/dist/server/lib/projectMemorySuggestions.js.map +1 -0
  75. package/dist/server/lib/projectMemoryTransfer.js +958 -0
  76. package/dist/server/lib/projectMemoryTransfer.js.map +1 -0
  77. package/dist/server/lib/projects.js +569 -0
  78. package/dist/server/lib/projects.js.map +1 -0
  79. package/dist/server/lib/promptSkills.js +28 -0
  80. package/dist/server/lib/promptSkills.js.map +1 -0
  81. package/dist/server/lib/queue.js +15 -0
  82. package/dist/server/lib/queue.js.map +1 -0
  83. package/dist/server/lib/reviewFindings.js +390 -0
  84. package/dist/server/lib/reviewFindings.js.map +1 -0
  85. package/dist/server/lib/run.js +416 -0
  86. package/dist/server/lib/run.js.map +1 -0
  87. package/dist/server/lib/runtimePaths.js +93 -0
  88. package/dist/server/lib/runtimePaths.js.map +1 -0
  89. package/dist/server/lib/shell.js +27 -0
  90. package/dist/server/lib/shell.js.map +1 -0
  91. package/dist/server/lib/skills.js +124 -0
  92. package/dist/server/lib/skills.js.map +1 -0
  93. package/dist/server/lib/startDev.js +18 -0
  94. package/dist/server/lib/startDev.js.map +1 -0
  95. package/dist/server/lib/staticClient.js +80 -0
  96. package/dist/server/lib/staticClient.js.map +1 -0
  97. package/dist/server/lib/terminal.js +366 -0
  98. package/dist/server/lib/terminal.js.map +1 -0
  99. package/dist/server/lib/ticketDependencies.js +174 -0
  100. package/dist/server/lib/ticketDependencies.js.map +1 -0
  101. package/dist/server/lib/ticketMessages.js +65 -0
  102. package/dist/server/lib/ticketMessages.js.map +1 -0
  103. package/dist/server/lib/ticketOpenQuestions.js +128 -0
  104. package/dist/server/lib/ticketOpenQuestions.js.map +1 -0
  105. package/dist/server/lib/ticketUndo.js +549 -0
  106. package/dist/server/lib/ticketUndo.js.map +1 -0
  107. package/dist/server/lib/tickets.js +981 -0
  108. package/dist/server/lib/tickets.js.map +1 -0
  109. package/dist/server/lib/types.js +2 -0
  110. package/dist/server/lib/types.js.map +1 -0
  111. package/dist/server/package.json +3 -0
  112. package/dist/server/workers/build.js +229 -0
  113. package/dist/server/workers/build.js.map +1 -0
  114. package/dist/server/workers/chat.js +190 -0
  115. package/dist/server/workers/chat.js.map +1 -0
  116. package/dist/server/workers/followUp.js +204 -0
  117. package/dist/server/workers/followUp.js.map +1 -0
  118. package/dist/server/workers/plan.js +1130 -0
  119. package/dist/server/workers/plan.js.map +1 -0
  120. package/dist/server/workers/planFollowUp.js +360 -0
  121. package/dist/server/workers/planFollowUp.js.map +1 -0
  122. package/dist/server/workers/review.js +167 -0
  123. package/dist/server/workers/review.js.map +1 -0
  124. package/package.json +40 -0
@@ -0,0 +1,416 @@
1
+ import { spawn } from "child_process";
2
+ import { existsSync } from "fs";
3
+ import { join } from "path";
4
+ import { resolveWorktreePath } from "./git.js";
5
+ import { getProjectById, getProjectRunConfig } from "./projects.js";
6
+ import { applyDetectedPreviewTarget, buildPreviewProxyUrl, createIdlePreviewStatus, createRunPreviewStatus, detectPreviewTargets, inferPreviewTargetsFromLogChunk, isPreviewService, normalizePreviewLogText, resolveReachablePreviewTarget, } from "./preview.js";
7
+ import { deactivatePreviewProxyForProject, ensurePreviewProxyForProject, } from "./previewProxy.js";
8
+ import { resolveShell } from "./shell.js";
9
+ import { isTicketRunSetupReady } from "./ticketDependencies.js";
10
+ import { listTicketsInRunContext, resolveTicketBranch, resolveTicketContextKey, } from "./tickets.js";
11
+ const runningProcesses = new Map();
12
+ const MAX_PREVIEW_LOG_BUFFER_CHARS = 16_000;
13
+ const getRunConfig = (project) => getProjectRunConfig(project);
14
+ export const resolveProjectRunContextKey = (projectId, target = {}) => {
15
+ if (target.kind === "bundle" && target.bundleId) {
16
+ return `project:${projectId}:bundle:${target.bundleId}:run`;
17
+ }
18
+ return `project:${projectId}:root-run`;
19
+ };
20
+ const hasRunnableCommands = (runConfig) => {
21
+ if (!runConfig) {
22
+ return false;
23
+ }
24
+ const setup = Array.isArray(runConfig.setup) ? runConfig.setup : [];
25
+ const services = Array.isArray(runConfig.services) ? runConfig.services : [];
26
+ return setup.length > 0 || services.length > 0;
27
+ };
28
+ const getErrorMessage = (error) => {
29
+ return error instanceof Error ? error.message : String(error);
30
+ };
31
+ const emitRunStateForContext = (io, ticket, isRunningValue) => {
32
+ const relatedTickets = listTicketsInRunContext(ticket);
33
+ if (relatedTickets.length === 0) {
34
+ io.emit("ticket:updated", { ...ticket, is_running: isRunningValue });
35
+ return;
36
+ }
37
+ for (const relatedTicket of relatedTickets) {
38
+ io.emit("ticket:updated", { ...relatedTicket, is_running: isRunningValue });
39
+ }
40
+ };
41
+ const resolveRunContextKey = (ticketOrKey) => {
42
+ if (!ticketOrKey) {
43
+ return null;
44
+ }
45
+ if (typeof ticketOrKey === "string") {
46
+ return ticketOrKey;
47
+ }
48
+ return resolveTicketContextKey(ticketOrKey);
49
+ };
50
+ export const hasRunConfig = (project = null) => hasRunnableCommands(getRunConfig(project));
51
+ export const isRunning = (ticketOrKey) => {
52
+ const contextKey = resolveRunContextKey(ticketOrKey);
53
+ return contextKey ? runningProcesses.has(contextKey) : false;
54
+ };
55
+ export const getActiveRunStatus = () => {
56
+ const iterator = runningProcesses.values().next();
57
+ return iterator.done ? null : iterator.value.active_run;
58
+ };
59
+ export const getActiveRunStatusForProject = (projectId) => {
60
+ if (!projectId) {
61
+ return null;
62
+ }
63
+ for (const state of runningProcesses.values()) {
64
+ if (state.active_run.project_id === projectId) {
65
+ return state.active_run;
66
+ }
67
+ }
68
+ return null;
69
+ };
70
+ export const getActiveRunTicketId = () => {
71
+ const activeRun = getActiveRunStatus();
72
+ return activeRun?.kind === "ticket" ? activeRun.ticket_id : null;
73
+ };
74
+ export const getPreviewStatusForProject = (projectId) => {
75
+ const project = getProjectById(projectId);
76
+ if (!project) {
77
+ return null;
78
+ }
79
+ const activeRun = getActiveRunStatusForProject(project.id);
80
+ const activeState = activeRun
81
+ ? runningProcesses.get(activeRun.context_key)
82
+ : null;
83
+ if (activeState) {
84
+ return activeState.preview_status;
85
+ }
86
+ return createIdlePreviewStatus(project, getRunConfig(project));
87
+ };
88
+ const isActiveRunState = (contextKey, state) => {
89
+ return runningProcesses.get(contextKey) === state && !state.cancelled;
90
+ };
91
+ const isProcessAlive = (proc) => proc.exitCode === null && proc.signalCode === null;
92
+ const untrackProcess = (state, proc) => {
93
+ const index = state.processes.indexOf(proc);
94
+ if (index >= 0) {
95
+ state.processes.splice(index, 1);
96
+ }
97
+ };
98
+ const trackProcess = (state, proc) => {
99
+ const cleanup = () => {
100
+ untrackProcess(state, proc);
101
+ };
102
+ state.processes.push(proc);
103
+ proc.on("close", cleanup);
104
+ proc.on("error", cleanup);
105
+ return proc;
106
+ };
107
+ const spawnManagedProcess = (cmd, cwd, stdio, state) => {
108
+ const env = { ...process.env };
109
+ delete env.npm_config_prefix;
110
+ const shell = resolveShell();
111
+ const proc = spawn(shell, ["-i", "-c", cmd], {
112
+ cwd,
113
+ stdio,
114
+ detached: process.platform !== "win32",
115
+ env,
116
+ });
117
+ return trackProcess(state, proc);
118
+ };
119
+ export const openIde = (cwd, ideCommand) => {
120
+ spawn(resolveShell(), ["-i", "-c", `${ideCommand} .`], {
121
+ cwd,
122
+ stdio: "ignore",
123
+ detached: true,
124
+ }).unref();
125
+ };
126
+ export const openTicketIde = (ticket, project = null) => {
127
+ return openTicketIdeInWorkspace(ticket, project, null);
128
+ };
129
+ export const openTicketIdeInWorkspace = (ticket, project = null, workspaceCwd = null) => {
130
+ const runConfig = getRunConfig(project);
131
+ const branch = resolveTicketBranch(ticket);
132
+ if (!runConfig?.ide || (!branch && !workspaceCwd)) {
133
+ return false;
134
+ }
135
+ const cwd = workspaceCwd ?? resolveWorktreePath(branch, project);
136
+ openIde(cwd, runConfig.ide);
137
+ return true;
138
+ };
139
+ const killManagedProcess = (proc, signal) => {
140
+ if (!isProcessAlive(proc)) {
141
+ return;
142
+ }
143
+ if (proc.pid && process.platform !== "win32") {
144
+ try {
145
+ process.kill(-proc.pid, signal);
146
+ return;
147
+ }
148
+ catch (error) {
149
+ if (error.code === "ESRCH") {
150
+ return;
151
+ }
152
+ }
153
+ }
154
+ try {
155
+ proc.kill(signal);
156
+ }
157
+ catch { }
158
+ };
159
+ const waitForProcessesToExit = async (processes, timeoutMs) => {
160
+ const deadline = Date.now() + timeoutMs;
161
+ await new Promise((resolve) => {
162
+ const check = () => {
163
+ const allDone = processes.every((proc) => !isProcessAlive(proc));
164
+ if (allDone || Date.now() >= deadline) {
165
+ resolve();
166
+ }
167
+ else {
168
+ setTimeout(check, 100);
169
+ }
170
+ };
171
+ setTimeout(check, 100);
172
+ });
173
+ };
174
+ const runCommand = (cmd, cwd, state) => new Promise((resolve, reject) => {
175
+ const proc = spawnManagedProcess(cmd, cwd, ["ignore", "pipe", "pipe"], state);
176
+ let output = "";
177
+ const appendOutput = (chunk) => {
178
+ output = `${output}${chunk.toString()}`;
179
+ if (output.length > 8000) {
180
+ output = output.slice(-8000);
181
+ }
182
+ };
183
+ proc.stdout?.on("data", appendOutput);
184
+ proc.stderr?.on("data", appendOutput);
185
+ proc.on("close", (code) => {
186
+ if (code === 0) {
187
+ resolve();
188
+ }
189
+ else {
190
+ const suffix = output.trim() ? `\n${output.trim()}` : "";
191
+ reject(new Error(`Setup command failed (exit ${code}): ${cmd}${suffix}`));
192
+ }
193
+ });
194
+ proc.on("error", (err) => {
195
+ reject(err);
196
+ });
197
+ });
198
+ export const runSetupCommandsInWorkspace = async (project, cwd) => {
199
+ const runConfig = getRunConfig(project);
200
+ const setupCommands = runConfig?.setup ?? [];
201
+ if (setupCommands.length === 0) {
202
+ return;
203
+ }
204
+ const state = { processes: [] };
205
+ for (const cmd of setupCommands) {
206
+ await runCommand(cmd, cwd, state);
207
+ }
208
+ };
209
+ const clearRunState = (contextKey, state, onStopped) => {
210
+ if (runningProcesses.get(contextKey) !== state) {
211
+ return;
212
+ }
213
+ deactivatePreviewProxyForProject(state.active_run.project_id);
214
+ state.preview_log_buffer = "";
215
+ runningProcesses.delete(contextKey);
216
+ onStopped?.();
217
+ };
218
+ const startRun = async ({ activeRun, cwd, logLabelPrefix, onStopped, project, runConfig, skipSetup = false, }) => {
219
+ const contextKey = activeRun.context_key;
220
+ const state = {
221
+ processes: [],
222
+ cancelled: false,
223
+ active_run: activeRun,
224
+ preview_status: createRunPreviewStatus(project, runConfig),
225
+ preview_log_buffer: "",
226
+ };
227
+ runningProcesses.set(contextKey, state);
228
+ if (!existsSync(cwd)) {
229
+ console.error(`[run] path does not exist: ${cwd}`);
230
+ clearRunState(contextKey, state, onStopped);
231
+ return;
232
+ }
233
+ if (!skipSetup) {
234
+ try {
235
+ for (const cmd of runConfig.setup ?? []) {
236
+ await runCommand(cmd, cwd, state);
237
+ if (!isActiveRunState(contextKey, state)) {
238
+ return;
239
+ }
240
+ }
241
+ }
242
+ catch (err) {
243
+ if (state.cancelled) {
244
+ return;
245
+ }
246
+ console.error(`[run] setup failed for ${logLabelPrefix}:`, getErrorMessage(err));
247
+ clearRunState(contextKey, state, onStopped);
248
+ return;
249
+ }
250
+ }
251
+ if (!isActiveRunState(contextKey, state)) {
252
+ return;
253
+ }
254
+ const cleanupIfAllDead = () => {
255
+ if (runningProcesses.get(contextKey) !== state || state.cancelled) {
256
+ return;
257
+ }
258
+ const anyAlive = state.processes.some(isProcessAlive);
259
+ if (!anyAlive) {
260
+ clearRunState(contextKey, state, onStopped);
261
+ }
262
+ };
263
+ for (const service of runConfig.services ?? []) {
264
+ const serviceCwd = service.cwd ? join(cwd, service.cwd) : cwd;
265
+ const label = service.name ?? service.cmd;
266
+ const proc = spawnManagedProcess(service.cmd, serviceCwd, ["ignore", "pipe", "pipe"], state);
267
+ const handleLogChunk = (data) => {
268
+ if (!isPreviewService(service, state.preview_status)) {
269
+ return;
270
+ }
271
+ state.preview_log_buffer = normalizePreviewLogText(`${state.preview_log_buffer}${data.toString()}`).slice(-MAX_PREVIEW_LOG_BUFFER_CHARS);
272
+ const detectedTargets = detectPreviewTargets(state.preview_log_buffer, state.preview_status.capability);
273
+ const previewTargets = detectedTargets.length > 0
274
+ ? detectedTargets
275
+ : inferPreviewTargetsFromLogChunk(state.preview_log_buffer, project, service, state.preview_status.capability);
276
+ if (previewTargets.length === 0) {
277
+ return;
278
+ }
279
+ void (async () => {
280
+ for (const detectedTarget of previewTargets) {
281
+ const reachableTarget = await resolveReachablePreviewTarget(detectedTarget, project.preview_path);
282
+ if (!reachableTarget || !isActiveRunState(contextKey, state)) {
283
+ continue;
284
+ }
285
+ if (state.preview_status.detected_url === reachableTarget.url &&
286
+ state.preview_status.proxy_url) {
287
+ return;
288
+ }
289
+ try {
290
+ const proxyOrigin = await ensurePreviewProxyForProject(project.id, reachableTarget.url);
291
+ state.preview_status = {
292
+ ...applyDetectedPreviewTarget(state.preview_status, reachableTarget),
293
+ proxy_url: buildPreviewProxyUrl(proxyOrigin, reachableTarget.url),
294
+ };
295
+ }
296
+ catch (error) {
297
+ state.preview_status = {
298
+ ...state.preview_status,
299
+ state: "error",
300
+ proxy_url: null,
301
+ message: getErrorMessage(error) || "Preview proxy failed",
302
+ };
303
+ }
304
+ return;
305
+ }
306
+ })();
307
+ };
308
+ proc.stdout?.on("data", (data) => {
309
+ console.log(`[run:${logLabelPrefix}:${label}] ${data.toString().trimEnd()}`);
310
+ handleLogChunk(data);
311
+ });
312
+ proc.stderr?.on("data", (data) => {
313
+ console.error(`[run:${logLabelPrefix}:${label}] ${data.toString().trimEnd()}`);
314
+ handleLogChunk(data);
315
+ });
316
+ proc.on("close", (code) => {
317
+ console.log(`[run:${logLabelPrefix}:${label}] exited with code ${code}`);
318
+ cleanupIfAllDead();
319
+ });
320
+ proc.on("error", (err) => {
321
+ console.error(`[run:${logLabelPrefix}:${label}] error: ${getErrorMessage(err)}`);
322
+ cleanupIfAllDead();
323
+ });
324
+ }
325
+ if (!isActiveRunState(contextKey, state)) {
326
+ return;
327
+ }
328
+ };
329
+ export const stopAllTickets = async () => {
330
+ const contextKeys = [...runningProcesses.keys()];
331
+ await Promise.all(contextKeys.map(stopTicket));
332
+ };
333
+ export const stopTicket = async (ticketOrKey) => {
334
+ const contextKey = resolveRunContextKey(ticketOrKey);
335
+ if (!contextKey) {
336
+ return;
337
+ }
338
+ const state = runningProcesses.get(contextKey);
339
+ if (!state) {
340
+ return;
341
+ }
342
+ state.cancelled = true;
343
+ const { processes } = state;
344
+ for (const proc of processes) {
345
+ killManagedProcess(proc, "SIGTERM");
346
+ }
347
+ await waitForProcessesToExit(processes, 5000);
348
+ for (const proc of processes) {
349
+ if (isProcessAlive(proc)) {
350
+ killManagedProcess(proc, "SIGKILL");
351
+ }
352
+ }
353
+ await waitForProcessesToExit(processes, 1000);
354
+ if (runningProcesses.get(contextKey) === state) {
355
+ deactivatePreviewProxyForProject(state.active_run.project_id);
356
+ state.preview_log_buffer = "";
357
+ runningProcesses.delete(contextKey);
358
+ }
359
+ };
360
+ export const runTicket = async (ticket, io, project = null) => {
361
+ return runTicketInWorkspace(ticket, io, project, null);
362
+ };
363
+ export const runTicketInWorkspace = async (ticket, io, project = null, workspaceCwd = null) => {
364
+ const runConfig = getRunConfig(project);
365
+ if (!runConfig || !hasRunnableCommands(runConfig)) {
366
+ return;
367
+ }
368
+ const contextKey = resolveTicketContextKey(ticket);
369
+ const branch = resolveTicketBranch(ticket);
370
+ if (!contextKey || (!branch && !workspaceCwd)) {
371
+ return;
372
+ }
373
+ const cwd = workspaceCwd ?? resolveWorktreePath(branch, project);
374
+ await startRun({
375
+ activeRun: {
376
+ kind: "ticket",
377
+ context_key: contextKey,
378
+ ticket_id: ticket.id,
379
+ project_id: ticket.project_id,
380
+ },
381
+ cwd,
382
+ logLabelPrefix: `ticket:${ticket.id}`,
383
+ onStopped: () => emitRunStateForContext(io, ticket, false),
384
+ project: project,
385
+ runConfig,
386
+ skipSetup: isTicketRunSetupReady(ticket),
387
+ });
388
+ };
389
+ export const runProject = async (project, options = {}) => {
390
+ const runConfig = getRunConfig(project);
391
+ if (!runConfig || !hasRunnableCommands(runConfig)) {
392
+ return;
393
+ }
394
+ const targetKind = options.targetKind ?? "repo_root";
395
+ const targetBundleId = targetKind === "bundle" ? (options.targetBundleId ?? null) : null;
396
+ await startRun({
397
+ activeRun: {
398
+ kind: "project",
399
+ context_key: resolveProjectRunContextKey(project.id, {
400
+ kind: targetKind,
401
+ bundleId: targetBundleId,
402
+ }),
403
+ project_id: project.id,
404
+ target_kind: targetKind,
405
+ target_bundle_id: targetBundleId,
406
+ },
407
+ cwd: options.cwd ?? project.repo_path,
408
+ logLabelPrefix: `project:${project.id}`,
409
+ project,
410
+ runConfig,
411
+ });
412
+ };
413
+ export const stopProjectRun = async (projectId, target = {}) => {
414
+ await stopTicket(resolveProjectRunContextKey(projectId, target));
415
+ };
416
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../server/lib/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,gBAAgB,EAChB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAmBtB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAC5D,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C,MAAM,YAAY,GAAG,CAAC,OAAuB,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAiB,EACjB,SAAiE,EAAE,EACnE,EAAE;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,WAAW,SAAS,WAAW,MAAM,CAAC,QAAQ,MAAM,CAAC;IAC9D,CAAC;IAED,OAAO,WAAW,SAAS,WAAW,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,SAA2B,EAAE,EAAE;IAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,EAAE;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,EAAsB,EACtB,MAAgE,EAChE,cAAuB,EACvB,EAAE;IACF,MAAM,cAAc,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAAsB,EAAE,EAAE;IACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAA0B,IAAI,EAAE,EAAE,CAC7D,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,WAAsB,EAAE,EAAE;IAClD,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAAoC,EACpC,EAAE;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,OAAO,SAAS,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAoC,EACd,EAAE;IACxB,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,SAAS;QAC3B,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,cAAc,CAAC;IACpC,CAAC;IAED,OAAO,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,KAAsB,EAAE,EAAE;IACtE,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAkB,EAAE,EAAE,CAC5C,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;AAErD,MAAM,cAAc,GAAG,CAAC,KAAqB,EAAE,IAAkB,EAAE,EAAE;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,IAAkB,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,GAAW,EACX,GAAW,EACX,KAAmB,EACnB,KAAqB,EACrB,EAAE;IACF,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,OAAO,GAAG,CAAC,iBAAiB,CAAC;IAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;QAC3C,GAAG;QACH,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;QACtC,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,UAAkB,EAAE,EAAE;IACzD,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,UAAU,IAAI,CAAC,EAAE;QACrD,GAAG;QACH,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,KAAK,EAAE,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,UAA0B,IAAI,EAC9B,EAAE;IACF,OAAO,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,MAAc,EACd,UAA0B,IAAI,EAC9B,eAA8B,IAAI,EAClC,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,IAAI,mBAAmB,CAAC,MAAgB,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAkB,EAAE,MAAsB,EAAE,EAAE;IACxE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACtD,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAClC,SAAyB,EACzB,SAAiB,EACjB,EAAE;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACtC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,KAAqB,EAAE,EAAE,CACrE,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IACpC,MAAM,IAAI,GAAG,mBAAmB,CAC9B,GAAG,EACH,GAAG,EACH,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAC1B,KAAK,CACN,CAAC;IACF,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,CACJ,IAAI,KAAK,CAAC,8BAA8B,IAAI,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,CAClE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,OAAuB,EACvB,GAAW,EACX,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IAC7C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,UAAkB,EAClB,KAAsB,EACtB,SAAsB,EACtB,EAAE;IACF,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,gCAAgC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9D,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC9B,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,SAAS,EAAE,EAAE,CAAC;AAChB,CAAC,CAAC;AAYF,MAAM,QAAQ,GAAG,KAAK,EAAE,EACtB,SAAS,EACT,GAAG,EACH,cAAc,EACd,SAAS,EACT,OAAO,EACP,SAAS,EACT,SAAS,GAAG,KAAK,GACD,EAAE,EAAE;IACpB,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC;IACzC,MAAM,KAAK,GAAoB;QAC7B,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC;QAC1D,kBAAkB,EAAE,EAAE;KACvB,CAAC;IACF,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAExC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;QACnD,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACH,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACxC,MAAM,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAElC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;oBACzC,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,OAAO,CAAC,KAAK,CACX,0BAA0B,cAAc,GAAG,EAC3C,eAAe,CAAC,GAAG,CAAC,CACrB,CAAC;YACF,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;QAC1C,MAAM,IAAI,GAAG,mBAAmB,CAC9B,OAAO,CAAC,GAAG,EACX,UAAU,EACV,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAC1B,KAAK,CACN,CAAC;QACF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;YACtC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,KAAK,CAAC,kBAAkB,GAAG,uBAAuB,CAChD,GAAG,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAChD,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC;YAEvC,MAAM,eAAe,GAAG,oBAAoB,CAC1C,KAAK,CAAC,kBAAkB,EACxB,KAAK,CAAC,cAAc,CAAC,UAAU,CAChC,CAAC;YACF,MAAM,cAAc,GAClB,eAAe,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,+BAA+B,CAC7B,KAAK,CAAC,kBAAkB,EACxB,OAAO,EACP,OAAO,EACP,KAAK,CAAC,cAAc,CAAC,UAAU,CAChC,CAAC;YAER,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,KAAK,MAAM,cAAc,IAAI,cAAc,EAAE,CAAC;oBAC5C,MAAM,eAAe,GAAG,MAAM,6BAA6B,CACzD,cAAc,EACd,OAAO,CAAC,YAAY,CACrB,CAAC;oBACF,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;wBAC7D,SAAS;oBACX,CAAC;oBAED,IACE,KAAK,CAAC,cAAc,CAAC,YAAY,KAAK,eAAe,CAAC,GAAG;wBACzD,KAAK,CAAC,cAAc,CAAC,SAAS,EAC9B,CAAC;wBACD,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,WAAW,GAAG,MAAM,4BAA4B,CACpD,OAAO,CAAC,EAAE,EACV,eAAe,CAAC,GAAG,CACpB,CAAC;wBACF,KAAK,CAAC,cAAc,GAAG;4BACrB,GAAG,0BAA0B,CAC3B,KAAK,CAAC,cAAc,EACpB,eAAe,CAChB;4BACD,SAAS,EAAE,oBAAoB,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC;yBAClE,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,KAAK,CAAC,cAAc,GAAG;4BACrB,GAAG,KAAK,CAAC,cAAc;4BACvB,KAAK,EAAE,OAAO;4BACd,SAAS,EAAE,IAAI;4BACf,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,sBAAsB;yBAC1D,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACT,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,OAAO,CAAC,GAAG,CACT,QAAQ,cAAc,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAChE,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,OAAO,CAAC,KAAK,CACX,QAAQ,cAAc,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAChE,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,cAAc,IAAI,KAAK,sBAAsB,IAAI,EAAE,CAAC,CAAC;YACzE,gBAAgB,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,KAAK,CACX,QAAQ,cAAc,IAAI,KAAK,YAAY,eAAe,CAAC,GAAG,CAAC,EAAE,CAClE,CAAC;YACF,gBAAgB,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;IACvC,MAAM,WAAW,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,WAAsB,EAAE,EAAE;IACzD,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;QAC/C,gCAAgC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9D,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC9B,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,MAAc,EACd,EAAsB,EACtB,UAA0B,IAAI,EAC9B,EAAE;IACF,OAAO,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAc,EACd,EAAsB,EACtB,UAA0B,IAAI,EAC9B,eAA8B,IAAI,EAClC,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,IAAI,mBAAmB,CAAC,MAAgB,EAAE,OAAO,CAAC,CAAC;IAE3E,MAAM,QAAQ,CAAC;QACb,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B;QACD,GAAG;QACH,cAAc,EAAE,UAAU,MAAM,CAAC,EAAE,EAAE;QACrC,SAAS,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC;QAC1D,OAAO,EAAE,OAAkB;QAC3B,SAAS;QACT,SAAS,EAAE,qBAAqB,CAAC,MAAM,CAAC;KACzC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,OAAgB,EAChB,UAII,EAAE,EACN,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IACrD,MAAM,cAAc,GAClB,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,MAAM,QAAQ,CAAC;QACb,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC,EAAE,EAAE;gBACnD,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,cAAc;aACzB,CAAC;YACF,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,WAAW,EAAE,UAAU;YACvB,gBAAgB,EAAE,cAAc;SACjC;QACD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS;QACrC,cAAc,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;QACvC,OAAO;QACP,SAAS;KACV,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,SAAiB,EACjB,SAAiE,EAAE,EACnE,EAAE;IACF,MAAM,UAAU,CAAC,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { existsSync, mkdirSync } from 'fs';
2
+ import { homedir, tmpdir } from 'os';
3
+ import { dirname, join } from 'path';
4
+ const withFallback = (value, fallback) => {
5
+ const normalized = value?.trim();
6
+ return normalized ? normalized : fallback;
7
+ };
8
+ const uniquePaths = (paths) => {
9
+ const seen = new Set();
10
+ const resolvedPaths = [];
11
+ for (const candidate of paths) {
12
+ const normalized = candidate?.trim();
13
+ if (!normalized || seen.has(normalized)) {
14
+ continue;
15
+ }
16
+ seen.add(normalized);
17
+ resolvedPaths.push(normalized);
18
+ }
19
+ return resolvedPaths;
20
+ };
21
+ const resolveUserDataRoot = () => {
22
+ if (process.platform === 'darwin') {
23
+ return join(homedir(), 'Library', 'Application Support');
24
+ }
25
+ if (process.platform === 'win32') {
26
+ return withFallback(process.env.LOCALAPPDATA, join(homedir(), 'AppData', 'Local'));
27
+ }
28
+ return withFallback(process.env.XDG_DATA_HOME, join(homedir(), '.local', 'share'));
29
+ };
30
+ const resolveUserConfigRoot = () => {
31
+ if (process.platform === 'win32') {
32
+ return withFallback(process.env.APPDATA, join(homedir(), 'AppData', 'Roaming'));
33
+ }
34
+ return withFallback(process.env.XDG_CONFIG_HOME, join(homedir(), '.config'));
35
+ };
36
+ export const resolveArchonAppDataDirectory = () => {
37
+ const directoryName = process.platform === 'linux' ? 'archon' : 'Archon';
38
+ return join(resolveUserDataRoot(), directoryName);
39
+ };
40
+ export const resolveArchonDbPath = () => {
41
+ const configuredPath = process.env.DB_PATH?.trim();
42
+ if (configuredPath) {
43
+ return configuredPath;
44
+ }
45
+ return join(resolveArchonAppDataDirectory(), 'archon.db');
46
+ };
47
+ export const resolveArchonStageSnapshotDir = () => {
48
+ const configuredPath = process.env.ARCHON_STAGE_SNAPSHOT_DIR?.trim();
49
+ if (configuredPath) {
50
+ return configuredPath;
51
+ }
52
+ return join(tmpdir(), 'archon-ticket-stage-changes');
53
+ };
54
+ export const resolveOpencodeDbPathCandidates = () => {
55
+ const configuredPath = process.env.OPENCODE_DB_PATH?.trim();
56
+ if (configuredPath) {
57
+ return [configuredPath];
58
+ }
59
+ const dataRoot = resolveUserDataRoot();
60
+ if (process.platform === 'darwin') {
61
+ return uniquePaths([
62
+ join(dataRoot, 'OpenCode', 'opencode.db'),
63
+ join(dataRoot, 'opencode', 'opencode.db'),
64
+ join(homedir(), '.local', 'share', 'opencode', 'opencode.db'),
65
+ ]);
66
+ }
67
+ if (process.platform === 'win32') {
68
+ return uniquePaths([
69
+ join(dataRoot, 'OpenCode', 'opencode.db'),
70
+ join(dataRoot, 'opencode', 'opencode.db'),
71
+ ]);
72
+ }
73
+ return uniquePaths([
74
+ join(dataRoot, 'opencode', 'opencode.db'),
75
+ join(homedir(), '.local', 'share', 'opencode', 'opencode.db'),
76
+ ]);
77
+ };
78
+ export const resolveOpencodeDbPath = () => {
79
+ const candidates = resolveOpencodeDbPathCandidates();
80
+ return candidates.find(candidate => existsSync(candidate)) ?? candidates[0];
81
+ };
82
+ export const resolveOpencodeSkillRoots = ({ projectPath = null } = {}) => {
83
+ return uniquePaths([
84
+ join(resolveUserConfigRoot(), 'opencode', 'skills'),
85
+ join(homedir(), '.agents', 'skills'),
86
+ projectPath ? join(projectPath, '.opencode', 'skills') : null,
87
+ ]);
88
+ };
89
+ export const ensureParentDirectory = (filePath) => {
90
+ mkdirSync(dirname(filePath), { recursive: true });
91
+ return filePath;
92
+ };
93
+ //# sourceMappingURL=runtimePaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimePaths.js","sourceRoot":"","sources":["../../../server/lib/runtimePaths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { accessSync, constants } from 'fs';
2
+ const isExecutable = (path) => {
3
+ try {
4
+ accessSync(path, constants.X_OK);
5
+ return true;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ };
11
+ export const resolveShell = () => {
12
+ if (process.platform === 'win32') {
13
+ return process.env.ComSpec || 'cmd.exe';
14
+ }
15
+ const configuredShell = process.env.SHELL?.trim();
16
+ if (configuredShell) {
17
+ if (!configuredShell.startsWith('/')) {
18
+ return configuredShell;
19
+ }
20
+ if (isExecutable(configuredShell)) {
21
+ return configuredShell;
22
+ }
23
+ }
24
+ const fallbackShell = ['/bin/zsh', '/bin/bash', '/bin/sh'].find(isExecutable);
25
+ return fallbackShell || configuredShell || '/bin/sh';
26
+ };
27
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../server/lib/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAE1C,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAA;IACzC,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACjD,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,eAAe,CAAA;QACxB,CAAC;QAED,IAAI,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;YAClC,OAAO,eAAe,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7E,OAAO,aAAa,IAAI,eAAe,IAAI,SAAS,CAAA;AACtD,CAAC,CAAA"}