@untools/devflow 0.2.11 → 0.2.12
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.
- package/dist/agent/client.d.ts +50 -0
- package/dist/agent/client.d.ts.map +1 -0
- package/dist/agent/client.js +52 -0
- package/dist/agent/client.js.map +1 -0
- package/dist/auth/github-token.d.ts +16 -0
- package/dist/auth/github-token.d.ts.map +1 -0
- package/dist/auth/github-token.js +69 -0
- package/dist/auth/github-token.js.map +1 -0
- package/dist/auth/oauth.d.ts +16 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +146 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +363 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +78 -0
- package/dist/config.js.map +1 -0
- package/dist/copilot/client.d.ts +75 -0
- package/dist/copilot/client.d.ts.map +1 -0
- package/dist/copilot/client.js +226 -0
- package/dist/copilot/client.js.map +1 -0
- package/dist/copilot/flows/base.d.ts +47 -0
- package/dist/copilot/flows/base.d.ts.map +1 -0
- package/dist/copilot/flows/base.js +235 -0
- package/dist/copilot/flows/base.js.map +1 -0
- package/dist/copilot/flows/explain.d.ts +5 -0
- package/dist/copilot/flows/explain.d.ts.map +1 -0
- package/dist/copilot/flows/explain.js +76 -0
- package/dist/copilot/flows/explain.js.map +1 -0
- package/dist/copilot/flows/feature.d.ts +5 -0
- package/dist/copilot/flows/feature.d.ts.map +1 -0
- package/dist/copilot/flows/feature.js +83 -0
- package/dist/copilot/flows/feature.js.map +1 -0
- package/dist/copilot/flows/fix-bug.d.ts +5 -0
- package/dist/copilot/flows/fix-bug.d.ts.map +1 -0
- package/dist/copilot/flows/fix-bug.js +56 -0
- package/dist/copilot/flows/fix-bug.js.map +1 -0
- package/dist/copilot/flows/index.d.ts +17 -0
- package/dist/copilot/flows/index.d.ts.map +1 -0
- package/dist/copilot/flows/index.js +41 -0
- package/dist/copilot/flows/index.js.map +1 -0
- package/dist/copilot/flows/review-pr.d.ts +5 -0
- package/dist/copilot/flows/review-pr.d.ts.map +1 -0
- package/dist/copilot/flows/review-pr.js +84 -0
- package/dist/copilot/flows/review-pr.js.map +1 -0
- package/dist/copilot/session-registry.d.ts +12 -0
- package/dist/copilot/session-registry.d.ts.map +1 -0
- package/dist/copilot/session-registry.js +39 -0
- package/dist/copilot/session-registry.js.map +1 -0
- package/dist/copilot/tools/files.d.ts +53 -0
- package/dist/copilot/tools/files.d.ts.map +1 -0
- package/dist/copilot/tools/files.js +250 -0
- package/dist/copilot/tools/files.js.map +1 -0
- package/dist/copilot/tools/git.d.ts +37 -0
- package/dist/copilot/tools/git.d.ts.map +1 -0
- package/dist/copilot/tools/git.js +246 -0
- package/dist/copilot/tools/git.js.map +1 -0
- package/dist/copilot/tools/github.d.ts +36 -0
- package/dist/copilot/tools/github.d.ts.map +1 -0
- package/dist/copilot/tools/github.js +216 -0
- package/dist/copilot/tools/github.js.map +1 -0
- package/dist/copilot/tools/index.d.ts +26 -0
- package/dist/copilot/tools/index.d.ts.map +1 -0
- package/dist/copilot/tools/index.js +25 -0
- package/dist/copilot/tools/index.js.map +1 -0
- package/dist/copilot/tools/progress.d.ts +19 -0
- package/dist/copilot/tools/progress.d.ts.map +1 -0
- package/dist/copilot/tools/progress.js +87 -0
- package/dist/copilot/tools/progress.js.map +1 -0
- package/dist/copilot/tools/tests.d.ts +29 -0
- package/dist/copilot/tools/tests.d.ts.map +1 -0
- package/dist/copilot/tools/tests.js +136 -0
- package/dist/copilot/tools/tests.js.map +1 -0
- package/dist/copilot/tools/utils.d.ts +14 -0
- package/dist/copilot/tools/utils.d.ts.map +1 -0
- package/dist/copilot/tools/utils.js +89 -0
- package/dist/copilot/tools/utils.js.map +1 -0
- package/dist/credentials.d.ts +21 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +62 -0
- package/dist/credentials.js.map +1 -0
- package/dist/devflow/client.d.ts +16 -0
- package/dist/devflow/client.d.ts.map +1 -0
- package/dist/devflow/client.js +61 -0
- package/dist/devflow/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/pinga/client.d.ts +16 -0
- package/dist/pinga/client.d.ts.map +1 -0
- package/dist/pinga/client.js +61 -0
- package/dist/pinga/client.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/verify-full-flow.d.ts +2 -0
- package/dist/verify-full-flow.d.ts.map +1 -0
- package/dist/verify-full-flow.js +81 -0
- package/dist/verify-full-flow.js.map +1 -0
- package/package.json +8 -1
- package/.versionrc.json +0 -53
package/dist/cli.js
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import yargs from "yargs";
|
|
2
|
+
import { hideBin } from "yargs/helpers";
|
|
3
|
+
import { randomBytes } from "crypto";
|
|
4
|
+
import { createDefaultConfig, saveConfig, validateConfig, loadConfig, } from "./config.js";
|
|
5
|
+
import { initiateOAuthFlow } from "./auth/oauth.js";
|
|
6
|
+
import { PlatformClient } from "./agent/client.js";
|
|
7
|
+
import { WorkflowFactory } from "./copilot/flows/index.js";
|
|
8
|
+
import axios from "axios";
|
|
9
|
+
async function initCommand(options) {
|
|
10
|
+
console.log("\n🚀 DevFlow Agent Initialization\n");
|
|
11
|
+
const platformUrl = options.platformUrl ||
|
|
12
|
+
process.env.PLATFORM_URL ||
|
|
13
|
+
"https://devflow.aevr.space";
|
|
14
|
+
console.log("📍 Platform URL:", platformUrl);
|
|
15
|
+
console.log("⏳ Starting authentication flow...\n");
|
|
16
|
+
try {
|
|
17
|
+
// Initiate OAuth
|
|
18
|
+
const token = await initiateOAuthFlow({
|
|
19
|
+
platformUrl,
|
|
20
|
+
clientId: process.env.GITHUB_CLIENT_ID || "devflow-agent-cli",
|
|
21
|
+
redirectUri: process.env.OAUTH_REDIRECT_URI || "http://localhost:3333/callback",
|
|
22
|
+
});
|
|
23
|
+
console.log("✓ Authentication successful!");
|
|
24
|
+
// Token has agent_id not agentId
|
|
25
|
+
const agentId = token.agent_id || token.agentId;
|
|
26
|
+
console.log(`✓ Agent ID: ${agentId}`);
|
|
27
|
+
// Generate default agent name
|
|
28
|
+
const agentName = options.name || `agent-${randomBytes(4).toString("hex")}`;
|
|
29
|
+
// Register agent with platform to get JWT token
|
|
30
|
+
console.log("\n🔐 Registering agent with platform...");
|
|
31
|
+
let jwtToken;
|
|
32
|
+
try {
|
|
33
|
+
const registerResponse = await axios.post(`${platformUrl}/api/agents`, {
|
|
34
|
+
agentId,
|
|
35
|
+
name: agentName,
|
|
36
|
+
version: "0.1.0",
|
|
37
|
+
platform: process.platform,
|
|
38
|
+
capabilities: ["git", "copilot"],
|
|
39
|
+
}, {
|
|
40
|
+
headers: {
|
|
41
|
+
Authorization: `Bearer ${token.access_token}`, // GitHub token for initial auth
|
|
42
|
+
"Content-Type": "application/json",
|
|
43
|
+
},
|
|
44
|
+
timeout: 10000,
|
|
45
|
+
});
|
|
46
|
+
if (!registerResponse.data?.token) {
|
|
47
|
+
throw new Error("No JWT token received from platform");
|
|
48
|
+
}
|
|
49
|
+
jwtToken = registerResponse.data.token;
|
|
50
|
+
console.log("✓ Agent registered successfully");
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (axios.isAxiosError(error)) {
|
|
54
|
+
console.error(`❌ Agent registration failed: ${error.response?.status} ${error.response?.data?.error || error.message}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.error(`❌ Agent registration failed: ${error}`);
|
|
58
|
+
}
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// Fetch GitHub token from platform (managed SaaS mode)
|
|
62
|
+
let githubToken;
|
|
63
|
+
try {
|
|
64
|
+
console.log("\n🔍 Fetching GitHub credentials from platform...");
|
|
65
|
+
const credentialsResponse = await axios.get(`${platformUrl}/api/auth/agent/credentials`, {
|
|
66
|
+
headers: {
|
|
67
|
+
Authorization: `Bearer ${jwtToken}`, // Use JWT token, not OAuth token
|
|
68
|
+
},
|
|
69
|
+
timeout: 10000,
|
|
70
|
+
});
|
|
71
|
+
if (credentialsResponse.data?.credentials?.github_token) {
|
|
72
|
+
githubToken = credentialsResponse.data.credentials.github_token;
|
|
73
|
+
console.log("✓ GitHub credentials synced from platform");
|
|
74
|
+
// Validate the token
|
|
75
|
+
const { validateGitHubToken } = await import("./auth/github-token.js");
|
|
76
|
+
const validation = await validateGitHubToken(githubToken);
|
|
77
|
+
if (validation.valid) {
|
|
78
|
+
console.log(`✓ Token validated for user: ${validation.username}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.warn(`⚠️ Token validation failed: ${validation.error}`);
|
|
82
|
+
console.warn("You may need to update your GitHub credentials on the platform.");
|
|
83
|
+
githubToken = undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log("⚠️ No GitHub credentials found on platform.");
|
|
88
|
+
console.log(" Add your GitHub token at: " + platformUrl + "/settings");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.warn("\n⚠️ Could not fetch credentials from platform:");
|
|
93
|
+
if (axios.isAxiosError(error)) {
|
|
94
|
+
console.warn(` ${error.response?.status}: ${error.response?.data?.error || error.message}`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.warn(` ${error}`);
|
|
98
|
+
}
|
|
99
|
+
console.log("\n You can add GitHub credentials later via the platform UI.");
|
|
100
|
+
}
|
|
101
|
+
// Fallback: Manual token prompt (if platform doesn't have credentials)
|
|
102
|
+
if (!githubToken) {
|
|
103
|
+
console.log("\n📝 Alternatively, you can provide a GitHub token now:");
|
|
104
|
+
console.log(" (or skip and configure it later in the platform)");
|
|
105
|
+
try {
|
|
106
|
+
const { promptForGitHubToken, validateGitHubToken } = await import("./auth/github-token.js");
|
|
107
|
+
const manualToken = await promptForGitHubToken();
|
|
108
|
+
if (manualToken) {
|
|
109
|
+
const validation = await validateGitHubToken(manualToken);
|
|
110
|
+
if (validation.valid) {
|
|
111
|
+
githubToken = manualToken;
|
|
112
|
+
console.log(`✓ Token validated for user: ${validation.username}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.error(`❌ Token validation failed: ${validation.error}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error("\n⚠️ Token prompt error:", error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Create and save config
|
|
124
|
+
const config = createDefaultConfig(platformUrl, jwtToken, // Use JWT token from agent registration, not OAuth token
|
|
125
|
+
agentId, agentName, options.agentHostUrl || process.env.AGENT_HOST_URL);
|
|
126
|
+
// Add GitHub token if provided
|
|
127
|
+
if (githubToken) {
|
|
128
|
+
config.credentials = {
|
|
129
|
+
github_token: githubToken,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const validation = validateConfig(config);
|
|
133
|
+
if (!validation.valid) {
|
|
134
|
+
console.error("❌ Configuration validation failed:");
|
|
135
|
+
validation.errors.forEach((err) => console.error(` - ${err}`));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
saveConfig(config);
|
|
139
|
+
console.log("\n✅ Configuration complete!\n");
|
|
140
|
+
console.log("📋 Configuration Summary:");
|
|
141
|
+
console.log(` Agent: ${agentName}`);
|
|
142
|
+
console.log(` Platform: ${platformUrl}`);
|
|
143
|
+
if (githubToken) {
|
|
144
|
+
console.log(` GitHub: Configured ✓`);
|
|
145
|
+
}
|
|
146
|
+
console.log(` Config Location: ~/.devflow/config.json\n`);
|
|
147
|
+
console.log("🚀 Next Step:");
|
|
148
|
+
console.log(` devflow start\n`);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error(`\n❌ Initialization failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function startCommand(options) {
|
|
156
|
+
console.log("\n🚀 DevFlow Agent Starting\n");
|
|
157
|
+
const config = loadConfig();
|
|
158
|
+
if (!config) {
|
|
159
|
+
console.log("❌ No agent configured. Run 'devflow init' first.");
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
const validation = validateConfig(config);
|
|
163
|
+
if (!validation.valid) {
|
|
164
|
+
console.error("❌ Configuration invalid:");
|
|
165
|
+
validation.errors.forEach((err) => console.error(` - ${err}`));
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
if (options.debug) {
|
|
169
|
+
console.log("📋 Debug Configuration:");
|
|
170
|
+
console.log(` Agent: ${config.agent.name}`);
|
|
171
|
+
console.log(` Platform: ${config.platform.url}`);
|
|
172
|
+
console.log(` Poll Interval: ${options.pollInterval}ms\n`);
|
|
173
|
+
}
|
|
174
|
+
// Initialize platform client
|
|
175
|
+
const client = new PlatformClient(config.platform.url, config.agent.id, config.platform.api_key);
|
|
176
|
+
// Graceful shutdown
|
|
177
|
+
let running = true;
|
|
178
|
+
process.on("SIGINT", () => {
|
|
179
|
+
console.log("\n\n✓ Agent shutdown requested");
|
|
180
|
+
running = false;
|
|
181
|
+
setTimeout(() => process.exit(0), 1000);
|
|
182
|
+
});
|
|
183
|
+
// Send initial heartbeat to mark agent as online
|
|
184
|
+
try {
|
|
185
|
+
console.log("� Connecting to platform...");
|
|
186
|
+
await client.heartbeat();
|
|
187
|
+
console.log(`✓ Agent online: ${config.agent.id}`);
|
|
188
|
+
console.log(`✓ Listening for commands...\n`);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.error(`❌ Connection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
192
|
+
console.error(` Check that the agent is registered and platform is accessible.`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
// Main polling loop
|
|
196
|
+
let lastHeartbeat = 0;
|
|
197
|
+
const pollInterval = parseInt(process.env.POLL_INTERVAL_MS || String(options.pollInterval), 10);
|
|
198
|
+
const heartbeatInterval = parseInt(process.env.HEARTBEAT_INTERVAL_MS || "30000", 10);
|
|
199
|
+
while (running) {
|
|
200
|
+
try {
|
|
201
|
+
// Heartbeat at configured interval
|
|
202
|
+
if (Date.now() - lastHeartbeat > heartbeatInterval) {
|
|
203
|
+
if (options.debug) {
|
|
204
|
+
console.log("💓 Sending heartbeat...");
|
|
205
|
+
}
|
|
206
|
+
const heartbeatResponse = await client.heartbeat();
|
|
207
|
+
// Check if agent was disconnected remotely
|
|
208
|
+
if (heartbeatResponse.status === "disconnected") {
|
|
209
|
+
console.log("\n\n🔌 Agent was disconnected remotely.");
|
|
210
|
+
console.log(" Run 'devflow start' to reconnect.\n");
|
|
211
|
+
process.exit(0);
|
|
212
|
+
}
|
|
213
|
+
lastHeartbeat = Date.now();
|
|
214
|
+
if (options.debug) {
|
|
215
|
+
console.log("💓 Heartbeat acknowledged");
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Poll for commands
|
|
219
|
+
if (options.debug) {
|
|
220
|
+
// console.log("🔍 Polling for commands..."); // Too noisy if every 5s, maybe keep commented or use a higher verbosity level
|
|
221
|
+
process.stdout.write("."); // Use a dot to show activity without spamming newlines
|
|
222
|
+
}
|
|
223
|
+
const commands = await client.getCommands();
|
|
224
|
+
if (commands.length > 0) {
|
|
225
|
+
if (options.debug) {
|
|
226
|
+
console.log(`📨 Received ${commands.length} command(s)`);
|
|
227
|
+
}
|
|
228
|
+
commands.forEach((cmd) => {
|
|
229
|
+
console.log(`\n⚡ Executing: ${cmd.intent}`);
|
|
230
|
+
console.log(` Task ID: ${cmd.taskId}`);
|
|
231
|
+
// Send progress update
|
|
232
|
+
client.reportProgress(cmd.taskId, {
|
|
233
|
+
taskId: cmd.taskId,
|
|
234
|
+
status: "in_progress",
|
|
235
|
+
step: cmd.intent,
|
|
236
|
+
progress: 0.25,
|
|
237
|
+
});
|
|
238
|
+
// Execute task LOCALLY using embedded Workflow Engine
|
|
239
|
+
(async () => {
|
|
240
|
+
try {
|
|
241
|
+
console.log(`⚡ Executing task locally...`);
|
|
242
|
+
// Build context
|
|
243
|
+
const context = {
|
|
244
|
+
taskId: cmd.taskId,
|
|
245
|
+
intent: cmd.intent,
|
|
246
|
+
repo: cmd.repo || "",
|
|
247
|
+
localPath: process.cwd(),
|
|
248
|
+
branch: cmd.branch,
|
|
249
|
+
naturalLanguage: cmd.description || "",
|
|
250
|
+
source: {
|
|
251
|
+
channel: "cli",
|
|
252
|
+
chatId: "local",
|
|
253
|
+
messageId: cmd.taskId,
|
|
254
|
+
},
|
|
255
|
+
sessionId: undefined, // Session ID not available in CommandRequest
|
|
256
|
+
// Use local GitHub token from config (more secure than platform credentials)
|
|
257
|
+
localGitHubToken: config.credentials?.github_token,
|
|
258
|
+
};
|
|
259
|
+
// Set GitHub Token for Copilot SDK if available - REMOVED (Handled in WorkflowExecutor)
|
|
260
|
+
// if (cmd.credentials?.github) {
|
|
261
|
+
// process.env.GITHUB_TOKEN = cmd.credentials.github;
|
|
262
|
+
// }
|
|
263
|
+
// Execute workflow directly
|
|
264
|
+
// This uses the local file system and reports back to Platform via provided URL/Token
|
|
265
|
+
await WorkflowFactory.executeWorkflow(context, config.platform.url, config.platform.api_key);
|
|
266
|
+
// Usage of agent-host URL is DEPRECATED/REMOVED in favor of local execution
|
|
267
|
+
console.log(`✓ Workflow finished: ${cmd.taskId}`);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
271
|
+
// Report failure via progress update (failTask method doesn't exist)
|
|
272
|
+
await client.reportProgress(cmd.taskId, {
|
|
273
|
+
taskId: cmd.taskId,
|
|
274
|
+
status: "failed",
|
|
275
|
+
step: "Workflow execution failed",
|
|
276
|
+
progress: 1.0,
|
|
277
|
+
details: errorMsg,
|
|
278
|
+
});
|
|
279
|
+
console.error(`✗ Task failed: ${cmd.taskId} - ${errorMsg}`);
|
|
280
|
+
if (options.debug) {
|
|
281
|
+
console.error("Full Error Details:", error);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
})();
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
// Wait before next poll
|
|
288
|
+
await new Promise((resolve) => setTimeout(resolve, options.pollInterval));
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
console.error(`⚠ Poll error: ${error instanceof Error ? error.message : String(error)}`);
|
|
292
|
+
await new Promise((resolve) => setTimeout(resolve, options.pollInterval * 2));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// ===== CLI ROUTER =====
|
|
297
|
+
export async function runCLI() {
|
|
298
|
+
await yargs(hideBin(process.argv))
|
|
299
|
+
.command("init", "Initialize DevFlow Agent (requires authentication)", (y) => y
|
|
300
|
+
.option("name", {
|
|
301
|
+
alias: "n",
|
|
302
|
+
describe: "Agent name",
|
|
303
|
+
type: "string",
|
|
304
|
+
})
|
|
305
|
+
.option("platform-url", {
|
|
306
|
+
alias: "p",
|
|
307
|
+
describe: "Platform URL",
|
|
308
|
+
type: "string",
|
|
309
|
+
default: "https://devflow.aevr.space",
|
|
310
|
+
})
|
|
311
|
+
.option("agent-host-url", {
|
|
312
|
+
describe: "Agent Host URL (e.g. https://your-render-app.onrender.com)",
|
|
313
|
+
type: "string",
|
|
314
|
+
}), (argv) => initCommand({
|
|
315
|
+
name: argv.name,
|
|
316
|
+
platformUrl: argv["platform-url"],
|
|
317
|
+
agentHostUrl: argv["agent-host-url"],
|
|
318
|
+
}))
|
|
319
|
+
.command("start", "Start DevFlow Agent (polls for commands)", (y) => y
|
|
320
|
+
.option("poll-interval", {
|
|
321
|
+
alias: "i",
|
|
322
|
+
describe: "Polling interval in milliseconds",
|
|
323
|
+
type: "number",
|
|
324
|
+
default: 5000,
|
|
325
|
+
})
|
|
326
|
+
.option("debug", {
|
|
327
|
+
alias: "d",
|
|
328
|
+
describe: "Enable debug logging",
|
|
329
|
+
type: "boolean",
|
|
330
|
+
default: false,
|
|
331
|
+
}), (argv) => startCommand({
|
|
332
|
+
pollInterval: argv["poll-interval"],
|
|
333
|
+
debug: argv.debug,
|
|
334
|
+
}))
|
|
335
|
+
.command("status", "Show agent status", async () => {
|
|
336
|
+
const config = loadConfig();
|
|
337
|
+
if (!config) {
|
|
338
|
+
console.log("❌ No agent configured. Run 'devflow init' first.");
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
console.log("\n✓ DevFlow Agent Status\n");
|
|
342
|
+
console.log(` Agent: ${config.agent.name}`);
|
|
343
|
+
console.log(` ID: ${config.agent.id}`);
|
|
344
|
+
console.log(` Platform: ${config.platform.url}`);
|
|
345
|
+
console.log(` Config: ~/.devflow/config.json\n`);
|
|
346
|
+
})
|
|
347
|
+
.option("help", {
|
|
348
|
+
alias: "h",
|
|
349
|
+
describe: "Show help",
|
|
350
|
+
type: "boolean",
|
|
351
|
+
})
|
|
352
|
+
.epilogue(`
|
|
353
|
+
Examples:
|
|
354
|
+
devflow init
|
|
355
|
+
devflow start
|
|
356
|
+
devflow status
|
|
357
|
+
devflow start --debug
|
|
358
|
+
`)
|
|
359
|
+
.demandCommand(1, "Please specify a command")
|
|
360
|
+
.strict()
|
|
361
|
+
.parse();
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAKrC,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAsB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAuB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,KAAK,UAAU,WAAW,CAAC,OAAoB;IAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,4BAA4B,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC;YACpC,WAAW;YACX,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB;YAC7D,WAAW,EACT,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gCAAgC;SACrE,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,iCAAiC;QACjC,MAAM,OAAO,GAAI,KAAa,CAAC,QAAQ,IAAK,KAAa,CAAC,OAAO,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5E,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,IAAI,QAAgB,CAAC;QAErB,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,IAAI,CACvC,GAAG,WAAW,aAAa,EAC3B;gBACE,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,OAAO;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;aACjC,EACD;gBACE,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,CAAC,YAAY,EAAE,EAAE,gCAAgC;oBAC/E,cAAc,EAAE,kBAAkB;iBACnC;gBACD,OAAO,EAAE,KAAK;aACf,CACF,CAAC;YAEF,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CACX,gCAAgC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CACzG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uDAAuD;QACvD,IAAI,WAA+B,CAAC;QAEpC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,GAAG,CACzC,GAAG,WAAW,6BAA6B,EAC3C;gBACE,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE,iCAAiC;iBACvE;gBACD,OAAO,EAAE,KAAK;aACf,CACF,CAAC;YAEF,IAAI,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;gBACxD,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBAEzD,qBAAqB;gBACrB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACvE,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,WAAqB,CAAC,CAAC;gBAEpE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,gCAAgC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjE,OAAO,CAAC,IAAI,CACV,iEAAiE,CAClE,CAAC;oBACF,WAAW,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CACT,+BAA+B,GAAG,WAAW,GAAG,WAAW,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CACV,MAAM,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAChF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YAEnE,IAAI,CAAC;gBACH,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GACjD,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBAEzC,MAAM,WAAW,GAAG,MAAM,oBAAoB,EAAE,CAAC;gBAEjD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;oBAC1D,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;wBACrB,WAAW,GAAG,WAAW,CAAC;wBAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,mBAAmB,CAChC,WAAW,EACX,QAAQ,EAAE,yDAAyD;QACnE,OAAO,EACP,SAAS,EACT,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CACnD,CAAC;QAEF,+BAA+B;QAC/B,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,WAAW,GAAG;gBACnB,YAAY,EAAE,WAAW;aAC1B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;QAC3C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AASD,KAAK,UAAU,YAAY,CAAC,OAAqB;IAC/C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,YAAY,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,cAAc,CAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,EACnB,MAAM,CAAC,KAAK,CAAC,EAAE,EACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CACxB,CAAC;IAEF,oBAAoB;IACpB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,GAAG,KAAK,CAAC;QAChB,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,iDAAiD;IACjD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjF,CAAC;QACF,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,YAAY,GAAG,QAAQ,CAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAC5D,EAAE,CACH,CAAC;IACF,MAAM,iBAAiB,GAAG,QAAQ,CAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,EAC5C,EAAE,CACH,CAAC;IAEF,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,CAAC;YACH,mCAAmC;YACnC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,iBAAiB,EAAE,CAAC;gBACnD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAEnD,2CAA2C;gBAC3C,IAAI,iBAAiB,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;oBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,4HAA4H;gBAC5H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,uDAAuD;YACpF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE5C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;gBAC3D,CAAC;gBAED,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAmB,EAAE,EAAE;oBACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBAEzC,uBAAuB;oBACvB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;wBAChC,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,MAAM,EAAE,aAAa;wBACrB,IAAI,EAAE,GAAG,CAAC,MAAM;wBAChB,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;oBAEH,sDAAsD;oBACtD,CAAC,KAAK,IAAI,EAAE;wBACV,IAAI,CAAC;4BACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;4BAE3C,gBAAgB;4BAChB,MAAM,OAAO,GAAG;gCACd,MAAM,EAAE,GAAG,CAAC,MAAM;gCAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gCAClB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;gCACpB,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;gCACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gCAClB,eAAe,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;gCACtC,MAAM,EAAE;oCACN,OAAO,EAAE,KAAc;oCACvB,MAAM,EAAE,OAAO;oCACf,SAAS,EAAE,GAAG,CAAC,MAAM;iCACtB;gCACD,SAAS,EAAE,SAAS,EAAE,6CAA6C;gCACnE,6EAA6E;gCAC7E,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY;6BACnD,CAAC;4BAEF,wFAAwF;4BACxF,iCAAiC;4BACjC,uDAAuD;4BACvD,IAAI;4BAEJ,4BAA4B;4BAC5B,sFAAsF;4BACtF,MAAM,eAAe,CAAC,eAAe,CACnC,OAAO,EACP,MAAM,CAAC,QAAQ,CAAC,GAAG,EACnB,MAAM,CAAC,QAAQ,CAAC,OAAO,CACxB,CAAC;4BAEF,4EAA4E;4BAC5E,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;wBACpD,CAAC;wBAAC,OAAO,KAAU,EAAE,CAAC;4BACpB,MAAM,QAAQ,GACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAEzD,qEAAqE;4BACrE,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;gCACtC,MAAM,EAAE,GAAG,CAAC,MAAM;gCAClB,MAAM,EAAE,QAAQ;gCAChB,IAAI,EAAE,2BAA2B;gCACjC,QAAQ,EAAE,GAAG;gCACb,OAAO,EAAE,QAAQ;6BAClB,CAAC,CAAC;4BACH,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,MAAM,QAAQ,EAAE,CAAC,CAAC;4BAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gCAClB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;4BAC9C,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,CAAC,CAAC,CAAC;YACL,CAAC;YAED,wBAAwB;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1E,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,yBAAyB;AAEzB,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/B,OAAO,CACN,MAAM,EACN,oDAAoD,EACpD,CAAC,CAAO,EAAE,EAAE,CACV,CAAC;SACE,MAAM,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,MAAM,CAAC,cAAc,EAAE;QACtB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,4BAA4B;KACtC,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,QAAQ,EACN,4DAA4D;QAC9D,IAAI,EAAE,QAAQ;KACf,CAAC,EACN,CAAC,IAAS,EAAE,EAAE,CACZ,WAAW,CAAC;QACV,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QACjC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC;KACrC,CAAC,CACL;SACA,OAAO,CACN,OAAO,EACP,0CAA0C,EAC1C,CAAC,CAAO,EAAE,EAAE,CACV,CAAC;SACE,MAAM,CAAC,eAAe,EAAE;QACvB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,sBAAsB;QAChC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC,EACN,CAAC,IAAS,EAAE,EAAE,CACZ,YAAY,CAAC;QACX,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CACL;SACA,OAAO,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC,CAAC;SAED,MAAM,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,SAAS;KAChB,CAAC;SACD,QAAQ,CACP;;;;;;CAML,CACI;SACA,aAAa,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAC5C,MAAM,EAAE;SACR,KAAK,EAAE,CAAC;AACb,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface DevFlowConfig {
|
|
2
|
+
version: "1.0";
|
|
3
|
+
platform: {
|
|
4
|
+
url: string;
|
|
5
|
+
api_key: string;
|
|
6
|
+
};
|
|
7
|
+
agent: {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
};
|
|
12
|
+
agentHostUrl?: string;
|
|
13
|
+
credentials?: {
|
|
14
|
+
github_token?: string;
|
|
15
|
+
};
|
|
16
|
+
logging: {
|
|
17
|
+
level: "debug" | "info" | "warn" | "error";
|
|
18
|
+
format: "json" | "text";
|
|
19
|
+
};
|
|
20
|
+
execution: {
|
|
21
|
+
max_concurrent_tasks: number;
|
|
22
|
+
timeout_seconds: number;
|
|
23
|
+
cache_dir: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function ensureConfigDir(): void;
|
|
27
|
+
export declare function loadConfig(): DevFlowConfig | null;
|
|
28
|
+
export declare function saveConfig(config: DevFlowConfig): void;
|
|
29
|
+
export declare function getConfigPath(): string;
|
|
30
|
+
export declare function createDefaultConfig(platformUrl: string, apiKey: string, agentId: string, agentName: string, agentHostUrl?: string): DevFlowConfig;
|
|
31
|
+
export declare function validateConfig(config: DevFlowConfig): {
|
|
32
|
+
valid: boolean;
|
|
33
|
+
errors: string[];
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC3C,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IACF,SAAS,EAAE;QACT,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAKD,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,UAAU,IAAI,aAAa,GAAG,IAAI,CAYjD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAMtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,CAuBf;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAoBA"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
const CONFIG_DIR = path.join(homedir(), ".devflow");
|
|
5
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
6
|
+
export function ensureConfigDir() {
|
|
7
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
8
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
9
|
+
console.log(`✓ Created ~/.devflow directory`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function loadConfig() {
|
|
13
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const content = fs.readFileSync(CONFIG_FILE, "utf-8");
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error("Error loading config:", error);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function saveConfig(config) {
|
|
26
|
+
ensureConfigDir();
|
|
27
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
|
|
28
|
+
mode: 0o600, // Only readable by owner
|
|
29
|
+
});
|
|
30
|
+
console.log(`✓ Saved configuration to ~/.devflow/config.json`);
|
|
31
|
+
}
|
|
32
|
+
export function getConfigPath() {
|
|
33
|
+
return CONFIG_FILE;
|
|
34
|
+
}
|
|
35
|
+
export function createDefaultConfig(platformUrl, apiKey, agentId, agentName, agentHostUrl) {
|
|
36
|
+
return {
|
|
37
|
+
version: "1.0",
|
|
38
|
+
platform: {
|
|
39
|
+
url: platformUrl,
|
|
40
|
+
api_key: apiKey,
|
|
41
|
+
},
|
|
42
|
+
agent: {
|
|
43
|
+
id: agentId,
|
|
44
|
+
name: agentName,
|
|
45
|
+
version: "0.1.0",
|
|
46
|
+
},
|
|
47
|
+
agentHostUrl: agentHostUrl,
|
|
48
|
+
logging: {
|
|
49
|
+
level: "info",
|
|
50
|
+
format: "json",
|
|
51
|
+
},
|
|
52
|
+
execution: {
|
|
53
|
+
max_concurrent_tasks: 1,
|
|
54
|
+
timeout_seconds: 3600,
|
|
55
|
+
cache_dir: path.join(homedir(), ".devflow", "cache"),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function validateConfig(config) {
|
|
60
|
+
const errors = [];
|
|
61
|
+
if (!config.platform?.url) {
|
|
62
|
+
errors.push("Missing platform.url");
|
|
63
|
+
}
|
|
64
|
+
if (!config.platform?.api_key) {
|
|
65
|
+
errors.push("Missing platform.api_key");
|
|
66
|
+
}
|
|
67
|
+
if (!config.agent?.id) {
|
|
68
|
+
errors.push("Missing agent.id");
|
|
69
|
+
}
|
|
70
|
+
if (!config.agent?.name) {
|
|
71
|
+
errors.push("Missing agent.name");
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
valid: errors.length === 0,
|
|
75
|
+
errors,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export interface CopilotClientOptions {
|
|
2
|
+
model?: string;
|
|
3
|
+
streaming?: boolean;
|
|
4
|
+
tools?: any[];
|
|
5
|
+
mcpServers?: Record<string, any>;
|
|
6
|
+
githubToken?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SessionEvent {
|
|
9
|
+
type: "assistant.message_delta" | "assistant.turn_start" | "assistant.turn_end" | "session.usage_info" | "session.idle" | "tool.start" | "tool.end" | "tool.execution_start" | "tool.execution_complete" | "error";
|
|
10
|
+
data?: {
|
|
11
|
+
deltaContent?: string;
|
|
12
|
+
messageId?: string;
|
|
13
|
+
turnId?: string;
|
|
14
|
+
toolName?: string;
|
|
15
|
+
toolCallId?: string;
|
|
16
|
+
arguments?: any;
|
|
17
|
+
result?: any;
|
|
18
|
+
success?: boolean;
|
|
19
|
+
message?: string;
|
|
20
|
+
tokenLimit?: number;
|
|
21
|
+
currentTokens?: number;
|
|
22
|
+
messagesLength?: number;
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface Session {
|
|
27
|
+
sendAndWait(request: {
|
|
28
|
+
prompt: string;
|
|
29
|
+
}): Promise<any>;
|
|
30
|
+
on(callback: (event: SessionEvent) => void): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* CopilotClient - Wrapper for GitHub Copilot SDK
|
|
34
|
+
*
|
|
35
|
+
* This uses the real @github/copilot-sdk package installed from npm.
|
|
36
|
+
*
|
|
37
|
+
* Requirements:
|
|
38
|
+
* - GitHub Copilot CLI installed and authenticated (copilot --version)
|
|
39
|
+
* - @github/copilot-sdk package installed (npm install @github/copilot-sdk)
|
|
40
|
+
*/
|
|
41
|
+
export declare class CopilotClient {
|
|
42
|
+
private model;
|
|
43
|
+
private client;
|
|
44
|
+
private eventListeners;
|
|
45
|
+
constructor();
|
|
46
|
+
createSession(options: CopilotClientOptions): Promise<Session>;
|
|
47
|
+
stop(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export declare function getCopilotClient(): CopilotClient;
|
|
50
|
+
/**
|
|
51
|
+
* Tool Definition Helper
|
|
52
|
+
* Creates Copilot SDK-compatible tool definitions
|
|
53
|
+
*
|
|
54
|
+
* Example:
|
|
55
|
+
* const gitTool = defineTool("git_ops", {
|
|
56
|
+
* description: "Execute git operations",
|
|
57
|
+
* parameters: {
|
|
58
|
+
* type: "object",
|
|
59
|
+
* properties: { ... },
|
|
60
|
+
* required: [...]
|
|
61
|
+
* },
|
|
62
|
+
* handler: async (args) => ({ ... })
|
|
63
|
+
* });
|
|
64
|
+
*/
|
|
65
|
+
export declare function defineTool(name: string, definition: {
|
|
66
|
+
description: string;
|
|
67
|
+
parameters?: any;
|
|
68
|
+
handler?: (args: any) => Promise<any>;
|
|
69
|
+
}): {
|
|
70
|
+
description: string;
|
|
71
|
+
parameters?: any;
|
|
72
|
+
handler?: (args: any) => Promise<any>;
|
|
73
|
+
name: string;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/copilot/client.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EACA,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,oBAAoB,GACpB,cAAc,GACd,YAAY,GACZ,UAAU,GACV,sBAAsB,GACtB,yBAAyB,GACzB,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,GAAG,CAAC;QAChB,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,cAAc,CAA4C;;IAyB5D,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiM9D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B;AAID,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvC;iBAHc,MAAM;iBACN,GAAG;cACN,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;EAOxC"}
|