@agentmeshhq/agent 0.1.11 → 0.1.13

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 (74) hide show
  1. package/dist/__tests__/injector.test.d.ts +1 -0
  2. package/dist/__tests__/injector.test.js +26 -0
  3. package/dist/__tests__/injector.test.js.map +1 -0
  4. package/dist/__tests__/sandbox.test.d.ts +1 -0
  5. package/dist/__tests__/sandbox.test.js +362 -0
  6. package/dist/__tests__/sandbox.test.js.map +1 -0
  7. package/dist/cli/build.d.ts +6 -0
  8. package/dist/cli/build.js +111 -0
  9. package/dist/cli/build.js.map +1 -0
  10. package/dist/cli/deploy.d.ts +9 -0
  11. package/dist/cli/deploy.js +130 -0
  12. package/dist/cli/deploy.js.map +1 -0
  13. package/dist/cli/inbox.d.ts +5 -0
  14. package/dist/cli/inbox.js +123 -0
  15. package/dist/cli/inbox.js.map +1 -0
  16. package/dist/cli/index.js +159 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/issue.d.ts +42 -0
  19. package/dist/cli/issue.js +297 -0
  20. package/dist/cli/issue.js.map +1 -0
  21. package/dist/cli/local.d.ts +9 -0
  22. package/dist/cli/local.js +139 -0
  23. package/dist/cli/local.js.map +1 -0
  24. package/dist/cli/migrate.d.ts +8 -0
  25. package/dist/cli/migrate.js +167 -0
  26. package/dist/cli/migrate.js.map +1 -0
  27. package/dist/cli/ready.d.ts +5 -0
  28. package/dist/cli/ready.js +131 -0
  29. package/dist/cli/ready.js.map +1 -0
  30. package/dist/cli/slack.d.ts +3 -0
  31. package/dist/cli/slack.js +57 -0
  32. package/dist/cli/slack.js.map +1 -0
  33. package/dist/cli/start.d.ts +12 -0
  34. package/dist/cli/start.js +14 -0
  35. package/dist/cli/start.js.map +1 -1
  36. package/dist/cli/sync.d.ts +8 -0
  37. package/dist/cli/sync.js +154 -0
  38. package/dist/cli/sync.js.map +1 -0
  39. package/dist/cli/test.d.ts +8 -0
  40. package/dist/cli/test.js +110 -0
  41. package/dist/cli/test.js.map +1 -0
  42. package/dist/core/daemon.d.ts +31 -0
  43. package/dist/core/daemon.js +188 -28
  44. package/dist/core/daemon.js.map +1 -1
  45. package/dist/core/injector.d.ts +6 -1
  46. package/dist/core/injector.js +64 -1
  47. package/dist/core/injector.js.map +1 -1
  48. package/dist/core/issue-cache.d.ts +44 -0
  49. package/dist/core/issue-cache.js +75 -0
  50. package/dist/core/issue-cache.js.map +1 -0
  51. package/dist/core/registry.d.ts +5 -0
  52. package/dist/core/registry.js +8 -1
  53. package/dist/core/registry.js.map +1 -1
  54. package/dist/core/sandbox.d.ts +127 -0
  55. package/dist/core/sandbox.js +377 -0
  56. package/dist/core/sandbox.js.map +1 -0
  57. package/dist/core/tmux.js +8 -10
  58. package/dist/core/tmux.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/__tests__/injector.test.ts +29 -0
  61. package/src/__tests__/sandbox.test.ts +435 -0
  62. package/src/cli/build.ts +137 -0
  63. package/src/cli/deploy.ts +153 -0
  64. package/src/cli/index.ts +163 -0
  65. package/src/cli/local.ts +174 -0
  66. package/src/cli/migrate.ts +210 -0
  67. package/src/cli/slack.ts +69 -0
  68. package/src/cli/start.ts +22 -0
  69. package/src/cli/test.ts +141 -0
  70. package/src/core/daemon.ts +228 -37
  71. package/src/core/injector.ts +98 -1
  72. package/src/core/registry.ts +14 -1
  73. package/src/core/sandbox.ts +505 -0
  74. package/src/core/tmux.ts +9 -11
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Issue CLI Commands
3
+ * Integrated issue tracking for agents
4
+ */
5
+ import pc from "picocolors";
6
+ import { loadConfig, getAgentState } from "../config/loader.js";
7
+ import { loadCache, updateCacheIssues, queueChange, } from "../core/issue-cache.js";
8
+ async function getHubUrl() {
9
+ const config = loadConfig();
10
+ return config?.hubUrl || process.env.AGENTMESH_HUB_URL || "https://agentmeshhq.dev";
11
+ }
12
+ async function getToken() {
13
+ // Try agent state first
14
+ const state = getAgentState(process.env.AGENT_NAME || "");
15
+ if (state?.token)
16
+ return state.token;
17
+ // Try environment
18
+ if (process.env.AGENT_TOKEN)
19
+ return process.env.AGENT_TOKEN;
20
+ return null;
21
+ }
22
+ async function getWorkspace() {
23
+ const config = loadConfig();
24
+ return config?.workspace || process.env.AGENTMESH_WORKSPACE || "agentmesh";
25
+ }
26
+ async function apiRequest(method, path, body) {
27
+ const hubUrl = await getHubUrl();
28
+ const token = await getToken();
29
+ try {
30
+ const response = await fetch(`${hubUrl}${path}`, {
31
+ method,
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ ...(token && { Authorization: `Bearer ${token}` }),
35
+ },
36
+ body: body ? JSON.stringify(body) : undefined,
37
+ });
38
+ if (!response.ok) {
39
+ const error = await response.json().catch(() => ({ error: response.statusText }));
40
+ return { error: error.error || response.statusText };
41
+ }
42
+ if (response.status === 204) {
43
+ return { data: undefined };
44
+ }
45
+ const data = await response.json();
46
+ return { data: data };
47
+ }
48
+ catch (err) {
49
+ return { error: err.message };
50
+ }
51
+ }
52
+ export async function createIssue(options) {
53
+ const workspace = await getWorkspace();
54
+ console.log(pc.cyan("Creating issue..."));
55
+ const result = await apiRequest("POST", `/api/v1/workspaces/${workspace}/issues`, {
56
+ title: options.title,
57
+ description: options.description,
58
+ type: options.type || "task",
59
+ priority: options.priority || "P2",
60
+ project_id: options.project,
61
+ parent_issue_id: options.parent,
62
+ labels: options.labels,
63
+ });
64
+ if (result.error) {
65
+ // Queue for offline sync
66
+ if (result.error.includes("fetch") || result.error.includes("network")) {
67
+ console.log(pc.yellow("Offline - queuing change for later sync"));
68
+ queueChange(workspace, {
69
+ action: "create",
70
+ data: {
71
+ title: options.title,
72
+ description: options.description || null,
73
+ type: options.type || "task",
74
+ priority: options.priority || "P2",
75
+ project_id: options.project || null,
76
+ parent_issue_id: options.parent || null,
77
+ labels: options.labels || [],
78
+ },
79
+ queuedAt: new Date().toISOString(),
80
+ });
81
+ return;
82
+ }
83
+ console.error(pc.red(`Error: ${result.error}`));
84
+ process.exit(1);
85
+ }
86
+ console.log(pc.green(`Created issue: ${result.data?.issue_id}`));
87
+ }
88
+ export async function listIssues(options = {}) {
89
+ const workspace = await getWorkspace();
90
+ const params = new URLSearchParams();
91
+ if (options.status)
92
+ params.set("status", options.status);
93
+ if (options.type)
94
+ params.set("type", options.type);
95
+ if (options.priority)
96
+ params.set("priority", options.priority);
97
+ if (options.assignee === "me") {
98
+ const state = getAgentState(process.env.AGENT_NAME || "");
99
+ if (state?.agentId)
100
+ params.set("assignee_agent_id", state.agentId);
101
+ }
102
+ else if (options.assignee) {
103
+ params.set("assignee_agent_id", options.assignee);
104
+ }
105
+ if (options.project)
106
+ params.set("project_id", options.project);
107
+ if (options.limit)
108
+ params.set("limit", String(options.limit));
109
+ const result = await apiRequest("GET", `/api/v1/workspaces/${workspace}/issues?${params}`);
110
+ if (result.error) {
111
+ // Try cache
112
+ if (result.error.includes("fetch") || result.error.includes("network")) {
113
+ console.log(pc.yellow("Offline - showing cached issues"));
114
+ const cache = loadCache(workspace);
115
+ displayIssueList(cache.issues.filter((i) => {
116
+ if (options.status && i.status !== options.status)
117
+ return false;
118
+ if (options.type && i.type !== options.type)
119
+ return false;
120
+ if (options.priority && i.priority !== options.priority)
121
+ return false;
122
+ return true;
123
+ }));
124
+ return;
125
+ }
126
+ console.error(pc.red(`Error: ${result.error}`));
127
+ process.exit(1);
128
+ }
129
+ const issues = result.data?.issues || [];
130
+ // Update cache
131
+ updateCacheIssues(workspace, issues);
132
+ displayIssueList(issues);
133
+ }
134
+ function displayIssueList(issues) {
135
+ if (issues.length === 0) {
136
+ console.log(pc.dim("No issues found"));
137
+ return;
138
+ }
139
+ console.log();
140
+ console.log(pc.bold(`${issues.length} issue(s)`));
141
+ console.log();
142
+ for (const issue of issues) {
143
+ const statusColor = getStatusColor(issue.status);
144
+ const priorityColor = getPriorityColor(issue.priority);
145
+ console.log(`${pc.cyan(issue.issue_id)} ${statusColor(issue.status.padEnd(12))} ${priorityColor(issue.priority.padEnd(3))} ${issue.title}`);
146
+ }
147
+ }
148
+ function getStatusColor(status) {
149
+ switch (status) {
150
+ case "open":
151
+ return pc.yellow;
152
+ case "in_progress":
153
+ return pc.blue;
154
+ case "review":
155
+ return pc.magenta;
156
+ case "closed":
157
+ return pc.green;
158
+ default:
159
+ return pc.dim;
160
+ }
161
+ }
162
+ function getPriorityColor(priority) {
163
+ switch (priority) {
164
+ case "P0":
165
+ return pc.red;
166
+ case "P1":
167
+ return (s) => pc.yellow(pc.bold(s));
168
+ case "P2":
169
+ return pc.yellow;
170
+ case "P3":
171
+ return pc.dim;
172
+ case "P4":
173
+ return pc.dim;
174
+ default:
175
+ return pc.dim;
176
+ }
177
+ }
178
+ export async function showIssue(issueId) {
179
+ const workspace = await getWorkspace();
180
+ const result = await apiRequest("GET", `/api/v1/workspaces/${workspace}/issues/${issueId}`);
181
+ if (result.error) {
182
+ // Try cache
183
+ if (result.error.includes("fetch") || result.error.includes("network")) {
184
+ console.log(pc.yellow("Offline - showing cached issue"));
185
+ const cache = loadCache(workspace);
186
+ const issue = cache.issues.find((i) => i.issue_id === issueId);
187
+ if (!issue) {
188
+ console.error(pc.red(`Issue ${issueId} not found in cache`));
189
+ process.exit(1);
190
+ }
191
+ displayIssue(issue);
192
+ return;
193
+ }
194
+ console.error(pc.red(`Error: ${result.error}`));
195
+ process.exit(1);
196
+ }
197
+ displayIssue(result.data);
198
+ }
199
+ function displayIssue(issue) {
200
+ console.log();
201
+ console.log(pc.bold(pc.cyan(issue.issue_id)) + " " + issue.title);
202
+ console.log();
203
+ console.log(`Status: ${getStatusColor(issue.status)(issue.status)}`);
204
+ console.log(`Type: ${issue.type}`);
205
+ console.log(`Priority: ${getPriorityColor(issue.priority)(issue.priority)}`);
206
+ if (issue.assignee_agent_id) {
207
+ console.log(`Assignee: ${issue.assignee_agent_id}`);
208
+ }
209
+ if (issue.project_id) {
210
+ console.log(`Project: ${issue.project_id}`);
211
+ }
212
+ if (issue.labels && issue.labels.length > 0) {
213
+ console.log(`Labels: ${issue.labels.join(", ")}`);
214
+ }
215
+ if (issue.external_ref) {
216
+ console.log(`External: ${issue.external_provider}:${issue.external_ref}`);
217
+ if (issue.external_url) {
218
+ console.log(`URL: ${issue.external_url}`);
219
+ }
220
+ }
221
+ console.log();
222
+ console.log(`Created: ${issue.created_at}`);
223
+ console.log(`Updated: ${issue.updated_at}`);
224
+ if (issue.description) {
225
+ console.log();
226
+ console.log(pc.dim("Description:"));
227
+ console.log(issue.description);
228
+ }
229
+ }
230
+ export async function updateIssue(issueId, options) {
231
+ const workspace = await getWorkspace();
232
+ console.log(pc.cyan(`Updating issue ${issueId}...`));
233
+ const body = {};
234
+ if (options.title)
235
+ body.title = options.title;
236
+ if (options.description)
237
+ body.description = options.description;
238
+ if (options.type)
239
+ body.type = options.type;
240
+ if (options.priority)
241
+ body.priority = options.priority;
242
+ if (options.status)
243
+ body.status = options.status;
244
+ if (options.project)
245
+ body.project_id = options.project;
246
+ if (options.assignee)
247
+ body.assignee_agent_id = options.assignee;
248
+ if (options.labels)
249
+ body.labels = options.labels;
250
+ const result = await apiRequest("PATCH", `/api/v1/workspaces/${workspace}/issues/${issueId}`, body);
251
+ if (result.error) {
252
+ if (result.error.includes("fetch") || result.error.includes("network")) {
253
+ console.log(pc.yellow("Offline - queuing change for later sync"));
254
+ queueChange(workspace, {
255
+ action: "update",
256
+ issueId,
257
+ data: body,
258
+ queuedAt: new Date().toISOString(),
259
+ });
260
+ return;
261
+ }
262
+ console.error(pc.red(`Error: ${result.error}`));
263
+ process.exit(1);
264
+ }
265
+ console.log(pc.green(`Updated issue ${issueId}`));
266
+ }
267
+ export async function closeIssue(issueId) {
268
+ await updateIssue(issueId, { status: "closed" });
269
+ }
270
+ // ============================================================================
271
+ // Workflow Commands
272
+ // ============================================================================
273
+ export async function claimIssue(issueId) {
274
+ const workspace = await getWorkspace();
275
+ console.log(pc.cyan(`Claiming issue ${issueId}...`));
276
+ const result = await apiRequest("POST", `/api/v1/workspaces/${workspace}/issues/${issueId}/claim`);
277
+ if (result.error) {
278
+ console.error(pc.red(`Error: ${result.error}`));
279
+ process.exit(1);
280
+ }
281
+ console.log(pc.green(`Claimed issue ${issueId} - now assigned to you and in_progress`));
282
+ }
283
+ export async function handoffIssue(issueId, options) {
284
+ const workspace = await getWorkspace();
285
+ console.log(pc.cyan(`Creating handoff for issue ${issueId}...`));
286
+ const result = await apiRequest("POST", `/api/v1/workspaces/${workspace}/issues/${issueId}/handoff`, {
287
+ to_agent_id: options.to,
288
+ reason: options.reason,
289
+ });
290
+ if (result.error) {
291
+ console.error(pc.red(`Error: ${result.error}`));
292
+ process.exit(1);
293
+ }
294
+ console.log(pc.green(`Created handoff ${result.data?.handoff_id}`));
295
+ console.log(pc.dim("Note: Issue assignment unchanged. Target agent will see this in their inbox."));
296
+ }
297
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/cli/issue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function localUp(options?: {
2
+ detach?: boolean;
3
+ }): Promise<void>;
4
+ export declare function localDown(): Promise<void>;
5
+ export declare function localStatus(): Promise<void>;
6
+ export declare function localLogs(options?: {
7
+ follow?: boolean;
8
+ service?: string;
9
+ }): Promise<void>;
@@ -0,0 +1,139 @@
1
+ import { spawn, execSync, spawnSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ const COMPOSE_FILE = "docker/docker-compose.local.yml";
5
+ function findProjectRoot() {
6
+ // Try to find the project root by looking for docker-compose files
7
+ let dir = process.cwd();
8
+ for (let i = 0; i < 10; i++) {
9
+ const composePath = path.join(dir, COMPOSE_FILE);
10
+ try {
11
+ execSync(`test -f "${composePath}"`, { stdio: "ignore" });
12
+ return dir;
13
+ }
14
+ catch {
15
+ dir = path.dirname(dir);
16
+ }
17
+ }
18
+ throw new Error("Could not find AgentMesh project root. Make sure you're in the agentmesh repository.");
19
+ }
20
+ function getContainerStatus(containerName) {
21
+ try {
22
+ const result = execSync(`docker inspect --format='{{.State.Running}}:{{.State.Health.Status}}' ${containerName} 2>/dev/null`, { encoding: "utf-8" }).trim();
23
+ const [running, health] = result.split(":");
24
+ return {
25
+ running: running === "true",
26
+ healthy: health === "healthy",
27
+ };
28
+ }
29
+ catch {
30
+ return { running: false, healthy: false };
31
+ }
32
+ }
33
+ function getContainerPort(containerName, internalPort) {
34
+ try {
35
+ const result = execSync(`docker port ${containerName} ${internalPort} 2>/dev/null | head -1`, { encoding: "utf-8" }).trim();
36
+ // Format: 0.0.0.0:5432 -> 5432
37
+ const match = result.match(/:(\d+)$/);
38
+ return match ? match[1] : null;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ export async function localUp(options = {}) {
45
+ const projectRoot = findProjectRoot();
46
+ const composePath = path.join(projectRoot, COMPOSE_FILE);
47
+ console.log(pc.cyan("Starting AgentMesh local development stack..."));
48
+ console.log();
49
+ const args = ["compose", "-f", composePath, "up"];
50
+ if (options.detach !== false) {
51
+ args.push("-d");
52
+ }
53
+ args.push("--build");
54
+ const result = spawnSync("docker", args, {
55
+ cwd: projectRoot,
56
+ stdio: "inherit",
57
+ });
58
+ if (result.status !== 0) {
59
+ console.error(pc.red("Failed to start local stack"));
60
+ process.exit(1);
61
+ }
62
+ if (options.detach !== false) {
63
+ console.log();
64
+ console.log(pc.green("Local stack started successfully!"));
65
+ console.log();
66
+ await localStatus();
67
+ }
68
+ }
69
+ export async function localDown() {
70
+ const projectRoot = findProjectRoot();
71
+ const composePath = path.join(projectRoot, COMPOSE_FILE);
72
+ console.log(pc.cyan("Stopping AgentMesh local development stack..."));
73
+ const result = spawnSync("docker", ["compose", "-f", composePath, "down"], {
74
+ cwd: projectRoot,
75
+ stdio: "inherit",
76
+ });
77
+ if (result.status !== 0) {
78
+ console.error(pc.red("Failed to stop local stack"));
79
+ process.exit(1);
80
+ }
81
+ console.log(pc.green("Local stack stopped."));
82
+ }
83
+ export async function localStatus() {
84
+ const services = [
85
+ { name: "postgres", container: "agentmesh_postgres", port: 5432 },
86
+ { name: "valkey", container: "agentmesh_valkey", port: 6379 },
87
+ { name: "hub-api", container: "agentmesh_hub_api", port: 3777 },
88
+ { name: "hub-worker", container: "agentmesh_hub_worker", port: null },
89
+ { name: "admin", container: "agentmesh_admin", port: 3778 },
90
+ { name: "nginx", container: "agentmesh_nginx", port: 80 },
91
+ ];
92
+ console.log(pc.bold("AgentMesh Local Stack Status"));
93
+ console.log();
94
+ console.log(pc.dim("Service".padEnd(15) + "Status".padEnd(12) + "Health".padEnd(10) + "Port"));
95
+ console.log(pc.dim("-".repeat(50)));
96
+ let anyRunning = false;
97
+ for (const service of services) {
98
+ const status = getContainerStatus(service.container);
99
+ const port = service.port ? getContainerPort(service.container, service.port) : null;
100
+ const statusText = status.running ? pc.green("running") : pc.dim("stopped");
101
+ const healthText = status.running
102
+ ? status.healthy
103
+ ? pc.green("healthy")
104
+ : pc.yellow("starting")
105
+ : pc.dim("-");
106
+ const portText = port ? pc.cyan(port) : pc.dim("-");
107
+ console.log(`${service.name.padEnd(15)}${statusText.padEnd(20)}${healthText.padEnd(18)}${portText}`);
108
+ if (status.running)
109
+ anyRunning = true;
110
+ }
111
+ console.log();
112
+ if (anyRunning) {
113
+ const nginxPort = getContainerPort("agentmesh_nginx", 80) || "3000";
114
+ console.log(pc.bold("Access:"));
115
+ console.log(` Admin UI: ${pc.cyan(`http://localhost:${nginxPort}/admin`)}`);
116
+ console.log(` API: ${pc.cyan(`http://localhost:${nginxPort}/api`)}`);
117
+ console.log();
118
+ console.log(pc.bold("Commands:"));
119
+ console.log(` Stop: ${pc.cyan("agentmesh local down")}`);
120
+ console.log(` Logs: ${pc.cyan("docker compose -f docker/docker-compose.local.yml logs -f")}`);
121
+ }
122
+ else {
123
+ console.log(pc.dim("No services running. Start with: agentmesh local up"));
124
+ }
125
+ }
126
+ export async function localLogs(options = {}) {
127
+ const projectRoot = findProjectRoot();
128
+ const composePath = path.join(projectRoot, COMPOSE_FILE);
129
+ const args = ["compose", "-f", composePath, "logs"];
130
+ if (options.follow)
131
+ args.push("-f");
132
+ if (options.service)
133
+ args.push(options.service);
134
+ spawn("docker", args, {
135
+ cwd: projectRoot,
136
+ stdio: "inherit",
137
+ });
138
+ }
139
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/cli/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface MigrateOptions {
2
+ dev?: boolean;
3
+ staging?: boolean;
4
+ generate?: boolean;
5
+ status?: boolean;
6
+ rollback?: boolean;
7
+ }
8
+ export declare function migrate(options?: MigrateOptions): Promise<void>;
@@ -0,0 +1,167 @@
1
+ import { spawnSync, execSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ function findProjectRoot() {
5
+ let dir = process.cwd();
6
+ for (let i = 0; i < 10; i++) {
7
+ const packageJson = path.join(dir, "package.json");
8
+ const pnpmWorkspace = path.join(dir, "pnpm-workspace.yaml");
9
+ try {
10
+ execSync(`test -f "${packageJson}" && test -f "${pnpmWorkspace}"`, { stdio: "ignore" });
11
+ return dir;
12
+ }
13
+ catch {
14
+ dir = path.dirname(dir);
15
+ }
16
+ }
17
+ throw new Error("Could not find AgentMesh project root. Make sure you're in the agentmesh repository.");
18
+ }
19
+ function isLocalStackRunning() {
20
+ try {
21
+ const result = execSync('docker inspect --format="{{.State.Running}}" agentmesh_postgres 2>/dev/null', { encoding: "utf-8" }).trim();
22
+ return result === "true";
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ function getLocalDbUrl() {
29
+ // Default local stack connection
30
+ return "postgresql://postgres:postgres@localhost:5432/agentmesh";
31
+ }
32
+ export async function migrate(options = {}) {
33
+ const projectRoot = findProjectRoot();
34
+ if (options.generate) {
35
+ await generateMigration(projectRoot);
36
+ return;
37
+ }
38
+ if (options.status) {
39
+ await migrationStatus(projectRoot, options);
40
+ return;
41
+ }
42
+ if (options.rollback) {
43
+ console.error(pc.red("Rollback is not supported. Use a new migration to revert changes."));
44
+ process.exit(1);
45
+ }
46
+ await runMigrations(projectRoot, options);
47
+ }
48
+ async function generateMigration(projectRoot) {
49
+ console.log(pc.cyan("Generating migration from schema changes..."));
50
+ console.log();
51
+ const result = spawnSync("pnpm", ["--filter", "@agentmesh/hub", "db:generate"], {
52
+ cwd: projectRoot,
53
+ stdio: "inherit",
54
+ });
55
+ if (result.status !== 0) {
56
+ console.error(pc.red("Migration generation failed"));
57
+ process.exit(1);
58
+ }
59
+ console.log();
60
+ console.log(pc.green("Migration generated successfully!"));
61
+ console.log(pc.dim("Review the migration in packages/hub/drizzle/"));
62
+ }
63
+ async function migrationStatus(projectRoot, options) {
64
+ const env = getEnvironmentConfig(options);
65
+ console.log(pc.cyan(`Checking migration status for ${env.name}...`));
66
+ console.log();
67
+ // Check if we can connect
68
+ if (!env.canConnect) {
69
+ console.error(pc.red(`Cannot connect to ${env.name}: ${env.reason}`));
70
+ process.exit(1);
71
+ }
72
+ const result = spawnSync("pnpm", ["--filter", "@agentmesh/hub", "db:status"], {
73
+ cwd: projectRoot,
74
+ stdio: "inherit",
75
+ env: {
76
+ ...process.env,
77
+ DATABASE_URL: env.databaseUrl,
78
+ },
79
+ });
80
+ if (result.status !== 0) {
81
+ console.error(pc.red("Failed to check migration status"));
82
+ process.exit(1);
83
+ }
84
+ }
85
+ function getEnvironmentConfig(options) {
86
+ if (options.dev) {
87
+ // Dev environment uses cloud database via environment variable
88
+ const devUrl = process.env.AGENTMESH_DEV_DATABASE_URL;
89
+ if (!devUrl) {
90
+ return {
91
+ name: "dev (agentmeshhq.dev)",
92
+ databaseUrl: "",
93
+ canConnect: false,
94
+ reason: "AGENTMESH_DEV_DATABASE_URL environment variable not set",
95
+ };
96
+ }
97
+ return {
98
+ name: "dev (agentmeshhq.dev)",
99
+ databaseUrl: devUrl,
100
+ canConnect: true,
101
+ };
102
+ }
103
+ if (options.staging) {
104
+ const stagingUrl = process.env.AGENTMESH_STAGING_DATABASE_URL;
105
+ if (!stagingUrl) {
106
+ return {
107
+ name: "staging",
108
+ databaseUrl: "",
109
+ canConnect: false,
110
+ reason: "AGENTMESH_STAGING_DATABASE_URL environment variable not set",
111
+ };
112
+ }
113
+ return {
114
+ name: "staging",
115
+ databaseUrl: stagingUrl,
116
+ canConnect: true,
117
+ };
118
+ }
119
+ // Default: local stack
120
+ const localRunning = isLocalStackRunning();
121
+ if (!localRunning) {
122
+ return {
123
+ name: "local",
124
+ databaseUrl: getLocalDbUrl(),
125
+ canConnect: false,
126
+ reason: "Local stack is not running. Start it with: agentmesh local up",
127
+ };
128
+ }
129
+ return {
130
+ name: "local",
131
+ databaseUrl: getLocalDbUrl(),
132
+ canConnect: true,
133
+ };
134
+ }
135
+ async function runMigrations(projectRoot, options) {
136
+ const env = getEnvironmentConfig(options);
137
+ console.log(pc.cyan(`Running migrations against ${env.name}...`));
138
+ console.log();
139
+ if (!env.canConnect) {
140
+ console.error(pc.red(`Cannot connect to ${env.name}: ${env.reason}`));
141
+ process.exit(1);
142
+ }
143
+ // Safety confirmation for non-local environments
144
+ if (options.dev || options.staging) {
145
+ console.log(pc.yellow(`WARNING: You are about to run migrations against ${env.name}`));
146
+ console.log(pc.yellow("This will modify the database schema."));
147
+ console.log();
148
+ console.log(pc.dim("Press Ctrl+C to cancel, or wait 5 seconds to continue..."));
149
+ await new Promise((resolve) => setTimeout(resolve, 5000));
150
+ console.log();
151
+ }
152
+ const result = spawnSync("pnpm", ["--filter", "@agentmesh/hub", "db:migrate"], {
153
+ cwd: projectRoot,
154
+ stdio: "inherit",
155
+ env: {
156
+ ...process.env,
157
+ DATABASE_URL: env.databaseUrl,
158
+ },
159
+ });
160
+ if (result.status !== 0) {
161
+ console.error(pc.red("Migration failed"));
162
+ process.exit(1);
163
+ }
164
+ console.log();
165
+ console.log(pc.green(`Migrations applied successfully to ${env.name}!`));
166
+ }
167
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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"}