@doriandev/devcc 0.1.2 → 0.2.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 (136) hide show
  1. package/README.md +556 -386
  2. package/bin/devcc.mjs +50 -23
  3. package/dist/devcc/agents/agents.d.ts +112 -0
  4. package/dist/devcc/agents/agents.d.ts.map +1 -0
  5. package/dist/devcc/agents/agents.js +179 -0
  6. package/dist/devcc/agents/agents.js.map +1 -0
  7. package/dist/devcc/app/App.d.ts +15 -0
  8. package/dist/devcc/app/App.d.ts.map +1 -1
  9. package/dist/devcc/app/App.js +326 -17
  10. package/dist/devcc/app/App.js.map +1 -1
  11. package/dist/devcc/app/controlPlaneCommands.d.ts +14 -0
  12. package/dist/devcc/app/controlPlaneCommands.d.ts.map +1 -0
  13. package/dist/devcc/app/controlPlaneCommands.js +179 -0
  14. package/dist/devcc/app/controlPlaneCommands.js.map +1 -0
  15. package/dist/devcc/app/keymap.d.ts.map +1 -1
  16. package/dist/devcc/app/keymap.js +24 -3
  17. package/dist/devcc/app/keymap.js.map +1 -1
  18. package/dist/devcc/automation.d.ts +31 -0
  19. package/dist/devcc/automation.d.ts.map +1 -0
  20. package/dist/devcc/automation.js +202 -0
  21. package/dist/devcc/automation.js.map +1 -0
  22. package/dist/devcc/cli.d.ts.map +1 -1
  23. package/dist/devcc/cli.js +46 -3
  24. package/dist/devcc/cli.js.map +1 -1
  25. package/dist/devcc/components/Sidebar.d.ts.map +1 -1
  26. package/dist/devcc/components/Sidebar.js +1 -0
  27. package/dist/devcc/components/Sidebar.js.map +1 -1
  28. package/dist/devcc/components/primitives.d.ts.map +1 -1
  29. package/dist/devcc/components/primitives.js +3 -0
  30. package/dist/devcc/components/primitives.js.map +1 -1
  31. package/dist/devcc/core/commands.d.ts +25 -0
  32. package/dist/devcc/core/commands.d.ts.map +1 -1
  33. package/dist/devcc/core/commands.js.map +1 -1
  34. package/dist/devcc/core/config.d.ts +69 -3
  35. package/dist/devcc/core/config.d.ts.map +1 -1
  36. package/dist/devcc/core/config.js +185 -5
  37. package/dist/devcc/core/config.js.map +1 -1
  38. package/dist/devcc/core/state.d.ts +19 -1
  39. package/dist/devcc/core/state.d.ts.map +1 -1
  40. package/dist/devcc/core/state.js +6 -0
  41. package/dist/devcc/core/state.js.map +1 -1
  42. package/dist/devcc/environment/EnvironmentService.d.ts +58 -0
  43. package/dist/devcc/environment/EnvironmentService.d.ts.map +1 -0
  44. package/dist/devcc/environment/EnvironmentService.js +159 -0
  45. package/dist/devcc/environment/EnvironmentService.js.map +1 -0
  46. package/dist/devcc/environment/integrations.d.ts +52 -0
  47. package/dist/devcc/environment/integrations.d.ts.map +1 -0
  48. package/dist/devcc/environment/integrations.js +94 -0
  49. package/dist/devcc/environment/integrations.js.map +1 -0
  50. package/dist/devcc/environment/tools.d.ts +51 -0
  51. package/dist/devcc/environment/tools.d.ts.map +1 -0
  52. package/dist/devcc/environment/tools.js +99 -0
  53. package/dist/devcc/environment/tools.js.map +1 -0
  54. package/dist/devcc/git/GitService.d.ts +26 -0
  55. package/dist/devcc/git/GitService.d.ts.map +1 -1
  56. package/dist/devcc/git/GitService.js +71 -2
  57. package/dist/devcc/git/GitService.js.map +1 -1
  58. package/dist/devcc/git/worktrees.d.ts +88 -0
  59. package/dist/devcc/git/worktrees.d.ts.map +1 -0
  60. package/dist/devcc/git/worktrees.js +226 -0
  61. package/dist/devcc/git/worktrees.js.map +1 -0
  62. package/dist/devcc/index.d.ts +13 -3
  63. package/dist/devcc/index.d.ts.map +1 -1
  64. package/dist/devcc/index.js +11 -1
  65. package/dist/devcc/index.js.map +1 -1
  66. package/dist/devcc/platform/launch.d.ts +30 -0
  67. package/dist/devcc/platform/launch.d.ts.map +1 -0
  68. package/dist/devcc/platform/launch.js +93 -0
  69. package/dist/devcc/platform/launch.js.map +1 -0
  70. package/dist/devcc/services/ServiceManager.d.ts +10 -2
  71. package/dist/devcc/services/ServiceManager.d.ts.map +1 -1
  72. package/dist/devcc/services/ServiceManager.js +18 -4
  73. package/dist/devcc/services/ServiceManager.js.map +1 -1
  74. package/dist/devcc/services/ollama.d.ts +64 -5
  75. package/dist/devcc/services/ollama.d.ts.map +1 -1
  76. package/dist/devcc/services/ollama.js +118 -17
  77. package/dist/devcc/services/ollama.js.map +1 -1
  78. package/dist/devcc/services/remote.d.ts +90 -0
  79. package/dist/devcc/services/remote.d.ts.map +1 -0
  80. package/dist/devcc/services/remote.js +233 -0
  81. package/dist/devcc/services/remote.js.map +1 -0
  82. package/dist/devcc/services/types.d.ts +8 -1
  83. package/dist/devcc/services/types.d.ts.map +1 -1
  84. package/dist/devcc/services/types.js.map +1 -1
  85. package/dist/devcc/utils/exec.d.ts +6 -0
  86. package/dist/devcc/utils/exec.d.ts.map +1 -1
  87. package/dist/devcc/utils/exec.js +12 -2
  88. package/dist/devcc/utils/exec.js.map +1 -1
  89. package/dist/devcc/verify/verify.d.ts +107 -0
  90. package/dist/devcc/verify/verify.d.ts.map +1 -0
  91. package/dist/devcc/verify/verify.js +203 -0
  92. package/dist/devcc/verify/verify.js.map +1 -0
  93. package/dist/devcc/views/OverviewView.d.ts.map +1 -1
  94. package/dist/devcc/views/OverviewView.js +55 -1
  95. package/dist/devcc/views/OverviewView.js.map +1 -1
  96. package/dist/devcc/views/ServicesView.d.ts +2 -0
  97. package/dist/devcc/views/ServicesView.d.ts.map +1 -1
  98. package/dist/devcc/views/ServicesView.js +15 -0
  99. package/dist/devcc/views/ServicesView.js.map +1 -1
  100. package/dist/devcc/views/SystemView.d.ts +10 -1
  101. package/dist/devcc/views/SystemView.d.ts.map +1 -1
  102. package/dist/devcc/views/SystemView.js +127 -19
  103. package/dist/devcc/views/SystemView.js.map +1 -1
  104. package/dist/devcc/views/WorktreesView.d.ts +48 -0
  105. package/dist/devcc/views/WorktreesView.d.ts.map +1 -0
  106. package/dist/devcc/views/WorktreesView.js +235 -0
  107. package/dist/devcc/views/WorktreesView.js.map +1 -0
  108. package/package.json +1 -1
  109. package/src/devcc/agents/agents.ts +282 -0
  110. package/src/devcc/app/App.ts +376 -20
  111. package/src/devcc/app/controlPlaneCommands.ts +197 -0
  112. package/src/devcc/app/keymap.ts +24 -3
  113. package/src/devcc/automation.ts +242 -0
  114. package/src/devcc/cli.ts +45 -3
  115. package/src/devcc/components/Sidebar.ts +1 -0
  116. package/src/devcc/components/primitives.ts +3 -0
  117. package/src/devcc/core/commands.ts +26 -0
  118. package/src/devcc/core/config.ts +271 -11
  119. package/src/devcc/core/state.ts +25 -0
  120. package/src/devcc/environment/EnvironmentService.ts +215 -0
  121. package/src/devcc/environment/integrations.ts +133 -0
  122. package/src/devcc/environment/tools.ts +151 -0
  123. package/src/devcc/git/GitService.ts +104 -2
  124. package/src/devcc/git/worktrees.ts +256 -0
  125. package/src/devcc/index.ts +57 -2
  126. package/src/devcc/platform/launch.ts +125 -0
  127. package/src/devcc/services/ServiceManager.ts +15 -3
  128. package/src/devcc/services/ollama.ts +162 -19
  129. package/src/devcc/services/remote.ts +306 -0
  130. package/src/devcc/services/types.ts +9 -1
  131. package/src/devcc/utils/exec.ts +26 -2
  132. package/src/devcc/verify/verify.ts +316 -0
  133. package/src/devcc/views/OverviewView.ts +76 -1
  134. package/src/devcc/views/ServicesView.ts +17 -0
  135. package/src/devcc/views/SystemView.ts +144 -22
  136. package/src/devcc/views/WorktreesView.ts +270 -0
package/bin/devcc.mjs CHANGED
@@ -21,34 +21,52 @@ const isBun = typeof globalThis.Bun !== "undefined"
21
21
  const nodeSupportsFfi =
22
22
  supportsNodeFfi(process.versions.node) && process.execArgv.includes("--experimental-ffi")
23
23
 
24
- if (isBun || nodeSupportsFfi) {
24
+ // `devcc verify`, `devcc worktree list` and `devcc env` never load the TUI, so
25
+ // they run right here on any Node - important for CI and coding agents.
26
+ const AUTOMATION_COMMANDS = new Set(["verify", "worktree", "env"])
27
+ const runsWithoutTui = AUTOMATION_COMMANDS.has(firstPositional(process.argv.slice(2)) ?? "")
28
+
29
+ if (isBun || nodeSupportsFfi || (runsWithoutTui && existsSync(distEntry))) {
30
+ await runInProcess()
31
+ } else {
32
+ reexec()
33
+ }
34
+
35
+ async function runInProcess() {
25
36
  const entry = existsSync(distEntry) ? distEntry : sourceEntry
26
37
  const { main } = await import(entry)
27
- const code = await main(process.argv.slice(2))
28
- process.exit(code ?? 0)
38
+ const code = (await main(process.argv.slice(2))) ?? 0
39
+ if (runsWithoutTui) {
40
+ // Let piped stdout drain: process.exit() here truncates large JSON on macOS.
41
+ process.exitCode = code
42
+ } else {
43
+ process.exit(code)
44
+ }
29
45
  }
30
46
 
31
- // Prefer a built bundle; fall back to the TypeScript entry (Bun runs it directly).
32
- const entry = existsSync(distEntry) ? distEntry : sourceEntry
33
- const args = process.argv.slice(2)
47
+ /** Re-run under a runtime that has FFI. Prefers a built bundle; Bun runs the TypeScript entry directly. */
48
+ function reexec() {
49
+ const entry = existsSync(distEntry) ? distEntry : sourceEntry
50
+ const args = process.argv.slice(2)
34
51
 
35
- if (hasCommand("bun")) {
36
- exec("bun", ["run", entry, ...args])
37
- } else if (supportsNodeFfi(process.versions.node)) {
38
- exec(process.execPath, ["--experimental-ffi", entry, ...args])
39
- } else {
40
- process.stderr.write(
41
- [
42
- "devcc needs a runtime with FFI support.",
43
- "",
44
- ` current: node ${process.versions.node}`,
45
- " required: bun >= 1.3.0, or node >= 26.4.0 (run with --experimental-ffi)",
46
- "",
47
- "Install Bun from https://bun.sh, or upgrade Node.",
48
- "",
49
- ].join("\n"),
50
- )
51
- process.exit(1)
52
+ if (hasCommand("bun")) {
53
+ exec("bun", ["run", entry, ...args])
54
+ } else if (supportsNodeFfi(process.versions.node)) {
55
+ exec(process.execPath, ["--experimental-ffi", entry, ...args])
56
+ } else {
57
+ process.stderr.write(
58
+ [
59
+ "devcc needs a runtime with FFI support.",
60
+ "",
61
+ ` current: node ${process.versions.node}`,
62
+ " required: bun >= 1.3.0, or node >= 26.4.0 (run with --experimental-ffi)",
63
+ "",
64
+ "Install Bun from https://bun.sh, or upgrade Node.",
65
+ "",
66
+ ].join("\n"),
67
+ )
68
+ process.exit(1)
69
+ }
52
70
  }
53
71
 
54
72
  function exec(command, argv) {
@@ -60,6 +78,15 @@ function hasCommand(command) {
60
78
  return spawnSync(command, ["--version"], { stdio: "ignore" }).status === 0
61
79
  }
62
80
 
81
+ function firstPositional(argv) {
82
+ for (let index = 0; index < argv.length; index += 1) {
83
+ const arg = argv[index]
84
+ if (arg === "-C" || arg === "--cwd") index += 1
85
+ else if (!arg.startsWith("-")) return arg
86
+ }
87
+ return undefined
88
+ }
89
+
63
90
  function supportsNodeFfi(version) {
64
91
  const [major = 0, minor = 0] = version.split(".").map((part) => Number.parseInt(part, 10) || 0)
65
92
  return major > 26 || (major === 26 && minor >= 4)
@@ -0,0 +1,112 @@
1
+ import { type ProcessStatus } from "../processes/ManagedProcess.js";
2
+ import type { ProcessManager } from "../processes/ProcessManager.js";
3
+ import { type ExecOptions, type ExecResult } from "../utils/exec.js";
4
+ import type { ScopedLogger } from "../utils/logger.js";
5
+ /**
6
+ * AI coding agents (Claude Code, Codex, ...).
7
+ *
8
+ * An agent is not a new kind of process: an adapter only describes how to run
9
+ * the agent's CLI non-interactively, and `AgentManager` hands the result to the
10
+ * project's `ProcessManager`. Status, PID, logs, stop and cleanup on quit all
11
+ * come from the existing process infrastructure.
12
+ */
13
+ export interface AgentLaunchOptions {
14
+ /** Working directory - the selected worktree. Must be absolute. */
15
+ cwd: string;
16
+ /** The task for the agent. */
17
+ prompt: string;
18
+ /** Branch of the worktree, for display. */
19
+ branch?: string;
20
+ }
21
+ export interface AgentAdapter {
22
+ id: string;
23
+ name: string;
24
+ /** Executable, overridable per machine through config. */
25
+ command: string;
26
+ /** Whether the CLI is installed and runnable. */
27
+ detect: () => Promise<boolean>;
28
+ /** argv for a non-interactive run of `prompt`. */
29
+ args: (prompt: string) => string[];
30
+ /**
31
+ * True when `args` puts `--` before the prompt, so a task starting with `-`
32
+ * cannot be read as an option. Tasks starting with `-` are refused otherwise.
33
+ */
34
+ separatesPrompt: boolean;
35
+ }
36
+ export interface AgentConfig {
37
+ /** Display name (defaults per built-in, or to the id). */
38
+ name?: string;
39
+ /** Executable name or path. */
40
+ command?: string;
41
+ /** Extra arguments placed before the prompt, e.g. `["--permission-mode", "acceptEdits"]`. */
42
+ args?: string[];
43
+ /** Set false to hide a built-in agent. */
44
+ enabled?: boolean;
45
+ }
46
+ export interface AgentSession {
47
+ /** Process id in the ProcessManager, also the log source id. */
48
+ id: string;
49
+ agentId: string;
50
+ agentName: string;
51
+ cwd: string;
52
+ branch?: string;
53
+ /** First line of the prompt, for display. */
54
+ task: string;
55
+ status: ProcessStatus;
56
+ pid?: number;
57
+ startedAt: Date;
58
+ exitCode?: number;
59
+ }
60
+ type Exec = (command: string, args: readonly string[], options?: ExecOptions) => Promise<ExecResult>;
61
+ interface BuiltinAgent {
62
+ name: string;
63
+ command: string;
64
+ /** Where the prompt goes relative to the user's extra args. */
65
+ args: (extra: string[], prompt: string) => string[];
66
+ }
67
+ /**
68
+ * Non-interactive invocations: `claude -p -- <prompt>` and `codex exec -- <prompt>`.
69
+ * The `--` matters: without it a task like `--dangerously-skip-permissions`
70
+ * would be parsed as a flag.
71
+ */
72
+ export declare const BUILTIN_AGENTS: Readonly<Record<string, BuiltinAgent>>;
73
+ /**
74
+ * Build adapters from config. Built-ins are always present unless disabled;
75
+ * any other key defines a custom agent whose prompt is the last argument.
76
+ */
77
+ export declare function createAgentAdapters(config?: Readonly<Record<string, AgentConfig>>, run?: Exec): AgentAdapter[];
78
+ export interface AgentManagerOptions {
79
+ processes: ProcessManager;
80
+ adapters: readonly AgentAdapter[];
81
+ logger?: ScopedLogger;
82
+ /** Injected for tests. */
83
+ exists?: (path: string) => boolean;
84
+ }
85
+ export declare const AGENT_PROCESS_PREFIX = "agent:";
86
+ export declare class AgentManager {
87
+ private readonly options;
88
+ private readonly adapters;
89
+ private readonly meta;
90
+ /** Detection results, cached for the session: installing a CLI mid-session is rare. */
91
+ private readonly detected;
92
+ private sequence;
93
+ constructor(options: AgentManagerOptions);
94
+ list(): AgentAdapter[];
95
+ get(id: string): AgentAdapter | undefined;
96
+ /** Whether an agent's CLI is installed. `refresh` re-runs the probe. */
97
+ detect(id: string, refresh?: boolean): Promise<boolean>;
98
+ /**
99
+ * Start an agent in `options.cwd` as a managed task. Throws a `DevccError`
100
+ * with an actionable message when the agent is unknown, not installed, or
101
+ * the directory is missing.
102
+ */
103
+ launch(agentId: string, options: AgentLaunchOptions): Promise<AgentSession>;
104
+ /** Every agent session this manager started, newest first. */
105
+ sessions(): AgentSession[];
106
+ stop(sessionId: string): Promise<void>;
107
+ /** Directories where an agent is still running; worktree removal refuses these. */
108
+ busyPaths(): string[];
109
+ private session;
110
+ }
111
+ export {};
112
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/devcc/agents/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import { existsSync } from "node:fs";
2
+ import { isAbsolute } from "node:path";
3
+ import { isActive } from "../processes/ManagedProcess.js";
4
+ import { DevccError } from "../utils/errors.js";
5
+ import { exec } from "../utils/exec.js";
6
+ /**
7
+ * Non-interactive invocations: `claude -p -- <prompt>` and `codex exec -- <prompt>`.
8
+ * The `--` matters: without it a task like `--dangerously-skip-permissions`
9
+ * would be parsed as a flag.
10
+ */
11
+ export const BUILTIN_AGENTS = {
12
+ claude: {
13
+ name: "Claude Code",
14
+ command: "claude",
15
+ args: (extra, prompt) => [...extra, "-p", "--", prompt],
16
+ },
17
+ codex: {
18
+ name: "Codex",
19
+ command: "codex",
20
+ args: (extra, prompt) => ["exec", ...extra, "--", prompt],
21
+ },
22
+ };
23
+ /**
24
+ * Build adapters from config. Built-ins are always present unless disabled;
25
+ * any other key defines a custom agent whose prompt is the last argument.
26
+ */
27
+ export function createAgentAdapters(config = {}, run = exec) {
28
+ const ids = [...new Set([...Object.keys(BUILTIN_AGENTS), ...Object.keys(config)])];
29
+ const adapters = [];
30
+ for (const id of ids) {
31
+ const entry = config[id] ?? {};
32
+ if (entry.enabled === false)
33
+ continue;
34
+ const builtin = BUILTIN_AGENTS[id];
35
+ const command = entry.command ?? builtin?.command;
36
+ if (!command)
37
+ continue;
38
+ const extra = entry.args ?? [];
39
+ adapters.push({
40
+ id,
41
+ name: entry.name ?? builtin?.name ?? id,
42
+ command,
43
+ detect: async () => {
44
+ const result = await run(command, ["--version"], { timeoutMs: 3_000 });
45
+ return result.ok;
46
+ },
47
+ // Custom agents keep the prompt as the literal last argument (it may be an
48
+ // option's value, e.g. `--message`), so they cannot take a `--` guard.
49
+ args: (prompt) => (builtin ? builtin.args(extra, prompt) : [...extra, prompt]),
50
+ separatesPrompt: builtin !== undefined,
51
+ });
52
+ }
53
+ return adapters;
54
+ }
55
+ export const AGENT_PROCESS_PREFIX = "agent:";
56
+ export class AgentManager {
57
+ options;
58
+ adapters;
59
+ meta = new Map();
60
+ /** Detection results, cached for the session: installing a CLI mid-session is rare. */
61
+ detected = new Map();
62
+ sequence = 0;
63
+ constructor(options) {
64
+ this.options = options;
65
+ this.adapters = new Map(options.adapters.map((adapter) => [adapter.id, adapter]));
66
+ }
67
+ list() {
68
+ return [...this.adapters.values()];
69
+ }
70
+ get(id) {
71
+ return this.adapters.get(id);
72
+ }
73
+ /** Whether an agent's CLI is installed. `refresh` re-runs the probe. */
74
+ detect(id, refresh = false) {
75
+ const adapter = this.adapters.get(id);
76
+ if (!adapter)
77
+ return Promise.resolve(false);
78
+ let pending = refresh ? undefined : this.detected.get(id);
79
+ if (!pending) {
80
+ pending = adapter.detect().catch(() => false);
81
+ this.detected.set(id, pending);
82
+ }
83
+ return pending;
84
+ }
85
+ /**
86
+ * Start an agent in `options.cwd` as a managed task. Throws a `DevccError`
87
+ * with an actionable message when the agent is unknown, not installed, or
88
+ * the directory is missing.
89
+ */
90
+ async launch(agentId, options) {
91
+ const adapter = this.adapters.get(agentId);
92
+ if (!adapter)
93
+ throw new DevccError({ scope: "process", message: `Unknown agent "${agentId}"` });
94
+ const prompt = options.prompt.trim();
95
+ if (prompt === "")
96
+ throw new DevccError({ scope: "process", message: `${adapter.name} needs a task` });
97
+ if (prompt.startsWith("-") && !adapter.separatesPrompt) {
98
+ throw new DevccError({
99
+ scope: "process",
100
+ message: `${adapter.name}: a task cannot start with "-" (it would be read as an option)`,
101
+ });
102
+ }
103
+ const exists = this.options.exists ?? existsSync;
104
+ if (!isAbsolute(options.cwd) || !exists(options.cwd)) {
105
+ throw new DevccError({ scope: "process", message: `Working directory does not exist: ${options.cwd}` });
106
+ }
107
+ if (!(await this.detect(agentId, true))) {
108
+ throw new DevccError({
109
+ scope: "process",
110
+ message: `${adapter.name} is not installed (\`${adapter.command}\` was not found)`,
111
+ detail: `Install it, or point devcc at it with agents.${agentId}.command in .devcc.ts.`,
112
+ });
113
+ }
114
+ this.sequence += 1;
115
+ const id = `${AGENT_PROCESS_PREFIX}${agentId}:${this.sequence}`;
116
+ const where = options.branch ?? options.cwd;
117
+ const definition = {
118
+ id,
119
+ name: `${adapter.name} · ${where}`,
120
+ command: adapter.command,
121
+ args: adapter.args(prompt),
122
+ cwd: options.cwd,
123
+ kind: "task",
124
+ };
125
+ this.meta.set(id, {
126
+ agentId,
127
+ agentName: adapter.name,
128
+ cwd: options.cwd,
129
+ branch: options.branch,
130
+ task: prompt.split("\n")[0] ?? prompt,
131
+ startedAt: new Date(),
132
+ });
133
+ this.options.processes.register(definition);
134
+ this.options.logger?.info("agent launch", { agent: agentId, cwd: options.cwd });
135
+ try {
136
+ await this.options.processes.start(id);
137
+ }
138
+ catch (error) {
139
+ this.options.logger?.warn("agent launch failed", { agent: agentId, cwd: options.cwd });
140
+ throw error;
141
+ }
142
+ return this.session(id);
143
+ }
144
+ /** Every agent session this manager started, newest first. */
145
+ sessions() {
146
+ return [...this.meta.keys()]
147
+ .map((id) => this.session(id))
148
+ .filter((session) => session !== undefined)
149
+ .reverse();
150
+ }
151
+ async stop(sessionId) {
152
+ await this.options.processes.stop(sessionId);
153
+ }
154
+ /** Directories where an agent is still running; worktree removal refuses these. */
155
+ busyPaths() {
156
+ return this.sessions()
157
+ .filter((session) => isActive(session.status))
158
+ .map((session) => session.cwd);
159
+ }
160
+ session(id) {
161
+ const meta = this.meta.get(id);
162
+ const process = this.options.processes.get(id);
163
+ if (!meta || !process)
164
+ return undefined;
165
+ return {
166
+ id,
167
+ agentId: meta.agentId,
168
+ agentName: meta.agentName,
169
+ cwd: meta.cwd,
170
+ branch: meta.branch,
171
+ task: meta.task,
172
+ status: process.status,
173
+ pid: process.pid,
174
+ startedAt: process.startedAt ?? meta.startedAt,
175
+ exitCode: process.exitCode,
176
+ };
177
+ }
178
+ }
179
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/devcc/agents/agents.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,8 @@ export declare class App {
30
30
  private get git();
31
31
  private get system();
32
32
  private get deps();
33
+ private get agents();
34
+ private get environment();
33
35
  private get config();
34
36
  private header;
35
37
  private footer;
@@ -155,6 +157,19 @@ export declare class App {
155
157
  private cycleProject;
156
158
  /** Feed the rail the per-project running counts. */
157
159
  private refreshSidebarProjects;
160
+ private selectedWorktree;
161
+ private createWorktree;
162
+ private removeWorktree;
163
+ private launchAgent;
164
+ /** Build and start an external launch; a missing configuration becomes a notification. */
165
+ private launch;
166
+ private sshTo;
167
+ /**
168
+ * Run verification through the ProcessManager: each step is a managed task,
169
+ * so its output streams into Logs and quitting stops it like anything else.
170
+ */
171
+ private runVerify;
172
+ private processStepExecutor;
158
173
  /** Update a single package, gated by a confirmation (it rewrites the lockfile). */
159
174
  private updateDependency;
160
175
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/devcc/app/App.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/devcc/app/App.ts"],"names":[],"mappings":"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"}