swellai 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 (130) hide show
  1. package/README.md +711 -0
  2. package/dist/agents/linear-agent.d.ts +32 -0
  3. package/dist/agents/linear-agent.d.ts.map +1 -0
  4. package/dist/agents/linear-agent.js +263 -0
  5. package/dist/agents/linear-agent.js.map +1 -0
  6. package/dist/agents/planning-agent.d.ts +36 -0
  7. package/dist/agents/planning-agent.d.ts.map +1 -0
  8. package/dist/agents/planning-agent.js +248 -0
  9. package/dist/agents/planning-agent.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +102 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli/install.d.ts +11 -0
  15. package/dist/cli/install.d.ts.map +1 -0
  16. package/dist/cli/install.js +257 -0
  17. package/dist/cli/install.js.map +1 -0
  18. package/dist/cli/manifest.d.ts +27 -0
  19. package/dist/cli/manifest.d.ts.map +1 -0
  20. package/dist/cli/manifest.js +65 -0
  21. package/dist/cli/manifest.js.map +1 -0
  22. package/dist/index.d.ts +17 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +17 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/claude-agent-sdk.d.ts +73 -0
  27. package/dist/lib/claude-agent-sdk.d.ts.map +1 -0
  28. package/dist/lib/claude-agent-sdk.js +114 -0
  29. package/dist/lib/claude-agent-sdk.js.map +1 -0
  30. package/dist/lib/conversation-logger.d.ts +66 -0
  31. package/dist/lib/conversation-logger.d.ts.map +1 -0
  32. package/dist/lib/conversation-logger.js +159 -0
  33. package/dist/lib/conversation-logger.js.map +1 -0
  34. package/dist/lib/opencode.d.ts +68 -0
  35. package/dist/lib/opencode.d.ts.map +1 -0
  36. package/dist/lib/opencode.js +151 -0
  37. package/dist/lib/opencode.js.map +1 -0
  38. package/dist/lib/turso-schema.d.ts +13 -0
  39. package/dist/lib/turso-schema.d.ts.map +1 -0
  40. package/dist/lib/turso-schema.js +69 -0
  41. package/dist/lib/turso-schema.js.map +1 -0
  42. package/dist/lib/turso.d.ts +56 -0
  43. package/dist/lib/turso.d.ts.map +1 -0
  44. package/dist/lib/turso.js +144 -0
  45. package/dist/lib/turso.js.map +1 -0
  46. package/dist/lib/types.d.ts +31 -0
  47. package/dist/lib/types.d.ts.map +1 -0
  48. package/dist/lib/types.js +20 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/dist/lib/utils.d.ts +34 -0
  51. package/dist/lib/utils.d.ts.map +1 -0
  52. package/dist/lib/utils.js +72 -0
  53. package/dist/lib/utils.js.map +1 -0
  54. package/dist/scripts/build-templates.d.ts +17 -0
  55. package/dist/scripts/build-templates.d.ts.map +1 -0
  56. package/dist/scripts/build-templates.js +132 -0
  57. package/dist/scripts/build-templates.js.map +1 -0
  58. package/dist/scripts/claude-agent-runner.d.ts +28 -0
  59. package/dist/scripts/claude-agent-runner.d.ts.map +1 -0
  60. package/dist/scripts/claude-agent-runner.js +278 -0
  61. package/dist/scripts/claude-agent-runner.js.map +1 -0
  62. package/dist/src/agents/linear-agent.d.ts +32 -0
  63. package/dist/src/agents/linear-agent.d.ts.map +1 -0
  64. package/dist/src/agents/linear-agent.js +285 -0
  65. package/dist/src/agents/linear-agent.js.map +1 -0
  66. package/dist/src/agents/planning-agent.d.ts +36 -0
  67. package/dist/src/agents/planning-agent.d.ts.map +1 -0
  68. package/dist/src/agents/planning-agent.js +248 -0
  69. package/dist/src/agents/planning-agent.js.map +1 -0
  70. package/dist/src/cli/index.d.ts +3 -0
  71. package/dist/src/cli/index.d.ts.map +1 -0
  72. package/dist/src/cli/index.js +102 -0
  73. package/dist/src/cli/index.js.map +1 -0
  74. package/dist/src/cli/install.d.ts +11 -0
  75. package/dist/src/cli/install.d.ts.map +1 -0
  76. package/dist/src/cli/install.js +257 -0
  77. package/dist/src/cli/install.js.map +1 -0
  78. package/dist/src/cli/manifest.d.ts +27 -0
  79. package/dist/src/cli/manifest.d.ts.map +1 -0
  80. package/dist/src/cli/manifest.js +65 -0
  81. package/dist/src/cli/manifest.js.map +1 -0
  82. package/dist/src/index.d.ts +17 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/dist/src/index.js +17 -0
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/lib/claude-agent-sdk.d.ts +73 -0
  87. package/dist/src/lib/claude-agent-sdk.d.ts.map +1 -0
  88. package/dist/src/lib/claude-agent-sdk.js +114 -0
  89. package/dist/src/lib/claude-agent-sdk.js.map +1 -0
  90. package/dist/src/lib/conversation-logger.d.ts +66 -0
  91. package/dist/src/lib/conversation-logger.d.ts.map +1 -0
  92. package/dist/src/lib/conversation-logger.js +159 -0
  93. package/dist/src/lib/conversation-logger.js.map +1 -0
  94. package/dist/src/lib/opencode.d.ts +153 -0
  95. package/dist/src/lib/opencode.d.ts.map +1 -0
  96. package/dist/src/lib/opencode.js +153 -0
  97. package/dist/src/lib/opencode.js.map +1 -0
  98. package/dist/src/lib/turso-schema.d.ts +13 -0
  99. package/dist/src/lib/turso-schema.d.ts.map +1 -0
  100. package/dist/src/lib/turso-schema.js +69 -0
  101. package/dist/src/lib/turso-schema.js.map +1 -0
  102. package/dist/src/lib/turso.d.ts +56 -0
  103. package/dist/src/lib/turso.d.ts.map +1 -0
  104. package/dist/src/lib/turso.js +144 -0
  105. package/dist/src/lib/turso.js.map +1 -0
  106. package/dist/src/lib/types.d.ts +31 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +20 -0
  109. package/dist/src/lib/types.js.map +1 -0
  110. package/dist/src/lib/utils.d.ts +34 -0
  111. package/dist/src/lib/utils.d.ts.map +1 -0
  112. package/dist/src/lib/utils.js +72 -0
  113. package/dist/src/lib/utils.js.map +1 -0
  114. package/package.json +63 -0
  115. package/templates/.env.example +51 -0
  116. package/templates/agents/codebase-analyzer.md +121 -0
  117. package/templates/agents/codebase-locator.md +105 -0
  118. package/templates/agents/coding-agent.md +187 -0
  119. package/templates/agents/debug-agent.md +300 -0
  120. package/templates/prompts/consolidate-and-create-linear.md +282 -0
  121. package/templates/prompts/implementation.md +94 -0
  122. package/templates/prompts/plan-generation.md +171 -0
  123. package/templates/prompts/review.md +39 -0
  124. package/templates/prompts/verify.md +80 -0
  125. package/templates/scripts/claude-agent-runner.js +12887 -0
  126. package/templates/scripts/detect-runtime.sh +95 -0
  127. package/templates/scripts/linear-agent.js +1753 -0
  128. package/templates/scripts/planning-agent.js +1738 -0
  129. package/templates/workflows/claude-implement.yml +931 -0
  130. package/templates/workflows/claude-plan.yml +301 -0
@@ -0,0 +1,278 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * claude-agent-runner.ts
4
+ *
5
+ * CLI wrapper for running Claude Agent SDK queries.
6
+ * This script can be invoked by parallel-impl.sh and other automation scripts.
7
+ *
8
+ * Usage:
9
+ * echo "prompt" | claude-agent-runner.ts --cwd /path --model claude-opus-4-5-20251101 --mode implementation
10
+ *
11
+ * Arguments:
12
+ * --cwd <path> Working directory for the agent (required)
13
+ * --model <modelName> Model to use (default: claude-opus-4-5-20251101)
14
+ * --mode <mode> Execution mode: implementation or review (default: implementation)
15
+ *
16
+ * Input:
17
+ * Reads prompt from stdin (supports multiline)
18
+ *
19
+ * Output:
20
+ * - stdout: Final result JSON (type: 'result' message)
21
+ * - stderr: Progress logs and errors
22
+ *
23
+ * Exit codes:
24
+ * 0: Success
25
+ * 1: Error (authentication, SDK error, no result, etc.)
26
+ */
27
+ import { stdin } from "node:process";
28
+ import { runClaudeQuery } from "../src/lib/claude-agent-sdk.js";
29
+ import { createConversationLogger } from "../src/lib/conversation-logger.js";
30
+ // ============================================================================
31
+ // Review Decision Schema
32
+ // ============================================================================
33
+ const REVIEW_DECISION_SCHEMA = {
34
+ type: "object",
35
+ properties: {
36
+ best: {
37
+ type: "integer",
38
+ minimum: 1,
39
+ description: "The number (1-based) of the best implementation",
40
+ },
41
+ reasoning: {
42
+ type: "string",
43
+ description: "Detailed explanation for why this implementation was chosen",
44
+ },
45
+ },
46
+ required: ["best", "reasoning"],
47
+ additionalProperties: false,
48
+ };
49
+ function parseArgs() {
50
+ const args = process.argv.slice(2);
51
+ const parsedArgs = {
52
+ model: "claude-opus-4-5-20251101",
53
+ mode: "implementation",
54
+ };
55
+ for (let i = 0; i < args.length; i++) {
56
+ const arg = args[i];
57
+ switch (arg) {
58
+ case "--cwd":
59
+ parsedArgs.cwd = args[++i];
60
+ break;
61
+ case "--model":
62
+ parsedArgs.model = args[++i];
63
+ break;
64
+ case "--mode": {
65
+ const mode = args[++i];
66
+ if (mode !== "implementation" && mode !== "review") {
67
+ console.error(`Error: Invalid mode "${mode}". Must be "implementation" or "review".`);
68
+ process.exit(1);
69
+ }
70
+ parsedArgs.mode = mode;
71
+ break;
72
+ }
73
+ case "--help":
74
+ case "-h":
75
+ printUsage();
76
+ process.exit(0);
77
+ default:
78
+ console.error(`Error: Unknown argument "${arg}"`);
79
+ printUsage();
80
+ process.exit(1);
81
+ }
82
+ }
83
+ // Validate required arguments
84
+ if (!parsedArgs.cwd) {
85
+ console.error("Error: --cwd is required");
86
+ printUsage();
87
+ process.exit(1);
88
+ }
89
+ return parsedArgs;
90
+ }
91
+ function printUsage() {
92
+ console.error(`
93
+ Usage: claude-agent-runner.ts --cwd <path> [options]
94
+
95
+ Arguments:
96
+ --cwd <path> Working directory for the agent (required)
97
+ --model <modelName> Model to use (default: claude-opus-4-5-20251101)
98
+ --mode <mode> Execution mode: implementation or review (default: implementation)
99
+ -h, --help Show this help message
100
+
101
+ Input:
102
+ Reads prompt from stdin (supports multiline prompts)
103
+
104
+ Output:
105
+ - stdout: Final result JSON (the 'result' message from SDK)
106
+ - stderr: Progress logs and error messages
107
+
108
+ Examples:
109
+ # Implementation mode
110
+ echo "What is 2+2?" | claude-agent-runner.ts --cwd /tmp --mode implementation
111
+
112
+ # Review mode with structured output
113
+ echo "Review these implementations" | claude-agent-runner.ts --cwd /tmp --mode review
114
+
115
+ # Custom model
116
+ echo "Analyze this code" | claude-agent-runner.ts --cwd /tmp --model claude-sonnet-4-5
117
+
118
+ Environment Variables:
119
+ CLAUDE_CODE_OAUTH_TOKEN OAuth token (preferred)
120
+ ANTHROPIC_API_KEY API key (fallback)
121
+ `);
122
+ }
123
+ // ============================================================================
124
+ // Read Stdin
125
+ // ============================================================================
126
+ async function readStdin() {
127
+ return new Promise((resolve, reject) => {
128
+ const chunks = [];
129
+ stdin.on("data", (chunk) => {
130
+ chunks.push(chunk);
131
+ });
132
+ stdin.on("end", () => {
133
+ resolve(Buffer.concat(chunks).toString("utf-8"));
134
+ });
135
+ stdin.on("error", (error) => {
136
+ reject(error);
137
+ });
138
+ });
139
+ }
140
+ // ============================================================================
141
+ // Main Execution
142
+ // ============================================================================
143
+ async function main() {
144
+ // Parse command line arguments
145
+ const args = parseArgs();
146
+ console.error("");
147
+ console.error("=".repeat(60));
148
+ console.error("Claude Agent Runner");
149
+ console.error("=".repeat(60));
150
+ console.error(`CWD: ${args.cwd}`);
151
+ console.error(`Model: ${args.model}`);
152
+ console.error(`Mode: ${args.mode}`);
153
+ console.error("");
154
+ // Read prompt from stdin
155
+ console.error("Reading prompt from stdin...");
156
+ const prompt = await readStdin();
157
+ if (!prompt.trim()) {
158
+ console.error("Error: Empty prompt received from stdin");
159
+ process.exit(1);
160
+ }
161
+ console.error(`✓ Received prompt: ${prompt.length} characters`);
162
+ console.error("");
163
+ // Initialize conversation logger (optional)
164
+ const logger = await createConversationLogger();
165
+ if (logger) {
166
+ console.error(`✓ Conversation logging enabled`);
167
+ }
168
+ // Build MCP servers configuration
169
+ const mcpServers = {
170
+ deepwiki: {
171
+ type: "sse",
172
+ url: "https://mcp.deepwiki.com/sse",
173
+ },
174
+ };
175
+ // Add Linear MCP if API key is available
176
+ const linearApiKey = process.env.LINEAR_API_KEY;
177
+ if (linearApiKey) {
178
+ console.error(`✓ LINEAR_API_KEY found - enabling Linear MCP`);
179
+ mcpServers.linear = {
180
+ type: "stdio",
181
+ command: "npx",
182
+ args: ["-y", "@linear/mcp-server-linear"],
183
+ env: {
184
+ LINEAR_API_KEY: linearApiKey,
185
+ },
186
+ };
187
+ }
188
+ else {
189
+ console.error(`⚠️ LINEAR_API_KEY not found - Linear MCP disabled`);
190
+ console.error(` Set LINEAR_API_KEY to enable Linear issue fetching`);
191
+ }
192
+ // Build query options
193
+ const queryOptions = {
194
+ cwd: args.cwd,
195
+ model: args.model,
196
+ mode: args.mode,
197
+ mcpServers,
198
+ logger,
199
+ ...(args.mode === "review" ? { outputSchema: REVIEW_DECISION_SCHEMA } : {}),
200
+ };
201
+ try {
202
+ // Start logging session if logger is available
203
+ if (logger) {
204
+ await logger.startSession({
205
+ id: crypto.randomUUID(),
206
+ agentType: args.mode === "review" ? "review" : "implementation",
207
+ model: args.model,
208
+ provider: "anthropic",
209
+ });
210
+ }
211
+ // Run the query
212
+ console.error("Starting Claude query...");
213
+ console.error("");
214
+ let messageCount = 0;
215
+ let finalResult = null;
216
+ for await (const message of runClaudeQuery(prompt, queryOptions)) {
217
+ messageCount++;
218
+ // Log message type to stderr for debugging
219
+ console.error(`[Message ${messageCount}] Type: ${message.type}`);
220
+ // Check if this is the final result
221
+ if (message.type === "result") {
222
+ finalResult = message;
223
+ console.error(`[Message ${messageCount}] Subtype: ${message.subtype}`);
224
+ if (message.subtype === "success") {
225
+ console.error(`[Message ${messageCount}] ✓ Query completed successfully`);
226
+ }
227
+ else {
228
+ console.error(`[Message ${messageCount}] ✗ Query failed: ${message.subtype}`);
229
+ }
230
+ }
231
+ }
232
+ console.error("");
233
+ console.error("=".repeat(60));
234
+ // Check if we got a result
235
+ if (!finalResult) {
236
+ console.error("ERROR: No result message received from query");
237
+ console.error("=".repeat(60));
238
+ process.exit(1);
239
+ }
240
+ // Output the result to stdout as JSON
241
+ console.log(JSON.stringify(finalResult, null, 2));
242
+ console.error("SUCCESS: Result written to stdout");
243
+ console.error("=".repeat(60));
244
+ console.error("");
245
+ // End logging session successfully and sync to cloud
246
+ if (logger) {
247
+ await logger.endSession("completed");
248
+ await logger.syncToCloud();
249
+ }
250
+ process.exit(0);
251
+ }
252
+ catch (error) {
253
+ const errorMessage = error instanceof Error ? error.message : String(error);
254
+ console.error("");
255
+ console.error("=".repeat(60));
256
+ console.error("ERROR!");
257
+ console.error("=".repeat(60));
258
+ console.error(`Error: ${errorMessage}`);
259
+ if (error instanceof Error && error.stack) {
260
+ console.error("");
261
+ console.error("Stack trace:");
262
+ console.error(error.stack);
263
+ }
264
+ console.error("");
265
+ // End logging session with error and sync to cloud
266
+ if (logger) {
267
+ await logger.endSession("error", errorMessage);
268
+ await logger.syncToCloud();
269
+ }
270
+ process.exit(1);
271
+ }
272
+ }
273
+ // Run the main function
274
+ main().catch((error) => {
275
+ console.error("FATAL ERROR:", error);
276
+ process.exit(1);
277
+ });
278
+ //# sourceMappingURL=claude-agent-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-runner.js","sourceRoot":"","sources":["../../scripts/claude-agent-runner.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,sBAAsB,GAAG;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,iDAAiD;SAC/D;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6DAA6D;SAC3E;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;IAC/B,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAYF,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAqB;QACnC,KAAK,EAAE,0BAA0B;QACjC,IAAI,EAAE,gBAAgB;KACvB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,SAAS;gBACZ,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnD,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,0CAA0C,CAAC,CAAC;oBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB;gBACE,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;gBAClD,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,UAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bf,CAAC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,KAAK,UAAU,SAAS;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IAEzB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAElB,yBAAyB;IACzB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAEjC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAElB,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAChD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;IAED,kCAAkC;IAClC,MAAM,UAAU,GAAoC;QAClD,QAAQ,EAAE;YACR,IAAI,EAAE,KAAc;YACpB,GAAG,EAAE,8BAA8B;SACpC;KACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,UAAU,CAAC,MAAM,GAAG;YAClB,IAAI,EAAE,OAAgB;YACtB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,2BAA2B,CAAC;YACzC,GAAG,EAAE;gBACH,cAAc,EAAE,YAAY;aAC7B;SACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACzE,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU;QACV,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC;IAEF,IAAI,CAAC;QACH,+CAA+C;QAC/C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,YAAY,CAAC;gBACxB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB;gBAC/D,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,WAAW,GAAsB,IAAI,CAAC;QAE1C,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;YACjE,YAAY,EAAE,CAAC;YAEf,2CAA2C;YAC3C,OAAO,CAAC,KAAK,CAAC,YAAY,YAAY,WAAW,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAEjE,oCAAoC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,WAAW,GAAG,OAAO,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,YAAY,YAAY,cAAc,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAEvE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,YAAY,YAAY,kCAAkC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,YAAY,YAAY,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9B,2BAA2B;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAElD,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,qDAAqD;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,mDAAmD;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,wBAAwB;AACxB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * linear-agent.ts
4
+ *
5
+ * Consolidates three implementation plans from different AI providers and creates Linear issues.
6
+ * This is the v2 workflow approach that receives pre-generated plans via environment variables.
7
+ *
8
+ * Usage:
9
+ * linear-agent.ts
10
+ *
11
+ * Environment variables (all required):
12
+ * - ANTHROPIC_PLAN - Plan from Anthropic provider
13
+ * - OPENAI_PLAN - Plan from OpenAI provider
14
+ * - GOOGLE_PLAN - Plan from Google provider
15
+ * - GITHUB_ISSUE_URL - URL of the GitHub issue
16
+ * - ISSUE_TITLE - Title of the GitHub issue
17
+ * - LINEAR_TEAM_ID - Linear team ID
18
+ * - LINEAR_PROJECT_ID - Linear project ID (optional)
19
+ * - ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN - API key for consolidation agent
20
+ * - LINEAR_API_KEY - Linear API key for creating issues
21
+ *
22
+ * Optional:
23
+ * - MODEL (defaults to claude-opus-4-5)
24
+ *
25
+ * Examples:
26
+ * ANTHROPIC_PLAN="..." OPENAI_PLAN="..." GOOGLE_PLAN="..." \
27
+ * GITHUB_ISSUE_URL="..." ISSUE_TITLE="..." LINEAR_TEAM_ID="..." \
28
+ * ANTHROPIC_API_KEY=xxx LINEAR_API_KEY=xxx \
29
+ * linear-agent.ts
30
+ */
31
+ export {};
32
+ //# sourceMappingURL=linear-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/linear-agent.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
@@ -0,0 +1,285 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * linear-agent.ts
4
+ *
5
+ * Consolidates three implementation plans from different AI providers and creates Linear issues.
6
+ * This is the v2 workflow approach that receives pre-generated plans via environment variables.
7
+ *
8
+ * Usage:
9
+ * linear-agent.ts
10
+ *
11
+ * Environment variables (all required):
12
+ * - ANTHROPIC_PLAN - Plan from Anthropic provider
13
+ * - OPENAI_PLAN - Plan from OpenAI provider
14
+ * - GOOGLE_PLAN - Plan from Google provider
15
+ * - GITHUB_ISSUE_URL - URL of the GitHub issue
16
+ * - ISSUE_TITLE - Title of the GitHub issue
17
+ * - LINEAR_TEAM_ID - Linear team ID
18
+ * - LINEAR_PROJECT_ID - Linear project ID (optional)
19
+ * - ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN - API key for consolidation agent
20
+ * - LINEAR_API_KEY - Linear API key for creating issues
21
+ *
22
+ * Optional:
23
+ * - MODEL (defaults to claude-opus-4-5)
24
+ *
25
+ * Examples:
26
+ * ANTHROPIC_PLAN="..." OPENAI_PLAN="..." GOOGLE_PLAN="..." \
27
+ * GITHUB_ISSUE_URL="..." ISSUE_TITLE="..." LINEAR_TEAM_ID="..." \
28
+ * ANTHROPIC_API_KEY=xxx LINEAR_API_KEY=xxx \
29
+ * linear-agent.ts
30
+ */
31
+ import { access, readFile } from "node:fs/promises";
32
+ import { join } from "node:path";
33
+ import { createConversationLogger } from "../lib/conversation-logger.js";
34
+ import { createOpencodeServer, setupEventMonitoring } from "../lib/opencode.js";
35
+ import { extractTextFromParts, getApiKey, validateEnvVars } from "../lib/utils.js";
36
+ // Note: __filename and __dirname are not needed here anymore
37
+ // Prompts are resolved from process.cwd() in installed locations
38
+ // ============================================================================
39
+ // Configuration
40
+ // ============================================================================
41
+ const AGENT_NAME = "linear-agent";
42
+ const DEFAULT_MODEL = "claude-opus-4-5";
43
+ // Helper to find prompt file in multiple possible locations
44
+ async function findPromptFile() {
45
+ const possiblePaths = [
46
+ // Installed location (via installer)
47
+ join(process.cwd(), ".github", "claude-parallel", "prompts", "consolidate-and-create-linear.md"),
48
+ // Source repository location
49
+ join(process.cwd(), "prompts", "consolidate-and-create-linear.md"),
50
+ ];
51
+ for (const path of possiblePaths) {
52
+ try {
53
+ await access(path);
54
+ return path;
55
+ }
56
+ catch {
57
+ // File doesn't exist at this path, try next
58
+ }
59
+ }
60
+ throw new Error(`Could not find consolidate-and-create-linear.md in any of these locations:\n${possiblePaths.map((p) => ` - ${p}`).join("\n")}`);
61
+ }
62
+ // ============================================================================
63
+ // Main Execution
64
+ // ============================================================================
65
+ async function main() {
66
+ // Validate required environment variables
67
+ const requiredEnvVars = [
68
+ "ANTHROPIC_PLAN",
69
+ "OPENAI_PLAN",
70
+ "GOOGLE_PLAN",
71
+ "GITHUB_ISSUE_URL",
72
+ "ISSUE_TITLE",
73
+ "LINEAR_TEAM_ID",
74
+ "LINEAR_API_KEY",
75
+ ];
76
+ try {
77
+ validateEnvVars(requiredEnvVars);
78
+ }
79
+ catch (error) {
80
+ console.error(error instanceof Error ? error.message : String(error));
81
+ console.error("");
82
+ console.error("Usage: Set all required environment variables and run:");
83
+ console.error(" bun run linear-agent.ts");
84
+ process.exit(1);
85
+ }
86
+ // Get API key for Anthropic (consolidation provider)
87
+ const provider = "anthropic";
88
+ const apiKey = getApiKey(provider);
89
+ // Get configuration from environment
90
+ const anthropicPlan = process.env.ANTHROPIC_PLAN;
91
+ const openaiPlan = process.env.OPENAI_PLAN;
92
+ const googlePlan = process.env.GOOGLE_PLAN;
93
+ const githubIssueUrl = process.env.GITHUB_ISSUE_URL;
94
+ const issueTitle = process.env.ISSUE_TITLE;
95
+ const linearTeamId = process.env.LINEAR_TEAM_ID;
96
+ const linearProjectId = process.env.LINEAR_PROJECT_ID || "";
97
+ const linearApiKey = process.env.LINEAR_API_KEY;
98
+ const model = process.env.MODEL || DEFAULT_MODEL;
99
+ // Validate required environment variables
100
+ if (!anthropicPlan) {
101
+ throw new Error("ANTHROPIC_PLAN environment variable is required");
102
+ }
103
+ if (!openaiPlan) {
104
+ throw new Error("OPENAI_PLAN environment variable is required");
105
+ }
106
+ if (!googlePlan) {
107
+ throw new Error("GOOGLE_PLAN environment variable is required");
108
+ }
109
+ if (!githubIssueUrl) {
110
+ throw new Error("GITHUB_ISSUE_URL environment variable is required");
111
+ }
112
+ if (!issueTitle) {
113
+ throw new Error("ISSUE_TITLE environment variable is required");
114
+ }
115
+ if (!linearTeamId) {
116
+ throw new Error("LINEAR_TEAM_ID environment variable is required");
117
+ }
118
+ if (!linearApiKey) {
119
+ throw new Error("LINEAR_API_KEY environment variable is required");
120
+ }
121
+ console.error(`\n${"=".repeat(60)}`);
122
+ console.error(`Linear Agent - Plan Consolidation`);
123
+ console.error(`${"=".repeat(60)}`);
124
+ console.error(`Provider: ${provider}`);
125
+ console.error(`Model: ${model}`);
126
+ console.error(`Issue: ${issueTitle}`);
127
+ console.error(`GitHub URL: ${githubIssueUrl}`);
128
+ console.error(`Linear Team: ${linearTeamId}`);
129
+ console.error(`Linear Project: ${linearProjectId || "(none)"}`);
130
+ console.error("");
131
+ // Initialize conversation logger (optional)
132
+ const logger = await createConversationLogger();
133
+ if (logger) {
134
+ console.error(`✓ Conversation logging enabled`);
135
+ }
136
+ // Read external prompt template file
137
+ let promptTemplate;
138
+ let promptFile;
139
+ try {
140
+ promptFile = await findPromptFile();
141
+ promptTemplate = await readFile(promptFile, "utf-8");
142
+ console.error(`✓ Loaded prompt template from ${promptFile}`);
143
+ }
144
+ catch (error) {
145
+ const errorMessage = error instanceof Error ? error.message : String(error);
146
+ console.error(`✗ Failed to read prompt file: ${errorMessage}`);
147
+ console.error("Please create consolidate-and-create-linear.md file in the prompts directory");
148
+ process.exit(1);
149
+ }
150
+ // Replace placeholders in the prompt template
151
+ const prompt = promptTemplate
152
+ .replace(/\{\{ANTHROPIC_PLAN\}\}/g, anthropicPlan)
153
+ .replace(/\{\{OPENAI_PLAN\}\}/g, openaiPlan)
154
+ .replace(/\{\{GOOGLE_PLAN\}\}/g, googlePlan)
155
+ .replace(/\{\{GITHUB_ISSUE_URL\}\}/g, githubIssueUrl)
156
+ .replace(/\{\{ISSUE_TITLE\}\}/g, issueTitle)
157
+ .replace(/\{\{LINEAR_TEAM_ID\}\}/g, linearTeamId)
158
+ .replace(/\{\{LINEAR_PROJECT_ID\}\}/g, linearProjectId);
159
+ console.error(`✓ Filled prompt template with plans and context`);
160
+ // Create OpenCode server with linear agent configuration
161
+ const { client, server } = await createOpencodeServer({
162
+ provider,
163
+ apiKey,
164
+ model,
165
+ agentName: AGENT_NAME,
166
+ agentDescription: "Consolidate implementation plans and create Linear issues",
167
+ agentPrompt: prompt,
168
+ agentTools: {
169
+ write: false, // No file creation
170
+ edit: false, // No file modification
171
+ bash: true, // Allow shell commands
172
+ read: true, // Allow reading files
173
+ list: true, // Allow listing directories
174
+ glob: true, // Allow file pattern matching
175
+ grep: true, // Allow searching content
176
+ webfetch: true, // Allow web research
177
+ ...(linearApiKey && { "mcp__linear__*": true }), // Enable Linear MCP tools if available
178
+ },
179
+ agentPermissions: {
180
+ edit: "deny",
181
+ bash: "allow",
182
+ webfetch: "allow",
183
+ ...(linearApiKey && { "mcp__linear__*": "allow" }), // Allow Linear MCP tools if available
184
+ },
185
+ maxSteps: 30,
186
+ linearApiKey,
187
+ });
188
+ // Setup event monitoring
189
+ setupEventMonitoring(client, logger);
190
+ try {
191
+ // Start logging session if logger is available
192
+ if (logger) {
193
+ await logger.startSession({
194
+ id: crypto.randomUUID(),
195
+ agentType: "linear",
196
+ model,
197
+ provider,
198
+ });
199
+ }
200
+ // Create session
201
+ console.error(`Creating session...`);
202
+ const sessionResponse = await client.session.create({
203
+ body: { title: `Plan consolidation: ${issueTitle}` },
204
+ });
205
+ if (!sessionResponse.data) {
206
+ throw new Error("Failed to create session: no data in response");
207
+ }
208
+ const session = sessionResponse.data;
209
+ console.error(`✓ Session created: ${session.id}`);
210
+ // Send prompt to linear agent
211
+ console.error(`Consolidating plans and creating Linear issues with ${AGENT_NAME}...`);
212
+ console.error(`This may take a few moments while the AI consolidates the plans...`);
213
+ const promptResponse = await client.session.prompt({
214
+ path: { id: session.id },
215
+ body: {
216
+ model: {
217
+ providerID: provider,
218
+ modelID: model,
219
+ },
220
+ agent: AGENT_NAME, // Use the linear agent
221
+ parts: [{ type: "text", text: prompt }],
222
+ },
223
+ });
224
+ if (!promptResponse.data) {
225
+ throw new Error("Failed to get response: no data in response");
226
+ }
227
+ // Check for errors
228
+ const responseInfo = promptResponse.data.info;
229
+ if (responseInfo?.error) {
230
+ const err = responseInfo.error;
231
+ const errorName = err.name;
232
+ const errorData = "data" in err ? err.data : undefined;
233
+ const errorMessage = errorData && "message" in errorData ? errorData.message : JSON.stringify(errorData);
234
+ throw new Error(`Provider error: ${errorName}: ${errorMessage}`);
235
+ }
236
+ // Extract consolidated plan and Linear issue creation results
237
+ const resultText = extractTextFromParts(promptResponse.data.parts);
238
+ if (resultText.length === 0) {
239
+ throw new Error("Empty response from linear agent");
240
+ }
241
+ console.error("");
242
+ console.error(`${"=".repeat(60)}`);
243
+ console.error(`SUCCESS!`);
244
+ console.error(`${"=".repeat(60)}`);
245
+ console.error(`Consolidated plan and Linear issues: ${resultText.length} characters`);
246
+ console.error(`Session ID: ${session.id}`);
247
+ console.error("");
248
+ // Output result to stdout (this will be captured by workflows)
249
+ console.log(resultText);
250
+ // End logging session successfully and sync to cloud
251
+ if (logger) {
252
+ await logger.endSession("completed");
253
+ await logger.syncToCloud();
254
+ }
255
+ process.exit(0);
256
+ }
257
+ catch (error) {
258
+ const errorMessage = error instanceof Error ? error.message : String(error);
259
+ console.error("");
260
+ console.error(`${"=".repeat(60)}`);
261
+ console.error("ERROR!");
262
+ console.error(`${"=".repeat(60)}`);
263
+ console.error(`Error: ${errorMessage}`);
264
+ if (error instanceof Error && error.stack) {
265
+ console.error("Stack trace:", error.stack);
266
+ }
267
+ console.error("");
268
+ // End logging session with error and sync to cloud
269
+ if (logger) {
270
+ await logger.endSession("error", errorMessage);
271
+ await logger.syncToCloud();
272
+ }
273
+ process.exit(1);
274
+ }
275
+ finally {
276
+ console.error("Shutting down OpenCode server...");
277
+ server.close();
278
+ }
279
+ }
280
+ // Run the main function
281
+ main().catch((error) => {
282
+ console.error("FATAL ERROR:", error);
283
+ process.exit(1);
284
+ });
285
+ //# sourceMappingURL=linear-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-agent.js","sourceRoot":"","sources":["../../../src/agents/linear-agent.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnF,6DAA6D;AAC7D,iEAAiE;AAEjE,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,MAAM,UAAU,GAAG,cAAc,CAAC;AAClC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,4DAA4D;AAC5D,KAAK,UAAU,cAAc;IAC3B,MAAM,aAAa,GAAG;QACpB,qCAAqC;QACrC,IAAI,CACF,OAAO,CAAC,GAAG,EAAE,EACb,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,kCAAkC,CACnC;QACD,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kCAAkC,CAAC;KACnE,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+EAA+E,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjI,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,KAAK,UAAU,IAAI;IACjB,0CAA0C;IAC1C,MAAM,eAAe,GAAG;QACtB,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,kBAAkB;QAClB,aAAa;QACb,gBAAgB;QAChB,gBAAgB;KACjB,CAAC;IAEF,IAAI,CAAC;QACH,eAAe,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,WAAW,CAAC;IAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEnC,qCAAqC;IACrC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC;IAEjD,0CAA0C;IAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,eAAe,cAAc,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,mBAAmB,eAAe,IAAI,QAAQ,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAElB,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAChD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;IAED,qCAAqC;IACrC,IAAI,cAAsB,CAAC;IAC3B,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QACpC,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8CAA8C;IAC9C,MAAM,MAAM,GAAG,cAAc;SAC1B,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC;SACjD,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC;SAC3C,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC;SAC3C,OAAO,CAAC,2BAA2B,EAAE,cAAc,CAAC;SACpD,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC;SAC3C,OAAO,CAAC,yBAAyB,EAAE,YAAY,CAAC;SAChD,OAAO,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC;IAE1D,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAEjE,yDAAyD;IACzD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC;QACpD,QAAQ;QACR,MAAM;QACN,KAAK;QACL,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,2DAA2D;QAC7E,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE;YACV,KAAK,EAAE,KAAK,EAAE,mBAAmB;YACjC,IAAI,EAAE,KAAK,EAAE,uBAAuB;YACpC,IAAI,EAAE,IAAI,EAAE,uBAAuB;YACnC,IAAI,EAAE,IAAI,EAAE,sBAAsB;YAClC,IAAI,EAAE,IAAI,EAAE,4BAA4B;YACxC,IAAI,EAAE,IAAI,EAAE,8BAA8B;YAC1C,IAAI,EAAE,IAAI,EAAE,0BAA0B;YACtC,QAAQ,EAAE,IAAI,EAAE,qBAAqB;YACrC,GAAG,CAAC,YAAY,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,uCAAuC;SACzF;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;YACjB,GAAG,CAAC,YAAY,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,sCAAsC;SAC3F;QACD,QAAQ,EAAE,EAAE;QACZ,YAAY;KACb,CAAC,CAAC;IAEH,yBAAyB;IACzB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,+CAA+C;QAC/C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,YAAY,CAAC;gBACxB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,SAAS,EAAE,QAAQ;gBACnB,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB;QACjB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,UAAU,EAAE,EAAE;SACrD,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAElD,8BAA8B;QAC9B,OAAO,CAAC,KAAK,CAAC,uDAAuD,UAAU,KAAK,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACjD,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;YACxB,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,KAAK;iBACf;gBACD,KAAK,EAAE,UAAU,EAAE,uBAAuB;gBAC1C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,mBAAmB;QACnB,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;YAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,MAAM,SAAS,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,MAAM,YAAY,GAChB,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEtF,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,KAAK,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,8DAA8D;QAC9D,MAAM,UAAU,GAAG,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,wCAAwC,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,+DAA+D;QAC/D,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAExB,qDAAqD;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,mDAAmD;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,wBAAwB;AACxB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * planning-agent.ts
4
+ *
5
+ * Generates an implementation plan using a custom planning agent.
6
+ * The planning agent is configured for read-only operations with web research capabilities.
7
+ *
8
+ * Usage:
9
+ * planning-agent.ts <feature-description>
10
+ *
11
+ * Environment variables:
12
+ * - PROVIDER (optional, defaults to 'anthropic')
13
+ * Supported values: anthropic, openai, google
14
+ *
15
+ * API Keys (required based on provider):
16
+ * - ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN (for provider=anthropic)
17
+ * - OPENAI_API_KEY (for provider=openai)
18
+ * - GOOGLE_GENERATIVE_AI_API_KEY (for provider=google)
19
+ *
20
+ * - MODEL (optional, defaults to provider-specific model)
21
+ * anthropic: claude-haiku-4-5-20251001
22
+ * openai: gpt-4o
23
+ * google: gemini-2.0-flash-exp
24
+ *
25
+ * Examples:
26
+ * # Use default (Anthropic Claude)
27
+ * ANTHROPIC_API_KEY=xxx planning-agent.ts "Add user authentication"
28
+ *
29
+ * # Use OpenAI GPT-4
30
+ * PROVIDER=openai OPENAI_API_KEY=xxx planning-agent.ts "Add user authentication"
31
+ *
32
+ * # Use Google Gemini with custom model
33
+ * PROVIDER=google GOOGLE_GENERATIVE_AI_API_KEY=xxx MODEL=gemini-1.5-pro planning-agent.ts "Add user authentication"
34
+ */
35
+ export {};
36
+ //# sourceMappingURL=planning-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/planning-agent.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG"}