@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 @@
1
+ export {};
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { handleWebSocketEvent } from "../core/injector.js";
3
+ const { sendKeysMock } = vi.hoisted(() => ({
4
+ sendKeysMock: vi.fn(),
5
+ }));
6
+ vi.mock("../core/tmux.js", () => ({
7
+ sendKeys: sendKeysMock,
8
+ }));
9
+ describe("injector slack message handling", () => {
10
+ it("injects Slack message event into agent terminal", () => {
11
+ handleWebSocketEvent("concierge", {
12
+ type: "slack.message",
13
+ user: "U123",
14
+ channel: "C123",
15
+ text: "Can you check deployment status?",
16
+ ts: "1730000000.1234",
17
+ });
18
+ expect(sendKeysMock).toHaveBeenCalledTimes(1);
19
+ expect(sendKeysMock.mock.calls[0]?.[0]).toBe("concierge");
20
+ const injected = String(sendKeysMock.mock.calls[0]?.[1] ?? "");
21
+ // The injector formats as: [Slack from {user} in {channel}] {text}
22
+ expect(injected).toContain("[Slack from U123 in C123]");
23
+ expect(injected).toContain("Can you check deployment status?");
24
+ });
25
+ });
26
+ //# sourceMappingURL=injector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/__tests__/injector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACtB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,QAAQ,EAAE,YAAY;CACvB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,oBAAoB,CAAC,WAAW,EAAE;YAChC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,kCAAkC;YACxC,EAAE,EAAE,iBAAiB;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,mEAAmE;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,362 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
+ import { DockerSandbox } from "../core/sandbox.js";
5
+ // Mock child_process
6
+ vi.mock("node:child_process", () => ({
7
+ execSync: vi.fn(),
8
+ spawn: vi.fn(() => ({
9
+ on: vi.fn(),
10
+ unref: vi.fn(),
11
+ pid: 12345,
12
+ })),
13
+ spawnSync: vi.fn(() => ({
14
+ status: 0,
15
+ stdout: "mock-container-id\n",
16
+ stderr: "",
17
+ })),
18
+ }));
19
+ // Mock fs
20
+ vi.mock("node:fs", () => ({
21
+ default: {
22
+ existsSync: vi.fn(() => true),
23
+ },
24
+ }));
25
+ describe("DockerSandbox", () => {
26
+ const defaultConfig = {
27
+ agentName: "test-agent",
28
+ image: "agentmesh/agent-sandbox:latest",
29
+ workspacePath: "/tmp/workspace",
30
+ };
31
+ beforeEach(() => {
32
+ vi.clearAllMocks();
33
+ });
34
+ describe("constructor", () => {
35
+ it("should create sandbox with default values", () => {
36
+ const sandbox = new DockerSandbox(defaultConfig);
37
+ expect(sandbox.getContainerName()).toMatch(/^agentmesh-sandbox-test-agent-[a-f0-9]{8}$/);
38
+ });
39
+ it("should merge config with defaults", () => {
40
+ const config = {
41
+ ...defaultConfig,
42
+ cpuLimit: "0.5",
43
+ memoryLimit: "1g",
44
+ };
45
+ const sandbox = new DockerSandbox(config);
46
+ expect(sandbox).toBeDefined();
47
+ });
48
+ });
49
+ describe("validateMountPolicy", () => {
50
+ it("should deny sensitive paths by default", () => {
51
+ const sandbox = new DockerSandbox({
52
+ ...defaultConfig,
53
+ workspacePath: path.join(os.homedir(), ".ssh"),
54
+ });
55
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*\.ssh/);
56
+ });
57
+ it("should deny ~/.gnupg", () => {
58
+ const sandbox = new DockerSandbox({
59
+ ...defaultConfig,
60
+ workspacePath: path.join(os.homedir(), ".gnupg"),
61
+ });
62
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*\.gnupg/);
63
+ });
64
+ it("should deny ~/.aws", () => {
65
+ const sandbox = new DockerSandbox({
66
+ ...defaultConfig,
67
+ workspacePath: path.join(os.homedir(), ".aws"),
68
+ });
69
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*\.aws/);
70
+ });
71
+ it("should deny ~/.config/gcloud", () => {
72
+ const sandbox = new DockerSandbox({
73
+ ...defaultConfig,
74
+ workspacePath: path.join(os.homedir(), ".config/gcloud"),
75
+ });
76
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*gcloud/);
77
+ });
78
+ it("should deny ~/.kube", () => {
79
+ const sandbox = new DockerSandbox({
80
+ ...defaultConfig,
81
+ workspacePath: path.join(os.homedir(), ".kube"),
82
+ });
83
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*\.kube/);
84
+ });
85
+ it("should deny ~/.docker", () => {
86
+ const sandbox = new DockerSandbox({
87
+ ...defaultConfig,
88
+ workspacePath: path.join(os.homedir(), ".docker"),
89
+ });
90
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*\.docker/);
91
+ });
92
+ it("should deny /var/run/docker.sock", () => {
93
+ const sandbox = new DockerSandbox({
94
+ ...defaultConfig,
95
+ workspacePath: "/var/run/docker.sock",
96
+ });
97
+ expect(() => sandbox.validateMountPolicy()).toThrow(/Mount denied.*docker\.sock/);
98
+ });
99
+ it("should allow regular workspace paths", () => {
100
+ const sandbox = new DockerSandbox({
101
+ ...defaultConfig,
102
+ workspacePath: "/tmp/workspace",
103
+ });
104
+ expect(() => sandbox.validateMountPolicy()).not.toThrow();
105
+ });
106
+ it("should enforce custom allowed paths when specified", () => {
107
+ const sandbox = new DockerSandbox({
108
+ ...defaultConfig,
109
+ workspacePath: "/home/user/random",
110
+ });
111
+ const policy = {
112
+ allowedPaths: ["/home/user/allowed-only"],
113
+ deniedPaths: [],
114
+ };
115
+ expect(() => sandbox.validateMountPolicy(policy)).toThrow(/not in allowed paths/);
116
+ });
117
+ it("should allow path within custom allowed paths", () => {
118
+ const sandbox = new DockerSandbox({
119
+ ...defaultConfig,
120
+ workspacePath: "/home/user/projects/myrepo",
121
+ });
122
+ const policy = {
123
+ allowedPaths: ["/home/user/projects"],
124
+ deniedPaths: [],
125
+ };
126
+ expect(() => sandbox.validateMountPolicy(policy)).not.toThrow();
127
+ });
128
+ });
129
+ describe("checkDockerAvailable", () => {
130
+ it("should return true when docker is available", async () => {
131
+ const { spawnSync } = await import("node:child_process");
132
+ vi.mocked(spawnSync).mockReturnValueOnce({
133
+ status: 0,
134
+ stdout: "Docker version 24.0.0",
135
+ stderr: "",
136
+ pid: 1,
137
+ output: [],
138
+ signal: null,
139
+ });
140
+ expect(DockerSandbox.checkDockerAvailable()).toBe(true);
141
+ });
142
+ it("should return false when docker is not available", async () => {
143
+ const { spawnSync } = await import("node:child_process");
144
+ vi.mocked(spawnSync).mockReturnValueOnce({
145
+ status: 1,
146
+ stdout: "",
147
+ stderr: "docker: command not found",
148
+ pid: 1,
149
+ output: [],
150
+ signal: null,
151
+ });
152
+ expect(DockerSandbox.checkDockerAvailable()).toBe(false);
153
+ });
154
+ });
155
+ describe("listAll", () => {
156
+ it("should parse docker ps output correctly", async () => {
157
+ const { spawnSync } = await import("node:child_process");
158
+ vi.mocked(spawnSync).mockReturnValueOnce({
159
+ status: 0,
160
+ stdout: "abc123|agentmesh-sandbox-agent1-12345678|Up 5 minutes|agentmesh/agent-sandbox:latest\ndef456|agentmesh-sandbox-agent2-87654321|Exited (0)|agentmesh/agent-sandbox:latest",
161
+ stderr: "",
162
+ pid: 1,
163
+ output: [],
164
+ signal: null,
165
+ });
166
+ const containers = DockerSandbox.listAll();
167
+ expect(containers).toHaveLength(2);
168
+ expect(containers[0]).toEqual({
169
+ id: "abc123",
170
+ name: "agentmesh-sandbox-agent1-12345678",
171
+ status: "Up 5 minutes",
172
+ image: "agentmesh/agent-sandbox:latest",
173
+ });
174
+ });
175
+ it("should return empty array when no containers found", async () => {
176
+ const { spawnSync } = await import("node:child_process");
177
+ vi.mocked(spawnSync).mockReturnValueOnce({
178
+ status: 0,
179
+ stdout: "",
180
+ stderr: "",
181
+ pid: 1,
182
+ output: [],
183
+ signal: null,
184
+ });
185
+ const containers = DockerSandbox.listAll();
186
+ expect(containers).toEqual([]);
187
+ });
188
+ });
189
+ describe("findExisting", () => {
190
+ it("should find existing container for agent", async () => {
191
+ const { spawnSync } = await import("node:child_process");
192
+ vi.mocked(spawnSync).mockReturnValueOnce({
193
+ status: 0,
194
+ stdout: "abc123def456\n",
195
+ stderr: "",
196
+ pid: 1,
197
+ output: [],
198
+ signal: null,
199
+ });
200
+ const containerId = DockerSandbox.findExisting("test-agent");
201
+ expect(containerId).toBe("abc123def456");
202
+ });
203
+ it("should return null when no container exists", async () => {
204
+ const { spawnSync } = await import("node:child_process");
205
+ vi.mocked(spawnSync).mockReturnValueOnce({
206
+ status: 0,
207
+ stdout: "\n",
208
+ stderr: "",
209
+ pid: 1,
210
+ output: [],
211
+ signal: null,
212
+ });
213
+ const containerId = DockerSandbox.findExisting("nonexistent");
214
+ expect(containerId).toBeNull();
215
+ });
216
+ });
217
+ describe("container lifecycle", () => {
218
+ it("should build correct docker run arguments", async () => {
219
+ const { spawnSync } = await import("node:child_process");
220
+ const mockSpawnSync = vi.mocked(spawnSync);
221
+ // Mock image inspect (image exists)
222
+ mockSpawnSync.mockReturnValueOnce({
223
+ status: 0,
224
+ stdout: "{}",
225
+ stderr: "",
226
+ pid: 1,
227
+ output: [],
228
+ signal: null,
229
+ });
230
+ // Mock docker run
231
+ mockSpawnSync.mockReturnValueOnce({
232
+ status: 0,
233
+ stdout: "container-id-12345\n",
234
+ stderr: "",
235
+ pid: 1,
236
+ output: [],
237
+ signal: null,
238
+ });
239
+ const sandbox = new DockerSandbox({
240
+ agentName: "test",
241
+ image: "agentmesh/agent-sandbox:latest",
242
+ workspacePath: "/tmp/workspace",
243
+ cpuLimit: "2",
244
+ memoryLimit: "4g",
245
+ env: {
246
+ AGENT_TOKEN: "test-token",
247
+ },
248
+ });
249
+ await sandbox.pullImage();
250
+ await sandbox.start();
251
+ // Find the docker run call
252
+ const runCall = mockSpawnSync.mock.calls.find((call) => call[0] === "docker" && call[1]?.[0] === "run");
253
+ expect(runCall).toBeDefined();
254
+ const args = runCall[1];
255
+ // Check key arguments
256
+ expect(args).toContain("-d");
257
+ expect(args).toContain("--cpus");
258
+ expect(args).toContain("2");
259
+ expect(args).toContain("--memory");
260
+ expect(args).toContain("4g");
261
+ expect(args).toContain("--user");
262
+ expect(args).toContain("1000:1000");
263
+ expect(args).toContain("-e");
264
+ expect(args).toContain("AGENT_TOKEN=test-token");
265
+ });
266
+ it("should get container status", async () => {
267
+ const { spawnSync } = await import("node:child_process");
268
+ vi.mocked(spawnSync).mockReturnValueOnce({
269
+ status: 0,
270
+ stdout: "true|running|healthy",
271
+ stderr: "",
272
+ pid: 1,
273
+ output: [],
274
+ signal: null,
275
+ });
276
+ const sandbox = new DockerSandbox(defaultConfig);
277
+ // @ts-expect-error - accessing private property for testing
278
+ sandbox.containerId = "test-container";
279
+ const status = sandbox.getStatus();
280
+ expect(status).toEqual({
281
+ running: true,
282
+ status: "running",
283
+ health: "healthy",
284
+ });
285
+ });
286
+ it("should return not found status when container not started", async () => {
287
+ const { spawnSync } = await import("node:child_process");
288
+ vi.mocked(spawnSync).mockReturnValueOnce({
289
+ status: 1, // docker inspect fails for non-existent container
290
+ stdout: "",
291
+ stderr: "Error: No such container",
292
+ pid: 1,
293
+ output: [],
294
+ signal: null,
295
+ });
296
+ const sandbox = new DockerSandbox(defaultConfig);
297
+ const status = sandbox.getStatus();
298
+ expect(status).toEqual({
299
+ running: false,
300
+ status: "not found",
301
+ });
302
+ });
303
+ });
304
+ describe("resource limits", () => {
305
+ it("should apply default CPU limit of 1", () => {
306
+ const sandbox = new DockerSandbox(defaultConfig);
307
+ // The default is applied in constructor
308
+ expect(sandbox).toBeDefined();
309
+ });
310
+ it("should apply default memory limit of 2g", () => {
311
+ const sandbox = new DockerSandbox(defaultConfig);
312
+ expect(sandbox).toBeDefined();
313
+ });
314
+ it("should allow custom resource limits", () => {
315
+ const sandbox = new DockerSandbox({
316
+ ...defaultConfig,
317
+ cpuLimit: "0.5",
318
+ memoryLimit: "512m",
319
+ });
320
+ expect(sandbox).toBeDefined();
321
+ });
322
+ });
323
+ describe("serve mode", () => {
324
+ it("should configure serve mode with port", async () => {
325
+ const { spawnSync } = await import("node:child_process");
326
+ const mockSpawnSync = vi.mocked(spawnSync);
327
+ // Mock image inspect
328
+ mockSpawnSync.mockReturnValueOnce({
329
+ status: 0,
330
+ stdout: "{}",
331
+ stderr: "",
332
+ pid: 1,
333
+ output: [],
334
+ signal: null,
335
+ });
336
+ // Mock docker run
337
+ mockSpawnSync.mockReturnValueOnce({
338
+ status: 0,
339
+ stdout: "container-id\n",
340
+ stderr: "",
341
+ pid: 1,
342
+ output: [],
343
+ signal: null,
344
+ });
345
+ const sandbox = new DockerSandbox({
346
+ ...defaultConfig,
347
+ serveMode: true,
348
+ servePort: 3001,
349
+ });
350
+ await sandbox.pullImage();
351
+ await sandbox.start();
352
+ const runCall = mockSpawnSync.mock.calls.find((call) => call[0] === "docker" && call[1]?.[0] === "run");
353
+ expect(runCall).toBeDefined();
354
+ const args = runCall[1];
355
+ expect(args).toContain("-p");
356
+ expect(args).toContain("3001:3001");
357
+ expect(args).toContain("opencode");
358
+ expect(args).toContain("serve");
359
+ });
360
+ });
361
+ });
362
+ //# sourceMappingURL=sandbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.test.js","sourceRoot":"","sources":["../../src/__tests__/sandbox.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface BuildOptions {
2
+ docker?: boolean;
3
+ package?: string;
4
+ clean?: boolean;
5
+ }
6
+ export declare function build(options?: BuildOptions): Promise<void>;
@@ -0,0 +1,111 @@
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
+ export async function build(options = {}) {
20
+ const projectRoot = findProjectRoot();
21
+ if (options.docker) {
22
+ await buildDocker(projectRoot, options);
23
+ }
24
+ else {
25
+ await buildPackages(projectRoot, options);
26
+ }
27
+ }
28
+ async function buildPackages(projectRoot, options) {
29
+ console.log(pc.cyan("Building AgentMesh packages..."));
30
+ console.log();
31
+ const args = ["pnpm"];
32
+ if (options.package) {
33
+ args.push("--filter", options.package);
34
+ }
35
+ if (options.clean) {
36
+ console.log(pc.dim("Cleaning build artifacts..."));
37
+ const cleanResult = spawnSync("pnpm", ["-r", "exec", "rm", "-rf", "dist"], {
38
+ cwd: projectRoot,
39
+ stdio: "inherit",
40
+ });
41
+ if (cleanResult.status !== 0) {
42
+ console.warn(pc.yellow("Warning: Clean may have partially failed"));
43
+ }
44
+ console.log();
45
+ }
46
+ args.push("build");
47
+ const result = spawnSync(args[0], args.slice(1), {
48
+ cwd: projectRoot,
49
+ stdio: "inherit",
50
+ });
51
+ if (result.status !== 0) {
52
+ console.error(pc.red("Build failed"));
53
+ process.exit(1);
54
+ }
55
+ console.log();
56
+ console.log(pc.green("Build completed successfully!"));
57
+ }
58
+ async function buildDocker(projectRoot, options) {
59
+ console.log(pc.cyan("Building Docker images..."));
60
+ console.log();
61
+ // Check if docker is available
62
+ try {
63
+ execSync("docker --version", { stdio: "ignore" });
64
+ }
65
+ catch {
66
+ console.error(pc.red("Docker is not installed or not running"));
67
+ process.exit(1);
68
+ }
69
+ // Use docker buildx bake for multi-image builds
70
+ const dockerDir = path.join(projectRoot, "docker");
71
+ const dockerfilePath = path.join(dockerDir, "Dockerfile");
72
+ try {
73
+ execSync(`test -f "${dockerfilePath}"`, { stdio: "ignore" });
74
+ }
75
+ catch {
76
+ console.error(pc.red("Dockerfile not found at docker/Dockerfile"));
77
+ process.exit(1);
78
+ }
79
+ // Build using docker compose to leverage the existing setup
80
+ const composePath = path.join(dockerDir, "docker-compose.local.yml");
81
+ const args = ["compose", "-f", composePath, "build"];
82
+ if (options.package) {
83
+ // Map package names to service names
84
+ const serviceMap = {
85
+ "@agentmesh/hub": "hub-api",
86
+ "@agentmesh/admin": "admin",
87
+ hub: "hub-api",
88
+ admin: "admin",
89
+ };
90
+ const service = serviceMap[options.package] || options.package;
91
+ args.push(service);
92
+ }
93
+ const result = spawnSync("docker", args, {
94
+ cwd: projectRoot,
95
+ stdio: "inherit",
96
+ });
97
+ if (result.status !== 0) {
98
+ console.error(pc.red("Docker build failed"));
99
+ process.exit(1);
100
+ }
101
+ console.log();
102
+ console.log(pc.green("Docker images built successfully!"));
103
+ // List built images
104
+ console.log();
105
+ console.log(pc.bold("Built images:"));
106
+ const listResult = spawnSync("docker", ["images", "--filter", "reference=*agentmesh*", "--format", "{{.Repository}}:{{.Tag}}\t{{.Size}}"], { encoding: "utf-8" });
107
+ if (listResult.stdout) {
108
+ console.log(pc.dim(listResult.stdout));
109
+ }
110
+ }
111
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type DeployEnvironment = "dev" | "staging" | "prod";
2
+ export interface DeployOptions {
3
+ environment: DeployEnvironment;
4
+ skipBuild?: boolean;
5
+ skipPush?: boolean;
6
+ skipTests?: boolean;
7
+ dryRun?: boolean;
8
+ }
9
+ export declare function deploy(options: DeployOptions): Promise<void>;