poe-code 1.2.0 → 2.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 (161) hide show
  1. package/README.md +16 -20
  2. package/dist/cli/bootstrap.d.ts +4 -0
  3. package/dist/cli/bootstrap.js +75 -0
  4. package/dist/cli/bootstrap.js.map +1 -0
  5. package/dist/cli/commands/configure.d.ts +2 -1
  6. package/dist/cli/commands/configure.js +7 -7
  7. package/dist/cli/commands/configure.js.map +1 -1
  8. package/dist/cli/container.d.ts +0 -5
  9. package/dist/cli/container.js +0 -8
  10. package/dist/cli/container.js.map +1 -1
  11. package/dist/cli/error-logger.d.ts +17 -2
  12. package/dist/cli/error-logger.js.map +1 -1
  13. package/dist/cli/errors.d.ts +6 -0
  14. package/dist/cli/errors.js +8 -0
  15. package/dist/cli/errors.js.map +1 -1
  16. package/dist/cli/program.js +6 -26
  17. package/dist/cli/program.js.map +1 -1
  18. package/dist/cli/prompt-runner.d.ts +3 -0
  19. package/dist/cli/prompt-runner.js +9 -0
  20. package/dist/cli/prompt-runner.js.map +1 -0
  21. package/dist/cli/service-registry.d.ts +8 -0
  22. package/dist/cli/service-registry.js.map +1 -1
  23. package/dist/cli/ui/service-menu.d.ts +6 -0
  24. package/dist/cli/ui/service-menu.js +37 -0
  25. package/dist/cli/ui/service-menu.js.map +1 -0
  26. package/dist/cli/ui/theme.d.ts +16 -0
  27. package/dist/cli/ui/theme.js +78 -0
  28. package/dist/cli/ui/theme.js.map +1 -0
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +2 -74
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers/claude-code-adapter.js +6 -0
  33. package/dist/providers/claude-code-adapter.js.map +1 -1
  34. package/dist/providers/codex-adapter.js +6 -0
  35. package/dist/providers/codex-adapter.js.map +1 -1
  36. package/dist/providers/opencode-adapter.js +6 -0
  37. package/dist/providers/opencode-adapter.js.map +1 -1
  38. package/dist/services/model-strategy.d.ts +2 -2
  39. package/dist/services/model-strategy.js +9 -9
  40. package/dist/services/model-strategy.js.map +1 -1
  41. package/dist/services/opencode.js +2 -2
  42. package/dist/services/opencode.js.map +1 -1
  43. package/package.json +13 -35
  44. package/dist/cli/api-client.d.ts +0 -14
  45. package/dist/cli/api-client.js +0 -140
  46. package/dist/cli/api-client.js.map +0 -1
  47. package/dist/cli/chat.d.ts +0 -32
  48. package/dist/cli/chat.js +0 -2
  49. package/dist/cli/chat.js.map +0 -1
  50. package/dist/cli/commands/agent.d.ts +0 -18
  51. package/dist/cli/commands/agent.js +0 -84
  52. package/dist/cli/commands/agent.js.map +0 -1
  53. package/dist/cli/commands/configure-agents.d.ts +0 -3
  54. package/dist/cli/commands/configure-agents.js +0 -72
  55. package/dist/cli/commands/configure-agents.js.map +0 -1
  56. package/dist/cli/commands/init.d.ts +0 -8
  57. package/dist/cli/commands/init.js +0 -45
  58. package/dist/cli/commands/init.js.map +0 -1
  59. package/dist/cli/commands/interactive.d.ts +0 -3
  60. package/dist/cli/commands/interactive.js +0 -17
  61. package/dist/cli/commands/interactive.js.map +0 -1
  62. package/dist/cli/commands/login.d.ts +0 -6
  63. package/dist/cli/commands/login.js +0 -51
  64. package/dist/cli/commands/login.js.map +0 -1
  65. package/dist/cli/commands/logout.d.ts +0 -3
  66. package/dist/cli/commands/logout.js +0 -31
  67. package/dist/cli/commands/logout.js.map +0 -1
  68. package/dist/cli/commands/prerequisites.d.ts +0 -3
  69. package/dist/cli/commands/prerequisites.js +0 -23
  70. package/dist/cli/commands/prerequisites.js.map +0 -1
  71. package/dist/cli/commands/query.d.ts +0 -7
  72. package/dist/cli/commands/query.js +0 -46
  73. package/dist/cli/commands/query.js.map +0 -1
  74. package/dist/cli/commands/remove.d.ts +0 -6
  75. package/dist/cli/commands/remove.js +0 -80
  76. package/dist/cli/commands/remove.js.map +0 -1
  77. package/dist/cli/commands/root.d.ts +0 -3
  78. package/dist/cli/commands/root.js +0 -7
  79. package/dist/cli/commands/root.js.map +0 -1
  80. package/dist/cli/commands/spawn-worktree.d.ts +0 -6
  81. package/dist/cli/commands/spawn-worktree.js +0 -91
  82. package/dist/cli/commands/spawn-worktree.js.map +0 -1
  83. package/dist/cli/commands/spawn.d.ts +0 -7
  84. package/dist/cli/commands/spawn.js +0 -112
  85. package/dist/cli/commands/spawn.js.map +0 -1
  86. package/dist/cli/commands/test.d.ts +0 -6
  87. package/dist/cli/commands/test.js +0 -26
  88. package/dist/cli/commands/test.js.map +0 -1
  89. package/dist/cli/file-mentions.d.ts +0 -13
  90. package/dist/cli/file-mentions.js +0 -87
  91. package/dist/cli/file-mentions.js.map +0 -1
  92. package/dist/cli/file-picker-state.d.ts +0 -14
  93. package/dist/cli/file-picker-state.js +0 -23
  94. package/dist/cli/file-picker-state.js.map +0 -1
  95. package/dist/cli/interactive-command-runner.d.ts +0 -11
  96. package/dist/cli/interactive-command-runner.js +0 -142
  97. package/dist/cli/interactive-command-runner.js.map +0 -1
  98. package/dist/cli/interactive-launcher.d.ts +0 -2
  99. package/dist/cli/interactive-launcher.js +0 -404
  100. package/dist/cli/interactive-launcher.js.map +0 -1
  101. package/dist/cli/interactive-tasks.d.ts +0 -7
  102. package/dist/cli/interactive-tasks.js +0 -199
  103. package/dist/cli/interactive-tasks.js.map +0 -1
  104. package/dist/cli/interactive.d.ts +0 -19
  105. package/dist/cli/interactive.js +0 -479
  106. package/dist/cli/interactive.js.map +0 -1
  107. package/dist/cli/markdown-renderer.d.ts +0 -27
  108. package/dist/cli/markdown-renderer.js +0 -178
  109. package/dist/cli/markdown-renderer.js.map +0 -1
  110. package/dist/cli/markdown-renderer.test.d.ts +0 -1
  111. package/dist/cli/markdown-renderer.test.js +0 -105
  112. package/dist/cli/markdown-renderer.test.js.map +0 -1
  113. package/dist/commands/init.d.ts +0 -9
  114. package/dist/commands/init.js +0 -43
  115. package/dist/commands/init.js.map +0 -1
  116. package/dist/commands/spawn-worktree.d.ts +0 -25
  117. package/dist/commands/spawn-worktree.js +0 -139
  118. package/dist/commands/spawn-worktree.js.map +0 -1
  119. package/dist/services/agent-config-manager.d.ts +0 -32
  120. package/dist/services/agent-config-manager.js +0 -130
  121. package/dist/services/agent-config-manager.js.map +0 -1
  122. package/dist/services/agent-registry.d.ts +0 -27
  123. package/dist/services/agent-registry.js +0 -89
  124. package/dist/services/agent-registry.js.map +0 -1
  125. package/dist/services/agent-session.d.ts +0 -24
  126. package/dist/services/agent-session.js +0 -107
  127. package/dist/services/agent-session.js.map +0 -1
  128. package/dist/services/agent-task-registry.d.ts +0 -131
  129. package/dist/services/agent-task-registry.js +0 -491
  130. package/dist/services/agent-task-registry.js.map +0 -1
  131. package/dist/services/chat.d.ts +0 -94
  132. package/dist/services/chat.js +0 -241
  133. package/dist/services/chat.js.map +0 -1
  134. package/dist/services/mcp-client.d.ts +0 -38
  135. package/dist/services/mcp-client.js +0 -170
  136. package/dist/services/mcp-client.js.map +0 -1
  137. package/dist/services/mcp-manager.d.ts +0 -28
  138. package/dist/services/mcp-manager.js +0 -157
  139. package/dist/services/mcp-manager.js.map +0 -1
  140. package/dist/services/poe-code.d.ts +0 -7
  141. package/dist/services/poe-code.js +0 -5
  142. package/dist/services/poe-code.js.map +0 -1
  143. package/dist/services/task-logger.d.ts +0 -24
  144. package/dist/services/task-logger.js +0 -73
  145. package/dist/services/task-logger.js.map +0 -1
  146. package/dist/services/task-runner.d.ts +0 -19
  147. package/dist/services/task-runner.js +0 -157
  148. package/dist/services/task-runner.js.map +0 -1
  149. package/dist/services/tools.d.ts +0 -76
  150. package/dist/services/tools.js +0 -870
  151. package/dist/services/tools.js.map +0 -1
  152. package/dist/utils/e2e-flags.d.ts +0 -1
  153. package/dist/utils/e2e-flags.js +0 -9
  154. package/dist/utils/e2e-flags.js.map +0 -1
  155. package/dist/utils/worktree.d.ts +0 -40
  156. package/dist/utils/worktree.js +0 -179
  157. package/dist/utils/worktree.js.map +0 -1
  158. package/shared/conversation-layout.cjs +0 -11
  159. package/shared/conversation-layout.d.ts +0 -7
  160. package/shared/conversation-layout.js +0 -11
  161. package/shared/package.json +0 -13
@@ -1,178 +0,0 @@
1
- /**
2
- * Simple terminal markdown renderer with ANSI escape codes
3
- * Falls back to plaintext for unsupported features
4
- */
5
- // ANSI escape codes
6
- const RESET = "\x1b[0m";
7
- const BOLD = "\x1b[1m";
8
- const DIM = "\x1b[2m";
9
- const ITALIC = "\x1b[3m";
10
- const UNDERLINE = "\x1b[4m";
11
- // Colors
12
- const RED = "\x1b[31m";
13
- const GREEN = "\x1b[32m";
14
- const YELLOW = "\x1b[33m";
15
- const BLUE = "\x1b[34m";
16
- const MAGENTA = "\x1b[35m";
17
- const CYAN = "\x1b[36m";
18
- const GRAY = "\x1b[90m";
19
- // Background colors
20
- const BG_BLACK = "\x1b[40m";
21
- const BG_GRAY = "\x1b[100m";
22
- /**
23
- * Renders markdown text to terminal with ANSI formatting
24
- */
25
- export function renderMarkdown(markdown, options = {}) {
26
- const { indent = "" } = options;
27
- const lines = markdown.split("\n");
28
- const output = [];
29
- let inCodeBlock = false;
30
- let codeBlockLang = "";
31
- let inList = false;
32
- let listIndent = 0;
33
- for (let i = 0; i < lines.length; i++) {
34
- const line = lines[i];
35
- const trimmed = line.trim();
36
- // Code blocks
37
- if (trimmed.startsWith("```")) {
38
- if (!inCodeBlock) {
39
- // Start code block
40
- inCodeBlock = true;
41
- codeBlockLang = trimmed.slice(3).trim();
42
- output.push(""); // Empty line before code block
43
- continue;
44
- }
45
- else {
46
- // End code block
47
- inCodeBlock = false;
48
- codeBlockLang = "";
49
- output.push(""); // Empty line after code block
50
- continue;
51
- }
52
- }
53
- if (inCodeBlock) {
54
- // Render code block line
55
- output.push(indent + " " + GRAY + BG_GRAY + line + RESET);
56
- continue;
57
- }
58
- // Headers (# ## ###)
59
- const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
60
- if (headerMatch) {
61
- const level = headerMatch[1].length;
62
- const text = headerMatch[2];
63
- const color = level === 1 ? CYAN : level === 2 ? BLUE : MAGENTA;
64
- output.push("");
65
- output.push(indent + color + BOLD + text + RESET);
66
- output.push("");
67
- continue;
68
- }
69
- // Horizontal rule (---, ___, ***)
70
- if (/^(\*{3,}|-{3,}|_{3,})$/.test(trimmed)) {
71
- output.push(indent + GRAY + "─".repeat(40) + RESET);
72
- continue;
73
- }
74
- // Lists (- item, * item, 1. item)
75
- const listMatch = line.match(/^(\s*)([-*+]|\d+\.)\s+(.+)$/);
76
- if (listMatch) {
77
- const listIndentStr = listMatch[1];
78
- const bullet = listMatch[2];
79
- const content = listMatch[3];
80
- const level = Math.floor(listIndentStr.length / 2);
81
- const renderedBullet = bullet.match(/\d+\./) ? bullet : "•";
82
- output.push(indent + " ".repeat(level) + YELLOW + renderedBullet + RESET + " " + renderInline(content));
83
- inList = true;
84
- listIndent = level;
85
- continue;
86
- }
87
- else if (inList && trimmed === "") {
88
- inList = false;
89
- listIndent = 0;
90
- }
91
- // Blockquotes (> text)
92
- if (trimmed.startsWith(">")) {
93
- const quoteText = trimmed.slice(1).trim();
94
- output.push(indent + GRAY + "│ " + RESET + DIM + renderInline(quoteText) + RESET);
95
- continue;
96
- }
97
- // Empty lines
98
- if (trimmed === "") {
99
- output.push("");
100
- continue;
101
- }
102
- // Regular paragraph text
103
- output.push(indent + renderInline(line));
104
- }
105
- return output.join("\n");
106
- }
107
- /**
108
- * Renders inline markdown formatting (bold, italic, code, links)
109
- */
110
- function renderInline(text) {
111
- let result = text;
112
- // Inline code (`code`)
113
- result = result.replace(/`([^`]+)`/g, (_match, code) => {
114
- return YELLOW + BG_BLACK + code + RESET;
115
- });
116
- // Bold (**text** or __text__)
117
- result = result.replace(/\*\*([^*]+)\*\*/g, (_match, text) => {
118
- return BOLD + text + RESET;
119
- });
120
- result = result.replace(/__([^_]+)__/g, (_match, text) => {
121
- return BOLD + text + RESET;
122
- });
123
- // Italic (*text* or _text_) - must come after bold
124
- result = result.replace(/\*([^*]+)\*/g, (_match, text) => {
125
- return ITALIC + text + RESET;
126
- });
127
- result = result.replace(/_([^_]+)_/g, (_match, text) => {
128
- return ITALIC + text + RESET;
129
- });
130
- // Strikethrough (~~text~~)
131
- result = result.replace(/~~([^~]+)~~/g, (_match, text) => {
132
- return DIM + text + RESET;
133
- });
134
- // Links ([text](url))
135
- result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, text, url) => {
136
- return UNDERLINE + BLUE + text + RESET + GRAY + " (" + url + ")" + RESET;
137
- });
138
- // Bare URLs
139
- result = result.replace(/(https?:\/\/[^\s]+)/g, (_match, url) => UNDERLINE + BLUE + url + RESET);
140
- return result;
141
- }
142
- /**
143
- * Strips all ANSI codes from a string (useful for testing or length calculation)
144
- */
145
- export function stripAnsi(text) {
146
- // eslint-disable-next-line no-control-regex
147
- return text.replace(/\x1b\[[0-9;]*m/g, "");
148
- }
149
- /**
150
- * Simple markdown-to-plaintext converter (no formatting)
151
- */
152
- export function markdownToPlaintext(markdown) {
153
- let result = markdown;
154
- // Remove code blocks
155
- result = result.replace(/```[\s\S]*?```/g, (match) => {
156
- const lines = match.split("\n").slice(1, -1);
157
- return lines.map((l) => " " + l).join("\n");
158
- });
159
- // Remove inline code backticks
160
- result = result.replace(/`([^`]+)`/g, "$1");
161
- // Remove bold/italic
162
- result = result.replace(/\*\*([^*]+)\*\*/g, "$1");
163
- result = result.replace(/__([^_]+)__/g, "$1");
164
- result = result.replace(/\*([^*]+)\*/g, "$1");
165
- result = result.replace(/_([^_]+)_/g, "$1");
166
- // Remove strikethrough
167
- result = result.replace(/~~([^~]+)~~/g, "$1");
168
- // Convert links to text + URL
169
- result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1 ($2)");
170
- // Remove headers
171
- result = result.replace(/^#{1,6}\s+/gm, "");
172
- // Remove blockquotes
173
- result = result.replace(/^>\s*/gm, "");
174
- // Remove horizontal rules
175
- result = result.replace(/^(\*{3,}|-{3,}|_{3,})$/gm, "---");
176
- return result;
177
- }
178
- //# sourceMappingURL=markdown-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../src/cli/markdown-renderer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,105 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { renderMarkdown, stripAnsi, markdownToPlaintext } from "./markdown-renderer.js";
3
- describe("markdown-renderer", () => {
4
- describe("renderMarkdown", () => {
5
- it("should render headers with formatting", () => {
6
- const input = "# Header 1\n## Header 2\n### Header 3";
7
- const output = renderMarkdown(input);
8
- expect(stripAnsi(output)).toContain("Header 1");
9
- expect(stripAnsi(output)).toContain("Header 2");
10
- expect(stripAnsi(output)).toContain("Header 3");
11
- });
12
- it("should render bold text", () => {
13
- const input = "This is **bold** text";
14
- const output = renderMarkdown(input);
15
- expect(stripAnsi(output)).toBe("This is bold text");
16
- expect(output).toContain("\x1b[1m"); // BOLD code
17
- });
18
- it("should render italic text", () => {
19
- const input = "This is *italic* text";
20
- const output = renderMarkdown(input);
21
- expect(stripAnsi(output)).toBe("This is italic text");
22
- expect(output).toContain("\x1b[3m"); // ITALIC code
23
- });
24
- it("should render inline code", () => {
25
- const input = "Use `console.log()` for debugging";
26
- const output = renderMarkdown(input);
27
- expect(stripAnsi(output)).toBe("Use console.log() for debugging");
28
- expect(output).toContain("\x1b[33m"); // YELLOW code
29
- });
30
- it("should render code blocks", () => {
31
- const input = "```javascript\nconst x = 1;\n```";
32
- const output = renderMarkdown(input);
33
- expect(stripAnsi(output)).toContain("const x = 1;");
34
- });
35
- it("should render lists", () => {
36
- const input = "- Item 1\n- Item 2\n- Item 3";
37
- const output = renderMarkdown(input);
38
- expect(stripAnsi(output)).toContain("Item 1");
39
- expect(stripAnsi(output)).toContain("Item 2");
40
- expect(stripAnsi(output)).toContain("Item 3");
41
- });
42
- it("should render numbered lists", () => {
43
- const input = "1. First\n2. Second\n3. Third";
44
- const output = renderMarkdown(input);
45
- expect(stripAnsi(output)).toContain("First");
46
- expect(stripAnsi(output)).toContain("Second");
47
- expect(stripAnsi(output)).toContain("Third");
48
- });
49
- it("should render blockquotes", () => {
50
- const input = "> This is a quote";
51
- const output = renderMarkdown(input);
52
- expect(stripAnsi(output)).toContain("This is a quote");
53
- });
54
- it("should render links", () => {
55
- const input = "[Google](https://google.com)";
56
- const output = renderMarkdown(input);
57
- expect(stripAnsi(output)).toContain("Google");
58
- expect(stripAnsi(output)).toContain("https://google.com");
59
- });
60
- it("should handle mixed formatting", () => {
61
- const input = "This is **bold** and *italic* and `code`";
62
- const output = renderMarkdown(input);
63
- expect(stripAnsi(output)).toBe("This is bold and italic and code");
64
- });
65
- it("should preserve empty lines", () => {
66
- const input = "Line 1\n\nLine 2";
67
- const output = renderMarkdown(input);
68
- expect(output.split("\n")).toHaveLength(3);
69
- });
70
- });
71
- describe("stripAnsi", () => {
72
- it("should remove all ANSI codes", () => {
73
- const input = "\x1b[1mBold\x1b[0m \x1b[3mItalic\x1b[0m";
74
- const output = stripAnsi(input);
75
- expect(output).toBe("Bold Italic");
76
- });
77
- it("should handle text without ANSI codes", () => {
78
- const input = "Plain text";
79
- const output = stripAnsi(input);
80
- expect(output).toBe("Plain text");
81
- });
82
- });
83
- describe("markdownToPlaintext", () => {
84
- it("should convert markdown to plain text", () => {
85
- const input = "# Header\n\nThis is **bold** and *italic*";
86
- const output = markdownToPlaintext(input);
87
- expect(output).not.toContain("**");
88
- expect(output).not.toContain("*");
89
- expect(output).not.toContain("#");
90
- });
91
- it("should convert links to text with URL", () => {
92
- const input = "[Google](https://google.com)";
93
- const output = markdownToPlaintext(input);
94
- expect(output).toContain("Google");
95
- expect(output).toContain("https://google.com");
96
- });
97
- it("should handle code blocks", () => {
98
- const input = "```\ncode\n```";
99
- const output = markdownToPlaintext(input);
100
- expect(output).toContain("code");
101
- expect(output).not.toContain("```");
102
- });
103
- });
104
- });
105
- //# sourceMappingURL=markdown-renderer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-renderer.test.js","sourceRoot":"","sources":["../../src/cli/markdown-renderer.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { FileSystem } from "../utils/file-system.js";
2
- export interface InitOptions {
3
- fs: FileSystem;
4
- cwd: string;
5
- projectName: string;
6
- apiKey: string;
7
- model: string;
8
- }
9
- export declare function initProject(options: InitOptions): Promise<void>;
@@ -1,43 +0,0 @@
1
- import path from "node:path";
2
- import { renderTemplate } from "../utils/templates.js";
3
- export async function initProject(options) {
4
- const { fs, cwd, projectName, apiKey, model } = options;
5
- const projectDir = path.join(cwd, projectName);
6
- if (await pathExists(fs, projectDir)) {
7
- throw new Error(`Project directory "${projectName}" already exists`);
8
- }
9
- await fs.mkdir(projectDir, { recursive: true });
10
- await Promise.all([
11
- writeTemplate(fs, projectDir, ".env", "python/env.hbs", { apiKey, model }),
12
- writeTemplate(fs, projectDir, "main.py", "python/main.py.hbs", {
13
- apiKey,
14
- model
15
- }),
16
- writeTemplate(fs, projectDir, "requirements.txt", "python/requirements.txt.hbs", {})
17
- ]);
18
- }
19
- async function writeTemplate(fs, projectDir, filename, templatePath, context) {
20
- const rendered = await renderTemplate(templatePath, context);
21
- await fs.writeFile(path.join(projectDir, filename), rendered, {
22
- encoding: "utf8"
23
- });
24
- }
25
- async function pathExists(fs, target) {
26
- try {
27
- await fs.stat(target);
28
- return true;
29
- }
30
- catch (error) {
31
- if (isNotFound(error)) {
32
- return false;
33
- }
34
- throw error;
35
- }
36
- }
37
- function isNotFound(error) {
38
- return (typeof error === "object" &&
39
- error !== null &&
40
- "code" in error &&
41
- error.code === "ENOENT");
42
- }
43
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAUvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE/C,IAAI,MAAM,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,kBAAkB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1E,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE;YAC7D,MAAM;YACN,KAAK;SACN,CAAC;QACF,aAAa,CACX,EAAE,EACF,UAAU,EACV,kBAAkB,EAClB,6BAA6B,EAC7B,EAAE,CACH;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,EAAc,EACd,UAAkB,EAClB,QAAgB,EAChB,YAAoB,EACpB,OAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE;QAC5D,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAc,EAAE,MAAc;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA2B,CAAC,IAAI,KAAK,QAAQ,CAC/C,CAAC;AACJ,CAAC"}
@@ -1,25 +0,0 @@
1
- import type { CommandRunnerResult } from "../utils/prerequisites.js";
2
- import { createWorktree as createWorktreeDefault, getChanges as getChangesDefault, isGitRepository as isGitRepositoryDefault, mergeChanges as mergeChangesDefault } from "../utils/worktree.js";
3
- interface SpawnGitWorktreeDependencies {
4
- isGitRepository: typeof isGitRepositoryDefault;
5
- createWorktree: typeof createWorktreeDefault;
6
- getChanges: typeof getChangesDefault;
7
- mergeChanges: typeof mergeChangesDefault;
8
- }
9
- interface SpawnGitWorktreeOptions {
10
- agent: string;
11
- prompt: string;
12
- agentArgs: string[];
13
- basePath: string;
14
- targetBranch: string;
15
- runAgent: (input: {
16
- agent: string;
17
- prompt: string;
18
- args: string[];
19
- cwd: string;
20
- }) => Promise<CommandRunnerResult>;
21
- logger: (message: string) => void;
22
- dependencies?: Partial<SpawnGitWorktreeDependencies>;
23
- }
24
- export declare function spawnGitWorktree(options: SpawnGitWorktreeOptions): Promise<void>;
25
- export {};
@@ -1,139 +0,0 @@
1
- import { createWorktree as createWorktreeDefault, getChanges as getChangesDefault, isGitRepository as isGitRepositoryDefault, mergeChanges as mergeChangesDefault } from "../utils/worktree.js";
2
- const defaultDependencies = {
3
- isGitRepository: isGitRepositoryDefault,
4
- createWorktree: createWorktreeDefault,
5
- getChanges: getChangesDefault,
6
- mergeChanges: mergeChangesDefault
7
- };
8
- function resolveDependencies(overrides) {
9
- if (!overrides) {
10
- return defaultDependencies;
11
- }
12
- return {
13
- isGitRepository: overrides.isGitRepository ?? defaultDependencies.isGitRepository,
14
- createWorktree: overrides.createWorktree ?? defaultDependencies.createWorktree,
15
- getChanges: overrides.getChanges ?? defaultDependencies.getChanges,
16
- mergeChanges: overrides.mergeChanges ?? defaultDependencies.mergeChanges
17
- };
18
- }
19
- export async function spawnGitWorktree(options) {
20
- const deps = resolveDependencies(options.dependencies);
21
- const isRepo = await deps.isGitRepository(options.basePath);
22
- if (!isRepo) {
23
- throw new Error(`"${options.basePath}" is not a git repository.`);
24
- }
25
- const context = await deps.createWorktree(options.basePath);
26
- let shouldCleanup = false;
27
- const preserveAndThrow = (message, cause) => {
28
- options.logger(`Worktree preserved at ${context.path}`);
29
- const base = cause instanceof Error
30
- ? cause
31
- : cause
32
- ? new Error(String(cause))
33
- : undefined;
34
- const wrapped = new Error(message);
35
- if (base) {
36
- wrapped.cause = base;
37
- }
38
- wrapped.worktreeLogged = true;
39
- throw wrapped;
40
- };
41
- try {
42
- const initialResult = await runAgentWithContext({
43
- ...options,
44
- context
45
- });
46
- const trimmedStdout = initialResult.stdout.trim();
47
- if (trimmedStdout.length > 0) {
48
- options.logger(trimmedStdout);
49
- }
50
- const trimmedStderr = initialResult.stderr.trim();
51
- if (trimmedStderr.length > 0) {
52
- options.logger(trimmedStderr);
53
- }
54
- if (initialResult.exitCode !== 0) {
55
- return preserveAndThrow("Agent execution failed", initialResult);
56
- }
57
- const mergeResult = await deps.mergeChanges(context.path, options.targetBranch);
58
- if (mergeResult.outcome === "conflict") {
59
- await handleConflicts({
60
- options,
61
- context,
62
- mergeResult,
63
- dependencies: deps
64
- });
65
- shouldCleanup = true;
66
- return;
67
- }
68
- if (mergeResult.outcome === "no-changes") {
69
- options.logger("No changes detected; nothing to merge.");
70
- shouldCleanup = true;
71
- return;
72
- }
73
- shouldCleanup = true;
74
- options.logger("Worktree changes merged successfully.");
75
- }
76
- catch (error) {
77
- if (error instanceof Error &&
78
- error.worktreeLogged) {
79
- throw error;
80
- }
81
- preserveAndThrow(error instanceof Error ? error.message : "Unexpected failure", error);
82
- }
83
- finally {
84
- if (shouldCleanup) {
85
- await context.cleanup();
86
- }
87
- }
88
- }
89
- async function runAgentWithContext(input) {
90
- const { agent, prompt, agentArgs, runAgent, context } = input;
91
- const previousCwd = process.cwd();
92
- let changedDirectory = false;
93
- try {
94
- process.chdir(context.path);
95
- changedDirectory = true;
96
- }
97
- catch (error) {
98
- if (!(error instanceof Error) ||
99
- error.code !== "ERR_WORKER_UNSUPPORTED_OPERATION") {
100
- throw error;
101
- }
102
- }
103
- try {
104
- return await runAgent({
105
- agent,
106
- prompt,
107
- args: agentArgs,
108
- cwd: context.path
109
- });
110
- }
111
- finally {
112
- if (changedDirectory) {
113
- process.chdir(previousCwd);
114
- }
115
- }
116
- }
117
- async function handleConflicts(input) {
118
- const { options, context, mergeResult, dependencies } = input;
119
- const files = mergeResult.files.join(", ");
120
- options.logger(`Merge conflicts detected in: ${files}`);
121
- options.logger("Attempting automated conflict resolution.");
122
- const resolutionPrompt = `Merge conflicts in: ${files}. Resolve using git commands.`;
123
- const resolutionResult = await runAgentWithContext({
124
- agent: options.agent,
125
- prompt: resolutionPrompt,
126
- agentArgs: options.agentArgs,
127
- runAgent: options.runAgent,
128
- context
129
- });
130
- if (resolutionResult.exitCode !== 0) {
131
- throw new Error("Agent execution failed during conflict resolution.");
132
- }
133
- const finalMerge = await dependencies.mergeChanges(context.path, options.targetBranch);
134
- if (finalMerge.outcome !== "merged" && finalMerge.outcome !== "no-changes") {
135
- throw new Error("Merge failed after conflict resolution.");
136
- }
137
- options.logger("Conflicts resolved and merged successfully.");
138
- }
139
- //# sourceMappingURL=spawn-worktree.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-worktree.js","sourceRoot":"","sources":["../../src/commands/spawn-worktree.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,IAAI,qBAAqB,EACvC,UAAU,IAAI,iBAAiB,EAC/B,eAAe,IAAI,sBAAsB,EACzC,YAAY,IAAI,mBAAmB,EAGpC,MAAM,sBAAsB,CAAC;AAyB9B,MAAM,mBAAmB,GAAiC;IACxD,eAAe,EAAE,sBAAsB;IACvC,cAAc,EAAE,qBAAqB;IACrC,UAAU,EAAE,iBAAiB;IAC7B,YAAY,EAAE,mBAAmB;CAClC,CAAC;AAEF,SAAS,mBAAmB,CAC1B,SAAiD;IAEjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,OAAO;QACL,eAAe,EACb,SAAS,CAAC,eAAe,IAAI,mBAAmB,CAAC,eAAe;QAClE,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,mBAAmB,CAAC,cAAc;QAC9E,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,mBAAmB,CAAC,UAAU;QAClE,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,mBAAmB,CAAC,YAAY;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC;IAEhC,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,4BAA4B,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE;QAC5D,OAAO,CAAC,MAAM,CAAC,yBAAyB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,GACR,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACR,OAA+B,CAAC,KAAK,GAAG,IAAI,CAAC;QAChD,CAAC;QACA,OAAwC,CAAC,cAAc,GAAG,IAAI,CAAC;QAChE,MAAM,OAAO,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC;YAC9C,GAAG,OAAO;YACV,OAAO;SACR,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,gBAAgB,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CACzC,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,YAAY,CACrB,CAAC;QACF,IAAI,WAAW,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,eAAe,CAAC;gBACpB,OAAO;gBACP,OAAO;gBACP,WAAW;gBACX,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,aAAa,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,WAAW,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YACzC,OAAO,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;YACzD,aAAa,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QAED,aAAa,GAAG,IAAI,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,KAAK,YAAY,KAAK;YACrB,KAAsC,CAAC,cAAc,EACtD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,gBAAgB,CACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAC7D,KAAK,CACN,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,KAMlC;IACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YACxB,KAA+B,CAAC,IAAI,KAAK,kCAAkC,EAC5E,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC;YACpB,KAAK;YACL,MAAM;YACN,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,OAAO,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAK9B;IACC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,MAAM,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,uBAAuB,KAAK,+BAA+B,CAAC;IACrF,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC;QACjD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO;KACR,CAAC,CAAC;IACH,IAAI,gBAAgB,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,YAAY,CAChD,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,YAAY,CACrB,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;AAChE,CAAC"}
@@ -1,32 +0,0 @@
1
- import type { FileSystem } from "../utils/file-system.js";
2
- import { AgentRegistry } from "./agent-registry.js";
3
- export interface AgentConfigEntry {
4
- id: string;
5
- enabled: boolean;
6
- }
7
- export interface AgentConfig {
8
- $schema?: string;
9
- agents: AgentConfigEntry[];
10
- }
11
- interface AgentConfigManagerInit {
12
- fs: FileSystem;
13
- homeDir: string;
14
- registry: AgentRegistry;
15
- }
16
- export declare class AgentConfigManager {
17
- private readonly fs;
18
- private readonly registry;
19
- private readonly homeDir;
20
- private readonly configPath;
21
- private cachedConfig;
22
- constructor(init: AgentConfigManagerInit);
23
- getConfigPath(): string;
24
- loadConfig(): Promise<AgentConfig>;
25
- getEnabledAgents(): Promise<AgentConfigEntry[]>;
26
- updateAgent(update: AgentConfigEntry): Promise<void>;
27
- private readConfig;
28
- private mergeWithRegistry;
29
- private writeConfig;
30
- private ensureDirectory;
31
- }
32
- export {};