@agentmeshhq/agent 0.1.2 → 0.1.4
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/cli/index.js +3 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/start.d.ts +1 -1
- package/dist/cli/start.js +45 -12
- package/dist/cli/start.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/index.ts +3 -3
- package/src/cli/start.ts +51 -13
package/dist/cli/index.js
CHANGED
|
@@ -11,7 +11,7 @@ const program = new Command();
|
|
|
11
11
|
program
|
|
12
12
|
.name("agentmesh")
|
|
13
13
|
.description("AgentMesh Agent Wrapper - Turn any AI assistant into a dispatchable agent")
|
|
14
|
-
.version("0.1.
|
|
14
|
+
.version("0.1.4");
|
|
15
15
|
program
|
|
16
16
|
.command("init")
|
|
17
17
|
.description("Initialize AgentMesh configuration")
|
|
@@ -26,12 +26,12 @@ program
|
|
|
26
26
|
});
|
|
27
27
|
program
|
|
28
28
|
.command("start")
|
|
29
|
-
.description("Start an agent")
|
|
29
|
+
.description("Start an agent (runs in background by default)")
|
|
30
30
|
.requiredOption("-n, --name <name>", "Agent name")
|
|
31
31
|
.option("-c, --command <command>", "Command to run (default: opencode)")
|
|
32
32
|
.option("-w, --workdir <path>", "Working directory")
|
|
33
33
|
.option("-m, --model <model>", "Model identifier")
|
|
34
|
-
.option("-
|
|
34
|
+
.option("-f, --foreground", "Run in foreground (blocking)")
|
|
35
35
|
.action(async (options) => {
|
|
36
36
|
try {
|
|
37
37
|
await start(options);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/start.d.ts
CHANGED
package/dist/cli/start.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import path from "node:path";
|
|
1
4
|
import { AgentDaemon } from "../core/daemon.js";
|
|
2
5
|
import { loadConfig, getAgentState } from "../config/loader.js";
|
|
3
6
|
import { sessionExists, getSessionName } from "../core/tmux.js";
|
|
@@ -18,20 +21,50 @@ export async function start(options) {
|
|
|
18
21
|
if (existingState && sessionExists(sessionName)) {
|
|
19
22
|
console.log(pc.yellow(`Agent "${options.name}" is already running.`));
|
|
20
23
|
console.log(`Attach with: ${pc.cyan(`agentmesh attach ${options.name}`)}`);
|
|
21
|
-
process.exit(
|
|
24
|
+
process.exit(0);
|
|
22
25
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
//
|
|
29
|
-
await new Promise(() => { });
|
|
26
|
+
// If --foreground flag is set, run in foreground (blocking)
|
|
27
|
+
if (options.foreground) {
|
|
28
|
+
try {
|
|
29
|
+
const daemon = new AgentDaemon(options);
|
|
30
|
+
await daemon.start();
|
|
31
|
+
// Keep process alive
|
|
32
|
+
await new Promise(() => { });
|
|
30
33
|
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(pc.red(`Failed to start agent: ${error.message}`));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
31
39
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
// Default: run as background daemon
|
|
41
|
+
console.log(`Starting agent "${options.name}" in background...`);
|
|
42
|
+
// Get the path to this CLI
|
|
43
|
+
const cliPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../cli/index.js");
|
|
44
|
+
// Build args for the background process
|
|
45
|
+
const args = ["start", "--name", options.name, "--foreground"];
|
|
46
|
+
if (options.command)
|
|
47
|
+
args.push("--command", options.command);
|
|
48
|
+
if (options.workdir)
|
|
49
|
+
args.push("--workdir", options.workdir);
|
|
50
|
+
if (options.model)
|
|
51
|
+
args.push("--model", options.model);
|
|
52
|
+
// Spawn detached background process
|
|
53
|
+
const child = spawn("node", [cliPath, ...args], {
|
|
54
|
+
detached: true,
|
|
55
|
+
stdio: "ignore",
|
|
56
|
+
env: process.env,
|
|
57
|
+
});
|
|
58
|
+
child.unref();
|
|
59
|
+
console.log(pc.green(`Agent "${options.name}" started in background (PID: ${child.pid})`));
|
|
60
|
+
console.log();
|
|
61
|
+
console.log(`Attach to session:`);
|
|
62
|
+
console.log(` ${pc.cyan(`agentmesh attach ${options.name}`)}`);
|
|
63
|
+
console.log();
|
|
64
|
+
console.log(`Stop agent:`);
|
|
65
|
+
console.log(` ${pc.cyan(`agentmesh stop ${options.name}`)}`);
|
|
66
|
+
console.log();
|
|
67
|
+
console.log(`List agents:`);
|
|
68
|
+
console.log(` ${pc.cyan(`agentmesh list`)}`);
|
|
36
69
|
}
|
|
37
70
|
//# sourceMappingURL=start.js.map
|
package/dist/cli/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,MAAM,YAAY,CAAC;AAU5B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,aAAa,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,MAAM,YAAY,CAAC;AAU5B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,aAAa,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,qBAAqB;YACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAEjE,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,iBAAiB,CAClB,CAAC;IAEF,wCAAwC;IACxC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEvD,oCAAoC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,iCAAiC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
package/package.json
CHANGED
package/src/cli/index.ts
CHANGED
|
@@ -14,7 +14,7 @@ const program = new Command();
|
|
|
14
14
|
program
|
|
15
15
|
.name("agentmesh")
|
|
16
16
|
.description("AgentMesh Agent Wrapper - Turn any AI assistant into a dispatchable agent")
|
|
17
|
-
.version("0.1.
|
|
17
|
+
.version("0.1.4");
|
|
18
18
|
|
|
19
19
|
program
|
|
20
20
|
.command("init")
|
|
@@ -30,12 +30,12 @@ program
|
|
|
30
30
|
|
|
31
31
|
program
|
|
32
32
|
.command("start")
|
|
33
|
-
.description("Start an agent")
|
|
33
|
+
.description("Start an agent (runs in background by default)")
|
|
34
34
|
.requiredOption("-n, --name <name>", "Agent name")
|
|
35
35
|
.option("-c, --command <command>", "Command to run (default: opencode)")
|
|
36
36
|
.option("-w, --workdir <path>", "Working directory")
|
|
37
37
|
.option("-m, --model <model>", "Model identifier")
|
|
38
|
-
.option("-
|
|
38
|
+
.option("-f, --foreground", "Run in foreground (blocking)")
|
|
39
39
|
.action(async (options) => {
|
|
40
40
|
try {
|
|
41
41
|
await start(options);
|
package/src/cli/start.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import path from "node:path";
|
|
1
4
|
import { AgentDaemon } from "../core/daemon.js";
|
|
2
5
|
import { loadConfig, getAgentState } from "../config/loader.js";
|
|
3
6
|
import { sessionExists, getSessionName } from "../core/tmux.js";
|
|
@@ -8,7 +11,7 @@ export interface StartOptions {
|
|
|
8
11
|
command?: string;
|
|
9
12
|
workdir?: string;
|
|
10
13
|
model?: string;
|
|
11
|
-
|
|
14
|
+
foreground?: boolean;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
export async function start(options: StartOptions): Promise<void> {
|
|
@@ -31,20 +34,55 @@ export async function start(options: StartOptions): Promise<void> {
|
|
|
31
34
|
if (existingState && sessionExists(sessionName)) {
|
|
32
35
|
console.log(pc.yellow(`Agent "${options.name}" is already running.`));
|
|
33
36
|
console.log(`Attach with: ${pc.cyan(`agentmesh attach ${options.name}`)}`);
|
|
34
|
-
process.exit(
|
|
37
|
+
process.exit(0);
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
// If --foreground flag is set, run in foreground (blocking)
|
|
41
|
+
if (options.foreground) {
|
|
42
|
+
try {
|
|
43
|
+
const daemon = new AgentDaemon(options);
|
|
44
|
+
await daemon.start();
|
|
45
|
+
// Keep process alive
|
|
46
|
+
await new Promise(() => {});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error(pc.red(`Failed to start agent: ${(error as Error).message}`));
|
|
49
|
+
process.exit(1);
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
console.error(pc.red(`Failed to start agent: ${(error as Error).message}`));
|
|
48
|
-
process.exit(1);
|
|
51
|
+
return;
|
|
49
52
|
}
|
|
53
|
+
|
|
54
|
+
// Default: run as background daemon
|
|
55
|
+
console.log(`Starting agent "${options.name}" in background...`);
|
|
56
|
+
|
|
57
|
+
// Get the path to this CLI
|
|
58
|
+
const cliPath = path.resolve(
|
|
59
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
60
|
+
"../cli/index.js"
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
// Build args for the background process
|
|
64
|
+
const args = ["start", "--name", options.name, "--foreground"];
|
|
65
|
+
if (options.command) args.push("--command", options.command);
|
|
66
|
+
if (options.workdir) args.push("--workdir", options.workdir);
|
|
67
|
+
if (options.model) args.push("--model", options.model);
|
|
68
|
+
|
|
69
|
+
// Spawn detached background process
|
|
70
|
+
const child = spawn("node", [cliPath, ...args], {
|
|
71
|
+
detached: true,
|
|
72
|
+
stdio: "ignore",
|
|
73
|
+
env: process.env,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
child.unref();
|
|
77
|
+
|
|
78
|
+
console.log(pc.green(`Agent "${options.name}" started in background (PID: ${child.pid})`));
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(`Attach to session:`);
|
|
81
|
+
console.log(` ${pc.cyan(`agentmesh attach ${options.name}`)}`);
|
|
82
|
+
console.log();
|
|
83
|
+
console.log(`Stop agent:`);
|
|
84
|
+
console.log(` ${pc.cyan(`agentmesh stop ${options.name}`)}`);
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(`List agents:`);
|
|
87
|
+
console.log(` ${pc.cyan(`agentmesh list`)}`);
|
|
50
88
|
}
|